diff --git a/.drone.yml b/.drone.yml index 1a4a62c654..d6e723a7d8 100644 --- a/.drone.yml +++ b/.drone.yml @@ -43,4 +43,53 @@ trigger: - master - testnet event: - - push \ No newline at end of file + - push + +--- + +kind: pipeline +type: docker +name: kit_v2_sandbox_deployment + +steps: +- name: slack_noti_job_start + image: plugins/slack + settings: + channel: deployment + webhook: + from_secret: slack_webhook + template: "<{{build.link}}|HollaEx v2 Sandbox Deployment> - #{{build.number}} started on by {{build.author}}" + +- name: partymaker_version_tag + image: alpine + commands: + - echo "$(cat version)-sandbox" > .tags + - echo "Current version tag is :" && cat .tags + +- name: request_hollacloud_to_run_upgrade + image: bitholla/devops-tools:drone_hollacloud-201007 + environment: + HOLLAEX_EMAIL: + from_secret: hollaex_email + HOLLAEX_PASSWORD: + from_secret: hollaex_password + settings: + exchange_id: 176 + exchange_name: "Sandbox HollaEx" + +- name: slack_noti_job_end + image: plugins/slack + settings: + channel: deployment + webhook: + from_secret: slack_webhook + when: + status: [success, failure] + +trigger: + branch: + - 2.0 + event: + - push + + \ No newline at end of file diff --git a/.hollaex b/.hollaex index b93f926f87..c3a730e492 100644 --- a/.hollaex +++ b/.hollaex @@ -1 +1 @@ -Initialized by using hollaex-cli v1.6.0 +ENVIRONMENT_HOLLAEX_KIT_NETWORK=mainnet \ No newline at end of file diff --git a/Dockerfile b/Dockerfile index 9893c1b9fb..9fc8aee39e 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,16 +1,22 @@ -FROM bitholla/hollaex-core:1.23.1 +FROM node:10.15.3-stretch-slim -COPY ./mail /app/mail +RUN apt-get update && \ + apt-get install -y --no-install-recommends git python build-essential && \ + rm -rf /var/lib/apt/lists/* && \ + npm install pm2@3.2.7 sequelize-cli@5.4.0 mocha -g --loglevel=error -COPY ./plugins /app/plugins +ENV NODE_ENV=production -COPY ./db/migrations /app/db/migrations +COPY ./server /app -COPY ./db/seeders /app/db/seeders +WORKDIR /app -COPY ./db/models /app/db/models - -RUN npm install -g nodemon --loglevel=error && \ - cd plugins && npm install --loglevel=error && \ - for d in ./*/ ; do (cd "$d" && npm install --loglevel=error); done && \ +RUN npm install --loglevel=error && \ + pm2 update && \ cd /app/mail && npm install --loglevel=error + +EXPOSE 10010 + +EXPOSE 10080 + +ENTRYPOINT ["/entrypoint.sh"] diff --git a/README.md b/README.md index 9197cabeca..299554d0cf 100644 --- a/README.md +++ b/README.md @@ -1,24 +1,27 @@ # HollaEx Kit [![PRs Welcome](https://img.shields.io/badge/PRs-welcome-green.svg)](https://github.com/facebook/create-react-app/pulls) -HollaEx Kit is a full exchange launcher kit for building and running an exchange platfrom where you can list and trade any digital assets for your users. - -HollaEx Kit has 3 main components: -- HollaEx Core: HollaEx Core is a [docker image](https://cloud.docker.com/u/bitholla/repository/docker/bitholla/hollaex-core) which includes trading matching engine, real-time data stream, user management and general RESTful API management. -- HollaEx Web: Front-end Web application for user interface -- HollaEx CLI: Command Line Interface for interacting and deploying your exchange. +HollaEx Kit is an open source crypto exchange software that can be utilized to onboard your users and traders in order to run your white label exchange. In order to run the HollaEx Kit, you need to run HollaEx Server as the back-end and Web as your front-end user interface. HollaEx Kit automatically then connects to HollaEx Network where you have access to markets and liquidity for different digital assets. ## Get Started -HollaEx Kit provides simple (but powerful) CLI tool to help exchange operators setup and operate their exchange. Get started by install HollaEx CLI and following the [documentation](https://docs.bitholla.com) to start your own exchange. - +HollaEx Kit provides simple (but powerful) CLI tool to help exchange operators setup and operate the exchange. Get started by install HollaEx CLI and following the [documentation](https://docs.bitholla.com) to start your own exchange. ``` git clone https://github.com/bitholla/hollaex-kit.git bash install.sh ``` - Read more on our [Docs](https://docs.bitholla.com/hollaex-kit/get-started)! +## Developers + +Checkout Web for the front-end UI/UX modifications. + +Check out Server for back-end and server side operations and endpoints. + +Check out Plugins for developing seamless and flexible custom services that can be added to the HollaEx Kit. + +Check out HollaEx CLI (Command Line Interface) for interacting and deploying your exchange. + ## Community Join us on the [Forum](https://forum.bitholla.com) and feel free to raise any topic and ask questions from our active community. diff --git a/db/migrations/20170718084400-create-order.js b/db/migrations/20170718084400-create-order.js deleted file mode 100644 index 9b76d6c774..0000000000 --- a/db/migrations/20170718084400-create-order.js +++ /dev/null @@ -1,57 +0,0 @@ -'use strict'; - -module.exports = { - up: (queryInterface, Sequelize) => { - return queryInterface.createTable( - 'Orders', - { - id: { - allowNull: false, - unique: true, - primaryKey: true, - type: Sequelize.UUID - }, - created_by: { - type: Sequelize.INTEGER, - onDelete: 'CASCADE', - allowNull: false, - references: { - model: 'Users', - key: 'id' - } - }, - side: { - type: Sequelize.ENUM('buy', 'sell'), - allowNull: false - }, - type: { - type: Sequelize.ENUM('market', 'limit'), - allowNull: false - }, - size: { - type: Sequelize.BIGINT, - allowNull: false - }, - price: { - type: Sequelize.INTEGER, - allowNull: false - }, - created_at: { - allowNull: false, - type: Sequelize.DATE, - defaultValue: Sequelize.literal('NOW()') - }, - updated_at: { - allowNull: false, - type: Sequelize.DATE, - defaultValue: Sequelize.literal('NOW()') - } - }, - { - timestamps: true, - underscored: true - } - ); - }, - down: (queryInterface, Sequelize) => queryInterface.dropTable('Orders') -}; diff --git a/db/migrations/20170718131400-create-trade.js b/db/migrations/20170718131400-create-trade.js deleted file mode 100644 index c89c57e7fd..0000000000 --- a/db/migrations/20170718131400-create-trade.js +++ /dev/null @@ -1,55 +0,0 @@ -'use strict'; - -module.exports = { - up: (queryInterface, Sequelize) => { - return queryInterface.createTable( - 'Trades', - { - id: { - allowNull: false, - autoIncrement: true, - primaryKey: true, - type: Sequelize.INTEGER - }, - maker_id: { - type: Sequelize.INTEGER, - allowNull: false, - references: { - model: 'Users', - key: 'id' - } - }, - taker_id: { - type: Sequelize.INTEGER, - allowNull: false, - references: { - model: 'Users', - key: 'id' - } - }, - side: { - type: Sequelize.ENUM('buy', 'sell'), - allowNull: false - }, - size: { - type: Sequelize.BIGINT, - allowNull: false - }, - price: { - type: Sequelize.INTEGER, - allowNull: false - }, - timestamp: { - defaultValue: Sequelize.literal('NOW()'), - allowNull: false, - type: Sequelize.DATE - } - }, - { - timestamps: false, - underscored: true - } - ); - }, - down: (queryInterface, Sequelize) => queryInterface.dropTable('Trades') -}; \ No newline at end of file diff --git a/db/migrations/20170718150000-create-balance.js b/db/migrations/20170718150000-create-balance.js deleted file mode 100644 index 61c833c774..0000000000 --- a/db/migrations/20170718150000-create-balance.js +++ /dev/null @@ -1,54 +0,0 @@ -'use strict'; - -const { DataTypes } = require('sequelize'); -const { BALANCE_KEYS } = require('../../constants'); - -const balances = {}; -BALANCE_KEYS.forEach(balance => { - balances[balance] = { - type: DataTypes.DOUBLE, - allowNull: false, - defaultValue: 0 - }; -}); - -module.exports = { - up: (queryInterface, Sequelize) => { - return queryInterface.createTable( - 'Balances', - { - id: { - allowNull: false, - autoIncrement: true, - primaryKey: true, - type: Sequelize.INTEGER - }, - user_id: { - type: Sequelize.INTEGER, - onDelete: 'CASCADE', - allowNull: false, - unique: true, - references: { - model: 'Users', - key: 'id' - } - }, - created_at: { - allowNull: false, - type: Sequelize.DATE, - defaultValue: Sequelize.literal('NOW()') - }, - updated_at: { - allowNull: false, - type: Sequelize.DATE, - defaultValue: Sequelize.literal('NOW()') - } - }, - { - timestamps: true, - underscored: true - } - ); - }, - down: (queryInterface, Sequelize) => queryInterface.dropTable('Balances') -}; diff --git a/db/migrations/20170720075000-create-deposit.js b/db/migrations/20170720075000-create-deposit.js deleted file mode 100644 index 8b93779259..0000000000 --- a/db/migrations/20170720075000-create-deposit.js +++ /dev/null @@ -1,60 +0,0 @@ -'use strict'; - -module.exports = { - up: (queryInterface, Sequelize) => { - return queryInterface.createTable( - 'Deposits', - { - id: { - allowNull: false, - autoIncrement: true, - primaryKey: true, - type: Sequelize.INTEGER - }, - user_id: { - type: Sequelize.INTEGER, - onDelete: 'CASCADE', - allowNull: false, - references: { - model: 'Users', - key: 'id' - } - }, - address: { - type: Sequelize.STRING, - defaultValue: '' - }, - transaction_id: { - type: Sequelize.STRING, - allowNull: false - }, - status: { - type: Sequelize.BOOLEAN, - defaultValue: false - }, - amount: { - type: Sequelize.DOUBLE, - allowNull: false - }, - type: { - type: Sequelize.STRING, - allowNull: false - }, - currency: { - type: Sequelize.STRING, - allowNull: false - }, - created_at: { - allowNull: false, - type: Sequelize.DATE, - defaultValue: Sequelize.literal('NOW()') - } - }, - { - timestamps: true, - underscored: true - } - ); - }, - down: (queryInterface, Sequelize) => queryInterface.dropTable('Deposits') -}; \ No newline at end of file diff --git a/db/migrations/20170801082800-add-maker-fee-trade.js b/db/migrations/20170801082800-add-maker-fee-trade.js deleted file mode 100644 index 3b751df6bb..0000000000 --- a/db/migrations/20170801082800-add-maker-fee-trade.js +++ /dev/null @@ -1,14 +0,0 @@ -'use strict'; - -const TABLE = 'Trades'; -const COLUMN = 'maker_fee'; - -module.exports = { - up: (queryInterface, Sequelize) => - queryInterface.addColumn(TABLE, COLUMN, { - type: Sequelize.FLOAT, - defaultValue: 0 - }), - down: (queryInterface, Sequelize) => - queryInterface.removeColumn(TABLE, COLUMN) -}; diff --git a/db/migrations/20170801082900-add-trader-fee-trade.js b/db/migrations/20170801082900-add-trader-fee-trade.js deleted file mode 100644 index 3f6bb78358..0000000000 --- a/db/migrations/20170801082900-add-trader-fee-trade.js +++ /dev/null @@ -1,14 +0,0 @@ -'use strict'; - -const TABLE = 'Trades'; -const COLUMN = 'taker_fee'; - -module.exports = { - up: (queryInterface, Sequelize) => - queryInterface.addColumn(TABLE, COLUMN, { - type: Sequelize.FLOAT, - defaultValue: 0 - }), - down: (queryInterface, Sequelize) => - queryInterface.removeColumn(TABLE, COLUMN) -}; \ No newline at end of file diff --git a/db/migrations/20170808074600-change-size-order.js b/db/migrations/20170808074600-change-size-order.js deleted file mode 100644 index 2c9f4734b1..0000000000 --- a/db/migrations/20170808074600-change-size-order.js +++ /dev/null @@ -1,19 +0,0 @@ -'use strict'; - -const TABLE = 'Orders'; -const COLUMN = 'size'; - -module.exports = { - up: (queryInterface, Sequelize) => - queryInterface.changeColumn(TABLE, COLUMN, { - type: Sequelize.DOUBLE, - defaultValue: 0, - allowNull: false - }), - down: (queryInterface, Sequelize) => - queryInterface.changeColumn(TABLE, COLUMN, { - type: Sequelize.BIGINT, - defaultValue: 0, - allowNull: false - }) -}; \ No newline at end of file diff --git a/db/migrations/20170808074900-change-size-trade.js b/db/migrations/20170808074900-change-size-trade.js deleted file mode 100644 index a511a8d7bc..0000000000 --- a/db/migrations/20170808074900-change-size-trade.js +++ /dev/null @@ -1,19 +0,0 @@ -'use strict'; - -const TABLE = 'Trades'; -const COLUMN = 'size'; - -module.exports = { - up: (queryInterface, Sequelize) => - queryInterface.changeColumn(TABLE, COLUMN, { - type: Sequelize.DOUBLE, - defaultValue: 0, - allowNull: false - }), - down: (queryInterface, Sequelize) => - queryInterface.changeColumn(TABLE, COLUMN, { - type: Sequelize.BIGINT, - defaultValue: 0, - allowNull: false - }) -}; \ No newline at end of file diff --git a/db/migrations/20170828080000-add-symbol-trades.js b/db/migrations/20170828080000-add-symbol-trades.js deleted file mode 100644 index 9249bc128d..0000000000 --- a/db/migrations/20170828080000-add-symbol-trades.js +++ /dev/null @@ -1,15 +0,0 @@ -'use strict'; - -const TABLE = 'Trades'; -const COLUMN = 'symbol'; - -module.exports = { - up: (queryInterface, Sequelize) => - queryInterface.addColumn(TABLE, COLUMN, { - type: Sequelize.STRING, - defaultValue: 'btc', - allowNull: false - }), - down: (queryInterface, Sequelize) => - queryInterface.removeColumn(TABLE, COLUMN) -}; \ No newline at end of file diff --git a/db/migrations/20170828080200-add-order_filled.js b/db/migrations/20170828080200-add-order_filled.js deleted file mode 100644 index 98167a7ef8..0000000000 --- a/db/migrations/20170828080200-add-order_filled.js +++ /dev/null @@ -1,14 +0,0 @@ -'use strict'; - -const TABLE = 'Orders'; -const COLUMN = 'filled'; - -module.exports = { - up: (queryInterface, Sequelize) => - queryInterface.addColumn(TABLE, COLUMN, { - type: Sequelize.DOUBLE, - defaultValue: 0 - }), - down: (queryInterface, Sequelize) => - queryInterface.removeColumn(TABLE, COLUMN) -}; diff --git a/db/migrations/20171033154500-add-quick-trade.js b/db/migrations/20171033154500-add-quick-trade.js deleted file mode 100644 index c07eb8960d..0000000000 --- a/db/migrations/20171033154500-add-quick-trade.js +++ /dev/null @@ -1,14 +0,0 @@ -'use strict'; - -const TABLE = 'Trades'; -const COLUMN = 'quick'; - -module.exports = { - up: (queryInterface, Sequelize) => - queryInterface.addColumn(TABLE, COLUMN, { - type: Sequelize.BOOLEAN, - defaultValue: false - }), - down: (queryInterface, Sequelize) => - queryInterface.removeColumn(TABLE, COLUMN) -}; \ No newline at end of file diff --git a/db/migrations/20171118145000-create-limits.js b/db/migrations/20171118145000-create-limits.js deleted file mode 100644 index df61477da5..0000000000 --- a/db/migrations/20171118145000-create-limits.js +++ /dev/null @@ -1,66 +0,0 @@ -'use strict'; - -const { CURRENCIES } = require('../../constants'); -const { DataTypes } = require('sequelize'); -const TABLE = 'Limits'; - -const items = {}; -CURRENCIES.forEach(currency => { - items[`${currency}_deposit_daily`] = { - allowNull: false, - type: DataTypes.DOUBLE, - defaultValue: 0 - }; - items[`${currency}_withdraw_daily`] = { - allowNull: false, - type: DataTypes.DOUBLE, - defaultValue: 0 - }; -}); - - -module.exports = { - up: (queryInterface, Sequelize) => { - return queryInterface.createTable( - TABLE, - { - id: { - allowNull: false, - autoIncrement: true, - primaryKey: true, - type: Sequelize.INTEGER - }, - verification_level: { - allowNull: false, - type: Sequelize.INTEGER - }, - ... items, - taker_fee: { - allowNull: false, - type: Sequelize.DOUBLE, - defaultValue: 0 - }, - maker_fee: { - allowNull: false, - type: Sequelize.DOUBLE, - defaultValue: 0 - }, - created_at: { - type: Sequelize.DATE, - defaultValue: Sequelize.literal('NOW()'), - allowNull: false - }, - updated_at: { - type: Sequelize.DATE, - defaultValue: Sequelize.literal('NOW()'), - allowNull: false - } - }, - { - timestamps: true, - underscored: true - } - ); - }, - down: (queryInterface, Sequelize) => queryInterface.dropTable(TABLE) -}; \ No newline at end of file diff --git a/db/migrations/20171226121700-add-name_verified-user.js b/db/migrations/20171226121700-add-name_verified-user.js deleted file mode 100644 index 4d08de1663..0000000000 --- a/db/migrations/20171226121700-add-name_verified-user.js +++ /dev/null @@ -1,14 +0,0 @@ -'use strict'; - -const TABLE = 'Users'; -const COLUMN = 'name_verified'; - -module.exports = { - up: (queryInterface, Sequelize) => - queryInterface.addColumn(TABLE, COLUMN, { - type: Sequelize.BOOLEAN, - defaultValue: false - }), - down: (queryInterface, Sequelize) => - queryInterface.removeColumn(TABLE, COLUMN) -}; \ No newline at end of file diff --git a/db/migrations/20180102073200-add-dismiss-deposit.js b/db/migrations/20180102073200-add-dismiss-deposit.js deleted file mode 100644 index 8557c05d09..0000000000 --- a/db/migrations/20180102073200-add-dismiss-deposit.js +++ /dev/null @@ -1,13 +0,0 @@ -'use strict'; -const TABLE = 'Deposits'; -const COLUMN = 'dismissed'; - -module.exports = { - up: (queryInterface, Sequelize) => - queryInterface.addColumn(TABLE, COLUMN, { - type: Sequelize.BOOLEAN, - defaultValue: false - }), - down: (queryInterface, Sequelize) => - queryInterface.removeColumn(TABLE, COLUMN) -}; \ No newline at end of file diff --git a/db/migrations/20180119182700-add-is_support-user.js b/db/migrations/20180119182700-add-is_support-user.js deleted file mode 100644 index 3fde1df111..0000000000 --- a/db/migrations/20180119182700-add-is_support-user.js +++ /dev/null @@ -1,14 +0,0 @@ -'use strict'; - -const TABLE = 'Users'; -const COLUMN = 'is_support'; - -module.exports = { - up: (queryInterface, Sequelize) => - queryInterface.addColumn(TABLE, COLUMN, { - type: Sequelize.BOOLEAN, - defaultValue: false - }), - down: (queryInterface, Sequelize) => - queryInterface.removeColumn(TABLE, COLUMN) -}; \ No newline at end of file diff --git a/db/migrations/20180131100200-add-rejected-deposit.js b/db/migrations/20180131100200-add-rejected-deposit.js deleted file mode 100644 index ba93fe2457..0000000000 --- a/db/migrations/20180131100200-add-rejected-deposit.js +++ /dev/null @@ -1,14 +0,0 @@ -'use strict'; - -const TABLE = 'Deposits'; -const COLUMN = 'rejected'; - -module.exports = { - up: (queryInterface, Sequelize) => - queryInterface.addColumn(TABLE, COLUMN, { - type: Sequelize.BOOLEAN, - defaultValue: false - }), - down: (queryInterface, Sequelize) => - queryInterface.removeColumn(TABLE, COLUMN) -}; \ No newline at end of file diff --git a/db/migrations/20180131100500-add-updated_at-deposit.js b/db/migrations/20180131100500-add-updated_at-deposit.js deleted file mode 100644 index 85f656f776..0000000000 --- a/db/migrations/20180131100500-add-updated_at-deposit.js +++ /dev/null @@ -1,15 +0,0 @@ -'use strict'; - -const TABLE = 'Deposits'; -const COLUMN = 'updated_at'; - -module.exports = { - up: (queryInterface, Sequelize) => - queryInterface.addColumn(TABLE, COLUMN, { - allowNull: false, - type: Sequelize.DATE, - defaultValue: Sequelize.literal('NOW()') - }), - down: (queryInterface, Sequelize) => - queryInterface.removeColumn(TABLE, COLUMN) -}; \ No newline at end of file diff --git a/db/migrations/20180219101200-add-constraint-deposits.js b/db/migrations/20180219101200-add-constraint-deposits.js deleted file mode 100644 index 8b39d2ad99..0000000000 --- a/db/migrations/20180219101200-add-constraint-deposits.js +++ /dev/null @@ -1,15 +0,0 @@ -'use strict'; - -const TABLE = 'Deposits'; -const CONSTRAINT_NAME = 'unique_deposit'; - -module.exports = { - up: (queryInterface, Sequelize) => - queryInterface.sequelize.query( - `ALTER TABLE "${TABLE}" ADD CONSTRAINT ${CONSTRAINT_NAME} UNIQUE (address, transaction_id, type);` - ), - down: (queryInterface, Sequelize) => - queryInterface.sequelize.query( - `ALTER TABLE "${TABLE}" DROP CONSTRAINT ${CONSTRAINT_NAME};` - ) -}; diff --git a/db/migrations/20180322182900-add-is_supervisor-user.js b/db/migrations/20180322182900-add-is_supervisor-user.js deleted file mode 100644 index 172ac63287..0000000000 --- a/db/migrations/20180322182900-add-is_supervisor-user.js +++ /dev/null @@ -1,14 +0,0 @@ -'use strict'; - -const TABLE = 'Users'; -const COLUMN = 'is_supervisor'; - -module.exports = { - up: (queryInterface, Sequelize) => - queryInterface.addColumn(TABLE, COLUMN, { - type: Sequelize.BOOLEAN, - defaultValue: false - }), - down: (queryInterface, Sequelize) => - queryInterface.removeColumn(TABLE, COLUMN) -}; \ No newline at end of file diff --git a/db/migrations/20180605115715-add-maker_fees-pairs.js b/db/migrations/20180605115715-add-maker_fees-pairs.js deleted file mode 100644 index 0e8bbaef3f..0000000000 --- a/db/migrations/20180605115715-add-maker_fees-pairs.js +++ /dev/null @@ -1,22 +0,0 @@ -'use strict'; - -const TABLE = 'Pairs'; -const COLUMN = 'maker_fees'; - -module.exports = { - up: (queryInterface, Sequelize) => - queryInterface.addColumn(TABLE, COLUMN, { - allowNull: false, - type: Sequelize.JSONB, - defaultValue: { - '1': 0.25, - '2': 0.2, - '3': 0.15, - '4': 0.05, - '5': 0, - '6': 0 - } - }), - down: (queryInterface, Sequelize) => - queryInterface.removeColumn(TABLE, COLUMN) -}; diff --git a/db/migrations/20180605115725-add-taker_fees-pairs.js b/db/migrations/20180605115725-add-taker_fees-pairs.js deleted file mode 100644 index bd8110f8a4..0000000000 --- a/db/migrations/20180605115725-add-taker_fees-pairs.js +++ /dev/null @@ -1,15 +0,0 @@ -'use strict'; - -const TABLE = 'Pairs'; -const COLUMN = 'taker_fees'; - -module.exports = { - up: (queryInterface, Sequelize) => - queryInterface.addColumn(TABLE, COLUMN, { - allowNull: false, - type: Sequelize.JSONB, - defaultValue: { '1': 0.5, '2': 0.3, '3': 0.2, '4': 0.2, '5': 0, '6': 0 } - }), - down: (queryInterface, Sequelize) => - queryInterface.removeColumn(TABLE, COLUMN) -}; diff --git a/db/migrations/20180708122942-change-trades-price-type.js b/db/migrations/20180708122942-change-trades-price-type.js deleted file mode 100644 index cb95412571..0000000000 --- a/db/migrations/20180708122942-change-trades-price-type.js +++ /dev/null @@ -1,19 +0,0 @@ -'use strict'; - -const TABLE = 'Trades'; -const COLUMN = 'price'; - -module.exports = { - up: (queryInterface, Sequelize) => - queryInterface.sequelize.query( - `ALTER TABLE public."${TABLE}" ALTER COLUMN price TYPE float8 USING price::float8; - ALTER TABLE public."${TABLE}" ALTER COLUMN price SET NOT NULL; - ALTER TABLE public."${TABLE}" ALTER COLUMN price DROP DEFAULT;` - ), - down: (queryInterface, Sequelize) => - queryInterface.sequelize.query( - `ALTER TABLE public."${TABLE}" ALTER COLUMN price TYPE int4 USING price::int4; - ALTER TABLE public."${TABLE}" ALTER COLUMN price SET NOT NULL; - ALTER TABLE public."${TABLE}" ALTER COLUMN price DROP DEFAULT;` - ) -}; \ No newline at end of file diff --git a/db/migrations/20180708122949-change-orders-price-type.js b/db/migrations/20180708122949-change-orders-price-type.js deleted file mode 100644 index 7f17a5b374..0000000000 --- a/db/migrations/20180708122949-change-orders-price-type.js +++ /dev/null @@ -1,18 +0,0 @@ -'use strict'; -const TABLE = 'Orders'; -const COLUMN = 'price'; - -module.exports = { - up: (queryInterface, Sequelize) => - queryInterface.sequelize.query( - `ALTER TABLE public."${TABLE}" ALTER COLUMN price TYPE float8 USING price::float8; - ALTER TABLE public."${TABLE}" ALTER COLUMN price SET NOT NULL; - ALTER TABLE public."${TABLE}" ALTER COLUMN price DROP DEFAULT;` - ), - down: (queryInterface, Sequelize) => - queryInterface.sequelize.query( - `ALTER TABLE public."${TABLE}" ALTER COLUMN price TYPE int4 USING price::int4; - ALTER TABLE public."${TABLE}" ALTER COLUMN price SET NOT NULL; - ALTER TABLE public."${TABLE}" ALTER COLUMN price DROP DEFAULT;` - ) -}; \ No newline at end of file diff --git a/db/migrations/20190105175738-add-kyc-role.js b/db/migrations/20190105175738-add-kyc-role.js deleted file mode 100644 index 3ef7f7ed17..0000000000 --- a/db/migrations/20190105175738-add-kyc-role.js +++ /dev/null @@ -1,16 +0,0 @@ -'use strict'; - -const TABLE = 'Users'; -const COLUMN = 'is_kyc'; - -module.exports = { - up: (queryInterface, Sequelize) => queryInterface.addColumn( - TABLE, - COLUMN, - { - type: Sequelize.BOOLEAN, - defaultValue: false, - } - ), - down: (queryInterface) => queryInterface.removeColumn(TABLE, COLUMN), -}; diff --git a/db/migrations/20190609152258-add-pair-activation.js b/db/migrations/20190609152258-add-pair-activation.js deleted file mode 100644 index f8c3655f23..0000000000 --- a/db/migrations/20190609152258-add-pair-activation.js +++ /dev/null @@ -1,18 +0,0 @@ -'use strict'; - -const TABLE = 'Pairs'; -const COLUMN = 'active'; - -module.exports = { - up: (queryInterface, Sequelize) => { - return queryInterface - .addColumn(TABLE, COLUMN, { - type: Sequelize.BOOLEAN, - allowNull: false, - defaultValue: true - }); - }, - down: (queryInterface) => { - return queryInterface.removeColumn(TABLE, COLUMN); - } -}; \ No newline at end of file diff --git a/db/migrations/20190609152543-create-coin.js b/db/migrations/20190609152543-create-coin.js deleted file mode 100644 index db11e10a02..0000000000 --- a/db/migrations/20190609152543-create-coin.js +++ /dev/null @@ -1,73 +0,0 @@ -'use strict'; - -module.exports = { - up: (queryInterface, Sequelize) => { - return queryInterface.createTable( - 'Coins', - { - id: { - allowNull: false, - autoIncrement: true, - primaryKey: true, - type: Sequelize.INTEGER - }, - fullname: { - type: Sequelize.STRING, - allowNull: false - }, - symbol: { - type: Sequelize.STRING, - allowNull: false, - unique: true - }, - active: { - type: Sequelize.BOOLEAN, - allowNull: false, - defaultValue: false - }, - allow_deposit: { - type: Sequelize.BOOLEAN, - allowNull: false, - defaultValue: false, - }, - allow_withdrawal: { - type: Sequelize.BOOLEAN, - allowNull: false, - defaultValue: false, - }, - withdrawal_fee: { - type: Sequelize.DOUBLE, - defaultValue: 0, - allowNull: false - }, - min: { - type: Sequelize.DOUBLE, - allowNull: false - }, - max: { - type: Sequelize.DOUBLE, - allowNull: false - }, - increment_unit: { - type: Sequelize.DOUBLE, - allowNull: false - }, - created_at: { - allowNull: false, - type: Sequelize.DATE, - defaultValue: Sequelize.literal('NOW()') - }, - updated_at: { - allowNull: false, - type: Sequelize.DATE, - defaultValue: Sequelize.literal('NOW()') - } - }, - { - timestamps: true, - underscored: true - } - ); - }, - down: (queryInterface) => queryInterface.dropTable('Coins') -}; \ No newline at end of file diff --git a/db/migrations/20190626022621-add-pair-fields.js b/db/migrations/20190626022621-add-pair-fields.js deleted file mode 100644 index e75d08a7b4..0000000000 --- a/db/migrations/20190626022621-add-pair-fields.js +++ /dev/null @@ -1,57 +0,0 @@ -'use strict'; - -const TABLE = 'Pairs'; -const COLUMN1 = 'min_size'; -const COLUMN2 = 'max_size'; -const COLUMN3 = 'min_price'; -const COLUMN4 = 'max_price'; -const COLUMN5 = 'increment_size'; -const COLUMN6 = 'increment_price'; - -module.exports = { - up: (queryInterface, Sequelize) => { - return queryInterface - .addColumn(TABLE, COLUMN1, { - type: Sequelize.DOUBLE, - allowNull: true - }) - .then(() => { - return queryInterface.addColumn(TABLE, COLUMN2, { - type: Sequelize.DOUBLE, - allowNull: true - }); - }) - .then(() => { - return queryInterface.addColumn(TABLE, COLUMN3, { - type: Sequelize.DOUBLE, - allowNull: true - }); - }) - .then(() => { - return queryInterface.addColumn(TABLE, COLUMN4, { - type: Sequelize.DOUBLE, - allowNull: true - }); - }) - .then(() => { - return queryInterface.addColumn(TABLE, COLUMN5, { - type: Sequelize.DOUBLE, - allowNull: true - }); - }) - .then(() => { - return queryInterface.addColumn(TABLE, COLUMN6, { - type: Sequelize.DOUBLE, - allowNull: true - }); - }); - }, - down: (queryInterface) => { - return queryInterface.removeColumn(TABLE, COLUMN1) - .then(() => queryInterface.removeColumn(TABLE, COLUMN2)) - .then(() => queryInterface.removeColumn(TABLE, COLUMN3)) - .then(() => queryInterface.removeColumn(TABLE, COLUMN4)) - .then(() => queryInterface.removeColumn(TABLE, COLUMN5)) - .then(() => queryInterface.removeColumn(TABLE, COLUMN6)); - } -}; \ No newline at end of file diff --git a/db/migrations/20190703084759-add-deposit-withdrawal-limit-coin.js b/db/migrations/20190703084759-add-deposit-withdrawal-limit-coin.js deleted file mode 100644 index c9db5f033e..0000000000 --- a/db/migrations/20190703084759-add-deposit-withdrawal-limit-coin.js +++ /dev/null @@ -1,28 +0,0 @@ -'use strict'; - -const TABLE = 'Coins'; -const COLUMN1 = 'deposit_limits'; -const COLUMN2 = 'withdrawal_limits'; - -module.exports = { - up: (queryInterface, Sequelize) => { - return queryInterface - .addColumn(TABLE, COLUMN1, { - type: Sequelize.JSONB, - allowNull: false, - defaultValue: {} - }) - .then(() => { - return queryInterface.addColumn(TABLE, COLUMN2, { - type: Sequelize.JSONB, - allowNull: false, - defaultValue: {} - }); - }); - }, - down: (queryInterface) => { - return queryInterface - .removeColumn(TABLE, COLUMN1) - .then(() => queryInterface.removeColumn(TABLE, COLUMN2)); - } -}; \ No newline at end of file diff --git a/db/migrations/20190703084942-remove-limits.js b/db/migrations/20190703084942-remove-limits.js deleted file mode 100644 index 57fde7f38e..0000000000 --- a/db/migrations/20190703084942-remove-limits.js +++ /dev/null @@ -1,66 +0,0 @@ -'use strict'; - -const { CURRENCIES } = require('../../constants'); -const { DataTypes } = require('sequelize'); -const TABLE = 'Limits'; - -const items = {}; -CURRENCIES.forEach(currency => { - items[`${currency}_deposit_daily`] = { - allowNull: false, - type: DataTypes.DOUBLE, - defaultValue: 0 - }; - items[`${currency}_withdraw_daily`] = { - allowNull: false, - type: DataTypes.DOUBLE, - defaultValue: 0 - }; -}); - - -module.exports = { - up: (queryInterface) => queryInterface.dropTable(TABLE), - down: (queryInterface, Sequelize) => { - return queryInterface.createTable( - TABLE, - { - id: { - allowNull: false, - autoIncrement: true, - primaryKey: true, - type: Sequelize.INTEGER - }, - verification_level: { - allowNull: false, - type: Sequelize.INTEGER - }, - ... items, - taker_fee: { - allowNull: false, - type: Sequelize.DOUBLE, - defaultValue: 0 - }, - maker_fee: { - allowNull: false, - type: Sequelize.DOUBLE, - defaultValue: 0 - }, - created_at: { - type: Sequelize.DATE, - defaultValue: Sequelize.literal('NOW()'), - allowNull: false - }, - updated_at: { - type: Sequelize.DATE, - defaultValue: Sequelize.literal('NOW()'), - allowNull: false - } - }, - { - timestamps: true, - underscored: true - } - ); - } -}; \ No newline at end of file diff --git a/db/migrations/20190830144536-remove-affiliation-percentage.js b/db/migrations/20190830144536-remove-affiliation-percentage.js deleted file mode 100644 index 2dea8c758c..0000000000 --- a/db/migrations/20190830144536-remove-affiliation-percentage.js +++ /dev/null @@ -1,19 +0,0 @@ -'use strict'; - -const TABLE = 'Affiliations'; -const COLUMN = 'percentage'; - -module.exports = { - up: (queryInterface) => { - return queryInterface - .removeColumn(TABLE, COLUMN); - }, - down: (queryInterface, Sequelize) => { - return queryInterface - .addColumn(TABLE, COLUMN, { - type: Sequelize.INTEGER, - allowNull: false, - defaultValue: 10 - }); - } -}; \ No newline at end of file diff --git a/db/migrations/20190928151833-add-status-url.js b/db/migrations/20190928151833-add-status-url.js deleted file mode 100644 index b77c9922a7..0000000000 --- a/db/migrations/20190928151833-add-status-url.js +++ /dev/null @@ -1,19 +0,0 @@ -'use strict'; - -const TABLE = 'Statuses'; -const COLUMN = 'url'; - -module.exports = { - up: (queryInterface, Sequelize) => { - return queryInterface - .addColumn(TABLE, COLUMN, { - type: Sequelize.STRING, - allowNull: true, - defaultValue: 'https://hollaex.com' - }); - }, - down: (queryInterface) => { - return queryInterface - .removeColumn(TABLE, COLUMN); - } -}; \ No newline at end of file diff --git a/db/migrations/20200206091938-add-status-constants.js b/db/migrations/20200206091938-add-status-constants.js deleted file mode 100644 index 853db1115f..0000000000 --- a/db/migrations/20200206091938-add-status-constants.js +++ /dev/null @@ -1,18 +0,0 @@ -'use strict'; - -const TABLE = 'Statuses'; -const COLUMN = 'constants'; - -module.exports = { - up: (queryInterface, Sequelize) => { - return queryInterface - .addColumn(TABLE, COLUMN, { - type: Sequelize.JSONB, - defaultValue: {}, - }); - }, - down: (queryInterface) => { - return queryInterface - .removeColumn(TABLE, COLUMN); - } -}; \ No newline at end of file diff --git a/db/migrations/20200303044931-add-tech-role.js b/db/migrations/20200303044931-add-tech-role.js deleted file mode 100644 index f9d2f2d28d..0000000000 --- a/db/migrations/20200303044931-add-tech-role.js +++ /dev/null @@ -1,16 +0,0 @@ -'use strict'; - -const TABLE = 'Users'; -const COLUMN = 'is_tech'; - -module.exports = { - up: (queryInterface, Sequelize) => queryInterface.addColumn( - TABLE, - COLUMN, - { - type: Sequelize.BOOLEAN, - defaultValue: false, - } - ), - down: (queryInterface) => queryInterface.removeColumn(TABLE, COLUMN), -}; diff --git a/db/migrations/20200402042047-add-deposits-flags.js b/db/migrations/20200402042047-add-deposits-flags.js deleted file mode 100644 index d8cfbf02a2..0000000000 --- a/db/migrations/20200402042047-add-deposits-flags.js +++ /dev/null @@ -1,25 +0,0 @@ -'use strict'; - -const TABLE = 'Deposits'; -const COLUMN1 = 'processing'; -const COLUMN2 = 'waiting'; - -module.exports = { - up: (queryInterface, Sequelize) => { - return queryInterface - .addColumn(TABLE, COLUMN1, { - type: Sequelize.BOOLEAN, - defaultValue: false - }) - .then(() => { - return queryInterface.addColumn(TABLE, COLUMN2, { - type: Sequelize.BOOLEAN, - defaultValue: false - }); - }); - }, - down: (queryInterface) => { - return queryInterface.removeColumn(TABLE, COLUMN1) - .then(() => queryInterface.removeColumn(TABLE, COLUMN2)); - } -}; \ No newline at end of file diff --git a/db/migrations/20200412021629-add-user-customfee.js b/db/migrations/20200412021629-add-user-customfee.js deleted file mode 100644 index f9a8064566..0000000000 --- a/db/migrations/20200412021629-add-user-customfee.js +++ /dev/null @@ -1,16 +0,0 @@ -'use strict'; - -const TABLE = 'Users'; -const COLUMN = 'custom_fee'; - -module.exports = { - up: (queryInterface, Sequelize) => queryInterface.addColumn( - TABLE, - COLUMN, - { - type: Sequelize.BOOLEAN, - defaultValue: false, - } - ), - down: (queryInterface) => queryInterface.removeColumn(TABLE, COLUMN), -}; diff --git a/db/migrations/20200416041535-create-fees.js b/db/migrations/20200416041535-create-fees.js deleted file mode 100644 index 0dbd72aad4..0000000000 --- a/db/migrations/20200416041535-create-fees.js +++ /dev/null @@ -1,48 +0,0 @@ -'use strict'; - -module.exports = { - up: (queryInterface, Sequelize) => { - return queryInterface.createTable( - 'Fees', - { - id: { - allowNull: false, - autoIncrement: true, - primaryKey: true, - type: Sequelize.INTEGER - }, - user_id: { - type: Sequelize.INTEGER, - onDelete: 'CASCADE', - allowNull: false, - references: { - model: 'Users', - key: 'id' - } - }, - transaction_id: { - type: Sequelize.STRING, - allowNull: false - }, - amount: { - type: Sequelize.DOUBLE, - allowNull: false - }, - currency: { - type: Sequelize.STRING, - allowNull: false - }, - timestamp: { - type: Sequelize.DATE, - allowNull: false, - defaultValue: Sequelize.literal('NOW()') - } - }, - { - timestamps: true, - underscored: true - } - ); - }, - down: (queryInterface) => queryInterface.dropTable('Fees') -}; \ No newline at end of file diff --git a/db/migrations/20200416064920-insert-first-fee.js b/db/migrations/20200416064920-insert-first-fee.js deleted file mode 100644 index bef40cb9bf..0000000000 --- a/db/migrations/20200416064920-insert-first-fee.js +++ /dev/null @@ -1,19 +0,0 @@ -'use strict'; - -const TABLE = 'Fees'; - -module.exports = { - up: (queryInterface) => { - return queryInterface.sequelize.query( - ` - INSERT INTO "${TABLE}" (user_id, transaction_id, amount, currency) - Select 1, 'init', 0, 'init' Where exists (SELECT * FROM "Users") - ;` - ); - }, - down: () => { - return new Promise((resolve) => { - resolve(); - }); - } -}; \ No newline at end of file diff --git a/db/migrations/20200518080849-add-user-affiliation_rate-discount.js b/db/migrations/20200518080849-add-user-affiliation_rate-discount.js deleted file mode 100644 index da1656a5bb..0000000000 --- a/db/migrations/20200518080849-add-user-affiliation_rate-discount.js +++ /dev/null @@ -1,32 +0,0 @@ -'use strict'; - -const TABLE = 'Users'; -const COLUMN1 = 'affiliation_rate'; -const COLUMN2 = 'discount'; - -module.exports = { - up: (queryInterface, Sequelize) => { - return queryInterface.addColumn( - TABLE, - COLUMN1, - { - type: Sequelize.DOUBLE, - defaultValue: 0, - }) - .then(() => { - return queryInterface.addColumn( - TABLE, - COLUMN2, - { - type: Sequelize.DOUBLE, - defaultValue: 0, - }); - }); - }, - down: (queryInterface) => { - return queryInterface.removeColumn(TABLE, COLUMN1) - .then(() => { - return queryInterface.removeColumn(TABLE, COLUMN2); - }); - }, -}; diff --git a/db/models/announcement.js b/db/models/announcement.js deleted file mode 100644 index 245b3ca7f7..0000000000 --- a/db/models/announcement.js +++ /dev/null @@ -1,40 +0,0 @@ -module.exports = function(sequelize, DataTypes) { - const Announcement = sequelize.define( - 'Announcement', - { - id: { - allowNull: false, - autoIncrement: true, - primaryKey: true, - type: DataTypes.INTEGER - }, - created_by: { - type: DataTypes.INTEGER, - onDelete: 'CASCADE', - allowNull: false, - references: { - model: 'Users', - key: 'id' - } - }, - title: { - type: DataTypes.STRING, - allowNull: false - }, - message: { - type: DataTypes.TEXT, - allowNull: false - }, - type: { - type: DataTypes.STRING, - allowNull: false, - defaultValue: 'info' - } - }, - { - timestamps: true, - underscored: true - } - ); - return Announcement; -}; diff --git a/db/models/balance.js b/db/models/balance.js deleted file mode 100644 index 43193cad2d..0000000000 --- a/db/models/balance.js +++ /dev/null @@ -1,21 +0,0 @@ -'use strict'; -const { BALANCE_KEYS } = require('../../constants'); -const { generateBalanceFields } = require('../../utils'); - -module.exports = function(sequelize, DataTypes) { - const Balance = sequelize.define( - 'Balance', - generateBalanceFields(DataTypes, BALANCE_KEYS), - { - underscored: true - } - ); - - Balance.associate = (models) => { - Balance.belongsTo(models.User, { - foreignKey: 'user_id' - }); - }; - - return Balance; -}; diff --git a/db/models/coin.js b/db/models/coin.js deleted file mode 100644 index fefbab6836..0000000000 --- a/db/models/coin.js +++ /dev/null @@ -1,80 +0,0 @@ -'use strict'; - -module.exports = function(sequelize, DataTypes) { - const Coin = sequelize.define( - 'Coin', - { - id: { - allowNull: false, - autoIncrement: true, - primaryKey: true, - type: DataTypes.INTEGER - }, - fullname: { - type: DataTypes.STRING, - allowNull: false - }, - symbol: { - type: DataTypes.STRING, - allowNull: false - }, - active: { - type: DataTypes.BOOLEAN, - allowNull: false, - defaultValue: false - }, - allow_deposit: { - type: DataTypes.BOOLEAN, - allowNull: false, - defaultValue: false - }, - allow_withdrawal: { - type: DataTypes.BOOLEAN, - allowNull: false, - defaultValue: false - }, - withdrawal_fee: { - type: DataTypes.DOUBLE, - defaultValue: 0, - allowNull: false - }, - min: { - type: DataTypes.DOUBLE, - allowNull: false - }, - max: { - type: DataTypes.DOUBLE, - allowNull: false - }, - increment_unit: { - type: DataTypes.DOUBLE, - allowNull: false - }, - deposit_limits: { - type: DataTypes.JSONB, - allowNull: false, - defaultValue: {} - }, - withdrawal_limits: { - type: DataTypes.JSONB, - allowNull: false, - defaultValue: {} - }, - created_at: { - allowNull: false, - type: DataTypes.DATE, - defaultValue: sequelize.literal('NOW()') - }, - updated_at: { - allowNull: false, - type: DataTypes.DATE, - defaultValue: sequelize.literal('NOW()') - } - }, - { - timestamps: true, - underscored: true - } - ); - return Coin; -}; diff --git a/db/models/deposit.js b/db/models/deposit.js deleted file mode 100644 index 5d357c2d94..0000000000 --- a/db/models/deposit.js +++ /dev/null @@ -1,69 +0,0 @@ -'use strict'; -const { CURRENCIES } = require('../../constants'); - -module.exports = function(sequelize, DataTypes) { - const Deposit = sequelize.define( - 'Deposit', - { - amount: { - type: DataTypes.DOUBLE, - allowNull: false - }, - fee: { - type: DataTypes.DOUBLE, - defaultValue: 0 - }, - address: { - type: DataTypes.STRING, - defaultValue: '' - }, - transaction_id: { - type: DataTypes.STRING, - allowNull: false - }, - status: { - type: DataTypes.BOOLEAN, - defaultValue: false - }, - dismissed: { - type: DataTypes.BOOLEAN, - defaultValue: false - }, - rejected: { - type: DataTypes.BOOLEAN, - defaultValue: false - }, - processing: { - type: DataTypes.BOOLEAN, - defaultValue: false - }, - waiting: { - type: DataTypes.BOOLEAN, - defaultValue: false - }, - description: { - type: DataTypes.STRING, - defaultValue: '' - }, - type: { - type: DataTypes.ENUM('deposit', 'withdrawal'), - allowNull: false - }, - currency: { - type: DataTypes.ENUM(...CURRENCIES), - allowNull: false - } - }, - { - underscored: true - } - ); - - Deposit.associate = (models) => { - Deposit.belongsTo(models.User, { - foreignKey: 'user_id' - }); - }; - - return Deposit; -}; diff --git a/db/models/fee.js b/db/models/fee.js deleted file mode 100644 index 7eaf014474..0000000000 --- a/db/models/fee.js +++ /dev/null @@ -1,39 +0,0 @@ -'use strict'; - -const { CURRENCIES } = require('../../constants'); - -module.exports = function(sequelize, DataTypes) { - const Fee = sequelize.define( - 'Fee', - { - transaction_id: { - type: DataTypes.STRING, - allowNull: false - }, - amount: { - type: DataTypes.DOUBLE, - allowNull: false - }, - currency: { - type: DataTypes.ENUM(...CURRENCIES), - allowNull: false - }, - timestamp: { - type: DataTypes.DATE, - defaultValue: DataTypes.NOW - } - }, - { - timestamps: false, - underscored: true - } - ); - - Fee.associate = (models) => { - Fee.belongsTo(models.User, { - foreignKey: 'user_id' - }); - }; - - return Fee; -}; diff --git a/db/models/order.js b/db/models/order.js deleted file mode 100644 index f7f32d8a57..0000000000 --- a/db/models/order.js +++ /dev/null @@ -1,51 +0,0 @@ -'use strict'; -module.exports = function(sequelize, DataTypes) { - const Order = sequelize.define( - 'Order', - { - id: { - type: DataTypes.UUID, - allowNull: false, - unique: true, - primaryKey: true - }, - side: { - type: DataTypes.ENUM('buy', 'sell'), - allowNull: false - }, - symbol: { - type: DataTypes.STRING, - allowNull: false - }, - type: { - type: DataTypes.ENUM('market', 'limit'), - allowNull: false - }, - size: { - type: DataTypes.DOUBLE, - allowNull: false - }, - filled: { - type: DataTypes.DOUBLE, - defaultValue: 0 - }, - price: { - type: DataTypes.DOUBLE, - allowNull: false - } - }, - { - underscored: true - } - ); - - Order.associate = (models) => { - Order.belongsTo(models.User, { - onDelete: 'CASCADE', - foreignKey: 'created_by', - targetKey: 'id' - }); - }; - - return Order; -}; diff --git a/db/models/pair.js b/db/models/pair.js deleted file mode 100644 index 4ea0f8326c..0000000000 --- a/db/models/pair.js +++ /dev/null @@ -1,68 +0,0 @@ -'use strict'; - -module.exports = function(sequelize, DataTypes) { - const Pair = sequelize.define( - 'Pair', - { - name: { - type: DataTypes.STRING, - unique: true, - allowNull: false - }, - pair_base: { - type: DataTypes.STRING, - allowNull: false - }, - pair_2: { - type: DataTypes.STRING, - allowNull: false - }, - taker_fees: { - type: DataTypes.JSONB, - allowNull: false, - defaultValue: {} - }, - maker_fees: { - type: DataTypes.JSONB, - allowNull: false, - defaultValue: {} - }, - min_size: { - type: DataTypes.DOUBLE, - allowNull: false - }, - max_size: { - type: DataTypes.DOUBLE, - allowNull: false - }, - min_price: { - type: DataTypes.DOUBLE, - allowNull: false - }, - max_price: { - type: DataTypes.DOUBLE, - allowNull: false - }, - increment_size: { - type: DataTypes.DOUBLE, - allowNull: false - }, - increment_price: { - type: DataTypes.DOUBLE, - allowNull: false - }, - active: { - type: DataTypes.BOOLEAN, - allowNull: false, - defaultValue: true - } - }, - { - underscored: true - } - ); - - Pair.associate = (models) => {}; - - return Pair; -}; diff --git a/db/models/trade.js b/db/models/trade.js deleted file mode 100644 index df8b3b17c5..0000000000 --- a/db/models/trade.js +++ /dev/null @@ -1,56 +0,0 @@ -'use strict'; -module.exports = function(sequelize, DataTypes) { - const Trade = sequelize.define( - 'Trade', - { - side: { - type: DataTypes.ENUM('buy', 'sell'), - allowNull: false - }, - symbol: { - type: DataTypes.STRING, - allowNull: false - }, - size: { - type: DataTypes.DOUBLE, - allowNull: false - }, - price: { - type: DataTypes.DOUBLE, - allowNull: false - }, - maker_fee: { - type: DataTypes.FLOAT, - defaultValue: 0 - }, - taker_fee: { - type: DataTypes.FLOAT, - defaultValue: 0 - }, - timestamp: { - defaultValue: DataTypes.NOW, - allowNull: false, - type: DataTypes.DATE - }, - quick: { - type: DataTypes.BOOLEAN, - defaultValue: false - } - }, - { - timestamps: false, - underscored: true - } - ); - - Trade.associate = (models) => { - Trade.belongsTo(models.User, { - foreignKey: 'maker_id' - }); - Trade.belongsTo(models.User, { - foreignKey: 'taker_id' - }); - }; - - return Trade; -}; diff --git a/db/seeders/20171103163000-add-user.js b/db/seeders/20171103163000-add-user.js deleted file mode 100644 index f2a3ee157d..0000000000 --- a/db/seeders/20171103163000-add-user.js +++ /dev/null @@ -1,26 +0,0 @@ -'use strict'; - -let { - ACCOUNTS -} = require('../../constants'); -const { generateUserObject } = require('../seedsHelper'); -const { uniqBy, remove } = require('lodash'); - -ACCOUNTS = remove(ACCOUNTS, (account) => { - return !!account.email; -}); -ACCOUNTS = uniqBy(ACCOUNTS, 'email'); - -const data = ACCOUNTS.map(generateUserObject); - -const TABLE = 'Users'; - -module.exports = { - up: (queryInterface) => { - return queryInterface - .bulkInsert(TABLE, data, {}); - }, - down: (queryInterface) => { - return queryInterface.bulkDelete(TABLE); - } -}; diff --git a/db/seeders/20190825120350-add-status.js b/db/seeders/20190825120350-add-status.js deleted file mode 100644 index d16743cd9f..0000000000 --- a/db/seeders/20190825120350-add-status.js +++ /dev/null @@ -1,157 +0,0 @@ -'use strict'; - -const { - API_NAME, - API_HOST, - LOGO_PATH, - LOGO_BLACK_PATH, - EMAILS_TIMEZONE, - VALID_LANGUAGES, - NEW_USER_DEFAULT_LANGUAGE, - SENDER_EMAIL, - DEFAULT_THEME, - NEW_USER_IS_ACTIVATED, - SMTP_SERVER, - SMTP_PORT, - SMTP_USER, - SMTP_PASSWORD, - PLUGINS, - SEND_EMAIL_TO_SUPPORT, - ALLOWED_DOMAINS, - ID_DOCS_BUCKET, - VAULT_NAME, - CAPTCHA_SECRET_KEY, - S3_WRITE_ACCESSKEYID, - S3_WRITE_SECRETACCESSKEY, - S3_READ_ACCESSKEYID, - S3_READ_SECRETACCESSKEY, - SNS_ACCESSKEYID, - SNS_REGION, - SNS_SECRETACCESSKEY, - VAULT_KEY, - VAULT_SECRET, - ZENDESK_HOST, - ZENDESK_KEY, - FRESHDESK_HOST, - FRESHDESK_KEY, - FRESHDESK_AUTH, - ADMIN_EMAIL, - USER_LEVEL_NUMBER, - CAPTCHA_SITE_KEY, - ADMIN_WHITELIST_IP -} = process.env; - -const TABLE = 'Statuses'; -const status = [{ - name: API_NAME || '', - initialized: true, - constants: JSON.stringify({ - api_name: API_NAME || '', - description: '', - color: {}, - title: '', - links: { - twitter: '', - instagram: '', - telegram: '', - facebook: '', - linkedin: '', - github: '', - contact: '', - helpdesk: '', - terms: '', - privacy: '', - api: API_HOST || '', - whitepaper: '', - website: '', - information: '', - }, - logo_path: LOGO_PATH, - logo_black_path: LOGO_BLACK_PATH, - valid_languages: VALID_LANGUAGES || (NEW_USER_DEFAULT_LANGUAGE ? NEW_USER_DEFAULT_LANGUAGE.split(',') : 'en'), - user_level_number: USER_LEVEL_NUMBER || 4, - new_user_is_activated: (NEW_USER_IS_ACTIVATED && NEW_USER_IS_ACTIVATED === 'true') || false, - broker_enabled: true, - captcha: { - site_key: CAPTCHA_SITE_KEY - }, - accounts: { - admin: ADMIN_EMAIL || '' - }, - defaults: { - language: NEW_USER_DEFAULT_LANGUAGE || 'en', - theme: DEFAULT_THEME || 'white' - }, - emails: { - timezone: EMAILS_TIMEZONE || '', - send_email_to_support: (SEND_EMAIL_TO_SUPPORT && SEND_EMAIL_TO_SUPPORT === 'true') || false, - sender: SENDER_EMAIL || '' - }, - plugins: { - enabled: PLUGINS || '', - configuration: {} - }, - secrets: { - allowed_domains: ALLOWED_DOMAINS ? ALLOWED_DOMAINS.split(',') : [], - admin_whitelist: ADMIN_WHITELIST_IP ? ADMIN_WHITELIST_IP.split(',') : [], - broker: { - quick_trade_rate: 0.03, - quick_trade_expiration_time: 20, - trade_master_account_id: 2 - }, - security: { - token_time: '24h', - withdrawal_token_expiry: 300000 - }, - captcha: { - secret_key: CAPTCHA_SECRET_KEY - }, - smtp: { - server: SMTP_SERVER || '', - port: SMTP_PORT || 587, - user: SMTP_USER, - password: SMTP_PASSWORD - }, - vault: { - name: VAULT_NAME || '', - key: VAULT_KEY, - secret: VAULT_SECRET, - connected_coins: [] - }, - plugins: { - s3: { - id_docs_bucket: ID_DOCS_BUCKET || '', - key: { - write: S3_WRITE_ACCESSKEYID || '', - read: S3_READ_ACCESSKEYID || '' - }, - secret: { - write: S3_WRITE_SECRETACCESSKEY, - read: S3_READ_SECRETACCESSKEY - } - }, - sns: { - region: SNS_REGION || '', - key: SNS_ACCESSKEYID || '', - secret: SNS_SECRETACCESSKEY || '' - }, - freshdesk: { - host: FRESHDESK_HOST || '', - key: FRESHDESK_KEY || '', - auth: FRESHDESK_AUTH || '' - }, - zendesk: { - host: ZENDESK_HOST || '', - key: ZENDESK_KEY || '' - } - } - } - }) -}]; - -module.exports = { - up: (queryInterface) => queryInterface.bulkInsert(TABLE, status, {}), - down: (queryInterface) => { - return queryInterface.bulkDelete(TABLE); - } -}; \ No newline at end of file diff --git a/db/seeders/20200418102924-add-initial-fee.js b/db/seeders/20200418102924-add-initial-fee.js deleted file mode 100644 index aa8bf82569..0000000000 --- a/db/seeders/20200418102924-add-initial-fee.js +++ /dev/null @@ -1,20 +0,0 @@ -'use strict'; - -const TABLE = 'Fees'; - -const data = [{ - user_id: 1, - transaction_id: 'init', - amount: 0, - currency: 'init' -}]; - -module.exports = { - up: (queryInterface) => { - return queryInterface - .bulkInsert(TABLE, data, {}); - }, - down: (queryInterface) => { - return queryInterface.bulkDelete(TABLE); - } -}; diff --git a/install.sh b/install.sh index 75633a9ec6..d69dc18ea7 100644 --- a/install.sh +++ b/install.sh @@ -1,7 +1,12 @@ #!/bin/bash +# Parameter support to specify version of the CLI to install. +export HOLLAEX_INSTALLER_VERSION_TARGET=${1:-"2.0.0"} + echo "Pulling HollaEx CLI from Github..." -curl -L https://raw.githubusercontent.com/bitholla/hollaex-cli/master/install.sh | bash +curl -s https://raw.githubusercontent.com/bitholla/hollaex-cli/master/install.sh > cli_installer.sh && \ + bash cli_installer.sh ${HOLLAEX_INSTALLER_VERSION_TARGET} \ + rm cli_installer.sh # Dependencies installer for Debian (Ubuntu) based Linux. if command apt-get -v > /dev/null 2>&1; then @@ -210,6 +215,9 @@ elif command yum --version > /dev/null 2>&1; then fi + systemctl start docker + systemctl enable docker + else printf "\n\033[91mFailed to install Docker.\033[39m\n" diff --git a/package-lock.json b/package-lock.json deleted file mode 100644 index 48e341a095..0000000000 --- a/package-lock.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "lockfileVersion": 1 -} diff --git a/plugins/README.md b/plugins/README.md deleted file mode 100644 index e9ebef1529..0000000000 --- a/plugins/README.md +++ /dev/null @@ -1 +0,0 @@ -# Plugins for HollaEx Kit \ No newline at end of file diff --git a/plugins/announcement/helpers.js b/plugins/announcement/helpers.js deleted file mode 100644 index 0ac1f2b79c..0000000000 --- a/plugins/announcement/helpers.js +++ /dev/null @@ -1,47 +0,0 @@ -'use strict'; - -const { Announcement } = require('../../db/models'); -const { convertSequelizeCountAndRows } = require('../helpers/common'); - -const postAnnouncement = (created_by, title, message, type) => { - return Announcement.create({ - created_by, - title, - message, - type - }); -}; - -const deleteAnnouncement = (id) => { - return Announcement.destroy({ where: { id } }); -}; - -const findAnnouncement = (id) => { - return Announcement.findOne({ where: { id }}); -}; - -const getAnnouncements = (pagination = {}, timeframe, ordering) => { - const order = []; - if (!ordering) { - order.push(['created_at', 'desc']); - } else { - order.push(ordering); - } - let query = { - order, - attributes: { - exclude: ['created_by'] - }, - ...pagination - }; - if (timeframe) query.where.created_at = timeframe; - return Announcement.findAndCountAll(query) - .then(convertSequelizeCountAndRows); -}; - -module.exports = { - postAnnouncement, - deleteAnnouncement, - findAnnouncement, - getAnnouncements -}; \ No newline at end of file diff --git a/plugins/announcement/index.js b/plugins/announcement/index.js deleted file mode 100644 index 81b2cd4ded..0000000000 --- a/plugins/announcement/index.js +++ /dev/null @@ -1,187 +0,0 @@ -'use strict'; - -const app = require('../index'); -const { verifyToken, checkScopes } = require('../helpers/auth'); -const { postAnnouncement, deleteAnnouncement, getAnnouncements, findAnnouncement } = require('./helpers'); -const bodyParser = require('body-parser'); -const { logger, getPagination, getTimeframe, getOrdering, updatePluginConstant, maskSecrets } = require('../helpers/common'); -const { WRONG_TITLE, WRONG_MESSAGE, WRONG_TYPE, WRONG_ID } = require('./messages'); -const { WRONG_LIMIT, WRONG_PAGE, WRONG_ORDER_BY, WRONG_ORDER, NOT_AUTHORIZED } = require('../helpers/messages'); -const { GET_SECRETS } = require('../../constants'); - -app.get('/plugins/announcement/constant', verifyToken, (req, res) => { - const endpointScopes = ['admin', 'tech']; - const scopes = req.auth.scopes; - - logger.verbose( - 'GET /plugins/announcement/constant auth', - req.auth.sub - ); - - if (!checkScopes(endpointScopes, scopes)) { - logger.error('GET /plugins/announcement/constant error', NOT_AUTHORIZED); - return res.status(400).json({ message: NOT_AUTHORIZED }); - } - - try { - res.json(maskSecrets('announcement', GET_SECRETS().plugins.announcement) || {}); - } catch (err) { - res.status(400).json({ message: err.message }); - } -}); - -app.put('/plugins/announcement/constant', [verifyToken, bodyParser.json()], (req, res) => { - const endpointScopes = ['admin', 'tech']; - const scopes = req.auth.scopes; - - logger.verbose( - 'PUT /plugins/announcement/constant auth', - req.auth.sub - ); - - if (!checkScopes(endpointScopes, scopes)) { - logger.error('PUT /plugins/announcement/constant error', NOT_AUTHORIZED); - return res.status(400).json({ message: NOT_AUTHORIZED }); - } - - if (req.body.length === 0) { - logger.error('PUT /plugins/announcement/constant error', 'Must provide key to update'); - return res.status(400).json({ message: 'Must provide key to update' }); - } - - logger.info( - 'PUT /plugins/announcement/constant body', - req.body - ); - - updatePluginConstant('announcement', req.body) - .then((data) => { - res.json(data); - }) - .catch((err) => { - res.status(400).json({ message: err.message }); - }); -}); - -app.post('/plugins/announcement', [verifyToken, bodyParser.json()], (req, res) => { - const endpointScopes = ['admin']; - const scopes = req.auth.scopes; - - logger.verbose( - 'POST /plugins/announcement auth', - req.auth.sub - ); - - if (!checkScopes(endpointScopes, scopes)) { - logger.error('POST /plugins/announcement error', NOT_AUTHORIZED); - return res.status(400).json({ message: NOT_AUTHORIZED }); - } - - let { title, message, type } = req.body; - - if (!title || typeof title !== 'string') { - logger.error('POST /plugins/announcement error', WRONG_TITLE); - return res.status(400).json({ message: WRONG_TITLE }); - } else if (!message || typeof message !== 'string') { - logger.error('POST /plugins/announcement error', WRONG_MESSAGE); - return res.status(400).json({ message: WRONG_MESSAGE }); - } else if (type && typeof type !== 'string') { - logger.error('POST /plugins/announcement error', WRONG_TYPE); - return res.status(400).json({ message: WRONG_TYPE }); - } - - if (!type) type = 'info'; - - logger.info( - 'POST /plugins/announcement announcement', - title, - type - ); - - postAnnouncement(req.auth.sub.id, title, message, type) - .then((announcement) => { - logger.debug('POST /plugins/announcement success ID: ', announcement.dataValues.id); - res.json(announcement); - }) - .catch((error) => { - logger.error('POST /plugins/announcement error', error.message); - res.status(error.status || 400).json({ message: error.message }); - }); -}); - -app.delete('/plugins/announcement', verifyToken, (req, res) => { - const endpointScopes = ['admin']; - const scopes = req.auth.scopes; - - logger.verbose( - 'DELETE /plugins/announcement auth', - req.auth.sub - ); - - if (!checkScopes(endpointScopes, scopes)) { - logger.error('DELETE /plugins/announcement error', NOT_AUTHORIZED); - return res.status(400).json({ message: NOT_AUTHORIZED }); - } - - const id = parseInt(req.query.id); - - if (!id) { - logger.error('DELETE /plugins/announcement error', WRONG_ID); - return res.status(400).json({ message: WRONG_ID }); - } - - findAnnouncement(id) - .then((announcement) => { - if (!announcement) { - throw new Error(`Announcement with id ${id} not found`); - } else { - return deleteAnnouncement(id); - } - }) - .then(() => { - logger.debug('DELETE /plugins/announcement success ID: ', id); - res.json({ message: `Announcement ${id} successfully deleted` }); - }) - .catch((error) => { - logger.error('DELETE /plugins/announcement error', error.message); - res.status(error.status || 400).json({ message: error.message }); - }); -}); - -app.get('/plugins/announcements', (req, res) => { - const { limit, page, order_by, order, start_date, end_date } = req.query; - - if (limit && !parseInt(limit)) { - logger.error('GET /plugins/announcements error', WRONG_LIMIT); - return res.status(400).json({ message: WRONG_LIMIT }); - } else if (page && !parseInt(page)) { - logger.error('GET /plugins/announcements error', WRONG_PAGE); - return res.status(400).json({ message: WRONG_PAGE }); - } else if (order_by && order_by.includes(' ')) { - logger.error('GET /plugins/announcements error', WRONG_ORDER_BY); - return res.status(400).json({ message: WRONG_ORDER_BY }); - } else if (order && (order !== 'asc' || order!== 'desc')) { - logger.error('GET /plugins/announcements error', WRONG_ORDER); - return res.status(400).json({ message: WRONG_ORDER }); - } - - logger.info( - 'GET /plugins/announcements', - limit, - page, - order_by, - order, - start_date, - end_date - ); - - getAnnouncements(getPagination(limit, page), getTimeframe(start_date, end_date), getOrdering(order_by, order)) - .then((announcements) => { - logger.debug('GET /plugins/annoucements'); - return res.json(announcements); - }) - .catch((error) => { - logger.error('GET /plugins/announcements error', error.message); - res.status(error.status || 400).json({ message: error.message }); - }); -}); \ No newline at end of file diff --git a/plugins/announcement/messages.js b/plugins/announcement/messages.js deleted file mode 100644 index 4b0028e3db..0000000000 --- a/plugins/announcement/messages.js +++ /dev/null @@ -1,6 +0,0 @@ -'use strict'; - -exports.WRONG_TITLE = 'Value \'title\' is required and must be a string'; -exports.WRONG_MESSAGE = 'Value \'message\' is required and must be a string'; -exports.WRONG_TYPE = 'Value \'type\' must be a string'; -exports.WRONG_ID = 'Value \'id\' is required and must be an integer'; diff --git a/plugins/announcement/package.json b/plugins/announcement/package.json deleted file mode 100644 index 4f9dbf0cea..0000000000 --- a/plugins/announcement/package.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "name": "announcement", - "version": "0.1.0", - "dependencies": {} -} diff --git a/plugins/bank/helpers.js b/plugins/bank/helpers.js deleted file mode 100644 index 931af06e67..0000000000 --- a/plugins/bank/helpers.js +++ /dev/null @@ -1,100 +0,0 @@ -'use strict'; - -const crypto = require('crypto'); -const { pick, each } = require('lodash'); -const { VERIFY_STATUS } = require('../constants'); -const { USER_NOT_FOUND, MAX_BANKS_EXCEEDED } = require('./messages'); - -const addBankAccount = (bank_account = {}) => (user, options = {}) => { - if (!user) { - throw new Error(USER_NOT_FOUND); - } else if (user.dataValues.bank_account.length >= 3) { - throw new Error(MAX_BANKS_EXCEEDED); - } - - bank_account = pick( - bank_account, - 'bank_name', - 'card_number', - 'account_number' - ); - - bank_account.id = crypto.randomBytes(10).toString('hex'); - bank_account.status = VERIFY_STATUS.PENDING; - - let newBank = user.dataValues.bank_account; - newBank.push(bank_account); - - return user.update( - { bank_account: newBank }, - { - fields: ['bank_account'], - ...options - } - ); -}; - -const adminAddUserBanks = (bank_accounts = []) => (user, options = {}) => { - if (!user) { - throw new Error(USER_NOT_FOUND); - } else if (bank_accounts.length > 3) { - throw new Error (MAX_BANKS_EXCEEDED); - } - - each(bank_accounts, (bank) => { - bank.id = crypto.randomBytes(10).toString('hex'); - bank.status = VERIFY_STATUS.COMPLETED; - bank = pick( - bank, - 'id', - 'status', - 'bank_name', - 'card_number', - 'account_number' - ) - }); - - return user.update( - { bank_account: bank_accounts }, - { - fields: ['bank_account'], - ...options - } - ); -}; - -const approveBankAccount = (id = 0) => (user, options = {}) => { - const banks = user.dataValues.bank_account.map((bank) => { - if (bank.id === id) { - bank.status = VERIFY_STATUS.COMPLETED; - } - return bank; - }); - - return user.update( - { bank_account: banks }, - { - fields: ['bank_account'], - ...options - } - ); -}; - -const rejectBankAccount = (id = 0) => (user, options = {}) => { - const newBanks = user.bank_account.filter((bank) => bank.id !== id); - - return user.update( - { bank_account: newBanks }, - { - fields: ['bank_account'], - ...options - } - ); -}; - -module.exports = { - addBankAccount, - approveBankAccount, - adminAddUserBanks, - rejectBankAccount, -}; \ No newline at end of file diff --git a/plugins/bank/index.js b/plugins/bank/index.js deleted file mode 100644 index 405398f8ff..0000000000 --- a/plugins/bank/index.js +++ /dev/null @@ -1,240 +0,0 @@ -'use strict'; - -const app = require('../index'); -const { verifyToken, checkScopes } = require('../helpers/auth'); -const { findUser, getUserValuesById, getUserValuesByEmail } = require('../helpers/user'); -const { addBankAccount, adminAddUserBanks, approveBankAccount, rejectBankAccount } = require('./helpers'); -const { USER_NOT_FOUND, DEFAULT_REJECTION_NOTE } = require('./messages'); -const bodyParser = require('body-parser'); -const { logger, updatePluginConstant, maskSecrets } = require('../helpers/common'); -const { NOT_AUTHORIZED } = require('../helpers/messages'); -const { sendEmail } = require('../../mail'); -const { MAILTYPE } = require('../../mail/strings'); -const { GET_SECRETS } = require('../../constants'); - -app.get('/plugins/bank/constant', verifyToken, (req, res) => { - const endpointScopes = ['admin', 'tech']; - const scopes = req.auth.scopes; - - logger.verbose( - 'GET /plugins/bank/constant auth', - req.auth.sub - ); - - if (!checkScopes(endpointScopes, scopes)) { - logger.error('GET /plugins/bank/constant error', NOT_AUTHORIZED); - return res.status(400).json({ message: NOT_AUTHORIZED }); - } - - try { - res.json(maskSecrets('bank', GET_SECRETS().plugins.bank) || {}); - } catch (err) { - res.status(400).json({ message: err.message }); - } -}); - -app.put('/plugins/bank/constant', [verifyToken, bodyParser.json()], (req, res) => { - const endpointScopes = ['admin', 'tech']; - const scopes = req.auth.scopes; - - logger.verbose( - 'PUT /plugins/bank/constant auth', - req.auth.sub - ); - - if (!checkScopes(endpointScopes, scopes)) { - logger.error('PUT /plugins/bank/constant error', NOT_AUTHORIZED); - return res.status(400).json({ message: NOT_AUTHORIZED }); - } - - if (req.body.length === 0) { - logger.error('PUT /plugins/bank/constant error', 'Must provide key to update'); - return res.status(400).json({ message: 'Must provide key to update' }); - } - - logger.info( - 'PUT /plugins/bank/constant body', - req.body - ); - - updatePluginConstant('bank', req.body) - .then((data) => { - res.json(data); - }) - .catch((err) => { - res.status(400).json({ message: err.message }); - }); -}); - -app.post('/plugins/bank/user', [verifyToken, bodyParser.json()], (req, res) => { - const endpointScopes = ['user']; - const scopes = req.auth.scopes; - - logger.verbose( - 'POST /bank/user auth', - req.auth.sub - ); - - if (!checkScopes(endpointScopes, scopes)) { - logger.error('POST /plugins/bank/user error', NOT_AUTHORIZED); - return res.status(400).json({ message: NOT_AUTHORIZED }); - } - - const email = req.auth.sub.email; - const bank_account = req.body; - - logger.info( - 'POST /bank/user bank', - email, - bank_account - ); - - findUser({ - where: { email } - }) - .then(addBankAccount(bank_account)) - .then(() => getUserValuesByEmail(email)) - .then((user) => res.json(user['bank_account'])) - .catch((error) => { - logger.error('POST /bank/user error', error.message); - res.status(error.status || 400).json({ message: error.message }) - }) -}); - -app.post('/plugins/bank/admin', [verifyToken, bodyParser.json()], (req, res) => { - const endpointScopes = ['admin', 'supervisor', 'support', 'kyc']; - const scopes = req.auth.scopes; - - logger.verbose( - 'POST /bank/admin auth', - req.auth.sub - ); - - if (!checkScopes(endpointScopes, scopes)) { - logger.error('POST /plugins/bank/admin error', NOT_AUTHORIZED); - return res.status(400).json({ message: NOT_AUTHORIZED }); - } - - const { bank_account } = req.body; - const id = req.query.user_id; - - logger.info( - 'POST /bank/admin bank', - id, - bank_account - ); - - findUser({ - where: { - id - } - }) - .then(adminAddUserBanks(bank_account)) - .then(() => getUserValuesById(id)) - .then((user) => res.json(user['bank_account'])) - .catch((error) => { - logger.error('POST /bank/admin error', error.message); - res.status(error.status || 400).json({ message: error.message }) - }); -}); - -app.post('/plugins/bank/verify', [verifyToken, bodyParser.json()], (req, res) => { - const endpointScopes = ['admin', 'supervisor', 'support', 'kyc']; - const scopes = req.auth.scopes; - - logger.verbose( - 'POST /bank/verify auth', - req.auth.sub - ); - - if (!checkScopes(endpointScopes, scopes)) { - logger.error('POST /plugins/bank/verify error', NOT_AUTHORIZED); - return res.status(400).json({ message: NOT_AUTHORIZED }); - } - - const { user_id, bank_id } = req.body; - - logger.verbose( - 'POST /bank/verify body', - req.body - ); - - findUser({ - where: { - id: user_id - }, - attributes: ['id', 'bank_account'] - }) - .then((user) => { - if (!user) throw new Error(USER_NOT_FOUND); - return approveBankAccount(bank_id)(user); - }) - .then((user) => { - const data = {}; - data.bank_account = user.bank_account; - logger.debug( - 'POST /bank/verify data', - data - ); - res.json(data); - }) - .catch((err) => { - logger.error('POST /bank/verify error', err.message); - res.status(err.status || 400).json({ message: err.message }); - }); -}); - -app.post('/plugins/bank/revoke', [verifyToken, bodyParser.json()], (req, res) => { - const endpointScopes = ['admin', 'supervisor', 'support', 'kyc']; - const scopes = req.auth.scopes; - - logger.verbose( - 'POST /bank/revoke auth', - req.auth.sub - ); - - if (!checkScopes(endpointScopes, scopes)) { - logger.error('POST /plugins/bank/revoke error', NOT_AUTHORIZED); - return res.status(400).json({ message: NOT_AUTHORIZED }); - } - - const { user_id, bank_id } = req.body; - let { message } = req.body || DEFAULT_REJECTION_NOTE; - - logger.verbose( - 'POST /bank/revoke body', - req.body - ); - - findUser({ - where: { - id: user_id - }, - attributes: ['id', 'email', 'bank_account', 'settings'] - }) - .then((user) => { - if (!user) throw new Error(USER_NOT_FOUND); - return rejectBankAccount(bank_id)(user); - }) - .then((user) => { - const { email, bank_account } = user.dataValues; - const emailData = { type: 'bank', message }; - const data = {}; - data.bank_account = bank_account; - sendEmail( - MAILTYPE.USER_VERIFICATION_REJECT, - email, - emailData, - user.settings - ); - logger.debug( - 'POST /bank/revoke data', - data - ); - res.json(data); - }) - .catch((err) => { - logger.error('POST /bank/revoke error', err.message); - res.status(err.status || 400).json({ message: err.message }); - }); -}); \ No newline at end of file diff --git a/plugins/bank/messages.js b/plugins/bank/messages.js deleted file mode 100644 index 617b2458a1..0000000000 --- a/plugins/bank/messages.js +++ /dev/null @@ -1,5 +0,0 @@ -'use strict'; - -exports.USER_NOT_FOUND = 'User not found'; -exports.MAX_BANKS_EXCEEDED = 'User can have a maximum of three banks'; -exports.DEFAULT_REJECTION_NOTE = 'Unspecified'; diff --git a/plugins/bank/package-lock.json b/plugins/bank/package-lock.json deleted file mode 100644 index d3cc06ec0c..0000000000 --- a/plugins/bank/package-lock.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "name": "bank", - "version": "0.1.0", - "lockfileVersion": 1 -} diff --git a/plugins/bank/package.json b/plugins/bank/package.json deleted file mode 100644 index 9fe17a37c3..0000000000 --- a/plugins/bank/package.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "name": "bank", - "version": "0.1.0", - "dependencies": {} -} diff --git a/plugins/chat/index.js b/plugins/chat/index.js deleted file mode 100644 index 837f152133..0000000000 --- a/plugins/chat/index.js +++ /dev/null @@ -1,62 +0,0 @@ -'use strict'; - -const app = require('../index'); -const { verifyToken, checkScopes } = require('../helpers/auth'); -const { GET_SECRETS } = require('../../constants'); -const { logger, updatePluginConstant, maskSecrets } = require('../helpers/common'); -const { NOT_AUTHORIZED } = require('../helpers/messages'); -const bodyParser = require('body-parser'); - -app.get('/plugins/chat/constant', verifyToken, (req, res) => { - const endpointScopes = ['admin', 'tech']; - const scopes = req.auth.scopes; - - logger.verbose( - 'GET /plugins/chat/constant auth', - req.auth.sub - ); - - if (!checkScopes(endpointScopes, scopes)) { - logger.error('GET /plugins/chat/constant error', NOT_AUTHORIZED); - return res.status(400).json({ message: NOT_AUTHORIZED }); - } - - try { - res.json(maskSecrets('chat', GET_SECRETS().plugins.chat) || {}); - } catch (err) { - res.status(400).json({ message: err.message }); - } -}); - -app.put('/plugins/chat/constant', [verifyToken, bodyParser.json()], (req, res) => { - const endpointScopes = ['admin', 'tech']; - const scopes = req.auth.scopes; - - logger.verbose( - 'PUT /plugins/chat/constant auth', - req.auth.sub - ); - - if (!checkScopes(endpointScopes, scopes)) { - logger.error('PUT /plugins/chat/constant error', NOT_AUTHORIZED); - return res.status(400).json({ message: NOT_AUTHORIZED }); - } - - if (req.body.length === 0) { - logger.error('PUT /plugins/chat/constant error', 'Must provide key to update'); - return res.status(400).json({ message: 'Must provide key to update' }); - } - - logger.info( - 'PUT /plugins/chat/constant body', - req.body - ); - - updatePluginConstant('chat', req.body) - .then((data) => { - res.json(data); - }) - .catch((err) => { - res.status(400).json({ message: err.message }); - }); -}); diff --git a/plugins/constants.js b/plugins/constants.js deleted file mode 100644 index 96340a1ac0..0000000000 --- a/plugins/constants.js +++ /dev/null @@ -1,64 +0,0 @@ -'use strict'; - -exports.PLUGIN_PORT = process.env.PLUGIN_PORT || 10011; - -// List of available plugins -exports.AVAILABLE_PLUGINS = [ - 'announcement', - 'bank', - 'chat', - 'freshdesk', - 'kyc', - 'sms', - 'vault', - // 'xht_fee', - 'zendesk' -]; - -// SMS_CONSTANTS -exports.SMS_CODE_KEY = 'user:sms'; -exports.SMS_CODE_EXPIRATION_TIME = 6 * 60; // seconds -> 6 min - -// KYC_BANK_CONSTANTS -exports.ID_FIELDS = [ - 'type', - 'number', - 'issued_date', - 'expiration_date', - 'status' -]; -exports.USER_FIELD_ADMIN_LOG = [ - 'full_name', - 'email', - 'dob', - 'gender', - 'nationality', - 'phone_number', - 'address', - 'id_data', - 'bank_account', - 'settings', - 'username' -]; -exports.ADDRESS_FIELDS = ['city', 'address', 'country', 'postal_code']; -exports.VERIFY_STATUS = { - EMPTY: 0, - PENDING: 1, - REJECTED: 2, - COMPLETED: 3 -}; - -exports.ERC_TOKENS = [ - 'eth', - 'xht', - 'usdt', - 'dai', - 'mkr', - 'tusd', - 'usdc', - 'leo', - 'xaut', - 'busd' -]; - -exports.VAULT_ENDPOINT = 'https://api.vault.bitholla.com/v1'; \ No newline at end of file diff --git a/plugins/freshdesk/index.js b/plugins/freshdesk/index.js deleted file mode 100644 index a8504f4d2d..0000000000 --- a/plugins/freshdesk/index.js +++ /dev/null @@ -1,62 +0,0 @@ -'use strict'; - -const app = require('../index'); -const { verifyToken, checkScopes } = require('../helpers/auth'); -const { GET_SECRETS } = require('../../constants'); -const { logger, updatePluginConstant, maskSecrets } = require('../helpers/common'); -const { NOT_AUTHORIZED } = require('../helpers/messages'); -const bodyParser = require('body-parser'); - -app.get('/plugins/freshdesk/constant', verifyToken, (req, res) => { - const endpointScopes = ['admin', 'tech']; - const scopes = req.auth.scopes; - - logger.verbose( - 'GET /plugins/freshdesk/constant auth', - req.auth.sub - ); - - if (!checkScopes(endpointScopes, scopes)) { - logger.error('GET /plugins/freshdesk/constant error', NOT_AUTHORIZED); - return res.status(400).json({ message: NOT_AUTHORIZED }); - } - - try { - res.json(maskSecrets('freshdesk', GET_SECRETS().plugins.freshdesk) || {}); - } catch (err) { - res.status(400).json({ message: err.message }); - } -}); - -app.put('/plugins/freshdesk/constant', [verifyToken, bodyParser.json()], (req, res) => { - const endpointScopes = ['admin', 'tech']; - const scopes = req.auth.scopes; - - logger.verbose( - 'PUT /plugins/chat/constant auth', - req.auth.sub - ); - - if (!checkScopes(endpointScopes, scopes)) { - logger.error('PUT /plugins/freshdesk/constant error', NOT_AUTHORIZED); - return res.status(400).json({ message: NOT_AUTHORIZED }); - } - - if (req.body.length === 0) { - logger.error('PUT /plugins/freshdesk/constant error', 'Must provide key to update'); - return res.status(400).json({ message: 'Must provide key to update' }); - } - - logger.info( - 'PUT /plugins/freshdesk/constant body', - req.body - ); - - updatePluginConstant('freshdesk', req.body) - .then((data) => { - res.json(data); - }) - .catch((err) => { - res.status(400).json({ message: err.message }); - }); -}); diff --git a/plugins/freshdesk/package-lock.json b/plugins/freshdesk/package-lock.json deleted file mode 100644 index 43230fa983..0000000000 --- a/plugins/freshdesk/package-lock.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "name": "freshdesk", - "version": "0.1.0", - "lockfileVersion": 1 -} diff --git a/plugins/freshdesk/package.json b/plugins/freshdesk/package.json deleted file mode 100644 index e6352971fa..0000000000 --- a/plugins/freshdesk/package.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "name": "freshdesk", - "version": "0.1.0", - "dependencies": {} -} diff --git a/plugins/helpers/audit.js b/plugins/helpers/audit.js deleted file mode 100644 index 93c7f00521..0000000000 --- a/plugins/helpers/audit.js +++ /dev/null @@ -1,26 +0,0 @@ -'use strict'; - -const { Audit } = require('../../db/models'); - -/** - * Create an audit. - * @param {string} admin_id - Admin id. - * @param {string} event - Event being audited. - * @param {string} description - Description of event. - * @param {string} ip - IP address. - * @param {string} domain - Domain. - * @return {promise} - Promise with new audit. -*/ -const createAudit = (admin_id, event, description, ip, domain) => { - return Audit.create({ - admin_id, - event, - description, - ip, - domain - }); -}; - -module.exports = { - createAudit -}; \ No newline at end of file diff --git a/plugins/helpers/auth.js b/plugins/helpers/auth.js deleted file mode 100644 index 5a5c136602..0000000000 --- a/plugins/helpers/auth.js +++ /dev/null @@ -1,61 +0,0 @@ -'use strict'; - -const jwt = require('jsonwebtoken'); -const { SECRET, ISSUER, GET_FROZEN_USERS } = require('../../constants'); -const { intersection } = require('lodash'); -const { ACCESS_DENIED, TOKEN_EXPIRED, INVALID_TOKEN, MISSING_HEADER, DEACTIVATED_USER } = require('./messages'); - -/** - * Middleware function used for verifying tokens being passed by client in Authorization header. Format: Bearer -*/ -const verifyToken = (req, res, next) => { - const sendError = (msg) => { - return req.res.status(403).json({ message: ACCESS_DENIED(msg) }); - }; - - const token = req.headers['authorization']; - - if (token && token.indexOf('Bearer ') === 0) { - let tokenString = token.split(' ')[1]; - - jwt.verify(tokenString, SECRET, (verificationError, decodedToken) => { - if (!verificationError && decodedToken) { - - const issuerMatch = decodedToken.iss == ISSUER; - - if (!issuerMatch) { - return sendError(TOKEN_EXPIRED); - } - - if (GET_FROZEN_USERS()[decodedToken.sub.id]) { - return sendError(DEACTIVATED_USER); - } else { - req.auth = decodedToken; - return next(); - } - } else { - return sendError(INVALID_TOKEN); - } - }); - } else { - return sendError(MISSING_HEADER); - } -}; - -/** - * Function that checks to see if user's scope is valid for the endpoint. Will throw Error if user doesn't have valid scope. - * @param {array} endpointScopes - Authorized scopes for the endpoint. - * @param {array} userScopes - Scopes of the user. -*/ -const checkScopes = (endpointScopes, userScopes) => { - if (intersection(endpointScopes, userScopes).length === 0) { - return false; - } else { - return true; - } -}; - -module.exports = { - verifyToken, - checkScopes -}; \ No newline at end of file diff --git a/plugins/helpers/common.js b/plugins/helpers/common.js deleted file mode 100644 index dc1cd7264e..0000000000 --- a/plugins/helpers/common.js +++ /dev/null @@ -1,241 +0,0 @@ -'use strict'; - -const { Status, Deposit } = require('../../db/models'); -const { CONSTANTS_KEYS, INIT_CHANNEL, SECRETS_KEYS, SECRET_MASK } = require('../../constants'); -const { publisher } = require('../../db/pubsub'); -const { omit, each } = require('lodash'); -const flatten = require('flat'); - -// Winston logger -const logger = require('../../config/logger').loggerPlugin; - -const joinConstants = (statusConstants = {}, newConstants = {}, role) => { - const joinedConstants = { - secrets: {} - }; - CONSTANTS_KEYS.forEach((key) => { - if (key === 'secrets' && newConstants[key]) { - SECRETS_KEYS.forEach((secretKey) => { - if (newConstants[key][secretKey]) { - if (!Array.isArray(statusConstants[key][secretKey]) && typeof statusConstants[key][secretKey] === 'object') { - if (Object.values(newConstants[key][secretKey]).includes(SECRET_MASK)) { - throw new Error('Masked value given'); - } - joinedConstants[key][secretKey] = { ...statusConstants[key][secretKey], ...newConstants[key][secretKey] }; - } else { - if (newConstants[key][secretKey] === SECRET_MASK) { - throw new Error('Masked value given'); - } - joinedConstants[key][secretKey] = newConstants[key][secretKey]; - } - } else { - joinedConstants[key][secretKey] = statusConstants[key][secretKey]; - } - }); - } - else if (newConstants[key]) { - if (role === 'tech' && key === 'emails' && newConstants[key] && newConstants[key].send_email_to_support !== statusConstants[key].send_email_to_support) { - throw new Error('Tech users cannot update the value of send_email_copy'); - } - if (!Array.isArray(statusConstants[key]) && typeof statusConstants[key] === 'object') { - joinedConstants[key] = { ...statusConstants[key], ...newConstants[key] }; - } else { - joinedConstants[key] = newConstants[key]; - } - } else { - joinedConstants[key] = statusConstants[key]; - } - }); - return joinedConstants; -}; - -const updateConstants = (constants) => { - return Status.findOne({ - attributes: ['id', 'constants'] - }) - .then((status) => { - if (Object.keys(constants).length > 0) { - constants = joinConstants(status.dataValues.constants, constants); - } - return status.update({ constants }, { - fields: [ - 'constants' - ], - returning: true - }); - }) - .then((data) => { - const secrets = data.constants.secrets; - data.constants = omit(data.constants, 'secrets'); - publisher.publish( - INIT_CHANNEL, - JSON.stringify({ - type: 'constants', data: { constants: data.constants, secrets } - }) - ); - return { ...data.constants, secrets }; - }); -}; - -const isUrl = (url) => { - const pattern = /^(^|\s)((https?:\/\/)?[\w-]+(\.[\w-]+)+\.?(:\d+)?(\/\S*)?)$/; - return pattern.test(url); -}; - -const sleep = (ms) => { - return new Promise((resolve) => setTimeout(resolve, ms)); -}; - -const getPagination = (limit = 50, page = 1) => { - let _limit = 50; - let _page = 1; - logger.debug('helpers/common/getPagination', _limit, _page); - if (limit) { - if (limit > 50) { - _limit = 50; - } else if (limit <= 0) { - _limit = 1; - } else { - _limit = limit; - } - } - - if (page && page >= 0) { - _page = page; - } - logger.debug('helpers/common/getPagination', _limit, _page); - return { - limit: _limit, - offset: _limit * (_page - 1) - }; -}; - -const convertSequelizeCountAndRows = (data) => { - return { - count: data.count, - data: data.rows.map((row) => { - const item = Object.assign({}, row.dataValues); - // delete item.id; - return item; - }) - }; -}; - -const getTimeframe = (start_date = undefined, end_date = undefined) => { - logger.debug( - 'helpers/common/getTimeframe', - 'stat_date: ', - start_date, - 'end_date: ', - end_date - ); - let timestamp = {}; - if (start_date) timestamp['$gte'] = start_date; - if (end_date) timestamp['$lte'] = end_date; - if (Object.entries(timestamp).length === 0) return undefined; - return timestamp; -}; - -const getOrdering = (order_by = undefined, order = undefined) => { - logger.debug( - 'helpers/common/getOrdering', - 'order_by: ', - order_by, - 'order: ', - order - ); - if (!order_by) { - return undefined; - } else { - return [order_by, order || 'desc']; - } -}; - -const updatePluginConstant = (plugin, newValues) => { - return Status.findOne({ - attributes: ['id', 'constants'] - }) - .then((status) => { - const constants = status.dataValues.constants; - if (!Array.isArray(newValues) && typeof newValues === 'object') { - const flattenedValues = flatten(newValues); - if (Object.values(flattenedValues).includes(SECRET_MASK)) { - throw new Error('Masked value given'); - } - } - - if (plugin === 'vault') { - constants.secrets.vault = { ...constants.secrets.vault, ...newValues }; - return status.update({ constants }, { - fields: [ - 'constants' - ], - returning: true - }); - } else { - constants.secrets.plugins[plugin] = { ...constants.secrets.plugins[plugin], ...newValues }; - return status.update({ constants }, { - fields: [ - 'constants' - ], - returning: true - }); - } - }) - .then((data) => { - const secrets = data.constants.secrets; - data.constants = omit(data.constants, 'secrets'); - publisher.publish( - INIT_CHANNEL, - JSON.stringify({ - type: 'constants', data: { constants: data.constants, secrets } - }) - ); - return maskSecrets(plugin, plugin === 'vault' ? secrets.vault : secrets.plugins[plugin]); - }); -}; - -const maskSecrets = (plugin, secrets) => { - secrets = JSON.parse(JSON.stringify(secrets)); - each(secrets, (secret, secretKey) => { - if (plugin === 's3' && secretKey === 'secret') { - secrets[secretKey] = { - write: SECRET_MASK, - read: SECRET_MASK - }; - } else if ((plugin === 'zendesk' || plugin === 'freshdesk') && secretKey === 'key') { - secrets[secretKey] = SECRET_MASK; - } else if (secretKey === 'secret' || secretKey === 'auth') { - secrets[secretKey] = SECRET_MASK; - } - }); - return secrets; -}; - -const createDeposit = (user_id, transaction_id, address, status, currency, type, amount, fee = 0, description = '', options = {}) => { - return Deposit.create({ - user_id, - transaction_id, - address, - status, - currency, - type, - amount, - fee, - description - }, options); -}; - -module.exports = { - logger, - updateConstants, - isUrl, - sleep, - getPagination, - getOrdering, - getTimeframe, - convertSequelizeCountAndRows, - updatePluginConstant, - maskSecrets, - createDeposit -}; \ No newline at end of file diff --git a/plugins/helpers/messages.js b/plugins/helpers/messages.js deleted file mode 100644 index 361e5c31a2..0000000000 --- a/plugins/helpers/messages.js +++ /dev/null @@ -1,12 +0,0 @@ -'use strict'; - -exports.ACCESS_DENIED = (msg) => `Access denied: ${msg}`; -exports.NOT_AUTHORIZED = 'You are not authorized to access this endpoint'; -exports.TOKEN_EXPIRED = 'Token is expired'; -exports.INVALID_TOKEN = 'Token is invalid'; -exports.MISSING_HEADER = 'Authorization header is missing'; -exports.DEACTIVATED_USER = 'This account is deactivated'; -exports.WRONG_LIMIT = 'Value \'limit\' must be an integer'; -exports.WRONG_PAGE = 'Value \'page\' must be an integer'; -exports.WRONG_ORDER_BY = 'Value \'order_by\' cannot include whitespaces'; -exports.WRONG_ORDER = 'Value \'order\' must be one of: [\'asc\', \'desc\']'; diff --git a/plugins/helpers/user.js b/plugins/helpers/user.js deleted file mode 100644 index 552d7834de..0000000000 --- a/plugins/helpers/user.js +++ /dev/null @@ -1,151 +0,0 @@ -'use strict'; - -const { User, Pair, VerificationImage, Balance } = require('../../db/models'); -const { all } = require('bluebird'); - -/** - * Checks database for user with params. - * @param {object} params - sequelize param object. - * @return {promise} - Promise with found user. -*/ -const findUser = (params = {}) => { - return User.findOne(params); -}; - -/** - * Gives trading fees for user. - * @param {number} verification_level - Verification level of the user. - * @return {promise} - Promise with user trading fees. -*/ -const findUserPairFees = (verification_level = 0) => { - return Pair.findAll({ - attributes: ['name', 'maker_fees', 'taker_fees'] - }).then((data) => { - const userData = {}; - data.forEach(({ name, maker_fees, taker_fees }) => { - userData[name] = { - maker_fee: maker_fees[verification_level] || 0, - taker_fee: taker_fees[verification_level] || 0 - }; - }); - return userData; - }); -}; - -/** - * Function to find a user by the email, it will exclude the password. - * @param {string} email - User email. - * @param {array} include - Keys of fields for the query. - * @return {promise} - Promise with the user. If the dob of the user is not set, function will not return it. -*/ -const getUserValuesByEmail = (email, include) => { - return findUser({ - where: { email: email.toLowerCase() }, - attributes: include || { - exclude: ['password', 'is_admin', 'is_support', 'is_supervisor', 'is_kyc'] - }, - include: [ - { - model: Balance, - as: 'balance', - attributes: { - exclude: ['id', 'user_id', 'created_at'] - } - }, - { - model: VerificationImage, - as: 'images', - attributes: ['id'] - } - ] - }) - .then((data) => { - return all([ - data.dataValues, - findUserPairFees(data.verification_level) - ]); - }) - .then(([userData, fees]) => { - return { - ...userData, - fees - }; - }) - .then(cleanUserFromDb); -}; - -/** - * Function to find a user by the id, it will exclude the password. - * @param {string} id - User id. - * @param {array} include - Keys of fields for the query. - * @return {promise} - Promise with the user. If the dob of the user is not set, function will not return it. -*/ -const getUserValuesById = (id, include) => { - return findUser({ - where: { id }, - attributes: include || { - exclude: ['password', 'is_admin', 'is_support', 'is_supervisor', 'is_kyc'] - }, - include: [ - { - model: Balance, - as: 'balance', - attributes: { - exclude: ['id', 'user_id', 'created_at'] - } - }, - { - model: VerificationImage, - as: 'images', - attributes: ['id'] - } - ] - }) - .then((data) => { - return all([ - data.dataValues, - findUserPairFees(data.verification_level) - ]); - }) - .then(([userData, fees]) => { - return { - ...userData, - fees - }; - }) - .then(cleanUserFromDb); -}; - -/** - * Function that remove values before send the user to the response. - * @param {object} user - User data from DB. - * @return {object} - User data values. -*/ -const cleanUserFromDb = (user) => { - const userData = { - ...user - }; - - if (user.balance) { - userData.balance = user.balance.dataValues; - } - - if (userData.id_data) { - if (!userData.id_data.issued_date) { - delete userData.id_data.issued_date; - } - if (!userData.id_data.expiration_date) { - delete userData.id_data.expiration_date; - } - } - if (!userData.dob) { - delete userData.dob; - } - return userData; -}; - -module.exports = { - findUser, - getUserValuesByEmail, - getUserValuesById -}; \ No newline at end of file diff --git a/plugins/index.js b/plugins/index.js deleted file mode 100644 index 16c56de0b7..0000000000 --- a/plugins/index.js +++ /dev/null @@ -1,37 +0,0 @@ -'use strict'; - -const express = require('express'); -const cors = require('cors'); -const app = express(); -const { PLUGIN_PORT, AVAILABLE_PLUGINS } = require('./constants'); -const { GET_CONFIGURATION } = require('../constants'); - -const PLUGINS = () => GET_CONFIGURATION().constants.plugins.enabled || process.env.PLUGINS || ''; - -const PORT = PLUGIN_PORT; - -const enabledPlugins = () => PLUGINS().split(','); - -app.listen(PORT); - -app.use(cors()); - -app.get('/plugins', (req, res) => { - res.json({ - enabled: enabledPlugins(), - available: AVAILABLE_PLUGINS - }); -}); - -module.exports = app; - -// Require every plugin for now -AVAILABLE_PLUGINS.forEach((plugin) => { - if (plugin) { - try { - require('./' + plugin); - } catch (err) { - console.log(`${plugin} directory does not exist`); - } - } -}); \ No newline at end of file diff --git a/plugins/kyc/helpers.js b/plugins/kyc/helpers.js deleted file mode 100644 index bbe698dffa..0000000000 --- a/plugins/kyc/helpers.js +++ /dev/null @@ -1,335 +0,0 @@ -'use strict'; - -const { findUser } = require('../helpers/user'); -const { VerificationImage, sequelize } = require('../../db/models'); -const { ROLES, GET_SECRETS } = require('../../constants'); -const { - USER_FIELD_ADMIN_LOG, - ID_FIELDS, - ADDRESS_FIELDS, - VERIFY_STATUS -} = require('../constants'); -const AWS_SE = 'amazonaws.com/'; -const EXPIRES = 300; // seconds -const { differenceWith, isEqual } = require('lodash'); -const { all } = require('bluebird'); -const { ERROR_CHANGE_USER_INFO, IMAGE_NOT_FOUND } = require('./messages'); - -const S3_BUCKET_NAME = () => { - return (GET_SECRETS().plugins.s3.id_docs_bucket).split(':')[0]; -}; -const s3Write = () => require('./s3').write(S3_BUCKET_NAME()); -const s3Read = () => require('./s3').read(S3_BUCKET_NAME()); - -const multer = require('multer'); -const upload = multer(); -const multerMiddleware = upload.fields([ - { name: 'front', maxCount: 1 }, - { name: 'back', maxCount: 1 }, - { name: 'proof_of_residency', maxCount: 1 } -]) - -const validMimeType = (type = '') => { - return type.indexOf('image/') === 0; -}; - -const getType = (type = '') => { - return type.replace('image/', ''); -}; - -const uploadFile = (name, file) => { - return new Promise((resolve, reject) => { - const params = { - Bucket: S3_BUCKET_NAME(), - Key: name, - Body: file.buffer, - ContentType: file.mimetype, - ACL: 'authenticated-read' - }; - s3Write().upload(params, (err, data) => { - if (err) { - reject(err); - } - resolve(data); - }); - }); -}; - -const getImagesData = (user_id, type = undefined) => { - return VerificationImage.findOne({ - where: { user_id }, - order: [['created_at', 'DESC']], - attributes: ['front', 'back', 'proof_of_residency'] - }).then((verificationImages) => { - if (!verificationImages) { - if (type === 'admin') { - return { front: undefined, back: undefined, proof_of_residency: undefined }; - } - throw new Error(IMAGE_NOT_FOUND); - } - return verificationImages.dataValues; - }); -}; - -const approveDocuments = (user) => { - return updateUserData( - { - id_data: { ...user.id_data, status: VERIFY_STATUS.COMPLETED, note: '' } - }, - ROLES.SUPPORT - )(user, { returning: true }).then((user) => { - return user; - }); -}; - -const revokeDocuments = (user, message = '') => { - return sequelize - .transaction((transaction) => { - return all([ - VerificationImage.destroy({ - where: { user_id: user.id }, - transaction - }), - updateUserData( - { - id_data: { - ...user.id_data, - status: VERIFY_STATUS.REJECTED, - note: message - } - }, - ROLES.SUPPORT - )(user, { transaction, returning: true }) - ]); - }) - .then(([destroyed, user]) => { - return user; - }); -}; - -const findUserImages = (where) => { - return findUser({ where, attributes: ['id', 'id_data'] }) - .then((user) => { - return Promise.all([ - user.dataValues, - getImagesData(user.id).then(getLinks) - ]); - }) - .then(([user, links]) => { - return { user, data: links }; - }); -}; - -const getLinks = ({ front, back, proof_of_residency }) => { - const data = { - front: front ? getPublicLink(front) : '', - back: back ? getPublicLink(back) : '', - proof_of_residency: proof_of_residency - ? getPublicLink(proof_of_residency) - : '' - }; - return data; -}; - -const getKeyFromLink = (link) => { - const indexOfService = link.indexOf(AWS_SE); - if (indexOfService > 0) { - return link.substring(indexOfService + AWS_SE.length); - } - // if not amazon.com link, return same link - return link; -}; - -const getPublicLink = (privateLink) => { - const Key = getKeyFromLink(privateLink); - const params = { - Bucket: S3_BUCKET_NAME(), - Key: getKeyFromLink(privateLink), - Expires: EXPIRES - }; - - return s3Read().getSignedUrl('getObject', params); -}; - -const updateUserPhoneNumber = (user, phone_number, options = {}) => { - return user.update( - { phone_number }, - { fields: ['phone_number'], ...options } - ); -}; - -const bankComparison = (bank1, bank2, description) => { - let difference = []; - let note = ''; - if (bank1.length === bank2.length) { - note = 'bank info updated'; - difference = differenceWith(bank1, bank2, isEqual); - } else if (bank1.length > bank2.length) { - note = 'bank removed'; - difference = differenceWith(bank1, bank2, isEqual); - } else if (bank1.length < bank2.length) { - note = 'bank added'; - difference = differenceWith(bank2, bank1, isEqual); - } - - // bank data is changed - if (difference.length > 0) { - description.note = note; - description.new.bank_account = bank2; - description.old.bank_account = bank1; - } - return description; -}; - -const userUpdateLog = (user_id, prevData = {}, newData = {}) => { - let description = { - user_id, - note: `Change in user ${user_id} information`, - old: {}, - new: {} - }; - for (const key in newData) { - if (USER_FIELD_ADMIN_LOG.includes(key)) { - let prevRecord = prevData[key] || 'empty'; - let newRecord = newData[key] || 'empty'; - if (key === 'bank_account') { - description = bankComparison( - prevData.bank_account, - newData.bank_account, - description - ); - } else if (key === 'id_data') { - ID_FIELDS.forEach((field) => { - if (newRecord[field] != prevRecord[field]) { - description.old[field] = prevRecord[field]; - description.new[field] = newRecord[field]; - } - }); - } else if (key === 'address') { - ADDRESS_FIELDS.forEach((field) => { - if (prevRecord[field] != newRecord[field]) { - description.old[field] = prevRecord[field]; - description.new[field] = newRecord[field]; - } - }); - } else { - if (prevRecord.toString() != newRecord.toString()) { - description.old[key] = prevRecord; - description.new[key] = newRecord; - } - } - } - } - return description; -}; - -const updateUserData = ( - { id_data = {}, bank_account, ...rest }, - role = ROLES.USER -) => (user, options = {}) => { - const updateData = { - ...rest - }; - if (Object.keys(id_data).length > 0) { - if (role === ROLES.USER) { - if (user.dataValues.status === VERIFY_STATUS.COMPLETED) { - throw new Error(ERROR_CHANGE_USER_INFO); - } else { - updateData['id_data'] = id_data; - updateData.id_data.status = VERIFY_STATUS.PENDING; - } - } else { - updateData['id_data'] = id_data; - } - } - if ( - updateData.full_name || - updateData.gender || - updateData.dob || - updateData.address || - updateData.nationality - ) { - if (user.dataValues.id_data === VERIFY_STATUS.COMPLETED) { - throw new Error(ERROR_CHANGE_USER_INFO); - } - } - // User is not allowed to update his phone number through this. User has to verify phone number through a whole different process - if (updateData.phone_number && role === ROLES.USER) { - throw new Error(ERROR_CHANGE_USER_INFO); - } - return user.update(updateData, { - fields: [ - 'full_name', - 'gender', - 'nationality', - 'dob', - 'address', - 'phone_number', - 'id_data' - ], - ...options - }); -}; - -const storeFilesDataOnDb = ( - user_id, - data, - front = '', - back = '', - proof_of_residency = '' -) => { - return sequelize.transaction((transaction) => { - const options = { transaction }; - return VerificationImage.findOrCreate( - { - where: { user_id }, - defaults: { - user_id, - front, - back, - proof_of_residency - }, - options - } - ) - .then(([image, created]) => { - if(!created) { - return image.update({ - front, - back, - proof_of_residency - }, { options } ); - } else { - return image; - } - }) - .then((image) => { - return findUser({ - where: { id: user_id }, - attributes: ['id', 'id_data'], - transaction - }); - }) - .then((user) => { - return updateUserData(data, 'user')(user, { - ...options, - returning: true - }); - }); - }); -}; - -module.exports = { - validMimeType, - uploadFile, - updateUserData, - getImagesData, - findUserImages, - storeFilesDataOnDb, - getType, - updateUserPhoneNumber, - multerMiddleware, - userUpdateLog, - approveDocuments, - revokeDocuments -}; \ No newline at end of file diff --git a/plugins/kyc/index.js b/plugins/kyc/index.js deleted file mode 100644 index 7e52feca9a..0000000000 --- a/plugins/kyc/index.js +++ /dev/null @@ -1,611 +0,0 @@ -'use strict'; - -const app = require('../index'); -const { verifyToken, checkScopes } = require('../helpers/auth'); -const { findUser, getUserValuesByEmail } = require('../helpers/user'); -const { createAudit } = require('../helpers/audit'); -const { sendEmail } = require('../../mail'); -const { MAILTYPE } = require('../../mail/strings'); -const { - multerMiddleware, - validMimeType, - uploadFile, - getImagesData, - findUserImages, - storeFilesDataOnDb, - updateUserData, - getType, - updateUserPhoneNumber, - userUpdateLog, - approveDocuments, - revokeDocuments -} = require('./helpers'); -const { SMS_INVALID_PHONE, DEFAULT_REJECTION_NOTE, ID_EMAIL_REQUIRED, PENDING_APPROVAL_DENY } = require('./messages'); -const bodyParser = require('body-parser'); -const PhoneNumber = require('awesome-phonenumber'); -const { sequelize } = require('../../db/models'); -const { cloneDeep, omit } = require('lodash'); -const { ROLES } = require('../../constants'); -const { all } = require('bluebird'); -const { logger, updatePluginConstant, maskSecrets } = require('../helpers/common'); -const { NOT_AUTHORIZED } = require('../helpers/messages'); -const { GET_SECRETS } = require('../../constants'); - -app.get('/plugins/kyc/constant', verifyToken, (req, res) => { - const endpointScopes = ['admin', 'tech']; - const scopes = req.auth.scopes; - - logger.verbose( - 'GET /plugins/kyc/constant auth', - req.auth.sub - ); - - if (!checkScopes(endpointScopes, scopes)) { - logger.error('GET /plugins/kyc/constant error', NOT_AUTHORIZED); - return res.status(400).json({ message: NOT_AUTHORIZED }); - } - - try { - res.json(maskSecrets('s3', GET_SECRETS().plugins.s3) || {}); - } catch (err) { - res.status(400).json({ message: err.message }); - } -}); - -app.put('/plugins/kyc/constant', [verifyToken, bodyParser.json()], (req, res) => { - const endpointScopes = ['admin', 'tech']; - const scopes = req.auth.scopes; - - logger.verbose( - 'PUT /plugins/kyc/constant auth', - req.auth.sub - ); - - if (!checkScopes(endpointScopes, scopes)) { - logger.error('PUT /plugins/kyc/constant error', NOT_AUTHORIZED); - return res.status(400).json({ message: NOT_AUTHORIZED }); - } - - if (req.body.length === 0) { - logger.error('PUT /plugins/kyc/constant error', 'Must provide key to update'); - return res.status(400).json({ message: 'Must provide key to update' }); - } - - logger.info( - 'PUT /plugins/kyc/constant body', - req.body - ); - - updatePluginConstant('s3', req.body) - .then((data) => { - res.json(data); - }) - .catch((err) => { - res.status(400).json({ message: err.message }); - }); -}); - -app.put('/plugins/kyc/user', [verifyToken, bodyParser.json()], (req, res) => { - const endpointScopes = ['user']; - const scopes = req.auth.scopes; - - logger.verbose( - 'PUT /plugins/kyc/user', - req.body - ); - - if (!checkScopes(endpointScopes, scopes)) { - logger.error('PUT /plugins/kyc/user error', NOT_AUTHORIZED); - return res.status(400).json({ message: NOT_AUTHORIZED }); - } - - const email = req.auth.sub.email; - const editUser = req.body; - - findUser({ - where: { email }, - attributes: { - exclude: [ - 'password', - 'created_at', - 'updated_at', - 'email', - 'balance', - 'crypto_wallet', - 'verification_level', - 'otp_enabled', - 'is_admin', - 'is_supervisor', - 'is_support', - 'is_kyc', - 'is_tech', - 'flagged', - 'affiliation_code' - ] - } - }) - .then(updateUserData(editUser, ROLES.USER)) - .then(() => getUserValuesByEmail(email)) - .then((user) => res.json(user)) - .catch((error) => { - logger.error('PUT /plugins/kyc/user', error); - res.status(error.status || 400).json({ message: error.message }); - }); -}); - -app.put('/plugins/kyc/admin', [verifyToken, bodyParser.json()], (req, res) => { - const endpointScopes = ['admin', 'supervisor', 'support']; - const scopes = req.auth.scopes; - - logger.verbose( - 'PUT /plugins/kyc/admin', - req.auth - ); - - if (!checkScopes(endpointScopes, scopes)) { - logger.error('PUT /plugins/kyc/admin error', NOT_AUTHORIZED); - return res.status(400).json({ message: NOT_AUTHORIZED }); - } - - const ip = req.headers['x-real-ip']; - const domain = req.headers['x-real-origin']; - const admin_id = req.auth.sub.id; - const id = req.query.user_id; - const data = req.body; - - const REMOVE_PROPS = [ - 'id_data', - 'bank_account', - 'crypto_wallet', - 'verification_level', - 'otp_enabled', - 'activated', - 'username', - 'settings' - ]; - - REMOVE_PROPS.forEach((key) => { - if (data.hasOwnProperty(key)) { - delete data[key]; - } - }) - - let phoneNumber; - if (data.phone_number) { - phoneNumber = new PhoneNumber(data.phone_number); - if (data.phone_number && !phoneNumber.isValid()) { - logger.error( - 'PUT /plugins/kyc/admin not a valid phone number', - data.phone_number - ); - return res.status(400).json({ message: SMS_INVALID_PHONE }); - } - } - - sequelize - .transaction((transaction) => { - const options = { transaction, returning: true }; - let prevUserData = {}; // for audit - return findUser({ where: { id } }) - .then((user) => { - prevUserData = cloneDeep(user.dataValues); - logger.verbose( - 'PUT /plugins/kyc/admin user', - prevUserData - ); - return updateUserData(data, ROLES.SUPPORT)(user, options); - }) - .then((user) => { - logger.debug( - 'PUT /plugins/kyc/admin user then', - user.dataValues, - user.previous('bank_account') - ); - if (data.phone_number) { - return updateUserPhoneNumber( - user, - phoneNumber.getNumber(), - options - ); - } - return user; - }) - .then((user) => { - logger.verbose( - 'PUT /plugins/kyc/admin user then then', - prevUserData.dataValues, - user - ); - const description = userUpdateLog( - user.id, - prevUserData, - user.dataValues - ); - return all([ - user, - createAudit(admin_id, 'userUpdate', description, ip, domain) - ]); - }); - }) - .then(([user, audit]) => { - logger.info( - 'PUT /plugins/kyc/admin user_end audit', - user.dataValues, - audit - ); - user = omit(user.dataValues, [ - 'password', - 'is_admin', - 'is_support', - 'is_kyc', - 'is_supervisor' - ]); - res.json(user); - }) - .catch((err) => { - logger.error( - 'PUT /plugins/kyc/admin catch', - err.messsage - ) - res.status(err.status || 400).json({ message: err.message }); - }); -}); - -app.post('/plugins/kyc/user/upload', [verifyToken, multerMiddleware], (req, res) => { - const endpointScopes = ['user']; - const scopes = req.auth.scopes; - - logger.verbose('POST /plugins/kyc/user/upload auth', req.auth.sub); - - if (!checkScopes(endpointScopes, scopes)) { - logger.error('POST /plugins/kyc/user/upload error', NOT_AUTHORIZED); - return res.status(400).json({ message: NOT_AUTHORIZED }); - } - - const { id, email } = req.auth.sub; - let { front, back, proof_of_residency } = req.files; - if (front) front = front[0]; - if (back) back = back[0]; - if (proof_of_residency) proof_of_residency = proof_of_residency[0]; - const { ...otherData } = req.body; - - let invalidType = ''; - if (!validMimeType(front.mimetype)) { - invalidType = 'front'; - } else if (back && !validMimeType(back.mimetype)) { - invalidType = 'back'; - } else if ( - proof_of_residency && - !validMimeType(proof_of_residency.mimetype) - ) { - invalidType = 'proof_of_residency'; - } - if (invalidType) { - return res.status(400).json({ message: `Invalid type: ${invalidType} field.` }); - } - - const data = { id_data: {} }; - - Object.entries(otherData).forEach(([key, field]) => { - if (field) { - if ( - key === 'type' || - key === 'number' || - key === 'issued_date' || - key === 'expiration_date' - ) { - data.id_data[key] = field; - } - } - }); - - const ts = Date.now(); - findUser({ - where: { - id - }, - attributes: [ - 'id', - 'id_data' - ] - }) - .then((user) => { - let { status } = user.dataValues.id_data || 0; - if (status === 3) { - throw new Error(PENDING_APPROVAL_DENY); - } - return Promise.all([ - uploadFile( - `${id}/${ts}-front.${getType(front.mimetype)}`, - front - ), - back - ? uploadFile( - `${id}/${ts}-back.${getType(back.mimetype)}`, - back - ) - : undefined, - proof_of_residency - ? uploadFile( - `${id}/${ts}-proof_of_residency.${getType( - proof_of_residency.mimetype - )}`, - proof_of_residency - ) - : undefined - ]); - }) - .then((results) => { - logger.verbose('POST /plugins/kyc/user/upload results', results); - return storeFilesDataOnDb( - id, - data, - results[0].Location, - results[1] ? results[1].Location : '', - results[2] ? results[2].Location: '' - ); - }) - .then(() => { - sendEmail(MAILTYPE.USER_VERIFICATION, email, {}, {}); - res.json({ message: 'Success' }); - }) - .catch((err) => { - logger.error('POST /plugins/kyc/user/upload error', err); - res.status(400).json({ message: err.message }); - }); -}); - -app.post('/plugins/kyc/admin/upload', [verifyToken, multerMiddleware], (req, res) => { - const endpointScopes = ['admin', 'supervisor']; - const scopes = req.auth.scopes; - - logger.verbose('POST /plugins/kyc/admin/upload auth', req.auth.sub); - - if (!checkScopes(endpointScopes, scopes)) { - logger.error('POST /plugins/kyc/admin/upload error', NOT_AUTHORIZED); - return res.status(400).json({ message: NOT_AUTHORIZED }); - } - - let { front, back, proof_of_residency } = req.files; - if (front) front = front[0]; - if (back) back = back[0]; - if (proof_of_residency) proof_of_residency = proof_of_residency[0]; - const { ...otherData } = req.body; - const user_id = req.query.user_id; - - logger.verbose( - 'POST /plugins/kyc/admin/upload user_id', - user_id - ) - - if ( - !front && - !back && - !proof_of_residency && - Object.keys(otherData).length === 0 - ) { - return res.status(400).json({ message: 'Missing fields' }); - } - - let invalidType = ''; - if (front && !validMimeType(front.mimetype)) { - invalidType = 'front'; - } else if (back && !validMimeType(back.mimetype)) { - invalidType = 'back'; - } else if ( - proof_of_residency && - !validMimeType(proof_of_residency.mimetype) - ) { - invalidType = 'proof_of_residency'; - } - if (invalidType) { - return res - .status(400) - .json({ message: `Invalid type ${invalidType} field.` }); - } - - const data = { id_data: { provided: true }}; - - Object.entries(otherData).forEach(([key, field]) => { - if (field) { - if ( - key === 'type' || - key === 'number' || - key === 'issued_date' || - key === 'expiration_date' - ) { - data.id_data[key] = field; - } - } - }); - - const ts = Date.now(); - - findUser({ where: { id: user_id }, attributes: ['id']}) - .then((user) => getImagesData(user.id, 'admin')) - .then((data) => { - return Promise.all([ - front - ? uploadFile( - `${user_id}/${ts}-front.${getType(front.mimetype)}`, - front - ) - : { Location: data.front }, - back - ? uploadFile( - `${user_id}/${ts}-back.${getType(back.mimetype)}`, - back - ) - : { Location: data.back }, - proof_of_residency - ? uploadFile( - `${user_id}/${ts}-proof_of_residency.${getType( - proof_of_residency.mimetype - )}`, - proof_of_residency - ) - : { Location: data.proof_of_residency } - ]); - }) - .then((results) => { - return storeFilesDataOnDb( - user_id, - data, - results[0] ? results[0].Location : '', - results[1] ? results[1].Location : '', - results[2] ? results[2].Location : '' - ); - }) - .then((user) => { - return findUserImages({ id: user_id }); - }) - .then((data) => { - logger.debug('POST /plugins/kyc/admin/upload data', data); - res.json({ message: 'Success', data }); - }) - .catch((err) => { - console.log(err); - logger.error('POST /plugins/kyc/admin/upload err', err.message); - res.status(400).json({ message: err.message }); - }); -}); - -app.get('/plugins/kyc/id', verifyToken, (req, res) => { - const endpointScopes = ['admin', 'supervisor', 'support', 'kyc']; - const scopes = req.auth.scopes; - - logger.verbose('GET /plugins/kyc/id auth', req.auth.sub); - - if (!checkScopes(endpointScopes, scopes)) { - logger.error('GET /plugins/kyc/id error', NOT_AUTHORIZED); - return res.status(400).json({ message: NOT_AUTHORIZED }); - } - - const { email, id } = req.query; - const where = {}; - if (id) { - where.id = id; - } else if (email) { - where.email = email; - } else { - return res - .status(400) - .json({ message: ID_EMAIL_REQUIRED }); - } - - findUserImages(where) - .then(({ data }) => { - logger.debug('GET /plugins/kyc/id data', data); - res.json(data); - }) - .catch((err) => { - logger.error('GET /plugins/kyc/id auth', err.message); - res.status(400).json({ message: err.message }); - }); -}); - -app.post('/plugins/kyc/id/verify', [verifyToken, bodyParser.json()], (req, res) => { - const endpointScopes = ['admin', 'supervisor', 'support', 'kyc']; - const scopes = req.auth.scopes; - - logger.verbose( - 'POST /plugins/kyc/id/verify auth', - req.auth.sub - ); - - if (!checkScopes(endpointScopes, scopes)) { - logger.error('POST /plugins/kyc/id/verify error', NOT_AUTHORIZED); - return res.status(400).json({ message: NOT_AUTHORIZED }); - } - - const { user_id } = req.body; - - logger.verbose( - 'POST /plugins/kyc/id/verify user_id', - user_id - ); - - findUser({ - where: { - id: user_id - }, - attributes: ['id', 'id_data'] - }) - .then((user) => { - return approveDocuments(user); - }) - .then((user) => { - const data = {}; - data.id_data = user.id_data; - logger.debug( - 'POST /plugins/kyc/id/verify data', - data - ); - res.json(data); - }) - .catch((err) => { - logger.error( - 'POST /plugins/kyc/id/verify error', - err.message - ); - res.status(err.status || 400).json({ message: err.message }); - }); -}); - -app.post('/plugins/kyc/id/revoke', [verifyToken, bodyParser.json()], (req, res) => { - const endpointScopes = ['admin', 'supervisor', 'support', 'kyc']; - const scopes = req.auth.scopes; - - logger.verbose( - 'POST /plugins/kyc/id/revoke auth', - req.auth.sub - ); - - if (!checkScopes(endpointScopes, scopes)) { - logger.error('POST /plugins/kyc/id/revoke error', NOT_AUTHORIZED); - return res.status(400).json({ message: NOT_AUTHORIZED }); - } - - const { user_id } = req.body; - const { message } = req.body || DEFAULT_REJECTION_NOTE; - - logger.verbose( - 'POST /plugins/kyc/id/revoke body', - user_id, - message - ); - - findUser({ - where: { - id: user_id - }, - attributes: ['id', 'email', 'id_data', 'settings'] - }) - .then((user) => { - return revokeDocuments(user, message); - }) - .then((user) => { - const { email } = user.dataValues; - const emailData = { type: 'id', message }; - const data = {}; - data.id_data = user.id_data; - sendEmail( - MAILTYPE.USER_VERIFICATION_REJECT, - email, - emailData, - user.settings - ); - logger.debug( - 'POST /plugins/kyc/id/revoke data', - data - ); - res.json(data); - }) - .catch((err) => { - logger.error( - 'POST /plugins/kyc/id/revple error', - err.message - ); - res.status(err.status || 400).json({ message: err.message }); - }); -}); \ No newline at end of file diff --git a/plugins/kyc/messages.js b/plugins/kyc/messages.js deleted file mode 100644 index a53d8fd462..0000000000 --- a/plugins/kyc/messages.js +++ /dev/null @@ -1,8 +0,0 @@ -'use strict'; - -exports.SMS_INVALID_PHONE = 'Invalid mobile phone number'; -exports.DEFAULT_REJECTION_NOTE = 'Unspecified'; -exports.ID_EMAIL_REQUIRED = 'Missing parameters. ID and email required'; -exports.PENDING_APPROVAL_DENY = 'You are not allowed to upload a document while its pending or approved'; -exports.ERROR_CHANGE_USER_INFO = 'You are not allowed to change your information'; -exports.IMAGE_NOT_FOUND = 'ID image not found'; \ No newline at end of file diff --git a/plugins/kyc/package-lock.json b/plugins/kyc/package-lock.json deleted file mode 100644 index 3aedc9f0db..0000000000 --- a/plugins/kyc/package-lock.json +++ /dev/null @@ -1,314 +0,0 @@ -{ - "name": "kyc", - "version": "0.1.0", - "lockfileVersion": 1, - "requires": true, - "dependencies": { - "append-field": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/append-field/-/append-field-1.0.0.tgz", - "integrity": "sha1-HjRA6RXwsSA9I3SOeO3XubW0PlY=" - }, - "awesome-phonenumber": { - "version": "2.2.5", - "resolved": "https://registry.npmjs.org/awesome-phonenumber/-/awesome-phonenumber-2.2.5.tgz", - "integrity": "sha512-CHVEWEtXhaUB4ZGki/MQOlxK9wX+x3rw0/OARxB/srJTBP7b8nZjuE69WKQIUmciYdYGP2qywFPyubewJnFLbQ==" - }, - "aws-sdk": { - "version": "2.205.0", - "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.205.0.tgz", - "integrity": "sha1-GpNzAlPivgJ6S9OvkkjL2gVz3oA=", - "requires": { - "buffer": "4.9.1", - "events": "^1.1.1", - "jmespath": "0.15.0", - "querystring": "0.2.0", - "sax": "1.2.1", - "url": "0.10.3", - "uuid": "3.1.0", - "xml2js": "0.4.17", - "xmlbuilder": "4.2.1" - } - }, - "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==" - }, - "buffer": { - "version": "4.9.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz", - "integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=", - "requires": { - "base64-js": "^1.0.2", - "ieee754": "^1.1.4", - "isarray": "^1.0.0" - } - }, - "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==" - }, - "busboy": { - "version": "0.2.14", - "resolved": "https://registry.npmjs.org/busboy/-/busboy-0.2.14.tgz", - "integrity": "sha1-bCpiLvz0fFe7vh4qnDetNseSVFM=", - "requires": { - "dicer": "0.2.5", - "readable-stream": "1.1.x" - } - }, - "concat-stream": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", - "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", - "requires": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^2.2.2", - "typedarray": "^0.0.6" - }, - "dependencies": { - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "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" - } - }, - "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==", - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, - "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=" - }, - "dicer": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/dicer/-/dicer-0.2.5.tgz", - "integrity": "sha1-WZbAhrszIYyBLAkL3cCc0S+stw8=", - "requires": { - "readable-stream": "1.1.x", - "streamsearch": "0.1.2" - } - }, - "ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" - }, - "events": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz", - "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=" - }, - "ieee754": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", - "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==" - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" - }, - "jmespath": { - "version": "0.15.0", - "resolved": "https://registry.npmjs.org/jmespath/-/jmespath-0.15.0.tgz", - "integrity": "sha1-o/Iiqarp+Wb10nx5ZRDigJF2Qhc=" - }, - "lodash": { - "version": "4.17.19", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.19.tgz", - "integrity": "sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ==" - }, - "media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" - }, - "mime-db": { - "version": "1.43.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.43.0.tgz", - "integrity": "sha512-+5dsGEEovYbT8UY9yD7eE4XTc4UwJ1jBYlgaQQF38ENsKR3wj/8q8RFZrF9WIZpB2V1ArTVFUva8sAul1NzRzQ==" - }, - "mime-types": { - "version": "2.1.26", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.26.tgz", - "integrity": "sha512-01paPWYgLrkqAyrlDorC1uDwl2p3qZT7yl806vW7DvDoxwXi46jsjFbg+WdwotBIk6/MbEhO/dh5aZ5sNj/dWQ==", - "requires": { - "mime-db": "1.43.0" - } - }, - "minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" - }, - "mkdirp": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", - "requires": { - "minimist": "^1.2.5" - } - }, - "multer": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/multer/-/multer-1.4.2.tgz", - "integrity": "sha512-xY8pX7V+ybyUpbYMxtjM9KAiD9ixtg5/JkeKUTD6xilfDv0vzzOFcCp4Ljb1UU3tSOM3VTZtKo63OmzOrGi3Cg==", - "requires": { - "append-field": "^1.0.0", - "busboy": "^0.2.11", - "concat-stream": "^1.5.2", - "mkdirp": "^0.5.1", - "object-assign": "^4.1.1", - "on-finished": "^2.3.0", - "type-is": "^1.6.4", - "xtend": "^4.0.0" - } - }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" - }, - "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" - } - }, - "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==" - }, - "punycode": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", - "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=" - }, - "querystring": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", - "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=" - }, - "readable-stream": { - "version": "1.1.14", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", - "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - }, - "dependencies": { - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" - } - } - }, - "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==" - }, - "sax": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.1.tgz", - "integrity": "sha1-e45lYZCyKOgaZq6nSEgNgozS03o=" - }, - "streamsearch": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-0.1.2.tgz", - "integrity": "sha1-gIudDlb8Jz2Am6VzOOkpkZoanxo=" - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" - }, - "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=" - }, - "url": { - "version": "0.10.3", - "resolved": "https://registry.npmjs.org/url/-/url-0.10.3.tgz", - "integrity": "sha1-Ah5NnHcF8hu/N9A861h2dAJ3TGQ=", - "requires": { - "punycode": "1.3.2", - "querystring": "0.2.0" - } - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" - }, - "uuid": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.1.0.tgz", - "integrity": "sha512-DIWtzUkw04M4k3bf1IcpS2tngXEL26YUD2M0tMDUpnUrz2hgzUBlD55a4FjdLGPvfHxS6uluGWvaVEqgBcVa+g==" - }, - "xml2js": { - "version": "0.4.17", - "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.17.tgz", - "integrity": "sha1-F76T6q4/O3eTWceVtBlwWogX6Gg=", - "requires": { - "sax": ">=0.6.0", - "xmlbuilder": "^4.1.0" - } - }, - "xmlbuilder": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-4.2.1.tgz", - "integrity": "sha1-qlijBBoGb5DqoWwvU4n/GfP0YaU=", - "requires": { - "lodash": "^4.0.0" - } - }, - "xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" - } - } -} diff --git a/plugins/kyc/package.json b/plugins/kyc/package.json deleted file mode 100644 index c57c4be570..0000000000 --- a/plugins/kyc/package.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "name": "kyc", - "version": "0.1.0", - "dependencies": { - "aws-sdk": "2.205.0", - "multer": "1.4.2", - "awesome-phonenumber": "2.2.5" - } -} diff --git a/plugins/kyc/s3.js b/plugins/kyc/s3.js deleted file mode 100644 index 44bc7abf9d..0000000000 --- a/plugins/kyc/s3.js +++ /dev/null @@ -1,49 +0,0 @@ -'use strict'; - -const aws = require('aws-sdk'); -const { GET_SECRETS } = require('../../constants'); - -const generateBuckets = (bucketsString = '') => { - const bucketsSplit = bucketsString - .split(',') - .map((bucketString) => bucketString.split(':')); - const buckets = {}; - - bucketsSplit.forEach(([bucketName, bucketRegion]) => { - buckets[bucketName] = { - region: bucketRegion, - signatureVersion: 'v4' - }; - }); - - return buckets; -}; - -const credentials = () => { - return { - write: { - accessKeyId: GET_SECRETS().plugins.s3.key.write, - secretAccessKey: GET_SECRETS().plugins.s3.secret.write - }, - read: { - accessKeyId: GET_SECRETS().plugins.s3.key.read, - secretAccessKey: GET_SECRETS().plugins.s3.secret.read - }, - buckets: generateBuckets(GET_SECRETS().plugins.s3.id_docs_bucket) - } -}; - -const write = (bucketName) => { - aws.config.update(credentials().write); - return new aws.S3(credentials().buckets[bucketName]); -}; - -const read = (bucketName) => { - aws.config.update(credentials().read); - return new aws.S3(credentials().buckets[bucketName]); -}; - -module.exports = { - write, - read -}; diff --git a/plugins/package-lock.json b/plugins/package-lock.json deleted file mode 100644 index 3b4e558389..0000000000 --- a/plugins/package-lock.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "name": "plugins", - "version": "0.1.0", - "lockfileVersion": 1, - "requires": true, - "dependencies": { - "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" - } - }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" - }, - "vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" - } - } -} diff --git a/plugins/package.json b/plugins/package.json deleted file mode 100644 index 7060e34955..0000000000 --- a/plugins/package.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "name": "plugins", - "version": "0.1.0", - "dependencies": { - "cors": "2.8.5" - } -} diff --git a/plugins/sms/helpers.js b/plugins/sms/helpers.js deleted file mode 100644 index 789fda1e98..0000000000 --- a/plugins/sms/helpers.js +++ /dev/null @@ -1,149 +0,0 @@ -'use strict'; - -const redis = require('../../db/redis').duplicate(); -const otp = require('otp'); -const Promise = require('bluebird'); -const PhoneNumber = require('awesome-phonenumber'); -const { - SMS_CODE_KEY, - SMS_CODE_EXPIRATION_TIME -} = require('../constants'); -const { GET_CONFIGURATION } = require('../../constants'); -const { - SMS_ERROR, - SMS_PHONE_DONT_MATCH, - SMS_CODE_INVALID, - SMS_CODE_EXPIRED, - INVALID_PHONE_NUMBER -} = require('./messages'); - -const DEFAULT_LANGUAGE = () => GET_CONFIGURATION().constants.defaults.language; -const OTP_NAME = () => GET_CONFIGURATION().constants.api_name; -const sns = () => require('./sns')(); - -const generateUserKey = (user_id) => `${SMS_CODE_KEY}:${user_id}`; - -const createSMSCode = () => { - return generateOtp(); -} - -const generateOtp = (secret) => { - const options = { - name: OTP_NAME(), - secret - }; - - const totp = otp(options).totp(); - return totp; -}; - -const storeSMSCode = (user_id, phone, code) => { - const userKey = generateUserKey(user_id); - const data = { - phone, - code - }; - - return redis.setAsync( - userKey, - JSON.stringify(data), - 'EX', - SMS_CODE_EXPIRATION_TIME - ); -}; - -const checkSMSCode = (user_id, phone, code) => { - const userKey = generateUserKey(user_id); - return redis - .getAsync(userKey) - .then((data) => { - if (!data) { - throw new Error(SMS_CODE_EXPIRED); - } - return JSON.parse(data); - }) - .then((data) => { - if (data.phone !== phone) { - throw new Error(SMS_PHONE_DONT_MATCH); - } else if (data.code !== code) { - throw new Error(SMS_CODE_INVALID); - } - return data; - }); -}; - -const deleteSMSCode = (user_id) => { - const userKey = generateUserKey(user_id); - return redis.delAsync(userKey); -}; - -const sendAwsSMS = (phoneNumber, message) => { - const params = { - Message: message, - MessageStructure: 'string', - PhoneNumber: phoneNumber - }; - - return new Promise((resolve, reject) => { - sns().publish(params, (err, data) => { - if (err) { - const error = new Error(SMS_ERROR); - error.statusCode = 400; - return reject(error); - } - return resolve(data); - }); - }); -}; - -const sendSMS = (number = '', data = {}) => { - const phoneNumber = new PhoneNumber(number); - - if (!phoneNumber.isValid()) { - return Promise.resolve(INVALID_PHONE_NUMBER); - } else { - const message = data.message; - return sendAwsSMS(phoneNumber.getNumber(), message); - } -}; - -const sendSMSDeposit = ( - type, - currency, - phoneNumber, - amount, - timestamp, - language = DEFAULT_LANGUAGE() -) => { - const { SMS } = require(`../../mail/strings/${language}`); - let message; - if (type === 'deposit' || type === 'withdrawal') { - message = SMS[type](currency, amount); - } else { - throw new Error(`Invalid type ${type}`); - } - - const data = { - message - }; - return sendSMS(phoneNumber, data).catch((err) => { - return; - }); -}; - -const updateUserPhoneNumber = (user, phone_number, options = {}) => { - return user.update( - { phone_number }, - { fields: ['phone_number'], ...options } - ); -}; - -module.exports = { - createSMSCode, - storeSMSCode, - checkSMSCode, - deleteSMSCode, - sendSMS, - sendSMSDeposit, - updateUserPhoneNumber -} \ No newline at end of file diff --git a/plugins/sms/index.js b/plugins/sms/index.js deleted file mode 100644 index f9150c5cdf..0000000000 --- a/plugins/sms/index.js +++ /dev/null @@ -1,193 +0,0 @@ -'use strict'; - -const app = require('../index'); -const { verifyToken, checkScopes } = require('../helpers/auth'); -const { findUser } = require('../helpers/user'); -const PhoneNumber = require('awesome-phonenumber'); -const bodyParser = require('body-parser'); -const { createSMSCode, storeSMSCode, checkSMSCode, deleteSMSCode, sendSMS, updateUserPhoneNumber } = require('./helpers'); -const { logger, updatePluginConstant, maskSecrets } = require('../helpers/common'); -const { NOT_AUTHORIZED } = require('../helpers/messages'); -const { - SMS_INVALID_PHONE, - SMS_SUCCESS, - PHONE_VERIFIED -} = require('./messages'); -const { GET_CONFIGURATION } = require('../../constants'); -const DEFAULT_LANGUAGE = () => GET_CONFIGURATION().constants.defaults.language; -const SMS = () => require('../../mail/strings').languageFile(DEFAULT_LANGUAGE()).SMS; -const { GET_SECRETS } = require('../../constants'); - -app.get('/plugins/sms/constant', verifyToken, (req, res) => { - const endpointScopes = ['admin', 'tech']; - const scopes = req.auth.scopes; - - logger.verbose( - 'GET /plugins/sms/constant auth', - req.auth.sub - ); - - if (!checkScopes(endpointScopes, scopes)) { - logger.error('GET /plugins/sms/constant error', NOT_AUTHORIZED); - return res.status(400).json({ message: NOT_AUTHORIZED }); - } - - try { - res.json(maskSecrets('sns', GET_SECRETS().plugins.sns) || {}); - } catch (err) { - res.status(400).json({ message: err.message }); - } -}); - -app.put('/plugins/sms/constant', [verifyToken, bodyParser.json()], (req, res) => { - const endpointScopes = ['admin', 'tech']; - const scopes = req.auth.scopes; - - logger.verbose( - 'PUT /plugins/sms/constant auth', - req.auth.sub - ); - - if (!checkScopes(endpointScopes, scopes)) { - logger.error('PUT /plugins/sms/constant error', NOT_AUTHORIZED); - return res.status(400).json({ message: NOT_AUTHORIZED }); - } - - if (req.body.length === 0) { - logger.error('PUT /plugins/sms/constant error', 'Must provide key to update'); - return res.status(400).json({ message: 'Must provide key to update' }); - } - - logger.info( - 'PUT /plugins/sms/constant body', - req.body - ); - - updatePluginConstant('sns', req.body) - .then((data) => { - res.json(data); - }) - .catch((err) => { - res.status(400).json({ message: err.message }); - }); -}); - -app.get('/plugins/sms/verify', verifyToken, (req, res) => { - const endpointScopes = ['user']; - const scopes = req.auth.scopes; - - logger.verbose( - 'GET /sms/verify auth', - req.auth.sub - ); - - if (!checkScopes(endpointScopes, scopes)) { - logger.error('GET /plugins/sms/verify error', NOT_AUTHORIZED); - return res.status(400).json({ message: NOT_AUTHORIZED }); - } - - const phoneNumber = new PhoneNumber(req.query.phone); - const { id } = req.auth.sub; - - if (!phoneNumber.isValid()) { - logger.error( - 'GET /sms/verify not valid phone number', - req.query.phone - ); - return res.status(400).json({ message: SMS_INVALID_PHONE }); - } - - const phone = phoneNumber.getNumber(); - const code = createSMSCode(); - - logger.verbose( - 'GET /sms/verify body', - id, - req.query.phone, - code - ); - - sendSMS(phone, { - message: SMS().verificationCode(code) - }) - .then((data) => { - return storeSMSCode(id, phone, code); - }) - .then((data) => { - logger.debug( - 'GET /sms/verify data', - data - ); - res.json({ message: SMS_SUCCESS }); - }) - .catch((error) => { - logger.error( - 'GET /sms/verify error', - error.message - ); - return res.status(error.statusCode || 400).json({ message: error.message }); - }); -}); - -app.post('/plugins/sms/verify', [verifyToken, bodyParser.json()], (req, res) => { - const endpointScopes = ['user']; - const scopes = req.auth.scopes; - - logger.verbose( - 'POST /sms/verify auth', - req.auth.sub - ); - - if (!checkScopes(endpointScopes, scopes)) { - logger.error('POST /plugins/sms/verify error', NOT_AUTHORIZED); - return res.status(400).json({ message: NOT_AUTHORIZED }); - } - - const { id } = req.auth.sub; - const { code } = req.body; - const phoneNumber = new PhoneNumber(req.body.phone); - - if (!phoneNumber.isValid()) { - logger.error( - 'POST /sms/verify not valid phone number', - req.query.phone - ); - return res.status(400).json({ message: SMS_INVALID_PHONE }); - } - - const phone = phoneNumber.getNumber(); - - logger.verbose( - 'POST /sms/verify body', - id, - req.query.phone, - code - ); - - checkSMSCode(id, phone, code) - .then((data) => { - return findUser({ - where: { id }, attributes: ['id', 'phone_number'] - }) - }) - .then((user) => { - return updateUserPhoneNumber(user, phone); - }) - .then(() => { - return deleteSMSCode(id); - }) - .then((data) => { - logger.debug( - 'POST /sms/verify data', - data - ); - res.json({ message: PHONE_VERIFIED }); - }) - .catch((error) => { - logger.error( - 'POST /sms/verify error', - error.message - ); - return res.status(error.statusCode || 400).json({ message: error.message }); - }); -}); \ No newline at end of file diff --git a/plugins/sms/messages.js b/plugins/sms/messages.js deleted file mode 100644 index dd9b997238..0000000000 --- a/plugins/sms/messages.js +++ /dev/null @@ -1,10 +0,0 @@ -'use strict'; - -exports.SMS_ERROR = 'Error sending SMS'; -exports.SMS_PHONE_DONT_MATCH = 'The phone number provided is incorrect'; -exports.SMS_CODE_INVALID = 'The code provided is invalid'; -exports.SMS_CODE_EXPIRED = 'The code provided has expired or has been used'; -exports.INVALID_PHONE_NUMBER = 'Invalid phone number'; -exports.SMS_INVALID_PHONE = 'Invalid mobile phone number'; -exports.SMS_SUCCESS = 'SMS has been sent'; -exports.PHONE_VERIFIED = 'Phone number has been verified'; diff --git a/plugins/sms/package-lock.json b/plugins/sms/package-lock.json deleted file mode 100644 index ef59f6e127..0000000000 --- a/plugins/sms/package-lock.json +++ /dev/null @@ -1,115 +0,0 @@ -{ - "name": "sms", - "version": "0.1.0", - "lockfileVersion": 1, - "requires": true, - "dependencies": { - "awesome-phonenumber": { - "version": "2.2.5", - "resolved": "https://registry.npmjs.org/awesome-phonenumber/-/awesome-phonenumber-2.2.5.tgz", - "integrity": "sha512-CHVEWEtXhaUB4ZGki/MQOlxK9wX+x3rw0/OARxB/srJTBP7b8nZjuE69WKQIUmciYdYGP2qywFPyubewJnFLbQ==" - }, - "aws-sdk": { - "version": "2.205.0", - "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.205.0.tgz", - "integrity": "sha1-GpNzAlPivgJ6S9OvkkjL2gVz3oA=", - "requires": { - "buffer": "4.9.1", - "events": "^1.1.1", - "jmespath": "0.15.0", - "querystring": "0.2.0", - "sax": "1.2.1", - "url": "0.10.3", - "uuid": "3.1.0", - "xml2js": "0.4.17", - "xmlbuilder": "4.2.1" - } - }, - "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==" - }, - "buffer": { - "version": "4.9.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz", - "integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=", - "requires": { - "base64-js": "^1.0.2", - "ieee754": "^1.1.4", - "isarray": "^1.0.0" - } - }, - "events": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz", - "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=" - }, - "ieee754": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", - "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==" - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" - }, - "jmespath": { - "version": "0.15.0", - "resolved": "https://registry.npmjs.org/jmespath/-/jmespath-0.15.0.tgz", - "integrity": "sha1-o/Iiqarp+Wb10nx5ZRDigJF2Qhc=" - }, - "lodash": { - "version": "4.17.19", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.19.tgz", - "integrity": "sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ==" - }, - "punycode": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", - "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=" - }, - "querystring": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", - "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=" - }, - "sax": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.1.tgz", - "integrity": "sha1-e45lYZCyKOgaZq6nSEgNgozS03o=" - }, - "url": { - "version": "0.10.3", - "resolved": "https://registry.npmjs.org/url/-/url-0.10.3.tgz", - "integrity": "sha1-Ah5NnHcF8hu/N9A861h2dAJ3TGQ=", - "requires": { - "punycode": "1.3.2", - "querystring": "0.2.0" - } - }, - "uuid": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.1.0.tgz", - "integrity": "sha512-DIWtzUkw04M4k3bf1IcpS2tngXEL26YUD2M0tMDUpnUrz2hgzUBlD55a4FjdLGPvfHxS6uluGWvaVEqgBcVa+g==" - }, - "xml2js": { - "version": "0.4.17", - "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.17.tgz", - "integrity": "sha1-F76T6q4/O3eTWceVtBlwWogX6Gg=", - "requires": { - "sax": ">=0.6.0", - "xmlbuilder": "^4.1.0" - } - }, - "xmlbuilder": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-4.2.1.tgz", - "integrity": "sha1-qlijBBoGb5DqoWwvU4n/GfP0YaU=", - "requires": { - "lodash": "^4.0.0" - } - } - } -} diff --git a/plugins/sms/package.json b/plugins/sms/package.json deleted file mode 100644 index 126ee8c188..0000000000 --- a/plugins/sms/package.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "name": "sms", - "version": "0.1.0", - "dependencies": { - "awesome-phonenumber": "2.43.0", - "aws-sdk": "2.205.0" - } -} diff --git a/plugins/sms/sns.js b/plugins/sms/sns.js deleted file mode 100644 index 199cd0394a..0000000000 --- a/plugins/sms/sns.js +++ /dev/null @@ -1,19 +0,0 @@ -'use strict'; - -const aws = require('aws-sdk'); -const { GET_SECRETS } = require('../../constants'); - -const credentials = () => { - return { - accessKeyId: GET_SECRETS().plugins.sns.key, - secretAccessKey: GET_SECRETS().plugins.sns.secret, - region: GET_SECRETS().plugins.sns.region - }; -}; - -const sns = () => { - aws.config.update(credentials()); - return new aws.SNS(); -}; - -module.exports = sns; diff --git a/plugins/vault/crons/checkWithdrawals.js b/plugins/vault/crons/checkWithdrawals.js deleted file mode 100644 index d1c9b3008a..0000000000 --- a/plugins/vault/crons/checkWithdrawals.js +++ /dev/null @@ -1,188 +0,0 @@ -'use strict'; - -const { Deposit, User, sequelize } = require('../../../db/models'); -const rp = require('request-promise'); -const { each } = require('lodash'); -const { all, delay } = require('bluebird'); -const { GET_CONFIGURATION, GET_SECRETS } = require('../../../constants'); -const { VAULT_ENDPOINT } = require('../../constants'); -const mathjs = require('mathjs'); -const { loggerDeposits } = require('../../../config/logger'); -const VAULT_NAME = () => GET_SECRETS().vault.name; -const VAULT_KEY = () => GET_SECRETS().vault.key; -const VAULT_SECRET = () => GET_SECRETS().vault.secret; -const VAULT_WALLET = (coin) => { - return `${VAULT_NAME()}-${coin}`; -}; -const { sendEmail } = require('../../../mail'); -const { MAILTYPE } = require('../../../mail/strings'); - -const getAmount = (amount, fee) => { - return mathjs.number(mathjs.subtract(mathjs.fraction(amount), mathjs.fraction(fee))); -}; - -const checkWithdrawals = () => { - return new Promise((resolve, reject) => { - const vaultCoins = []; - loggerDeposits.info('/plugins/vault/crons/checkWithdrawals starting'); - each(GET_SECRETS().vault.connected_coins, (coin) => { - vaultCoins.push({ - currency: coin - }); - }); - Deposit.findAll({ - where: { - type: 'withdrawal', - status: true, - dismissed: false, - rejected: false, - processing: false, - waiting: true, - $or: vaultCoins - }, - include: [ - { - model: User, - attributes: ['email', 'settings'] - } - ] - }) - .then((withdrawals) => { - if (withdrawals.length === 0) { - loggerDeposits.info('/plugins/vault/crons/checkWithdrawals No withdrawals need checking'); - resolve(); - } - let txids = {}; - each(withdrawals, (withdrawal) => { - txids[withdrawal.transaction_id] - ? txids[withdrawal.transaction_id].push(withdrawal) - : txids[withdrawal.transaction_id] = [withdrawal]; - }); - return all(Object.keys(txids).map((txid, i) => { - const option = { - method: 'GET', - headers: { - key: VAULT_KEY(), - secret: VAULT_SECRET() - }, - qs: { - txid - }, - uri: `${VAULT_ENDPOINT}/wallet/${VAULT_WALLET(txids[txid][0].currency)}/transactions`, - json: true - }; - return delay(500 * i) - .then(() => { - return rp(option); - }) - .then((tx) => { - if (tx.data[0]) { - if (!tx.data[0].is_rejected) { - loggerDeposits.info('/plugins/vault/crons/checkWithdrawals checkTransaction', `Transaction ${txid} was confirmed`); - return sequelize.transaction((transaction) => { - return all(txids[txid].map((withdrawal) => { - return withdrawal.update( - { - waiting: false - }, - { - attributes: ['waiting'], - transaction, - returning: true - } - ) - .then((data) => { - return { - success: true, - status: true, - data - }; - }); - })); - }); - } else { - loggerDeposits.info('/plugins/vault/crons/checkWithdrawals checkTransaction', `Transaction ${txid} was rejected`); - return { - success: true, - status: false, - info: { - type: 'Vault Withdrawal Rejected', - data: { - description: 'This Vault withdrawal was rejected on the blockchain. You can double-check this transaction and proceed to confirm or dismiss the withdrawal through your admin panel.', - transaction_id: txid, - withdrawals: txids[txid].map((wd) => wd.dataValues) - } - } - }; - } - } else { - loggerDeposits.warn('/plugins/vault/crons/checkWithdrawals checkTransaction', `Transaction ${txid} is not found`); - return { - success: false, - info: { - type: 'Vault Transaction Not Found', - data: { - description: 'This withdrawal was not found in Vault.', - transaction_id: txid, - withdrawals: txids[txid].map((wd) => wd.dataValues) - } - } - }; - } - }); - })); - }) - .then((results) => { - return all(results.map((result) => { - if (Array.isArray(result)) { - return all(result.map((data) => { - if (data.success === true && data.status === true) { - return sendEmail( - MAILTYPE.WITHDRAWAL, - data.data.User.email, - { - amount: getAmount(data.data.amount, data.data.fee), - transaction_id: data.data.transaction_id, - fee: data.data.fee, - status: true, - currency: data.data.currency, - address: data.data.address, - phoneNumber: data.data.User.phone_number - }, - data.data.User.settings - ); - } else if (data.success === true && data.status === false) { - return sendEmail( - MAILTYPE.ALERT, - GET_CONFIGURATION().constants.accounts.admin, - data.info, - {} - ); - } - })); - } else if (result.success === false) { - return sendEmail( - MAILTYPE.ALERT, - GET_CONFIGURATION().constants.accounts.admin, - result.info, - {} - ); - } else { - return; - } - })); - }) - .then(() => { - loggerDeposits.info('/plugins/vault/crons/checkWithdrawals finished'); - resolve(); - }) - .catch((err) => { - loggerDeposits.error('plugins/vault/cron/checkWithdrawals catch', err.message); - reject(err); - }); - }); -}; - -module.exports = { - checkWithdrawals -}; diff --git a/plugins/vault/crons/lockWithdrawals.js b/plugins/vault/crons/lockWithdrawals.js deleted file mode 100644 index 88385a4102..0000000000 --- a/plugins/vault/crons/lockWithdrawals.js +++ /dev/null @@ -1,102 +0,0 @@ -'use strict'; - -const { Deposit, User } = require('../../../db/models'); -const { all } = require('bluebird'); -const WAValidator = require('multicoin-address-validator'); -const { loggerDeposits } = require('../../../config/logger'); -const { each } = require('lodash'); -const { GET_CONFIGURATION, GET_SECRETS } = require('../../../constants'); -const { sendEmail } = require('../../../mail'); -const { MAILTYPE } = require('../../../mail/strings'); - -const checkAddress = (address, symbol, network = 'prod') => { - if (symbol === 'btc' || symbol === 'bch' || symbol === 'xmr') { - return WAValidator.validate(address, symbol, network); - } else if (symbol === 'xrp' || symbol === 'xlm') { - return WAValidator.validate(address.split(':')[0], symbol, network); - } else { - return WAValidator.validate(address, 'eth', network); - } -}; - -const lockWithdrawals = () => { - return new Promise((resolve, reject) => { - const vaultCoins = []; - loggerDeposits.info('/plugins/vault/crons/lockWithdrawals starting'); - each(GET_SECRETS().vault.connected_coins, (coin) => { - if (GET_CONFIGURATION().coins[coin] && GET_CONFIGURATION().coins[coin].allow_withdrawal) { - vaultCoins.push({ - currency: coin - }); - } - }); - Deposit.findAll({ - where: { - type: 'withdrawal', - status: false, - dismissed: false, - rejected: false, - processing: false, - waiting: false, - $or: vaultCoins - }, - include: [ - { - model: User, - attributes: ['email', 'settings'] - } - ] - }) - .then((withdrawals) => { - if (withdrawals.length === 0) { - loggerDeposits.info('/plugins/vault/crons/lockWithdrawals', 'No withdrawals need locking'); - resolve(); - } - loggerDeposits.debug('/plugins/vault/crons/lockWithdrawals', `Locking ${withdrawals.length} withdrawals`); - return all(withdrawals.map((withdrawal) => { - if (checkAddress(withdrawal.address, withdrawal.currency)) { - return withdrawal.update({ processing: true }, { fields: ['processing'], returning: true }) - .then((result) => { - loggerDeposits.info('/plugins/vault/crons/lockWithdrawals', `Withdrawal with ID ${withdrawal.id} locked`); - return; - }) - .catch((err) => { - loggerDeposits.error('/plugins/vault/crons/lockWithdrawals', `Error occured while locking ${withdrawal.id}: ${err.message}`); - return; - }); - } else { - return withdrawal.update({ rejected: true }, { fields: ['rejected'], returning: true }) - .then((result) => { - loggerDeposits.warn('/plugins/vault/crons/lockWithdrawals', `Withdrawal with ID ${withdrawal.id} rejected because of an invalid address`); - return sendEmail( - MAILTYPE.INVALID_ADDRESS, - withdrawal.User.email, - { - currency: withdrawal.currency, - amount: withdrawal.amount, - address: withdrawal.address - }, - withdrawal.User.settings - ); - }) - .catch((err) => { - loggerDeposits.error('/plugins/vault/crons/lockWithdrawals', `Error occured while locking ${withdrawal.id}: ${err.message}`); - return; - }); - } - })); - }) - .then(() => { - loggerDeposits.info('/plugins/vault/crons/lockWithdrawals finished'); - resolve(); - }) - .catch((err) => { - loggerDeposits.error('plugins/vault/crons/lockWithdrawal catch', err.message); - reject(err); - }); - }); -}; - -module.exports = { - lockWithdrawals -}; diff --git a/plugins/vault/crons/processWithdrawals.js b/plugins/vault/crons/processWithdrawals.js deleted file mode 100644 index 292d82d9a1..0000000000 --- a/plugins/vault/crons/processWithdrawals.js +++ /dev/null @@ -1,413 +0,0 @@ -'use strict'; - -const { Deposit, sequelize, User, Sequelize } = require('../../../db/models'); -const rp = require('request-promise'); -const { each } = require('lodash'); -const { all, delay } = require('bluebird'); -const { GET_CONFIGURATION, GET_SECRETS } = require('../../../constants'); -const { ERC_TOKENS, VAULT_ENDPOINT } = require('../../constants'); -const moment = require('moment'); -const { loggerDeposits } = require('../../../config/logger'); -const mathjs = require('mathjs'); -const VAULT_NAME = () => GET_SECRETS().vault.name; -const VAULT_KEY = () => GET_SECRETS().vault.key; -const VAULT_SECRET = () => GET_SECRETS().vault.secret; -const VAULT_WALLET = (coin) => { - return `${VAULT_NAME()}-${coin}`; -}; -const { sendEmail } = require('../../../mail'); -const { MAILTYPE } = require('../../../mail/strings'); - -const getAmount = (amount, fee) => { - return mathjs.number(mathjs.subtract(mathjs.fraction(amount), mathjs.fraction(fee))); -}; - -const isErc = (token) => { - return ERC_TOKENS.includes(token); -}; - -const processWithdrawals = () => { - return new Promise((resolve, reject) => { - const vaultCoins = []; - loggerDeposits.info('/plugins/vault/crons/processWithdrawals starting'); - const currentMinute = parseInt(moment().format('mm')); - each(GET_SECRETS().vault.connected_coins, (coin) => { - if (coin === 'xrp' || coin === 'xlm' || isErc(coin)) { - // XRP style/ERC20 tokens are processed every minute - vaultCoins.push({ - currency: coin - }); - } else { - // Every other coin is processed every 5 minutes - if (currentMinute % 5 === 0) { - vaultCoins.push({ - currency: coin - }); - } - } - }); - Deposit.findAll({ - where: { - type: 'withdrawal', - status: false, - dismissed: false, - rejected: false, - processing: true, - waiting: false, - $or: vaultCoins - }, - include: [ - { - model: User, - attributes: ['email', 'settings', 'phone_number'] - } - ] - }) - .then(async (withdrawals) => { - if (withdrawals.length === 0) { - loggerDeposits.info('/plugins/vault/crons/processWithdrawals', 'No withdrawals need processing'); - resolve(); - } - const addresses = []; - const filteredWithdrawals = []; - - // Filter out same address withdrawals for btc and bch - for (let withdrawal of withdrawals) { - if (withdrawal.currency === 'btc' || withdrawal.currency === 'bch') { - if (!addresses.includes(withdrawal.address)) { - addresses.push(withdrawal.address); - filteredWithdrawals.push(withdrawal); - } else { - continue; - } - } else { - filteredWithdrawals.push(withdrawal); - } - } - - let transaction = await sequelize.transaction({isolationLevel: Sequelize.Transaction.ISOLATION_LEVELS.SERIALIZABLE}); - const waitingWithdrawals = []; - - // Set all withdrawals to waiting - for (let withdrawal of filteredWithdrawals) { - try { - let wd = await withdrawal.update( - { - waiting: true - }, - { - fields: ['waiting'], - transaction, - returning: true - } - ); - waitingWithdrawals.push(wd); - } catch (err) { - await transaction.rollback(); - reject(err.message); - throw new Error(err); - } - } - await transaction.commit(); - return waitingWithdrawals; - }) - .then((withdrawals) => { - const btcWithdrawals = []; - const bchWithdrawals = []; - const options = []; - each(withdrawals, (withdrawal) => { - if (withdrawal.currency === 'btc') { - btcWithdrawals.push(withdrawal); - } else if (withdrawal.currency === 'bch') { - bchWithdrawals.push(withdrawal); - } else { - const option = { - data: { - method: 'POST', - headers: { - key: VAULT_KEY(), - secret: VAULT_SECRET() - }, - body: { - data: { - address: withdrawal.address, - amount: getAmount(withdrawal.amount, withdrawal.fee) - } - }, - uri: `${VAULT_ENDPOINT}/wallet/${VAULT_WALLET(withdrawal.currency)}/withdraw/simple`, - json: true - }, - dbWithdrawals: [withdrawal] - }; - if (withdrawal.currency === 'xrp') { - const [xrpAddress, xrpTag] = withdrawal.address.split(':'); - option.data.body.data.address = xrpAddress; - option.data.body.data.meta = { tag: xrpTag }; - } else if (withdrawal.currency === 'xlm') { - const [xlmAddress, xlmTag] = withdrawal.address.split(':'); - option.data.body.data.address = xlmAddress; - option.data.body.data.meta = { memo: xlmTag }; - } - options.push(option); - } - }); - if (btcWithdrawals.length !== 0) { - options.push({ - data: { - method: 'POST', - headers: { - key: VAULT_KEY(), - secret: VAULT_SECRET() - }, - body: { - data: btcWithdrawals.map((withdrawal) => { - return { - address: withdrawal.address, - amount: getAmount(withdrawal.amount, withdrawal.fee) - }; - }) - }, - uri: `${VAULT_ENDPOINT}/wallet/${VAULT_WALLET('btc')}/withdraw/batch`, - json: true, - }, - dbWithdrawals: btcWithdrawals - }); - } - if (bchWithdrawals.length !== 0) { - options.push({ - data: { - method: 'POST', - headers: { - key: VAULT_KEY(), - secret: VAULT_SECRET() - }, - body: { - data: bchWithdrawals.map((withdrawal) => { - return { - address: withdrawal.address, - amount: getAmount(withdrawal.amount, withdrawal.fee) - }; - }) - }, - uri: `${VAULT_ENDPOINT}/wallet/${VAULT_WALLET('bch')}/withdraw/batch`, - json: true - }, - dbWithdrawals: bchWithdrawals - }); - } - return all(options.map((option, i) => { - return delay(2000 * i) - .then(async () => { - let transaction = await sequelize.transaction({isolationLevel: Sequelize.Transaction.ISOLATION_LEVELS.SERIALIZABLE}); - const dbWithdrawals = []; - - // Set status to true and processing and waiting to false first - for(let withdrawal of option.dbWithdrawals) { - try { - let wd = await withdrawal.update( - { - processing: false, - waiting: false, - status: true - }, - { - fields: ['processing', 'waiting', 'status'], - transaction, - returning: true - } - ); - dbWithdrawals.push(wd); - } catch (err) { - // If error during update, rollback changes - await transaction.rollback(); - return { - success: false, - send: false - }; - } - } - let response; - try { - response = await rp(option.data); - } catch (err) { - // If request fails, move on to next catch block - await transaction.rollback(); - throw new Error(err); - } - loggerDeposits.info(`/plugins/vault/crons/processWithdrawals ${dbWithdrawals[0].currency} withdrawal successful for withdrawals with id: ${dbWithdrawals.map((wd) => `${wd.id},`)}`); - await transaction.commit(); - return { - success: true, - data: response, - dbWithdrawals - }; - }) - .catch(async (err) => { - loggerDeposits.error('/plugins/vault/crons/processWithdrawals perfromWithdrawal', `${option.dbWithdrawals[0].currency} withdrawal failed: ${err.message}`); - let transaction = await sequelize.transaction({isolationLevel: Sequelize.Transaction.ISOLATION_LEVELS.SERIALIZABLE}); - const dbWithdrawals = []; - for (let withdrawal of option.dbWithdrawals) { - let queryWithdrawal; - - // Find withdrawal that failed - try { - queryWithdrawal = await Deposit.findOne({ - where: { - id: withdrawal.dataValues.id - } - }); - } catch (err) { - await transaction.rollback(); - return { - success: false, - send: true, - info: { - type: 'Failed Withdrawal Waiting State Update Failed', - data: { - error: err.message, - withdrawals: option.dbWithdrawals.map((wd) => wd.dataValues) - } - } - }; - } - - // Set processing to false - try { - let wd = await queryWithdrawal.update( - { - processing: false - }, - { - fields: ['processing'], - transaction, - returning: true - } - ); - dbWithdrawals.push(wd); - } catch (err) { - await transaction.rollback(); - return { - success: false, - send: true, - info: { - type: 'Failed Withdrawal Waiting State Update Failed', - data: { - error: err.message, - withdrawals: option.dbWithdrawals.map((wd) => wd.dataValues) - } - } - }; - } - } - await transaction.commit(); - return { - success: false, - send: true, - info: { - type: 'Vault Withdrawal Failed', - data: { - error: err.message, - withdrawals: dbWithdrawals.map((wd) => wd.dataValues) - } - } - }; - }); - })); - }) - .then((results) => { - return all(results.map((result) => { - if (result.success) { - return all(result.dbWithdrawals.map((withdrawal) => { - return withdrawal.update( - { - transaction_id: result.data.txid - }, - { - fields: ['transaction_id'] - } - ) - .then((data) => { - return { - success: true, - send: true, - data: { - email: withdrawal.User.email, - amount: getAmount(data.amount, data.fee), - transaction_id: data.transaction_id, - fee: data.fee, - status: true, - currency: data.currency, - address: data.address, - phoneNumber: withdrawal.User.phone_number, - settings: withdrawal.User.settings - } - }; - }); - })) - .catch((err) => { - loggerDeposits.error('/plugins/vault/crons/processWithdrawals txid update', `Failed to update successful ${result.dbWithdrawals[0].currency} withdrawal's TXID. ID:${result.dbWithdrawals.map((wd) => wd.id)}, TXID:${result.data.txid}, Error: ${err.message}`); - return { - success: false, - send: true, - info: { - type: 'Successful Withdrawal Database TXID Update Failed', - data: { - error: err.message, - transaction_id: result.data.txid, - withdrawals: result.dbWithdrawals.map((wd) => wd.dataValues) - } - } - }; - }); - } else { - return result; - } - })); - }) - .then((results) => { - return all(results.map((result) => { - if (result.success === false && result.send === true) { - sendEmail( - MAILTYPE.ALERT, - GET_CONFIGURATION().constants.accounts.admin, - result.info, - {} - ); - return; - } else if (Array.isArray(result)) { - each(result, (wd) => { - if (wd.success === true && wd.send === true) { - sendEmail( - MAILTYPE.WITHDRAWAL, - wd.data.email, - { - amount: wd.data.amount, - transaction_id: wd.data.transaction_id, - fee: wd.data.fee, - status: true, - currency: wd.data.currency, - address: wd.data.address, - phoneNumber: wd.data.phone_number - }, - wd.data.settings - ); - } - }); - return; - } - })); - }) - .then(() => { - loggerDeposits.info('/plugins/vault/crons/processWithdrawals finished'); - resolve(); - }) - .catch((err) => { - loggerDeposits.error('plugins/vault/crons/processWithdrawals catch', err.message); - reject(err); - }); - }); -}; - -module.exports = { - processWithdrawals -}; diff --git a/plugins/vault/helpers.js b/plugins/vault/helpers.js deleted file mode 100644 index 747f249b8d..0000000000 --- a/plugins/vault/helpers.js +++ /dev/null @@ -1,178 +0,0 @@ -'use strict'; - -const { API_HOST, GET_CONFIGURATION, GET_SECRETS } = require('../../constants'); -const { VAULT_ENDPOINT } = require('../constants'); -const rp = require('request-promise'); -const { intersection, union, each } = require('lodash'); -const WEBHOOK_URL = (coin) => `${API_HOST}/v1/deposit/${coin}`; -const WALLET_NAME = (name, coin) => `${name}-${coin}`; -const { all, delay } = require('bluebird'); -const { updatePluginConstant, logger, sleep } = require('../helpers/common'); -const cron = require('node-cron'); -const { processWithdrawals } = require('./crons/processWithdrawals'); -const { lockWithdrawals } = require('./crons/lockWithdrawals'); -const { resolve } = require('bluebird'); -// const { checkWithdrawals } = require('./crons/checkWithdrawals'); - -const withdrawalCron = async () => { - const enabledPlugins = GET_CONFIGURATION().constants.plugins.enabled; - try { - if (enabledPlugins !== undefined && enabledPlugins.indexOf('vault') !== -1) { - // await checkWithdrawals(); - // await sleep(1000); - await lockWithdrawals(); - await sleep(5000); - await processWithdrawals(); - } - } catch (err) { - logger.error('plguins/vault/helpers/withdrawalCron catch', err); - } -}; - -const cronTask = cron.schedule('* * * * *', () => { - withdrawalCron(); -}, { - timezone: 'Asia/Seoul' -}); - -const updateVaultValues = (name, key, secret, connect = true) => { - logger.debug('/plugins/vault/helpers updateVaultValues'); - if (name === undefined && key === undefined && secret === undefined) { - return resolve(); - } else { - return updatePluginConstant('vault', { - name: name === undefined ? GET_SECRETS().vault.name : name, - key: key === undefined ? GET_SECRETS().vault.key : key, - secret: secret === undefined ? GET_SECRETS().vault.secret : secret, - connected_coins: connect ? GET_SECRETS().vault.connected_coins : [] - }); - } -}; - -const crossCheckCoins = (coins) => { - logger.debug('/plugins/vault/helpers crossCheckCoins', coins); - const options = { - method: 'GET', - uri: `${VAULT_ENDPOINT}/coins` - }; - - return rp(options) - .then((vaultCoins) => { - vaultCoins = JSON.parse(vaultCoins); - const exchangeCoins = coins || Object.keys(GET_CONFIGURATION().coins); - const validCoins = intersection(exchangeCoins, vaultCoins); - - if (validCoins.length === 0) { - throw new Error(`None of these coins are available in vault: ${exchangeCoins}`); - } else { - return validCoins; - } - }); -}; - -const createOrUpdateWallets = (coins) => { - logger.debug('/plugins/vault/helpers createOrUpdateWallets', coins); - const vaultConfig = GET_SECRETS().vault; - return all( - coins.map((coin, i) => { - const options = { - method: 'GET', - headers: { - key: vaultConfig.key, - secret: vaultConfig.secret - }, - qs: { - name: WALLET_NAME(vaultConfig.name, coin), - currency: coin - }, - uri: `${VAULT_ENDPOINT}/user/wallets`, - json: true - }; - return delay((i + 1) * 2500) - .then(() => rp(options)) - .then(({ data }) => all([ data, delay(1000)])) - .then(([ data ]) => { - const wallet = data[0]; - if (!wallet) { - return createVaultWallet(coin, vaultConfig); - } else { - return checkWebhook(wallet, vaultConfig); - } - }) - .catch((err) => { - logger.error('/plugins/vault/helpers createOrUpdateWallets', err.message); - return { - error: err.message, - currency: coin - }; - }); - }) - ) - .then(async (wallets) => { - const result = {}; - const connectedCoins = []; - await each(wallets, (wallet) => { - result[wallet.currency] = wallet; - if (!wallet.error) connectedCoins.push(wallet.currency); - }); - await addVaultCoinConnection(connectedCoins, vaultConfig); - return result; - }); -}; - -const createVaultWallet = (coin, vaultConfig) => { - logger.debug('/plugins/vault/helpers createVaultWallet', coin); - const options = { - method: 'POST', - headers: { - key: vaultConfig.key, - secret: vaultConfig.secret - }, - body: { - name: WALLET_NAME(vaultConfig.name, coin), - currency: coin, - webhook: WEBHOOK_URL(coin), - type: 'multi' - }, - uri: `${VAULT_ENDPOINT}/wallet`, - json: true - }; - return rp(options); -}; - -const checkWebhook = (wallet, vaultConfig) => { - logger.debug('/plugins/vault/helpers checkWebhook', wallet.name); - if (wallet.webhook !== WEBHOOK_URL(wallet.currency)) { - logger.debug('/plugins/vault/helpers checkWebhook update webhook', wallet.name); - const options = { - method: 'PUT', - headers: { - key: vaultConfig.key, - secret: vaultConfig.secret - }, - body: { - url: WEBHOOK_URL(wallet.currency) - }, - uri: `${VAULT_ENDPOINT}/wallet/${wallet.name}/webhook`, - json: true - }; - return rp(options); - } else { - return wallet; - } -}; - -const addVaultCoinConnection = (coins, vaultConfig) => { - logger.debug('/plugins/vault/helpers addVaultCoinConnection', coins); - return updatePluginConstant('vault', { - ...vaultConfig, - connected_coins: union(vaultConfig.connected_coins, coins) - }); -}; - -module.exports = { - updateVaultValues, - crossCheckCoins, - createOrUpdateWallets, - cronTask -}; \ No newline at end of file diff --git a/plugins/vault/index.js b/plugins/vault/index.js deleted file mode 100644 index 09e74b3f11..0000000000 --- a/plugins/vault/index.js +++ /dev/null @@ -1,136 +0,0 @@ -'use strict'; - -const app = require('../index'); -const { verifyToken, checkScopes } = require('../helpers/auth'); -const bodyParser = require('body-parser'); -const { logger, isUrl, updatePluginConstant, maskSecrets } = require('../helpers/common'); -const { NOT_AUTHORIZED } = require('../helpers/messages'); -const { updateVaultValues, crossCheckCoins, createOrUpdateWallets, cronTask } = require('./helpers'); -const { API_HOST } = require('../../constants'); -const { GET_SECRETS } = require('../../constants'); - -cronTask.start(); - -app.get('/plugins/vault/constant', verifyToken, (req, res) => { - const endpointScopes = ['admin', 'tech']; - const scopes = req.auth.scopes; - - logger.verbose( - 'GET /plugins/vault/constant auth', - req.auth.sub - ); - - if (!checkScopes(endpointScopes, scopes)) { - logger.error('GET /plugins/vault/constant error', NOT_AUTHORIZED); - return res.status(400).json({ message: NOT_AUTHORIZED }); - } - - try { - res.json(maskSecrets('vault', GET_SECRETS().vault) || {}); - } catch (err) { - res.status(400).json({ message: err.message }); - } -}); - -app.put('/plugins/vault/constant', [verifyToken, bodyParser.json()], (req, res) => { - const endpointScopes = ['admin', 'tech']; - const scopes = req.auth.scopes; - - logger.verbose( - 'PUT /plugins/vault/constant auth', - req.auth.sub - ); - - if (!checkScopes(endpointScopes, scopes)) { - logger.error('PUT /plugins/vault/constant error', NOT_AUTHORIZED); - return res.status(400).json({ message: NOT_AUTHORIZED }); - } - - if (req.body.length === 0) { - logger.error('PUT /plugins/vault/constant error', 'Must provide key to update'); - return res.status(400).json({ message: 'Must provide key to update' }); - } else if (req.body.connected_coins) { - logger.error('PUT /plugins/vault/constant error', 'Cannot update connected_coins'); - return res.status(400).json({ message: 'Cannot update connected_coins' }); - } - - logger.info( - 'PUT /plugins/vault/constant body', - req.body - ); - - updatePluginConstant('vault', req.body) - .then((data) => { - res.json(data); - }) - .catch((err) => { - res.status(400).json({ message: err.message }); - }); -}); - -app.post('/plugins/vault/connect', [verifyToken, bodyParser.json()], (req, res) => { - const endpointScopes = ['admin']; - const scopes = req.auth.scopes; - - logger.verbose( - 'POST /plugins/vault/connect', - req.auth.email - ); - - if (!checkScopes(endpointScopes, scopes)) { - logger.error('POST /plugins/vault/connect error', NOT_AUTHORIZED); - return res.status(400).json({ message: NOT_AUTHORIZED }); - } - - if (!isUrl(API_HOST)) { - return res.status(400).json({ message: `Server URL ${API_HOST} is not a valid URL` }); - } - - const { name, key, secret, coins } = req.body; - - updateVaultValues(name, key, secret) - .then(() => crossCheckCoins(coins)) - .then((validCoins) => createOrUpdateWallets(validCoins)) - .then((wallets) => { - logger.debug( - 'POST /plugins/vault/connect new_connected_coins', - Object.keys(wallets) - ); - res.json(wallets); - }) - .catch((err) => { - logger.error( - 'POST /plugins/vault/connect catch', - err.messsage - ); - res.status(err.status || 400).json({ message: err.message }); - }); -}); - -app.get('/plugins/vault/disconnect', verifyToken, (req, res) => { - const endpointScopes = ['admin']; - const scopes = req.auth.scopes; - - logger.verbose( - 'GET /plugins/vault/disconnect', - req.auth.email - ); - - if (!checkScopes(endpointScopes, scopes)) { - logger.error('GET /plugins/vault/disconnect error', NOT_AUTHORIZED); - return res.status(400).json({ message: NOT_AUTHORIZED }); - } - - updateVaultValues('', '', '', false) - .then(() => { - logger.debug('GET /plugins/vault/disconnect successful'); - res.json({ message: 'Vault disconnected' }); - }) - .catch((err) => { - logger.error( - 'GET /plugins/vault/disconnect catch', - err.message - ); - res.status(err.status || 400).json({ message: err.message }); - }); -}); \ No newline at end of file diff --git a/plugins/vault/package-lock.json b/plugins/vault/package-lock.json deleted file mode 100644 index cb55c8df82..0000000000 --- a/plugins/vault/package-lock.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "name": "vault", - "version": "0.1.0", - "lockfileVersion": 1 -} diff --git a/plugins/vault/package.json b/plugins/vault/package.json deleted file mode 100644 index 4783cae7a7..0000000000 --- a/plugins/vault/package.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "name": "vault", - "version": "0.1.0", - "dependencies": { - "multicoin-address-validator": "0.4.4", - "node-cron": "2.0.3", - "mathjs": "3.20.2" - } -} diff --git a/plugins/xht_fee/index.js b/plugins/xht_fee/index.js deleted file mode 100644 index c65ad7d632..0000000000 --- a/plugins/xht_fee/index.js +++ /dev/null @@ -1,121 +0,0 @@ -'use strict'; - -const app = require('../index'); -const { verifyToken, checkScopes } = require('../helpers/auth'); -const { findUser } = require('../helpers/user'); -const { logger, updatePluginConstant, maskSecrets } = require('../helpers/common'); -const { NOT_AUTHORIZED } = require('../helpers/messages'); -const bodyParser = require('body-parser'); -const { Balance } = require('../../db/models'); - -const REQUIRED_XHT = 100; - -const { GET_SECRETS } = require('../../constants'); - -app.get('/plugins/xht_fee/constant', verifyToken, (req, res) => { - const endpointScopes = ['admin', 'tech']; - const scopes = req.auth.scopes; - - logger.verbose( - 'GET /plugins/xht_fee/constant auth', - req.auth.sub - ); - - if (!checkScopes(endpointScopes, scopes)) { - logger.error('GET /plugins/xht_fee/constant error', NOT_AUTHORIZED); - return res.status(400).json({ message: NOT_AUTHORIZED }); - } - - try { - res.json(maskSecrets('xht_fee', GET_SECRETS().plugins.xht_fee) || {}); - } catch (err) { - res.status(400).json({ message: err.message }); - } -}); - -app.put('/plugins/xht_fee/constant', [verifyToken, bodyParser.json()], (req, res) => { - const endpointScopes = ['admin', 'tech']; - const scopes = req.auth.scopes; - - logger.verbose( - 'PUT /plugins/xht_fee/constant auth', - req.auth.sub - ); - - if (!checkScopes(endpointScopes, scopes)) { - logger.error('PUT /plugins/xht_fee/constant error', NOT_AUTHORIZED); - return res.status(400).json({ message: NOT_AUTHORIZED }); - } - - if (req.body.length === 0) { - logger.error('PUT /plugins/xht_fee/constant error', 'Must provide key to update'); - return res.status(400).json({ message: 'Must provide key to update' }); - } - - logger.info( - 'PUT /plugins/xht_fee/constant body', - req.body - ); - - updatePluginConstant('xht_fee', req.body) - .then((data) => { - res.json(data); - }) - .catch((err) => { - res.status(400).json({ message: err.message }); - }); -}); - -app.get('/plugins/activate-xht-fee', [verifyToken, bodyParser.json()], (req, res) => { - const endpointScopes = ['user']; - const scopes = req.auth.scopes; - - logger.verbose( - 'GET /plugins/activate-xht-fee auth', - req.auth.sub - ); - - if (!checkScopes(endpointScopes, scopes)) { - logger.error('GET /plugins/activate-xht-fee error', NOT_AUTHORIZED); - return res.status(400).json({ message: NOT_AUTHORIZED }); - } - - const email = req.auth.sub.email; - const id = req.auth.sub.id; - - logger.verbose( - 'GET /plugins/activate-xht-fee', - id, - email - ); - - findUser({ - where: { id }, - include: [ - { - model: Balance, - as: 'balance', - attributes: { - exclude: ['id', 'user_id', 'created_at'] - } - } - ] - }) - .then((user) => { - if (user.custom_fee) { - throw new Error('XHT fee is already activated'); - } - if (user.balance_xht < REQUIRED_XHT) { - throw new Error('Require minimum 100 XHT in your wallet for activating this service'); - } - return user.update({ custom_fee: true }, { fields: ['custom_fee'], returning: true }); - - }) - .then((user) => { - return res.json({ message: 'Success'}); - }) - .catch((err) => { - logger.error('GET /plugins/activate-xht-fee error', err); - res.status(400).json({ message: err.message }); - }); -}); \ No newline at end of file diff --git a/plugins/zendesk/index.js b/plugins/zendesk/index.js deleted file mode 100644 index 81b996548f..0000000000 --- a/plugins/zendesk/index.js +++ /dev/null @@ -1,62 +0,0 @@ -'use strict'; - -const app = require('../index'); -const { verifyToken, checkScopes } = require('../helpers/auth'); -const { GET_SECRETS } = require('../../constants'); -const { logger, updatePluginConstant, maskSecrets } = require('../helpers/common'); -const { NOT_AUTHORIZED } = require('../helpers/messages'); -const bodyParser = require('body-parser'); - -app.get('/plugins/zendesk/constant', verifyToken, (req, res) => { - const endpointScopes = ['admin', 'tech']; - const scopes = req.auth.scopes; - - logger.verbose( - 'GET /plugins/zendesk/constant auth', - req.auth.sub - ); - - if (!checkScopes(endpointScopes, scopes)) { - logger.error('GET /plugins/zendesk/constant error', NOT_AUTHORIZED); - return res.status(400).json({ message: NOT_AUTHORIZED }); - } - - try { - res.json(maskSecrets('zendesk', GET_SECRETS().plugins.zendesk) || {}); - } catch (err) { - res.status(400).json({ message: err.message }); - } -}); - -app.put('/plugins/zendesk/constant', [verifyToken, bodyParser.json()], (req, res) => { - const endpointScopes = ['admin', 'tech']; - const scopes = req.auth.scopes; - - logger.verbose( - 'PUT /plugins/zendesk/constant auth', - req.auth.sub - ); - - if (!checkScopes(endpointScopes, scopes)) { - logger.error('PUT /plugins/zendesk/constant error', NOT_AUTHORIZED); - return res.status(400).json({ message: NOT_AUTHORIZED }); - } - - if (req.body.length === 0) { - logger.error('PUT /plugins/zendesk/constant error', 'Must provide key to update'); - return res.status(400).json({ message: 'Must provide key to update' }); - } - - logger.info( - 'PUT /plugins/zendesk/constant body', - req.body - ); - - updatePluginConstant('zendesk', req.body) - .then((data) => { - res.json(data); - }) - .catch((err) => { - res.status(400).json({ message: err.message }); - }); -}); diff --git a/server/.dockerignore b/server/.dockerignore new file mode 100644 index 0000000000..ae9c093e20 --- /dev/null +++ b/server/.dockerignore @@ -0,0 +1,17 @@ +test +node_modules +.git +README.md +tools +!tools/dbs/*.js +!tools/general/*.js +!tools/nexe +Dockerfile +docker-compose.yml +index.html +package-lock.json +logs +coverage +.nyc_output +.*docker-compose.yaml +.drone*.yml diff --git a/server/.eslintrc.json b/server/.eslintrc.json new file mode 100644 index 0000000000..84befc479e --- /dev/null +++ b/server/.eslintrc.json @@ -0,0 +1,35 @@ +{ + "env": { + "browser": true, + "commonjs": true, + "es6": true, + "node": true, + "mocha": true + }, + "extends": "eslint:recommended", + "parserOptions": { + "ecmaVersion": 9, + "sourceType": "module" + }, + "rules": { + "indent": [ + "warn", + "tab", + { + "SwitchCase": 1 + } + ], + "linebreak-style": [ + "warn", + "unix" + ], + "quotes": [ + "warn", + "single" + ], + "semi": [ + "warn", + "always" + ] + } +} \ No newline at end of file diff --git a/server/.prettierignore.json b/server/.prettierignore.json new file mode 100644 index 0000000000..0967ef424b --- /dev/null +++ b/server/.prettierignore.json @@ -0,0 +1 @@ +{} diff --git a/server/.prettierrc.json b/server/.prettierrc.json new file mode 100644 index 0000000000..9d38e0ceec --- /dev/null +++ b/server/.prettierrc.json @@ -0,0 +1,8 @@ +{ + "tabWidth": 3, + "useTabs": true, + "semi": true, + "singleQuote": true, + "bracketSpacing": true, + "arrowParens": "always" +} diff --git a/server/.sequelizerc b/server/.sequelizerc new file mode 100644 index 0000000000..6be97a1256 --- /dev/null +++ b/server/.sequelizerc @@ -0,0 +1,8 @@ +const path = require('path'); + +module.exports = { + 'config': path.resolve('config', 'db.js'), + 'migrations-path': path.resolve('db', 'migrations'), + 'models-path': path.resolve('db', 'models'), + 'seeders-path': path.resolve('db', 'seeders'), +}; diff --git a/server/README.md b/server/README.md new file mode 100644 index 0000000000..ea5b674043 --- /dev/null +++ b/server/README.md @@ -0,0 +1,8 @@ +# Server +HollaEx Kit has a built in server based on express + swagger and provides API and Websocket communication for HollaEx Web or any other clients. + +API + +Websocket + +Plugins diff --git a/server/api/controllers/admin.js b/server/api/controllers/admin.js new file mode 100644 index 0000000000..7c9bf7d46a --- /dev/null +++ b/server/api/controllers/admin.js @@ -0,0 +1,700 @@ +'use strict'; + +const { loggerAdmin } = require('../../config/logger'); +const toolsLib = require('hollaex-tools-lib'); +const { cloneDeep } = require('lodash'); +const { all } = require('bluebird'); +const { USER_NOT_FOUND } = require('../../messages'); + +const getAdminKit = (req, res) => { + loggerAdmin.verbose(req.uuid, 'controllers/admin/getAdminKit', req.auth.sub); + try { + const data = cloneDeep({ + kit: toolsLib.getKitConfig(), + secrets: toolsLib.getKitSecrets() + }); + + // Mask certain secrets + data.secrets = toolsLib.maskSecrets(data.secrets); + return res.json(data); + } catch (err) { + loggerAdmin.error(req.uuid, 'controllers/admin/getAdminKit', err.message); + return res.status(400).json({ message: err.message }); + } +}; + +const putNetworkCredentials = (req, res) => { + loggerAdmin.verbose(req.uuid, 'controllers/admin/putNetworkCredentials auth', req.auth.sub); + + const { api_key, api_secret } = req.swagger.params.data.value; + + toolsLib.updateNetworkKeySecret(api_key, api_secret) + .then(() => { + return res.json({ message: 'Success' }); + }) + .catch((err) => { + loggerAdmin.error(req.uuid, 'controllers/admin/putNetworkCredentials', err.message); + return res.status(400).json({ message: err.message }); + }); +}; + +const createInitialAdmin = (req, res) => { + const { email, password } = req.swagger.params.data.value; + + loggerAdmin.info(req.uuid, 'controllers/admin/createInitialAdmin email', email); + + all([ + toolsLib.database.findOne('user', { raw: true }), + toolsLib.database.findOne('status', { raw: true }) + ]) + .then(([ user, status ]) => { + if (status.initialized) { + throw new Error('Exchange is already initialized'); + } + if (user) { + throw new Error('Admin already exists'); + } + return toolsLib.user.createUser(email, password, { + role: 'admin', + id: 1 + }); + }) + .then(() => { + return toolsLib.setExchangeInitialized(); + }) + .then(() => { + return res.status(201).json({ message: 'Success' }); + }) + .catch((err) => { + loggerAdmin.error(req.uuid, 'controllers/admin/createInitialAdmin', err.message); + return res.status(err.status || 400).json({ message: err.message }); + }); +}; + +const putAdminKit = (req, res) => { + loggerAdmin.verbose(req.uuid, 'controllers/admin/putAdminKit', req.auth.sub); + const data = req.swagger.params.data.value; + + if (data.kit) { + if (data.kit.setup_completed) { + loggerAdmin.error(req.uuid, 'controllers/admin/putAdminKit', 'Cannot update setup_completed value through this endpoint'); + return res.status(400).json({ message: 'Cannot update setup_completed value through this endpoint'}); + } + } + + toolsLib.updateKitConfigSecrets(data, req.auth.scopes) + .then((result) => { + return res.json(result); + }) + .catch((err) => { + loggerAdmin.error(req.uuid, 'controllers/admin/putAdminKit', err); + return res.status(400).json({ message: err.message }); + }); +}; + +const getUsersAdmin = (req, res) => { + loggerAdmin.verbose(req.uuid, 'controllers/admin/getUsers/auth', req.auth); + + const { id, search, pending, limit, page, order_by, order, start_date, end_date, format } = req.swagger.params; + + toolsLib.user.getAllUsersAdmin({ + id: id.value, + search: search.value, + pending: pending.value, + limit: limit.value, + page: page.value, + order_by: order_by.value, + order: order.value, + start_date: start_date.value, + end_date: end_date.value, + format: format.value + }) + .then((data) => { + if (format.value) { + res.setHeader('Content-disposition', `attachment; filename=${toolsLib.getKitConfig().api_name}-users.csv`); + res.set('Content-Type', 'text/csv'); + return res.status(202).send(data); + } else { + return res.json(data); + } + }) + .catch((err) => { + loggerAdmin.error(req.uuid, 'controllers/admin/getUsers', err.message); + return res.status(err.status || 400).json({ message: err.message }); + }); +}; + +const putUserRole = (req, res) => { + loggerAdmin.verbose( + req.uuid, + 'controllers/admin/putUserRole/auth', + req.auth + ); + + const user_id = req.swagger.params.user_id.value; + const { role } = req.swagger.params.data.value; + + toolsLib.user.updateUserRole(user_id, role) + .then((user) => { + return res.json(user); + }) + .catch((err) => { + loggerAdmin.error( + req.uuid, + 'controllers/admin/putUserRole', + err.message + ); + return res.status(err.status || 400).json({ message: err.message }); + }); +}; + +const putUserNote = (req, res) => { + loggerAdmin.verbose( + req.uuid, + 'controllers/admin/userNote/auth', + req.auth + ); + const user_id = req.swagger.params.user_id.value; + const { note } = req.swagger.params.data.value; + + + toolsLib.user.updateUserNote(user_id, note) + .then(() => { + return res.json({ message: 'Success' }); + }) + .catch((err) => { + loggerAdmin.error( + req.uuid, + 'controllers/admin/userNote', + err.message + ); + return res.status(err.status || 400).json({ message: err.message }); + }); +}; + +const getAdminUserBalance = (req, res) => { + loggerAdmin.verbose( + req.uuid, + 'controllers/admin/getAdminUserBalance/auth', + req.auth + ); + const user_id = req.swagger.params.user_id.value; + + toolsLib.wallet.getUserBalanceByKitId(user_id) + .then((balance) => { + return res.json(balance); + }) + .catch((err) => { + loggerAdmin.error( + req.uuid, + 'controllers/admin/getAdminUserBalance', + err.message + ); + return res.status(err.status || 400).json({ message: err.message }); + }); +}; + +const activateUser = (req, res) => { + loggerAdmin.verbose( + req.uuid, + 'controllers/admin/activateUser auth', + req.auth + ); + const { user_id, activated } = req.swagger.params.data.value; + + let promiseQuery; + + if (activated === true) { + promiseQuery = toolsLib.user.unfreezeUserById(user_id); + } else if (activated === false) { + promiseQuery = toolsLib.user.freezeUserById(user_id); + } + + promiseQuery + .then((user) => { + const message = `Account ${user.email} has been ${ + activated ? 'activated' : 'deactivated' + }`; + return res.json({ message }); + }) + .catch((err) => { + loggerAdmin.error( + req.uuid, + 'controllers/admin/activateUser', + err.message + ); + return res.status(err.status || 400).json({ message: err.message }); + }); +}; + +const getAdminBalance = (req, res) => { + loggerAdmin.verbose( + req.uuid, + 'controllers/admin/getAdminUserBalance/auth', + req.auth + ); + + toolsLib.wallet.getKitBalance() + .then((balance) => { + return res.json(balance); + }) + .catch((err) => { + return res.status(err.status || 400).json({ message: err.message }); + }); +}; + +const upgradeUser = (req, res) => { + loggerAdmin.verbose( + req.uuid, + 'controllers/admin/upgradeUser auth', + req.auth + ); + + const domain = req.headers['x-real-origin']; + + const { user_id, verification_level } = req.swagger.params.data.value; + + toolsLib.user.changeUserVerificationLevelById(user_id, verification_level, domain) + .then(() => { + return res.json({ message: 'Success' }); + }) + .catch((err) => { + loggerAdmin.error( + req.uuid, + 'controllers/admin/upgradeUser', + err.message + ); + return res.status(err.status || 400).json({ message: err.message }); + }); +}; + +const flagUser = (req, res) => { + loggerAdmin.verbose(req.uuid, 'controllers/admin/flagUser/auth', req.auth); + const { user_id } = req.swagger.params.data.value; + + toolsLib.user.toggleFlaggedUserById(user_id) + .then(() => { + return res.json({ message: 'Success' }); + }) + .catch((err) => { + loggerAdmin.error(req.uuid, 'controllers/admin/flagUser', err.message); + return res.status(err.status || 400).json({ message: err.message }); + }); +}; + +const getAdminUserLogins = (req, res) => { + loggerAdmin.verbose( + req.uuid, + 'controllers/admin/getAdminUserLogins/auth', + req.auth + ); + const { user_id, limit, page, start_date, order_by, order, end_date, format } = req.swagger.params; + + toolsLib.user.getUserLogins({ + userId: user_id.value, + limit: limit.value, + page: page.value, + orderBy: order_by.value, + order: order.value, + startDate: start_date.value, + endDate: end_date.value, + format: format.value + }) + .then((data) => { + if (format.value) { + res.setHeader('Content-disposition', `attachment; filename=${toolsLib.getKitConfig().api_name}-users-logins.csv`); + res.set('Content-Type', 'text/csv'); + return res.status(202).send(data); + } else { + return res.json(data); + } + }) + .catch((err) => { + loggerAdmin.error( + req.uuid, + 'controllers/admin/getAdminUserLogins/catch', + err.message + ); + return res.status(err.status || 400).json({ message: err.message }); + }); +}; + +const getUserAudits = (req, res) => { + loggerAdmin.verbose( + req.uuid, + 'controllers/admin/getUserAudits/auth', + req.auth + ); + const user_id = req.swagger.params.user_id.value; + const { limit, page, order_by, order, start_date, end_date, format } = req.swagger.params; + + toolsLib.user.getUserAudits({ + userId: user_id, + limit: limit.value, + page: page.value, + orderBy: order_by.value, + order: order.value, + startDate: start_date.value, + endDate: end_date.value, + format: format.value + }) + .then((data) => { + if (format.value) { + res.setHeader('Content-disposition', `attachment; filename=${toolsLib.getKitConfig().api_name}-audits.csv`); + res.set('Content-Type', 'text/csv'); + return res.status(202).send(data); + } else { + return res.json(data); + } + }) + .catch((err) => { + loggerAdmin.error( + req.uuid, + 'controllers/admin/getUserAudits', + err.message + ); + return res.status(err.status || 400).json({ message: err.message }); + }); +}; + +const getCoins = (req, res) => { + loggerAdmin.verbose( + req.uuid, + 'controllers/coin/getCoins/auth', + req.auth + ); + + const currency = req.swagger.params.currency.value; + + if (currency && !toolsLib.subscribedToCoin(currency)) { + loggerAdmin.error( + req.uuid, + 'controllers/coin/getCoins', + `Invalid currency: "${currency}"` + ); + return res.status(400).json({ message: `Invalid currency: "${currency}"` }); + } + + try { + if (currency) { + return res.json(toolsLib.getKitCoin(currency)); + } else { + return res.json(toolsLib.getKitCoinsConfig()); + } + } catch (err) { + loggerAdmin.error( + req.uuid, + 'controllers/coin/getCoins', + err.message + ); + return res.status(400).json({ message: err.message }); + } +}; + +const getPairs = (req, res) => { + loggerAdmin.verbose( + req.uuid, + 'controllers/coin/getPairs/auth', + req.auth + ); + + const pair = req.swagger.params.pair.value; + + if (pair && !toolsLib.subscribedToPair(pair)) { + loggerAdmin.error( + req.uuid, + 'controllers/coin/getPairs', + `Invalid pair: "${pair}"` + ); + return res.status(400).json({ message: `Invalid pair: "${pair}"` }); + } + + try { + if (pair) { + return res.json(toolsLib.getKitPair(pair)); + } else { + return res.json(toolsLib.getKitPairsConfig()); + } + } catch (err) { + loggerAdmin.error( + req.uuid, + 'controllers/coin/getPairs', + err.message + ); + return res.status(400).json({ message: err.message }); + } +}; + +const transferFund = (req, res) => { + loggerAdmin.verbose( + req.uuid, + 'controllers/admin/transferFund auth', + req.auth + ); + + const data = req.swagger.params.data.value; + + toolsLib.wallet.transferAssetByKitIds(data.sender_id, data.receiver_id, data.currency, data.amount) + .then(() => { + return res.json({ message: 'Success' }); + }) + .catch((err) => { + loggerAdmin.error( + req.uuid, + 'controllers/admin/transferFund', + err.message + ); + return res.status(err.status || 400).json({ message: err.message }); + }); +}; + +const adminCheckTransaction = (req, res) => { + loggerAdmin.verbose( + req.uuid, + 'controllers/admin/adminCheckTransaction auth', + req.auth + ); + const transactionId = req.swagger.params.transaction_id.value; + const address = req.swagger.params.address.value; + const currency = req.swagger.params.currency.value; + const isTestnet = req.swagger.params.is_testnet.value; + + toolsLib.wallet.checkTransaction(currency, transactionId, address, isTestnet) + .then((transaction) => { + return res.json({ message: 'Success', transaction }); + }) + .catch((err) => { + loggerAdmin.error( + req.uuid, + 'controllers/admin/adminCheckTransaction catch', + err.message + ); + return res.status(err.status || 400).json({ message: err.message }); + }); +}; + +const completeExchangeSetup = (req, res) => { + loggerAdmin.verbose( + req.uuid, + 'controllers/admin/completeExchangeSetup auth', + req.auth + ); + + toolsLib.setExchangeSetupCompleted() + .then(() => { + return res.json({ message: 'Success' }); + }) + .catch((err) => { + loggerAdmin.error( + req.uuid, + 'controllers/admin/completeExchangeSetup catch', + err.message + ); + return res.status(err.status || 400).json({ message: err.message }); + }); +}; + +const uploadImage = (req, res) => { + loggerAdmin.verbose( + req.uuid, + 'controllers/admin/uploadImage auth', + req.auth + ); + + const name = req.swagger.params.name.value; + const file = req.swagger.params.file.value; + + toolsLib.storeImageOnNetwork(file, name) + .then((result) => { + return res.json(result); + }) + .catch((err) => { + loggerAdmin.error( + req.uuid, + 'controllers/admin/uploadImage catch', + err.message + ); + return res.status(err.status || 400).json({ message: err.message }); + }); +}; + +const getOperators = (req, res) => { + loggerAdmin.verbose( + req.uuid, + 'controllers/admin/getOperators auth', + req.auth + ); + + const { limit, page, order_by, order } = req.swagger.params; + + toolsLib.user.getExchangeOperators({ + limit: limit.value, + page: page.value, + orderBy: order_by.value, + order: order.value + }) + .then((operators) => { + return res.json(operators); + }) + .catch((err) => { + loggerAdmin.error( + req.uuid, + 'controllers/admin/getOperators catch', + err.message + ); + return res.status(err.status || 400).json({ message: err.message }); + }); +}; + +const inviteNewOperator = (req, res) => { + loggerAdmin.verbose( + req.uuid, + 'controllers/admin/inviteNewOperator auth', + req.auth + ); + + const invitingEmail = req.auth.sub.email; + const { email, role } = req.swagger.params; + + toolsLib.user.inviteExchangeOperator(invitingEmail, email.value, role.value) + .then(() => { + return res.json({ message: 'Success' }); + }) + .catch((err) => { + loggerAdmin.error( + req.uuid, + 'controllers/admin/inviteNewOperator err', + err.message + ); + return res.status(err.status || 400).json({ message: err.message }); + }); +}; + +const getExchangeGeneratedFees = (req, res) => { + loggerAdmin.verbose( + req.uuid, + 'controllers/admin/getExchangeGeneratedFees auth', + req.auth + ); + + const { limit, page, start_date, end_date } = req.swagger.params; + + toolsLib.order.getGeneratedFees(limit.value, page.value, start_date.value, end_date.value) + .then((data) => { + return res.json(data); + }) + .catch((err) => { + loggerAdmin.error( + req.uuid, + 'controllers/admin/getExchangeGeneratedFees catch', + err.message + ); + return res.status(err.status || 400).json({ message: err.message }); + }); +}; + +const mintAsset = (req, res) => { + loggerAdmin.verbose( + req.uuid, + 'controllers/admin/mintAsset auth', + req.auth + ); + + const { + user_id, + currency, + amount, + description + } = req.swagger.params.data.value; + + loggerAdmin.info( + req.uuid, + 'controllers/admin/mintAsset user_id', + user_id, + 'currency', + currency, + 'amount', + amount + ); + + toolsLib.user.getUserByKitId(user_id) + .then((user) => { + if (!user) { + throw new Error(USER_NOT_FOUND); + } + return toolsLib.wallet.mintAssetByNetworkId(user.network_id, currency, amount, description); + }) + .then(() => { + return res.json({ message: 'Success' }); + }) + .catch((err) => { + return res.status(err.status || 400).json({ message: err.message }); + }); +}; + +const burnAsset = (req, res) => { + loggerAdmin.verbose( + req.uuid, + 'controllers/admin/burnAsset auth', + req.auth + ); + + const { + user_id, + currency, + amount, + description + } = req.swagger.params.data.value; + + loggerAdmin.info( + req.uuid, + 'controllers/admin/burnAsset user_id', + user_id, + 'currency', + currency, + 'amount', + amount + ); + + toolsLib.user.getUserByKitId(user_id) + .then((user) => { + if (!user) { + throw new Error(USER_NOT_FOUND); + } + return toolsLib.wallet.burnAssetByNetworkId(user.network_id, currency, amount, description); + }) + .then(() => { + return res.json({ message: 'Success' }); + }) + .catch((err) => { + return res.status(err.status || 400).json({ message: err.message }); + }); +}; + +module.exports = { + createInitialAdmin, + getAdminKit, + putAdminKit, + getUsersAdmin, + putUserRole, + putUserNote, + getAdminUserBalance, + activateUser, + getAdminBalance, + upgradeUser, + flagUser, + getAdminUserLogins, + getUserAudits, + getCoins, + getPairs, + transferFund, + adminCheckTransaction, + completeExchangeSetup, + putNetworkCredentials, + uploadImage, + getOperators, + inviteNewOperator, + getExchangeGeneratedFees, + mintAsset, + burnAsset +}; diff --git a/server/api/controllers/deposit.js b/server/api/controllers/deposit.js new file mode 100644 index 0000000000..4c9b553faa --- /dev/null +++ b/server/api/controllers/deposit.js @@ -0,0 +1,64 @@ +'use strict'; + +const { loggerDeposits } = require('../../config/logger'); +const toolsLib = require('hollaex-tools-lib'); + +const getAdminDeposits = (req, res) => { + loggerDeposits.verbose( + req.uuid, + 'controllers/deposit/getAdminDeposits auth', + req.auth + ); + + const { user_id, currency, limit, page, order_by, order, start_date, end_date, status, dismissed, rejected, processing, waiting, format } = req.swagger.params; + + toolsLib.wallet.getUserDepositsByKitId(user_id.value, currency.value, status.value, dismissed.value, rejected.value, processing.value, waiting.value, limit.value, page.value, order_by.value, order.value, start_date.value, end_date.value, format.value) + .then((data) => { + if (format.value) { + res.setHeader('Content-disposition', `attachment; filename=${toolsLib.getKitConfig().api_name}-users-deposits.csv`); + res.set('Content-Type', 'text/csv'); + return res.status(202).send(data); + } else { + return res.json(data); + } + }) + .catch((err) => { + loggerDeposits.error( + req.uuid, + 'controllers/deposit/getAdminDeposits', + err.message + ); + return res.status(err.status || 400).json({ message: err.message }); + }); +}; + +const getUserDeposits = (req, res) => { + loggerDeposits.verbose( + req.uuid, + 'controllers/deposit/getUserDeposits auth', + req.auth.sub + ); + const user_id = req.auth.sub.id; + const currency = req.swagger.params.currency.value || ''; + const { limit, page, order_by, order, start_date, end_date, format } = req.swagger.params; + + toolsLib.wallet.getUserDepositsByKitId(user_id, currency, limit.value, page.value, order_by.value, order.value, start_date.value, end_date.value, format.value) + .then((data) => { + if (format.value) { + res.setHeader('Content-disposition', `attachment; filename=${toolsLib.getKitConfig().api_name}-deposits.csv`); + res.set('Content-Type', 'text/csv'); + return res.status(202).send(data); + } else { + return res.json(data); + } + }) + .catch((err) => { + loggerDeposits.error('controllers/deposit/getUserDeposits', err.message); + return res.status(err.status || 400).json({ message: err.message }); + }); +}; + +module.exports = { + getAdminDeposits, + getUserDeposits, +}; diff --git a/server/api/controllers/notification.js b/server/api/controllers/notification.js new file mode 100644 index 0000000000..28c8ee340a --- /dev/null +++ b/server/api/controllers/notification.js @@ -0,0 +1,161 @@ +'use strict'; + +const { loggerNotification } = require('../../config/logger'); +const toolsLib = require('hollaex-tools-lib'); +const { sendEmail } = require('../../mail'); +const { MAILTYPE } = require('../../mail/strings'); +const { publisher } = require('../../db/pubsub'); +const { INIT_CHANNEL, WS_PUBSUB_DEPOSIT_CHANNEL, EVENTS_CHANNEL } = require('../../constants'); +const moment = require('moment'); + +const applyKitChanges = (req, res) => { + const ip = req.headers ? req.headers['x-real-ip'] : undefined; + const domain = req.headers['x-real-origin']; + loggerNotification.verbose('controller/notification/applyKitChanges ip domain', ip, domain); + + toolsLib.security.verifyNetworkHmacToken(req) + .then(() => { + return publisher.publish(INIT_CHANNEL, JSON.stringify({ type: 'refreshInit' })); + }) + .then(() => { + return res.json({ message: 'Success' }); + }) + .catch((err) => { + loggerNotification.verbose('controller/notification/applyKitChanges', err.message); + return res.status(err.status || 400).json({ message: err.message }); + }); +}; + +const handleCurrencyDeposit = (req, res) => { + const ip = req.headers ? req.headers['x-real-ip'] : undefined; + const domain = req.headers['x-real-origin']; + loggerNotification.verbose('controller/notification/handleCurrencyDeposit ip domain', ip, domain); + + const currency = req.swagger.params.currency.value; + const { user_id, amount, txid, address, is_confirmed } = req.swagger.params.data.value; + + toolsLib.security.verifyNetworkHmacToken(req) + .then(() => { + if (!toolsLib.subscribedToCoin(currency)) { + throw new Error('Invalid currency'); + } + return toolsLib.user.getUserByNetworkId(user_id); + }) + .then((user) => { + const depositData = { + amount, + currency, + status: is_confirmed ? 'COMPLETED' : 'PENDING', + address, + transaction_id: txid + }; + + publisher.publish(WS_PUBSUB_DEPOSIT_CHANNEL, JSON.stringify({ + topic: 'deposit', + action: 'insert', + user_id: user.network_id, + data: depositData, + time: moment().unix() + })); + + publisher.publish(EVENTS_CHANNEL, JSON.stringify({ + type: 'deposit', + data: { + ...depositData, + user_id: user.id + } + })); + + sendEmail( + MAILTYPE.DEPOSIT, + user.email, + depositData, + user.settings, + domain + ); + return res.json({ message: 'Success' }); + }) + .catch((err) => { + loggerNotification.error( + req.uuid, + 'controller/notification/handleCurrencyDeposit', + err.message + ); + return res.status(400).json({ message: `Fail - ${err.message}` }); + }); +}; + +const handleCurrencyWithdrawal = (req, res) => { + const ip = req.headers ? req.headers['x-real-ip'] : undefined; + const domain = req.headers['x-real-origin']; + loggerNotification.verbose('controller/notification/handleCurrencyWithdrawal ip domain', ip, domain); + + const currency = req.swagger.params.currency.value; + const { user_id, amount, txid, address, is_confirmed, fee, rejected } = req.swagger.params.data.value; + + toolsLib.security.verifyNetworkHmacToken(req) + .then(() => { + if (!toolsLib.subscribedToCoin(currency)) { + throw new Error('Invalid currency'); + } + return toolsLib.user.getUserByNetworkId(user_id); + }) + .then((user) => { + if (rejected) { + const data = { + amount, + currency, + address + }; + + sendEmail( + MAILTYPE.INVALID_ADDRESS, + user.email, + data, + user.settings, + domain + ); + } else { + const data = { + amount, + currency, + status: is_confirmed ? 'COMPLETED' : 'PENDING', + address, + fee, + transaction_id: txid + }; + + publisher.publish(EVENTS_CHANNEL, JSON.stringify({ + type: 'withdrawal', + data: { + ...data, + user_id: user.id + } + })); + + sendEmail( + MAILTYPE.WITHDRAWAL, + user.email, + data, + user.settings, + domain + ); + } + + return res.json({ message: 'Success' }); + }) + .catch((err) => { + loggerNotification.error( + req.uuid, + 'controller/notification/handleCurrencyWithdrawal', + err.message + ); + return res.status(400).json({ message: `Fail - ${err.message}` }); + }); +}; + +module.exports = { + applyKitChanges, + handleCurrencyDeposit, + handleCurrencyWithdrawal +}; diff --git a/server/api/controllers/order.js b/server/api/controllers/order.js new file mode 100644 index 0000000000..9490555455 --- /dev/null +++ b/server/api/controllers/order.js @@ -0,0 +1,205 @@ +'use strict'; + +const { loggerOrders } = require('../../config/logger'); +const toolsLib = require('hollaex-tools-lib'); +const { isPlainObject, isNumber } = require('lodash'); + +const createOrder = (req, res) => { + loggerOrders.verbose( + req.uuid, + 'controllers/order/createOrder auth', + req.auth + ); + loggerOrders.verbose( + req.uuid, + 'controllers/order/createOrder order', + req.swagger.params.order.value + ); + + const user_id = req.auth.sub.id; + let order = req.swagger.params.order.value; + + const opts = {}; + + if (isPlainObject(order.meta)) { + opts.meta = order.meta; + } + + if (isNumber(order.stop)) { + opts.stop = order.stop; + } + + if (order.type === 'market') { + delete order.price; + } + + toolsLib.order.createUserOrderByKitId(user_id, order.symbol, order.side, order.size, order.type, order.price, opts) + .then((order) => { + return res.json(order); + }) + .catch((err) => { + loggerOrders.error( + req.uuid, + 'controllers/order/createOrder error', + err.message + ); + return res.status(err.status || 400).json({ message: err.message }); + }); +}; + +const getUserOrder = (req, res) => { + loggerOrders.verbose(req.uuid, 'controllers/order/getUserOrder auth', req.auth); + loggerOrders.verbose( + req.uuid, + 'controllers/order/getUserOrder order_id', + req.swagger.params.order_id.value + ); + const user_id = req.auth.sub.id; + const order_id = req.swagger.params.order_id.value; + + toolsLib.order.getUserOrderByKitId(user_id, order_id) + .then((order) => { + return res.json(order); + }) + .catch((err) => { + loggerOrders.error(req.uuid, 'controllers/order/getUserOrder error', err.message); + return res.status(err.status || 400).json({ message: err.message }); + }); +}; + +const cancelUserOrder = (req, res) => { + loggerOrders.verbose(req.uuid, 'controllers/order/cancelUserOrder auth', req.auth); + loggerOrders.verbose( + req.uuid, + 'controllers/order/cancelUserOrder order_id', + req.swagger.params.order_id.value + ); + const user_id = req.auth.sub.id; + const order_id = req.swagger.params.order_id.value; + + toolsLib.order.cancelUserOrderByKitId(user_id, order_id) + .then((order) => { + return res.json(order); + }) + .catch((err) => { + loggerOrders.error(req.uuid, 'controllers/order/cancelUserOrder error', err.message); + return res.status(err.status || 400).json({ message: err.message }); + }); +}; + +const getAllUserOrders = (req, res) => { + loggerOrders.verbose(req.uuid, 'controllers/order/getAllUserOrders auth', req.auth); + const user_id = req.auth.sub.id; + const { symbol, side, status, open, limit, page, order_by, order, start_date, end_date } = req.swagger.params; + + toolsLib.order.getAllUserOrdersByKitId( + user_id, + symbol.value, + side.value, + status.value, + open.value, + limit.value, + page.value, + order_by.value, + order.value, + start_date.value, + end_date.value + ) + .then((order) => { + return res.json(order); + }) + .catch((err) => { + loggerOrders.error(req.uuid, 'controllers/order/getAllUserOrders error', err.message); + return res.status(err.status || 400).json({ message: err.message }); + }); +}; + +const cancelAllUserOrders = (req, res) => { + loggerOrders.verbose(req.uuid, 'controllers/order/cancelAllUserOrders auth', req.auth); + const user_id = req.auth.sub.id; + const symbol = req.swagger.params.symbol.value; + + toolsLib.order.cancelAllUserOrdersByKitId(user_id, symbol) + .then((order) => { + return res.json(order); + }) + .catch((err) => { + loggerOrders.error(req.uuid, 'controllers/order/cancelAllUserOrders error', err.message); + return res.status(err.status || 400).json({ message: err.message }); + }); +}; + +const getAdminOrders = (req, res) => { + loggerOrders.verbose(req.uuid, 'controllers/order/getAdminOrders/auth', req.auth); + const { user_id, symbol, side, status, open, limit, page, order_by, order, start_date, end_date } = req.swagger.params; + + let promiseQuery; + + if (user_id.value) { + promiseQuery = toolsLib.order.getAllUserOrdersByKitId( + user_id.value, + symbol.value, + side.value, + status.value, + open.value, + limit.value, + page.value, + order_by.value, + order.value, + start_date.value, + end_date.value + ); + } else { + promiseQuery = toolsLib.order.getAllExchangeOrders( + symbol.value, + side.value, + status.value, + open.value, + limit.value, + page.value, + order_by.value, + order.value, + start_date.value, + end_date.value + ); + } + + promiseQuery + .then((orders) => { + return res.json(orders); + }) + .catch((err) => { + loggerOrders.debug(req.uuid, 'controllers/order/getAdminOrders', err.message); + return res.status(err.status || 400).json({ message: err.message }); + }); +}; + +const adminCancelOrder = (req, res) => { + loggerOrders.verbose(req.uuid, 'controllers/order/adminCancelOrder auth', req.auth); + + const userId = req.swagger.params.user_id.value; + const orderId = req.swagger.params.order_id.value; + + toolsLib.order.cancelUserOrderByKitId(userId, orderId) + .then((data) => { + return res.json(data); + }) + .catch((err) => { + loggerOrders.error( + req.uuid, + 'controllers/order/adminCancelOrder', + err.message + ); + return res.status(400).json({ message: err.message }); + }); +}; + +module.exports = { + createOrder, + getUserOrder, + cancelUserOrder, + getAllUserOrders, + cancelAllUserOrders, + getAdminOrders, + adminCancelOrder +}; diff --git a/server/api/controllers/otp.js b/server/api/controllers/otp.js new file mode 100644 index 0000000000..131969f4c6 --- /dev/null +++ b/server/api/controllers/otp.js @@ -0,0 +1,123 @@ +'use strict'; + +const { INVALID_OTP_CODE } = require('../../messages'); +const { loggerOtp } = require('../../config/logger'); +const toolsLib = require('hollaex-tools-lib'); + +const requestOtp = (req, res) => { + loggerOtp.verbose(req.uuid, 'controllers/otp/requestOtp', req.auth); + const { id } = req.auth.sub; + + toolsLib.security.checkOtp(id) + .then((otpCode) => { + if (otpCode) { + return otpCode.secret; + } + return toolsLib.security.createOtp(id); + }) + .then((secret) => { + loggerOtp.verbose(req.uuid, 'controllers/otp/requestOtp', secret); + res.json({ secret }); + }) + .catch((err) => { + loggerOtp.error(req.uuid, 'controllers/otp/requestOtp', err.message); + res.status(400).json({ message: err.message }); + }); +}; + +const activateOtp = (req, res) => { + loggerOtp.verbose(req.uuid, 'controllers/otp/activateOtp', req.auth); + const { id } = req.auth.sub; + const { code } = req.swagger.params.data.value; + loggerOtp.verbose( + req.uuid, + 'controllers/otp/activateOtp/code', + req.swagger.params.data + ); + + toolsLib.security.checkOtp(id) + .then((otpCode) => { + return toolsLib.security.verifyOtp(otpCode.secret, code); + }) + .then((validOtp) => { + loggerOtp.verbose(req.uuid, 'controllers/otp/activateOtp', validOtp); + if (!validOtp) { + throw new Error(INVALID_OTP_CODE); + } + return toolsLib.security.setActiveUserOtp(id); + }) + .then((user) => { + loggerOtp.verbose( + req.uuid, + 'controllers/otp/activateOtp', + user.dataValues + ); + res.json({ message: 'OTP enabled' }); + }) + .catch((err) => { + loggerOtp.error(req.uuid, 'controllers/otp/activateOtp', err.message); + res.status(400).json({ message: err.message }); + }); +}; + +const deactivateOtp = (req, res) => { + loggerOtp.verbose(req.uuid, 'controllers/otp/deactivateOtp', req.auth); + const { id } = req.auth.sub; + const { code } = req.swagger.params.data.value; + loggerOtp.verbose( + req.uuid, + 'controllers/otp/deactivateOtp/code', + req.swagger.params.data + ); + + toolsLib.security.hasUserOtpEnabled(id) + .then((otp_enabled) => { + if (!otp_enabled) { + throw new Error('OTP is not enabled'); + } + return toolsLib.security.verifyOtpBeforeAction(id, code); + }) + .then(() => { + return toolsLib.security.updateUserOtpEnabled(id, false); + }) + .then(() => { + res.json({ message: 'OTP disabled' }); + }) + .catch((err) => { + loggerOtp.error( + req.uuid, + 'controllers/otp/deactivateOtp', + err.message + ); + res.status(400).json({ message: err.message }); + }); +}; + +const deactivateOtpAdmin = (req, res) => { + loggerOtp.verbose( + req.uuid, + 'controllers/otp/deactivateOtpAdmin/auth', + req.auth + ); + const { user_id } = req.swagger.params.data.value; + + toolsLib.user.deactivateUserOtpById(user_id) + .then(() => { + return res.json({ message: 'Success' }); + }) + .catch((err) => { + loggerOtp.error( + req.uuid, + 'controllers/otp/deactivateOtpAdmin', + err.message + ); + return res.status(err.status || 400).json({ message: err.message }); + }); +}; + +module.exports = { + requestOtp, + activateOtp, + deactivateOtp, + deactivateOtpAdmin +}; diff --git a/server/api/controllers/public.js b/server/api/controllers/public.js new file mode 100644 index 0000000000..e631283f39 --- /dev/null +++ b/server/api/controllers/public.js @@ -0,0 +1,327 @@ +'use strict'; + +const packageJson = require('../../package.json'); +const { API_HOST } = require('../../constants'); +const { loggerPublic } = require('../../config/logger'); +const toolsLib = require('hollaex-tools-lib'); + +const getHealth = (req, res) => { + try { + return res.json({ + name: toolsLib.getKitConfig().api_name || packageJson.name, + version: packageJson.version, + host: API_HOST, + basePath: req.swagger.swaggerObject.basePath, + status: toolsLib.getKitConfig().status + }); + } catch (err) { + loggerPublic.verbose('controller/public/getHealth', err.message); + return res.status(err.status || 400).json({ message: err.message }); + } +}; + +const getConstants = (req, res) => { + try { + return res.json({ + coins: toolsLib.getKitCoinsConfig(), + pairs: toolsLib.getKitPairsConfig() + }); + } catch (err) { + loggerPublic.verbose('controller/public/getConstants', err.message); + return res.status(err.status || 400).json({ message: err.message }); + } +}; + +const getKitConfigurations = (req, res) => { + try { + return res.json(toolsLib.getKitConfig()); + } catch (err) { + loggerPublic.verbose('controller/public/getKitConfigurations', err.message); + return res.status(err.status || 400).json({ message: err.message }); + } +}; + +const sendSupportEmail = (req, res) => { + const { email, category, subject, description } = req.swagger.params; + return toolsLib.sendEmailToSupport(email.value, category.value, subject.value, description.value) + .then(() => { + return res.json({ message: 'Email was sent to support' }); + }) + .catch((err) => { + loggerPublic.verbose('controller/public/sendSupportEmail', err.message); + return res.status(err.status || 400).json({ message: err.message }); + }); +}; + +const getTopOrderbook = (req, res) => { + const symbol = req.swagger.params.symbol.value; + + toolsLib.getOrderbook(symbol) + .then((data) => { + return res.json(data); + }) + .catch((err) => { + loggerPublic.error( + req.uuid, + 'controller/public/getTopOrderbook', + err.message + ); + return res.status(err.status || 400).json({ message: err.message }); + }); +}; + +const getTopOrderbooks = (req, res) => { + toolsLib.getOrderbooks() + .then((data) => { + return res.json(data); + }) + .catch((err) => { + loggerPublic.error( + req.uuid, + 'controller/public/getTopOrderbooks', + err.message + ); + return res.status(err.status || 400).json({ message: err.message }); + }); +}; + +const getTrades = (req, res) => { + const symbol = req.swagger.params.symbol.value; + + if (symbol && !toolsLib.subscribedToPair(symbol)) { + loggerPublic.error( + req.uuid, + 'controller/public/getTopOrderbooks', + 'Invalid symbol' + ); + return res.status(400).json({ message: 'Invalid symbol' }); + } + + toolsLib.getPublicTrades(symbol) + .then((data) => { + return res.json(data); + }) + .catch((err) => { + loggerPublic.error( + req.uuid, + 'controller/public/getTrades', + err.message + ); + return res.status(err.status || 400).json({ message: err.message }); + }); +}; + +const getTradesHistory = (req, res) => { + const { symbol, side, limit, page, order_by, order, start_date, end_date } = req.swagger.params; + + if (symbol.value && !toolsLib.subscribedToPair(symbol.value)) { + loggerPublic.error( + req.uuid, + 'controller/public/getTopOrderbooks', + 'Invalid symbol' + ); + return res.status(400).json({ message: 'Invalid symbol' }); + } + + toolsLib.getTradesHistory( + symbol.value, + side.value, + limit.value, + page.value, + order_by.value, + order.value, + start_date.value, + end_date.value + ) + .then((data) => { + return res.json(data); + }) + .catch((err) => { + loggerPublic.error( + req.uuid, + 'controller/public/getTrades', + err.message + ); + return res.status(err.status || 400).json({ message: err.message }); + }); +}; + +const getTicker = (req, res) => { + const symbol = req.swagger.params.symbol.value; + + toolsLib.getTicker(symbol) + .then((data) => { + return res.json(data); + }) + .catch((err) => { + loggerPublic.error( + req.uuid, + 'controller/public/getTicker', + err.message + ); + return res.status(err.status || 400).json({ message: err.message }); + }); +}; + +const getAllTicker = (req, res) => { + toolsLib.getTickers() + .then((data) => { + return res.json(data); + }) + .catch((err) => { + loggerPublic.error( + req.uuid, + 'controller/public/getAllTicker', + err.message + ); + return res.status(err.status || 400).json({ message: err.message }); + }); +}; + +const getChart = (req, res) => { + const { from, to, symbol, resolution } = req.swagger.params; + + if (!toolsLib.subscribedToPair(symbol.value)) { + loggerPublic.error( + req.uuid, + 'controller/public/getChart', + 'Invalid symbol' + ); + return res.status(400).json({ message: 'Invalid symbol' }); + } + + toolsLib.getChart(from.value, to.value, symbol.value, resolution.value) + .then((data) => { + return res.json(data); + }) + .catch((err) => { + loggerPublic.error( + req.uuid, + 'controller/public/getChart', + err.message + ); + return res.status(err.status || 400).json({ message: err.message }); + }); +}; + +const getCharts = (req, res) => { + const { from, to, resolution } = req.swagger.params; + + toolsLib.getCharts(from.value, to.value, resolution.value) + .then((data) => { + return res.json(data); + }) + .catch((err) => { + loggerPublic.error( + req.uuid, + 'controller/public/getCharts', + err.message + ); + return res.status(err.status || 400).json({ message: err.message }); + }); +}; + +const getConfig = (req, res) => { + toolsLib.getUdfConfig() + .then((data) => { + return res.json(data); + }) + .catch((err) => { + loggerPublic.error( + req.uuid, + 'controller/public/getConfig', + err.message + ); + return res.status(err.status || 400).json({ message: err.message }); + }); +}; + +const getHistory = (req, res) => { + const { symbol, from, to, resolution } = req.swagger.params; + + if (!toolsLib.subscribedToPair(symbol.value)) { + loggerPublic.error( + req.uuid, + 'controller/public/getHistory', + 'Invalid symbol' + ); + return res.status(400).json({ message: 'Invalid symbol' }); + } + + toolsLib.getUdfHistory(from.value, to.value, symbol.value, resolution.value) + .then((data) => { + return res.json(data); + }) + .catch((err) => { + loggerPublic.error( + req.uuid, + 'controller/public/getHistory', + err.message + ); + return res.status(err.status || 400).json({ message: err.message }); + }); +}; + +const getSymbols = (req, res) => { + const symbol = req.swagger.params.symbol.value; + + if (!toolsLib.subscribedToPair(symbol)) { + loggerPublic.error( + req.uuid, + 'controller/public/getSymbols', + 'Invalid symbol' + ); + return res.status(400).json({ message: 'Invalid symbol' }); + } + + toolsLib.getUdfSymbols(symbol) + .then((data) => { + return res.json(data); + }) + .catch((err) => { + loggerPublic.error( + req.uuid, + 'controller/public/getSymbols', + err.message + ); + return res.status(err.status || 400).json({ message: err.message }); + }); +}; + +const getAssetsPrices = (req, res) => { + const { assets, quote, amount } = req.swagger.params; + + loggerPublic.info(req.uuid, 'controllers/public/getAssetsPrices assets', assets.value, 'quote', quote.value, 'amount', amount.value); + + toolsLib.getAssetsPrices(assets.value, quote.value, amount.value) + .then((data) => { + return res.json(data); + }) + .catch((err) => { + loggerPublic.error( + req.uuid, + 'controller/public/getAssetsPrices', + err.message + ); + return res.status(err.status || 400).json({ message: err.message }); + }); +}; + +module.exports = { + getHealth, + getConstants, + getKitConfigurations, + sendSupportEmail, + getTopOrderbook, + getTopOrderbooks, + getTrades, + getTicker, + getAllTicker, + getChart, + getCharts, + getConfig, + getHistory, + getSymbols, + getAssetsPrices, + getTradesHistory +}; diff --git a/server/api/controllers/tier.js b/server/api/controllers/tier.js new file mode 100644 index 0000000000..5ed7169b71 --- /dev/null +++ b/server/api/controllers/tier.js @@ -0,0 +1,142 @@ +'use strict'; + +const toolsLib = require('hollaex-tools-lib'); +const { loggerTier } = require('../../config/logger'); +const { each } = require('lodash'); + +const getTiers = (req, res) => { + try { + const tiers = toolsLib.getKitTiers(); + const pairs = toolsLib.getKitPairs(); + each(tiers, (tier) => { + each(pairs, (pair) => { + tier.fees.maker[pair] = tier.fees.maker[pair] !== undefined ? tier.fees.maker[pair] : tier.fees.maker.default; + tier.fees.taker[pair] = tier.fees.taker[pair] !== undefined ? tier.fees.taker[pair] : tier.fees.taker.default; + }); + delete tier.fees.maker.default; + delete tier.fees.taker.default; + }); + return res.json(tiers); + } catch (err) { + loggerTier.error(req.uuid, 'controllers/tier/getTiers err', err.message); + return res.status(err.status || 400).json({ message: err.message }); + } +}; + +const postTier = (req, res) => { + loggerTier.verbose(req.uuid, 'controllers/tier/postTier auth', req.auth); + + const { level, name, icon, description, deposit_limit, withdrawal_limit, fees, note } = req.swagger.params.data.value; + + loggerTier.info(req.uuid, 'controllers/tier/postTier new tier', level, name, description); + + toolsLib.tier.createTier(level, name, icon, description, deposit_limit, withdrawal_limit, fees, note) + .then((tier) => { + loggerTier.info(req.uuid, 'controllers/tier/postTier new tier created', level); + return res.json(tier); + }) + .catch((err) => { + loggerTier.error(req.uuid, 'controllers/tier/postTier err', err.message); + return res.status(err.status || 400).json({ message: err.message }); + }); +}; + +const putTier = (req, res) => { + loggerTier.verbose(req.uuid, 'controllers/tier/putTier auth', req.auth); + + const { level, name, icon, description, deposit_limit, withdrawal_limit, note } = req.swagger.params.data.value; + + const updateData = { + name, + icon, + description, + deposit_limit, + withdrawal_limit, + note + }; + + toolsLib.tier.updateTier(level, updateData) + .then((tier) => { + loggerTier.info(req.uuid, 'controllers/tier/putTier tier updated', level); + return res.json(tier); + }) + .catch((err) => { + loggerTier.error(req.uuid, 'controllers/tier/postTier err', err.message); + return res.status(err.status || 400).json({ message: err.message }); + }); +}; + +const updatePairFees = (req, res) => { + loggerTier.verbose( + req.uuid, + 'controllers/tier/updatePairFees auth', + req.auth + ); + + const { pair, fees } = req.swagger.params.data.value; + + loggerTier.info( + req.uuid, + 'controllers/tier/updatePairFees pair', + pair + ); + + toolsLib.tier.updatePairFees(pair, fees) + .then(() => { + loggerTier.info( + req.uuid, + 'controllers/tier/updatePairFees updated fees pair', + pair + ); + return res.json({ message: 'Success' }); + }) + .catch((err) => { + loggerTier.error( + req.uuid, + 'controllers/tier/updatePairFees err', + err.message + ); + return res.status(err.status || 400).json({ message: err.message }); + }); +}; + +const updateTiersLimits = (req, res) => { + loggerTier.verbose( + req.uuid, + 'controllers/tier/updateTierLimits auth', + req.auth + ); + + const { limits } = req.swagger.params.data.value; + + loggerTier.info( + req.uuid, + 'controllers/tier/updateTierLimits tiers', + Object.keys(limits) + ); + + toolsLib.tier.updateTiersLimits(limits) + .then(() => { + loggerTier.info( + req.uuid, + 'controllers/tier/updateTierLimits updated limits', + ); + return res.json({ message: 'Success' }); + }) + .catch((err) => { + loggerTier.error( + req.uuid, + 'controllers/tier/updatePairLimits err', + err.message + ); + return res.status(err.status || 400).json({ message: err.message }); + }); +}; + +module.exports = { + getTiers, + postTier, + putTier, + updatePairFees, + updateTiersLimits +}; diff --git a/server/api/controllers/trade.js b/server/api/controllers/trade.js new file mode 100644 index 0000000000..435d2a3438 --- /dev/null +++ b/server/api/controllers/trade.js @@ -0,0 +1,70 @@ +'use strict'; + +const { loggerTrades } = require('../../config/logger'); +const toolsLib = require('hollaex-tools-lib'); + +const getUserTrades = (req, res) => { + loggerTrades.verbose( + req.uuid, + 'controllers/trade/getUserTrades auth', + req.auth.sub + ); + + const user_id = req.auth.sub.id; + const { limit, page, order_by, order, start_date, end_date, format } = req.swagger.params; + const symbol = req.swagger.params.symbol.value; + + if (symbol && !toolsLib.subscribedToPair(symbol)) { + loggerTrades.error(req.uuid, 'controllers/trade/getUserTrades', 'Invalid symbol'); + return res.status(400).json({ message: 'Invalid symbol' }); + } + + toolsLib.order.getAllUserTradesByKitId(user_id, symbol, limit.value, page.value, order_by.value, order.value, start_date.value, end_date.value, format.value) + .then((data) => { + if (format.value) { + res.setHeader('Content-disposition', `attachment; filename=${toolsLib.getKitConfig().api_name}-trades.csv`); + res.set('Content-Type', 'text/csv'); + return res.status(202).send(data); + } else { + return res.json(data); + } + }) + .catch((err) => { + loggerTrades.error(req.uuid, 'controllers/trade/getUserTrades', err.message); + return res.status(err.status || 400).json({ message: err.message }); + }); +}; + +const getAdminTrades = (req, res) => { + loggerTrades.verbose(req.uuid, 'controllers/trade/getAdminTrades auth', req.auth); + + const { user_id, symbol, limit, page, order_by, order, start_date, end_date, format } = req.swagger.params; + + let promiseQuery; + + if (user_id.value) { + promiseQuery = toolsLib.order.getAllUserTradesByKitId(user_id.value, symbol.value, limit.value, page.value, order_by.value, order.value, start_date.value, end_date.value, format.value); + } else { + promiseQuery = toolsLib.order.getAllTradesNetwork(symbol.value, limit.value, page.value, order_by.value, order.value, start_date.value, end_date.value, format.value); + } + + promiseQuery + .then((data) => { + if (format.value) { + res.setHeader('Content-disposition', `attachment; filename=${toolsLib.getKitConfig().api_name}-users-trades.csv`); + res.set('Content-Type', 'text/csv'); + return res.status(202).send(data); + } else { + return res.json(data); + } + }) + .catch((err) => { + loggerTrades.error(req.uuid, 'controllers/trade/getAdminTrades', err.message); + return res.status(err.status || 400).json({ message: err.message }); + }); +}; + +module.exports = { + getUserTrades, + getAdminTrades +}; diff --git a/server/api/controllers/user.js b/server/api/controllers/user.js new file mode 100644 index 0000000000..7b7c465b79 --- /dev/null +++ b/server/api/controllers/user.js @@ -0,0 +1,651 @@ +'use strict'; + +const { isEmail, isUUID } = require('validator'); +const toolsLib = require('hollaex-tools-lib'); +const { sendEmail } = require('../../mail'); +const { MAILTYPE } = require('../../mail/strings'); +const { loggerUser } = require('../../config/logger'); +const { + USER_VERIFIED, + PROVIDE_VALID_EMAIL_CODE, + USER_REGISTERED, + USER_NOT_FOUND, + SERVICE_NOT_SUPPORTED, + VERIFICATION_EMAIL_MESSAGE, + TOKEN_REMOVED, + INVALID_CREDENTIALS, + USER_NOT_VERIFIED, + USER_NOT_ACTIVATED, + INVALID_OTP_CODE, + SIGNUP_NOT_AVAILABLE, + PROVIDE_VALID_EMAIL, + INVALID_PASSWORD, + USER_EXISTS, + USER_IS_VERIFIED, + INVALID_VERIFICATION_CODE +} = require('../../messages'); +const { DEFAULT_ORDER_RISK_PERCENTAGE } = require('../../constants'); +const { all } = require('bluebird'); +const { isString } = require('lodash'); +const INITIAL_SETTINGS = () => { + return { + notification: { + popup_order_confirmation: true, + popup_order_completed: true, + popup_order_partially_filled: true + }, + interface: { + order_book_levels: 10, + theme: toolsLib.getKitConfig().defaults.theme + }, + language: toolsLib.getKitConfig().defaults.language, + audio: { + order_completed: true, + order_partially_completed: true, + public_trade: false + }, + risk: { + order_portfolio_percentage: DEFAULT_ORDER_RISK_PERCENTAGE + }, + chat: { + set_username: false + } + }; +}; + +const signUpUser = (req, res) => { + const { + email, + password, + captcha, + referral + } = req.swagger.params.signup.value; + const ip = req.headers['x-real-ip']; + loggerUser.debug( + req.uuid, + 'controllers/user/signUpUser', + req.swagger.params.signup.value, + ip + ); + + toolsLib.security.checkCaptcha(captcha, ip) + .then(() => { + if (!toolsLib.getKitConfig().new_user_is_activated) { + throw new Error(SIGNUP_NOT_AVAILABLE); + } + + if (!email || !isEmail(email)) { + throw new Error(PROVIDE_VALID_EMAIL); + } + + if (!toolsLib.security.isValidPassword(password)) { + throw new Error(INVALID_PASSWORD); + } + + return toolsLib.database.findOne('user', { + where: { email: email.toLowerCase() }, + attributes: ['email'] + }); + }) + .then((user) => { + if (user) { + throw new Error(USER_EXISTS); + } + return toolsLib.database.getModel('user').create({ + email, + password, + settings: INITIAL_SETTINGS() + }); + }) + .then((user) => { + return all([ + toolsLib.user.getVerificationCodeByUserId(user.id), + user + ]); + }) + .then(([ verificationCode, user ]) => { + sendEmail( + MAILTYPE.SIGNUP, + email, + verificationCode.code, + {} + ); + + if (isString(referral)) { + toolsLib.user.checkAffiliation(referral, user.id); + } + + return res.status(201).json({ message: USER_REGISTERED }); + }) + .catch((err) => { + loggerUser.error(req.uuid, 'controllers/user/signUpUser', err.message); + let status = err.status || 400; + let message = err.message; + if (err.name === 'SequelizeValidationError') { + message = err.errs[0].message; + } + return res.status(status).json({ message }); + }); +}; + +const getVerifyUser = (req, res) => { + const email = req.swagger.params.email.value; + const verification_code = req.swagger.params.verification_code.value; + const resendEmail = req.swagger.params.resend.value; + const domain = req.headers['x-real-origin']; + let promiseQuery; + + if (email && isEmail(email)) { + promiseQuery = toolsLib.user.getVerificationCodeByUserEmail(email) + .then((verificationCode) => { + if (resendEmail) { + sendEmail( + MAILTYPE.SIGNUP, + email, + verificationCode.code, + {}, + domain + ); + } + return res.json({ + email, + verification_code: verificationCode.code, + message: VERIFICATION_EMAIL_MESSAGE + }); + }); + } else if (verification_code && isUUID(verification_code)) { + promiseQuery = toolsLib.user.getUserEmailByVerificationCode(verification_code) + .then((userEmail) => { + return res.json({ + email: userEmail, + verification_code, + message: VERIFICATION_EMAIL_MESSAGE + }); + }); + } else { + return res.status(400).json({ + message: PROVIDE_VALID_EMAIL_CODE + }); + } + + promiseQuery + .catch((err) => { + loggerUser.error(req.uuid, 'controllers/user/getVerifyUser', err.message); + if (err.message === USER_NOT_FOUND) { + return res.json({ message: VERIFICATION_EMAIL_MESSAGE }); + } + return res.status(err.status || 400).json({ message: err.message }); + }); +}; + +const verifyUser = (req, res) => { + const { email, verification_code } = req.swagger.params.data.value; + const domain = req.headers['x-real-origin']; + + toolsLib.database.getModel('sequelize').transaction((transaction) => { + return toolsLib.database.findOne('user', { + where: { email }, + attributes: ['id', 'email', 'settings', 'network_id'] + }) + .then((user) => { + return all([ + toolsLib.user.getVerificationCodeByUserId(user.id), + user + ]); + }) + .then(([ verificationCode, user ]) => { + if (verificationCode.verified) { + throw new Error(USER_IS_VERIFIED); + } + + if (verification_code !== verificationCode.code) { + throw new Error(INVALID_VERIFICATION_CODE); + } + + return all([ + user, + toolsLib.user.createUserOnNetwork(email), + verificationCode.update( + { verified: true }, + { fields: ['verified'], transaction } + ) + ]); + }) + .then(([ user, networkUser ]) => { + return user.update( + { network_id: networkUser.id }, + { fields: ['network_id'], returning: true, transaction } + ); + }); + }) + .then((user) => { + sendEmail( + MAILTYPE.WELCOME, + user.email, + {}, + user.settings, + domain + ); + return res.json({ message: USER_VERIFIED }); + }) + .catch((err) => { + loggerUser.error(req.uuid, 'controllers/user/verifyUser', err.message); + return res.status(err.status || 400).json({ message: err.message }); + }); +}; + +const loginPost = (req, res) => { + const { + email, + password, + otp_code, + captcha, + service + } = req.swagger.params.authentication.value; + const ip = req.headers['x-real-ip']; + const device = req.headers['user-agent']; + const domain = req.headers['x-real-origin']; + const origin = req.headers.origin; + const referer = req.headers.referer; + const time = new Date(); + + toolsLib.user.getUserByEmail(email.toLowerCase()) + .then((user) => { + if (!user) { + throw new Error(USER_NOT_FOUND); + } + if (user.verification_level === 0) { + throw new Error(USER_NOT_VERIFIED); + } else if (!user.activated) { + throw new Error(USER_NOT_ACTIVATED); + } + + return all([ + user, + toolsLib.security.validatePassword(user.password, password) + ]); + }) + .then(([ user, passwordIsValid ]) => { + if (!passwordIsValid) { + throw new Error(INVALID_CREDENTIALS); + } + + if (!user.otp_enabled) { + return all([ user, toolsLib.security.checkCaptcha(captcha, ip) ]); + } else { + return all([ + user, + toolsLib.security.verifyOtpBeforeAction(user.id, otp_code).then((validOtp) => { + if (!validOtp) { + throw new Error(INVALID_OTP_CODE); + } else { + return toolsLib.security.checkCaptcha(captcha, ip); + } + }) + ]); + } + }) + .then(([ user ]) => { + if (ip) { + toolsLib.user.registerUserLogin(user.id, ip, { + device, + domain, + origin, + referer + }); + } + const data = { + ip, + time, + device + }; + if (!service) { + sendEmail(MAILTYPE.LOGIN, email, data, {}, domain); + } + return res.status(201).json({ + token: toolsLib.security.issueToken( + user.id, + user.network_id, + email, + ip, + user.is_admin, + user.is_support, + user.is_supervisor, + user.is_kyc, + user.is_communicator + ) + }); + }) + .catch((err) => { + loggerUser.error(req.uuid, 'controllers/user/loginPost catch', err.message); + return res.status(403).json({ message: err.message }); + }); +}; + +const verifyToken = (req, res) => { + loggerUser.debug(req.uuid, 'controllers/user/verifyToken', req.auth.sub); + return res.json({ message: 'Valid Token' }); +}; + +const requestResetPassword = (req, res) => { + const email = req.swagger.params.email.value; + const ip = req.headers['x-real-ip']; + const domain = req.headers['x-real-origin']; + const captcha = req.swagger.params.captcha.value; + + toolsLib.security.sendResetPasswordCode(email, captcha, ip, domain) + .then(() => { + return res.json({ message: `Password request sent to: ${email}` }); + }) + .catch((err) => { + if (err.message === USER_NOT_FOUND) { + return res.json({ message: `Password request sent to: ${email}` }); + } + loggerUser.error(req.uuid, 'controllers/user/requestResetPassword', err.message); + return res.status(err.status || 400).json({ message: err.message }); + }); +}; + +const resetPassword = (req, res) => { + const { code, new_password } = req.swagger.params.data.value; + + toolsLib.security.resetUserPassword(code, new_password) + .then(() => { + return res.json({ message: 'Password updated.' }); + }) + .catch((err) => { + loggerUser.error(req.uuid, 'controllers/user/resetPassword', err.message); + return res.status(err.status || 400).json({ message: 'Invalid code' }); + }); +}; + +const getUser = (req, res) => { + loggerUser.debug(req.uuid, 'controllers/user/getUser', req.auth.sub); + const email = req.auth.sub.email; + + toolsLib.user.getUserByEmail(email, true, true) + .then((user) => { + if (!user) { + throw new Error(USER_NOT_FOUND); + } + return res.json(toolsLib.user.omitUserFields(user)); + }) + .catch((err) => { + loggerUser.error(req.uuid, 'controllers/user/getUser', err.message); + return res.status(err.status || 400).json({ message: err.message }); + }); +}; + +const updateSettings = (req, res) => { + loggerUser.debug(req.uuid, 'controllers/user/updateSettings', req.auth.sub); + const email = req.auth.sub.email; + loggerUser.debug( + req.uuid, + 'controllers/user/updateSettings', + req.swagger.params.data.value + ); + const data = req.swagger.params.data.value; + + toolsLib.user.updateUserSettings({ email }, data) + .then((user) => res.json(user)) + .catch((err) => { + loggerUser.error(req.uuid, 'controllers/user/updateSettings', err.message); + return res.status(err.status || 400).json({ message: err.message }); + }); +}; + +const changePassword = (req, res) => { + loggerUser.debug(req.uuid, 'controllers/user/changePassword', req.auth.sub); + const email = req.auth.sub.email; + const { old_password, new_password } = req.swagger.params.data.value; + loggerUser.debug( + req.uuid, + 'controllers/user/changePassword', + req.swagger.params.data.value + ); + + toolsLib.security.changeUserPassword(email, old_password, new_password) + .then(() => res.json({ message: 'Success' })) + .catch((err) => { + loggerUser.error(req.uuid, 'controllers/user/changePassword', err.message); + return res.status(err.status || 400).json({ message: err.message }); + }); +}; + +const setUsername = (req, res) => { + loggerUser.debug(req.uuid, 'controllers/user/setUsername auth', req.auth.sub); + + const { id } = req.auth.sub; + const { username } = req.swagger.params.data.value; + + toolsLib.user.setUsernameById(id, username) + .then(() => res.json({ message: 'Username successfully changed' })) + .catch((err) => { + loggerUser.error(req.uuid, 'controllers/user/setUsername', err.message); + return res.status(err.status || 400).json({ message: err.message }); + }); +}; + +const getUserLogins = (req, res) => { + loggerUser.debug(req.uuid, 'controllers/user/getUserLogins auth', req.auth.sub); + + const user_id = req.auth.sub.id; + const { limit, page, order_by, order, start_date, end_date, format } = req.swagger.params; + + toolsLib.user.getUserLogins({ + userId: user_id, + limit: limit.value, + page: page.value, + orderBy: order_by.value, + order: order.value, + startDate: start_date.value, + endDate: end_date.value, + format: format.value + }) + .then((data) => { + if (format.value) { + res.setHeader('Content-disposition', `attachment; filename=${toolsLib.getKitConfig().api_name}-logins.csv`); + res.set('Content-Type', 'text/csv'); + return res.status(202).send(data); + } else { + return res.json(data); + } + }) + .catch((err) => { + loggerUser.error(req.uuid, 'controllers/user/getUserLogins', err.message); + return res.status(err.status || 400).json({ message: err.message }); + }); +}; + +const affiliationCount = (req, res) => { + loggerUser.debug(req.uuid, 'controllers/user/affiliationCount auth', req.auth.sub); + + const user_id = req.auth.sub.id; + toolsLib.user.getAffiliationCount(user_id) + .then((num) => { + loggerUser.verbose(req.uuid, 'controllers/user/affiliationCount', num); + return res.json({ count: num }); + }) + .catch((err) => { + loggerUser.error(req.uuid, 'controllers/user/affiliationCount', err.message); + return res.status(err.status || 400).json({ message: err.message }); + }); +}; + +const getUserBalance = (req, res) => { + loggerUser.debug(req.uuid, 'controllers/user/getUserBalance auth', req.auth.sub); + const user_id = req.auth.sub.id; + + toolsLib.wallet.getUserBalanceByKitId(user_id) + .then((balance) => { + return res.json(balance); + }) + .catch((err) => { + loggerUser.error(req.uuid, 'controllers/user/getUserBalance', err.message); + return res.status(err.status || 400).json({ message: err.message }); + }); +}; + +const deactivateUser = (req, res) => { + loggerUser.verbose( + req.uuid, + 'controllers/user/deactivateUser/auth', + req.auth + ); + const { id, email } = req.auth.sub; + + toolsLib.user.freezeUserById(id) + .then(() => { + return res.json({ message: `Account ${email} deactivated` }); + }) + .catch((err) => { + loggerUser.error( + req.uuid, + 'controllers/user/deactivateUser', + err.message + ); + return res.status(err.status || 400).json({ message: err.message }); + }); +}; + +const createCryptoAddress = (req, res) => { + loggerUser.debug( + req.uuid, + 'controllers/user/createCryptoAddress', + req.auth.sub + ); + + const { id } = req.auth.sub; + const crypto = req.swagger.params.crypto.value; + + if (!crypto || !toolsLib.subscribedToCoin(crypto)) { + loggerUser.error( + req.uuid, + 'controllers/user/createCryptoAddress', + `Invalid crypto: "${crypto}"` + ); + return res.status(404).json({ message: `Invalid crypto: "${crypto}"` }); + } + + toolsLib.user.createUserCryptoAddressByKitId(id, crypto) + .then((data) => { + return res.status(201).json(data); + }) + .catch((err) => { + loggerUser.error( + req.uuid, + 'controllers/user/createCryptoAddress', + err.message + ); + return res.status(err.status || 400).json({ message: err.message }); + }); +}; + +const getHmacToken = (req, res) => { + loggerUser.verbose(req.uuid, 'controllers/user/getHmacToken auth', req.auth.sub); + + const { id } = req.auth.sub; + + toolsLib.security.getUserKitHmacTokens(id) + .then((tokens) => { + return res.json(tokens); + }) + .catch((err) => { + loggerUser.error( + req.uuid, + 'controllers/user/getHmacToken err', + err.message + ); + res.status(err.status || 400).json({ message: err.message }); + }); +}; + +const createHmacToken = (req, res) => { + loggerUser.verbose( + req.uuid, + 'controllers/user/createHmacToken auth', + req.auth.sub + ); + + const { id } = req.auth.sub; + const ip = req.headers['x-real-ip']; + const { name, otp_code } = req.swagger.params.data.value; + + toolsLib.security.createUserKitHmacToken(id, otp_code, ip, name) + .then((token) => { + return res.json(token); + }) + .catch((err) => { + loggerUser.error( + req.uuid, + 'controllers/user/createHmacToken', + err.message + ); + return res.status(err.status || 400).json({ message: err.message }); + }); +}; + +const deleteHmacToken = (req, res) => { + loggerUser.verbose( + req.uuid, + 'controllers/user/deleteHmacToken auth', + req.auth.sub + ); + + const { id } = req.auth.sub; + const { token_id, otp_code } = req.swagger.params.data.value; + + toolsLib.security.deleteUserKitHmacToken(id, otp_code, token_id) + .then(() => { + return res.json({ message: TOKEN_REMOVED }); + }) + .catch((err) => { + loggerUser.error( + req.uuid, + 'controllers/user/deleteHmacToken', + err.message + ); + return res.status(err.status || 400).json({ message: err.message }); + }); +}; + +const getUserStats = (req, res) => { + loggerUser.verbose( + req.uuid, + 'controllers/user/getUserStats', + req.auth.sub + ); + const user_id = req.auth.sub.id; + + toolsLib.user.getUserStatsByKitId(user_id) + .then((stats) => { + return res.json(stats); + }) + .catch((err) => { + loggerUser.error('controllers/user/getUserStats', err.message); + return res.status(err.status || 400).json({ message: err.message }); + }); +}; + +module.exports = { + signUpUser, + getVerifyUser, + verifyUser, + loginPost, + verifyToken, + requestResetPassword, + resetPassword, + getUser, + updateSettings, + changePassword, + setUsername, + getUserLogins, + affiliationCount, + getUserBalance, + deactivateUser, + createCryptoAddress, + getHmacToken, + createHmacToken, + deleteHmacToken, + getUserStats +}; diff --git a/server/api/controllers/withdrawal.js b/server/api/controllers/withdrawal.js new file mode 100644 index 0000000000..821fa30490 --- /dev/null +++ b/server/api/controllers/withdrawal.js @@ -0,0 +1,194 @@ +'use strict'; + +const { loggerWithdrawals } = require('../../config/logger'); +const toolsLib = require('hollaex-tools-lib'); +const { all } = require('bluebird'); +const { USER_NOT_FOUND } = require('../../messages'); + +const getWithdrawalFee = (req, res) => { + const currency = req.swagger.params.currency.value; + + if (!toolsLib.subscribedToCoin(currency)) { + loggerWithdrawals.error( + req.uuid, + 'controller/withdrawal/getWithdrawalFee err', + `Invalid currency: "${currency}"` + ); + return res.status(400).json({ message: `Invalid currency: "${currency}"` }); + } + + try { + return res.json({ fee: toolsLib.getKitCoin(currency).withdrawal_fee }); + } catch (err) { + loggerWithdrawals.error( + req.uuid, + 'controller/withdrawal/getWithdrawalFee err', + err.message + ); + return res.status(400).json({ message: err.message }); + } +}; + +const requestWithdrawal = (req, res) => { + loggerWithdrawals.verbose( + req.uuid, + 'controller/withdrawal/requestWithdrawal auth', + req.auth.sub + ); + + const { id } = req.auth.sub; + const { + address, + otp_code, + amount, + currency + } = req.swagger.params.data.value; + const domain = req.headers['x-real-origin']; + const ip = req.headers['x-real-ip']; + + toolsLib.wallet.sendRequestWithdrawalEmail(id, address, amount, currency, otp_code, ip, domain) + .then(() => { + return res.json({ message: 'Success' }); + }) + .catch((err) => { + loggerWithdrawals.error( + req.uuid, + 'controller/withdrawal/requestWithdrawal', + err.message + ); + return res.status(400).json({ message: err.message }); + }); +}; + +const performWithdrawal = (req, res) => { + loggerWithdrawals.verbose( + req.uuid, + 'controller/withdrawal/performWithdraw body', + req.swagger.params.data.value + ); + + const { token } = req.swagger.params.data.value; + + loggerWithdrawals.verbose( + req.uuid, + 'controller/withdrawal/performWithdraw parsed_params', + token + ); + + toolsLib.wallet.validateWithdrawalToken(token) + .then((withdrawal) => { + return all([ withdrawal, toolsLib.user.getUserByKitId(withdrawal.user_id) ]); + }) + .then(([ withdrawal, user ]) => { + if (!user) { + throw new Error(USER_NOT_FOUND); + } + if (user.verification_level < 1) { + throw new Error('User must upgrade verification level to perform a withdrawal'); + } + return all([ toolsLib.wallet.performWithdrawal(withdrawal.user_id, withdrawal.address, withdrawal.currency, withdrawal.amount, withdrawal.fee), withdrawal ]); + }) + .then(([ { transaction_id }, { fee } ]) => { + return res.json({ + message: 'Withdrawal successful', + fee, + transaction_id + }); + }) + .catch((err) => { + loggerWithdrawals.error( + req.uuid, + 'controller/withdrawals/performWithdrawal', + err.message + ); + return res.status(400).json({ message: err.message }); + }); +}; + +const getAdminWithdrawals = (req, res) => { + loggerWithdrawals.verbose( + req.uuid, + 'controllers/withdrawal/getWithdrawals/auth', + req.auth + ); + + const { user_id, currency, limit, page, order_by, order, start_date, end_date, status, dismissed, rejected, processing, waiting, format } = req.swagger.params; + + toolsLib.wallet.getUserWithdrawalsByKitId(user_id.value, currency.value, status.value, dismissed.value, rejected.value, processing.value, waiting.value, limit.value, page.value, order_by.value, order.value, start_date.value, end_date.value, format.value) + .then((data) => { + if (format.value) { + res.setHeader('Content-disposition', `attachment; filename=${toolsLib.getKitConfig().api_name}-users-deposits.csv`); + res.set('Content-Type', 'text/csv'); + return res.status(202).send(data); + } else { + return res.json(data); + } + }) + .catch((err) => { + loggerWithdrawals.error( + req.uuid, + 'controllers/withdrawal/getWithdrawals', + err.message + ); + return res.status(err.status || 400).json({ message: err.message }); + }); +}; + +const getUserWithdrawals = (req, res) => { + loggerWithdrawals.verbose( + req.uuid, + 'controllers/withdrawal/getUserWithdrawals auth', + req.auth.sub + ); + const user_id = req.auth.sub.id; + const currency = req.swagger.params.currency.value || ''; + const { limit, page, order_by, order, start_date, end_date, format } = req.swagger.params; + + toolsLib.wallet.getUserWithdrawalsByKitId(user_id, currency, limit.value, page.value, order_by.value, order.value, start_date.value, end_date.value, format.value) + .then((data) => { + if (format.value) { + res.setHeader('Content-disposition', `attachment; filename=${toolsLib.getKitConfig().api_name}-withdrawals.csv`); + res.set('Content-Type', 'text/csv'); + return res.status(202).send(data); + } else { + return res.json(data); + } + }) + .catch((err) => { + loggerWithdrawals.error('controllers/withdrawal/getUserWithdrawals', err.message); + return res.status(err.status || 400).json({ message: err.message }); + }); +}; + +const cancelWithdrawal = (req, res) => { + loggerWithdrawals.verbose( + req.uuid, + 'controllers/withdrawal/cancelWithdrawal auth', + req.auth + ); + + const userId = req.auth.sub.id; + const id = req.swagger.params.id.value; + + toolsLib.wallet.cancelUserWithdrawalByKitId(userId, id) + .then((withdrawal) => { + return res.json(withdrawal); + }) + .catch((err) => { + loggerWithdrawals.error( + req.uuid, + 'controllers/withdrawal/cancelWithdrawal', + err.message + ); + return res.status(err.status || 400).json({ message: err.message }); + }); +}; + +module.exports = { + requestWithdrawal, + getWithdrawalFee, + performWithdrawal, + getAdminWithdrawals, + getUserWithdrawals, + cancelWithdrawal +}; diff --git a/server/api/swagger/swagger.yaml b/server/api/swagger/swagger.yaml new file mode 100644 index 0000000000..364c740714 --- /dev/null +++ b/server/api/swagger/swagger.yaml @@ -0,0 +1,4244 @@ +swagger: "2.0" +info: + version: "2.0.0" + title: HollaEx Kit +host: api.hollaex.com +basePath: /v2 +schemes: + - http + - https +consumes: + - application/json +produces: + - application/json + - text/csv + +securityDefinitions: + Bearer: + description: JWT authentication + type: apiKey + name: Authorization + in: header + HmacKey: + description: HMAC API key + type: apiKey + name: api-key + in: header + +paths: + /health: + x-swagger-router-controller: public + get: + operationId: getHealth + description: Get health of server + tags: + - Public + responses: + 200: + description: Success + schema: + type: object + default: + description: Error + schema: + $ref: "#/definitions/MessageResponse" + /constants: + x-swagger-router-controller: public + get: + operationId: getConstants + description: Get the system constants such as pairs and currencies + tags: + - Public + responses: + 200: + description: Success + schema: + type: object + default: + description: Error + schema: + $ref: "#/definitions/MessageResponse" + /kit: + x-swagger-router-controller: public + get: + operationId: getKitConfigurations + description: Get kit configurations + tags: + - Public + responses: + 200: + description: Success + schema: + type: object + default: + description: Error + schema: + $ref: "#/definitions/MessageResponse" + /support: + x-swagger-router-controller: public + post: + operationId: sendSupportEmail + description: Send email to support + tags: + - Public + consumes: + - multipart/form-data + parameters: + - name: email + description: user email to contact + in: formData + required: true + type: string + format: email + - name: category + description: Category of the ticket + in: formData + required: true + type: string + maxLength: 64 + - name: subject + description: Ticket issue subject + in: formData + required: true + type: string + maxLength: 256 + - name: description + description: Description on the issue for ticket + in: formData + required: true + type: string + maxLength: 256 + responses: + 200: + description: Success + schema: + $ref: "#/definitions/MessageResponse" + default: + description: Error + schema: + $ref: "#/definitions/MessageResponse" + /signup: + x-swagger-router-controller: user + post: + operationId: signUpUser + description: User sign up + tags: + - Public + parameters: + - name: signup + in: body + required: true + schema: + $ref: "#/definitions/UserAuthentication" + responses: + 201: + description: Created + schema: + $ref: "#/definitions/MessageResponse" + default: + description: Error + schema: + $ref: "#/definitions/MessageResponse" + /verify: + x-swagger-router-controller: user + get: + operationId: getVerifyUser + description: Get information of verification user, must provide email or verification_code. If you want to resend the email, provide email and resend query parameters + tags: + - Public + parameters: + - name: email + in: query + description: User's email + required: false + type: string + - name: resend + in: query + description: Resend email to user + required: false + type: boolean + - name: verification_code + in: query + description: Verification code + required: false + type: string + responses: + 200: + description: Success + schema: + type: object + properties: + verification_code: + type: string + email: + type: string + message: + type: string + default: + description: Error + schema: + $ref: "#/definitions/MessageResponse" + post: + operationId: verifyUser + description: User Verification + tags: + - Public + parameters: + - name: data + in: body + required: true + schema: + type: object + required: + - email + - verification_code + properties: + email: + type: string + verification_code: + type: string + responses: + 200: + description: Success + schema: + $ref: "#/definitions/MessageResponse" + default: + description: Error + schema: + $ref: "#/definitions/MessageResponse" + /login: + x-swagger-router-controller: user + post: + operationId: loginPost + description: Login with a particular role. If OTP is enabled, the user must provide an OTP code + tags: + - Public + parameters: + - name: authentication + in: body + required: true + schema: + $ref: "#/definitions/UserAuthentication" + responses: + 201: + description: Success + schema: + type: object + properties: + token: + type: string + default: + description: Error + schema: + $ref: "#/definitions/MessageResponse" + /verify-token: + x-swagger-router-controller: user + get: + operationId: verifyToken + description: Verify token + tags: + - Public + responses: + 200: + description: Success + schema: + $ref: "#/definitions/MessageResponse" + default: + description: Error + schema: + $ref: "#/definitions/MessageResponse" + security: + - Bearer: [] + x-security-scopes: + - user + /reset-password: + x-swagger-router-controller: user + get: + operationId: requestResetPassword + description: Request a code to reset password of a user + tags: + - Public + parameters: + - name: email + in: query + required: true + type: string + - name: captcha + in: query + required: false + type: string + responses: + 200: + description: Success + schema: + $ref: "#/definitions/MessageResponse" + default: + description: Error + schema: + $ref: "#/definitions/MessageResponse" + post: + operationId: resetPassword + description: Reset password of a user + tags: + - Public + parameters: + - name: data + in: body + required: true + schema: + $ref: "#/definitions/ResetPassword" + responses: + 200: + description: Success + schema: + $ref: "#/definitions/MessageResponse" + default: + description: Error + schema: + $ref: "#/definitions/MessageResponse" + /notification/deposit: + x-swagger-router-controller: notification + post: + operationId: handleCurrencyDeposit + description: Deposit notification + tags: + - Notification + parameters: + - name: currency + description: currency name + in: query + required: true + type: string + - name: data + description: Deposit transaction info + in: body + required: true + schema: + $ref: "#/definitions/ExternalDepositRequest" + responses: + 200: + description: Success + schema: + $ref: "#/definitions/MessageResponse" + default: + description: Error + schema: + $ref: "#/definitions/MessageResponse" + /notification/withdrawal: + x-swagger-router-controller: notification + post: + operationId: handleCurrencyWithdrawal + description: Withdrawal notification + tags: + - Notification + parameters: + - name: currency + description: currency name + in: query + required: true + type: string + - name: data + description: Withdrawal transaction info + in: body + required: true + schema: + $ref: "#/definitions/ExternalWithdrawalRequest" + responses: + 200: + description: Success + schema: + $ref: "#/definitions/MessageResponse" + default: + description: Error + schema: + $ref: "#/definitions/MessageResponse" + /notification/apply: + x-swagger-router-controller: notification + get: + operationId: applyKitChanges + description: Reset kit to apply changes + tags: + - Notification + responses: + 200: + description: Success + schema: + $ref: "#/definitions/MessageResponse" + default: + description: Error + schema: + $ref: "#/definitions/MessageResponse" + /orderbook: + x-swagger-router-controller: public + get: + description: Returns the top orderbooks + operationId: getTopOrderbook + tags: + - Public + parameters: + - name: symbol + in: query + description: Currency symbol + required: false + type: string + responses: + 200: + description: Success + schema: + $ref: "#/definitions/OrderbooksResponse" + default: + description: Error + schema: + $ref: "#/definitions/MessageResponse" + /orderbooks: + x-swagger-router-controller: public + get: + description: Returns the top orderbooks + operationId: getTopOrderbooks + tags: + - Public + responses: + 200: + description: Success + schema: + $ref: "#/definitions/OrderbooksResponse" + default: + description: Error + schema: + $ref: "#/definitions/MessageResponse" + /trades: + x-swagger-router-controller: public + get: + description: Returns the trades + operationId: getTrades + parameters: + - name: symbol + in: query + description: Currency symbol + required: false + type: string + tags: + - Public + responses: + 200: + description: Success + schema: + $ref: "#/definitions/PublicTradesResponse" + default: + description: Error + schema: + $ref: "#/definitions/MessageResponse" + /trades/history: + x-swagger-router-controller: public + get: + description: Returns the trades + operationId: getTradesHistory + tags: + - Public + parameters: + - in: query + name: symbol + description: Symbol pair + required: false + type: string + - in: query + name: side + description: Symbol pair + required: false + type: string + enum: [ 'buy', 'sell' ] + - in: query + name: limit + description: "Number of elements to return. Default: 50. Maximun: 100" + required: false + type: number + format: int32 + default: 50 + - in: query + name: page + description: Page of data to retrieve + required: false + type: number + format: int32 + default: 1 + - in: query + name: order_by + description: Field to order data + required: false + type: string + - in: query + name: order + description: direction to order + required: false + type: string + enum: ['asc', 'desc'] + - in: query + name: start_date + description: Starting date of queried data + required: false + type: string + format: date-time + - in: query + name: end_date + description: Ending date of queried data + required: false + type: string + format: date-time + responses: + 200: + description: Success + schema: + $ref: "#/definitions/PublicTradesResponse" + default: + description: Error + schema: + $ref: "#/definitions/MessageResponse" + /ticker: + x-swagger-router-controller: public + get: + description: Get historic data, time interval is 5 minutes + operationId: getTicker + tags: + - Public + parameters: + - in: query + name: symbol + description: Currency symbol + required: false + type: string + responses: + 200: + description: Success + schema: + type: object + default: + description: Error + schema: + $ref: "#/definitions/MessageResponse" + /ticker/all: + x-swagger-router-controller: public + get: + description: Get historic data, time interval is 5 minutes + operationId: getAllTicker + tags: + - Public + responses: + 200: + description: Success + schema: + type: object + default: + description: Error + schema: + $ref: "#/definitions/MessageResponse" + /tickers: + x-swagger-router-controller: public + get: + description: Get historic data, time interval is 5 minutes + operationId: getAllTicker + tags: + - Public + responses: + 200: + description: Success + schema: + type: object + default: + description: Error + schema: + $ref: "#/definitions/MessageResponse" + /chart: + x-swagger-router-controller: public + get: + description: Get trade history HOLCV + operationId: getChart + tags: + - Public + - Chart + parameters: + - in: query + name: from + description: Start Date + required: true + type: string + - in: query + name: to + description: End data + required: true + type: string + - in: query + name: symbol + description: trading pair symbol + required: true + type: string + - in: query + name: resolution + description: time interval resolution (1d 1W etc) + required: true + type: string + responses: + 200: + description: Success + schema: + $ref: "#/definitions/TradeDataResponse" + default: + description: Error + schema: + $ref: "#/definitions/MessageResponse" + /charts: + x-swagger-router-controller: public + get: + description: Get trade history HOLCV for all pairs + operationId: getCharts + tags: + - Public + - Chart + parameters: + - in: query + name: from + description: Start Date + required: true + type: string + - in: query + name: to + description: End data + required: true + type: string + - in: query + name: resolution + description: time interval resolution (1d 1W etc) + required: true + type: string + responses: + 200: + description: Success + schema: + $ref: "#/definitions/ObjectResponse" + default: + description: Error + schema: + $ref: "#/definitions/MessageResponse" + /udf/config: + x-swagger-router-controller: public + get: + description: Get tradingview udf config + operationId: getConfig + tags: + - Public + - Chart + responses: + 200: + description: Success + schema: + type: object + default: + description: Error + schema: + $ref: "#/definitions/MessageResponse" + /udf/history: + x-swagger-router-controller: public + get: + description: Get tradingview udf history HOLCV + operationId: getHistory + tags: + - Public + - Chart + parameters: + - in: query + name: from + description: Start Date + required: true + type: string + - in: query + name: to + description: End data + required: true + type: string + - in: query + name: symbol + description: trading pair symbol + required: true + type: string + - in: query + name: resolution + description: time interval resolution (1d 1W etc) + required: true + type: string + responses: + 200: + description: Success + schema: + type: object + default: + description: Error + schema: + $ref: "#/definitions/MessageResponse" + /udf/symbols: + x-swagger-router-controller: public + get: + description: Get tradingview udf symbols + operationId: getSymbols + tags: + - Public + - Chart + parameters: + - in: query + name: symbol + description: Trading pair symbol e.g. btc-eur + required: true + type: string + responses: + 200: + description: Success + schema: + type: object + default: + description: Error + schema: + $ref: "#/definitions/MessageResponse" + /oracle/prices: + x-swagger-router-controller: public + get: + operationId: getAssetsPrices + description: Convert assets prices + tags: + - Public + - Oracle + parameters: + - name: assets + in: query + required: true + description: Assets to convert + type: array + items: + type: string + minItems: 1 + - name: quote + in: query + required: false + description: Quote coin to convert to + type: string + - name: amount + in: query + required: false + description: Amount to convert + type: number + format: double + minimum: 0 + exclusiveMinimum: true + responses: + 200: + description: Success + schema: + $ref: "#/definitions/OraclePriceResponse" + default: + description: Error + schema: + $ref: "#/definitions/MessageResponse" + /user: + x-swagger-router-controller: user + get: + operationId: getUser + description: List information of authenticated user + tags: + - User + responses: + 200: + description: Success + schema: + $ref: "#/definitions/UserResponse" + default: + description: Error + schema: + $ref: "#/definitions/MessageResponse" + security: + - Bearer: [] + - HmacKey: [] + x-security-scopes: + - user + - hmac + /user/stats: + x-swagger-router-controller: user + get: + operationId: getUserStats + description: Sum of user trades and its stats + tags: + - User + responses: + 200: + description: Success + schema: + $ref: "#/definitions/StatsResponse" + default: + description: Error + schema: + $ref: "#/definitions/MessageResponse" + security: + - Bearer: [] + x-security-scopes: + - user + /user/settings: + x-swagger-router-controller: user + put: + operationId: updateSettings + description: Edit settings of authenticated user + tags: + - User + parameters: + - name: data + in: body + required: true + schema: + $ref: "#/definitions/SettingsPut" + responses: + 200: + description: Success + schema: + $ref: "#/definitions/UserResponse" + default: + description: Error + schema: + $ref: "#/definitions/MessageResponse" + security: + - Bearer: [] + x-security-scopes: + - user + /user/change-password: + x-swagger-router-controller: user + post: + operationId: changePassword + description: Change password of authenticated user + tags: + - User + parameters: + - name: data + in: body + required: true + schema: + $ref: "#/definitions/ChangePassword" + responses: + 200: + description: Success + schema: + $ref: "#/definitions/MessageResponse" + default: + description: Error + schema: + $ref: "#/definitions/MessageResponse" + security: + - Bearer: [] + x-security-scopes: + - user + /user/username: + x-swagger-router-controller: user + post: + operationId: setUsername + description: Change user's username + tags: + - User + parameters: + - name: data + in: body + required: true + schema: + type: object + required: + - username + properties: + username: + type: string + minLength: 3 + maxLength: 15 + responses: + 200: + description: Success + schema: + $ref: "#/definitions/MessageResponse" + default: + description: Error + schema: + $ref: "#/definitions/MessageResponse" + security: + - Bearer: [] + x-security-scopes: + - user + /user/logins: + x-swagger-router-controller: user + get: + operationId: getUserLogins + description: List logins of authenticated user + tags: + - User + parameters: + - in: query + name: limit + description: "Number of elements to return. Default: 50. Maximun: 100" + required: false + type: number + format: int32 + - in: query + name: page + description: Page of data to retrieve + required: false + type: number + format: int32 + - in: query + name: order_by + description: Field to order data + required: false + type: string + - in: query + name: order + description: direction to order + required: false + type: string + enum: ['asc', 'desc'] + - in: query + name: start_date + description: Starting date of queried data + required: false + type: string + format: date-time + - in: query + name: end_date + description: Ending date of queried data + required: false + type: string + format: date-time + - in: query + name: format + description: Specify data format + required: false + enum: ['csv'] + type: string + responses: + 200: + description: Success + schema: + $ref: "#/definitions/LoginsResponse" + 202: + description: CSV + schema: + type: string + default: + description: Error + schema: + $ref: "#/definitions/MessageResponse" + security: + - Bearer: [] + x-security-scopes: + - user + /user/affiliation: + x-swagger-router-controller: user + get: + operationId: affiliationCount + description: Get the number of affiliated account a user has made + tags: + - User + responses: + 200: + description: Success + schema: + $ref: "#/definitions/CountResponse" + default: + description: Error + schema: + $ref: "#/definitions/MessageResponse" + security: + - Bearer: [] + x-security-scopes: + - user + /user/request-withdrawal: + x-swagger-router-controller: withdrawal + post: + operationId: requestWithdrawal + description: This will send a confirmation email to the email address on record, if activate OTP, it will require OTP as well. + tags: + - User + - Withdraw + parameters: + - name: data + description: withdrawal information + in: body + required: true + schema: + $ref: "#/definitions/WithdrawalRequest" + responses: + 200: + description: Success + schema: + $ref: "#/definitions/MessageResponse" + default: + description: Error + schema: + $ref: "#/definitions/MessageResponse" + security: + - Bearer: [] + - HmacKey: [] + x-security-scopes: + - user + - hmac + /user/confirm-withdrawal: + x-swagger-router-controller: withdrawal + post: + operationId: performWithdrawal + description: confirm a withdrawal request + tags: + - User + - Withdraw + parameters: + - name: data + description: Tansfer information + in: body + required: true + schema: + $ref: "#/definitions/WithdrawalConfirmation" + responses: + 200: + description: Success + schema: + type: object + properties: + message: + type: string + transaction_id: + type: string + fee: + type: number + default: + description: Error + schema: + $ref: "#/definitions/MessageResponse" + /user/withdrawal/fee: + x-swagger-router-controller: withdrawal + get: + description: Returns the withdrawal fees for a specific coin + operationId: getWithdrawalFee + tags: + - User + - Withdrawal + parameters: + - name: currency + description: currency to perform the withdrawal + in: query + required: true + type: string + responses: + 200: + description: Success + schema: + type: object + properties: + fee: + type: number + default: + description: Error + schema: + $ref: "#/definitions/MessageResponse" + /user/request-otp: + x-swagger-router-controller: otp + get: + operationId: requestOtp + description: Generate OTP code for OTP verification + tags: + - User + - OTP + responses: + 200: + description: Created + schema: + type: object + required: + - secret + properties: + secret: + type: string + 403: + description: Access Denied + schema: + $ref: "#/definitions/MessageResponse" + default: + description: Error + schema: + $ref: "#/definitions/MessageResponse" + security: + - Bearer: [] + x-security-scopes: + - user + /user/activate-otp: + x-swagger-router-controller: otp + post: + operationId: activateOtp + description: Enable OTP + parameters: + - name: data + description: Activation code + in: body + required: true + schema: + $ref: "#/definitions/OtpRequest" + tags: + - User + - OTP + responses: + 200: + description: Success + schema: + $ref: "#/definitions/MessageResponse" + 403: + description: Access Denied + schema: + $ref: "#/definitions/MessageResponse" + default: + description: Error + schema: + $ref: "#/definitions/MessageResponse" + security: + - Bearer: [] + x-security-scopes: + - user + /user/deactivate-otp: + x-swagger-router-controller: otp + post: + operationId: deactivateOtp + description: Disable OTP + tags: + - User + - OTP + parameters: + - name: data + description: Activation code + in: body + required: true + schema: + $ref: "#/definitions/OtpRequest" + responses: + 200: + description: Success + schema: + $ref: "#/definitions/MessageResponse" + 403: + description: Access Denied + schema: + $ref: "#/definitions/MessageResponse" + default: + description: Error + schema: + $ref: "#/definitions/MessageResponse" + security: + - Bearer: [] + x-security-scopes: + - user + /user/deactivate: + x-swagger-router-controller: user + get: + operationId: deactivateUser + description: Deactivate the user account + tags: + - User + responses: + 200: + description: Success + schema: + $ref: "#/definitions/MessageResponse" + default: + description: Error + schema: + $ref: "#/definitions/MessageResponse" + security: + - Bearer: [] + x-security-scopes: + - user + /order: + x-swagger-router-controller: order + get: + operationId: getUserOrder + description: Get order of authenticated user + tags: + - User + parameters: + - name: order_id + in: query + required: true + type: string + responses: + 200: + description: Success + schema: + $ref: "#/definitions/OrderResponse" + default: + description: Error + schema: + $ref: "#/definitions/MessageResponse" + security: + - Bearer: [] + - HmacKey: [] + x-security-scopes: + - user + - hmac + delete: + operationId: cancelUserOrder + description: Cancel order of authenticated user + tags: + - User + parameters: + - name: order_id + in: query + required: true + type: string + responses: + 200: + description: Success + schema: + $ref: "#/definitions/OrderResponse" + default: + description: Error + schema: + $ref: "#/definitions/MessageResponse" + security: + - Bearer: [] + - HmacKey: [] + x-security-scopes: + - user + - hmac + post: + description: Create a new order + operationId: createOrder + tags: + - User + - Order + parameters: + - in: body + name: order + required: true + description: order data + schema: + $ref: "#/definitions/OrderRequest" + responses: + 200: + description: Success + schema: + $ref: "#/definitions/OrderResponse" + default: + description: Error + schema: + $ref: "#/definitions/MessageResponse" + security: + - Bearer: [] + - HmacKey: [] + x-security-scopes: + - user + - hmac + /tiers: + x-swagger-router-controller: tier + get: + description: Get user tiers + operationId: getTiers + tags: + - Public + responses: + 200: + description: Success + schema: + type: object + default: + description: Error + schema: + $ref: "#/definitions/MessageResponse" + /admin/tier: + x-swagger-router-controller: tier + post: + description: Make a new Tier + operationId: postTier + tags: + - Admin + parameters: + - name: data + in: body + required: true + description: Tier object + schema: + $ref: "#/definitions/PostTierBody" + responses: + 200: + description: Success + schema: + $ref: "#/definitions/TierObject" + default: + description: Error + schema: + $ref: "#/definitions/MessageResponse" + security: + - Bearer: [] + x-security-scopes: + - admin + put: + description: Update tier + operationId: putTier + tags: + - Admin + parameters: + - name: data + in: body + required: true + description: Tier object + schema: + $ref: "#/definitions/PutTierBody" + responses: + 200: + description: Success + schema: + $ref: "#/definitions/TierObject" + default: + description: Error + schema: + $ref: "#/definitions/MessageResponse" + security: + - Bearer: [] + x-security-scopes: + - admin + /orders: + x-swagger-router-controller: order + get: + operationId: getAllUserOrders + description: List orders of authenticated user + tags: + - User + parameters: + - name: symbol + in: query + description: Currency symbol + required: false + type: string + - in: query + name: side + description: buy or sell + required: false + enum: ['buy', 'sell'] + type: string + - in: query + name: status + description: Order status e.g. pfilled, filled + required: false + type: string + - in: query + name: open + description: Open status of order + required: false + type: boolean + - in: query + name: limit + description: "Number of elements to return. Default: 50. Maximun: 100" + required: false + type: number + format: int32 + - in: query + name: page + description: Page of data to retrieve + required: false + type: number + format: int32 + - in: query + name: order_by + description: Field to order data + required: false + type: string + - in: query + name: order + description: direction to order + required: false + type: string + enum: ['asc', 'desc'] + - in: query + name: start_date + description: Starting date of queried data + required: false + type: string + format: date-time + - in: query + name: end_date + description: Ending date of queried data + required: false + type: string + format: date-time + responses: + 200: + description: Success + schema: + $ref: "#/definitions/OrdersResponse" + default: + description: Error + schema: + $ref: "#/definitions/MessageResponse" + security: + - Bearer: [] + - HmacKey: [] + x-security-scopes: + - user + - hmac + /order/all: + x-swagger-router-controller: order + delete: + operationId: cancelAllUserOrders + description: Cancel all orders of authenticated user + tags: + - User + parameters: + - name: symbol + in: query + description: Currency symbol + required: false + type: string + responses: + 200: + description: Success + schema: + type: array + items: + $ref: "#/definitions/OrdersResponse" + default: + description: Error + schema: + $ref: "#/definitions/MessageResponse" + security: + - Bearer: [] + - HmacKey: [] + x-security-scopes: + - user + - hmac + /user/balance: + x-swagger-router-controller: user + get: + operationId: getUserBalance + description: Balance of authenticated user + tags: + - User + responses: + 200: + description: Success + schema: + $ref: "#/definitions/BalanceResponse" + 403: + description: Access Denied + schema: + $ref: "#/definitions/MessageResponse" + security: + - Bearer: [] + - HmacKey: [] + x-security-scopes: + - user + - hmac + /user/create-address: + x-swagger-router-controller: user + get: + operationId: createCryptoAddress + description: Create a crypto address for the user + tags: + - User + - Wallet + parameters: + - name: crypto + in: query + required: true + type: string + minLength: 3 + maxLength: 15 + responses: + 201: + description: Success + schema: + $ref: "#/definitions/UsersAddressResponse" + default: + description: "Error" + schema: + $ref: "#/definitions/MessageResponse" + security: + - Bearer: [] + x-security-scopes: + - user + /user/token: + x-swagger-router-controller: user + post: + operationId: createHmacToken + description: Create an HMAC token. It requires OTP to create a token + tags: + - User + - Token + parameters: + - name: data + in: body + required: true + schema: + type: object + required: + - name + - otp_code + properties: + name: + type: string + otp_code: + type: string + responses: + 200: + description: Success + schema: + $ref: "#/definitions/ObjectResponse" + default: + description: Error + schema: + $ref: "#/definitions/MessageResponse" + security: + - Bearer: [] + x-security-scopes: + - user + delete: + operationId: deleteHmacToken + description: Revoke an issued token. It requires otp. + tags: + - User + - Token + parameters: + - name: data + in: body + required: true + schema: + type: object + required: + - token_id + - otp_code + properties: + token_id: + type: number + format: int32 + otp_code: + type: string + responses: + 200: + description: Success + schema: + $ref: "#/definitions/ObjectResponse" + default: + description: Error + schema: + $ref: "#/definitions/MessageResponse" + security: + - Bearer: [] + x-security-scopes: + - user + /user/tokens: + x-swagger-router-controller: user + get: + operationId: getHmacToken + description: Get user active HMAC tokens + tags: + - User + - Token + responses: + 200: + description: Success + schema: + $ref: "#/definitions/TokensResponse" + default: + description: Error + schema: + $ref: "#/definitions/MessageResponse" + security: + - Bearer: [] + x-security-scopes: + - user + /user/trades: + x-swagger-router-controller: trade + get: + operationId: getUserTrades + description: List trades of authenticated user + tags: + - User + parameters: + - in: query + name: symbol + description: Currency symbol + required: false + type: string + - in: query + name: limit + description: "Number of elements to return. Default: 50. Maximun: 100" + required: false + type: number + format: int32 + default: 50 + - in: query + name: page + description: Page of data to retrieve + required: false + type: number + format: int32 + default: 1 + - in: query + name: order_by + description: Field to order data + required: false + type: string + - in: query + name: order + description: direction to order + required: false + type: string + enum: ['asc', 'desc'] + - in: query + name: start_date + description: Starting date of queried data + required: false + type: string + format: date-time + - in: query + name: end_date + description: Ending date of queried data + required: false + type: string + format: date-time + - in: query + name: format + description: Specify data format + required: false + enum: ['csv'] + type: string + responses: + 200: + description: Success + schema: + $ref: "#/definitions/TradesResponse" + 202: + description: CSV + schema: + type: string + default: + description: Error + schema: + $ref: "#/definitions/MessageResponse" + security: + - Bearer: [] + - HmacKey: [] + x-security-scopes: + - user + - hmac + /user/deposits: + x-swagger-router-controller: deposit + get: + operationId: getUserDeposits + description: List deposit of authenticated user + tags: + - User + parameters: + - name: currency + in: query + description: Type of currency of deposits to filter + required: false + type: string + - in: query + name: limit + description: "Number of elements to return. Default: 50. Maximun: 100" + required: false + type: number + format: int32 + - in: query + name: page + description: Page of data to retrieve + required: false + type: number + format: int32 + - in: query + name: order_by + description: Field to order data + required: false + type: string + - in: query + name: order + description: direction to order + required: false + type: string + enum: ['asc', 'desc'] + - in: query + name: start_date + description: Starting date of queried data + required: false + type: string + format: date-time + - in: query + name: end_date + description: Ending date of queried data + required: false + type: string + format: date-time + - in: query + name: format + description: Specify data format + required: false + enum: ['csv'] + type: string + responses: + 200: + description: Success + schema: + $ref: "#/definitions/TransactionsResponse" + 202: + description: CSV + schema: + type: string + default: + description: Error + schema: + $ref: "#/definitions/MessageResponse" + security: + - Bearer: [] + - HmacKey: [] + x-security-scopes: + - user + - hmac + /user/withdrawals: + x-swagger-router-controller: withdrawal + get: + operationId: getUserWithdrawals + description: List withdrawals of authenticated user + tags: + - User + parameters: + - name: currency + in: query + description: Type of currency of withdrawals to filter + required: false + type: string + - in: query + name: limit + description: "Number of elements to return. Default: 50. Maximun: 100" + required: false + type: number + format: int32 + - in: query + name: page + description: Page of data to retrieve. + required: false + type: number + format: int32 + - in: query + name: order_by + description: Field to order data + required: false + type: string + - in: query + name: order + description: direction to order + required: false + type: string + enum: ['asc', 'desc'] + - in: query + name: start_date + description: Starting date of queried data + required: false + type: string + format: date-time + - in: query + name: end_date + description: Ending date of queried data + required: false + type: string + format: date-time + - in: query + name: format + description: Specify data format + required: false + enum: ['csv'] + type: string + responses: + 200: + description: Success + schema: + $ref: "#/definitions/TransactionsResponse" + 202: + description: CSV + schema: + type: string + default: + description: Error + schema: + $ref: "#/definitions/MessageResponse" + security: + - Bearer: [] + - HmacKey: [] + x-security-scopes: + - user + - hmac + /user/withdrawal: + x-swagger-router-controller: withdrawal + delete: + operationId: cancelWithdrawal + description: Cancel a user's withdrawal which is pending + tags: + - User + parameters: + - name: id + in: query + required: true + type: number + format: int32 + responses: + 200: + description: Success + schema: + $ref: "#/definitions/TransactionsResponse" + default: + description: Error + schema: + $ref: "#/definitions/MessageResponse" + security: + - Bearer: [] + x-security-scopes: + - user + +# ADMIN ENDPOINTS + /admin/fees: + x-swagger-router-controller: admin + get: + operationId: getExchangeGeneratedFees + description: Get exchange generated fees + tags: + - Admin + parameters: + - in: query + name: limit + description: "Number of elements to return. Default: 50. Maximun: 100" + required: false + type: number + format: int32 + - in: query + name: page + description: Page of data to retrieve. + required: false + type: number + format: int32 + - in: query + name: start_date + description: Starting date of queried data + required: false + type: string + format: date-time + - in: query + name: end_date + description: Ending date of queried data + required: false + type: string + format: date-time + responses: + 200: + description: Success + schema: + $ref: "#/definitions/FeesResponse" + default: + description: Error + schema: + $ref: "#/definitions/MessageResponse" + security: + - Bearer: [] + x-security-scopes: + - admin + /admin/signup: + x-swagger-router-controller: admin + post: + operationId: createInitialAdmin + description: Create initial admin account for exchange + tags: + - Admin + parameters: + - name: data + in: body + required: true + schema: + type: object + required: + - email + - password + properties: + email: + type: string + password: + type: string + format: password + responses: + 201: + description: Created + schema: + $ref: "#/definitions/MessageResponse" + default: + description: Error + schema: + $ref: "#/definitions/MessageResponse" + /admin/complete-setup: + x-swagger-router-controller: admin + get: + operationId: completeExchangeSetup + description: Flag exchange setup as complete + tags: + - Admin + responses: + 200: + description: Success + schema: + $ref: "#/definitions/MessageResponse" + default: + description: Error + schema: + $ref: "#/definitions/MessageResponse" + security: + - Bearer: [] + x-security-scopes: + - admin + /admin/network-credentials: + x-swagger-router-controller: admin + put: + operationId: putNetworkCredentials + description: Update exchange network credentials + tags: + - Admin + parameters: + - name: data + in: body + required: true + description: New network key and secret + schema: + type: object + required: + - api_key + - api_secret + properties: + api_key: + type: string + api_secret: + type: string + responses: + 200: + description: Success + schema: + $ref: "#/definitions/MessageResponse" + default: + description: Error + schema: + $ref: "#/definitions/MessageResponse" + security: + - Bearer: [] + x-security-scopes: + - admin + /admin/kit: + x-swagger-router-controller: admin + get: + operationId: getAdminKit + description: Get exchange kit configurations and secrets for admin + tags: + - Admin + responses: + 200: + description: Success + schema: + type: object + default: + description: Error + schema: + $ref: "#/definitions/MessageResponse" + security: + - Bearer: [] + x-security-scopes: + - admin + - supervisor + - support + - kyc + - communicator + put: + operationId: putAdminKit + description: Update exchange constants and secrets + tags: + - Admin + parameters: + - name: data + in: body + required: true + schema: + $ref: "#/definitions/KitPut" + responses: + 200: + description: Success + schema: + type: object + default: + description: Error + schema: + $ref: "#/definitions/MessageResponse" + security: + - Bearer: [] + x-security-scopes: + - admin + - communicator + /admin/operators: + x-swagger-router-controller: admin + get: + operationId: getOperators + description: Get exchange operators + tags: + - Admin + parameters: + - in: query + name: limit + description: "Number of elements to return. Default: 50. Maximun: 100" + required: false + type: number + format: int32 + - in: query + name: page + description: Page of data to retrieve + required: false + type: number + format: int32 + - in: query + name: order_by + description: Field to order data + required: false + type: string + - in: query + name: order + description: Direction to order + required: false + type: string + enum: ['asc', 'desc'] + responses: + 200: + description: Success + schema: + $ref: "#/definitions/OperatorsResponse" + default: + description: Error + schema: + $ref: "#/definitions/MessageResponse" + security: + - Bearer: [] + x-security-scopes: + - admin + /admin/operator/invite: + x-swagger-router-controller: admin + get: + operationId: inviteNewOperator + description: Invite a new operator + tags: + - Admin + parameters: + - name: email + in: query + required: true + type: string + description: Email of user to invite + - name: role + in: query + required: true + type: string + description: Role of user + responses: + 200: + description: Success + schema: + $ref: "#/definitions/MessageResponse" + default: + description: Error + schema: + $ref: "#/definitions/MessageResponse" + security: + - Bearer: [] + x-security-scopes: + - admin + /admin/upload: + x-swagger-router-controller: admin + post: + operationId: uploadImage + description: Upload an image + tags: + - Admin + consumes: + - multipart/form-data + parameters: + - name: file + description: file of image + in: formData + required: true + type: file + - name: name + description: name of image + in: formData + required: true + type: string + responses: + 200: + description: Success + schema: + type: object + properties: + path: + type: string + default: + description: Error + schema: + $ref: "#/definitions/MessageResponse" + security: + - Bearer: [] + x-security-scopes: + - admin + /admin/pairs: + x-swagger-router-controller: admin + get: + description: Get pairs + operationId: getPairs + parameters: + - name: pair + in: query + required: false + type: string + tags: + - Admin + responses: + 200: + description: Success + schema: + type: object + default: + description: Error + schema: + $ref: "#/definitions/MessageResponse" + security: + - Bearer: [] + x-security-scopes: + - admin + /admin/pair/fees: + x-swagger-router-controller: tier + put: + operationId: updatePairFees + description: Update trading pair fees + tags: + - Admin + parameters: + - name: data + in: body + required: true + schema: + $ref: "#/definitions/PairFeesPut" + responses: + 200: + description: Success + schema: + $ref: "#/definitions/MessageResponse" + default: + description: Error + schema: + $ref: "#/definitions/MessageResponse" + security: + - Bearer: [] + x-security-scopes: + - admin + /admin/tiers/limits: + x-swagger-router-controller: tier + put: + operationId: updateTiersLimits + description: Update tier limits + tags: + - Admin + parameters: + - name: data + in: body + required: true + schema: + $ref: "#/definitions/TiersLimitsPut" + responses: + 200: + description: Success + schema: + $ref: "#/definitions/MessageResponse" + default: + description: Error + schema: + $ref: "#/definitions/MessageResponse" + security: + - Bearer: [] + x-security-scopes: + - admin + /admin/coins: + x-swagger-router-controller: admin + get: + description: View coins + operationId: getCoins + tags: + - Admin + parameters: + - name: currency + in: query + required: false + type: string + description: Leave blank to get all coins + responses: + 200: + description: Success + schema: + type: object + default: + description: Error + schema: + $ref: "#/definitions/MessageResponse" + security: + - Bearer: [] + x-security-scopes: + - admin + /admin/check-transaction: + x-swagger-router-controller: admin + get: + operationId: adminCheckTransaction + description: Check a blockchain transaction to add create/update deposit + tags: + - Admin + parameters: + - in: query + name: currency + description: Currency of the transaction + required: true + type: string + - in: query + name: transaction_id + description: Blockchain transaction id + required: true + type: string + - in: query + name: address + description: crypto address receiving the deposit + required: true + type: string + - in: query + name: is_testnet + description: specify whether or not transaction was on tesntet + required: false + type: boolean + default: false + responses: + 200: + description: Success + schema: + $ref: "#/definitions/MessageResponse" + default: + description: Error + schema: + $ref: "#/definitions/MessageResponse" + security: + - Bearer: [] + x-security-scopes: + - admin + - supervisor + - support + - kyc + /admin/users: + x-swagger-router-controller: admin + get: + description: Get exchange users for admin + operationId: getUsersAdmin + tags: + - Admin + parameters: + - name: id + in: query + required: false + type: number + - name: search + in: query + required: false + type: string + - name: pending + in: query + required: false + type: boolean + - in: query + name: limit + description: "Number of elements to return. Default: 50. Maximun: 100" + required: false + type: number + format: int32 + - in: query + name: page + description: Page of data to retrieve + required: false + type: number + format: int32 + - in: query + name: order_by + description: Field to order data + required: false + type: string + - in: query + name: order + description: Direction to order + required: false + type: string + enum: ['asc', 'desc'] + - in: query + name: start_date + description: Starting date of queried data + required: false + type: string + format: date-time + - in: query + name: end_date + description: Ending date of queried data + required: false + type: string + format: date-time + - in: query + name: format + description: Specify data format + required: false + enum: ['csv'] + type: string + responses: + 200: + description: Success + schema: + $ref: "#/definitions/AdminUsersResponse" + 202: + description: CSV + schema: + type: string + default: + description: Error + schema: + $ref: "#/definitions/MessageResponse" + security: + - Bearer: [] + x-security-scopes: + - admin + - supervisor + - support + - kyc + /admin/user/role: + x-swagger-router-controller: admin + put: + operationId: putUserRole + description: "Update a user's role" + tags: + - Admin + parameters: + - name: user_id + in: query + required: true + type: number + - name: data + in: body + required: true + schema: + $ref: "#/definitions/UserRolePut" + responses: + 200: + description: Success + schema: + $ref: "#/definitions/UserRolePutResponse" + default: + description: Error + schema: + $ref: "#/definitions/MessageResponse" + security: + - Bearer: [] + x-security-scopes: + - admin + /admin/user/note: + x-swagger-router-controller: admin + put: + operationId: putUserNote + description: Update a user note + tags: + - Admin + parameters: + - name: user_id + in: query + required: true + type: number + - name: data + in: body + required: true + schema: + $ref: "#/definitions/UserNotePut" + responses: + 200: + description: Success + schema: + $ref: "#/definitions/MessageResponse" + default: + description: Error + schema: + $ref: "#/definitions/MessageResponse" + security: + - Bearer: [] + x-security-scopes: + - admin + - supervisor + - kyc + - support + /admin/user/balance: + x-swagger-router-controller: admin + get: + operationId: getAdminUserBalance + description: Get balance of given user + tags: + - Admin + parameters: + - name: user_id + in: query + required: true + type: number + format: int32 + responses: + 200: + description: Success + schema: + $ref: "#/definitions/BalanceResponse" + default: + description: Error + schema: + $ref: "#/definitions/MessageResponse" + security: + - Bearer: [] + x-security-scopes: + - admin + - supervisor + /admin/logins: + x-swagger-router-controller: admin + get: + description: Get the user logins for admin + operationId: getAdminUserLogins + parameters: + - in: query + name: user_id + description: User id + required: false + type: number + format: int32 + - in: query + name: limit + description: "Number of elements to return. Default: 50. Maximun: 100" + required: false + type: number + format: int32 + - in: query + name: page + description: Page of data to retrieve + required: false + type: number + format: int32 + - in: query + name: order_by + description: Field to order data + required: false + type: string + - in: query + name: order + description: direction to order + required: false + type: string + enum: ['asc', 'desc'] + - in: query + name: start_date + description: Starting date of queried data + required: false + type: string + format: date-time + - in: query + name: end_date + description: Ending date of queried data + required: false + type: string + format: date-time + - in: query + name: format + description: Specify data format + required: false + enum: ['csv'] + type: string + tags: + - Admin + responses: + 200: + description: Success + schema: + $ref: "#/definitions/LoginsResponse" + 202: + description: CSV + schema: + type: string + default: + description: Error + schema: + $ref: "#/definitions/MessageResponse" + security: + - Bearer: [] + x-security-scopes: + - admin + - supervisor + - support + - kyc + /admin/audits: + x-swagger-router-controller: admin + get: + description: Get the user audits for admin + operationId: getUserAudits + parameters: + - in: query + name: user_id + description: User id + required: false + type: number + format: int32 + - in: query + name: limit + description: "Number of elements to return. Default: 50. Maximun: 100" + required: false + type: number + format: int32 + - in: query + name: page + description: Page of data to retrieve + required: false + type: number + format: int32 + - in: query + name: order_by + description: Field to order data + required: false + type: string + - in: query + name: order + description: direction to order + required: false + type: string + enum: ['asc', 'desc'] + - in: query + name: start_date + description: Starting date of queried data + required: false + type: string + format: date-time + - in: query + name: end_date + description: Ending date of queried data + required: false + type: string + format: date-time + - in: query + name: format + description: Specify data format + required: false + enum: ['csv'] + type: string + tags: + - Admin + responses: + 200: + description: Success + schema: + $ref: "#/definitions/AuditsResponse" + 202: + description: CSV + schema: + type: string + default: + description: Error + schema: + $ref: "#/definitions/MessageResponse" + security: + - Bearer: [] + x-security-scopes: + - admin + /admin/orders: + x-swagger-router-controller: order + get: + description: Get user orders for admin + operationId: getAdminOrders + parameters: + - in: query + name: user_id + description: User id + required: false + type: number + format: int32 + - in: query + name: side + description: buy or sell + required: false + enum: ['buy', 'sell'] + type: string + - in: query + name: status + description: Order status e.g. pfilled, filled + required: false + type: string + - in: query + name: open + description: Open status of order + required: false + type: boolean + - in: query + name: limit + description: "Number of elements to return. Default: 50. Maximun: 100" + required: false + type: number + format: int32 + - in: query + name: page + description: Page of data to retrieve + required: false + type: number + format: int32 + - in: query + name: symbol + description: Currency symbol + required: false + type: string + - in: query + name: order_by + description: Field to order data + required: false + type: string + - in: query + name: order + description: direction to order + required: false + type: string + enum: ['asc', 'desc'] + - in: query + name: start_date + description: Starting date of queried data + required: false + type: string + format: date-time + - in: query + name: end_date + description: Ending date of queried data + required: false + type: string + format: date-time + tags: + - Admin + responses: + 200: + description: Success + schema: + $ref: "#/definitions/OrdersResponse" + default: + description: Error + schema: + $ref: "#/definitions/MessageResponse" + security: + - Bearer: [] + x-security-scopes: + - admin + - supervisor + - support + /admin/order: + x-swagger-router-controller: order + delete: + operationId: adminCancelOrder + description: Admin Cancel order + tags: + - Admin + parameters: + - name: order_id + in: query + required: true + type: string + - name: user_id + in: query + required: true + type: number + format: int32 + responses: + 200: + description: Success + schema: + $ref: "#/definitions/OrderResponse" + default: + description: Error + schema: + $ref: "#/definitions/MessageResponse" + security: + - Bearer: [] + x-security-scopes: + - admin + - supervisor + /admin/trades: + x-swagger-router-controller: trade + get: + description: Get user trades for admin + operationId: getAdminTrades + parameters: + - in: query + name: user_id + description: User id + required: false + type: number + format: int32 + - in: query + name: limit + description: "Number of elements to return. Default: 50. Maximun: 100" + required: false + type: number + format: int32 + - in: query + name: page + description: Page of data to retrieve + required: false + type: number + format: int32 + - in: query + name: symbol + description: Currency symbol + required: false + type: string + - in: query + name: order_by + description: Field to order data + required: false + type: string + - in: query + name: order + description: direction to order + required: false + type: string + enum: ['asc', 'desc'] + - in: query + name: start_date + description: Starting date of queried data + required: false + type: string + format: date-time + - in: query + name: end_date + description: Ending date of queried data + required: false + type: string + format: date-time + - in: query + name: format + description: Specify data format + required: false + enum: ['csv'] + type: string + tags: + - Admin + responses: + 200: + description: Success + schema: + $ref: "#/definitions/TradesResponse" + 202: + description: CSV + schema: + type: string + default: + description: Error + schema: + $ref: "#/definitions/MessageResponse" + security: + - Bearer: [] + x-security-scopes: + - admin + - supervisor + - support + /admin/user/activate: + x-swagger-router-controller: admin + post: + operationId: activateUser + description: Activate or deactivate a user account + tags: + - Admin + parameters: + - name: data + in: body + required: true + schema: + type: object + required: + - user_id + - activated + properties: + user_id: + type: number + format: int32 + activated: + type: boolean + responses: + 200: + description: Success + schema: + $ref: "#/definitions/MessageResponse" + default: + description: Error + schema: + $ref: "#/definitions/MessageResponse" + security: + - Bearer: [] + x-security-scopes: + - admin + - supervisor + - support + - kyc + /admin/balance: + x-swagger-router-controller: admin + get: + description: Get Admin bank balance + operationId: getAdminBalance + tags: + - Admin + responses: + 200: + description: Success + schema: + type: object + default: + description: Error + schema: + $ref: "#/definitions/MessageResponse" + security: + - Bearer: [] + x-security-scopes: + - admin + /admin/upgrade-user: + x-swagger-router-controller: admin + post: + description: Update verification level of a user + operationId: upgradeUser + tags: + - Admin + parameters: + - in: body + name: data + description: Upgrade data + schema: + $ref: "#/definitions/UpgradeUserRequest" + responses: + 200: + description: Success + schema: + $ref: "#/definitions/MessageResponse" + default: + description: Error + schema: + $ref: "#/definitions/MessageResponse" + security: + - Bearer: [] + x-security-scopes: + - admin + - supervisor + - kyc + /admin/deactivate-otp: + x-swagger-router-controller: otp + post: + description: Deactivate otp for a user + operationId: deactivateOtpAdmin + tags: + - Admin + parameters: + - in: body + name: data + description: Upgrade data + required: true + schema: + type: object + properties: + user_id: + type: number + responses: + 200: + description: Success + schema: + $ref: "#/definitions/MessageResponse" + default: + description: Error + schema: + $ref: "#/definitions/MessageResponse" + security: + - Bearer: [] + x-security-scopes: + - admin + - supervisor + /admin/flag-user: + x-swagger-router-controller: admin + post: + description: Flag a user + operationId: flagUser + tags: + - Admin + parameters: + - in: body + name: data + description: user id for flagging + required: true + schema: + type: object + properties: + user_id: + type: number + responses: + 200: + description: Success + schema: + $ref: "#/definitions/MessageResponse" + default: + description: Error + schema: + $ref: "#/definitions/MessageResponse" + security: + - Bearer: [] + x-security-scopes: + - admin + - supervisor + - support + - kyc + /admin/deposits: + x-swagger-router-controller: deposit + get: + operationId: getAdminDeposits + description: Obtain a list of deposits. + tags: + - Admin + parameters: + - in: query + name: currency + description: Currency type + required: false + type: string + - in: query + name: user_id + description: Id of the user + required: false + type: number + - in: query + name: transaction_id + description: unique transaction id + required: false + type: string + - in: query + name: address + description: Address of the deposit + required: false + type: string + - in: query + name: limit + description: "Number of elements to return. Default: 50. Maximun: 100" + required: false + type: number + format: int32 + default: 50 + - in: query + name: page + description: Page of data to retrieve + required: false + type: number + format: int32 + default: 1 + - in: query + name: order_by + description: Field to order data + required: false + type: string + - in: query + name: order + description: direction to order + required: false + type: string + enum: ['asc', 'desc'] + - in: query + name: start_date + description: Starting date of queried data + required: false + type: string + format: date-time + - in: query + name: end_date + description: Ending date of queried data + required: false + type: string + format: date-time + - in: query + name: status + required: false + type: boolean + description: Status of the deposit. False = "Pending"; True = "Completed" + - in: query + name: dismissed + required: false + type: boolean + description: Cancel status of the deposit. + - in: query + name: rejected + required: false + type: boolean + description: Rejected status of the deposit. + - in: query + name: processing + required: false + type: boolean + description: Processing status of the deposit. + - in: query + name: waiting + required: false + type: boolean + description: Waiting status of the deposit. + - in: query + name: format + description: Specify data format + required: false + enum: ['csv'] + type: string + responses: + 200: + description: Success + schema: + items: + $ref: "#/definitions/TransactionResponse" + 202: + description: Success + schema: + type: string + default: + description: Error + schema: + $ref: "#/definitions/MessageResponse" + security: + - Bearer: [] + x-security-scopes: + - admin + - supervisor + /admin/withdrawals: + x-swagger-router-controller: withdrawal + get: + operationId: getAdminWithdrawals + description: Obtain a list of withdrawals. + tags: + - Admin + parameters: + - in: query + name: currency + description: Currency type + required: false + type: string + - in: query + name: user_id + description: Id of the user + required: false + type: number + - in: query + name: transaction_id + description: unique transaction id + required: false + type: string + - in: query + name: address + description: Address of the withdrawal + required: false + type: string + - in: query + name: limit + description: "Number of elements to return. Default: 50. Maximun: 100" + required: false + type: number + format: int32 + default: 50 + - in: query + name: page + description: Page of data to retrieve + required: false + type: number + format: int32 + default: 1 + - in: query + name: order_by + description: Field to order data + required: false + type: string + - in: query + name: order + description: direction to order + required: false + type: string + enum: ['asc', 'desc'] + - in: query + name: start_date + description: Starting date of queried data + required: false + type: string + format: date-time + - in: query + name: end_date + description: Ending date of queried data + required: false + type: string + format: date-time + - in: query + name: status + required: false + type: boolean + description: Status of the withdrawals. False = "Pending"; True = "Completed" + - in: query + name: dismissed + required: false + type: boolean + description: Cancel status of the withdrawals. + - in: query + name: rejected + required: false + type: boolean + description: Rejected status of the withdrawals. + - in: query + name: processing + required: false + type: boolean + description: Processing status of the deposit. + - in: query + name: waiting + required: false + type: boolean + description: Waiting status of the deposit. + - in: query + name: format + description: Specify data format + required: false + enum: ['csv'] + type: string + responses: + 200: + description: Success + schema: + items: + $ref: "#/definitions/TransactionResponse" + 202: + description: Success + schema: + type: string + default: + description: Error + schema: + $ref: "#/definitions/MessageResponse" + security: + - Bearer: [] + x-security-scopes: + - admin + - supervisor + /admin/transfer: + x-swagger-router-controller: admin + post: + operationId: transferFund + description: Transfer fund between two user accounts + tags: + - Admin + parameters: + - name: data + description: Transfer information + in: body + required: true + schema: + $ref: "#/definitions/TransferRequest" + responses: + 200: + description: Success + schema: + $ref: "#/definitions/MessageResponse" + default: + description: Error + schema: + $ref: "#/definitions/MessageResponse" + security: + - Bearer: [] + x-security-scopes: + - admin + /admin/mint: + x-swagger-router-controller: admin + post: + operationId: mintAsset + description: Mint a user created asset to account + tags: + - Admin + parameters: + - name: data + in: body + required: true + schema: + $ref: "#/definitions/MintBurnRequest" + responses: + 200: + description: Success + schema: + $ref: "#/definitions/MessageResponse" + default: + description: Error + schema: + $ref: "#/definitions/MessageResponse" + security: + - Bearer: [] + x-security-scopes: + - admin + /admin/burn: + x-swagger-router-controller: admin + post: + operationId: burnAsset + description: Burn a user created asset from account + tags: + - Admin + parameters: + - name: data + in: body + required: true + schema: + $ref: "#/definitions/MintBurnRequest" + responses: + 200: + description: Success + schema: + $ref: "#/definitions/MessageResponse" + default: + description: Error + schema: + $ref: "#/definitions/MessageResponse" + security: + - Bearer: [] + x-security-scopes: + - admin +definitions: + ObjectResponse: + type: object + MessageResponse: + required: + - message + properties: + message: + type: string + UserAuthentication: + type: object + required: + - email + - password + properties: + email: + type: string + password: + type: string + format: password + otp_code: + type: string + captcha: + type: string + referral: + type: string + service: + type: string + ResetPassword: + type: object + required: + - code + - new_password + properties: + new_password: + type: string + code: + type: string + OperatorResponse: + type: object + required: + - id + - email + - is_admin + - is_supervisor + - is_support + - is_kyc + - is_communicator + properties: + id: + type: number + format: int32 + email: + type: string + is_admin: + type: boolean + is_supervisor: + type: boolean + is_support: + type: boolean + is_kyc: + type: boolean + is_communicator: + type: boolean + OperatorsResponse: + type: object + required: + - count + - data + properties: + count: + type: number + format: int32 + data: + type: array + items: + $ref: "#/definitions/OperatorResponse" + FeeResponse: + type: object + required: + - id + - transaction_id + - currency + - network_fee + - timestamp + - exchange_id + properties: + id: + type: number + format: int32 + transaction_id: + type: string + currency: + type: string + network_fee: + type: number + format: double + timestamp: + type: string + format: date-time + exchange_id: + type: number + format: int32 + FeesResponse: + type: object + required: + - count + - data + properties: + count: + type: number + format: int32 + data: + type: object + additionalProperties: + type: array + items: + $ref: "#/definitions/FeeResponse" + UserResponse: + type: object + properties: + id: + type: number + email: + type: string + full_name: + type: string + gender: + type: boolean + nationality: + type: string + address: + type: object + properties: + country: + type: string + address: + type: string + postal_code: + type: string + city: + type: string + verified: + type: boolean + phone_number: + type: string + id_data: + type: object + properties: + type: + type: string + number: + type: string + issued_date: + type: string + expiration_date: + type: string + verified: + type: boolean + bank_account: + $ref: "#/definitions/BankArray" + crypto_wallet: + type: object + verification_level: + type: number + settings: + type: object + properties: + language: + type: string + default: 'en' + maxLength: 3 + minLength: 2 + SettingsPut: + type: object + properties: + language: + type: string + default: 'en' + maxLength: 3 + minLength: 2 + risk: + type: object + properties: + popup_warning: + type: boolean + order_portfolio_percentage: + type: number + format: double + minimum: 0.001 + maximum: 99 + audio: + type: object + properties: + public_trade: + type: boolean + order_completed: + type: boolean + order_partially_completed: + type: boolean + interface: + type: object + properties: + theme: + type: string + order_book_levels: + type: number + format: int32 + minimum: 1 + maximum: 20 + notification: + type: object + properties: + popup_order_completed: + type: boolean + popup_order_confirmation: + type: boolean + popup_order_partially_filled: + type: boolean + UserPut: + type: object + properties: + full_name: + type: string + gender: + type: boolean + nationality: + type: string + dob: + type: string + format: date-time + address: + type: object + required: + - country + - address + - postal_code + - city + properties: + country: + type: string + address: + type: string + postal_code: + type: string + city: + type: string + phone_number: + type: string + ChangePassword: + type: object + required: + - old_password + - new_password + properties: + old_password: + type: string + new_password: + type: string + LoginsResponse: + type: object + properties: + count: + type: number + format: int32 + data: + type: array + items: + type: object + properties: + ip: + type: string + device: + type: string + domain: + type: string + timestamp: + type: string + format: date-time + CountResponse: + type: object + required: + - count + properties: + count: + type: number + format: int32 + data: + type: array + items: + type: object + WithdrawalRequest: + type: object + required: + - address + - amount + - currency + properties: + address: + type: string + description: Destination address + currency: + type: string + description: currency to be withdrawn (btc, eth, etc) + amount: + type: number + format: double + description: Amount to transfer (in btc, eth, bch) + otp_code: + type: string + description: OTP code when otp is enabled + minLength: 6 + maxLength: 6 + OtpRequest: + type: object + required: + - code + properties: + code: + type: string + BankArray: + type: array + items: + $ref: "#/definitions/BankObject" + BankObject: + type: object + properties: + bank_name: + type: string + account_number: + type: string + maxLength: 50 + card_number: + type: string + VerificationId: + type: object + required: + - front + properties: + front: + type: string + back: + type: string + proof_of_residency: + type: string + AnnouncementObject: + type: object + properties: + id: + type: number + format: int32 + created_by: + type: number + format: int32 + title: + type: string + message: + type: string + type: + type: string + OrderRequest: + type: object + required: + - side + - size + - type + - symbol + properties: + symbol: + type: string + description: Currency symbol of the order e.g. btc-eur + side: + type: string + enum: + - buy + - sell + size: + description: "Size of the orders. Should have 4 decimal, if it has more than 4 it will be rounded to 4 decimal. Min: 0.0001, Max: 21000000" + type: number + format: double + type: + type: string + enum: + - market + - limit + price: + type: number + format: double + description: Price of the order + stop: + type: number + format: double + meta: + type: object + properties: + post_only: + type: boolean + OrderResponse: + type: object + properties: + id: + type: string + side: + type: string + enum: + - buy + - sell + symbol: + type: string + description: Currency symbol + size: + type: number + format: double + description: "Size of the order. Min: 0.0001, Max: 21000000" + filled: + type: number + format: double + description: "Size of the order filled. Min: 0.0001, Max: 21000000" + type: + type: string + enum: + - market + - limit + price: + type: number + format: double + description: "Price of the order. Min: 500000, Max: 100000000" + status: + type: string + description: Status of the order, ex. queued + created_by: + type: number + format: int32 + created_at: + type: string + format: date-time + updated_at: + type: string + format: date-time + OrdersResponse: + type: object + properties: + count: + type: number + format: int32 + data: + type: array + items: + $ref: "#/definitions/OrderResponse" + BalanceResponse: + type: object + properties: + btc_balance: + type: number + format: double + btc_available: + type: number + format: double + btc_pending: + type: number + format: double + updated_at: + type: string + format: date-time + KitPut: + type: object + properties: + kit: + type: object + properties: + captcha: + type: object + required: + - site_key + properties: + site_key: + type: string + defaults: + type: object + properties: + theme: + type: string + language: + type: string + color: + type: object + links: + type: object + strings: + type: object + interface: + type: object + meta: + type: object + icons: + type: object + features: + type: object + description: + type: string + title: + type: string + api_name: + type: string + logo_image: + type: string + valid_languages: + type: string + new_user_is_activated: + type: boolean + native_currency: + type: string + secrets: + type: object + properties: + emails: + type: object + properties: + audit: + type: string + sender: + type: string + timezone: + type: string + send_email_to_support: + type: boolean + allowed_domains: + type: array + items: + type: string + admin_whitelist: + type: array + items: + type: string + security: + type: object + properties: + token_time: + type: string + withdrawal_token_expiry: + type: number + captcha: + type: object + required: + - secret_key + properties: + secret_key: + type: string + smtp: + type: object + properties: + port: + type: number + user: + type: string + server: + type: string + password: + type: string + AdminUsersResponse: + type: object + properties: + count: + type: number + format: int32 + data: + type: array + items: + type: object + properties: + id: + type: number + UserRolePut: + type: object + required: + - role + properties: + role: + type: string + enum: + - admin + - supervisor + - support + - kyc + - communicator + - user + UserRolePutResponse: + type: object + required: + - id + - email + - is_admin + - is_support + - is_supervisor + - is_kyc + - is_communicator + properties: + id: + type: number + email: + type: string + is_admin: + type: boolean + is_support: + type: boolean + is_supervisor: + type: boolean + is_kyc: + type: boolean + is_communicator: + type: boolean + UserNotePut: + type: object + required: + - note + properties: + note: + type: string + TradesResponse: + type: object + properties: + count: + type: number + format: int32 + data: + type: array + items: + type: object + properties: + fee: + type: number + format: float + side: + type: string + enum: + - buy + - sell + symbol: + type: string + size: + type: number + format: double + price: + type: number + format: double + timestamp: + type: string + format: date-time + UpgradeUserRequest: + type: object + properties: + user_id: + type: integer + verification_level: + type: integer + AuditsResponse: + type: object + properties: + count: + type: number + format: int32 + data: + type: array + items: + type: object + required: + - admin_id + - event + - description + - ip + - domain + - timestamp + properties: + admin_id: + type: number + format: int32 + event: + type: string + description: + type: object + properties: + note: + type: string + ip: + type: string + domain: + type: string + timestamp: + type: string + format: date-time + TransactionResponse: + type: object + properties: + id: + type: number + transaction_id: + type: string + user_id: + description: User that receives the deposit + type: number + format: int64 + currency: + type: string + amount: + type: number + format: double + type: + type: string + enum: + - deposit + - withdrawal + fee: + type: number + format: double + status: + type: boolean + description: Status of the deposit. False = "Pending"; True = "Completed" + dissmissed: + type: boolean + description: Transaction has been dissmissed, it means canceled + rejected: + type: boolean + description: Transaction has been rejected by payment service + description: + type: string + maxLength: 255 + description: Transaction description + TransactionsResponse: + type: object + properties: + count: + type: number + format: int32 + data: + type: array + items: + $ref: "#/definitions/TransactionResponse" + UsersAddressResponse: + required: + - message + - address + - crypto + properties: + message: + type: string + address: + type: string + crypto: + type: string + TokensResponse: + type: object + properties: + count: + type: number + format: int32 + data: + type: array + items: + type: object + properties: + id: + type: number + format: int32 + name: + type: string + apiKey: + type: string + secret: + type: string + active: + type: boolean + revoked: + type: boolean + expiry: + type: string + format: date-time + created: + type: string + format: date-time + WithdrawalConfirmation: + type: object + required: + - token + properties: + token: + type: string + description: withdrawal confirmation token + StatsResponse: + type: object + properties: + data: + type: object + updatedAt: + type: string + format: date-time + TransferRequest: + type: object + required: + - sender_id + - receiver_id + - currency + - amount + properties: + sender_id: + description: Transfer source user id + type: number + receiver_id: + description: Transfer receiver user id + type: number + currency: + type: string + description: + type: string + amount: + type: number + format: double + ExternalDepositRequest: + type: object + required: + - txid + - amount + - address + - is_confirmed + - user_id + properties: + amount: + type: number + txid: + type: string + address: + type: string + is_confirmed: + type: boolean + user_id: + type: number + ExternalWithdrawalRequest: + type: object + required: + - txid + - amount + - address + - is_confirmed + - user_id + - fee + properties: + amount: + type: number + fee: + type: number + txid: + type: string + address: + type: string + is_confirmed: + type: boolean + user_id: + type: number + OrderbooksResponse: + type: object + description: Top 10 orderbooks, where key is the symbol(currency) and the values is an object with the top 10 bids and ask. + PublicTradesResponse: + type: object + description: Top trades, where key is the symbol(currency) and the values is an arra with the top trades for that symbol. + TradeDataResponse: + type: array + items: + type: object + properties: + date: + type: string + open: + type: number + close: + type: number + high: + type: number + low: + type: number + PutTierBody: + type: object + required: + - level + properties: + level: + type: number + format: int32 + name: + type: string + icon: + type: string + note: + type: string + description: + type: string + PostTierBody: + type: object + required: + - level + - name + - icon + - description + - deposit_limit + - withdrawal_limit + - fees + properties: + level: + type: number + format: int32 + name: + type: string + icon: + type: string + description: + type: string + note: + type: string + deposit_limit: + type: number + format: double + withdrawal_limit: + type: number + format: double + fees: + type: object + required: + - maker + - taker + properties: + maker: + type: object + required: + - default + properties: + default: + type: number + format: double + taker: + type: object + required: + - default + properties: + default: + type: number + format: double + TierObject: + type: object + required: + - id + - name + - icon + - note + - description + - deposit_limit + - withdrawal_limit + - fees + properties: + id: + type: number + format: int32 + name: + type: string + icon: + type: string + note: + type: string + description: + type: string + deposit_limit: + type: number + format: double + withdrawal_limit: + type: number + format: double + fees: + type: object + PairFeesPut: + type: object + required: + - pair + - fees + properties: + pair: + type: string + fees: + type: object + minProperties: 1 + additionalProperties: + type: object + minProperties: 1 + properties: + maker: + type: number + format: double + taker: + type: number + format: double + TiersLimitsPut: + type: object + required: + - limits + properties: + limits: + type: object + minProperties: 1 + additionalProperties: + type: object + minProperties: 1 + properties: + deposit_limit: + type: number + format: double + withdrawal_limit: + type: number + format: double + OraclePriceResponse: + type: object + additionalProperties: + type: number + format: double + MintBurnRequest: + type: object + required: + - user_id + - currency + - amount + properties: + user_id: + description: User that receives the deposit + type: number + currency: + type: string + description: + type: string + amount: + type: number + format: double \ No newline at end of file diff --git a/server/app.js b/server/app.js new file mode 100644 index 0000000000..c68670dfc1 --- /dev/null +++ b/server/app.js @@ -0,0 +1,48 @@ +'use strict'; + +const { createServer } = require('http'); +var SwaggerExpress = require('swagger-express-mw'); +const morgan = require('morgan'); +const { logEntryRequest, stream, logger } = require('./config/logger'); +const { domainMiddleware, helmetMiddleware } = require('./config/middleware'); +var app = require('express')(); +const toolsLib = require('hollaex-tools-lib'); +const { checkStatus } = require('./init'); + +checkStatus(); +// listen through pubsub for configuration/init + +//init runs, populates configuration/secrets + +const PORT = process.env.PORT || 10010; + +const server = createServer(app); + +module.exports = app; // for testing + +app.use(logEntryRequest); + +app.use(domainMiddleware); +helmetMiddleware(app); + +const morganType = process.env.NODE_ENV === 'development' ? 'dev' : 'combined'; +app.use(morgan(morganType, { stream })); + +var config = { + appRoot: './', // required config + swaggerSecurityHandlers: { + Bearer: toolsLib.security.verifyBearerTokenMiddleware, + HmacKey: toolsLib.security.verifyHmacTokenMiddleware + } +}; + +SwaggerExpress.create(config, function(err, swaggerExpress) { + if (err) { throw err; } + + // install middleware + swaggerExpress.register(app); + + server.listen(PORT, () => { + logger.info(`Server running on port: ${PORT}`); + }); +}); diff --git a/server/config/README.md b/server/config/README.md new file mode 100644 index 0000000000..d0535bda1b --- /dev/null +++ b/server/config/README.md @@ -0,0 +1 @@ +Place configuration files in this directory. diff --git a/server/config/db.js b/server/config/db.js new file mode 100644 index 0000000000..e89a7bce72 --- /dev/null +++ b/server/config/db.js @@ -0,0 +1,51 @@ +'use strict'; + +const { loggerDb } = require('../config/logger'); +const { toBool } = require('../utils/conversion'); + +const logging = (sql, options) => { + loggerDb.silly(sql); + // loggerDb.debug(options); +}; + +let ssl = process.env.DB_SSL || false; +ssl = toBool(ssl); + +module.exports = { + development: { + username: process.env.DB_USERNAME, + password: process.env.DB_PASSWORD, + database: process.env.DB_NAME, + host: process.env.DB_HOST, + dialect: process.env.DB_DIALECT, + port: process.env.DB_PORT, + dialectOptions: { + ssl + }, + logging + }, + test: { + username: process.env.DB_USERNAME, + password: process.env.DB_PASSWORD, + database: process.env.DB_NAME, + host: process.env.DB_HOST, + dialect: process.env.DB_DIALECT, + port: process.env.DB_PORT, + dialectOptions: { + ssl + }, + logging + }, + production: { + username: process.env.DB_USERNAME, + password: process.env.DB_PASSWORD, + database: process.env.DB_NAME, + host: process.env.DB_HOST, + dialect: process.env.DB_DIALECT, + port: process.env.DB_PORT, + dialectOptions: { + ssl + }, + logging + } +}; diff --git a/server/config/default.yaml b/server/config/default.yaml new file mode 100644 index 0000000000..cbe55eba3b --- /dev/null +++ b/server/config/default.yaml @@ -0,0 +1,37 @@ +# swagger configuration file + +# values in the swagger hash are system configuration for swagger-node +swagger: + + fittingsDirs: [ api/fittings ] + defaultPipe: null + swaggerControllerPipe: swagger_controllers # defines the standard processing pipe for controllers + + # values defined in the bagpipes key are the bagpipes pipes and fittings definitions + # (see https://github.com/apigee-127/bagpipes) + bagpipes: + + _router: + name: swagger_router + mockMode: false + mockControllersDirs: [ api/mocks ] + controllersDirs: [ api/controllers ] + + _swagger_validate: + name: swagger_validator + validateResponse: true + + # pipe for all swagger-node controllers + swagger_controllers: + - onError: json_error_handler + - cors + - swagger_security + - _swagger_validate + - express_compatibility + - _router + + # pipe to serve swagger (endpoint is in swagger.yaml) + swagger_raw: + name: swagger_raw + +# any other values in this file are just loaded into the config for application access... diff --git a/server/config/logger.js b/server/config/logger.js new file mode 100644 index 0000000000..5b411b8b17 --- /dev/null +++ b/server/config/logger.js @@ -0,0 +1,157 @@ +'use strict'; + +const winston = require('winston'); + +const LEVEL = Symbol.for('level'); +const { format, transports } = winston; +const { combine, timestamp, colorize, printf, align, json } = format; +const { SPLAT } = require('triple-beam'); +const uuid = require('uuid/v4'); +const apm = require('elastic-apm-node'); +const ElasticsearchApm = require('winston-elasticsearch-apm'); +const { isObject } = require('lodash'); +const { APM_ENABLED } = require('../constants'); + +const emitters = require('events'); +emitters.EventEmitter.defaultMaxListeners = 50; + +if (APM_ENABLED) { + apm.start(); +} + +const isMainnet = process.env.NODE_ENV === 'production'; +const LOG_LEVEL = process.env.LOG_LEVEL || 'verbose'; + +const formatObject = (param) => { + if (isObject(param)) { + return JSON.stringify(param); + } + return param; +}; + +const all = format((info) => { + const splat = info[SPLAT] || []; + const message = formatObject(info.message); + const rest = splat.map(formatObject).join(' '); + info.message = `${message} ${rest}`; + return info; +}); + +// used for filtering specific logs. currently not used. +const filterOnly = level => { + return format((info) => { + if (info[LEVEL] === level) { + return info; + } + })(); +}; + + +const generateLoggerConfiguration = (name) => { + const transportsConfig = [ + new transports.Console({ level: LOG_LEVEL} ) + ]; + + if (APM_ENABLED) { + transportsConfig.push(new ElasticsearchApm({ apm })); + } + + const config = { + format: combine( + all(), + timestamp(), + colorize(), + align(), + printf( + (info) => + `${info.timestamp} ${info.level}: ${formatObject(info.message)}` + ) + ), + transports: transportsConfig + }; + if (isMainnet) { + config.format = combine( + all(), + timestamp(), + json() + ); + } + + return config; +}; + +const LOGGER_NAMES = { + websocket: 'websocket', + db: 'db', + redis: 'redis', + email: 'email', + admin: 'admin', + orders: 'orders', + trades: 'trades', + otp: 'otp', + user: 'user', + deposits: 'deposits', + withdrawals: 'withdrawals', + notification: 'notification', + public: 'public', + chat: 'chat', + auth: 'auth', + plugin: 'plugin', + tier: 'tier', + init: 'init' +}; + +winston.loggers.add('default', generateLoggerConfiguration('all', false)); + +Object.entries(LOGGER_NAMES).forEach(([key, value], index) => { + winston.loggers.add(value, generateLoggerConfiguration(value)); +}); + +const logger = winston.loggers.get('default'); +/* + function to use in express middleware to log the request when it hits the server, it will add a uuid to the request for tracking purpose + */ +const logEntryRequest = (req, res, next) => { + req.uuid = uuid(); + logger.info( + req.uuid, + 'middleware/hostname', + req.hostname, + req.headers['x-real-ip'], + req.headers['x-real-origin'], + req.method, + req.path + ); + next(); +}; + +const stream = { + write: (message, encoding) => { + logger.info(message); + } +}; + +module.exports = { + logEntryRequest, + stream, + logger, + apm, + loggerWebsocket: winston.loggers.get(LOGGER_NAMES.websocket), + loggerDb: winston.loggers.get(LOGGER_NAMES.db), + loggerRedis: winston.loggers.get(LOGGER_NAMES.redis), + loggerAdmin: winston.loggers.get(LOGGER_NAMES.admin), + loggerEmail: winston.loggers.get(LOGGER_NAMES.email), + loggerOrders: winston.loggers.get(LOGGER_NAMES.orders), + loggerOtp: winston.loggers.get(LOGGER_NAMES.otp), + loggerTrades: winston.loggers.get(LOGGER_NAMES.trades), + loggerDeposits: winston.loggers.get(LOGGER_NAMES.deposits), + loggerWithdrawals: winston.loggers.get(LOGGER_NAMES.withdrawals), + loggerUser: winston.loggers.get(LOGGER_NAMES.user), + loggerNotification: winston.loggers.get(LOGGER_NAMES.notification), + loggerChat: winston.loggers.get(LOGGER_NAMES.chat), + loggerAuth: winston.loggers.get(LOGGER_NAMES.auth), + loggerInit: winston.loggers.get(LOGGER_NAMES.init), + loggerPlugin: winston.loggers.get(LOGGER_NAMES.plugin), + loggerPublic: winston.loggers.get(LOGGER_NAMES.public), + loggerTier: winston.loggers.get(LOGGER_NAMES.tier) +}; diff --git a/server/config/middleware.js b/server/config/middleware.js new file mode 100644 index 0000000000..21633ea847 --- /dev/null +++ b/server/config/middleware.js @@ -0,0 +1,82 @@ +'use strict'; +const url = require('url'); +const { logger } = require('./logger'); +const { APM_ENABLED, DOMAIN } = require('../constants'); +const ALLOWED_DOMAINS = () => toolsLib.getKitSecrets().allowed_domains || (process.env.ALLOWED_DOMAINS ? process.env.ALLOWED_DOMAINS.split(',') : []); +const helmet = require('helmet'); +const expectCt = require('expect-ct'); +const { apm } = require('./logger'); +const toolsLib = require('hollaex-tools-lib'); + +const domainMiddleware = (req, res, next) => { + logger.verbose(req.uuid, 'origin', req.headers['x-real-origin']); + if (ALLOWED_DOMAINS().length > 0 && req.headers['x-real-origin']) { + const originUrl = url.parse(req.headers['x-real-origin']); + logger.verbose( + req.uuid, + 'origin', + req.headers['x-real-origin'], + 'host', + originUrl.protocol, + originUrl.host + ); + + const requestDomain = ALLOWED_DOMAINS().find( + (domain) => originUrl.host.indexOf(domain) === 0 + ); + if (!requestDomain) { + req.headers['x-real-origin'] = DOMAIN; + } + } else { + req.headers['x-real-origin'] = DOMAIN; + } + if (APM_ENABLED) { + apm.setTransactionName(req.method + ' ' + req.url); + } + return next(); +}; + +const HPKP_MAX_AGE = 90 * 24 * 60 * 60; // seconds + +const helmetMiddleware = (app) => { + app.use(helmet()); + + // contentSecurityPolicy + // app.use( + // helmet.contentSecurityPolicy({ + // directives: { + // defaultSrc: ["'self'"], + // styleSrc: ["'self'", 'maxcdn.bootstrapcdn.com'] + // } + // }) + // ); + + // referrerPolicy + // app.use(helmet.referrerPolicy({ policy: 'same-origin' })) + + // hpkp + // app.use( + // helmet.hpkp({ + // maxAge: HPKP_MAX_AGE, + // sha256s: ['AbCdEf123=', 'ZyXwVu456='], + // includeSubdomains: true + // }) + // ); + // + // // expect-ct + // app.use( + // expectCt({ + // enforce: true, + // maxAge: 123 + // }) + // ); + + // no cache + app.use(helmet.noCache()); +}; + +module.exports = { + helmetMiddleware, + domainMiddleware, + apm +}; diff --git a/server/config/redis.js b/server/config/redis.js new file mode 100644 index 0000000000..4c1d3555b7 --- /dev/null +++ b/server/config/redis.js @@ -0,0 +1,58 @@ +'use strict'; +const env = process.env.NODE_ENV || 'development'; + +const REDIS_HOST = process.env.REDIS_HOST; +const REDIS_PORT = process.env.REDIS_PORT; +const REDIS_PASSWORD = process.env.REDIS_PASSWORD; + +const PUBSUB_HOST = process.env.PUBSUB_HOST; +const PUBSUB_PORT = process.env.PUBSUB_PORT; +const PUBSUB_PASSWORD = process.env.PUBSUB_PASSWORD; + +const redisClientConfig = { + host: REDIS_HOST, + port: REDIS_PORT +}; + +const redisPubsubConfig = { + host: PUBSUB_HOST, + port: PUBSUB_PORT +}; + +const defaultConfig = { + client: redisClientConfig, + redis: redisClientConfig, + pubsub: redisPubsubConfig +}; + +const productionConfig = { + client: REDIS_PASSWORD + ? { + ...redisClientConfig, + password: REDIS_PASSWORD, + auth: REDIS_PASSWORD + } + : redisClientConfig, + redis: REDIS_PASSWORD + ? { + ...redisClientConfig, + password: REDIS_PASSWORD, + auth: REDIS_PASSWORD + } + : redisClientConfig, + pubsub: PUBSUB_PASSWORD + ? { + ...redisPubsubConfig, + password: PUBSUB_PASSWORD, + auth: PUBSUB_PASSWORD + } + : redisPubsubConfig +}; + +const config = { + development: productionConfig, + test: productionConfig, + production: productionConfig +}; + +module.exports = config[env] || defaultConfig; diff --git a/server/constants.js b/server/constants.js new file mode 100644 index 0000000000..de1aa3bff6 --- /dev/null +++ b/server/constants.js @@ -0,0 +1,440 @@ +'use strict'; + +const { toBool } = require('./utils/conversion'); +const { cloneDeep } = require('lodash'); +const redis = require('redis'); +const config = require('./config/redis'); +const subscriber = redis.createClient(config.pubsub); + +// CONFIGURATION CONSTANTS START-------------------------------------------------- +const CONFIGURATION_CHANNEL = 'channel:configuration'; + +let configuration = { + coins: {}, + pairs: {}, + tiers: {}, + kit: { + info: {}, + color: {}, + interface: {}, + icons: {}, + strings: {}, + links: {}, + captcha: {}, + defaults: {}, + features: {}, + meta: {} + } +}; + +let secrets = { + security: {}, + accounts: {}, + captcha: {}, + emails: {}, + smtp: {} +}; + +let frozenUsers = {}; + +subscriber.subscribe(CONFIGURATION_CHANNEL); + +subscriber.on('message', (channel, message) => { + if (channel === CONFIGURATION_CHANNEL) { + const { type, data } = JSON.parse(message); + + switch(type) { + case 'initial': + updateAllConfig(data.configuration, data.secrets, data.frozenUsers); + break; + case 'update': + if (data.info) updateKitInfo(data.info); + if (data.tiers) updateTiers(data.tiers); + if (data.kit) updateKit(data.kit); + if (data.secrets) updateSecrets(data.secrets); + break; + case 'freezeUser': + updateFrozenUser(data, 'add'); + break; + case 'unfreezeUser': + updateFrozenUser(data, 'remove'); + break; + case 'stop': + resetAllConfig(); + break; + default: + break; + } + } +}); + +const updateAllConfig = (newConfigurations, newSecrets, newFrozenUsers) => { + configuration = newConfigurations; + secrets = newSecrets; + frozenUsers = newFrozenUsers; +}; + +const resetAllConfig = () => { + frozenUsers = {}; + secrets = { + security: {}, + accounts: {}, + captcha: {}, + emails: {}, + smtp: {} + }; + configuration = { + coins: {}, + pairs: {}, + kit: { + info: {}, + color: {}, + interface: {}, + icons: {}, + strings: {}, + links: {}, + captcha: {}, + defaults: {}, + features: {}, + meta: {} + } + }; +}; + +const updateTiers = (newTiers) => { + Object.assign(configuration.tiers, newTiers); +}; + +const updateKitInfo = (newInfo) => { + Object.assign(configuration.kit.info, newInfo); +}; + +const updateKit = (newKitConfig) => { + Object.assign(configuration.kit, newKitConfig); +}; + +const updateSecrets = (newSecretsConfig) => { + Object.assign(secrets, newSecretsConfig); +}; + +const updateFrozenUser = (action, userId) => { + if (action === 'add') { + frozenUsers[userId] = true; + } else if (action === 'remove') { + delete frozenUsers[userId]; + } +}; + +exports.GET_COINS = () => cloneDeep(configuration.coins); +exports.GET_PAIRS = () => cloneDeep(configuration.pairs); +exports.GET_TIERS = () => cloneDeep(configuration.tiers); +exports.GET_KIT_CONFIG = () => cloneDeep(configuration.kit); +exports.GET_KIT_SECRETS = () => cloneDeep(secrets); +exports.GET_FROZEN_USERS = () => cloneDeep(frozenUsers); + +exports.KIT_CONFIG_KEYS = [ + 'captcha', + 'api_name', + 'description', + 'color', + 'title', + 'links', + 'defaults', + 'native_currency', + 'logo_image', + 'valid_languages', + 'new_user_is_activated', + 'interface', + 'icons', + 'strings', + 'meta', + 'features', + 'setup_completed' +]; + +exports.KIT_SECRETS_KEYS = [ + 'allowed_domains', + 'admin_whitelist', + 'emails', + 'security', + 'captcha', + 'smtp' +]; + +exports.COMMUNICATOR_AUTHORIZED_KIT_CONFIG = [ + 'icons', + 'strings' +]; +// CONFIGURATION CONSTANTS END -------------------------------------------------- + +// MAIN CONSTANTS START-------------------------------------------------- + +exports.APM_ENABLED = toBool(process.env.APM_ENABLED) || false; // apm is used for sending logs etc +exports.API_HOST = process.env.API_HOST || 'localhost'; +exports.DOMAIN = process.env.DOMAIN || (process.env.NODE_ENV === 'production' ? 'https://hollaex.com' : 'http://localhost:3000'); +exports.NODE_ENV = process.env.NODE_ENV; +exports.HOLLAEX_NETWORK_ENDPOINT = process.env.NETWORK === 'testnet' ? 'https://api.testnet.hollaex.network' : 'https://api.hollaex.network'; +exports.HOLLAEX_NETWORK_BASE_URL = '/v2'; +exports.HOLLAEX_NETWORK_PATH_ACTIVATE = '/exchange/activate'; + +// MAIN CONSTANTS END -------------------------------------------------- + +// CHANNEL CONSTANTS START -------------------------------------------------- + +// API +exports.INIT_CHANNEL = 'channel:init'; +exports.WITHDRAWALS_REQUEST_KEY = 'withdrawals:request'; +exports.HMAC_TOKEN_KEY = 'hmac:token'; +exports.EVENTS_CHANNEL = 'channel:events'; +exports.CONFIGURATION_CHANNEL = CONFIGURATION_CHANNEL; + +// Websocket +exports.WEBSOCKET_CHANNEL = (topic, symbolOrUserId) => { + switch(topic) { + case 'orderbook': + return `orderbook:${symbolOrUserId}`; + case 'trade': + return `trade:${symbolOrUserId}`; + case 'order': + return `order:${symbolOrUserId}`; + case 'wallet': + return `wallet:${symbolOrUserId}`; + case 'deposit': + return `deposit:${symbolOrUserId}`; + case 'chat': + return 'chat'; + default: + return; + } +}; +exports.WS_PUBSUB_DEPOSIT_CHANNEL = 'channel:ws:deposit'; +exports.WS_HUB_CHANNEL = 'channel:websocket:hub'; + +// Chat +exports.CHAT_MAX_MESSAGES = 50; +exports.CHAT_MESSAGE_CHANNEL = 'channel:chat:message'; + +// CHANNEL CONSTANTS END -------------------------------------------------- + +// UTIL CONSTANTS START -------------------------------------------------- + +exports.AFFILIATION_CODE_LENGTH = 6; +exports.SEND_CONTACT_US_EMAIL = true; +//CSV Report keys +exports.AUDIT_KEYS = [ + 'id', + 'admin_id', + 'event', + 'description.new', + 'description.old', + 'description.note', + 'description.user_id', + 'ip', + 'domain', + 'timestamp' +]; + +// UTIL CONSTANTS END -------------------------------------------------- + +// ACCOUNTS CONSTANTS START -------------------------------------------------- + +exports.SETTING_KEYS = [ + 'language', + 'notification', + 'interface', + 'audio', + 'risk', + 'chat' +]; + +exports.OMITTED_USER_FIELDS = [ + 'password', + 'note', + 'is_admin', + 'is_support', + 'is_supervisor', + 'is_kyc', + 'is_communicator', + 'flagged' +]; + +const ROLES = { + SUPERVISOR: 'supervisor', + SUPPORT: 'support', + ADMIN: 'admin', + KYC: 'kyc', + COMMUNICATOR: 'communicator', + USER: 'user', + HMAC: 'hmac' +}; +exports.ROLES = ROLES; +exports.BASE_SCOPES = [ROLES.USER, ROLES.HMAC]; +exports.DEFAULT_ORDER_RISK_PERCENTAGE = 90; // used in settings in percentage to display popups on big relative big orders of user + +// ACCOUNTS CONSTANTS END -------------------------------------------------- + +// SECURITY CONSTANTS START -------------------------------------------------- + +exports.TOKEN_TYPES = { + HMAC: 'hmac' +}; +exports.HMAC_TOKEN_EXPIRY = 5 * 12 * 30 * 24 * 60 * 60 * 1000; // 5 years +exports.SECRET = process.env.SECRET || 'shhhh'; +exports.ISSUER = process.env.ISSUER || 'hollaex.com'; +exports.CAPTCHA_ENDPOINT = 'https://www.google.com/recaptcha/api/siteverify'; +exports.SECRET_MASK = '************************'; +exports.SALT_ROUNDS = 10; + +// SECURITY CONSTANTS END -------------------------------------------------- + +// EMAIL CONSTANTS START -------------------------------------------------- + +exports.CONFIRMATION = { + btc: 1, + eth: 15, + bch: 2, + xrp: 0 +}; +exports.EXPLORERS = (currency) => { + switch(currency) { + case 'btc': + return [ + { + name: 'Blockchain.info', + baseUrl: 'https://www.blockchain.com', + txPath: '/btc/tx' + }, + { + name: 'BlockCypher', + baseUrl: 'https://live.blockcypher.com', + txPath: '/btc/tx' + }, + { + name: 'Blockstream', + baseUrl: 'https://blockstream.info', + txPath: '/tx' + }, + { + name: 'Bitcoin.com', + baseUrl: 'https://explorer.bitcoin.com', + txPath: '/btc/tx' + } + ]; + case 'xrp': + return [ + { + name: 'xrpscan', + baseUrl: 'https://xrpscan.com', + txPath: '/tx' + }, + { + name: 'Bithomp', + baseUrl: 'https://bithomp.com', + txPath: '/explorer' + } + ]; + case 'bch': + return [ + { + name: 'Blockchain.info', + baseUrl: 'https://www.blockchain.com', + txPath: '/bch/tx' + }, + { + name: 'Bitcoin.com', + baseUrl: 'https://explorer.bitcoin.com', + txPath: '/bch/tx' + } + ]; + case 'xlm': + return [ + { + name: 'stellarhain.io', + baseUrl: 'https://stellarchain.io', + txPath: '/tx' + } + ]; + case 'xmr': + return [ + { + name: 'MoneroBlocks', + baseUrl: 'https://moneroblocks.info', + txPath: '/tx' + } + ]; + case 'eth': + return [ + { + name: 'EtherScan', + baseUrl: 'https://etherscan.io', + txPath: '/tx' + }, + { + name: 'Blockchain.info', + baseUrl: 'https://www.blockchain.com', + txPath: '/eth/tx' + } + ]; + default: + return [ + { + name: 'EtherScan', + baseUrl: 'https://etherscan.io', + txPath: '/tx' + } + ]; + } +}; + +// EMAIL CONSTANTS END -------------------------------------------------- + +// PLUGIN CONSTANTS START------------------------------ to be moved +exports.AVAILABLE_PLUGINS = [ + 'xht_fee', + 'kyc', + 'sms', + 'freshdesk', + 'chat', + 'bank', + 'announcement', + 'zendesk' +]; + +exports.REQUIRED_XHT = 100; + +exports.SMS_CODE_KEY = 'user:sms'; +exports.SMS_CODE_EXPIRATION_TIME = 6 * 60; // seconds -> 6 min + +exports.S3_LINK_EXPIRATION_TIME = 300; // seconds + +exports.ID_FIELDS = [ + 'type', + 'number', + 'issued_date', + 'expiration_date', + 'status' +]; + +exports.USER_FIELD_ADMIN_LOG = [ + 'full_name', + 'email', + 'dob', + 'gender', + 'nationality', + 'phone_number', + 'address', + 'id_data', + 'bank_account', + 'settings', + 'username' +]; + +exports.ADDRESS_FIELDS = ['city', 'address', 'country', 'postal_code']; + +exports.VERIFY_STATUS = { + EMPTY: 0, + PENDING: 1, + REJECTED: 2, + COMPLETED: 3 +}; +// PLUGIN CONSTANTS END ------------------------------ to be moved \ No newline at end of file diff --git a/server/db/functions/create-uuid.js b/server/db/functions/create-uuid.js new file mode 100644 index 0000000000..8c579bb778 --- /dev/null +++ b/server/db/functions/create-uuid.js @@ -0,0 +1,5 @@ +const sql = ` +CREATE EXTENSION IF NOT EXISTS "uuid-ossp"; +`; + +module.exports = sql; \ No newline at end of file diff --git a/server/db/functions/drops.js b/server/db/functions/drops.js new file mode 100644 index 0000000000..52bd7d9c06 --- /dev/null +++ b/server/db/functions/drops.js @@ -0,0 +1,11 @@ +const sql = ` +DROP FUNCTION calculate_accumlated_withdrawals(user_id_to_check integer, check_currency CHAR); +DROP FUNCTION calculate_accumlated(user_id integer, currency CHAR); +DROP FUNCTION calculate_fiat_amount_with_fee(price DOUBLE precision, size DOUBLE precision, fee FLOAT); +DROP FUNCTION check_balance(user_id_to_check integer); +DROP FUNCTION get_limit_for_level(level INT, currency CHAR, type CHAR); +DROP FUNCTION calculate_btc_amount_with_fee(size DOUBLE precision, fee FLOAT); + +`; + +module.exports = sql; diff --git a/db/migrations/20170717083259-create-user.js b/server/db/migrations/20170717083259-create-user.js similarity index 81% rename from db/migrations/20170717083259-create-user.js rename to server/db/migrations/20170717083259-create-user.js index 99be15f46b..c30cde6857 100644 --- a/db/migrations/20170717083259-create-user.js +++ b/server/db/migrations/20170717083259-create-user.js @@ -84,7 +84,27 @@ module.exports = { allowNull: false, type: Sequelize.DATE, defaultValue: Sequelize.literal('NOW()') - } + }, + is_admin: { + type: Sequelize.BOOLEAN, + defaultValue: false + }, + is_supervisor: { + type: Sequelize.BOOLEAN, + defaultValue: false + }, + is_support: { + type: Sequelize.BOOLEAN, + defaultValue: false + }, + is_kyc: { + type: Sequelize.BOOLEAN, + defaultValue: false + }, + is_tech: { + type: Sequelize.BOOLEAN, + defaultValue: false + }, }, { timestamps: true, diff --git a/db/migrations/20170720075000-create-verification-code.js b/server/db/migrations/20170720075000-create-verification-code.js similarity index 100% rename from db/migrations/20170720075000-create-verification-code.js rename to server/db/migrations/20170720075000-create-verification-code.js diff --git a/db/migrations/20170728075400-create-reset-password-code.js b/server/db/migrations/20170728075400-create-reset-password-code.js similarity index 100% rename from db/migrations/20170728075400-create-reset-password-code.js rename to server/db/migrations/20170728075400-create-reset-password-code.js diff --git a/db/migrations/20170807155400-create-verification-images.js b/server/db/migrations/20170807155400-create-verification-images.js similarity index 100% rename from db/migrations/20170807155400-create-verification-images.js rename to server/db/migrations/20170807155400-create-verification-images.js diff --git a/db/migrations/20170811162200-create-otp.js b/server/db/migrations/20170811162200-create-otp.js similarity index 100% rename from db/migrations/20170811162200-create-otp.js rename to server/db/migrations/20170811162200-create-otp.js diff --git a/db/migrations/20170811165400-add-otpenabled-users.js b/server/db/migrations/20170811165400-add-otpenabled-users.js similarity index 100% rename from db/migrations/20170811165400-add-otpenabled-users.js rename to server/db/migrations/20170811165400-add-otpenabled-users.js diff --git a/db/migrations/20170821085500-create-token.js b/server/db/migrations/20170821085500-create-token.js similarity index 100% rename from db/migrations/20170821085500-create-token.js rename to server/db/migrations/20170821085500-create-token.js diff --git a/db/migrations/20171013160900-remove-address-user.js b/server/db/migrations/20171013160900-remove-address-user.js similarity index 100% rename from db/migrations/20171013160900-remove-address-user.js rename to server/db/migrations/20171013160900-remove-address-user.js diff --git a/db/migrations/20171013161000-add-address-jsonb-user.js b/server/db/migrations/20171013161000-add-address-jsonb-user.js similarity index 100% rename from db/migrations/20171013161000-add-address-jsonb-user.js rename to server/db/migrations/20171013161000-add-address-jsonb-user.js diff --git a/db/migrations/20171013161100-remove-bank-account-number-user.js b/server/db/migrations/20171013161100-remove-bank-account-number-user.js similarity index 100% rename from db/migrations/20171013161100-remove-bank-account-number-user.js rename to server/db/migrations/20171013161100-remove-bank-account-number-user.js diff --git a/db/migrations/20171013161100-remove-bank-name-user.js b/server/db/migrations/20171013161100-remove-bank-name-user.js similarity index 100% rename from db/migrations/20171013161100-remove-bank-name-user.js rename to server/db/migrations/20171013161100-remove-bank-name-user.js diff --git a/db/migrations/20171013161200-add-bank-account-user.js b/server/db/migrations/20171013161200-add-bank-account-user.js similarity index 100% rename from db/migrations/20171013161200-add-bank-account-user.js rename to server/db/migrations/20171013161200-add-bank-account-user.js diff --git a/db/migrations/20171013161400-remove-id-number-user.js b/server/db/migrations/20171013161400-remove-id-number-user.js similarity index 100% rename from db/migrations/20171013161400-remove-id-number-user.js rename to server/db/migrations/20171013161400-remove-id-number-user.js diff --git a/db/migrations/20171013161400-remove-id-type-user.js b/server/db/migrations/20171013161400-remove-id-type-user.js similarity index 100% rename from db/migrations/20171013161400-remove-id-type-user.js rename to server/db/migrations/20171013161400-remove-id-type-user.js diff --git a/db/migrations/20171013161700-add-id-user.js b/server/db/migrations/20171013161700-add-id-user.js similarity index 100% rename from db/migrations/20171013161700-add-id-user.js rename to server/db/migrations/20171013161700-add-id-user.js diff --git a/db/migrations/20171103165700-add-default-created_at-user.js b/server/db/migrations/20171103165700-add-default-created_at-user.js similarity index 100% rename from db/migrations/20171103165700-add-default-created_at-user.js rename to server/db/migrations/20171103165700-add-default-created_at-user.js diff --git a/db/migrations/20171103165800-add-default-updated_at-user.js b/server/db/migrations/20171103165800-add-default-updated_at-user.js similarity index 100% rename from db/migrations/20171103165800-add-default-updated_at-user.js rename to server/db/migrations/20171103165800-add-default-updated_at-user.js diff --git a/db/migrations/20171116200700-add-activated-user.js b/server/db/migrations/20171116200700-add-activated-user.js similarity index 100% rename from db/migrations/20171116200700-add-activated-user.js rename to server/db/migrations/20171116200700-add-activated-user.js diff --git a/db/migrations/20171218073200-add-settings-user.js b/server/db/migrations/20171218073200-add-settings-user.js similarity index 100% rename from db/migrations/20171218073200-add-settings-user.js rename to server/db/migrations/20171218073200-add-settings-user.js diff --git a/db/migrations/20171226120730-change-first_name-user.js b/server/db/migrations/20171226120730-change-first_name-user.js similarity index 100% rename from db/migrations/20171226120730-change-first_name-user.js rename to server/db/migrations/20171226120730-change-first_name-user.js diff --git a/db/migrations/20171226120800-remove-last_name-user.js b/server/db/migrations/20171226120800-remove-last_name-user.js similarity index 100% rename from db/migrations/20171226120800-remove-last_name-user.js rename to server/db/migrations/20171226120800-remove-last_name-user.js diff --git a/db/migrations/20180426132900-add-username-user.js b/server/db/migrations/20180426132900-add-username-user.js similarity index 100% rename from db/migrations/20180426132900-add-username-user.js rename to server/db/migrations/20180426132900-add-username-user.js diff --git a/db/migrations/20180619110259-create-logins.js b/server/db/migrations/20180619110259-create-logins.js similarity index 100% rename from db/migrations/20180619110259-create-logins.js rename to server/db/migrations/20180619110259-create-logins.js diff --git a/db/migrations/20180728083910-add-flagged-user.js b/server/db/migrations/20180728083910-add-flagged-user.js similarity index 100% rename from db/migrations/20180728083910-add-flagged-user.js rename to server/db/migrations/20180728083910-add-flagged-user.js diff --git a/db/migrations/20180807130613-create-affiliation.js b/server/db/migrations/20180807130613-create-affiliation.js similarity index 90% rename from db/migrations/20180807130613-create-affiliation.js rename to server/db/migrations/20180807130613-create-affiliation.js index c534459a5e..7d7cc3b024 100644 --- a/db/migrations/20180807130613-create-affiliation.js +++ b/server/db/migrations/20180807130613-create-affiliation.js @@ -29,11 +29,6 @@ module.exports = { key: 'id' } }, - percentage: { - allowNull: false, - type: Sequelize.INTEGER, - defaultValue: 10 - }, updated_at: { allowNull: false, type: Sequelize.DATE, diff --git a/db/migrations/20180808141237-add-user-affiliation.js b/server/db/migrations/20180808141237-add-user-affiliation.js similarity index 73% rename from db/migrations/20180808141237-add-user-affiliation.js rename to server/db/migrations/20180808141237-add-user-affiliation.js index 0c81923996..e775c9b31b 100644 --- a/db/migrations/20180808141237-add-user-affiliation.js +++ b/server/db/migrations/20180808141237-add-user-affiliation.js @@ -1,6 +1,7 @@ 'use strict'; const TABLE = 'Users'; const COLUMN = 'affiliation_code'; +const COLUMN2 = 'affiliation_rate'; module.exports = { up: (queryInterface, Sequelize) => @@ -13,6 +14,12 @@ module.exports = { return queryInterface.sequelize.query( `UPDATE "${TABLE}" SET ${COLUMN} = upper(substring(MD5(random()::text), 1, 6))` ); + }) + .then(() => { + return queryInterface.addColumn(TABLE, COLUMN2, { + type: Sequelize.DOUBLE, + defaultValue: 0 + }); }), down: (queryInterface, Sequelize) => queryInterface.removeColumn(TABLE, COLUMN) diff --git a/db/migrations/20181205090309-change-user-verification-data.js b/server/db/migrations/20181205090309-change-user-verification-data.js similarity index 100% rename from db/migrations/20181205090309-change-user-verification-data.js rename to server/db/migrations/20181205090309-change-user-verification-data.js diff --git a/db/migrations/20181206060319-change-bank-account-to-array.js b/server/db/migrations/20181206060319-change-bank-account-to-array.js similarity index 100% rename from db/migrations/20181206060319-change-bank-account-to-array.js rename to server/db/migrations/20181206060319-change-bank-account-to-array.js diff --git a/db/migrations/20181228044616-add-note-iddata.js b/server/db/migrations/20181228044616-add-note-iddata.js similarity index 100% rename from db/migrations/20181228044616-add-note-iddata.js rename to server/db/migrations/20181228044616-add-note-iddata.js diff --git a/db/migrations/20190307151159-create-audit.js b/server/db/migrations/20190307151159-create-audit.js similarity index 100% rename from db/migrations/20190307151159-create-audit.js rename to server/db/migrations/20190307151159-create-audit.js diff --git a/db/migrations/20190315033608-user-settings-update.js b/server/db/migrations/20190315033608-user-settings-update.js similarity index 100% rename from db/migrations/20190315033608-user-settings-update.js rename to server/db/migrations/20190315033608-user-settings-update.js diff --git a/db/migrations/20190315060940-user-settings-remove-old-fields.js b/server/db/migrations/20190315060940-user-settings-remove-old-fields.js similarity index 100% rename from db/migrations/20190315060940-user-settings-remove-old-fields.js rename to server/db/migrations/20190315060940-user-settings-remove-old-fields.js diff --git a/db/migrations/20190707074538-change-crypto-address-key.js b/server/db/migrations/20190707074538-change-crypto-address-key.js similarity index 100% rename from db/migrations/20190707074538-change-crypto-address-key.js rename to server/db/migrations/20190707074538-change-crypto-address-key.js diff --git a/db/migrations/20190825082419-create-status.js b/server/db/migrations/20190825082419-create-status.js similarity index 77% rename from db/migrations/20190825082419-create-status.js rename to server/db/migrations/20190825082419-create-status.js index 6a5871f212..1e25b4580e 100644 --- a/db/migrations/20190825082419-create-status.js +++ b/server/db/migrations/20190825082419-create-status.js @@ -11,10 +11,6 @@ module.exports = { primaryKey: true, type: Sequelize.INTEGER }, - name: { - type: Sequelize.STRING, - allowNull: true - }, activated: { type: Sequelize.BOOLEAN, defaultValue: false, @@ -34,6 +30,26 @@ module.exports = { type: Sequelize.STRING, allowNull: true }, + constants: { + type: Sequelize.JSONB, + defaultValue: {} + }, + secrets: { + type: Sequelize.JSONB, + defaultValue: {} + }, + kit: { + type: Sequelize.JSONB, + defaultValue: {} + }, + api_key: { + type: Sequelize.STRING, + allowNull: true + }, + api_secret: { + type: Sequelize.STRING, + allowNull: true + }, created_at: { allowNull: false, type: Sequelize.DATE, @@ -43,7 +59,8 @@ module.exports = { allowNull: false, type: Sequelize.DATE, defaultValue: Sequelize.literal('NOW()') - } + }, + }, { timestamps: true, diff --git a/db/migrations/20190828152741-rename-status-table.js b/server/db/migrations/20190828152741-rename-status-table.js similarity index 100% rename from db/migrations/20190828152741-rename-status-table.js rename to server/db/migrations/20190828152741-rename-status-table.js diff --git a/db/migrations/20191124095427-recreate-token.js b/server/db/migrations/20191124095427-recreate-token.js similarity index 97% rename from db/migrations/20191124095427-recreate-token.js rename to server/db/migrations/20191124095427-recreate-token.js index b5372d7eb1..cb9dd7a53d 100644 --- a/db/migrations/20191124095427-recreate-token.js +++ b/server/db/migrations/20191124095427-recreate-token.js @@ -47,7 +47,7 @@ module.exports = { type: { type: Sequelize.STRING, allowNull: false, - defaultValue: TOKEN_TYPES.DEV + defaultValue: TOKEN_TYPES.HMAC }, active: { type: Sequelize.BOOLEAN, diff --git a/db/migrations/20200511023924-create-announcement.js b/server/db/migrations/20200511023924-create-announcement.js similarity index 100% rename from db/migrations/20200511023924-create-announcement.js rename to server/db/migrations/20200511023924-create-announcement.js diff --git a/db/migrations/20171113104500-add-is_admin-user.js b/server/db/migrations/20200907015413-add-user-network_id.js similarity index 74% rename from db/migrations/20171113104500-add-is_admin-user.js rename to server/db/migrations/20200907015413-add-user-network_id.js index d898c33442..86bbddf4e1 100644 --- a/db/migrations/20171113104500-add-is_admin-user.js +++ b/server/db/migrations/20200907015413-add-user-network_id.js @@ -1,13 +1,12 @@ 'use strict'; const TABLE = 'Users'; -const COLUMN = 'is_admin'; +const COLUMN = 'network_id'; module.exports = { up: (queryInterface, Sequelize) => queryInterface.addColumn(TABLE, COLUMN, { - type: Sequelize.BOOLEAN, - defaultValue: false + type: Sequelize.INTEGER }), down: (queryInterface, Sequelize) => queryInterface.removeColumn(TABLE, COLUMN) diff --git a/db/migrations/20180502120259-create-pairs.js b/server/db/migrations/20201014015535-create-tiers.js similarity index 66% rename from db/migrations/20180502120259-create-pairs.js rename to server/db/migrations/20201014015535-create-tiers.js index ecc2fdae2b..2669c81271 100644 --- a/db/migrations/20180502120259-create-pairs.js +++ b/server/db/migrations/20201014015535-create-tiers.js @@ -3,27 +3,33 @@ module.exports = { up: (queryInterface, Sequelize) => { return queryInterface.createTable( - 'Pairs', + 'Tiers', { id: { allowNull: false, - autoIncrement: true, primaryKey: true, type: Sequelize.INTEGER }, name: { - type: Sequelize.STRING, - allowNull: false, - unique: true - }, - pair_base: { type: Sequelize.STRING, allowNull: false }, - pair_2: { + description: { type: Sequelize.STRING, allowNull: false }, + deposit_limit: { + type: Sequelize.DOUBLE, + defaultValue: 0 + }, + withdrawal_limit: { + type: Sequelize.DOUBLE, + defaultValue: 0 + }, + fees: { + type: Sequelize.JSONB, + defaultValue: {} + }, created_at: { allowNull: false, type: Sequelize.DATE, @@ -33,7 +39,8 @@ module.exports = { allowNull: false, type: Sequelize.DATE, defaultValue: Sequelize.literal('NOW()') - } + }, + }, { timestamps: true, @@ -41,5 +48,5 @@ module.exports = { } ); }, - down: (queryInterface, Sequelize) => queryInterface.dropTable('Pairs') + down: (queryInterface) => queryInterface.dropTable('Tiers') }; \ No newline at end of file diff --git a/server/db/migrations/20201022040333-change-is_tech-to-is_communicator.js b/server/db/migrations/20201022040333-change-is_tech-to-is_communicator.js new file mode 100644 index 0000000000..866ad979dc --- /dev/null +++ b/server/db/migrations/20201022040333-change-is_tech-to-is_communicator.js @@ -0,0 +1,12 @@ +'use strict'; + +const TABLE = 'Users'; +const OLD_COLUMN = 'is_tech'; +const NEW_COLUMN = 'is_communicator'; + +module.exports = { + up: (queryInterface, Sequelize) => + queryInterface.renameColumn(TABLE, OLD_COLUMN, NEW_COLUMN), + down: (queryInterface, Sequelize) => + queryInterface.renameColumn(TABLE, NEW_COLUMN, OLD_COLUMN) +}; \ No newline at end of file diff --git a/db/migrations/20180131100300-add-description-deposit.js b/server/db/migrations/20201023055345-add-icon-to-tier.js similarity index 81% rename from db/migrations/20180131100300-add-description-deposit.js rename to server/db/migrations/20201023055345-add-icon-to-tier.js index ae7dc779c4..00e4e3b537 100644 --- a/db/migrations/20180131100300-add-description-deposit.js +++ b/server/db/migrations/20201023055345-add-icon-to-tier.js @@ -1,7 +1,7 @@ 'use strict'; -const TABLE = 'Deposits'; -const COLUMN = 'description'; +const TABLE = 'Tiers'; +const COLUMN = 'icon'; module.exports = { up: (queryInterface, Sequelize) => diff --git a/db/migrations/20170823165400-add-fee-deposits.js b/server/db/migrations/20201026031032-add-kit_version-to-status.js similarity index 68% rename from db/migrations/20170823165400-add-fee-deposits.js rename to server/db/migrations/20201026031032-add-kit_version-to-status.js index 2b703d19f8..afdaad8d0e 100644 --- a/db/migrations/20170823165400-add-fee-deposits.js +++ b/server/db/migrations/20201026031032-add-kit_version-to-status.js @@ -1,13 +1,12 @@ 'use strict'; -const TABLE = 'Deposits'; -const COLUMN = 'fee'; +const TABLE = 'Statuses'; +const COLUMN = 'kit_version'; module.exports = { up: (queryInterface, Sequelize) => queryInterface.addColumn(TABLE, COLUMN, { - type: Sequelize.DOUBLE, - defaultValue: 0 + type: Sequelize.STRING }), down: (queryInterface, Sequelize) => queryInterface.removeColumn(TABLE, COLUMN) diff --git a/db/migrations/20170828080100-add-symbol-orders.js b/server/db/migrations/20201103015833-add-note-to-tiers.js similarity index 71% rename from db/migrations/20170828080100-add-symbol-orders.js rename to server/db/migrations/20201103015833-add-note-to-tiers.js index ed3ce2eb12..bda943248d 100644 --- a/db/migrations/20170828080100-add-symbol-orders.js +++ b/server/db/migrations/20201103015833-add-note-to-tiers.js @@ -1,14 +1,13 @@ 'use strict'; -const TABLE = 'Orders'; -const COLUMN = 'symbol'; +const TABLE = 'Tiers'; +const COLUMN = 'note'; module.exports = { up: (queryInterface, Sequelize) => queryInterface.addColumn(TABLE, COLUMN, { type: Sequelize.STRING, - defaultValue: 'btc', - allowNull: false + defaultValue: '' }), down: (queryInterface, Sequelize) => queryInterface.removeColumn(TABLE, COLUMN) diff --git a/server/db/migrations/20201126102745-create-plugins.js b/server/db/migrations/20201126102745-create-plugins.js new file mode 100644 index 0000000000..7f7416ffca --- /dev/null +++ b/server/db/migrations/20201126102745-create-plugins.js @@ -0,0 +1,92 @@ +'use strict'; + +const TABLE_NAME = 'Plugins'; + +module.exports = { + up: (queryInterface, Sequelize) => { + return queryInterface.createTable(TABLE_NAME, { + id: { + allowNull: false, + autoIncrement: true, + primaryKey: true, + type: Sequelize.INTEGER + }, + version: { + type: Sequelize.INTEGER, + defaultValue: 1 + }, + name: { + type: Sequelize.STRING, + allowNull: false, + unique: true + }, + enabled: { + type: Sequelize.BOOLEAN, + defaultValue: true + }, + author: { + type: Sequelize.STRING + }, + bio: { + type: Sequelize.STRING + }, + description: { + type: Sequelize.STRING + }, + documentation: { + type: Sequelize.STRING + }, + logo: { + type: Sequelize.STRING + }, + icon: { + type: Sequelize.STRING + }, + url: { + type: Sequelize.STRING + }, + meta: { + type: Sequelize.JSONB, + defaultValue: {} + }, + prescript: { + type: Sequelize.JSONB, + defaultValue: { + install: [], + run: null + } + }, + postscript: { + type: Sequelize.JSONB, + defaultValue: { + run: null + } + }, + script: { + type: Sequelize.TEXT, + allowNull: false + }, + admin_view: { + type: Sequelize.TEXT + }, + web_view: { + type: Sequelize.TEXT + }, + created_at: { + allowNull: false, + type: Sequelize.DATE, + defaultValue: Sequelize.literal('NOW()') + }, + updated_at: { + allowNull: false, + type: Sequelize.DATE, + defaultValue: Sequelize.literal('NOW()') + } + }, + { + timestamps: true, + underscored: true + }); + }, + down: (queryInterface) => queryInterface.dropTable(TABLE_NAME) +}; \ No newline at end of file diff --git a/db/models/affiliation.js b/server/db/models/affiliation.js similarity index 100% rename from db/models/affiliation.js rename to server/db/models/affiliation.js diff --git a/db/models/audit.js b/server/db/models/audit.js similarity index 100% rename from db/models/audit.js rename to server/db/models/audit.js diff --git a/db/models/index.js b/server/db/models/index.js similarity index 70% rename from db/models/index.js rename to server/db/models/index.js index ccc4a3c842..2d5d7af6d0 100644 --- a/db/models/index.js +++ b/server/db/models/index.js @@ -20,26 +20,14 @@ model = sequelize.import('affiliation', require('./affiliation')); db[model.name] = model; model = sequelize.import('audit', require('./audit')); db[model.name] = model; -model = sequelize.import('balance', require('./balance')); -db[model.name] = model; -model = sequelize.import('coin', require('./coin')); -db[model.name] = model; -model = sequelize.import('deposit', require('./deposit')); -db[model.name] = model; model = sequelize.import('login', require('./login')); db[model.name] = model; -model = sequelize.import('order', require('./order')); -db[model.name] = model; model = sequelize.import('otpCode', require('./otpCode')); db[model.name] = model; -model = sequelize.import('pair', require('./pair')); -db[model.name] = model; model = sequelize.import('resetPasswordCode', require('./resetPasswordCode')); db[model.name] = model; model = sequelize.import('token', require('./token')); db[model.name] = model; -model = sequelize.import('trade', require('./trade')); -db[model.name] = model; model = sequelize.import('user', require('./user')); db[model.name] = model; model = sequelize.import('verificationCode', require('./verificationCode')); @@ -48,9 +36,9 @@ model = sequelize.import('verificationImage', require('./verificationImage')); db[model.name] = model; model = sequelize.import('status', require('./status')); db[model.name] = model; -model = sequelize.import('fee', require('./fee')); +model = sequelize.import('tier', require('./tier')); db[model.name] = model; -model = sequelize.import('announcement', require('./announcement')); +model = sequelize.import('plugin', require('./plugin')); db[model.name] = model; Object.keys(db).forEach(function(modelName) { diff --git a/db/models/login.js b/server/db/models/login.js similarity index 100% rename from db/models/login.js rename to server/db/models/login.js diff --git a/db/models/otpCode.js b/server/db/models/otpCode.js similarity index 100% rename from db/models/otpCode.js rename to server/db/models/otpCode.js diff --git a/server/db/models/plugin.js b/server/db/models/plugin.js new file mode 100644 index 0000000000..583f5890bc --- /dev/null +++ b/server/db/models/plugin.js @@ -0,0 +1,70 @@ +'use strict'; +module.exports = (sequelize, DataTypes) => { + const Plugin = sequelize.define('Plugin', { + version: { + type: DataTypes.INTEGER, + defaultValue:1 + }, + name: { + type: DataTypes.STRING, + allowNull: false + }, + enabled: { + type: DataTypes.BOOLEAN, + defaultValue: true + }, + author: { + type: DataTypes.STRING + }, + bio: { + type: DataTypes.STRING + }, + description: { + type: DataTypes.STRING + }, + documentation: { + type: DataTypes.STRING + }, + logo: { + type: DataTypes.STRING + }, + icon: { + type: DataTypes.STRING + }, + url: { + type: DataTypes.STRING + }, + meta: { + type: DataTypes.JSONB, + defaultValue: {} + }, + prescript: { + type: DataTypes.JSONB, + defaultValue: { + install: [], + run: null + } + }, + postscript: { + type: DataTypes.JSONB, + defaultValue: { + run: null + } + }, + script: { + type: DataTypes.TEXT, + allowNull: false + }, + admin_view: { + type: DataTypes.TEXT + }, + web_view: { + type: DataTypes.TEXT + } + }, { + timestamps: true, + underscored: true + }); + + return Plugin; +}; \ No newline at end of file diff --git a/db/models/resetPasswordCode.js b/server/db/models/resetPasswordCode.js similarity index 100% rename from db/models/resetPasswordCode.js rename to server/db/models/resetPasswordCode.js diff --git a/db/models/status.js b/server/db/models/status.js similarity index 79% rename from db/models/status.js rename to server/db/models/status.js index 44a7b31f3e..8631d8f338 100644 --- a/db/models/status.js +++ b/server/db/models/status.js @@ -4,10 +4,6 @@ module.exports = function(sequelize, DataTypes) { const Status = sequelize.define( 'Status', { - name: { - type: DataTypes.STRING, - allowNull: true - }, activated: { type: DataTypes.BOOLEAN, defaultValue: false, @@ -27,13 +23,25 @@ module.exports = function(sequelize, DataTypes) { type: DataTypes.STRING, allowNull: true }, - url: { - type: DataTypes.STRING, - allowNull: true + secrets: { + type: DataTypes.JSONB, + defaultValue: {} }, - constants: { + kit: { type: DataTypes.JSONB, defaultValue: {} + }, + api_key: { + type: DataTypes.STRING, + allowNull: true + }, + api_secret: { + type: DataTypes.STRING, + allowNull: true + }, + kit_version: { + type: DataTypes.STRING, + allowNull: true } }, { diff --git a/server/db/models/tier.js b/server/db/models/tier.js new file mode 100644 index 0000000000..4eb8043ee1 --- /dev/null +++ b/server/db/models/tier.js @@ -0,0 +1,47 @@ +'use strict'; + +module.exports = function(sequelize, DataTypes) { + const Tier = sequelize.define( + 'Tier', + { + id: { + allowNull: false, + primaryKey: true, + type: DataTypes.INTEGER + }, + name: { + type: DataTypes.STRING, + allowNull: false + }, + icon: { + type: DataTypes.STRING, + defaultValue: '' + }, + description: { + type: DataTypes.STRING, + allowNull: false + }, + deposit_limit: { + type: DataTypes.DOUBLE, + defaultValue: 0 + }, + withdrawal_limit: { + type: DataTypes.DOUBLE, + defaultValue: 0 + }, + fees: { + type: DataTypes.JSONB, + defaultValue: {} + }, + note: { + type: DataTypes.STRING, + defaultValue: '' + } + }, + { + underscored: true + } + ); + + return Tier; +}; diff --git a/db/models/token.js b/server/db/models/token.js similarity index 96% rename from db/models/token.js rename to server/db/models/token.js index 6a55e1b591..83e9a75a7b 100644 --- a/db/models/token.js +++ b/server/db/models/token.js @@ -25,7 +25,7 @@ module.exports = function(sequelize, DataTypes) { type: { type: DataTypes.STRING, allowNull: false, - defaultValue: TOKEN_TYPES.NORMAL + defaultValue: TOKEN_TYPES.HMAC }, name: { type: DataTypes.STRING, diff --git a/db/models/user.js b/server/db/models/user.js similarity index 88% rename from db/models/user.js rename to server/db/models/user.js index f4f61c73db..18713d8006 100644 --- a/db/models/user.js +++ b/server/db/models/user.js @@ -60,10 +60,6 @@ module.exports = function(sequelize, DataTypes) { type: DataTypes.STRING, defaultValue: '' }, - name_verified: { - type: DataTypes.BOOLEAN, - defaultValue: false - }, gender: { type: DataTypes.BOOLEAN, defaultValue: false @@ -150,21 +146,16 @@ module.exports = function(sequelize, DataTypes) { type: DataTypes.BOOLEAN, defaultValue: false }, - is_tech: { + is_communicator: { type: DataTypes.BOOLEAN, defaultValue: false }, - custom_fee: { - type: DataTypes.BOOLEAN, - defaultValue: false - }, affiliation_rate: { type: DataTypes.DOUBLE, - defaultValue: 0 + defaultValue: 0 }, - discount: { - type: DataTypes.DOUBLE, - defaultValue: 0 + network_id: { + type: DataTypes.INTEGER } }, { @@ -192,11 +183,6 @@ module.exports = function(sequelize, DataTypes) { }); User.associate = (models) => { - User.hasOne(models.Balance, { - foreignKey: 'user_id', - as: 'balance' - }); - User.hasMany(models.Deposit); User.hasMany(models.Token); User.hasMany(models.VerificationCode); // User.hasMany(models.VerificationImage); @@ -212,13 +198,6 @@ module.exports = function(sequelize, DataTypes) { User.hasMany(models.Affiliation, { foreignKey: 'referer_id' }); - User.hasMany(models.Order); - User.hasMany(models.Trade, { - foreignKey: 'maker_id' - }); - User.hasMany(models.Trade, { - foreignKey: 'taker_id' - }); }; return User; diff --git a/db/models/verificationCode.js b/server/db/models/verificationCode.js similarity index 100% rename from db/models/verificationCode.js rename to server/db/models/verificationCode.js diff --git a/db/models/verificationImage.js b/server/db/models/verificationImage.js similarity index 100% rename from db/models/verificationImage.js rename to server/db/models/verificationImage.js diff --git a/server/db/pubsub.js b/server/db/pubsub.js new file mode 100644 index 0000000000..8572fae8b0 --- /dev/null +++ b/server/db/pubsub.js @@ -0,0 +1,29 @@ +'use strict'; +const redis = require('redis'); +const config = require('../config/redis'); +const { loggerRedis } = require('../config/logger'); +const client = redis.createClient(config.pubsub); + +client.on('ready', () => { + if (loggerRedis) loggerRedis.info('PubSub is ready'); +}); + +client.on('connect', () => { + if (loggerRedis) loggerRedis.verbose('Connect to PubSub'); + if (config.pubsub.password) { + client.auth(config.pubsub.password, () => { + if (loggerRedis) loggerRedis.verbose('Authenticated to PubSub'); + }); + } +}); + +client.on('error', (err) => { + if (loggerRedis) loggerRedis.error('PUBSUBS', err.message); + if (loggerRedis) loggerRedis.error(err); + process.exit(0); +}); + +module.exports = { + publisher: client.duplicate(), + subscriber: client.duplicate() +}; \ No newline at end of file diff --git a/server/db/redis.js b/server/db/redis.js new file mode 100644 index 0000000000..897f5f0ffe --- /dev/null +++ b/server/db/redis.js @@ -0,0 +1,33 @@ +'use strict'; + +const { promisifyAll } = require('bluebird'); +const redis = require('redis'); +const config = require('../config/redis'); +const { loggerRedis } = require('../config/logger'); + +promisifyAll(redis.RedisClient.prototype); +promisifyAll(redis.Multi.prototype); + +const client = redis.createClient(config.client); + +client.on('ready', () => { + if (loggerRedis) loggerRedis.info('Redis is ready'); +}); + +client.on('connect', () => { + if (loggerRedis) loggerRedis.verbose('Connect to redis'); + if (config.client.password) { + client.auth(config.client.password, () => { + if (loggerRedis) loggerRedis.verbose('Authenticated to redis'); + }); + } +}); + +client.on('error', (err) => { + if (loggerRedis) loggerRedis.error('REDIS', err.message); + if (loggerRedis) loggerRedis.error(err); + process.exit(0); +}); + + +module.exports = client; diff --git a/server/db/seeders/20190825120350-add-status.js b/server/db/seeders/20190825120350-add-status.js new file mode 100644 index 0000000000..a80862ac0f --- /dev/null +++ b/server/db/seeders/20190825120350-add-status.js @@ -0,0 +1,133 @@ +'use strict'; + +const rp = require('request-promise'); + +const { + API_NAME, + API_HOST, + LOGO_IMAGE, + EMAILS_TIMEZONE, + VALID_LANGUAGES, + NEW_USER_DEFAULT_LANGUAGE, + SENDER_EMAIL, + DEFAULT_THEME, + NEW_USER_IS_ACTIVATED, + SMTP_SERVER, + SMTP_PORT, + SMTP_USER, + SMTP_PASSWORD, + SEND_EMAIL_TO_SUPPORT, + ALLOWED_DOMAINS, + CAPTCHA_SECRET_KEY, + ADMIN_EMAIL, + CAPTCHA_SITE_KEY, + ADMIN_WHITELIST_IP, + ACTIVATION_CODE, + NATIVE_CURRENCY, + API_KEY, + API_SECRET, + KIT_VERSION +} = process.env; + +const { + HOLLAEX_NETWORK_ENDPOINT, + HOLLAEX_NETWORK_BASE_URL, + HOLLAEX_NETWORK_PATH_ACTIVATE +} = require('../../constants'); + +const checkActivation = (activation_code) => { + const body = { + activation_code + }; + + const options = { + method: 'POST', + body, + uri: `${HOLLAEX_NETWORK_ENDPOINT}${HOLLAEX_NETWORK_BASE_URL}${HOLLAEX_NETWORK_PATH_ACTIVATE}`, + json: true + }; + return rp(options); +}; + +const TABLE = 'Statuses'; + +module.exports = { + up: (queryInterface) => { + return checkActivation(ACTIVATION_CODE) + .then((exchange) => { + const status = [{ + kit: JSON.stringify({ + api_name: API_NAME || '', + description: '', + color: {}, + interface: {}, + icons: {}, + strings: {}, + title: '', + links: { + twitter: '', + instagram: '', + telegram: '', + facebook: '', + linkedin: '', + github: '', + contact: '', + helpdesk: '', + terms: '', + privacy: '', + api: API_HOST || '', + whitepaper: '', + website: '', + information: '', + }, + setup_completed: false, + native_currency: NATIVE_CURRENCY || exchange.coins[0].symbol, + logo_image: LOGO_IMAGE || 'https://dash.testnet.bitholla.com/assets/img/hex-pattern-icon-black-01.svg', + valid_languages: VALID_LANGUAGES || 'en,fa,ko,ar,fr', + new_user_is_activated: (NEW_USER_IS_ACTIVATED && NEW_USER_IS_ACTIVATED === 'true') || false, + captcha: { + site_key: CAPTCHA_SITE_KEY + }, + defaults: { + language: NEW_USER_DEFAULT_LANGUAGE || 'en', + theme: DEFAULT_THEME || 'white' + }, + features: {}, + meta: {} + }), + secrets: JSON.stringify({ + allowed_domains: ALLOWED_DOMAINS ? ALLOWED_DOMAINS.split(',') : [], + admin_whitelist: ADMIN_WHITELIST_IP ? ADMIN_WHITELIST_IP.split(',') : [], + security: { + token_time: '24h', + withdrawal_token_expiry: 300000 + }, + emails: { + timezone: EMAILS_TIMEZONE || '', + send_email_to_support: (SEND_EMAIL_TO_SUPPORT && SEND_EMAIL_TO_SUPPORT === 'true') || false, + sender: SENDER_EMAIL || '', + audit: ADMIN_EMAIL || '' + }, + captcha: { + secret_key: CAPTCHA_SECRET_KEY + }, + smtp: { + server: SMTP_SERVER || '', + port: SMTP_PORT || 587, + user: SMTP_USER, + password: SMTP_PASSWORD + } + }), + activation_code: ACTIVATION_CODE, + initialized: false, + api_key: API_KEY, + api_secret: API_SECRET, + kit_version: KIT_VERSION + }]; + queryInterface.bulkInsert(TABLE, status, {}); + }); + }, + down: (queryInterface) => { + return queryInterface.bulkDelete(TABLE); + } +}; \ No newline at end of file diff --git a/server/db/seeders/20201014074533-add-tiers.js b/server/db/seeders/20201014074533-add-tiers.js new file mode 100644 index 0000000000..90c69fa0bc --- /dev/null +++ b/server/db/seeders/20201014074533-add-tiers.js @@ -0,0 +1,83 @@ +'use strict'; + +const rp = require('request-promise'); + +const { + HOLLAEX_NETWORK_ENDPOINT, + HOLLAEX_NETWORK_BASE_URL, + HOLLAEX_NETWORK_PATH_ACTIVATE +} = require('../../constants'); + +const checkActivation = (activation_code) => { + const body = { + activation_code + }; + + const options = { + method: 'POST', + body, + uri: `${HOLLAEX_NETWORK_ENDPOINT}${HOLLAEX_NETWORK_BASE_URL}${HOLLAEX_NETWORK_PATH_ACTIVATE}`, + json: true + }; + return rp(options); +}; + +const TABLE = 'Tiers'; + +module.exports = { + up: (queryInterface) => { + return checkActivation(process.env.ACTIVATION_CODE) + .then((exchange) => { + let makerFee = 0.3; + let takerFee = 0.3; + + if (exchange.collateral_level === 'zero') { + makerFee = 0.3; + takerFee = 0.3; + } else if (exchange.collateral_level === 'lite') { + makerFee = 0.1; + takerFee = 0.2; + } else if (exchange.collateral_level === 'member') { + makerFee = 0; + takerFee = 0.05; + } + + const tiers = [ + { + id: 1, + name: 'basic', + description: 'basic tier', + icon: '', + deposit_limit: 0, + withdrawal_limit: 0, + fees: JSON.stringify({ + maker: { + default: makerFee + }, + taker: { + default: takerFee + } + }) + }, + { + id: 2, + name: 'vip', + description: 'vip tier', + deposit_limit: 0, + icon: '', + withdrawal_limit: 0, + fees: JSON.stringify({ + maker: { + default: makerFee + }, + taker: { + default: takerFee + } + }) + } + ]; + queryInterface.bulkInsert(TABLE, tiers, {}); + }); + }, + down: (queryInterface) => queryInterface.bulkDelete(TABLE) +}; diff --git a/server/db/seedsHelper.js b/server/db/seedsHelper.js new file mode 100644 index 0000000000..efb6c50c54 --- /dev/null +++ b/server/db/seedsHelper.js @@ -0,0 +1,44 @@ +'use strict'; + +const { + generateHashSync, + generateAffiliationCode +} = require('../utils/security'); + +const generateUserObject = ({ + email, + password, + is_admin, + is_supervisor, + is_support, + is_kyc, + ...rest +}) => { + const now = new Date(); + + return { + email, + password: generateHashSync(password), + full_name: '', + gender: false, + nationality: '', + phone_number: '', + activated: true, + is_admin: is_admin || false, + is_supervisor: is_supervisor || false, + is_support: is_support || false, + is_kyc: is_kyc || false, + username: email.toLowerCase().substr(0, email.indexOf('@')), + affiliation_code: generateAffiliationCode(), + created_at: now, + updated_at: now, + ...rest + }; +}; + +const generateOptionsObject = ({ email }) => ({ email }); + +module.exports = { + generateUserObject, + generateOptionsObject +}; \ No newline at end of file diff --git a/server/db/triggers/create_verification-code_after_user.js b/server/db/triggers/create_verification-code_after_user.js new file mode 100644 index 0000000000..9486fa2ec6 --- /dev/null +++ b/server/db/triggers/create_verification-code_after_user.js @@ -0,0 +1,23 @@ +const sql = ` +CREATE EXTENSION IF NOT EXISTS "uuid-ossp"; + +CREATE OR REPLACE FUNCTION create_verificationcode_after_user() +RETURNS TRIGGER AS $create_verificationcode_after_user$ +BEGIN + INSERT INTO "VerificationCodes" + ("id","user_id","code","created_at","updated_at") + VALUES + (DEFAULT,new.id,uuid_generate_v4(),current_timestamp,current_timestamp); + RETURN NEW; +END; +$create_verificationcode_after_user$ LANGUAGE plpgsql; + +DROP TRIGGER IF EXISTS create_verificationcode_after_user +ON "Users"; + +CREATE TRIGGER create_verificationcode_after_user +AFTER INSERT ON "Users" +FOR EACH ROW EXECUTE PROCEDURE create_verificationcode_after_user(); +`; + +module.exports = sql; \ No newline at end of file diff --git a/server/db/triggers/update_userlevel_after_verify.js b/server/db/triggers/update_userlevel_after_verify.js new file mode 100644 index 0000000000..374113de60 --- /dev/null +++ b/server/db/triggers/update_userlevel_after_verify.js @@ -0,0 +1,22 @@ +const sql = ` +CREATE OR REPLACE FUNCTION update_userlevel_after_verify() +RETURNS TRIGGER AS $update_userlevel_after_verify$ +BEGIN + IF new.verified IS TRUE THEN + UPDATE "Users" + SET verification_level = 1, updated_at = current_timestamp + WHERE id = new.user_id; + END IF; + RETURN NEW; +END; +$update_userlevel_after_verify$ LANGUAGE plpgsql; + +DROP TRIGGER IF EXISTS update_userlevel_after_verify +ON "VerificationCodes"; + +CREATE TRIGGER update_userlevel_after_verify +AFTER UPDATE ON "VerificationCodes" +FOR EACH ROW EXECUTE PROCEDURE update_userlevel_after_verify(); +`; + +module.exports = sql; diff --git a/server/docker-compose.yaml b/server/docker-compose.yaml new file mode 100644 index 0000000000..7837fecedf --- /dev/null +++ b/server/docker-compose.yaml @@ -0,0 +1,78 @@ +version: '3' +services: + hollaex-kit-redis: + image: redis:5.0.5-alpine + depends_on: + - hollaex-kit-db + networks: + - hollaex-kit-network + ports: + - 6379:6379 + environment: + - REDIS_PASSWORD=bitholla + command : ["sh", "-c", "redis-server --requirepass $${REDIS_PASSWORD}"] + hollaex-kit-db: + image: postgres:10.9 + ports: + - 5432:5432 + environment: + - POSTGRES_DB=hollaex + - POSTGRES_USER=admin + - POSTGRES_PASSWORD=root + networks: + - hollaex-kit-network + hollaex-kit-server: + image: hollaex-kit-server + ports: + - 10010:10010 + - 10011:10011 + build: + context: . + dockerfile: ./tools/Dockerfile.pm2 + env_file: + - ./tools/hollaex-kit.env.local + entrypoint: + - pm2-runtime + - start + - ecosystem.config.js + - --env + - development + volumes: + - ./api:/app/api + - ./config:/app/config + - ./db:/app/db + - ./plugins.js:/app/plugins.js + - ./mail:/app/mail + - ./ws:/app/ws + - ./app.js:/app/app.js + - ./ecosystem.config.js:/app/ecosystem.config.js + - ./constants.js:/app/constants.js + - ./messages.js:/app/messages.js + - ./logs:/app/logs + - ./test:/app/test + - ./tools:/app/tools + - ./utils:/app/utils + - ./init.js:/app/init.js + depends_on: + - hollaex-kit-db + - hollaex-kit-redis + networks: + - hollaex-kit-network + hollaex-kit-nginx: + image: nginx:1.15.8-alpine + volumes: + - ./tools/nginx:/etc/nginx + - ./tools/nginx/conf.d:/etc/nginx/conf.d + - ./tools/nginx/logs:/var/log + - ./tools/nginx/static:/usr/share/nginx/html + ports: + - 80:80 + environment: + - NGINX_PORT=80 + depends_on: + - hollaex-kit-server + networks: + - hollaex-kit-network + +networks: + hollaex-kit-network: \ No newline at end of file diff --git a/server/ecosystem.config.js b/server/ecosystem.config.js new file mode 100644 index 0000000000..22983e8853 --- /dev/null +++ b/server/ecosystem.config.js @@ -0,0 +1,82 @@ +const watch = process.env.NODE_ENV === 'production' ? false : true; +const ignore_watch = ['logs', 'node_modules', 'tools', 'db/functions', 'db/triggers', 'storage']; +const max_memory_restart = '4000M'; +const node_args = ['--max_old_space_size=4096']; +const mode = process.env.DEPLOYMENT_MODE || 'all'; +const { initializeMode } = require('./utils'); + +const api = { + name : 'api', + script : 'app.js', + error_file: '/dev/null', + out_file: '/dev/null', + watch, + ignore_watch, + exec_mode : 'cluster', + instance_var: 'INSTANCE_ID', + instances : '1', + max_memory_restart, + node_args, + env: { + COMMON_VARIABLE: 'true', + PORT: process.env.PORT || 10010, + } +}; + +const ws = { + // ws application + name : 'ws', + script : 'ws/index.js', + error_file: '/dev/null', + out_file: '/dev/null', + watch, + ignore_watch: ignore_watch.concat(['tools', 'queue']), + max_memory_restart, + node_args, + env: { + COMMON_VARIABLE: 'true', + PORT: process.env.WEBSOCKET_PORT || 10080, + } +}; + +const plugins = { + // plugins application + name : 'plugins', + script : 'plugins.js', + error_file: '/dev/null', + out_file: '/dev/null', + watch, + ignore_watch, + exec_mode : 'cluster', + instance_var: 'INSTANCE_ID', + instances : '1', + max_memory_restart, + node_args, + env: { + COMMON_VARIABLE: 'true', + PORT: process.env.PLUGIN_PORT || 10011, + } +}; + +var apps = []; +const modes = initializeMode(mode); +for (let m of modes) { + if (m === 'all') { + apps = [api, ws, plugins]; + break; + } else if (m === 'api') { + apps.push(api); + } else if (m === 'ws') { + apps.push(ws); + } else if (m === 'plugins') { + apps.push(plugins); + } +} + +module.exports = { + /** + * Application configuration section + * http://pm2.keymetrics.io/docs/usage/application-declaration/ + */ + apps +}; diff --git a/server/entrypoint.sh b/server/entrypoint.sh new file mode 100755 index 0000000000..c042848553 --- /dev/null +++ b/server/entrypoint.sh @@ -0,0 +1,12 @@ +#!/bin/bash + +echo $1 +if [ "$1" == 'api' ]; then + pm2-runtime start ecosystem.config.js --env production --only server +elif [ "$1" == 'stream' ]; then + pm2-runtime start ecosystem.config.js --env production --only stream +elif [ "$1" == 'plugins' ]; then + pm2-runtime start ecosystem.config.js --env production --only plugins +else + pm2-runtime start ecosystem.config.js --env production +fi diff --git a/server/init.js b/server/init.js new file mode 100644 index 0000000000..d8d63acd9a --- /dev/null +++ b/server/init.js @@ -0,0 +1,210 @@ +'use strict'; + +const { Network } = require('hollaex-node-lib'); +const { all } = require('bluebird'); +const rp = require('request-promise'); +const { loggerInit } = require('./config/logger'); +const { User, Status, Tier } = require('./db/models'); + +const { subscriber, publisher } = require('./db/pubsub'); +const { + INIT_CHANNEL, + CONFIGURATION_CHANNEL, + WS_HUB_CHANNEL, + HOLLAEX_NETWORK_ENDPOINT, + HOLLAEX_NETWORK_BASE_URL, + HOLLAEX_NETWORK_PATH_ACTIVATE +} = require('./constants'); +const { each } = require('lodash'); + +let nodeLib; + +const getNodeLib = () => nodeLib; + +subscriber.on('message', (channel, message) => { + if (channel === INIT_CHANNEL) { + const { type } = JSON.parse(message); + switch(type) { + case 'refreshInit': + checkStatus(); + publisher.publish( + WS_HUB_CHANNEL, + JSON.stringify({ action: 'restart' }) + ); + break; + default: + break; + } + } + return; +}); + +subscriber.subscribe(INIT_CHANNEL); + +const checkStatus = () => { + loggerInit.verbose('init/checkStatus', 'checking exchange status'); + + let configuration = { + coins: {}, + pairs: {}, + tiers: {}, + kit: { + info: {}, + color: {}, + interface: {}, + icons: {}, + links: {}, + strings: {}, + captcha: {}, + defaults: {}, + features: {}, + meta: {} + } + }; + + let secrets = { + security: {}, + accounts: {}, + captcha: {}, + emails: {}, + smtp: {} + }; + + let frozenUsers = {}; + + return Status.findOne({}) + .then((status) => { + loggerInit.info('init/checkStatus'); + if (!status) { + stop(); + throw new Error('Exchange is not initialized yet'); + } else if (status.blocked) { + stop(); + throw new Error('Exchange is locked'); + } else if (!status.activation_code) { + stop(); + throw new Error('Exchange activation code is not set'); + } else if (!status.api_key || !status.api_secret) { + stop(); + throw new Error('Exchange keys are not set.'); + } else if (!status.activated) { + stop(); + throw new Error('Exchange is expired'); + } else { + secrets = status.secrets; + configuration.kit = status.kit; + return all([ + checkActivation( // added kit + status.name, + status.url, + status.activation_code, + status.kit_version, + status.constants, + status.kit + ), + Tier.findAll({ raw: true }), + status.dataValues + ]); + } + }) + .then(([exchange, tiers, status]) => { + loggerInit.info('init/checkStatus/activation', exchange.name, exchange.active); + each(tiers, (tier) => { + configuration.tiers[tier.id] = tier; + }); + each(exchange.coins, (coin) => { + configuration.coins[coin.symbol] = coin; + }); + each(exchange.pairs, (pair) => { + configuration.pairs[pair.name] = pair; + }); + configuration.kit.info = { + name: exchange.name, + active: exchange.active, + url: exchange.url, + is_trial: exchange.is_trial, + created_at: exchange.created_at, + expiry: exchange.expiry, + collateral_level: exchange.collateral_level, + status: true, + initialized: status.initialized + }; + const networkNodeLib = new Network({ + apiUrl: HOLLAEX_NETWORK_ENDPOINT, + baseUrl: HOLLAEX_NETWORK_BASE_URL, + apiKey: status.api_key, + apiSecret: status.api_secret, + exchange_id: exchange.id, + activation_code: exchange.activation_code + }); + + nodeLib = networkNodeLib; + + return all([ + User.findAll({ + where: { + activated: false + } + }), + networkNodeLib + ]); + }) + .then(([ users, networkNodeLib ]) => { + loggerInit.info('init/checkStatus/activation', users.length, 'users deactivated'); + each(users, (user) => { + frozenUsers[user.dataValues.id] = true; + }); + publisher.publish( + CONFIGURATION_CHANNEL, + JSON.stringify({ + type: 'initial', + data: { configuration, secrets, frozenUsers } + }) + ); + loggerInit.info('init/checkStatus/activation complete'); + return networkNodeLib; + }) + .catch((err) => { + let message = 'Initialization failed'; + if (err.message) { + message = err.message; + } + if (err.statusCode && err.statusCode === 402) { + message = err.error.message; + } + loggerInit.error('init/checkStatus Error ', message); + setTimeout(() => { process.exit(1); }, 60 * 1000 * 5); + }); +}; + +const stop = () => { + publisher.publish(CONFIGURATION_CHANNEL, JSON.stringify({ type: 'stop' })); +}; + +const checkActivation = (name, url, activation_code, version, constants = {}, kit = {}) => { + const body = { + name, + url, + activation_code, + constants, + kit + }; + if (version) { + // only sends version if its set + body.version = version; + } + + const options = { + method: 'POST', + body, + uri: `${HOLLAEX_NETWORK_ENDPOINT}${HOLLAEX_NETWORK_BASE_URL}${HOLLAEX_NETWORK_PATH_ACTIVATE}`, + json: true + }; + return rp(options); +}; + +module.exports = { + checkStatus, + checkActivation, + getNodeLib +}; \ No newline at end of file diff --git a/mail/constants.js b/server/mail/constants.js similarity index 100% rename from mail/constants.js rename to server/mail/constants.js diff --git a/mail/index.js b/server/mail/index.js similarity index 69% rename from mail/index.js rename to server/mail/index.js index ae1e171251..f0749d27ba 100644 --- a/mail/index.js +++ b/server/mail/index.js @@ -6,18 +6,20 @@ const { loggerEmail } = require('../config/logger'); const { getValidLanguage } = require('./utils'); const { MAILTYPE } = require('./strings'); const generateMessageContent = require('./templates'); -const { sendSMSDeposit } = require('../plugins/sms/helpers'); -const getStatusText = (status) => { - return status ? 'COMPLETED' : 'PENDING'; -}; -const { GET_CONFIGURATION, DOMAIN } = require('../constants'); -const AUDIT_EMAIL = () => GET_CONFIGURATION().constants.accounts.admin; -const SENDER_EMAIL = () => GET_CONFIGURATION().constants.emails.sender; -const SEND_EMAIL_COPY = () => GET_CONFIGURATION().constants.emails.send_email_to_support; -const API_NAME = () => GET_CONFIGURATION().constants.api_name; +const { GET_KIT_CONFIG, GET_KIT_SECRETS, DOMAIN } = require('../constants'); +const AUDIT_EMAIL = () => GET_KIT_SECRETS().emails.audit; +const SENDER_EMAIL = () => GET_KIT_SECRETS().emails.sender; +const SEND_EMAIL_COPY = () => GET_KIT_SECRETS().emails.send_email_to_support; +const API_NAME = () => GET_KIT_CONFIG().api_name; const SUPPORT_SOURCE = () => `'${API_NAME()} Support <${SENDER_EMAIL()}>'`; const BCC_ADDRESSES = () => SEND_EMAIL_COPY() ? [AUDIT_EMAIL()] : []; -const DEFAULT_LANGUAGE = () => GET_CONFIGURATION().constants.defaults.language; +const DEFAULT_LANGUAGE = () => { + try { + return GET_KIT_CONFIG().defaults.language; + } catch (err) { + return 'en'; + } +}; const sendEmail = ( type, @@ -47,7 +49,10 @@ const sendEmail = ( case MAILTYPE.ACCOUNT_VERIFY: case MAILTYPE.INVALID_ADDRESS: case MAILTYPE.USER_DEACTIVATED: - case MAILTYPE.WITHDRAWAL_REQUEST: { + case MAILTYPE.INVITED_OPERATOR: + case MAILTYPE.WITHDRAWAL_REQUEST: + case MAILTYPE.DEPOSIT: + case MAILTYPE.WITHDRAWAL: { to.BccAddresses = BCC_ADDRESSES(); break; } @@ -56,21 +61,6 @@ const sendEmail = ( to.BccAddresses = BCC_ADDRESSES(); break; } - case MAILTYPE.DEPOSIT: - case MAILTYPE.WITHDRAWAL: { - data.status = getStatusText(data.status); - if (data.phoneNumber && data.status === 'COMPLETED') - sendSMSDeposit( - type, - data.currency, - data.phoneNumber, - data.amount, - formatDate(), - language - ); - to.BccAddresses = BCC_ADDRESSES(); - break; - } case MAILTYPE.ALERT: case MAILTYPE.SUSPICIOUS_DEPOSIT: case MAILTYPE.USER_VERIFICATION: diff --git a/mail/package.json b/server/mail/package.json similarity index 100% rename from mail/package.json rename to server/mail/package.json diff --git a/mail/strings/en.js b/server/mail/strings/en.js similarity index 92% rename from mail/strings/en.js rename to server/mail/strings/en.js index b8aa1f06b1..8ac6c86d39 100644 --- a/mail/strings/en.js +++ b/server/mail/strings/en.js @@ -1,7 +1,7 @@ 'use strict'; -const { GET_CONFIGURATION } = require('../../constants'); -const API_NAME = () => GET_CONFIGURATION().constants.api_name; +const { GET_KIT_CONFIG } = require('../../constants'); +const API_NAME = () => GET_KIT_CONFIG().api_name; const COMMON = { GREETING: (name) => `Dear ${name}`, @@ -273,6 +273,25 @@ const SMS = { `Your ${currency.toUpperCase()} withdrawal for amount ${amount} is confirmed` }; +const INVITEDOPERATOR = { + TITLE: 'Operator Invite', + GREETING: (name) => COMMON.GREETING(name), + BODY: { + CREATED: { + 1: (role, invitingEmail) => `You've been invited as an operator to ${API_NAME()} with the role of ${role} by user ${invitingEmail}.`, + 2: 'Your temporary password is provided below. Make sure to change your password after logging in for security purposes.', + 3: (email) => `Email: ${email}`, + 4: (password) => `Password: ${password}`, + 5: 'Login' + }, + EXISTING: { + 1: (role, invitingEmail) => `Your ${API_NAME()} account has been upgraded to the role of ${role} by user ${invitingEmail}.`, + 2: 'Login' + } + }, + CLOSING: COMMON.CLOSING +}; + module.exports = { FOOTER, COMMON, @@ -293,5 +312,6 @@ module.exports = { CONTACTFORM, USERDEACTIVATED, ALERT, - SMS + SMS, + INVITEDOPERATOR }; diff --git a/mail/strings/es.js b/server/mail/strings/es.js similarity index 100% rename from mail/strings/es.js rename to server/mail/strings/es.js diff --git a/mail/strings/fa.js b/server/mail/strings/fa.js similarity index 93% rename from mail/strings/fa.js rename to server/mail/strings/fa.js index 5a9468fcc5..dc896d3a2c 100644 --- a/mail/strings/fa.js +++ b/server/mail/strings/fa.js @@ -1,7 +1,7 @@ 'use strict'; -const { GET_CONFIGURATION } = require('../../constants'); -const API_NAME = () => GET_CONFIGURATION().constants.api_name; +const { GET_KIT_CONFIG } = require('../../constants'); +const API_NAME = () => GET_KIT_CONFIG().api_name; const COMMON = { GREETING: (name) => `کاربر عزیز ${name}`, @@ -249,6 +249,25 @@ const SMS = { `برداشت ${currency.toUpperCase()} شما با مبلغ ${amount} مورد تایید قرار گرفت.` }; +const INVITEDOPERATOR = { + TITLE: 'Operator Invite', + GREETING: (name) => COMMON.GREETING(name), + BODY: { + CREATED: { + 1: (role, invitingEmail) => `You've been invited as an operator to ${API_NAME()} with the role of ${role} by user ${invitingEmail}.`, + 2: 'Your temporary password is provided below. Make sure to change your password after logging in for security purposes.', + 3: (email) => `Email: ${email}`, + 4: (password) => `Password: ${password}`, + 5: 'Login' + }, + EXISTING: { + 1: (role, invitingEmail) => `Your ${API_NAME()} account has been upgraded to the role of ${role} by user ${invitingEmail}.`, + 2: 'Login' + } + }, + CLOSING: COMMON.CLOSING +}; + module.exports = { FOOTER, COMMON, @@ -266,5 +285,6 @@ module.exports = { USERVERIFICATION, SUSPICIOUSDEPOSIT, CONTACTFORM, - SMS + SMS, + INVITEDOPERATOR }; diff --git a/mail/strings/fr.js b/server/mail/strings/fr.js similarity index 100% rename from mail/strings/fr.js rename to server/mail/strings/fr.js diff --git a/mail/strings/id.js b/server/mail/strings/id.js similarity index 100% rename from mail/strings/id.js rename to server/mail/strings/id.js diff --git a/mail/strings/index.js b/server/mail/strings/index.js similarity index 95% rename from mail/strings/index.js rename to server/mail/strings/index.js index 33421ff0c4..25985d47b6 100644 --- a/mail/strings/index.js +++ b/server/mail/strings/index.js @@ -19,6 +19,7 @@ const MAILTYPE = { USER_VERIFICATION: 'userVerification', USER_DEACTIVATED: 'userDeactivated', INVALID_ADDRESS: 'invalidAddress', + INVITED_OPERATOR: 'invitedOperator', ALERT: 'alert' }; @@ -32,7 +33,7 @@ const languageFile = (lang) => { } } return langFile; -} +}; module.exports = { FORMATDATE, diff --git a/mail/strings/ja.js b/server/mail/strings/ja.js similarity index 100% rename from mail/strings/ja.js rename to server/mail/strings/ja.js diff --git a/mail/strings/ko.js b/server/mail/strings/ko.js similarity index 92% rename from mail/strings/ko.js rename to server/mail/strings/ko.js index 3e89711b12..6df67e0e0a 100644 --- a/mail/strings/ko.js +++ b/server/mail/strings/ko.js @@ -1,7 +1,7 @@ 'use strict'; -const { GET_CONFIGURATION } = require('../../constants'); -const API_NAME = () => GET_CONFIGURATION().constants.api_name; +const { GET_KIT_CONFIG } = require('../../constants'); +const API_NAME = () => GET_KIT_CONFIG().api_name; const COMMON = { GREETING: (name) => `${name}님`, @@ -268,6 +268,25 @@ const SMS = { `Your ${currency.toUpperCase()} withdrawal for amount ${amount} is confirmed` }; +const INVITEDOPERATOR = { + TITLE: 'Operator Invite', + GREETING: (name) => COMMON.GREETING(name), + BODY: { + CREATED: { + 1: (role, invitingEmail) => `You've been invited as an operator to ${API_NAME()} with the role of ${role} by user ${invitingEmail}.`, + 2: 'Your temporary password is provided below. Make sure to change your password after logging in for security purposes.', + 3: (email) => `Email: ${email}`, + 4: (password) => `Password: ${password}`, + 5: 'Login' + }, + EXISTING: { + 1: (role, invitingEmail) => `Your ${API_NAME()} account has been upgraded to the role of ${role} by user ${invitingEmail}.`, + 2: 'Login' + } + }, + CLOSING: COMMON.CLOSING +}; + module.exports = { FOOTER, COMMON, @@ -288,5 +307,6 @@ module.exports = { CONTACTFORM, USERDEACTIVATED, ALERT, - SMS + SMS, + INVITEDOPERATOR }; diff --git a/mail/strings/vi.js b/server/mail/strings/vi.js similarity index 100% rename from mail/strings/vi.js rename to server/mail/strings/vi.js diff --git a/mail/strings/zh.js b/server/mail/strings/zh.js similarity index 100% rename from mail/strings/zh.js rename to server/mail/strings/zh.js diff --git a/mail/templates/accountUpgrade.js b/server/mail/templates/accountUpgrade.js similarity index 100% rename from mail/templates/accountUpgrade.js rename to server/mail/templates/accountUpgrade.js diff --git a/mail/templates/accountVerify.js b/server/mail/templates/accountVerify.js similarity index 100% rename from mail/templates/accountVerify.js rename to server/mail/templates/accountVerify.js diff --git a/mail/templates/alert.js b/server/mail/templates/alert.js similarity index 100% rename from mail/templates/alert.js rename to server/mail/templates/alert.js diff --git a/mail/templates/contactForm.js b/server/mail/templates/contactForm.js similarity index 100% rename from mail/templates/contactForm.js rename to server/mail/templates/contactForm.js diff --git a/mail/templates/deposit.js b/server/mail/templates/deposit.js similarity index 82% rename from mail/templates/deposit.js rename to server/mail/templates/deposit.js index c0030d2e77..b5d976cb17 100644 --- a/mail/templates/deposit.js +++ b/server/mail/templates/deposit.js @@ -1,6 +1,6 @@ 'use strict'; -const { CONFIRMATION, EXPLORERS, CURRENCIES } = require('../../constants'); +const { CONFIRMATION, EXPLORERS, GET_COINS } = require('../../constants'); const fetchMessage = (email, data, language, domain) => { return { @@ -18,15 +18,13 @@ const html = (email, data, language, domain) => {

`; - if (CURRENCIES.includes(data.currency)) { + if (Object.keys(GET_COINS()).includes(data.currency)) { let explorers = ''; - if (EXPLORERS[data.currency]) { - EXPLORERS[data.currency].forEach((explorer) => { - explorers += `
  • ${explorer.name}
  • `; - }); - } + EXPLORERS(data.currency).forEach((explorer) => { + explorers += `
  • ${explorer.name}
  • `; + }); result += `

    @@ -68,7 +66,7 @@ const html = (email, data, language, domain) => { const text = (email, data, language, domain) => { const { DEPOSIT } = require('../strings').languageFile(language); let result = `${DEPOSIT.GREETING(email)}`; - if (CURRENCIES.includes(data.currency)) { + if (Object.keys(GET_COINS()).includes(data.currency)) { result += ` ${DEPOSIT.BODY[data.status]( data.amount, diff --git a/mail/templates/depositCancel.js b/server/mail/templates/depositCancel.js similarity index 100% rename from mail/templates/depositCancel.js rename to server/mail/templates/depositCancel.js diff --git a/mail/templates/helpers/common.js b/server/mail/templates/helpers/common.js similarity index 87% rename from mail/templates/helpers/common.js rename to server/mail/templates/helpers/common.js index bd1460bc90..b8f742fe5d 100644 --- a/mail/templates/helpers/common.js +++ b/server/mail/templates/helpers/common.js @@ -5,10 +5,10 @@ const { BITHOLLA_LOGO_BLACK, EMAIL_ICONS } = require('../../constants'); -const { DOMAIN, GET_CONFIGURATION } = require('../../../constants'); -const LOGO_PATH = () => GET_CONFIGURATION().constants.logo_path; -const DEFAULT_LANGUAGE = () => GET_CONFIGURATION().constants.defaults.language; -const LINKS = () => GET_CONFIGURATION().constants.links; +const { DOMAIN, GET_KIT_CONFIG } = require('../../../constants'); +const LOGO_IMAGE = () => GET_KIT_CONFIG().logo_image; +const DEFAULT_LANGUAGE = () => GET_KIT_CONFIG().defaults.language; +const LINKS = () => GET_KIT_CONFIG().links; const styles = require('./styles'); @@ -49,7 +49,7 @@ const footerTemplate = (language = DEFAULT_LANGUAGE(), domain = DOMAIN) => { const RTL = 'direction: rtl;'; -const LOGO_TEMPLATE = ({ domain = DOMAIN, logoPath = LOGO_PATH() }) => ` +const LOGO_TEMPLATE = ({ domain = DOMAIN, logoPath = LOGO_IMAGE() }) => `

    diff --git a/mail/templates/helpers/payloadTemplate.js b/server/mail/templates/helpers/payloadTemplate.js similarity index 100% rename from mail/templates/helpers/payloadTemplate.js rename to server/mail/templates/helpers/payloadTemplate.js diff --git a/mail/templates/helpers/styles.js b/server/mail/templates/helpers/styles.js similarity index 100% rename from mail/templates/helpers/styles.js rename to server/mail/templates/helpers/styles.js diff --git a/mail/templates/index.js b/server/mail/templates/index.js similarity index 76% rename from mail/templates/index.js rename to server/mail/templates/index.js index 98fd9d740f..d1c5218cf4 100644 --- a/mail/templates/index.js +++ b/server/mail/templates/index.js @@ -1,10 +1,10 @@ 'use strict'; -const { DOMAIN, GET_CONFIGURATION } = require('../../constants'); -const DEFAULT_LANGUAGE = () => GET_CONFIGURATION().constants.defaults.language; -const API_NAME = () => GET_CONFIGURATION().constants.api_name; +const { DOMAIN, GET_KIT_CONFIG } = require('../../constants'); +const DEFAULT_LANGUAGE = () => GET_KIT_CONFIG().defaults.language; +const API_NAME = () => GET_KIT_CONFIG().api_name; const { TemplateEmail } = require('./helpers/common'); -const { MAILTYPE } = require('../strings'); +const { MAILTYPE, languageFile } = require('../strings'); const generateMessageContent = ( type, @@ -13,7 +13,7 @@ const generateMessageContent = ( language = DEFAULT_LANGUAGE(), domain = DOMAIN ) => { - const STRINGS = require('../strings').languageFile(language); + const STRINGS = languageFile(language); let title; if ( type === MAILTYPE.WITHDRAWAL || diff --git a/mail/templates/invalidAddress.js b/server/mail/templates/invalidAddress.js similarity index 100% rename from mail/templates/invalidAddress.js rename to server/mail/templates/invalidAddress.js diff --git a/server/mail/templates/invitedOperator.js b/server/mail/templates/invitedOperator.js new file mode 100644 index 0000000000..d736083a67 --- /dev/null +++ b/server/mail/templates/invitedOperator.js @@ -0,0 +1,83 @@ +'use strict'; + +const { Button } = require('./helpers/common'); + +const fetchMessage = (email, data, language, domain) => { + return { + html: html(email, data, language, domain), + text: text(email, data, language, domain) + }; +}; + +const html = (email, data, language, domain) => { + const link = `${domain}/login`; + const { INVITEDOPERATOR } = require('../strings').languageFile(language); + const { invitingEmail, created, password, role } = data; + let body; + if (created) { + body = ` +

    + ${INVITEDOPERATOR.BODY.CREATED[1](role, invitingEmail)}
    +

    +

    + ${INVITEDOPERATOR.BODY.CREATED[2]}
    +

    +
    +
    ${INVITEDOPERATOR.BODY.CREATED[3](email)}
    +
    ${INVITEDOPERATOR.BODY.CREATED[4](password)}
    +
    +

    + ${Button(link, INVITEDOPERATOR.BODY.CREATED[5])} + `; + } else { + body = ` +

    + ${INVITEDOPERATOR.BODY.EXISTING[1](role, invitingEmail)}
    +

    + ${Button(link, INVITEDOPERATOR.BODY.EXISTING[2])} + `; + } + + return ` +
    +

    + ${INVITEDOPERATOR.GREETING(email)} +

    + ${body} +

    + ${INVITEDOPERATOR.CLOSING[1]}
    + ${INVITEDOPERATOR.CLOSING[2]()} +

    +
    + `; +}; + +const text = (email, data, language, domain) => { + const link = `${domain}/login`; + const { INVITEDOPERATOR } = require('../strings').languageFile(language); + const { invitingEmail, created, password, role } = data; + let body; + + if (created) { + body = ` + ${INVITEDOPERATOR.BODY.CREATED[1](role, invitingEmail)} + ${INVITEDOPERATOR.BODY.CREATED[2]} + ${INVITEDOPERATOR.BODY.CREATED[3](email)} + ${INVITEDOPERATOR.BODY.CREATED[4](password)} + ${INVITEDOPERATOR.BODY.CREATED[5]}(${link}) + `; + } else { + body = ` + ${INVITEDOPERATOR.BODY.EXISTING[1](role, invitingEmail)} + ${INVITEDOPERATOR.BODY.EXISTING[2]}(${link}) + `; + } + + return ` + ${INVITEDOPERATOR.GREETING(email)} + ${body} + ${INVITEDOPERATOR.CLOSING[1]} ${INVITEDOPERATOR.CLOSING[2]()} + `; +}; + +module.exports = fetchMessage; diff --git a/mail/templates/login.js b/server/mail/templates/login.js similarity index 100% rename from mail/templates/login.js rename to server/mail/templates/login.js diff --git a/mail/templates/resetPassword.js b/server/mail/templates/resetPassword.js similarity index 100% rename from mail/templates/resetPassword.js rename to server/mail/templates/resetPassword.js diff --git a/mail/templates/signup.js b/server/mail/templates/signup.js similarity index 100% rename from mail/templates/signup.js rename to server/mail/templates/signup.js diff --git a/mail/templates/suspiciousDeposit.js b/server/mail/templates/suspiciousDeposit.js similarity index 100% rename from mail/templates/suspiciousDeposit.js rename to server/mail/templates/suspiciousDeposit.js diff --git a/mail/templates/userDeactivated.js b/server/mail/templates/userDeactivated.js similarity index 100% rename from mail/templates/userDeactivated.js rename to server/mail/templates/userDeactivated.js diff --git a/mail/templates/userVerification.js b/server/mail/templates/userVerification.js similarity index 100% rename from mail/templates/userVerification.js rename to server/mail/templates/userVerification.js diff --git a/mail/templates/userVerificationReject.js b/server/mail/templates/userVerificationReject.js similarity index 100% rename from mail/templates/userVerificationReject.js rename to server/mail/templates/userVerificationReject.js diff --git a/mail/templates/welcome.js b/server/mail/templates/welcome.js similarity index 100% rename from mail/templates/welcome.js rename to server/mail/templates/welcome.js diff --git a/mail/templates/withdrawal.js b/server/mail/templates/withdrawal.js similarity index 84% rename from mail/templates/withdrawal.js rename to server/mail/templates/withdrawal.js index 6a2107bd76..09faf217d9 100644 --- a/mail/templates/withdrawal.js +++ b/server/mail/templates/withdrawal.js @@ -1,6 +1,6 @@ 'use strict'; -const { CURRENCIES, EXPLORERS } = require('../../constants'); +const { GET_COINS, EXPLORERS } = require('../../constants'); const fetchMessage = (email, data, language, domain) => { return { @@ -16,15 +16,14 @@ const html = (email, data, language, domain) => { ${WITHDRAWAL.GREETING(email)}

    `; - if (CURRENCIES.includes(data.currency)) { + if (Object.keys(GET_COINS()).includes(data.currency)) { let explorers = ''; - if (EXPLORERS[data.currency]){ - EXPLORERS[data.currency].forEach((explorer) => { - explorers += `
  • ${explorer.name}
  • `; - }); - } + EXPLORERS(data.currency).forEach((explorer) => { + explorers += `
  • ${explorer.name}
  • `; + }); + result += `

    ${WITHDRAWAL.BODY[data.status]( @@ -61,7 +60,7 @@ const html = (email, data, language, domain) => { const text = (email, data, language, domain) => { const { WITHDRAWAL } = require('../strings').languageFile(language); let result = `${WITHDRAWAL.GREETING(email)}`; - if (CURRENCIES.includes(data.currency)) { + if (Object.keys(GET_COINS()).includes(data.currency)) { result += ` ${WITHDRAWAL.BODY[data.status]( data.amount, diff --git a/mail/templates/withdrawalRequest.js b/server/mail/templates/withdrawalRequest.js similarity index 100% rename from mail/templates/withdrawalRequest.js rename to server/mail/templates/withdrawalRequest.js diff --git a/mail/utils.js b/server/mail/utils.js similarity index 54% rename from mail/utils.js rename to server/mail/utils.js index c7c82af6d4..7e4e97003f 100644 --- a/mail/utils.js +++ b/server/mail/utils.js @@ -1,45 +1,19 @@ 'use strict'; -const Promise = require('bluebird'); -// const ses = require('../config/aws')('ses'); -// const { loggerEmail } = require('../config/logger'); - -// const sendAwsRawEmail = (params) => -// new Promise((resolve, reject) => { -// ses.sendRawEmail(params, (err, data) => { -// if (err) { -// loggerEmail.error('mail/index/sendRawEmail', err); -// reject(err); -// } -// resolve(data); -// }); -// }); - -// const sendAwsEmail = (params) => -// new Promise((resolve, reject) => { -// ses.sendEmail(params, (err, data) => { -// if (err) { -// loggerEmail.error('mail/index/sendEmail', err); -// reject(err); -// } -// resolve(data); -// }); -// }); - const momentTz = require('moment-timezone'); const moment = require('moment'); const geoip = require('geoip-lite'); const { FORMATDATE } = require('./strings'); -const { GET_CONFIGURATION, GET_SECRETS } = require('../constants'); +const { GET_KIT_CONFIG, GET_KIT_SECRETS } = require('../constants'); -const DEFAULT_LANGUAGE = () => GET_CONFIGURATION().constants.defaults.language; -const VALID_LANGUAGES = () => GET_CONFIGURATION().constants.valid_languages; -const DEFAULT_TIMEZONE = () => GET_CONFIGURATION().constants.emails.timezone; +const DEFAULT_LANGUAGE = () => GET_KIT_CONFIG().defaults.language; +const VALID_LANGUAGES = () => GET_KIT_CONFIG().valid_languages; +const DEFAULT_TIMEZONE = () => GET_KIT_SECRETS().emails.timezone; -const SMTP_SERVER = () => GET_SECRETS().smtp.server; -const SMTP_PORT = () => parseInt(GET_SECRETS().smtp.port); -const SMTP_USER = () => GET_SECRETS().smtp.user; -const SMTP_PASSWORD = () => GET_SECRETS().smtp.password; +const SMTP_SERVER = () => GET_KIT_SECRETS().smtp.server; +const SMTP_PORT = () => parseInt(GET_KIT_SECRETS().smtp.port); +const SMTP_USER = () => GET_KIT_SECRETS().smtp.user; +const SMTP_PASSWORD = () => GET_KIT_SECRETS().smtp.password; const formatTimezone = (date, timezone = DEFAULT_TIMEZONE()) => { let tzTime; @@ -95,7 +69,7 @@ const sendSMTPEmail = (params) => { }; const getValidLanguage = (language = DEFAULT_LANGUAGE()) => { - if (VALID_LANGUAGES().indexOf(language) > -1) { + if (VALID_LANGUAGES() && VALID_LANGUAGES().indexOf(language) > -1) { return language; } return DEFAULT_LANGUAGE(); diff --git a/server/messages.js b/server/messages.js new file mode 100644 index 0000000000..96dff2deee --- /dev/null +++ b/server/messages.js @@ -0,0 +1,181 @@ +'use strict'; + +exports.INSUFFICIENT_BALANCE_ORDER = + 'Insufficient balance to perform the order'; +exports.MISSING_ORDER = 'Missing order'; +exports.INVALID_USER_ID = 'Invalid user.'; +exports.USER_NOT_FOUND = 'User not found'; +exports.USER_NOT_REGISTERED_ON_NETWORK = 'User is not registered on the network'; +exports.SIGNUP_NOT_AVAILABLE = 'Sign up not available'; +exports.USER_NOT_VERIFIED = 'User is not verified'; +exports.USER_NOT_ACTIVATED = 'User is not activated'; +exports.USER_EXISTS = 'User already exists'; +exports.USER_REGISTERED = 'User successfully registered'; +exports.INVALID_CREDENTIALS = 'Credentials incorrect'; +exports.USER_VERIFIED = 'User is now verified'; +exports.INVALID_PASSWORD = + 'Invalid password. It has to contain at least 8 characters, at least one digit and one character.'; +exports.VERIFICATION_EMAIL_MESSAGE = 'A verification code has been sent to your email with the code'; +exports.PROVIDE_VALID_EMAIL = 'Please provide a valid email'; +exports.PROVIDE_VALID_EMAIL_CODE = 'Provide a valid email or a valid verification code'; +exports.INVALID_VERIFICATION_CODE = 'Invalid verification code'; + +exports.BANK_SUCCESS_MESSAGE = 'Deposit confirmed'; +exports.BANK_ERROR_MESSAGE_DEPOSIT_CONFIRMED = 'Deposit already confirmed'; +exports.BANK_ERROR_MESSAGE = 'Error requesting the deposit information'; +exports.BANK_ERROR_MESSAGE_OUT_LIMITS = 'Amount is out of the limits'; +exports.BANK_ERROR_MESSAGE_INVALID_STATUS = 'Invalid status'; +exports.BANK_ERROR_MESSAGE_VERIFY_DEPOSIT = 'Error confirming the deposit'; +exports.BANK_ERROR_MESSAGE_VERIFY_PAYMENT = 'Error confirming the payment'; +exports.BANK_ERROR_MESSAGE_FAILED_WITHDRAWAL = 'Error confirming the payment'; +exports.BANK_NOT_APPROVED_USER_DATA = + 'User can not perform this operation. Required user data has not been verified'; +exports.BANK_WITHDRAW_PENDING = 'Deposit request confirmed'; +exports.BANK_WITHDRAW_COMPLETE = 'Deposit completed'; +exports.INSUFFICIENT_BALANCE = 'Insufficent balance.'; +exports.INVALID_WITHDRAWAL_TOKEN = 'Withdrawal token is incorrect'; +exports.UNAUTHORIZED_WITHDRAWAL_TOKEN = 'Unauthorized withdrawal token'; +exports.EXPIRED_WITHDRAWAL_TOKEN = 'Expired withdrawal token'; + +exports.TOKEN_NOT_FOUND = 'Token not found'; +exports.TOKEN_REVOKED = 'Token is already revoked'; +exports.TOKEN_REMOVED = 'Token is successfully revoked'; +exports.TOKEN_OTP_ENABLED = 'OTP must be enabled to create a token'; +exports.INVALID_OTP_CODE = 'Invalid OTP Code'; + +exports.WALLET_ERROR_500 = + 'Internal error. Withdrawal failed. Please try again in few minutes.'; +exports.WALLET_ERROR_FEE = 'The fee is set really off. Please change your fee.'; +exports.WALLET_ERROR_ABSURD_FEE = 'Transaction has absurd fees'; +exports.TRANSACTION_SUSPICIOUS = 'Transaction is suspicious'; + +exports.ERROR_INVALID_SYMBOL = 'Invalid symbols'; + +exports.QUICK_TRADE_OUT_OF_LIMITS = 'Order size is out of the limits'; +exports.QUICK_TRADE_TOKEN_USED = 'Token has been used'; +exports.QUICK_TRADE_QUOTE_EXPIRED = 'Quote has expired'; +exports.QUICK_TRADE_QUOTE_INVALID = 'Invalid quote'; +exports.QUICK_TRADE_QUOTE_CALCULATING_ERROR = 'Error calculating the quote'; +exports.QUICK_TRADE_ORDER_CAN_NOT_BE_FILLED = + 'The order with the current size can not be filled'; +exports.QUICK_TRADE_INSUFFICIENT_BALANCE = + 'Insufficient balance to perform the order'; +exports.QUICK_TRADE_DISABLED = 'Broker service is currently disabled'; + +exports.TRADE_MARKET_ORDER_CAN_NOT_BE_PROCESSED = + 'The market order can not be processed'; + +exports.ERROR_USER_DONT_MATCH_DEPOSIT = 'Deposit user do not match.'; +exports.ERROR_CARD_DONT_MATCH_DEPOSIT = + 'Card used for payment does not match the user card'; +exports.ERROR_USER_PENDING_VERIFICATION = 'User data is pending verification'; +exports.ERROR_USER_ALREADY_VERIFIED = 'User already verified'; +exports.ERROR_INVALID_CARD_USER = 'Card Number has no linked name'; +exports.ERROR_INVALID_CARD_NUMBER = 'Invalid Card number'; +exports.ERROR_INVALID_TIMEFRAME = '\'start_date\' cannot occur after \'end_date\''; +exports.ERROR_INVALID_TIMEFRAME_ENTRY = 'Invalid date format'; +exports.ERROR_NAMES_DONT_MATCH = 'Card Owner and Sheba Name do not match'; +exports.ERROR_MISSING_CARD_OWNER = 'Missing Card Owner'; +exports.ERROR_CHANGE_USER_INFO = + 'You are not allowed to change your information'; +exports.ERROR_MAX_BANKS = 'Not allowed to create new banks'; +exports.LEVEL_UPGRADE_NOT_ALLOWED = 'You are now allowed to upgrade your level. Please contact support.'; +exports.LEVEL_UPGRADE_NOT_ELIGIBLE = 'You are not eligible for level upgrade.'; + +exports.SERVICE_NOT_AVAILABLE = 'Service not available'; + +exports.INVALID_CAPTCHA = 'Invalid captcha'; +exports.INVALID_USERNAME = + 'Invalid username. Username must be 3-15 characters length and only contains lowercase charaters, numbers or underscore'; +exports.USERNAME_CANNOT_BE_CHANGED = 'Username can not be changed'; +exports.USENAME_IS_TAKEN = + 'Username is already taken. Select a different username'; +exports.NOT_USER_FOUND_IN_TRANSACTION = 'No user is related to the transaction'; +exports.USER_DONT_MATCH_TRANSACTION = + 'Address does not match transaction address'; +exports.SAME_ADDRESS_REUSED = 'More than one user is using this address'; +exports.SERVICE_NOT_SUPPORTED = 'This service is not supported'; +exports.DEFAULT_REJECTION_NOTE = 'Unspecified'; + +exports.MULTIPLE_API_KEY = 'Multiple API Key methods are provided'; +exports.API_KEY_NULL = 'Access Denied: API Key is not provided'; +exports.API_REQUEST_EXPIRED = 'Access Denied: API request is expired'; +exports.API_SIGNATURE_NULL = 'Access Denied: API Signature is not provided'; +exports.API_KEY_INVALID = 'Access Denied: Invalid API Key'; +exports.API_KEY_OUT_OF_SCOPE = 'Unauthorized Access. You are not allowed to access this service with this key'; +exports.API_KEY_EXPIRED = 'Access Denied: API Key is expired'; +exports.API_KEY_INACTIVE = 'Access Denied: API Key is frozen'; +exports.API_SIGNATURE_INVALID = 'Access Denied: Invalid API Signature'; + +// PLUGINS +exports.PLUGIN_NOT_ENABLED = (plugin) => `Plugin ${plugin} not enabled`; +exports.MAX_BANKS_EXCEEDED = 'User can have a maximum of three banks'; +exports.BANK_NOT_FOUND = 'Bank account not found'; +exports.BANK_ALREADY_VERIFIED = 'Bank account is already verified'; + +exports.SMS_INVALID_PHONE = 'Invalid mobile phone number'; +exports.ID_EMAIL_REQUIRED = 'Missing parameters. ID and email required'; +exports.PENDING_APPROVAL_DENY = 'You are not allowed to upload a document while its pending or approved'; +exports.IMAGE_NOT_FOUND = 'ID image not found'; + +exports.SMS_ERROR = 'Error sending SMS'; +exports.SMS_PHONE_DONT_MATCH = 'The phone number provided is incorrect'; +exports.SMS_CODE_INVALID = 'The code provided is invalid'; +exports.SMS_CODE_EXPIRED = 'The code provided has expired or has been used'; +exports.INVALID_PHONE_NUMBER = 'Invalid phone number'; +exports.SMS_SUCCESS = 'SMS has been sent'; +exports.PHONE_VERIFIED = 'Phone number has been verified'; + +exports.WS_WELCOME = 'Welcome!'; +exports.WS_EMPTY_MESSAGE = 'message can not be empty'; +exports.WS_WRONG_CHANNEL_FROMAT = 'channel format is incorrect. The format is ::'; +exports.WS_EXCHANGE_NOT_SUPPORTED = 'exchange is not supported'; +exports.WS_EVENT_NOT_SUPPORTED = 'event is not supported'; +exports.WS_SYMBOL_NOT_SUPPORTED = 'symbol is not supported'; +exports.WS_WRONG_INPUT = 'Error: wrong input'; +exports.WS_AUTHENTICATION_REQUIRED = 'Bearer or HMAC authentication required'; +exports.WS_ALREADY_AUTHENTICATED = 'Already authenticated'; +exports.WS_USER_AUTHENTICATED = (email) => `User ${email} authenticated`; +exports.WS_MISSING_HEADER = 'Bearer or api-key authentication required'; +exports.WS_INVALID_TOPIC = (topic) => `Topic ${topic} is not supported`; + +exports.ACCESS_DENIED = (msg) => `Access denied: ${msg}`; +exports.NOT_AUTHORIZED = 'User is not authorized to access this endpoint'; +exports.TOKEN_EXPIRED = 'Token is expired'; +exports.INVALID_TOKEN = 'Token is invalid'; +exports.MISSING_HEADER = 'Bearer or api-key authentication required'; +exports.DEACTIVATED_USER = 'This account is deactivated'; +exports.WRONG_LIMIT = 'Value "limit" must be an integer'; +exports.WRONG_PAGE = 'Value "page" must be an integer'; +exports.WRONG_ORDER_BY = 'Value "order_by" cannot include whitespaces'; +exports.WRONG_ORDER = 'Value "order" must be one of: ["asc", "desc"]'; +exports.SAME_PASSWORD = 'New password must be different from previous password'; +exports.VERIFICATION_CODE_USED = 'Verification code already used'; +exports.USERNAME_IS_TAKEN = 'Username is already taken. Select a different username'; +exports.TOKEN_OTP_MUST_BE_ENABLED = 'OTP must be enabled to create a token'; +exports.CODE_NOT_FOUND = 'Code not found'; +exports.CODE_USED = 'Code is already used'; +exports.ACCOUNT_NOT_VERIFIED = 'Account is not verified'; +exports.INVALID_SYMBOL = (symbol) => `Invalid symbol: ${symbol}`; +exports.INVALID_COIN = (coin) => `Invalid coin: ${coin}`; +exports.INVALID_AMOUNT = (amount) => `Invalid amount: ${amount}`; +exports.WITHDRAWAL_DISABLED_FOR_COIN = (coin) => `Withdrawals are disabled for coin: ${coin}`; +exports.UPGRADE_VERIFICATION_LEVEL = (level) => `Verification level must be at or above ${level}`; +exports.INVALID_VERIFICATION_LEVEL = (level) => `Invalid verification level: ${level}`; +exports.NO_NEW_DATA = 'No new data given'; +exports.SUPPORT_DISABLED = 'Cannot send email to support at this time'; +exports.COMMUNICATOR_CANNOT_UPDATE = (value) => `Communicator operators cannot update value: ${value}`; +exports.MASK_VALUE_GIVEN = 'Masked value given'; +exports.NO_DATA_FOR_CSV = 'No data to convert to CSV'; +exports.USER_IS_VERIFIED = 'User is already verified'; +exports.PROVIDE_USER_CREDENTIALS = 'Please provide a a user\'s kit id, network id, or email'; +exports.PROVIDE_KIT_ID = 'Please provide a user\'s kit id'; +exports.PROVIDE_NETWORK_ID = 'Please provide a user\'s network id'; +exports.CANNOT_DEACTIVATE_ADMIN = 'Main admin account cannot be deactivated'; +exports.USER_ALREADY_DEACTIVATED = 'User account is already deactivated'; +exports.USER_NOT_DEACTIVATED = 'User account is not deactivated'; +exports.CANNOT_CHANGE_ADMIN_ROLE = 'Main admin account role cannot be changed'; +exports.PROVIDE_TABLE_NAME = 'Please provide a table name'; +exports.INVALID_PLUGIN = (plugin) => `Invalid plugin: ${plugin}`; +exports.PLUGIN_ALREADY_ENABELD = (plugin) => `Plugin ${plugin} already enabled`; +exports.PLUGIN_ALREADY_DISABLED = (plugin) => `Plugin ${plugin} already disabled`; diff --git a/server/package-lock.json b/server/package-lock.json new file mode 100644 index 0000000000..876f20e13b --- /dev/null +++ b/server/package-lock.json @@ -0,0 +1,12432 @@ +{ + "version": "2.0.0", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "@babel/code-frame": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", + "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", + "requires": { + "@babel/highlight": "^7.10.4" + } + }, + "@babel/helper-validator-identifier": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz", + "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==" + }, + "@babel/highlight": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz", + "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==", + "requires": { + "@babel/helper-validator-identifier": "^7.10.4", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + } + }, + "@sailshq/lodash": { + "version": "3.10.4", + "resolved": "https://registry.npmjs.org/@sailshq/lodash/-/lodash-3.10.4.tgz", + "integrity": "sha512-YXJqp9gdHcZKAmBY/WnwFpPtNQp2huD/ME2YMurH2YHJvxrVzYsmpKw/pb7yINArRpp8E++fwbQd3ajYXGA45Q==" + }, + "@types/geojson": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/@types/geojson/-/geojson-1.0.6.tgz", + "integrity": "sha512-Xqg/lIZMrUd0VRmSRbCAewtwGZiAk3mEUDvV4op1tGl+LvyPcb/MIOSxTl9z+9+J+R4/vpjiCAT4xeKzH9ji1w==" + }, + "@types/node": { + "version": "14.6.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.6.2.tgz", + "integrity": "sha512-onlIwbaeqvZyniGPfdw/TEhKIh79pz66L1q06WUQqJLnAb6wbjvOtepLYTGHTqzdXgBYIE3ZdmqHDGsRsbBz7A==" + }, + "@types/normalize-package-data": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.0.tgz", + "integrity": "sha512-f5j5b/Gf71L+dbqxIpQ4Z2WlmI/mPJ0fOkGGmFgtb6sAu97EPczzbS3/tJKxmcYDj55OX6ssqwDAWOHIYDRDGA==" + }, + "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" + } + }, + "after": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/after/-/after-0.8.2.tgz", + "integrity": "sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8=" + }, + "after-all-results": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/after-all-results/-/after-all-results-2.0.0.tgz", + "integrity": "sha1-asL8ICtQD4jaj09VMM+hAPTGotA=" + }, + "ajv": { + "version": "6.12.5", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.5.tgz", + "integrity": "sha512-lRF8RORchjpKG50/WFf8xmg7sgCLFiYNNnqdKflk63whMQcWR5ngGjiSXkL9bjxy6B2npOK2HSMN49jEBMSkag==", + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "amp": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/amp/-/amp-0.3.1.tgz", + "integrity": "sha1-at+NWKdPNh6CwfqNOJwHnhOfxH0=" + }, + "amp-message": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/amp-message/-/amp-message-0.1.2.tgz", + "integrity": "sha1-p48cmJlQh602GSpBKY5NtJ49/EU=", + "requires": { + "amp": "0.3.1" + } + }, + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" + }, + "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==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "anymatch": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", + "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + "requires": { + "micromatch": "^3.1.4", + "normalize-path": "^2.1.1" + }, + "dependencies": { + "normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "requires": { + "remove-trailing-separator": "^1.0.1" + } + } + } + }, + "append-field": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/append-field/-/append-field-1.0.0.tgz", + "integrity": "sha1-HjRA6RXwsSA9I3SOeO3XubW0PlY=" + }, + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "requires": { + "sprintf-js": "~1.0.2" + }, + "dependencies": { + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" + } + } + }, + "arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=" + }, + "arr-flatten": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", + "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==" + }, + "arr-union": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", + "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=" + }, + "array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" + }, + "array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=" + }, + "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==" + }, + "asn1": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", + "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", + "requires": { + "safer-buffer": "~2.1.0" + } + }, + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" + }, + "assertion-error": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", + "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==" + }, + "assign-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", + "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=" + }, + "async": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", + "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", + "requires": { + "lodash": "^4.17.14" + }, + "dependencies": { + "lodash": { + "version": "4.17.20", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", + "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==" + } + } + }, + "async-cache": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/async-cache/-/async-cache-1.1.0.tgz", + "integrity": "sha1-SppaidBl7F2OUlS9nulrp2xTK1o=", + "requires": { + "lru-cache": "^4.0.0" + } + }, + "async-each": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz", + "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==" + }, + "async-limiter": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", + "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==" + }, + "async-listener": { + "version": "0.6.10", + "resolved": "https://registry.npmjs.org/async-listener/-/async-listener-0.6.10.tgz", + "integrity": "sha512-gpuo6xOyF4D5DE5WvyqZdPA3NGhiT6Qf07l7DCB0wwDEsLvDIbCr6j9S5aj5Ch96dLace5tXVzWBZkxU/c5ohw==", + "requires": { + "semver": "^5.3.0", + "shimmer": "^1.1.0" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + } + } + }, + "async-value": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/async-value/-/async-value-1.2.2.tgz", + "integrity": "sha1-hFF6Hny2saW14YH6Mb4QQ3t/sSU=" + }, + "async-value-promise": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/async-value-promise/-/async-value-promise-1.1.1.tgz", + "integrity": "sha512-c2RFDKjJle1rHa0YxN9Ysu97/QBu3Wa+NOejJxsX+1qVDJrkD3JL/GN1B3gaILAEXJXbu/4Z1lcoCHFESe/APA==", + "requires": { + "async-value": "^1.2.2" + } + }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" + }, + "atob": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", + "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==" + }, + "await-event": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/await-event/-/await-event-2.1.0.tgz", + "integrity": "sha1-eOn5JoS65AIvn6C18xShFVD5qnY=" + }, + "awesome-phonenumber": { + "version": "2.2.5", + "resolved": "https://registry.npmjs.org/awesome-phonenumber/-/awesome-phonenumber-2.2.5.tgz", + "integrity": "sha512-CHVEWEtXhaUB4ZGki/MQOlxK9wX+x3rw0/OARxB/srJTBP7b8nZjuE69WKQIUmciYdYGP2qywFPyubewJnFLbQ==" + }, + "aws-sdk": { + "version": "2.205.0", + "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.205.0.tgz", + "integrity": "sha1-GpNzAlPivgJ6S9OvkkjL2gVz3oA=", + "requires": { + "buffer": "4.9.1", + "events": "^1.1.1", + "jmespath": "0.15.0", + "querystring": "0.2.0", + "sax": "1.2.1", + "url": "0.10.3", + "uuid": "3.1.0", + "xml2js": "0.4.17", + "xmlbuilder": "4.2.1" + }, + "dependencies": { + "uuid": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.1.0.tgz", + "integrity": "sha512-DIWtzUkw04M4k3bf1IcpS2tngXEL26YUD2M0tMDUpnUrz2hgzUBlD55a4FjdLGPvfHxS6uluGWvaVEqgBcVa+g==" + } + } + }, + "aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=" + }, + "aws4": { + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.10.1.tgz", + "integrity": "sha512-zg7Hz2k5lI8kb7U32998pRRFin7zJlkfezGJjUc2heaD4Pw2wObakCDVzkKztTm/Ln7eiVvYsjqak0Ed4LkMDA==" + }, + "backo2": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz", + "integrity": "sha1-MasayLEpNjRj41s+u2n038+6eUc=" + }, + "bagpipes": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/bagpipes/-/bagpipes-0.0.6.tgz", + "integrity": "sha1-CWvRDCBi65RYVvkZtxApRVeOR/0=", + "requires": { + "async": "^1.4.2", + "debug": "^2.1.2", + "jspath": "^0.3.1", + "lodash": "^3.5.0", + "machinepack-http": "^2.3.0", + "mustache": "^2.1.3", + "pipeworks": "^1.3.0" + }, + "dependencies": { + "async": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", + "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=" + }, + "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" + } + }, + "lodash": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz", + "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=" + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } + } + }, + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" + }, + "base": { + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", + "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", + "requires": { + "cache-base": "^1.0.1", + "class-utils": "^0.3.5", + "component-emitter": "^1.2.1", + "define-property": "^1.0.0", + "isobject": "^3.0.1", + "mixin-deep": "^1.2.0", + "pascalcase": "^0.1.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "base64-arraybuffer": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz", + "integrity": "sha1-c5JncZI7Whl0etZmqlzUv5xunOg=" + }, + "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==" + }, + "base64id": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/base64id/-/base64id-1.0.0.tgz", + "integrity": "sha1-R2iMuZu2gE8OBtPnY7HDLlfY5rY=" + }, + "basic-auth": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz", + "integrity": "sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==", + "requires": { + "safe-buffer": "5.1.2" + } + }, + "bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", + "requires": { + "tweetnacl": "^0.14.3" + } + }, + "bcryptjs": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/bcryptjs/-/bcryptjs-2.4.3.tgz", + "integrity": "sha1-mrVie5PmBiH/fNrF2pczAn3x0Ms=" + }, + "better-assert": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/better-assert/-/better-assert-1.0.2.tgz", + "integrity": "sha1-QIZrnhueC1W0gYlDEeaPr/rrxSI=", + "requires": { + "callsite": "1.0.0" + } + }, + "binary-extensions": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", + "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==" + }, + "binary-search": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/binary-search/-/binary-search-1.3.6.tgz", + "integrity": "sha512-nbE1WxOTTrUWIfsfZ4aHGYu5DOuNkbxGokjV6Z2kxfJK3uaAb8zNK1muzOeipoLHZjInT4Br88BHpzevc681xA==" + }, + "bindings": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", + "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", + "optional": true, + "requires": { + "file-uri-to-path": "1.0.0" + } + }, + "blessed": { + "version": "0.1.81", + "resolved": "https://registry.npmjs.org/blessed/-/blessed-0.1.81.tgz", + "integrity": "sha1-+WLWh+wsNpVwrnGvhDJW5tDKESk=" + }, + "blob": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/blob/-/blob-0.0.5.tgz", + "integrity": "sha512-gaqbzQPqOoamawKg0LGVd7SzLgXS+JH61oWprSLH+P+abTczqJbhTR8CmJ2u9/bUYNmHTGJx/UEmn6doAvvuig==" + }, + "bluebird": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.3.tgz", + "integrity": "sha512-/qKPUQlaW1OyR51WeCPBvRnAlnZFUJkCSG5HzGnuIqhgyJtF+T94lFnn33eiazjRm2LAHVy2guNnaq48X9SJuw==" + }, + "body-parser": { + "version": "1.18.2", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.2.tgz", + "integrity": "sha1-h2eKGdhLR9hZuDGZvVm84iKxBFQ=", + "requires": { + "bytes": "3.0.0", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "~1.1.1", + "http-errors": "~1.6.2", + "iconv-lite": "0.4.19", + "on-finished": "~2.3.0", + "qs": "6.5.1", + "raw-body": "2.3.2", + "type-is": "~1.6.15" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } + } + }, + "boom": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/boom/-/boom-4.3.1.tgz", + "integrity": "sha1-T4owBctKfjiJ90kDD9JbluAdLjE=", + "requires": { + "hoek": "4.x.x" + } + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "requires": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "breadth-filter": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/breadth-filter/-/breadth-filter-2.0.0.tgz", + "integrity": "sha512-thQShDXnFWSk2oVBixRCyrWsFoV5tfOpWKHmxwafHQDNxCfDBk539utpvytNjmlFrTMqz41poLwJvA1MW3z0MQ==", + "requires": { + "object.entries": "^1.0.4" + } + }, + "browser-stdout": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.0.tgz", + "integrity": "sha1-81HTKWnTL6XXpVZxVCY9korjvR8=", + "dev": true + }, + "buffer": { + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz", + "integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=", + "requires": { + "base64-js": "^1.0.2", + "ieee754": "^1.1.4", + "isarray": "^1.0.0" + } + }, + "buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=" + }, + "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==" + }, + "buffer-writer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/buffer-writer/-/buffer-writer-1.0.1.tgz", + "integrity": "sha1-Iqk2kB4wKa/NdUfrRIfOtpejvwg=" + }, + "busboy": { + "version": "0.2.14", + "resolved": "https://registry.npmjs.org/busboy/-/busboy-0.2.14.tgz", + "integrity": "sha1-bCpiLvz0fFe7vh4qnDetNseSVFM=", + "requires": { + "dicer": "0.2.5", + "readable-stream": "1.1.x" + }, + "dependencies": { + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" + }, + "readable-stream": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", + "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" + } + } + }, + "bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=" + }, + "cache-base": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", + "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", + "requires": { + "collection-visit": "^1.0.0", + "component-emitter": "^1.2.1", + "get-value": "^2.0.6", + "has-value": "^1.0.0", + "isobject": "^3.0.1", + "set-value": "^2.0.0", + "to-object-path": "^0.3.0", + "union-value": "^1.0.0", + "unset-value": "^1.0.0" + } + }, + "callsite": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/callsite/-/callsite-1.0.0.tgz", + "integrity": "sha1-KAOY5dZkvXQDi28JBRU+borxvCA=" + }, + "camelize": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/camelize/-/camelize-1.0.0.tgz", + "integrity": "sha1-FkpUg+Yw+kMh5a8HAg5TGDGyYJs=" + }, + "caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" + }, + "chai": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/chai/-/chai-4.2.0.tgz", + "integrity": "sha512-XQU3bhBukrOsQCuwZndwGcCVQHyZi53fQ6Ys1Fym7E4olpIqqZZhhoFJoaKVvV17lWQoXYwgWN2nF5crA8J2jw==", + "requires": { + "assertion-error": "^1.1.0", + "check-error": "^1.0.2", + "deep-eql": "^3.0.1", + "get-func-name": "^2.0.0", + "pathval": "^1.1.0", + "type-detect": "^4.0.5" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "charm": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/charm/-/charm-0.1.2.tgz", + "integrity": "sha1-BsIe7RobBq62dVPNxT4jJ0usIpY=" + }, + "check-error": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", + "integrity": "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=" + }, + "chokidar": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", + "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", + "requires": { + "anymatch": "^2.0.0", + "async-each": "^1.0.1", + "braces": "^2.3.2", + "fsevents": "^1.2.7", + "glob-parent": "^3.1.0", + "inherits": "^2.0.3", + "is-binary-path": "^1.0.0", + "is-glob": "^4.0.0", + "normalize-path": "^3.0.0", + "path-is-absolute": "^1.0.0", + "readdirp": "^2.2.1", + "upath": "^1.1.1" + } + }, + "class-utils": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", + "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", + "requires": { + "arr-union": "^3.1.0", + "define-property": "^0.2.5", + "isobject": "^3.0.0", + "static-extend": "^0.1.1" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "requires": { + "is-descriptor": "^0.1.0" + } + } + } + }, + "cli-table-redemption": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cli-table-redemption/-/cli-table-redemption-1.0.1.tgz", + "integrity": "sha512-SjVCciRyx01I4azo2K2rcc0NP/wOceXGzG1ZpYkEulbbIxDA/5YWv0oxG2HtQ4v8zPC6bgbRI7SbNaTZCxMNkg==", + "requires": { + "chalk": "^1.1.3" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=" + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" + } + } + }, + "cls-bluebird": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cls-bluebird/-/cls-bluebird-2.1.0.tgz", + "integrity": "sha1-N+8eCAqP+1XC9BZPU28ZGeeWiu4=", + "requires": { + "is-bluebird": "^1.0.2", + "shimmer": "^1.1.0" + } + }, + "co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=" + }, + "collection-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", + "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", + "requires": { + "map-visit": "^1.0.0", + "object-visit": "^1.0.0" + } + }, + "color": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/color/-/color-3.0.0.tgz", + "integrity": "sha512-jCpd5+s0s0t7p3pHQKpnJ0TpQKKdleP71LWcA0aqiljpiuAkOSUFN/dyH8ZwF0hRmFlrIuRhufds1QyEP9EB+w==", + "requires": { + "color-convert": "^1.9.1", + "color-string": "^1.5.2" + } + }, + "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==", + "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=" + }, + "color-string": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.5.3.tgz", + "integrity": "sha512-dC2C5qeWoYkxki5UAXapdjqO672AM4vZuPGRQfO8b5HKuKGBbKWpITyDYN7TOFKvRW7kOgAn3746clDBMDJyQw==", + "requires": { + "color-name": "^1.0.0", + "simple-swizzle": "^0.2.2" + } + }, + "colornames": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/colornames/-/colornames-1.1.1.tgz", + "integrity": "sha1-+IiQMGhcfE/54qVZ9Qd+t2qBb5Y=" + }, + "colors": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", + "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==" + }, + "colorspace": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/colorspace/-/colorspace-1.1.2.tgz", + "integrity": "sha512-vt+OoIP2d76xLhjwbBaucYlNSpPsrJWPlBTtwCpQKIu6/CSMutyzX93O/Do0qzpH3YoHEes8YEFXyZ797rEhzQ==", + "requires": { + "color": "3.0.x", + "text-hex": "1.0.x" + } + }, + "combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "requires": { + "delayed-stream": "~1.0.0" + } + }, + "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==" + }, + "complex.js": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/complex.js/-/complex.js-2.0.4.tgz", + "integrity": "sha512-Syl95HpxUTS0QjwNxencZsKukgh1zdS9uXeXX2Us0pHaqBR6kiZZi0AkZ9VpZFwHJyVIUVzI4EumjWdXP3fy6w==" + }, + "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.2.1", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", + "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=" + }, + "component-inherit": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/component-inherit/-/component-inherit-0.0.3.tgz", + "integrity": "sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM=" + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + }, + "concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "requires": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "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" + } + }, + "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==", + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "config": { + "version": "1.31.0", + "resolved": "https://registry.npmjs.org/config/-/config-1.31.0.tgz", + "integrity": "sha512-Ep/l9Rd1J9IPueztJfpbOqVzuKHQh4ZODMNt9xqTYdBBNRXbV4oTu34kCkkfdRVcDq0ohtpaeXGgb+c0LQxFRA==", + "requires": { + "json5": "^1.0.1" + } + }, + "console-log-level": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/console-log-level/-/console-log-level-1.4.1.tgz", + "integrity": "sha512-VZzbIORbP+PPcN/gg3DXClTLPLg5Slwd5fL2MIc+o1qZ4BXBvWyc6QxPk6T/Mkr6IVjRpoAGf32XxP3ZWMVRcQ==" + }, + "container-info": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/container-info/-/container-info-1.0.1.tgz", + "integrity": "sha512-wk/+uJvPHOFG+JSwQS+fw6H6yw3Oyc8Kw9L4O2MN817uA90OqJ59nlZbbLPqDudsjJ7Tetee3pwExdKpd2ahjQ==" + }, + "content-disposition": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", + "integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ=" + }, + "content-security-policy-builder": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/content-security-policy-builder/-/content-security-policy-builder-2.0.0.tgz", + "integrity": "sha512-j+Nhmj1yfZAikJLImCvPJFE29x/UuBi+/MWqggGGc515JKaZrjuei2RhULJmy0MsstW3E3htl002bwmBNMKr7w==" + }, + "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==" + }, + "continuation-local-storage": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/continuation-local-storage/-/continuation-local-storage-3.2.1.tgz", + "integrity": "sha512-jx44cconVqkCEEyLSKWwkvUXwO561jXMa3LPjTPsm5QR22PA0/mhe33FT4Xb5y74JDvt/Cq+5lm8S8rskLv9ZA==", + "requires": { + "async-listener": "^0.6.0", + "emitter-listener": "^1.1.1" + } + }, + "convert-to-ecmascript-compatible-varname": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/convert-to-ecmascript-compatible-varname/-/convert-to-ecmascript-compatible-varname-0.1.5.tgz", + "integrity": "sha1-9npJOMUjNENWQlBHnGcBS6yHhJk=" + }, + "cookie": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.1.tgz", + "integrity": "sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA==" + }, + "cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" + }, + "cookiejar": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.2.tgz", + "integrity": "sha512-Mw+adcfzPxcPeI+0WlvRrr/3lGVO0bD75SxX6811cxSh1Wbxx7xZBGK1eVtDf6si8rg2lhnUjsVLMFMfbRIuwA==" + }, + "copy-descriptor": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", + "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=" + }, + "core-js": { + "version": "2.6.11", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.11.tgz", + "integrity": "sha512-5wjnpaT/3dV+XB4borEsnAYQchn00XSgTAWKDkEqv+K8KevjbzmofK6hfJ9TZIlpj2N0xQpazy7PiRQiWHqzWg==" + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" + }, + "cors": { + "version": "2.8.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" + } + }, + "cron": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/cron/-/cron-1.8.2.tgz", + "integrity": "sha512-Gk2c4y6xKEO8FSAUTklqtfSr7oTq0CiPQeLBG5Fl0qoXpZyMcj1SG59YL+hqq04bu6/IuEA7lMkYDAplQNKkyg==", + "requires": { + "moment-timezone": "^0.5.x" + } + }, + "cryptiles": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-3.1.4.tgz", + "integrity": "sha512-8I1sgZHfVwcSOY6mSGpVU3lw/GSIZvusg8dD2+OGehCJpOhQRLNcH0qb9upQnOH4XhgxxFJSg6E2kx95deb1Tw==", + "requires": { + "boom": "5.x.x" + }, + "dependencies": { + "boom": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/boom/-/boom-5.2.0.tgz", + "integrity": "sha512-Z5BTk6ZRe4tXXQlkqftmsAUANpXmuwlsF5Oov8ThoMbQRzdGTA1ngYRW160GexgOgjsFOKJz0LYhoNi+2AMBUw==", + "requires": { + "hoek": "4.x.x" + } + } + } + }, + "cycle": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/cycle/-/cycle-1.0.3.tgz", + "integrity": "sha1-IegLK+hYD5i0aPN5QwZisEbDStI=" + }, + "dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "requires": { + "assert-plus": "^1.0.0" + } + }, + "dasherize": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dasherize/-/dasherize-2.0.0.tgz", + "integrity": "sha1-bYCcnNDPe7iVLYD8hPoT1H3bEwg=" + }, + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "requires": { + "ms": "^2.1.1" + } + }, + "decimal.js": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-9.0.1.tgz", + "integrity": "sha512-2h0iKbJwnImBk4TGk7CG1xadoA0g3LDPlQhQzbZ221zvG0p2YVUedbKIPsOZXKZGx6YmZMJKYOalpCMxSdDqTQ==" + }, + "decode-uri-component": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", + "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=" + }, + "deep-eql": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz", + "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==", + "requires": { + "type-detect": "^4.0.0" + } + }, + "deep-metrics": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/deep-metrics/-/deep-metrics-0.0.1.tgz", + "integrity": "sha512-732WmZgCWxOkf4QBvrCjPPuT6wTEzaGye/4JqYsU/sO0J53UNX4PBwK0JV262BZ5cxgLmKhU+NlrtKdPDgybkg==", + "requires": { + "semver": "^5.3.0" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + } + } + }, + "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==", + "requires": { + "object-keys": "^1.0.12" + } + }, + "define-property": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", + "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "requires": { + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" + }, + "dependencies": { + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" + }, + "depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" + }, + "destroy": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", + "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" + }, + "diagnostics": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/diagnostics/-/diagnostics-1.1.1.tgz", + "integrity": "sha512-8wn1PmdunLJ9Tqbx+Fx/ZEuHfJf4NKSN2ZBj7SJC/OWRWha843+WsTjqMe1B5E3p28jqBlp+mJ2fPVxPyNgYKQ==", + "requires": { + "colorspace": "1.1.x", + "enabled": "1.0.x", + "kuler": "1.0.x" + } + }, + "dicer": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/dicer/-/dicer-0.2.5.tgz", + "integrity": "sha1-WZbAhrszIYyBLAkL3cCc0S+stw8=", + "requires": { + "readable-stream": "1.1.x", + "streamsearch": "0.1.2" + }, + "dependencies": { + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" + }, + "readable-stream": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", + "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" + } + } + }, + "diff": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-3.2.0.tgz", + "integrity": "sha1-yc45Okt8vQsFinJck98pkCeGj/k=", + "dev": true + }, + "dns-prefetch-control": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/dns-prefetch-control/-/dns-prefetch-control-0.1.0.tgz", + "integrity": "sha1-YN20V3dOF48flBXwyrsOhbCzALI=" + }, + "dont-sniff-mimetype": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/dont-sniff-mimetype/-/dont-sniff-mimetype-1.0.0.tgz", + "integrity": "sha1-WTKJDcn04vGeXrAqIAJuXl78j1g=" + }, + "dottie": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/dottie/-/dottie-2.0.2.tgz", + "integrity": "sha512-fmrwR04lsniq/uSr8yikThDTrM7epXHBAAjH9TbeH3rEA8tdCO7mRzB9hdmdGyJCxF8KERo9CITcm3kGuoyMhg==" + }, + "double-ended-queue": { + "version": "2.1.0-0", + "resolved": "https://registry.npmjs.org/double-ended-queue/-/double-ended-queue-2.1.0-0.tgz", + "integrity": "sha1-ED01J/0xUo9AGIEwyEHv3XgmTlw=" + }, + "ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", + "requires": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + }, + "dependencies": { + "jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=" + } + } + }, + "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=" + }, + "elastic-apm-http-client": { + "version": "9.4.0", + "resolved": "https://registry.npmjs.org/elastic-apm-http-client/-/elastic-apm-http-client-9.4.0.tgz", + "integrity": "sha512-/jOZDyfzLNwHrNkPAI+AspLg0TXYXODWT+I1eoAWRCB7gP1vKvzUQAsP5iChodVqCbAj1eUNXB0KrvM6b07Thw==", + "requires": { + "breadth-filter": "^2.0.0", + "container-info": "^1.0.1", + "end-of-stream": "^1.4.4", + "fast-safe-stringify": "^2.0.7", + "fast-stream-to-buffer": "^1.0.0", + "pump": "^3.0.0", + "readable-stream": "^3.4.0", + "stream-chopper": "^3.0.1", + "unicode-byte-truncate": "^1.0.0" + } + }, + "elastic-apm-node": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/elastic-apm-node/-/elastic-apm-node-3.5.0.tgz", + "integrity": "sha512-s0masF1sJSrUFwydd2Nrk888BRA/YSxUvQFSrO2Pbd69+iqnjC9Yd9yQvAwfaI0HF4ViVqDXqmmZ1l3FqYgb1Q==", + "requires": { + "after-all-results": "^2.0.0", + "async-value-promise": "^1.1.1", + "basic-auth": "^2.0.1", + "console-log-level": "^1.4.1", + "cookie": "^0.4.0", + "core-util-is": "^1.0.2", + "elastic-apm-http-client": "^9.3.0", + "end-of-stream": "^1.4.4", + "error-stack-parser": "^2.0.6", + "fast-safe-stringify": "^2.0.7", + "http-headers": "^3.0.2", + "http-request-to-url": "^1.0.0", + "is-native": "^1.0.1", + "measured-reporting": "^1.51.1", + "monitor-event-loop-delay": "^1.0.0", + "object-filter-sequence": "^1.0.0", + "object-identity-map": "^1.0.2", + "original-url": "^1.2.3", + "read-pkg-up": "^7.0.1", + "redact-secrets": "^1.0.0", + "relative-microtime": "^2.0.0", + "require-ancestors": "^1.0.0", + "require-in-the-middle": "^5.0.3", + "semver": "^6.3.0", + "set-cookie-serde": "^1.0.0", + "shallow-clone-shim": "^2.0.0", + "sql-summary": "^1.0.1", + "stackman": "^4.0.0", + "traceparent": "^1.0.0", + "unicode-byte-truncate": "^1.0.0" + } + }, + "emitter-listener": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/emitter-listener/-/emitter-listener-1.1.2.tgz", + "integrity": "sha512-Bt1sBAGFHY9DKY+4/2cV6izcKJUf5T7/gkdmkxzX/qv9CcGH8xSwVRW5mtX03SWJtRTWSOpzCuWN9rBFYZepZQ==", + "requires": { + "shimmer": "^1.2.0" + } + }, + "enabled": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/enabled/-/enabled-1.0.2.tgz", + "integrity": "sha1-ll9lE9LC0cX0ZStkouM5ZGf8L5M=", + "requires": { + "env-variable": "0.0.x" + } + }, + "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==", + "requires": { + "once": "^1.4.0" + } + }, + "engine.io": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-3.1.5.tgz", + "integrity": "sha512-D06ivJkYxyRrcEe0bTpNnBQNgP9d3xog+qZlLbui8EsMr/DouQpf5o9FzJnWYHEYE0YsFHllUv2R1dkgYZXHcA==", + "requires": { + "accepts": "~1.3.4", + "base64id": "1.0.0", + "cookie": "0.3.1", + "debug": "~3.1.0", + "engine.io-parser": "~2.1.0", + "uws": "~9.14.0", + "ws": "~3.3.1" + }, + "dependencies": { + "cookie": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", + "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=" + }, + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "ws": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-3.3.3.tgz", + "integrity": "sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA==", + "requires": { + "async-limiter": "~1.0.0", + "safe-buffer": "~5.1.0", + "ultron": "~1.1.0" + } + } + } + }, + "engine.io-client": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-3.3.2.tgz", + "integrity": "sha512-y0CPINnhMvPuwtqXfsGuWE8BB66+B6wTtCofQDRecMQPYX3MYUZXFNKDhdrSe3EVjgOu4V3rxdeqN/Tr91IgbQ==", + "requires": { + "component-emitter": "1.2.1", + "component-inherit": "0.0.3", + "debug": "~3.1.0", + "engine.io-parser": "~2.1.1", + "has-cors": "1.1.0", + "indexof": "0.0.1", + "parseqs": "0.0.5", + "parseuri": "0.0.5", + "ws": "~6.1.0", + "xmlhttprequest-ssl": "~1.5.4", + "yeast": "0.1.2" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } + } + }, + "engine.io-parser": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-2.1.3.tgz", + "integrity": "sha512-6HXPre2O4Houl7c4g7Ic/XzPnHBvaEmN90vtRO9uLmwtRqQmTOw0QMevL1TOfL2Cpu1VzsaTmMotQgMdkzGkVA==", + "requires": { + "after": "0.8.2", + "arraybuffer.slice": "~0.0.7", + "base64-arraybuffer": "0.1.5", + "blob": "0.0.5", + "has-binary2": "~1.0.2" + } + }, + "env-variable": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/env-variable/-/env-variable-0.0.6.tgz", + "integrity": "sha512-bHz59NlBbtS0NhftmR8+ExBEekE7br0e01jw+kk0NDro7TtZzBYZ5ScGPs3OmwnpyfHTHOtr1Y6uedCdrIldtg==" + }, + "error-callsites": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/error-callsites/-/error-callsites-2.0.3.tgz", + "integrity": "sha512-v036z4IEffZFE5kBkV5/F2MzhLnG0vuDyN+VXpzCf4yWXvX/1WJCI0A+TGTr8HWzBfCw5k8gr9rwAo09V+obTA==" + }, + "error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "requires": { + "is-arrayish": "^0.2.1" + } + }, + "error-stack-parser": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-2.0.6.tgz", + "integrity": "sha512-d51brTeqC+BHlwF0BhPtcYgF5nlzf9ZZ0ZIUQNZpc9ZB9qw5IJ2diTrBY9jlCJkTLITYPjmiX6OWCwH+fuyNgQ==", + "requires": { + "stackframe": "^1.1.1" + } + }, + "es-abstract": { + "version": "1.17.6", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.6.tgz", + "integrity": "sha512-Fr89bON3WFyUi5EvAeI48QTWX0AyekGgLA8H+c+7fbfCkJwRWRMLd8CQedNEyJuoYYhmtEqY92pgte1FAhBlhw==", + "requires": { + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1", + "is-callable": "^1.2.0", + "is-regex": "^1.1.0", + "object-inspect": "^1.7.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.0", + "string.prototype.trimend": "^1.0.1", + "string.prototype.trimstart": "^1.0.1" + } + }, + "es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } + }, + "escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" + }, + "escape-latex": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/escape-latex/-/escape-latex-1.2.0.tgz", + "integrity": "sha512-nV5aVWW1K0wEiUIEdZ4erkGGH8mDxGyxSeqPzRNtWP7ataw+/olFObw7hujFWlVjNsaDFw5VZ5NzVSIqRgfTiw==" + }, + "escape-regexp": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/escape-regexp/-/escape-regexp-0.0.1.tgz", + "integrity": "sha1-9EvaEtRbvfnLf4Yu5+SCez3TIlQ=" + }, + "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=" + }, + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" + }, + "etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" + }, + "eventemitter2": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-1.0.5.tgz", + "integrity": "sha1-+YNhBRexc3wLncZDvsqTiTwE3xg=" + }, + "events": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz", + "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=" + }, + "expand-brackets": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", + "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", + "requires": { + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "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" + } + }, + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } + } + }, + "expect-ct": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/expect-ct/-/expect-ct-0.1.0.tgz", + "integrity": "sha1-UnNWeN4YUwiQ2Ne5XwrGNkCVgJQ=" + }, + "express": { + "version": "4.16.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.16.2.tgz", + "integrity": "sha1-41xt/i1kt9ygpc1PIXgb4ymeB2w=", + "requires": { + "accepts": "~1.3.4", + "array-flatten": "1.1.1", + "body-parser": "1.18.2", + "content-disposition": "0.5.2", + "content-type": "~1.0.4", + "cookie": "0.3.1", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "~1.1.1", + "encodeurl": "~1.0.1", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.1.0", + "fresh": "0.5.2", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "~2.3.0", + "parseurl": "~1.3.2", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.2", + "qs": "6.5.1", + "range-parser": "~1.2.0", + "safe-buffer": "5.1.1", + "send": "0.16.1", + "serve-static": "1.13.1", + "setprototypeof": "1.1.0", + "statuses": "~1.3.1", + "type-is": "~1.6.15", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "dependencies": { + "cookie": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", + "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=" + }, + "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.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", + "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==" + } + } + }, + "extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" + }, + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "requires": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "requires": { + "is-plain-object": "^2.0.4" + } + } + } + }, + "extglob": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", + "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", + "requires": { + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" + }, + "fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" + }, + "fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" + }, + "fast-safe-stringify": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.0.7.tgz", + "integrity": "sha512-Utm6CdzT+6xsDk2m8S6uL8VHxNwI6Jub+e9NYTcAms28T84pTa25GJQV9j0CY0N1rM8hK4x6grpF2BQf+2qwVA==" + }, + "fast-stream-to-buffer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fast-stream-to-buffer/-/fast-stream-to-buffer-1.0.0.tgz", + "integrity": "sha512-bI/544WUQlD2iXBibQbOMSmG07Hay7YrpXlKaeGTPT7H7pC0eitt3usak5vUwEvCGK/O7rUAM3iyQValGU22TQ==", + "requires": { + "end-of-stream": "^1.4.1" + } + }, + "fclone": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/fclone/-/fclone-1.0.11.tgz", + "integrity": "sha1-EOhdo4v+p/xZk0HClu4ddyZu5kA=" + }, + "fd-slicer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", + "integrity": "sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=", + "requires": { + "pend": "~1.2.0" + } + }, + "fecha": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/fecha/-/fecha-4.2.0.tgz", + "integrity": "sha512-aN3pcx/DSmtyoovUudctc8+6Hl4T+hI9GBBHLjA76jdZl7+b1sgh5g4k+u/GL3dTy1/pnYzKp69FpJ0OicE3Wg==" + }, + "file-uri-to-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", + "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", + "optional": true + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "requires": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "finalhandler": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.0.tgz", + "integrity": "sha1-zgtoVbRYU+eRsvzGgARtiCU91/U=", + "requires": { + "debug": "2.6.9", + "encodeurl": "~1.0.1", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.2", + "statuses": "~1.3.1", + "unpipe": "~1.0.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } + } + }, + "find-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" + } + }, + "flat": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.0.tgz", + "integrity": "sha512-6KSMM+cHHzXC/hpldXApL2S8Uz+QZv+tq5o/L0KQYleoG+GcwrnIJhTWC7tCOiKQp8D/fIvryINU1OZCCwevjA==", + "requires": { + "is-buffer": "~2.0.4" + } + }, + "for-in": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=" + }, + "forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=" + }, + "form-data": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + } + }, + "formidable": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/formidable/-/formidable-1.2.2.tgz", + "integrity": "sha512-V8gLm+41I/8kguQ4/o1D3RIHRmhYFG4pnNyonvua+40rqcEmT4+V71yaZ3B457xbbgCsCfjSPi65u/W6vK1U5Q==" + }, + "forwarded": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", + "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=" + }, + "forwarded-parse": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/forwarded-parse/-/forwarded-parse-2.1.0.tgz", + "integrity": "sha512-as9a7Xelt0CvdUy7/qxrY73dZq2vMx49F556fwjjFrUyzq5uHHfeLgD2cCq/6P4ZvusGZzjD6aL2NdgGdS5Cew==" + }, + "fraction.js": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.0.4.tgz", + "integrity": "sha512-aK/oGatyYLTtXRHjfEsytX5fieeR5H4s8sLorzcT12taFS+dbMZejnvm9gRa8mZAPwci24ucjq9epDyaq5u8Iw==" + }, + "fragment-cache": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", + "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", + "requires": { + "map-cache": "^0.2.2" + } + }, + "frameguard": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/frameguard/-/frameguard-3.0.0.tgz", + "integrity": "sha1-e8rUae57lukdEs6zlZx4I1qScuk=" + }, + "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=" + }, + "fsevents": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", + "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", + "optional": true, + "requires": { + "bindings": "^1.5.0", + "nan": "^2.12.1" + } + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + }, + "generic-pool": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/generic-pool/-/generic-pool-2.4.3.tgz", + "integrity": "sha1-eAw29p360FpaBF3Te+etyhGk9v8=" + }, + "geoip-lite": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/geoip-lite/-/geoip-lite-1.4.1.tgz", + "integrity": "sha512-uhPTk7ndEAnqpvNhcSQh51dIrMTGOmOPKIi4KgIHtuJbgaAGgON1Q1UFGhu4YSCnN1DVWTLqcpoL9/746x6Nqg==", + "requires": { + "async": "^2.1.1", + "colors": "^1.1.2", + "iconv-lite": "^0.4.13", + "ip-address": "^5.8.9", + "lazy": "^1.0.11", + "rimraf": "^2.5.2", + "yauzl": "^2.9.2" + } + }, + "get-func-name": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", + "integrity": "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=" + }, + "get-value": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", + "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=" + }, + "getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "requires": { + "assert-plus": "^1.0.0" + } + }, + "gkt": { + "version": "https://tgz.pm2.io/gkt-1.0.0.tgz", + "integrity": "sha512-zr6QQnzLt3Ja0t0XI8gws2kn7zV2p0l/D3kreNvS6hFZhVU5g+uY/30l42jbgt0XGcNBEmBDGJR71J692V92tA==", + "optional": true + }, + "glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "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" + } + }, + "glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "requires": { + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" + }, + "dependencies": { + "is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "requires": { + "is-extglob": "^2.1.0" + } + } + } + }, + "graceful-fs": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", + "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==" + }, + "graceful-readlink": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz", + "integrity": "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=", + "dev": true + }, + "graphlib": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/graphlib/-/graphlib-2.1.8.tgz", + "integrity": "sha512-jcLLfkpoVGmH7/InMC/1hIvOPSUh38oJtGhvrOFGzioE1DZ+0YW16RgmOJhHiuWTvGiJQ9Z1Ik43JvkRPRvE+A==", + "requires": { + "lodash": "^4.17.15" + }, + "dependencies": { + "lodash": { + "version": "4.17.20", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", + "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==" + } + } + }, + "growl": { + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/growl/-/growl-1.9.2.tgz", + "integrity": "sha1-Dqd0NxXbjY3ixe3hd14bRayFwC8=", + "dev": true + }, + "har-schema": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=" + }, + "har-validator": { + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", + "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", + "requires": { + "ajv": "^6.12.3", + "har-schema": "^2.0.0" + } + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-ansi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "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": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "has-symbols": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", + "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==" + }, + "has-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", + "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", + "requires": { + "get-value": "^2.0.6", + "has-values": "^1.0.0", + "isobject": "^3.0.0" + } + }, + "has-values": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", + "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", + "requires": { + "is-number": "^3.0.0", + "kind-of": "^4.0.0" + }, + "dependencies": { + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" + }, + "kind-of": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", + "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "hawk": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/hawk/-/hawk-6.0.2.tgz", + "integrity": "sha512-miowhl2+U7Qle4vdLqDdPt9m09K6yZhkLDTWGoUiUzrQCn+mHHSmfJgAyGaLRZbPmTqfFFjRV1QWCW0VWUJBbQ==", + "requires": { + "boom": "4.x.x", + "cryptiles": "3.x.x", + "hoek": "4.x.x", + "sntp": "2.x.x" + } + }, + "he": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/he/-/he-1.1.1.tgz", + "integrity": "sha1-k0EP0hsAlzUVH4howvJx80J+I/0=", + "dev": true + }, + "helmet": { + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/helmet/-/helmet-3.12.0.tgz", + "integrity": "sha512-CgkctpvreQLL6X3EL2Igs/92+75ZFIsrob9/Rdwf2hQCBGH/DxLk4xFPxAAl6jYnnus/YXfFEVXHEJf8TJTwlA==", + "requires": { + "dns-prefetch-control": "0.1.0", + "dont-sniff-mimetype": "1.0.0", + "expect-ct": "0.1.0", + "frameguard": "3.0.0", + "helmet-csp": "2.7.0", + "hide-powered-by": "1.0.0", + "hpkp": "2.0.0", + "hsts": "2.1.0", + "ienoopen": "1.0.0", + "nocache": "2.0.0", + "referrer-policy": "1.1.0", + "x-xss-protection": "1.1.0" + } + }, + "helmet-csp": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/helmet-csp/-/helmet-csp-2.7.0.tgz", + "integrity": "sha512-IGIAkWnxjRbgMXFA2/kmDqSIrIaSfZ6vhMHlSHw7jm7Gm9nVVXqwJ2B1YEpYrJsLrqY+w2Bbimk7snux9+sZAw==", + "requires": { + "camelize": "1.0.0", + "content-security-policy-builder": "2.0.0", + "dasherize": "2.0.0", + "lodash.reduce": "4.6.0", + "platform": "1.3.5" + } + }, + "hide-powered-by": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/hide-powered-by/-/hide-powered-by-1.0.0.tgz", + "integrity": "sha1-SoWtZYgfYoV/xwr3F0oRhNzM4ys=" + }, + "hoek": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/hoek/-/hoek-4.2.1.tgz", + "integrity": "sha512-QLg82fGkfnJ/4iy1xZ81/9SIJiq1NGFUMGs6ParyjBZr6jW2Ufj/snDqTHixNlHdPNwN2RLVD0Pi3igeK9+JfA==" + }, + "hollaex-node-lib": { + "version": "github:bitholla/hollaex-node-lib#48bee2cf3f7d7ea0d000598df1f3d16c307d6b7a", + "from": "github:bitholla/hollaex-node-lib#2.0", + "requires": { + "lodash": "4.17.13", + "moment": "2.24.0", + "request": "2.88.0", + "request-promise": "4.2.2", + "socket.io-client": "2.2.0" + }, + "dependencies": { + "lodash": { + "version": "4.17.13", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.13.tgz", + "integrity": "sha512-vm3/XWXfWtRua0FkUyEHBZy8kCPjErNBT9fJx8Zvs+U6zjqPbTUOpkaoum3O5uiA8sm+yNMHXfYkTUHFoMxFNA==" + }, + "moment": { + "version": "2.24.0", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.24.0.tgz", + "integrity": "sha512-bV7f+6l2QigeBBZSM/6yTNq4P2fNpSWj/0e7jQcy87A8e7o2nAfP/34/2ky5Vw4B9S446EtIhodAzkFCcR4dQg==" + }, + "qs": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", + "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" + }, + "request": { + "version": "2.88.0", + "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz", + "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==", + "requires": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "har-validator": "~5.1.0", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", + "performance-now": "^2.1.0", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.4.3", + "tunnel-agent": "^0.6.0", + "uuid": "^3.3.2" + } + }, + "uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==" + } + } + }, + "hollaex-tools-lib": { + "version": "github:bitholla/hollaex-tools-lib#3ca999c585417bbf7caf5b5d75840abd48e05660", + "from": "github:bitholla/hollaex-tools-lib#develop", + "requires": { + "bcryptjs": "2.4.3", + "bluebird": "3.7.2", + "flat": "5.0.0", + "hollaex-node-lib": "github:bitholla/hollaex-node-lib#2.0", + "json2csv": "4.5.4", + "jsonwebtoken": "8.5.1", + "lodash": "4.17.15", + "otp": "0.1.3", + "request": "2.83.0", + "request-promise": "4.2.2", + "validator": "13.1.1" + }, + "dependencies": { + "bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==" + }, + "jsonwebtoken": { + "version": "8.5.1", + "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-8.5.1.tgz", + "integrity": "sha512-XjwVfRS6jTMsqYs0EsuJ4LGxXV14zQybNd4L2r0UvbVnSF9Af8x7p5MzbJ90Ioz/9TI41/hTCvznF/loiSzn8w==", + "requires": { + "jws": "^3.2.2", + "lodash.includes": "^4.3.0", + "lodash.isboolean": "^3.0.3", + "lodash.isinteger": "^4.0.4", + "lodash.isnumber": "^3.0.3", + "lodash.isplainobject": "^4.0.6", + "lodash.isstring": "^4.0.1", + "lodash.once": "^4.0.0", + "ms": "^2.1.1", + "semver": "^5.6.0" + } + }, + "lodash": { + "version": "4.17.15", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", + "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==" + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + }, + "validator": { + "version": "13.1.1", + "resolved": "https://registry.npmjs.org/validator/-/validator-13.1.1.tgz", + "integrity": "sha512-8GfPiwzzRoWTg7OV1zva1KvrSemuMkv07MA9TTl91hfhe+wKrsrgVN4H2QSFd/U/FhiU3iWPYVgvbsOGwhyFWw==" + } + } + }, + "hosted-git-info": { + "version": "2.8.8", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.8.tgz", + "integrity": "sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg==" + }, + "hpkp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/hpkp/-/hpkp-2.0.0.tgz", + "integrity": "sha1-EOFCJk52IVpdMMROxD3mTe5tFnI=" + }, + "hsts": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/hsts/-/hsts-2.1.0.tgz", + "integrity": "sha512-zXhh/DqgrTXJ7erTN6Fh5k/xjMhDGXCqdYN3wvxUvGUQvnxcFfUd8E+6vLg/nk3ss1TYMb+DhRl25fYABioTvA==" + }, + "http": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/http/-/http-0.0.0.tgz", + "integrity": "sha1-huYybSnF0Dnen6xYSkVon5KfT3I=" + }, + "http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" + }, + "dependencies": { + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + }, + "statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" + } + } + }, + "http-headers": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/http-headers/-/http-headers-3.0.2.tgz", + "integrity": "sha512-87E1I+2Wg4dxxz4rcxElo3dxO/w1ZtgL1yA0Sb6vH3qU16vRKq1NjWQv9SCY3ly2OQROcoxHZOUpmelS+k6wOw==", + "requires": { + "next-line": "^1.1.0" + } + }, + "http-request-to-url": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/http-request-to-url/-/http-request-to-url-1.0.0.tgz", + "integrity": "sha512-YYx0lKXG9+T1fT2q3ZgXLczMI3jW09g9BvIA6L3BG0tFqGm83Ka/+RUZGANRG7Ut/yueD7LPcZQ/+pA5ndNajw==", + "requires": { + "await-event": "^2.1.0", + "socket-location": "^1.0.0" + } + }, + "http-signature": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", + "requires": { + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + } + }, + "iconv-lite": { + "version": "0.4.19", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.19.tgz", + "integrity": "sha512-oTZqweIP51xaGPI4uPa56/Pri/480R+mo7SeU+YETByQNhDG55ycFyNLIgta9vXhILrxXDmF7ZGhqZIcuN0gJQ==" + }, + "ieee754": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", + "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==" + }, + "ienoopen": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/ienoopen/-/ienoopen-1.0.0.tgz", + "integrity": "sha1-NGpCj0dKrI9QzzeE6i0PFvYr2ms=" + }, + "in-publish": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/in-publish/-/in-publish-2.0.1.tgz", + "integrity": "sha512-oDM0kUSNFC31ShNxHKUyfZKy8ZeXZBWMjMdZHKLOk13uvT27VTL/QzRGfRUcevJhpkZAvlhPYuXkF7eNWrtyxQ==" + }, + "indexof": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", + "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=" + }, + "inflection": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/inflection/-/inflection-1.12.0.tgz", + "integrity": "sha1-ogCTVlbW9fa8TcdQLhrstwMihBY=" + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "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==" + }, + "install": { + "version": "0.10.4", + "resolved": "https://registry.npmjs.org/install/-/install-0.10.4.tgz", + "integrity": "sha512-+IRyOastuPmLVx9zlVXJoKErSqz1Ma5at9A7S8yfsj3W+Kg95faPoh3bPDtMrZ/grz4PRmXzrswmlzfLlYyLOw==" + }, + "interpret": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", + "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==" + }, + "ip-address": { + "version": "5.9.4", + "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-5.9.4.tgz", + "integrity": "sha512-dHkI3/YNJq4b/qQaz+c8LuarD3pY24JqZWfjB8aZx1gtpc2MDILu9L9jpZe1sHpzo/yWFweQVn+U//FhazUxmw==", + "requires": { + "jsbn": "1.1.0", + "lodash": "^4.17.15", + "sprintf-js": "1.1.2" + }, + "dependencies": { + "lodash": { + "version": "4.17.20", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", + "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==" + } + } + }, + "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": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/is/-/is-3.3.0.tgz", + "integrity": "sha512-nW24QBoPcFGGHJGUwnfpI7Yc5CdqWNdsyHQszVE/z2pKHXzh7FZ5GWhJqSyaQ9wMkQnsTx+kAI8bHlCX4tKdbg==" + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=" + }, + "is-binary-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", + "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", + "requires": { + "binary-extensions": "^1.0.0" + } + }, + "is-bluebird": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-bluebird/-/is-bluebird-1.0.2.tgz", + "integrity": "sha1-CWQ5Bg9KpBGr7hkUOoTWpVNG1uI=" + }, + "is-buffer": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.4.tgz", + "integrity": "sha512-Kq1rokWXOPXWuaMAqZiJW4XxsmD9zGx9q4aePabbn3qCRGedtH7Cm+zV8WETitMfu1wdh+Rvd6w5egwSngUX2A==" + }, + "is-callable": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.0.tgz", + "integrity": "sha512-pyVD9AaGLxtg6srb2Ng6ynWJqkHU9bEM087AKck0w8QwDarTfNcpIYoU8x8Hv2Icm8u6kFJM18Dag8lyqGkviw==" + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-date-object": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz", + "integrity": "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==" + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "dependencies": { + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==" + } + } + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=" + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" + }, + "is-finite": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.1.0.tgz", + "integrity": "sha512-cdyMtqX/BOqqNBBiKlIVkytNHm49MtMlYyn1zxzvJKWmFMlGzm+ry5BBfYyeY9YmNKbRSo/o7OX9w9ale0wg3w==" + }, + "is-glob": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", + "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-integer": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-integer/-/is-integer-1.0.7.tgz", + "integrity": "sha1-a96Bqs3feLZZtmKdYpytxRqIbVw=", + "requires": { + "is-finite": "^1.0.0" + } + }, + "is-native": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-native/-/is-native-1.0.1.tgz", + "integrity": "sha1-zRjMFi6EUNaDtbq+eayZwUVElnU=", + "requires": { + "is-nil": "^1.0.0", + "to-source-code": "^1.0.0" + } + }, + "is-nil": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-nil/-/is-nil-1.0.1.tgz", + "integrity": "sha1-LauingtYUGOHXntTnQcfWxWTeWk=" + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "requires": { + "isobject": "^3.0.1" + } + }, + "is-regex": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.1.tgz", + "integrity": "sha512-1+QkEcxiLlB7VEyFtyBg94e08OAsvq7FUBgApTq/w2ymCLyKJgDPsybBENVtA7XCQEgEXxKPonG+mvYRxh/LIg==", + "requires": { + "has-symbols": "^1.0.1" + } + }, + "is-secret": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-secret/-/is-secret-1.2.1.tgz", + "integrity": "sha512-VtBantcgKL2a64fDeCmD1JlkHToh3v0bVOhyJZ5aGTjxtCgrdNcjaC9GaaRFXi19gA4/pYFpnuyoscIgQCFSMQ==" + }, + "is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" + }, + "is-symbol": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz", + "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==", + "requires": { + "has-symbols": "^1.0.1" + } + }, + "is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" + }, + "is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==" + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, + "isemail": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/isemail/-/isemail-1.2.0.tgz", + "integrity": "sha1-vgPfjMPineTSxd9lASY/H6RZXpo=" + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" + }, + "isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" + }, + "javascript-natural-sort": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/javascript-natural-sort/-/javascript-natural-sort-0.7.1.tgz", + "integrity": "sha1-+eIwPUUH9tdDVac2ZNFED7Wg71k=" + }, + "jmespath": { + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/jmespath/-/jmespath-0.15.0.tgz", + "integrity": "sha1-o/Iiqarp+Wb10nx5ZRDigJF2Qhc=" + }, + "joi": { + "version": "6.10.1", + "resolved": "https://registry.npmjs.org/joi/-/joi-6.10.1.tgz", + "integrity": "sha1-TVDDGAeRIgAP5fFq8f+OGRe3fgY=", + "requires": { + "hoek": "2.x.x", + "isemail": "1.x.x", + "moment": "2.x.x", + "topo": "1.x.x" + }, + "dependencies": { + "hoek": { + "version": "2.16.3", + "resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz", + "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=" + } + } + }, + "js-string-escape": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/js-string-escape/-/js-string-escape-1.0.1.tgz", + "integrity": "sha1-4mJbrbwNZ8dTPp7cEGjFh65BN+8=" + }, + "js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + }, + "js-yaml": { + "version": "3.14.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.0.tgz", + "integrity": "sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A==", + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "jsbn": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-1.1.0.tgz", + "integrity": "sha1-sBMHyym2GKHtJux56RH4A8TaAEA=" + }, + "json-parse-even-better-errors": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.0.tgz", + "integrity": "sha512-o3aP+RsWDJZayj1SbHNQAI8x0v3T3SKiGoZlNYfbUP1S3omJQ6i9CnqADqkSPaOAxwua4/1YWx5CM7oiChJt2Q==" + }, + "json-refs": { + "version": "2.1.7", + "resolved": "https://registry.npmjs.org/json-refs/-/json-refs-2.1.7.tgz", + "integrity": "sha1-uesB/in16j6Sh48VrqEK04taz4k=", + "requires": { + "commander": "^2.9.0", + "graphlib": "^2.1.1", + "js-yaml": "^3.8.3", + "native-promise-only": "^0.8.1", + "path-loader": "^1.0.2", + "slash": "^1.0.0", + "uri-js": "^3.0.2" + }, + "dependencies": { + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" + }, + "uri-js": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-3.0.2.tgz", + "integrity": "sha1-+QuFhQf4HepNz7s8TD2/orVX+qo=", + "requires": { + "punycode": "^2.1.0" + } + } + } + }, + "json-schema": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", + "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=" + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" + }, + "json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" + }, + "json2csv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/json2csv/-/json2csv-4.5.4.tgz", + "integrity": "sha512-YxBhY4Lmn8IvVZ36nqg5omxneLy9JlorkqW1j/EDCeqvmi+CQ4uM+wsvXlcIqvGDewIPXMC/O/oF8DX9EH5aoA==", + "requires": { + "commander": "^2.15.1", + "jsonparse": "^1.3.1", + "lodash.get": "^4.4.2" + } + }, + "json3": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/json3/-/json3-3.3.2.tgz", + "integrity": "sha1-PAQ0dD35Pi9cQq7nsZvLSDV19OE=", + "dev": true + }, + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "requires": { + "minimist": "^1.2.0" + } + }, + "jsonparse": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", + "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=" + }, + "jsonwebtoken": { + "version": "7.4.3", + "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-7.4.3.tgz", + "integrity": "sha1-d/UCHeBYtgWheD+hKD6ZgS5kVjg=", + "requires": { + "joi": "^6.10.1", + "jws": "^3.1.4", + "lodash.once": "^4.0.0", + "ms": "^2.0.0", + "xtend": "^4.0.1" + } + }, + "jspath": { + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/jspath/-/jspath-0.3.4.tgz", + "integrity": "sha1-2J0+0uh0NP5s0ASyQskS35aXNSQ=" + }, + "jsprim": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", + "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", + "requires": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.2.3", + "verror": "1.10.0" + } + }, + "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" + } + }, + "kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==" + }, + "kuler": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/kuler/-/kuler-1.0.1.tgz", + "integrity": "sha512-J9nVUucG1p/skKul6DU3PUZrhs0LPulNaeUOox0IyXDi8S4CztTHs1gQphhuZmzXG7VOQSf6NJfKuzteQLv9gQ==", + "requires": { + "colornames": "^1.1.1" + } + }, + "lazy": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/lazy/-/lazy-1.0.11.tgz", + "integrity": "sha1-2qBoIGKCVCwIgojpdcKXwa53tpA=" + }, + "lines-and-columns": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz", + "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=" + }, + "load-source-map": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/load-source-map/-/load-source-map-1.0.0.tgz", + "integrity": "sha1-MY9JkFzopwnft8w/FvPv47zx3QU=", + "requires": { + "in-publish": "^2.0.0", + "semver": "^5.3.0", + "source-map": "^0.5.6" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + } + } + }, + "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" + } + }, + "lodash": { + "version": "4.17.5", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.5.tgz", + "integrity": "sha512-svL3uiZf1RwhH+cWrfZn3A4+U58wbP0tGVTLQPbjplZxZ8ROD9VLuNgsRniTlLe7OlSqR79RUehXgpBW/s0IQw==" + }, + "lodash-compat": { + "version": "3.10.2", + "resolved": "https://registry.npmjs.org/lodash-compat/-/lodash-compat-3.10.2.tgz", + "integrity": "sha1-xpQBKKnTD46QLNLPmf0Muk7PwYM=" + }, + "lodash._arraypool": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/lodash._arraypool/-/lodash._arraypool-2.4.1.tgz", + "integrity": "sha1-6I7suS4ruEyQZWEv2VigcZzUf5Q=" + }, + "lodash._baseassign": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/lodash._baseassign/-/lodash._baseassign-3.2.0.tgz", + "integrity": "sha1-jDigmVAPIVrQnlnxci/QxSv+Ck4=", + "dev": true, + "requires": { + "lodash._basecopy": "^3.0.0", + "lodash.keys": "^3.0.0" + }, + "dependencies": { + "lodash.isarray": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/lodash.isarray/-/lodash.isarray-3.0.4.tgz", + "integrity": "sha1-eeTriMNqgSKvhvhEqpvNhRtfu1U=", + "dev": true + }, + "lodash.keys": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-3.1.2.tgz", + "integrity": "sha1-TbwEcrFWvlCgsoaFXRvQsMZWCYo=", + "dev": true, + "requires": { + "lodash._getnative": "^3.0.0", + "lodash.isarguments": "^3.0.0", + "lodash.isarray": "^3.0.0" + } + } + } + }, + "lodash._basebind": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/lodash._basebind/-/lodash._basebind-2.4.1.tgz", + "integrity": "sha1-6UC5690nwyfgqNqxtVkWxTQelXU=", + "requires": { + "lodash._basecreate": "~2.4.1", + "lodash._setbinddata": "~2.4.1", + "lodash._slice": "~2.4.1", + "lodash.isobject": "~2.4.1" + } + }, + "lodash._baseclone": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/lodash._baseclone/-/lodash._baseclone-2.4.1.tgz", + "integrity": "sha1-MPgj5X4X43NdODvWK2Czh1Q7QYY=", + "requires": { + "lodash._getarray": "~2.4.1", + "lodash._releasearray": "~2.4.1", + "lodash._slice": "~2.4.1", + "lodash.assign": "~2.4.1", + "lodash.foreach": "~2.4.1", + "lodash.forown": "~2.4.1", + "lodash.isarray": "~2.4.1", + "lodash.isobject": "~2.4.1" + } + }, + "lodash._basecopy": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz", + "integrity": "sha1-jaDmqHbPNEwK2KVIghEd08XHyjY=", + "dev": true + }, + "lodash._basecreate": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/lodash._basecreate/-/lodash._basecreate-2.4.1.tgz", + "integrity": "sha1-+Ob1tXip405UEXm1a47uv0oofgg=", + "requires": { + "lodash._isnative": "~2.4.1", + "lodash.isobject": "~2.4.1", + "lodash.noop": "~2.4.1" + } + }, + "lodash._basecreatecallback": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/lodash._basecreatecallback/-/lodash._basecreatecallback-2.4.1.tgz", + "integrity": "sha1-fQsmdknLKeehOdAQO3wR+uhOSFE=", + "requires": { + "lodash._setbinddata": "~2.4.1", + "lodash.bind": "~2.4.1", + "lodash.identity": "~2.4.1", + "lodash.support": "~2.4.1" + } + }, + "lodash._basecreatewrapper": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/lodash._basecreatewrapper/-/lodash._basecreatewrapper-2.4.1.tgz", + "integrity": "sha1-TTHy595+E0+/KAN2K4FQsyUZZm8=", + "requires": { + "lodash._basecreate": "~2.4.1", + "lodash._setbinddata": "~2.4.1", + "lodash._slice": "~2.4.1", + "lodash.isobject": "~2.4.1" + } + }, + "lodash._createwrapper": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/lodash._createwrapper/-/lodash._createwrapper-2.4.1.tgz", + "integrity": "sha1-UdaVeXPaTtVW43KQ2MGhjFPeFgc=", + "requires": { + "lodash._basebind": "~2.4.1", + "lodash._basecreatewrapper": "~2.4.1", + "lodash._slice": "~2.4.1", + "lodash.isfunction": "~2.4.1" + } + }, + "lodash._getarray": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/lodash._getarray/-/lodash._getarray-2.4.1.tgz", + "integrity": "sha1-+vH3+BD6mFolHCGHQESBCUg55e4=", + "requires": { + "lodash._arraypool": "~2.4.1" + } + }, + "lodash._getnative": { + "version": "3.9.1", + "resolved": "https://registry.npmjs.org/lodash._getnative/-/lodash._getnative-3.9.1.tgz", + "integrity": "sha1-VwvH3t5G1hzc3mh9ZdPuy6o6r/U=", + "dev": true + }, + "lodash._isiterateecall": { + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz", + "integrity": "sha1-UgOte6Ql+uhCRg5pbbnPPmqsBXw=", + "dev": true + }, + "lodash._isnative": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/lodash._isnative/-/lodash._isnative-2.4.1.tgz", + "integrity": "sha1-PqZAS3hKe+g2x7V1gOHN95sUgyw=" + }, + "lodash._maxpoolsize": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/lodash._maxpoolsize/-/lodash._maxpoolsize-2.4.1.tgz", + "integrity": "sha1-nUgvRjuOZq++WcLBTtsRcGAXIzQ=" + }, + "lodash._objecttypes": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/lodash._objecttypes/-/lodash._objecttypes-2.4.1.tgz", + "integrity": "sha1-fAt/admKH3ZSn4kLDNsbTf7BHBE=" + }, + "lodash._releasearray": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/lodash._releasearray/-/lodash._releasearray-2.4.1.tgz", + "integrity": "sha1-phOWMNdtFTawfdyAliiJsIL2pkE=", + "requires": { + "lodash._arraypool": "~2.4.1", + "lodash._maxpoolsize": "~2.4.1" + } + }, + "lodash._setbinddata": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/lodash._setbinddata/-/lodash._setbinddata-2.4.1.tgz", + "integrity": "sha1-98IAzRuS7yNrOZ7s9zxkjReqlNI=", + "requires": { + "lodash._isnative": "~2.4.1", + "lodash.noop": "~2.4.1" + } + }, + "lodash._shimkeys": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/lodash._shimkeys/-/lodash._shimkeys-2.4.1.tgz", + "integrity": "sha1-bpzJZm/wgfC1psl4uD4kLmlJ0gM=", + "requires": { + "lodash._objecttypes": "~2.4.1" + } + }, + "lodash._slice": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/lodash._slice/-/lodash._slice-2.4.1.tgz", + "integrity": "sha1-dFz0GlNZexj2iImFREBe+isG2Q8=" + }, + "lodash.assign": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/lodash.assign/-/lodash.assign-2.4.1.tgz", + "integrity": "sha1-hMOVlt1xGBqXsGUpE6fJZ15Jsao=", + "requires": { + "lodash._basecreatecallback": "~2.4.1", + "lodash._objecttypes": "~2.4.1", + "lodash.keys": "~2.4.1" + } + }, + "lodash.bind": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/lodash.bind/-/lodash.bind-2.4.1.tgz", + "integrity": "sha1-XRn6AFyMTSNvr0dCx7eh/Kvikmc=", + "requires": { + "lodash._createwrapper": "~2.4.1", + "lodash._slice": "~2.4.1" + } + }, + "lodash.clonedeep": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-2.4.1.tgz", + "integrity": "sha1-8pIDtAsS/uCkXTYxZIJZvrq8eGg=", + "requires": { + "lodash._baseclone": "~2.4.1", + "lodash._basecreatecallback": "~2.4.1" + } + }, + "lodash.create": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/lodash.create/-/lodash.create-3.1.1.tgz", + "integrity": "sha1-1/KEnw29p+BGgruM1yqwIkYd6+c=", + "dev": true, + "requires": { + "lodash._baseassign": "^3.0.0", + "lodash._basecreate": "^3.0.0", + "lodash._isiterateecall": "^3.0.0" + }, + "dependencies": { + "lodash._basecreate": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash._basecreate/-/lodash._basecreate-3.0.3.tgz", + "integrity": "sha1-G8ZhYU2qf8MRt9A78WgGoCE8+CE=", + "dev": true + } + } + }, + "lodash.defaultsdeep": { + "version": "4.6.1", + "resolved": "https://registry.npmjs.org/lodash.defaultsdeep/-/lodash.defaultsdeep-4.6.1.tgz", + "integrity": "sha512-3j8wdDzYuWO3lM3Reg03MuQR957t287Rpcxp1njpEa8oDrikb+FwGdW3n+FELh/A6qib6yPit0j/pv9G/yeAqA==" + }, + "lodash.findindex": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.findindex/-/lodash.findindex-4.6.0.tgz", + "integrity": "sha1-oyRd7mH7m24GJLU1ElYku2nBEQY=" + }, + "lodash.foreach": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/lodash.foreach/-/lodash.foreach-2.4.1.tgz", + "integrity": "sha1-/j/Do0yGyUyrb5UiVgKCdB4BYwk=", + "requires": { + "lodash._basecreatecallback": "~2.4.1", + "lodash.forown": "~2.4.1" + } + }, + "lodash.forown": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/lodash.forown/-/lodash.forown-2.4.1.tgz", + "integrity": "sha1-eLQer+FAX6lmRZ6kGT/VAtCEUks=", + "requires": { + "lodash._basecreatecallback": "~2.4.1", + "lodash._objecttypes": "~2.4.1", + "lodash.keys": "~2.4.1" + } + }, + "lodash.get": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", + "integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=" + }, + "lodash.identity": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/lodash.identity/-/lodash.identity-2.4.1.tgz", + "integrity": "sha1-ZpTP+mX++TH3wxzobHRZfPVg9PE=" + }, + "lodash.includes": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", + "integrity": "sha1-YLuYqHy5I8aMoeUTJUgzFISfVT8=" + }, + "lodash.isarguments": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz", + "integrity": "sha1-L1c9hcaiQon/AGY7SRwdM4/zRYo=", + "dev": true + }, + "lodash.isarray": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/lodash.isarray/-/lodash.isarray-2.4.1.tgz", + "integrity": "sha1-tSoybB9i9tfac6MdVAHfbvRPD6E=", + "requires": { + "lodash._isnative": "~2.4.1" + } + }, + "lodash.isboolean": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", + "integrity": "sha1-bC4XHbKiV82WgC/UOwGyDV9YcPY=" + }, + "lodash.isequal": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", + "integrity": "sha1-QVxEePK8wwEgwizhDtMib30+GOA=" + }, + "lodash.isfunction": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/lodash.isfunction/-/lodash.isfunction-2.4.1.tgz", + "integrity": "sha1-LP1XXHPkmKtX4xm3f6Aq3vE6lNE=" + }, + "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.isobject": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/lodash.isobject/-/lodash.isobject-2.4.1.tgz", + "integrity": "sha1-Wi5H/mmVPx7mMafrof5k0tBlWPU=", + "requires": { + "lodash._objecttypes": "~2.4.1" + } + }, + "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.keys": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-2.4.1.tgz", + "integrity": "sha1-SN6kbfj/djKxDXBrissmWR4rNyc=", + "requires": { + "lodash._isnative": "~2.4.1", + "lodash._shimkeys": "~2.4.1", + "lodash.isobject": "~2.4.1" + } + }, + "lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==" + }, + "lodash.noop": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/lodash.noop/-/lodash.noop-2.4.1.tgz", + "integrity": "sha1-T7VPgWZS5a4Q6PcvcXo4jHMmU4o=" + }, + "lodash.once": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", + "integrity": "sha1-DdOXEhPHxW34gJd9UEyI+0cal6w=" + }, + "lodash.reduce": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.reduce/-/lodash.reduce-4.6.0.tgz", + "integrity": "sha1-8atrg5KZrUj3hKu/R2WW8DuRTTs=" + }, + "lodash.support": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/lodash.support/-/lodash.support-2.4.1.tgz", + "integrity": "sha1-Mg4LZwMWc8KNeiu12eAzGkUkBRU=", + "requires": { + "lodash._isnative": "~2.4.1" + } + }, + "logform": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/logform/-/logform-2.2.0.tgz", + "integrity": "sha512-N0qPlqfypFx7UHNn4B3lzS/b0uLqt2hmuoa+PpuXNYgozdJYAyauF5Ky0BWVjrxDlMWiT3qN4zPq3vVAfZy7Yg==", + "requires": { + "colors": "^1.2.1", + "fast-safe-stringify": "^2.0.4", + "fecha": "^4.2.0", + "ms": "^2.1.1", + "triple-beam": "^1.3.0" + } + }, + "loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "requires": { + "js-tokens": "^3.0.0 || ^4.0.0" + } + }, + "lru-cache": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", + "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", + "requires": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } + }, + "machine": { + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/machine/-/machine-10.4.0.tgz", + "integrity": "sha1-m1Ys5GeCEzKCijd9GQ65NrTkB7I=", + "requires": { + "convert-to-ecmascript-compatible-varname": "^0.1.0", + "debug": "^2.1.1", + "lodash": "^3.8.0", + "object-hash": "~0.3.0", + "rttc": "^7.2.1", + "switchback": "^2.0.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "lodash": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz", + "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=" + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } + } + }, + "machinepack-http": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/machinepack-http/-/machinepack-http-2.4.0.tgz", + "integrity": "sha1-CnhcF9xrnBuaxAiBvu+uiudIVek=", + "requires": { + "lodash": "^3.9.2", + "machine": "^10.3.1", + "machinepack-urls": "^4.0.0", + "request": "^2.55.0" + }, + "dependencies": { + "lodash": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz", + "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=" + } + } + }, + "machinepack-urls": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/machinepack-urls/-/machinepack-urls-4.1.0.tgz", + "integrity": "sha1-0l4y6Xw8LLiVaLqMmNIp1cMF45E=", + "requires": { + "lodash": "^3.9.2", + "machine": "^9.0.3" + }, + "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" + } + }, + "lodash": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz", + "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=" + }, + "machine": { + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/machine/-/machine-9.1.2.tgz", + "integrity": "sha1-hL+Pt3ZqlqplqpbWbpUJ62oFqDQ=", + "requires": { + "convert-to-ecmascript-compatible-varname": "^0.1.0", + "debug": "^2.1.1", + "lodash": "^3.8.0", + "object-hash": "~0.3.0", + "rttc": "^4.0.0", + "switchback": "^1.1.3" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "rttc": { + "version": "4.5.2", + "resolved": "https://registry.npmjs.org/rttc/-/rttc-4.5.2.tgz", + "integrity": "sha1-umo+komLQnTxI7usSUhddhajfLw=", + "requires": { + "lodash": "^3.8.0" + } + }, + "switchback": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/switchback/-/switchback-1.1.3.tgz", + "integrity": "sha1-EscBCTSNailvc5upEO64U/i25jE=", + "requires": { + "lodash": "~2.4.1" + }, + "dependencies": { + "lodash": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-2.4.2.tgz", + "integrity": "sha1-+t2DS5aDBz2hebPq5tnA0VBT9z4=" + } + } + } + } + }, + "map-cache": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", + "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=" + }, + "map-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", + "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", + "requires": { + "object-visit": "^1.0.0" + } + }, + "mapcap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/mapcap/-/mapcap-1.0.0.tgz", + "integrity": "sha512-KcNlZSlFPx+r1jYZmxEbTVymG+dIctf10WmWkuhrhrblM+KMoF77HelwihL5cxYlORye79KoR4IlOOk99lUJ0g==" + }, + "mathjs": { + "version": "3.20.2", + "resolved": "https://registry.npmjs.org/mathjs/-/mathjs-3.20.2.tgz", + "integrity": "sha512-3f6/+uf1cUtIz1rYFz775wekl/UEDSQ3mU6xdxW7qzpvvhc2v28i3UtLsGTRB+u8OqDWoSX6Dz8gehaGFs6tCA==", + "requires": { + "complex.js": "2.0.4", + "decimal.js": "9.0.1", + "escape-latex": "^1.0.0", + "fraction.js": "4.0.4", + "javascript-natural-sort": "0.7.1", + "seed-random": "2.2.0", + "tiny-emitter": "2.0.2", + "typed-function": "0.10.7" + } + }, + "measured-core": { + "version": "1.51.1", + "resolved": "https://registry.npmjs.org/measured-core/-/measured-core-1.51.1.tgz", + "integrity": "sha512-DZQP9SEwdqqYRvT2slMK81D/7xwdxXosZZBtLVfPSo6y5P672FBTbzHVdN4IQyUkUpcVOR9pIvtUy5Ryl7NKyg==", + "requires": { + "binary-search": "^1.3.3", + "optional-js": "^2.0.0" + } + }, + "measured-reporting": { + "version": "1.51.1", + "resolved": "https://registry.npmjs.org/measured-reporting/-/measured-reporting-1.51.1.tgz", + "integrity": "sha512-JCt+2u6XT1I5lG3SuYqywE0e62DJuAzBcfMzWGUhIYtPQV2Vm4HiYt/durqmzsAbZV181CEs+o/jMKWJKkYIWw==", + "requires": { + "console-log-level": "^1.4.1", + "mapcap": "^1.0.0", + "measured-core": "^1.51.1", + "optional-js": "^2.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=" + }, + "micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + } + }, + "mime": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz", + "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==" + }, + "mime-db": { + "version": "1.44.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz", + "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==" + }, + "mime-types": { + "version": "2.1.27", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz", + "integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==", + "requires": { + "mime-db": "1.44.0" + } + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" + }, + "mixin-deep": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", + "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", + "requires": { + "for-in": "^1.0.2", + "is-extendable": "^1.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "requires": { + "is-plain-object": "^2.0.4" + } + } + } + }, + "mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "requires": { + "minimist": "^1.2.5" + } + }, + "mocha": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-3.5.3.tgz", + "integrity": "sha512-/6na001MJWEtYxHOV1WLfsmR4YIynkUEhBwzsb+fk2qmQ3iqsi258l/Q2MWHJMImAcNpZ8DEdYAK72NHoIQ9Eg==", + "dev": true, + "requires": { + "browser-stdout": "1.3.0", + "commander": "2.9.0", + "debug": "2.6.8", + "diff": "3.2.0", + "escape-string-regexp": "1.0.5", + "glob": "7.1.1", + "growl": "1.9.2", + "he": "1.1.1", + "json3": "3.3.2", + "lodash.create": "3.1.1", + "mkdirp": "0.5.1", + "supports-color": "3.1.2" + }, + "dependencies": { + "commander": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.9.0.tgz", + "integrity": "sha1-nJkJQXbhIkDLItbFFGCYQA/g99Q=", + "dev": true, + "requires": { + "graceful-readlink": ">= 1.0.0" + } + }, + "debug": { + "version": "2.6.8", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.8.tgz", + "integrity": "sha1-5zFTHKLt4n0YgiJCfaF4IdaP9Pw=", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "glob": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.1.tgz", + "integrity": "sha1-gFIR3wT6rxxjo2ADBs31reULLsg=", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.2", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, + "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.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "supports-color": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.1.2.tgz", + "integrity": "sha1-cqJiiU2dQIuVbKBf83su2KbiotU=", + "dev": true, + "requires": { + "has-flag": "^1.0.0" + } + } + } + }, + "module-details-from-path": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/module-details-from-path/-/module-details-from-path-1.0.3.tgz", + "integrity": "sha1-EUyUlnPiqKNenTV4hSeqN7Z52is=" + }, + "moment": { + "version": "2.21.0", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.21.0.tgz", + "integrity": "sha512-TCZ36BjURTeFTM/CwRcViQlfkMvL1/vFISuNLO5GkcVm1+QHfbSiNqZuWeMFjj1/3+uAjXswgRk30j1kkLYJBQ==" + }, + "moment-timezone": { + "version": "0.5.28", + "resolved": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.28.tgz", + "integrity": "sha512-TDJkZvAyKIVWg5EtVqRzU97w0Rb0YVbfpqyjgu6GwXCAohVRqwZjf4fOzDE6p1Ch98Sro/8hQQi65WDXW5STPw==", + "requires": { + "moment": ">= 2.9.0" + } + }, + "monitor-event-loop-delay": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/monitor-event-loop-delay/-/monitor-event-loop-delay-1.0.0.tgz", + "integrity": "sha512-YRIr1exCIfBDLZle8WHOfSo7Xg3M+phcZfq9Fx1L6Abo+atGp7cge5pM7PjyBn4s1oZI/BRD4EMrzQBbPpVb5Q==" + }, + "morgan": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.9.0.tgz", + "integrity": "sha1-0B+mxlhZt2/PMbPLU6OCGjEdgFE=", + "requires": { + "basic-auth": "~2.0.0", + "debug": "2.6.9", + "depd": "~1.1.1", + "on-finished": "~2.3.0", + "on-headers": "~1.0.1" + }, + "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=" + } + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "multer": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/multer/-/multer-1.4.2.tgz", + "integrity": "sha512-xY8pX7V+ybyUpbYMxtjM9KAiD9ixtg5/JkeKUTD6xilfDv0vzzOFcCp4Ljb1UU3tSOM3VTZtKo63OmzOrGi3Cg==", + "requires": { + "append-field": "^1.0.0", + "busboy": "^0.2.11", + "concat-stream": "^1.5.2", + "mkdirp": "^0.5.1", + "object-assign": "^4.1.1", + "on-finished": "^2.3.0", + "type-is": "^1.6.4", + "xtend": "^4.0.0" + } + }, + "mustache": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/mustache/-/mustache-2.3.2.tgz", + "integrity": "sha512-KpMNwdQsYz3O/SBS1qJ/o3sqUJ5wSb8gb0pul8CO0S56b9Y2ALm8zCfsjPXsqGFfoNBkDwZuZIAjhsZI03gYVQ==" + }, + "mute-stream": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", + "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==" + }, + "nan": { + "version": "2.14.1", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.1.tgz", + "integrity": "sha512-isWHgVjnFjh2x2yuJ/tj3JbwoHu3UC2dX5G/88Cm24yB6YopVgxvBObDY7n5xW6ExmFhJpSEQqFPvq9zaXc8Jw==", + "optional": true + }, + "nanomatch": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", + "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "fragment-cache": "^0.2.1", + "is-windows": "^1.0.2", + "kind-of": "^6.0.2", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + } + }, + "native-promise-only": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/native-promise-only/-/native-promise-only-0.8.1.tgz", + "integrity": "sha1-IKMYwwy0X3H+et+/eyHJnBRy7xE=" + }, + "needle": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/needle/-/needle-2.5.0.tgz", + "integrity": "sha512-o/qITSDR0JCyCKEQ1/1bnUXMmznxabbwi/Y4WwJElf+evwJNFNwIDMCCt5IigFVxgeGBJESLohGtIS9gEzo1fA==", + "requires": { + "debug": "^3.2.6", + "iconv-lite": "^0.4.4", + "sax": "^1.2.4" + }, + "dependencies": { + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "requires": { + "ms": "^2.1.1" + } + }, + "sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" + } + } + }, + "negotiator": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", + "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==" + }, + "next-line": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/next-line/-/next-line-1.1.0.tgz", + "integrity": "sha1-/K5XhTBStqm66CCOQN19PC0wRgM=" + }, + "nocache": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/nocache/-/nocache-2.0.0.tgz", + "integrity": "sha1-ICtIAhoMTL3i34DeFaF0Q8i0OYA=" + }, + "node-cron": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/node-cron/-/node-cron-2.0.3.tgz", + "integrity": "sha512-eJI+QitXlwcgiZwNNSRbqsjeZMp5shyajMR81RZCqeW0ZDEj4zU9tpd4nTh/1JsBiKbF8d08FCewiipDmVIYjg==", + "requires": { + "opencollective-postinstall": "^2.0.0", + "tz-offset": "0.0.1" + } + }, + "nodemailer": { + "version": "6.4.6", + "resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-6.4.6.tgz", + "integrity": "sha512-/kJ+FYVEm2HuUlw87hjSqTss+GU35D4giOpdSfGp7DO+5h6RlJj7R94YaYHOkoxu1CSaM0d3WRBtCzwXrY6MKA==" + }, + "normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "requires": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + } + } + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" + }, + "notepack.io": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/notepack.io/-/notepack.io-2.1.3.tgz", + "integrity": "sha512-AgSt+cP5XMooho1Ppn8NB3FFaVWefV+qZoZncYTUSch2GAEwlYLcIIbT5YVkMlFeNHnfwOvc4HDlbvrB5BRxXA==" + }, + "npm": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/npm/-/npm-5.7.1.tgz", + "integrity": "sha512-r1grvv6mcEt+nlMzMWPc5n/z5q8NNuBWj0TGFp1PBSFCl6ubnAoUGBsucYsnZYT7MOJn0ha1ptEjmdBoAdJ+SA==", + "requires": { + "JSONStream": "^1.3.2", + "abbrev": "~1.1.1", + "ansi-regex": "~3.0.0", + "ansicolors": "~0.3.2", + "ansistyles": "~0.1.3", + "aproba": "~1.2.0", + "archy": "~1.0.0", + "bin-links": "^1.1.0", + "bluebird": "~3.5.1", + "cacache": "^10.0.4", + "call-limit": "~1.1.0", + "chownr": "~1.0.1", + "cli-table2": "~0.2.0", + "cmd-shim": "~2.0.2", + "columnify": "~1.5.4", + "config-chain": "~1.1.11", + "debuglog": "*", + "detect-indent": "~5.0.0", + "dezalgo": "~1.0.3", + "editor": "~1.0.0", + "find-npm-prefix": "^1.0.2", + "fs-vacuum": "~1.2.10", + "fs-write-stream-atomic": "~1.0.10", + "gentle-fs": "^2.0.1", + "glob": "~7.1.2", + "graceful-fs": "~4.1.11", + "has-unicode": "~2.0.1", + "hosted-git-info": "~2.5.0", + "iferr": "~0.1.5", + "imurmurhash": "*", + "inflight": "~1.0.6", + "inherits": "~2.0.3", + "ini": "^1.3.5", + "init-package-json": "~1.10.1", + "is-cidr": "~1.0.0", + "lazy-property": "~1.0.0", + "libcipm": "^1.3.3", + "libnpx": "~9.7.1", + "lockfile": "~1.0.3", + "lodash._baseindexof": "*", + "lodash._baseuniq": "~4.6.0", + "lodash._bindcallback": "*", + "lodash._cacheindexof": "*", + "lodash._createcache": "*", + "lodash._getnative": "*", + "lodash.clonedeep": "~4.5.0", + "lodash.restparam": "*", + "lodash.union": "~4.6.0", + "lodash.uniq": "~4.5.0", + "lodash.without": "~4.4.0", + "lru-cache": "~4.1.1", + "meant": "~1.0.1", + "mississippi": "^2.0.0", + "mkdirp": "~0.5.1", + "move-concurrently": "^1.0.1", + "nopt": "~4.0.1", + "normalize-package-data": "~2.4.0", + "npm-cache-filename": "~1.0.2", + "npm-install-checks": "~3.0.0", + "npm-lifecycle": "~2.0.0", + "npm-package-arg": "~6.0.0", + "npm-packlist": "~1.1.10", + "npm-profile": "^3.0.1", + "npm-registry-client": "~8.5.0", + "npm-user-validate": "~1.0.0", + "npmlog": "~4.1.2", + "once": "~1.4.0", + "opener": "~1.4.3", + "osenv": "^0.1.5", + "pacote": "^7.3.3", + "path-is-inside": "~1.0.2", + "promise-inflight": "~1.0.1", + "qrcode-terminal": "~0.11.0", + "query-string": "^5.1.0", + "qw": "~1.0.1", + "read": "~1.0.7", + "read-cmd-shim": "~1.0.1", + "read-installed": "~4.0.3", + "read-package-json": "~2.0.12", + "read-package-tree": "~5.1.6", + "readable-stream": "^2.3.4", + "readdir-scoped-modules": "*", + "request": "~2.83.0", + "retry": "~0.10.1", + "rimraf": "~2.6.2", + "safe-buffer": "~5.1.1", + "semver": "^5.5.0", + "sha": "~2.0.1", + "slide": "~1.1.6", + "sorted-object": "~2.0.1", + "sorted-union-stream": "~2.1.3", + "ssri": "^5.2.4", + "strip-ansi": "~4.0.0", + "tar": "^4.3.3", + "text-table": "~0.2.0", + "uid-number": "0.0.6", + "umask": "~1.1.0", + "unique-filename": "~1.1.0", + "unpipe": "~1.0.0", + "update-notifier": "~2.3.0", + "uuid": "^3.2.1", + "validate-npm-package-license": "*", + "validate-npm-package-name": "~3.0.0", + "which": "~1.3.0", + "worker-farm": "^1.5.2", + "wrappy": "~1.0.2", + "write-file-atomic": "~2.1.0" + }, + "dependencies": { + "JSONStream": { + "version": "1.3.2", + "bundled": true, + "requires": { + "jsonparse": "^1.2.0", + "through": ">=2.2.7 <3" + }, + "dependencies": { + "jsonparse": { + "version": "1.3.1", + "bundled": true + }, + "through": { + "version": "2.3.8", + "bundled": true + } + } + }, + "abbrev": { + "version": "1.1.1", + "bundled": true + }, + "ansi-regex": { + "version": "3.0.0", + "bundled": true + }, + "ansicolors": { + "version": "0.3.2", + "bundled": true + }, + "ansistyles": { + "version": "0.1.3", + "bundled": true + }, + "aproba": { + "version": "1.2.0", + "bundled": true + }, + "archy": { + "version": "1.0.0", + "bundled": true + }, + "bin-links": { + "version": "1.1.0", + "bundled": true, + "requires": { + "bluebird": "^3.5.0", + "cmd-shim": "^2.0.2", + "fs-write-stream-atomic": "^1.0.10", + "gentle-fs": "^2.0.0", + "graceful-fs": "^4.1.11", + "slide": "^1.1.6" + } + }, + "bluebird": { + "version": "3.5.1", + "bundled": true + }, + "cacache": { + "version": "10.0.4", + "bundled": true, + "requires": { + "bluebird": "^3.5.1", + "chownr": "^1.0.1", + "glob": "^7.1.2", + "graceful-fs": "^4.1.11", + "lru-cache": "^4.1.1", + "mississippi": "^2.0.0", + "mkdirp": "^0.5.1", + "move-concurrently": "^1.0.1", + "promise-inflight": "^1.0.1", + "rimraf": "^2.6.2", + "ssri": "^5.2.4", + "unique-filename": "^1.1.0", + "y18n": "^4.0.0" + }, + "dependencies": { + "y18n": { + "version": "4.0.0", + "bundled": true + } + } + }, + "call-limit": { + "version": "1.1.0", + "bundled": true + }, + "chownr": { + "version": "1.0.1", + "bundled": true + }, + "cli-table2": { + "version": "0.2.0", + "bundled": true, + "requires": { + "colors": "^1.1.2", + "lodash": "^3.10.1", + "string-width": "^1.0.1" + }, + "dependencies": { + "colors": { + "version": "1.1.2", + "bundled": true, + "optional": true + }, + "lodash": { + "version": "3.10.1", + "bundled": true + }, + "string-width": { + "version": "1.0.2", + "bundled": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + }, + "dependencies": { + "code-point-at": { + "version": "1.1.0", + "bundled": true + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "bundled": true, + "requires": { + "number-is-nan": "^1.0.0" + }, + "dependencies": { + "number-is-nan": { + "version": "1.0.1", + "bundled": true + } + } + }, + "strip-ansi": { + "version": "3.0.1", + "bundled": true, + "requires": { + "ansi-regex": "^2.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "bundled": true + } + } + } + } + } + } + }, + "cmd-shim": { + "version": "2.0.2", + "bundled": true, + "requires": { + "graceful-fs": "^4.1.2", + "mkdirp": "~0.5.0" + } + }, + "columnify": { + "version": "1.5.4", + "bundled": true, + "requires": { + "strip-ansi": "^3.0.0", + "wcwidth": "^1.0.0" + }, + "dependencies": { + "strip-ansi": { + "version": "3.0.1", + "bundled": true, + "requires": { + "ansi-regex": "^2.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "bundled": true + } + } + }, + "wcwidth": { + "version": "1.0.1", + "bundled": true, + "requires": { + "defaults": "^1.0.3" + }, + "dependencies": { + "defaults": { + "version": "1.0.3", + "bundled": true, + "requires": { + "clone": "^1.0.2" + }, + "dependencies": { + "clone": { + "version": "1.0.2", + "bundled": true + } + } + } + } + } + } + }, + "config-chain": { + "version": "1.1.11", + "bundled": true, + "requires": { + "ini": "^1.3.4", + "proto-list": "~1.2.1" + }, + "dependencies": { + "proto-list": { + "version": "1.2.4", + "bundled": true + } + } + }, + "debuglog": { + "version": "1.0.1", + "bundled": true + }, + "detect-indent": { + "version": "5.0.0", + "bundled": true + }, + "dezalgo": { + "version": "1.0.3", + "bundled": true, + "requires": { + "asap": "^2.0.0", + "wrappy": "1" + }, + "dependencies": { + "asap": { + "version": "2.0.5", + "bundled": true + } + } + }, + "editor": { + "version": "1.0.0", + "bundled": true + }, + "find-npm-prefix": { + "version": "1.0.2", + "bundled": true + }, + "fs-vacuum": { + "version": "1.2.10", + "bundled": true, + "requires": { + "graceful-fs": "^4.1.2", + "path-is-inside": "^1.0.1", + "rimraf": "^2.5.2" + } + }, + "fs-write-stream-atomic": { + "version": "1.0.10", + "bundled": true, + "requires": { + "graceful-fs": "^4.1.2", + "iferr": "^0.1.5", + "imurmurhash": "^0.1.4", + "readable-stream": "1 || 2" + } + }, + "gentle-fs": { + "version": "2.0.1", + "bundled": true, + "requires": { + "aproba": "^1.1.2", + "fs-vacuum": "^1.2.10", + "graceful-fs": "^4.1.11", + "iferr": "^0.1.5", + "mkdirp": "^0.5.1", + "path-is-inside": "^1.0.2", + "read-cmd-shim": "^1.0.1", + "slide": "^1.1.6" + } + }, + "glob": { + "version": "7.1.2", + "bundled": 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" + }, + "dependencies": { + "fs.realpath": { + "version": "1.0.0", + "bundled": true + }, + "minimatch": { + "version": "3.0.4", + "bundled": true, + "requires": { + "brace-expansion": "^1.1.7" + }, + "dependencies": { + "brace-expansion": { + "version": "1.1.8", + "bundled": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + }, + "dependencies": { + "balanced-match": { + "version": "1.0.0", + "bundled": true + }, + "concat-map": { + "version": "0.0.1", + "bundled": true + } + } + } + } + }, + "path-is-absolute": { + "version": "1.0.1", + "bundled": true + } + } + }, + "graceful-fs": { + "version": "4.1.11", + "bundled": true + }, + "has-unicode": { + "version": "2.0.1", + "bundled": true + }, + "hosted-git-info": { + "version": "2.5.0", + "bundled": true + }, + "iferr": { + "version": "0.1.5", + "bundled": true + }, + "imurmurhash": { + "version": "0.1.4", + "bundled": true + }, + "inflight": { + "version": "1.0.6", + "bundled": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.3", + "bundled": true + }, + "ini": { + "version": "1.3.5", + "bundled": true + }, + "init-package-json": { + "version": "1.10.1", + "bundled": true, + "requires": { + "glob": "^7.1.1", + "npm-package-arg": "^4.0.0 || ^5.0.0", + "promzard": "^0.3.0", + "read": "~1.0.1", + "read-package-json": "1 || 2", + "semver": "2.x || 3.x || 4 || 5", + "validate-npm-package-license": "^3.0.1", + "validate-npm-package-name": "^3.0.0" + }, + "dependencies": { + "npm-package-arg": { + "version": "5.1.2", + "bundled": true, + "requires": { + "hosted-git-info": "^2.4.2", + "osenv": "^0.1.4", + "semver": "^5.1.0", + "validate-npm-package-name": "^3.0.0" + } + }, + "promzard": { + "version": "0.3.0", + "bundled": true, + "requires": { + "read": "1" + } + } + } + }, + "is-cidr": { + "version": "1.0.0", + "bundled": true, + "requires": { + "cidr-regex": "1.0.6" + }, + "dependencies": { + "cidr-regex": { + "version": "1.0.6", + "bundled": true + } + } + }, + "lazy-property": { + "version": "1.0.0", + "bundled": true + }, + "libcipm": { + "version": "1.3.3", + "bundled": true, + "requires": { + "bin-links": "^1.1.0", + "bluebird": "^3.5.1", + "find-npm-prefix": "^1.0.2", + "graceful-fs": "^4.1.11", + "lock-verify": "^2.0.0", + "npm-lifecycle": "^2.0.0", + "npm-logical-tree": "^1.2.1", + "npm-package-arg": "^6.0.0", + "pacote": "^7.3.3", + "protoduck": "^5.0.0", + "read-package-json": "^2.0.12", + "rimraf": "^2.6.2", + "worker-farm": "^1.5.2" + }, + "dependencies": { + "find-npm-prefix": { + "version": "1.0.2", + "bundled": true + }, + "lock-verify": { + "version": "2.0.0", + "bundled": true, + "requires": { + "npm-package-arg": "^5.1.2", + "semver": "^5.4.1" + }, + "dependencies": { + "npm-package-arg": { + "version": "5.1.2", + "bundled": true, + "requires": { + "hosted-git-info": "^2.4.2", + "osenv": "^0.1.4", + "semver": "^5.1.0", + "validate-npm-package-name": "^3.0.0" + } + } + } + }, + "npm-logical-tree": { + "version": "1.2.1", + "bundled": true + }, + "protoduck": { + "version": "5.0.0", + "bundled": true, + "requires": { + "genfun": "^4.0.1" + }, + "dependencies": { + "genfun": { + "version": "4.0.1", + "bundled": true + } + } + }, + "worker-farm": { + "version": "1.5.2", + "bundled": true, + "requires": { + "errno": "^0.1.4", + "xtend": "^4.0.1" + }, + "dependencies": { + "errno": { + "version": "0.1.7", + "bundled": true, + "requires": { + "prr": "~1.0.1" + }, + "dependencies": { + "prr": { + "version": "1.0.1", + "bundled": true + } + } + }, + "xtend": { + "version": "4.0.1", + "bundled": true + } + } + } + } + }, + "libnpx": { + "version": "9.7.1", + "bundled": true, + "requires": { + "dotenv": "^4.0.0", + "npm-package-arg": "^5.1.2", + "rimraf": "^2.6.1", + "safe-buffer": "^5.1.0", + "update-notifier": "^2.2.0", + "which": "^1.2.14", + "y18n": "^3.2.1", + "yargs": "^8.0.2" + }, + "dependencies": { + "dotenv": { + "version": "4.0.0", + "bundled": true + }, + "npm-package-arg": { + "version": "5.1.2", + "bundled": true, + "requires": { + "hosted-git-info": "^2.4.2", + "osenv": "^0.1.4", + "semver": "^5.1.0", + "validate-npm-package-name": "^3.0.0" + } + }, + "y18n": { + "version": "3.2.1", + "bundled": true + }, + "yargs": { + "version": "8.0.2", + "bundled": true, + "requires": { + "camelcase": "^4.1.0", + "cliui": "^3.2.0", + "decamelize": "^1.1.1", + "get-caller-file": "^1.0.1", + "os-locale": "^2.0.0", + "read-pkg-up": "^2.0.0", + "require-directory": "^2.1.1", + "require-main-filename": "^1.0.1", + "set-blocking": "^2.0.0", + "string-width": "^2.0.0", + "which-module": "^2.0.0", + "y18n": "^3.2.1", + "yargs-parser": "^7.0.0" + }, + "dependencies": { + "camelcase": { + "version": "4.1.0", + "bundled": true + }, + "cliui": { + "version": "3.2.0", + "bundled": true, + "requires": { + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wrap-ansi": "^2.0.0" + }, + "dependencies": { + "string-width": { + "version": "1.0.2", + "bundled": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + }, + "dependencies": { + "code-point-at": { + "version": "1.1.0", + "bundled": true + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "bundled": true, + "requires": { + "number-is-nan": "^1.0.0" + }, + "dependencies": { + "number-is-nan": { + "version": "1.0.1", + "bundled": true + } + } + } + } + }, + "strip-ansi": { + "version": "3.0.1", + "bundled": true, + "requires": { + "ansi-regex": "^2.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "bundled": true + } + } + }, + "wrap-ansi": { + "version": "2.1.0", + "bundled": true, + "requires": { + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1" + } + } + } + }, + "decamelize": { + "version": "1.2.0", + "bundled": true + }, + "get-caller-file": { + "version": "1.0.2", + "bundled": true + }, + "os-locale": { + "version": "2.1.0", + "bundled": true, + "requires": { + "execa": "^0.7.0", + "lcid": "^1.0.0", + "mem": "^1.1.0" + }, + "dependencies": { + "execa": { + "version": "0.7.0", + "bundled": true, + "requires": { + "cross-spawn": "^5.0.1", + "get-stream": "^3.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + }, + "dependencies": { + "cross-spawn": { + "version": "5.1.0", + "bundled": true, + "requires": { + "lru-cache": "^4.0.1", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + }, + "dependencies": { + "shebang-command": { + "version": "1.2.0", + "bundled": true, + "requires": { + "shebang-regex": "^1.0.0" + }, + "dependencies": { + "shebang-regex": { + "version": "1.0.0", + "bundled": true + } + } + } + } + }, + "get-stream": { + "version": "3.0.0", + "bundled": true + }, + "is-stream": { + "version": "1.1.0", + "bundled": true + }, + "npm-run-path": { + "version": "2.0.2", + "bundled": true, + "requires": { + "path-key": "^2.0.0" + }, + "dependencies": { + "path-key": { + "version": "2.0.1", + "bundled": true + } + } + }, + "p-finally": { + "version": "1.0.0", + "bundled": true + }, + "signal-exit": { + "version": "3.0.2", + "bundled": true + }, + "strip-eof": { + "version": "1.0.0", + "bundled": true + } + } + }, + "lcid": { + "version": "1.0.0", + "bundled": true, + "requires": { + "invert-kv": "^1.0.0" + }, + "dependencies": { + "invert-kv": { + "version": "1.0.0", + "bundled": true + } + } + }, + "mem": { + "version": "1.1.0", + "bundled": true, + "requires": { + "mimic-fn": "^1.0.0" + }, + "dependencies": { + "mimic-fn": { + "version": "1.1.0", + "bundled": true + } + } + } + } + }, + "read-pkg-up": { + "version": "2.0.0", + "bundled": true, + "requires": { + "find-up": "^2.0.0", + "read-pkg": "^2.0.0" + }, + "dependencies": { + "find-up": { + "version": "2.1.0", + "bundled": true, + "requires": { + "locate-path": "^2.0.0" + }, + "dependencies": { + "locate-path": { + "version": "2.0.0", + "bundled": true, + "requires": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + }, + "dependencies": { + "p-locate": { + "version": "2.0.0", + "bundled": true, + "requires": { + "p-limit": "^1.1.0" + }, + "dependencies": { + "p-limit": { + "version": "1.1.0", + "bundled": true + } + } + }, + "path-exists": { + "version": "3.0.0", + "bundled": true + } + } + } + } + }, + "read-pkg": { + "version": "2.0.0", + "bundled": true, + "requires": { + "load-json-file": "^2.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^2.0.0" + }, + "dependencies": { + "load-json-file": { + "version": "2.0.0", + "bundled": true, + "requires": { + "graceful-fs": "^4.1.2", + "parse-json": "^2.2.0", + "pify": "^2.0.0", + "strip-bom": "^3.0.0" + }, + "dependencies": { + "parse-json": { + "version": "2.2.0", + "bundled": true, + "requires": { + "error-ex": "^1.2.0" + }, + "dependencies": { + "error-ex": { + "version": "1.3.1", + "bundled": true, + "requires": { + "is-arrayish": "^0.2.1" + }, + "dependencies": { + "is-arrayish": { + "version": "0.2.1", + "bundled": true + } + } + } + } + }, + "pify": { + "version": "2.3.0", + "bundled": true + }, + "strip-bom": { + "version": "3.0.0", + "bundled": true + } + } + }, + "path-type": { + "version": "2.0.0", + "bundled": true, + "requires": { + "pify": "^2.0.0" + }, + "dependencies": { + "pify": { + "version": "2.3.0", + "bundled": true + } + } + } + } + } + } + }, + "require-directory": { + "version": "2.1.1", + "bundled": true + }, + "require-main-filename": { + "version": "1.0.1", + "bundled": true + }, + "set-blocking": { + "version": "2.0.0", + "bundled": true + }, + "string-width": { + "version": "2.1.1", + "bundled": true, + "requires": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + }, + "dependencies": { + "is-fullwidth-code-point": { + "version": "2.0.0", + "bundled": true + } + } + }, + "which-module": { + "version": "2.0.0", + "bundled": true + }, + "yargs-parser": { + "version": "7.0.0", + "bundled": true, + "requires": { + "camelcase": "^4.1.0" + } + } + } + } + } + }, + "lockfile": { + "version": "1.0.3", + "bundled": true + }, + "lodash._baseindexof": { + "version": "3.1.0", + "bundled": true + }, + "lodash._baseuniq": { + "version": "4.6.0", + "bundled": true, + "requires": { + "lodash._createset": "~4.0.0", + "lodash._root": "~3.0.0" + }, + "dependencies": { + "lodash._createset": { + "version": "4.0.3", + "bundled": true + }, + "lodash._root": { + "version": "3.0.1", + "bundled": true + } + } + }, + "lodash._bindcallback": { + "version": "3.0.1", + "bundled": true + }, + "lodash._cacheindexof": { + "version": "3.0.2", + "bundled": true + }, + "lodash._createcache": { + "version": "3.1.2", + "bundled": true, + "requires": { + "lodash._getnative": "^3.0.0" + } + }, + "lodash._getnative": { + "version": "3.9.1", + "bundled": true + }, + "lodash.clonedeep": { + "version": "4.5.0", + "bundled": true + }, + "lodash.restparam": { + "version": "3.6.1", + "bundled": true + }, + "lodash.union": { + "version": "4.6.0", + "bundled": true + }, + "lodash.uniq": { + "version": "4.5.0", + "bundled": true + }, + "lodash.without": { + "version": "4.4.0", + "bundled": true + }, + "lru-cache": { + "version": "4.1.1", + "bundled": true, + "requires": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + }, + "dependencies": { + "pseudomap": { + "version": "1.0.2", + "bundled": true + }, + "yallist": { + "version": "2.1.2", + "bundled": true + } + } + }, + "meant": { + "version": "1.0.1", + "bundled": true + }, + "mississippi": { + "version": "2.0.0", + "bundled": true, + "requires": { + "concat-stream": "^1.5.0", + "duplexify": "^3.4.2", + "end-of-stream": "^1.1.0", + "flush-write-stream": "^1.0.0", + "from2": "^2.1.0", + "parallel-transform": "^1.1.0", + "pump": "^2.0.1", + "pumpify": "^1.3.3", + "stream-each": "^1.1.0", + "through2": "^2.0.0" + }, + "dependencies": { + "concat-stream": { + "version": "1.6.0", + "bundled": true, + "requires": { + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + }, + "dependencies": { + "typedarray": { + "version": "0.0.6", + "bundled": true + } + } + }, + "duplexify": { + "version": "3.5.3", + "bundled": true, + "requires": { + "end-of-stream": "^1.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.0.0", + "stream-shift": "^1.0.0" + }, + "dependencies": { + "stream-shift": { + "version": "1.0.0", + "bundled": true + } + } + }, + "end-of-stream": { + "version": "1.4.1", + "bundled": true, + "requires": { + "once": "^1.4.0" + } + }, + "flush-write-stream": { + "version": "1.0.2", + "bundled": true, + "requires": { + "inherits": "^2.0.1", + "readable-stream": "^2.0.4" + } + }, + "from2": { + "version": "2.3.0", + "bundled": true, + "requires": { + "inherits": "^2.0.1", + "readable-stream": "^2.0.0" + } + }, + "parallel-transform": { + "version": "1.1.0", + "bundled": true, + "requires": { + "cyclist": "~0.2.2", + "inherits": "^2.0.3", + "readable-stream": "^2.1.5" + }, + "dependencies": { + "cyclist": { + "version": "0.2.2", + "bundled": true + } + } + }, + "pump": { + "version": "2.0.1", + "bundled": true, + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "pumpify": { + "version": "1.4.0", + "bundled": true, + "requires": { + "duplexify": "^3.5.3", + "inherits": "^2.0.3", + "pump": "^2.0.0" + } + }, + "stream-each": { + "version": "1.2.2", + "bundled": true, + "requires": { + "end-of-stream": "^1.1.0", + "stream-shift": "^1.0.0" + }, + "dependencies": { + "stream-shift": { + "version": "1.0.0", + "bundled": true + } + } + }, + "through2": { + "version": "2.0.3", + "bundled": true, + "requires": { + "readable-stream": "^2.1.5", + "xtend": "~4.0.1" + }, + "dependencies": { + "xtend": { + "version": "4.0.1", + "bundled": true + } + } + } + } + }, + "mkdirp": { + "version": "0.5.1", + "bundled": true, + "requires": { + "minimist": "0.0.8" + }, + "dependencies": { + "minimist": { + "version": "0.0.8", + "bundled": true + } + } + }, + "move-concurrently": { + "version": "1.0.1", + "bundled": true, + "requires": { + "aproba": "^1.1.1", + "copy-concurrently": "^1.0.0", + "fs-write-stream-atomic": "^1.0.8", + "mkdirp": "^0.5.1", + "rimraf": "^2.5.4", + "run-queue": "^1.0.3" + }, + "dependencies": { + "copy-concurrently": { + "version": "1.0.5", + "bundled": true, + "requires": { + "aproba": "^1.1.1", + "fs-write-stream-atomic": "^1.0.8", + "iferr": "^0.1.5", + "mkdirp": "^0.5.1", + "rimraf": "^2.5.4", + "run-queue": "^1.0.0" + } + }, + "run-queue": { + "version": "1.0.3", + "bundled": true, + "requires": { + "aproba": "^1.1.1" + } + } + } + }, + "node-gyp": { + "version": "3.6.2", + "bundled": true, + "requires": { + "fstream": "^1.0.0", + "glob": "^7.0.3", + "graceful-fs": "^4.1.2", + "minimatch": "^3.0.2", + "mkdirp": "^0.5.0", + "nopt": "2 || 3", + "npmlog": "0 || 1 || 2 || 3 || 4", + "osenv": "0", + "request": "2", + "rimraf": "2", + "semver": "~5.3.0", + "tar": "^2.0.0", + "which": "1" + }, + "dependencies": { + "fstream": { + "version": "1.0.11", + "bundled": true, + "requires": { + "graceful-fs": "^4.1.2", + "inherits": "~2.0.0", + "mkdirp": ">=0.5 0", + "rimraf": "2" + } + }, + "minimatch": { + "version": "3.0.4", + "bundled": true, + "requires": { + "brace-expansion": "^1.1.7" + }, + "dependencies": { + "brace-expansion": { + "version": "1.1.8", + "bundled": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + }, + "dependencies": { + "balanced-match": { + "version": "1.0.0", + "bundled": true + }, + "concat-map": { + "version": "0.0.1", + "bundled": true + } + } + } + } + }, + "nopt": { + "version": "3.0.6", + "bundled": true, + "requires": { + "abbrev": "1" + } + }, + "semver": { + "version": "5.3.0", + "bundled": true + }, + "tar": { + "version": "2.2.1", + "bundled": true, + "requires": { + "block-stream": "*", + "fstream": "^1.0.2", + "inherits": "2" + }, + "dependencies": { + "block-stream": { + "version": "0.0.9", + "bundled": true, + "requires": { + "inherits": "~2.0.0" + } + } + } + } + } + }, + "nopt": { + "version": "4.0.1", + "bundled": true, + "requires": { + "abbrev": "1", + "osenv": "^0.1.4" + } + }, + "normalize-package-data": { + "version": "2.4.0", + "bundled": true, + "requires": { + "hosted-git-info": "^2.1.4", + "is-builtin-module": "^1.0.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + }, + "dependencies": { + "is-builtin-module": { + "version": "1.0.0", + "bundled": true, + "requires": { + "builtin-modules": "^1.0.0" + }, + "dependencies": { + "builtin-modules": { + "version": "1.1.1", + "bundled": true + } + } + } + } + }, + "npm-cache-filename": { + "version": "1.0.2", + "bundled": true + }, + "npm-install-checks": { + "version": "3.0.0", + "bundled": true, + "requires": { + "semver": "^2.3.0 || 3.x || 4 || 5" + } + }, + "npm-lifecycle": { + "version": "2.0.0", + "bundled": true, + "requires": { + "byline": "^5.0.0", + "graceful-fs": "^4.1.11", + "node-gyp": "^3.6.2", + "resolve-from": "^4.0.0", + "slide": "^1.1.6", + "uid-number": "0.0.6", + "umask": "^1.1.0", + "which": "^1.3.0" + }, + "dependencies": { + "byline": { + "version": "5.0.0", + "bundled": true + }, + "resolve-from": { + "version": "4.0.0", + "bundled": true + } + } + }, + "npm-package-arg": { + "version": "6.0.0", + "bundled": true, + "requires": { + "hosted-git-info": "^2.5.0", + "osenv": "^0.1.4", + "semver": "^5.4.1", + "validate-npm-package-name": "^3.0.0" + } + }, + "npm-packlist": { + "version": "1.1.10", + "bundled": true, + "requires": { + "ignore-walk": "^3.0.1", + "npm-bundled": "^1.0.1" + }, + "dependencies": { + "ignore-walk": { + "version": "3.0.1", + "bundled": true, + "requires": { + "minimatch": "^3.0.4" + }, + "dependencies": { + "minimatch": { + "version": "3.0.4", + "bundled": true, + "requires": { + "brace-expansion": "^1.1.7" + }, + "dependencies": { + "brace-expansion": { + "version": "1.1.8", + "bundled": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + }, + "dependencies": { + "balanced-match": { + "version": "1.0.0", + "bundled": true + }, + "concat-map": { + "version": "0.0.1", + "bundled": true + } + } + } + } + } + } + }, + "npm-bundled": { + "version": "1.0.3", + "bundled": true + } + } + }, + "npm-profile": { + "version": "3.0.1", + "bundled": true, + "requires": { + "aproba": "^1.1.2", + "make-fetch-happen": "^2.5.0" + }, + "dependencies": { + "make-fetch-happen": { + "version": "2.6.0", + "bundled": true, + "requires": { + "agentkeepalive": "^3.3.0", + "cacache": "^10.0.0", + "http-cache-semantics": "^3.8.0", + "http-proxy-agent": "^2.0.0", + "https-proxy-agent": "^2.1.0", + "lru-cache": "^4.1.1", + "mississippi": "^1.2.0", + "node-fetch-npm": "^2.0.2", + "promise-retry": "^1.1.1", + "socks-proxy-agent": "^3.0.1", + "ssri": "^5.0.0" + }, + "dependencies": { + "agentkeepalive": { + "version": "3.3.0", + "bundled": true, + "requires": { + "humanize-ms": "^1.2.1" + }, + "dependencies": { + "humanize-ms": { + "version": "1.2.1", + "bundled": true, + "requires": { + "ms": "^2.0.0" + }, + "dependencies": { + "ms": { + "version": "2.1.1", + "bundled": true + } + } + } + } + }, + "http-cache-semantics": { + "version": "3.8.1", + "bundled": true + }, + "http-proxy-agent": { + "version": "2.0.0", + "bundled": true, + "requires": { + "agent-base": "4", + "debug": "2" + }, + "dependencies": { + "agent-base": { + "version": "4.2.0", + "bundled": true, + "requires": { + "es6-promisify": "^5.0.0" + }, + "dependencies": { + "es6-promisify": { + "version": "5.0.0", + "bundled": true, + "requires": { + "es6-promise": "^4.0.3" + }, + "dependencies": { + "es6-promise": { + "version": "4.2.4", + "bundled": true + } + } + } + } + }, + "debug": { + "version": "2.6.9", + "bundled": true, + "requires": { + "ms": "2.0.0" + }, + "dependencies": { + "ms": { + "version": "2.0.0", + "bundled": true + } + } + } + } + }, + "https-proxy-agent": { + "version": "2.1.1", + "bundled": true, + "requires": { + "agent-base": "^4.1.0", + "debug": "^3.1.0" + }, + "dependencies": { + "agent-base": { + "version": "4.2.0", + "bundled": true, + "requires": { + "es6-promisify": "^5.0.0" + }, + "dependencies": { + "es6-promisify": { + "version": "5.0.0", + "bundled": true, + "requires": { + "es6-promise": "^4.0.3" + }, + "dependencies": { + "es6-promise": { + "version": "4.2.4", + "bundled": true + } + } + } + } + }, + "debug": { + "version": "3.1.0", + "bundled": true, + "requires": { + "ms": "2.0.0" + }, + "dependencies": { + "ms": { + "version": "2.0.0", + "bundled": true + } + } + } + } + }, + "mississippi": { + "version": "1.3.1", + "bundled": true, + "requires": { + "concat-stream": "^1.5.0", + "duplexify": "^3.4.2", + "end-of-stream": "^1.1.0", + "flush-write-stream": "^1.0.0", + "from2": "^2.1.0", + "parallel-transform": "^1.1.0", + "pump": "^1.0.0", + "pumpify": "^1.3.3", + "stream-each": "^1.1.0", + "through2": "^2.0.0" + }, + "dependencies": { + "concat-stream": { + "version": "1.6.0", + "bundled": true, + "requires": { + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + }, + "dependencies": { + "typedarray": { + "version": "0.0.6", + "bundled": true + } + } + }, + "duplexify": { + "version": "3.5.3", + "bundled": true, + "requires": { + "end-of-stream": "^1.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.0.0", + "stream-shift": "^1.0.0" + }, + "dependencies": { + "stream-shift": { + "version": "1.0.0", + "bundled": true + } + } + }, + "end-of-stream": { + "version": "1.4.1", + "bundled": true, + "requires": { + "once": "^1.4.0" + } + }, + "flush-write-stream": { + "version": "1.0.2", + "bundled": true, + "requires": { + "inherits": "^2.0.1", + "readable-stream": "^2.0.4" + } + }, + "from2": { + "version": "2.3.0", + "bundled": true, + "requires": { + "inherits": "^2.0.1", + "readable-stream": "^2.0.0" + } + }, + "parallel-transform": { + "version": "1.1.0", + "bundled": true, + "requires": { + "cyclist": "~0.2.2", + "inherits": "^2.0.3", + "readable-stream": "^2.1.5" + }, + "dependencies": { + "cyclist": { + "version": "0.2.2", + "bundled": true + } + } + }, + "pump": { + "version": "1.0.3", + "bundled": true, + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "pumpify": { + "version": "1.4.0", + "bundled": true, + "requires": { + "duplexify": "^3.5.3", + "inherits": "^2.0.3", + "pump": "^2.0.0" + }, + "dependencies": { + "pump": { + "version": "2.0.1", + "bundled": true, + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + } + } + }, + "stream-each": { + "version": "1.2.2", + "bundled": true, + "requires": { + "end-of-stream": "^1.1.0", + "stream-shift": "^1.0.0" + }, + "dependencies": { + "stream-shift": { + "version": "1.0.0", + "bundled": true + } + } + }, + "through2": { + "version": "2.0.3", + "bundled": true, + "requires": { + "readable-stream": "^2.1.5", + "xtend": "~4.0.1" + }, + "dependencies": { + "xtend": { + "version": "4.0.1", + "bundled": true + } + } + } + } + }, + "node-fetch-npm": { + "version": "2.0.2", + "bundled": true, + "requires": { + "encoding": "^0.1.11", + "json-parse-better-errors": "^1.0.0", + "safe-buffer": "^5.1.1" + }, + "dependencies": { + "encoding": { + "version": "0.1.12", + "bundled": true, + "requires": { + "iconv-lite": "~0.4.13" + }, + "dependencies": { + "iconv-lite": { + "version": "0.4.19", + "bundled": true + } + } + }, + "json-parse-better-errors": { + "version": "1.0.1", + "bundled": true + } + } + }, + "promise-retry": { + "version": "1.1.1", + "bundled": true, + "requires": { + "err-code": "^1.0.0", + "retry": "^0.10.0" + }, + "dependencies": { + "err-code": { + "version": "1.1.2", + "bundled": true + } + } + }, + "socks-proxy-agent": { + "version": "3.0.1", + "bundled": true, + "requires": { + "agent-base": "^4.1.0", + "socks": "^1.1.10" + }, + "dependencies": { + "agent-base": { + "version": "4.2.0", + "bundled": true, + "requires": { + "es6-promisify": "^5.0.0" + }, + "dependencies": { + "es6-promisify": { + "version": "5.0.0", + "bundled": true, + "requires": { + "es6-promise": "^4.0.3" + }, + "dependencies": { + "es6-promise": { + "version": "4.2.4", + "bundled": true + } + } + } + } + }, + "socks": { + "version": "1.1.10", + "bundled": true, + "requires": { + "ip": "^1.1.4", + "smart-buffer": "^1.0.13" + }, + "dependencies": { + "ip": { + "version": "1.1.5", + "bundled": true + }, + "smart-buffer": { + "version": "1.1.15", + "bundled": true + } + } + } + } + } + } + } + } + }, + "npm-registry-client": { + "version": "8.5.0", + "bundled": true, + "requires": { + "concat-stream": "^1.5.2", + "graceful-fs": "^4.1.6", + "normalize-package-data": "~1.0.1 || ^2.0.0", + "npm-package-arg": "^3.0.0 || ^4.0.0 || ^5.0.0", + "npmlog": "2 || ^3.1.0 || ^4.0.0", + "once": "^1.3.3", + "request": "^2.74.0", + "retry": "^0.10.0", + "semver": "2 >=2.2.1 || 3.x || 4 || 5", + "slide": "^1.1.3", + "ssri": "^4.1.2" + }, + "dependencies": { + "concat-stream": { + "version": "1.6.0", + "bundled": true, + "requires": { + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + }, + "dependencies": { + "typedarray": { + "version": "0.0.6", + "bundled": true + } + } + }, + "npm-package-arg": { + "version": "5.1.2", + "bundled": true, + "requires": { + "hosted-git-info": "^2.4.2", + "osenv": "^0.1.4", + "semver": "^5.1.0", + "validate-npm-package-name": "^3.0.0" + } + }, + "ssri": { + "version": "4.1.6", + "bundled": true, + "requires": { + "safe-buffer": "^5.1.0" + } + } + } + }, + "npm-user-validate": { + "version": "1.0.0", + "bundled": true + }, + "npmlog": { + "version": "4.1.2", + "bundled": true, + "requires": { + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" + }, + "dependencies": { + "are-we-there-yet": { + "version": "1.1.4", + "bundled": true, + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" + }, + "dependencies": { + "delegates": { + "version": "1.0.0", + "bundled": true + } + } + }, + "console-control-strings": { + "version": "1.1.0", + "bundled": true + }, + "gauge": { + "version": "2.7.4", + "bundled": true, + "requires": { + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" + }, + "dependencies": { + "object-assign": { + "version": "4.1.1", + "bundled": true + }, + "signal-exit": { + "version": "3.0.2", + "bundled": true + }, + "string-width": { + "version": "1.0.2", + "bundled": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + }, + "dependencies": { + "code-point-at": { + "version": "1.1.0", + "bundled": true + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "bundled": true, + "requires": { + "number-is-nan": "^1.0.0" + }, + "dependencies": { + "number-is-nan": { + "version": "1.0.1", + "bundled": true + } + } + } + } + }, + "strip-ansi": { + "version": "3.0.1", + "bundled": true, + "requires": { + "ansi-regex": "^2.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "bundled": true + } + } + }, + "wide-align": { + "version": "1.1.2", + "bundled": true, + "requires": { + "string-width": "^1.0.2" + } + } + } + }, + "set-blocking": { + "version": "2.0.0", + "bundled": true + } + } + }, + "once": { + "version": "1.4.0", + "bundled": true, + "requires": { + "wrappy": "1" + } + }, + "opener": { + "version": "1.4.3", + "bundled": true + }, + "osenv": { + "version": "0.1.5", + "bundled": true, + "requires": { + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" + }, + "dependencies": { + "os-homedir": { + "version": "1.0.2", + "bundled": true + }, + "os-tmpdir": { + "version": "1.0.2", + "bundled": true + } + } + }, + "pacote": { + "version": "7.3.3", + "bundled": true, + "requires": { + "bluebird": "^3.5.1", + "cacache": "^10.0.2", + "get-stream": "^3.0.0", + "glob": "^7.1.2", + "lru-cache": "^4.1.1", + "make-fetch-happen": "^2.6.0", + "minimatch": "^3.0.4", + "mississippi": "^2.0.0", + "normalize-package-data": "^2.4.0", + "npm-package-arg": "^6.0.0", + "npm-packlist": "^1.1.10", + "npm-pick-manifest": "^2.1.0", + "osenv": "^0.1.4", + "promise-inflight": "^1.0.1", + "promise-retry": "^1.1.1", + "protoduck": "^5.0.0", + "safe-buffer": "^5.1.1", + "semver": "^5.5.0", + "ssri": "^5.2.1", + "tar": "^4.3.3", + "unique-filename": "^1.1.0", + "which": "^1.3.0" + }, + "dependencies": { + "get-stream": { + "version": "3.0.0", + "bundled": true + }, + "make-fetch-happen": { + "version": "2.6.0", + "bundled": true, + "requires": { + "agentkeepalive": "^3.3.0", + "cacache": "^10.0.0", + "http-cache-semantics": "^3.8.0", + "http-proxy-agent": "^2.0.0", + "https-proxy-agent": "^2.1.0", + "lru-cache": "^4.1.1", + "mississippi": "^1.2.0", + "node-fetch-npm": "^2.0.2", + "promise-retry": "^1.1.1", + "socks-proxy-agent": "^3.0.1", + "ssri": "^5.0.0" + }, + "dependencies": { + "agentkeepalive": { + "version": "3.3.0", + "bundled": true, + "requires": { + "humanize-ms": "^1.2.1" + }, + "dependencies": { + "humanize-ms": { + "version": "1.2.1", + "bundled": true, + "requires": { + "ms": "^2.0.0" + }, + "dependencies": { + "ms": { + "version": "2.1.1", + "bundled": true + } + } + } + } + }, + "http-cache-semantics": { + "version": "3.8.1", + "bundled": true + }, + "http-proxy-agent": { + "version": "2.0.0", + "bundled": true, + "requires": { + "agent-base": "4", + "debug": "2" + }, + "dependencies": { + "agent-base": { + "version": "4.2.0", + "bundled": true, + "requires": { + "es6-promisify": "^5.0.0" + }, + "dependencies": { + "es6-promisify": { + "version": "5.0.0", + "bundled": true, + "requires": { + "es6-promise": "^4.0.3" + }, + "dependencies": { + "es6-promise": { + "version": "4.2.4", + "bundled": true + } + } + } + } + }, + "debug": { + "version": "2.6.9", + "bundled": true, + "requires": { + "ms": "2.0.0" + }, + "dependencies": { + "ms": { + "version": "2.0.0", + "bundled": true + } + } + } + } + }, + "https-proxy-agent": { + "version": "2.1.1", + "bundled": true, + "requires": { + "agent-base": "^4.1.0", + "debug": "^3.1.0" + }, + "dependencies": { + "agent-base": { + "version": "4.2.0", + "bundled": true, + "requires": { + "es6-promisify": "^5.0.0" + }, + "dependencies": { + "es6-promisify": { + "version": "5.0.0", + "bundled": true, + "requires": { + "es6-promise": "^4.0.3" + }, + "dependencies": { + "es6-promise": { + "version": "4.2.4", + "bundled": true + } + } + } + } + }, + "debug": { + "version": "3.1.0", + "bundled": true, + "requires": { + "ms": "2.0.0" + }, + "dependencies": { + "ms": { + "version": "2.0.0", + "bundled": true + } + } + } + } + }, + "mississippi": { + "version": "1.3.1", + "bundled": true, + "requires": { + "concat-stream": "^1.5.0", + "duplexify": "^3.4.2", + "end-of-stream": "^1.1.0", + "flush-write-stream": "^1.0.0", + "from2": "^2.1.0", + "parallel-transform": "^1.1.0", + "pump": "^1.0.0", + "pumpify": "^1.3.3", + "stream-each": "^1.1.0", + "through2": "^2.0.0" + }, + "dependencies": { + "concat-stream": { + "version": "1.6.0", + "bundled": true, + "requires": { + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + }, + "dependencies": { + "typedarray": { + "version": "0.0.6", + "bundled": true + } + } + }, + "duplexify": { + "version": "3.5.3", + "bundled": true, + "requires": { + "end-of-stream": "^1.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.0.0", + "stream-shift": "^1.0.0" + }, + "dependencies": { + "stream-shift": { + "version": "1.0.0", + "bundled": true + } + } + }, + "end-of-stream": { + "version": "1.4.1", + "bundled": true, + "requires": { + "once": "^1.4.0" + } + }, + "flush-write-stream": { + "version": "1.0.2", + "bundled": true, + "requires": { + "inherits": "^2.0.1", + "readable-stream": "^2.0.4" + } + }, + "from2": { + "version": "2.3.0", + "bundled": true, + "requires": { + "inherits": "^2.0.1", + "readable-stream": "^2.0.0" + } + }, + "parallel-transform": { + "version": "1.1.0", + "bundled": true, + "requires": { + "cyclist": "~0.2.2", + "inherits": "^2.0.3", + "readable-stream": "^2.1.5" + }, + "dependencies": { + "cyclist": { + "version": "0.2.2", + "bundled": true + } + } + }, + "pump": { + "version": "1.0.3", + "bundled": true, + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "pumpify": { + "version": "1.4.0", + "bundled": true, + "requires": { + "duplexify": "^3.5.3", + "inherits": "^2.0.3", + "pump": "^2.0.0" + }, + "dependencies": { + "pump": { + "version": "2.0.1", + "bundled": true, + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + } + } + }, + "stream-each": { + "version": "1.2.2", + "bundled": true, + "requires": { + "end-of-stream": "^1.1.0", + "stream-shift": "^1.0.0" + }, + "dependencies": { + "stream-shift": { + "version": "1.0.0", + "bundled": true + } + } + }, + "through2": { + "version": "2.0.3", + "bundled": true, + "requires": { + "readable-stream": "^2.1.5", + "xtend": "~4.0.1" + }, + "dependencies": { + "xtend": { + "version": "4.0.1", + "bundled": true + } + } + } + } + }, + "node-fetch-npm": { + "version": "2.0.2", + "bundled": true, + "requires": { + "encoding": "^0.1.11", + "json-parse-better-errors": "^1.0.0", + "safe-buffer": "^5.1.1" + }, + "dependencies": { + "encoding": { + "version": "0.1.12", + "bundled": true, + "requires": { + "iconv-lite": "~0.4.13" + }, + "dependencies": { + "iconv-lite": { + "version": "0.4.19", + "bundled": true + } + } + }, + "json-parse-better-errors": { + "version": "1.0.1", + "bundled": true + } + } + }, + "socks-proxy-agent": { + "version": "3.0.1", + "bundled": true, + "requires": { + "agent-base": "^4.1.0", + "socks": "^1.1.10" + }, + "dependencies": { + "agent-base": { + "version": "4.2.0", + "bundled": true, + "requires": { + "es6-promisify": "^5.0.0" + }, + "dependencies": { + "es6-promisify": { + "version": "5.0.0", + "bundled": true, + "requires": { + "es6-promise": "^4.0.3" + }, + "dependencies": { + "es6-promise": { + "version": "4.2.4", + "bundled": true + } + } + } + } + }, + "socks": { + "version": "1.1.10", + "bundled": true, + "requires": { + "ip": "^1.1.4", + "smart-buffer": "^1.0.13" + }, + "dependencies": { + "ip": { + "version": "1.1.5", + "bundled": true + }, + "smart-buffer": { + "version": "1.1.15", + "bundled": true + } + } + } + } + } + } + }, + "minimatch": { + "version": "3.0.4", + "bundled": true, + "requires": { + "brace-expansion": "^1.1.7" + }, + "dependencies": { + "brace-expansion": { + "version": "1.1.11", + "bundled": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + }, + "dependencies": { + "balanced-match": { + "version": "1.0.0", + "bundled": true + }, + "concat-map": { + "version": "0.0.1", + "bundled": true + } + } + } + } + }, + "mississippi": { + "version": "2.0.0", + "bundled": true, + "requires": { + "concat-stream": "^1.5.0", + "duplexify": "^3.4.2", + "end-of-stream": "^1.1.0", + "flush-write-stream": "^1.0.0", + "from2": "^2.1.0", + "parallel-transform": "^1.1.0", + "pump": "^2.0.1", + "pumpify": "^1.3.3", + "stream-each": "^1.1.0", + "through2": "^2.0.0" + }, + "dependencies": { + "concat-stream": { + "version": "1.6.0", + "bundled": true, + "requires": { + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + }, + "dependencies": { + "typedarray": { + "version": "0.0.6", + "bundled": true + } + } + }, + "duplexify": { + "version": "3.5.3", + "bundled": true, + "requires": { + "end-of-stream": "^1.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.0.0", + "stream-shift": "^1.0.0" + }, + "dependencies": { + "stream-shift": { + "version": "1.0.0", + "bundled": true + } + } + }, + "end-of-stream": { + "version": "1.4.1", + "bundled": true, + "requires": { + "once": "^1.4.0" + } + }, + "flush-write-stream": { + "version": "1.0.2", + "bundled": true, + "requires": { + "inherits": "^2.0.1", + "readable-stream": "^2.0.4" + } + }, + "from2": { + "version": "2.3.0", + "bundled": true, + "requires": { + "inherits": "^2.0.1", + "readable-stream": "^2.0.0" + } + }, + "parallel-transform": { + "version": "1.1.0", + "bundled": true, + "requires": { + "cyclist": "~0.2.2", + "inherits": "^2.0.3", + "readable-stream": "^2.1.5" + }, + "dependencies": { + "cyclist": { + "version": "0.2.2", + "bundled": true + } + } + }, + "pump": { + "version": "2.0.1", + "bundled": true, + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "pumpify": { + "version": "1.4.0", + "bundled": true, + "requires": { + "duplexify": "^3.5.3", + "inherits": "^2.0.3", + "pump": "^2.0.0" + } + }, + "stream-each": { + "version": "1.2.2", + "bundled": true, + "requires": { + "end-of-stream": "^1.1.0", + "stream-shift": "^1.0.0" + }, + "dependencies": { + "stream-shift": { + "version": "1.0.0", + "bundled": true + } + } + }, + "through2": { + "version": "2.0.3", + "bundled": true, + "requires": { + "readable-stream": "^2.1.5", + "xtend": "~4.0.1" + }, + "dependencies": { + "xtend": { + "version": "4.0.1", + "bundled": true + } + } + } + } + }, + "npm-pick-manifest": { + "version": "2.1.0", + "bundled": true, + "requires": { + "npm-package-arg": "^6.0.0", + "semver": "^5.4.1" + } + }, + "promise-retry": { + "version": "1.1.1", + "bundled": true, + "requires": { + "err-code": "^1.0.0", + "retry": "^0.10.0" + }, + "dependencies": { + "err-code": { + "version": "1.1.2", + "bundled": true + } + } + }, + "protoduck": { + "version": "5.0.0", + "bundled": true, + "requires": { + "genfun": "^4.0.1" + }, + "dependencies": { + "genfun": { + "version": "4.0.1", + "bundled": true + } + } + }, + "semver": { + "version": "5.5.0", + "bundled": true + } + } + }, + "path-is-inside": { + "version": "1.0.2", + "bundled": true + }, + "promise-inflight": { + "version": "1.0.1", + "bundled": true + }, + "qrcode-terminal": { + "version": "0.11.0", + "bundled": true + }, + "query-string": { + "version": "5.1.0", + "bundled": true, + "requires": { + "decode-uri-component": "^0.2.0", + "object-assign": "^4.1.0", + "strict-uri-encode": "^1.0.0" + }, + "dependencies": { + "decode-uri-component": { + "version": "0.2.0", + "bundled": true + }, + "object-assign": { + "version": "4.1.1", + "bundled": true + }, + "strict-uri-encode": { + "version": "1.1.0", + "bundled": true + } + } + }, + "qw": { + "version": "1.0.1", + "bundled": true + }, + "read": { + "version": "1.0.7", + "bundled": true, + "requires": { + "mute-stream": "~0.0.4" + }, + "dependencies": { + "mute-stream": { + "version": "0.0.7", + "bundled": true + } + } + }, + "read-cmd-shim": { + "version": "1.0.1", + "bundled": true, + "requires": { + "graceful-fs": "^4.1.2" + } + }, + "read-installed": { + "version": "4.0.3", + "bundled": true, + "requires": { + "debuglog": "^1.0.1", + "graceful-fs": "^4.1.2", + "read-package-json": "^2.0.0", + "readdir-scoped-modules": "^1.0.0", + "semver": "2 || 3 || 4 || 5", + "slide": "~1.1.3", + "util-extend": "^1.0.1" + }, + "dependencies": { + "util-extend": { + "version": "1.0.3", + "bundled": true + } + } + }, + "read-package-json": { + "version": "2.0.12", + "bundled": true, + "requires": { + "glob": "^7.1.1", + "graceful-fs": "^4.1.2", + "json-parse-better-errors": "^1.0.0", + "normalize-package-data": "^2.0.0", + "slash": "^1.0.0" + }, + "dependencies": { + "json-parse-better-errors": { + "version": "1.0.1", + "bundled": true + }, + "slash": { + "version": "1.0.0", + "bundled": true + } + } + }, + "read-package-tree": { + "version": "5.1.6", + "bundled": true, + "requires": { + "debuglog": "^1.0.1", + "dezalgo": "^1.0.0", + "once": "^1.3.0", + "read-package-json": "^2.0.0", + "readdir-scoped-modules": "^1.0.0" + } + }, + "readable-stream": { + "version": "2.3.4", + "bundled": 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.0.3", + "util-deprecate": "~1.0.1" + }, + "dependencies": { + "core-util-is": { + "version": "1.0.2", + "bundled": true + }, + "isarray": { + "version": "1.0.0", + "bundled": true + }, + "process-nextick-args": { + "version": "2.0.0", + "bundled": true + }, + "string_decoder": { + "version": "1.0.3", + "bundled": true, + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "util-deprecate": { + "version": "1.0.2", + "bundled": true + } + } + }, + "readdir-scoped-modules": { + "version": "1.0.2", + "bundled": true, + "requires": { + "debuglog": "^1.0.1", + "dezalgo": "^1.0.0", + "graceful-fs": "^4.1.2", + "once": "^1.3.0" + } + }, + "request": { + "version": "2.83.0", + "bundled": true, + "requires": { + "aws-sign2": "~0.7.0", + "aws4": "^1.6.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.5", + "extend": "~3.0.1", + "forever-agent": "~0.6.1", + "form-data": "~2.3.1", + "har-validator": "~5.0.3", + "hawk": "~6.0.2", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.17", + "oauth-sign": "~0.8.2", + "performance-now": "^2.1.0", + "qs": "~6.5.1", + "safe-buffer": "^5.1.1", + "stringstream": "~0.0.5", + "tough-cookie": "~2.3.3", + "tunnel-agent": "^0.6.0", + "uuid": "^3.1.0" + }, + "dependencies": { + "aws-sign2": { + "version": "0.7.0", + "bundled": true + }, + "aws4": { + "version": "1.6.0", + "bundled": true + }, + "caseless": { + "version": "0.12.0", + "bundled": true + }, + "combined-stream": { + "version": "1.0.5", + "bundled": true, + "requires": { + "delayed-stream": "~1.0.0" + }, + "dependencies": { + "delayed-stream": { + "version": "1.0.0", + "bundled": true + } + } + }, + "extend": { + "version": "3.0.1", + "bundled": true + }, + "forever-agent": { + "version": "0.6.1", + "bundled": true + }, + "form-data": { + "version": "2.3.1", + "bundled": true, + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.5", + "mime-types": "^2.1.12" + }, + "dependencies": { + "asynckit": { + "version": "0.4.0", + "bundled": true + } + } + }, + "har-validator": { + "version": "5.0.3", + "bundled": true, + "requires": { + "ajv": "^5.1.0", + "har-schema": "^2.0.0" + }, + "dependencies": { + "ajv": { + "version": "5.2.3", + "bundled": true, + "requires": { + "co": "^4.6.0", + "fast-deep-equal": "^1.0.0", + "json-schema-traverse": "^0.3.0", + "json-stable-stringify": "^1.0.1" + }, + "dependencies": { + "co": { + "version": "4.6.0", + "bundled": true + }, + "fast-deep-equal": { + "version": "1.0.0", + "bundled": true + }, + "json-schema-traverse": { + "version": "0.3.1", + "bundled": true + }, + "json-stable-stringify": { + "version": "1.0.1", + "bundled": true, + "requires": { + "jsonify": "~0.0.0" + }, + "dependencies": { + "jsonify": { + "version": "0.0.0", + "bundled": true + } + } + } + } + }, + "har-schema": { + "version": "2.0.0", + "bundled": true + } + } + }, + "hawk": { + "version": "6.0.2", + "bundled": true, + "requires": { + "boom": "4.x.x", + "cryptiles": "3.x.x", + "hoek": "4.x.x", + "sntp": "2.x.x" + }, + "dependencies": { + "boom": { + "version": "4.3.1", + "bundled": true, + "requires": { + "hoek": "4.x.x" + } + }, + "cryptiles": { + "version": "3.1.2", + "bundled": true, + "requires": { + "boom": "5.x.x" + }, + "dependencies": { + "boom": { + "version": "5.2.0", + "bundled": true, + "requires": { + "hoek": "4.x.x" + } + } + } + }, + "hoek": { + "version": "4.2.0", + "bundled": true + }, + "sntp": { + "version": "2.0.2", + "bundled": true, + "requires": { + "hoek": "4.x.x" + } + } + } + }, + "http-signature": { + "version": "1.2.0", + "bundled": true, + "requires": { + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "bundled": true + }, + "jsprim": { + "version": "1.4.1", + "bundled": true, + "requires": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.2.3", + "verror": "1.10.0" + }, + "dependencies": { + "extsprintf": { + "version": "1.3.0", + "bundled": true + }, + "json-schema": { + "version": "0.2.3", + "bundled": true + }, + "verror": { + "version": "1.10.0", + "bundled": true, + "requires": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + }, + "dependencies": { + "core-util-is": { + "version": "1.0.2", + "bundled": true + } + } + } + } + }, + "sshpk": { + "version": "1.13.1", + "bundled": true, + "requires": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "tweetnacl": "~0.14.0" + }, + "dependencies": { + "asn1": { + "version": "0.2.3", + "bundled": true + }, + "bcrypt-pbkdf": { + "version": "1.0.1", + "bundled": true, + "optional": true, + "requires": { + "tweetnacl": "^0.14.3" + } + }, + "dashdash": { + "version": "1.14.1", + "bundled": true, + "requires": { + "assert-plus": "^1.0.0" + } + }, + "ecc-jsbn": { + "version": "0.1.1", + "bundled": true, + "optional": true, + "requires": { + "jsbn": "~0.1.0" + } + }, + "getpass": { + "version": "0.1.7", + "bundled": true, + "requires": { + "assert-plus": "^1.0.0" + } + }, + "jsbn": { + "version": "0.1.1", + "bundled": true, + "optional": true + }, + "tweetnacl": { + "version": "0.14.5", + "bundled": true, + "optional": true + } + } + } + } + }, + "is-typedarray": { + "version": "1.0.0", + "bundled": true + }, + "isstream": { + "version": "0.1.2", + "bundled": true + }, + "json-stringify-safe": { + "version": "5.0.1", + "bundled": true + }, + "mime-types": { + "version": "2.1.17", + "bundled": true, + "requires": { + "mime-db": "~1.30.0" + }, + "dependencies": { + "mime-db": { + "version": "1.30.0", + "bundled": true + } + } + }, + "oauth-sign": { + "version": "0.8.2", + "bundled": true + }, + "performance-now": { + "version": "2.1.0", + "bundled": true + }, + "qs": { + "version": "6.5.1", + "bundled": true + }, + "stringstream": { + "version": "0.0.5", + "bundled": true + }, + "tough-cookie": { + "version": "2.3.3", + "bundled": true, + "requires": { + "punycode": "^1.4.1" + }, + "dependencies": { + "punycode": { + "version": "1.4.1", + "bundled": true + } + } + }, + "tunnel-agent": { + "version": "0.6.0", + "bundled": true, + "requires": { + "safe-buffer": "^5.0.1" + } + } + } + }, + "retry": { + "version": "0.10.1", + "bundled": true + }, + "rimraf": { + "version": "2.6.2", + "bundled": true, + "requires": { + "glob": "^7.0.5" + } + }, + "safe-buffer": { + "version": "5.1.1", + "bundled": true + }, + "semver": { + "version": "5.5.0", + "bundled": true + }, + "sha": { + "version": "2.0.1", + "bundled": true, + "requires": { + "graceful-fs": "^4.1.2", + "readable-stream": "^2.0.2" + } + }, + "slide": { + "version": "1.1.6", + "bundled": true + }, + "sorted-object": { + "version": "2.0.1", + "bundled": true + }, + "sorted-union-stream": { + "version": "2.1.3", + "bundled": true, + "requires": { + "from2": "^1.3.0", + "stream-iterate": "^1.1.0" + }, + "dependencies": { + "from2": { + "version": "1.3.0", + "bundled": true, + "requires": { + "inherits": "~2.0.1", + "readable-stream": "~1.1.10" + }, + "dependencies": { + "readable-stream": { + "version": "1.1.14", + "bundled": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + }, + "dependencies": { + "core-util-is": { + "version": "1.0.2", + "bundled": true + }, + "isarray": { + "version": "0.0.1", + "bundled": true + }, + "string_decoder": { + "version": "0.10.31", + "bundled": true + } + } + } + } + }, + "stream-iterate": { + "version": "1.2.0", + "bundled": true, + "requires": { + "readable-stream": "^2.1.5", + "stream-shift": "^1.0.0" + }, + "dependencies": { + "stream-shift": { + "version": "1.0.0", + "bundled": true + } + } + } + } + }, + "ssri": { + "version": "5.2.4", + "bundled": true, + "requires": { + "safe-buffer": "^5.1.1" + } + }, + "strip-ansi": { + "version": "4.0.0", + "bundled": true, + "requires": { + "ansi-regex": "^3.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "bundled": true + } + } + }, + "tar": { + "version": "4.3.3", + "bundled": true, + "requires": { + "chownr": "^1.0.1", + "fs-minipass": "^1.2.3", + "minipass": "^2.2.1", + "minizlib": "^1.1.0", + "mkdirp": "^0.5.0", + "yallist": "^3.0.2" + }, + "dependencies": { + "fs-minipass": { + "version": "1.2.5", + "bundled": true, + "requires": { + "minipass": "^2.2.1" + } + }, + "minipass": { + "version": "2.2.1", + "bundled": true, + "requires": { + "yallist": "^3.0.0" + } + }, + "minizlib": { + "version": "1.1.0", + "bundled": true, + "requires": { + "minipass": "^2.2.1" + } + }, + "yallist": { + "version": "3.0.2", + "bundled": true + } + } + }, + "text-table": { + "version": "0.2.0", + "bundled": true + }, + "uid-number": { + "version": "0.0.6", + "bundled": true + }, + "umask": { + "version": "1.1.0", + "bundled": true + }, + "unique-filename": { + "version": "1.1.0", + "bundled": true, + "requires": { + "unique-slug": "^2.0.0" + }, + "dependencies": { + "unique-slug": { + "version": "2.0.0", + "bundled": true, + "requires": { + "imurmurhash": "^0.1.4" + } + } + } + }, + "unpipe": { + "version": "1.0.0", + "bundled": true + }, + "update-notifier": { + "version": "2.3.0", + "bundled": true, + "requires": { + "boxen": "^1.2.1", + "chalk": "^2.0.1", + "configstore": "^3.0.0", + "import-lazy": "^2.1.0", + "is-installed-globally": "^0.1.0", + "is-npm": "^1.0.0", + "latest-version": "^3.0.0", + "semver-diff": "^2.0.0", + "xdg-basedir": "^3.0.0" + }, + "dependencies": { + "boxen": { + "version": "1.2.1", + "bundled": true, + "requires": { + "ansi-align": "^2.0.0", + "camelcase": "^4.0.0", + "chalk": "^2.0.1", + "cli-boxes": "^1.0.0", + "string-width": "^2.0.0", + "term-size": "^1.2.0", + "widest-line": "^1.0.0" + }, + "dependencies": { + "ansi-align": { + "version": "2.0.0", + "bundled": true, + "requires": { + "string-width": "^2.0.0" + } + }, + "camelcase": { + "version": "4.1.0", + "bundled": true + }, + "cli-boxes": { + "version": "1.0.0", + "bundled": true + }, + "string-width": { + "version": "2.1.1", + "bundled": true, + "requires": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + }, + "dependencies": { + "is-fullwidth-code-point": { + "version": "2.0.0", + "bundled": true + } + } + }, + "term-size": { + "version": "1.2.0", + "bundled": true, + "requires": { + "execa": "^0.7.0" + }, + "dependencies": { + "execa": { + "version": "0.7.0", + "bundled": true, + "requires": { + "cross-spawn": "^5.0.1", + "get-stream": "^3.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + }, + "dependencies": { + "cross-spawn": { + "version": "5.1.0", + "bundled": true, + "requires": { + "lru-cache": "^4.0.1", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + }, + "dependencies": { + "shebang-command": { + "version": "1.2.0", + "bundled": true, + "requires": { + "shebang-regex": "^1.0.0" + }, + "dependencies": { + "shebang-regex": { + "version": "1.0.0", + "bundled": true + } + } + } + } + }, + "get-stream": { + "version": "3.0.0", + "bundled": true + }, + "is-stream": { + "version": "1.1.0", + "bundled": true + }, + "npm-run-path": { + "version": "2.0.2", + "bundled": true, + "requires": { + "path-key": "^2.0.0" + }, + "dependencies": { + "path-key": { + "version": "2.0.1", + "bundled": true + } + } + }, + "p-finally": { + "version": "1.0.0", + "bundled": true + }, + "signal-exit": { + "version": "3.0.2", + "bundled": true + }, + "strip-eof": { + "version": "1.0.0", + "bundled": true + } + } + } + } + }, + "widest-line": { + "version": "1.0.0", + "bundled": true, + "requires": { + "string-width": "^1.0.1" + }, + "dependencies": { + "string-width": { + "version": "1.0.2", + "bundled": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + }, + "dependencies": { + "code-point-at": { + "version": "1.1.0", + "bundled": true + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "bundled": true, + "requires": { + "number-is-nan": "^1.0.0" + }, + "dependencies": { + "number-is-nan": { + "version": "1.0.1", + "bundled": true + } + } + }, + "strip-ansi": { + "version": "3.0.1", + "bundled": true, + "requires": { + "ansi-regex": "^2.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "bundled": true + } + } + } + } + } + } + } + } + }, + "chalk": { + "version": "2.1.0", + "bundled": true, + "requires": { + "ansi-styles": "^3.1.0", + "escape-string-regexp": "^1.0.5", + "supports-color": "^4.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.0", + "bundled": true, + "requires": { + "color-convert": "^1.9.0" + }, + "dependencies": { + "color-convert": { + "version": "1.9.0", + "bundled": true, + "requires": { + "color-name": "^1.1.1" + }, + "dependencies": { + "color-name": { + "version": "1.1.3", + "bundled": true + } + } + } + } + }, + "escape-string-regexp": { + "version": "1.0.5", + "bundled": true + }, + "supports-color": { + "version": "4.4.0", + "bundled": true, + "requires": { + "has-flag": "^2.0.0" + }, + "dependencies": { + "has-flag": { + "version": "2.0.0", + "bundled": true + } + } + } + } + }, + "configstore": { + "version": "3.1.1", + "bundled": true, + "requires": { + "dot-prop": "^4.1.0", + "graceful-fs": "^4.1.2", + "make-dir": "^1.0.0", + "unique-string": "^1.0.0", + "write-file-atomic": "^2.0.0", + "xdg-basedir": "^3.0.0" + }, + "dependencies": { + "dot-prop": { + "version": "4.2.0", + "bundled": true, + "requires": { + "is-obj": "^1.0.0" + }, + "dependencies": { + "is-obj": { + "version": "1.0.1", + "bundled": true + } + } + }, + "make-dir": { + "version": "1.0.0", + "bundled": true, + "requires": { + "pify": "^2.3.0" + }, + "dependencies": { + "pify": { + "version": "2.3.0", + "bundled": true + } + } + }, + "unique-string": { + "version": "1.0.0", + "bundled": true, + "requires": { + "crypto-random-string": "^1.0.0" + }, + "dependencies": { + "crypto-random-string": { + "version": "1.0.0", + "bundled": true + } + } + } + } + }, + "import-lazy": { + "version": "2.1.0", + "bundled": true + }, + "is-installed-globally": { + "version": "0.1.0", + "bundled": true, + "requires": { + "global-dirs": "^0.1.0", + "is-path-inside": "^1.0.0" + }, + "dependencies": { + "global-dirs": { + "version": "0.1.0", + "bundled": true, + "requires": { + "ini": "^1.3.4" + } + }, + "is-path-inside": { + "version": "1.0.0", + "bundled": true, + "requires": { + "path-is-inside": "^1.0.1" + } + } + } + }, + "is-npm": { + "version": "1.0.0", + "bundled": true + }, + "latest-version": { + "version": "3.1.0", + "bundled": true, + "requires": { + "package-json": "^4.0.0" + }, + "dependencies": { + "package-json": { + "version": "4.0.1", + "bundled": true, + "requires": { + "got": "^6.7.1", + "registry-auth-token": "^3.0.1", + "registry-url": "^3.0.3", + "semver": "^5.1.0" + }, + "dependencies": { + "got": { + "version": "6.7.1", + "bundled": true, + "requires": { + "create-error-class": "^3.0.0", + "duplexer3": "^0.1.4", + "get-stream": "^3.0.0", + "is-redirect": "^1.0.0", + "is-retry-allowed": "^1.0.0", + "is-stream": "^1.0.0", + "lowercase-keys": "^1.0.0", + "safe-buffer": "^5.0.1", + "timed-out": "^4.0.0", + "unzip-response": "^2.0.1", + "url-parse-lax": "^1.0.0" + }, + "dependencies": { + "create-error-class": { + "version": "3.0.2", + "bundled": true, + "requires": { + "capture-stack-trace": "^1.0.0" + }, + "dependencies": { + "capture-stack-trace": { + "version": "1.0.0", + "bundled": true + } + } + }, + "duplexer3": { + "version": "0.1.4", + "bundled": true + }, + "get-stream": { + "version": "3.0.0", + "bundled": true + }, + "is-redirect": { + "version": "1.0.0", + "bundled": true + }, + "is-retry-allowed": { + "version": "1.1.0", + "bundled": true + }, + "is-stream": { + "version": "1.1.0", + "bundled": true + }, + "lowercase-keys": { + "version": "1.0.0", + "bundled": true + }, + "timed-out": { + "version": "4.0.1", + "bundled": true + }, + "unzip-response": { + "version": "2.0.1", + "bundled": true + }, + "url-parse-lax": { + "version": "1.0.0", + "bundled": true, + "requires": { + "prepend-http": "^1.0.1" + }, + "dependencies": { + "prepend-http": { + "version": "1.0.4", + "bundled": true + } + } + } + } + }, + "registry-auth-token": { + "version": "3.3.1", + "bundled": true, + "requires": { + "rc": "^1.1.6", + "safe-buffer": "^5.0.1" + }, + "dependencies": { + "rc": { + "version": "1.2.1", + "bundled": true, + "requires": { + "deep-extend": "~0.4.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "dependencies": { + "deep-extend": { + "version": "0.4.2", + "bundled": true + }, + "minimist": { + "version": "1.2.0", + "bundled": true + }, + "strip-json-comments": { + "version": "2.0.1", + "bundled": true + } + } + } + } + }, + "registry-url": { + "version": "3.1.0", + "bundled": true, + "requires": { + "rc": "^1.0.1" + }, + "dependencies": { + "rc": { + "version": "1.2.1", + "bundled": true, + "requires": { + "deep-extend": "~0.4.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "dependencies": { + "deep-extend": { + "version": "0.4.2", + "bundled": true + }, + "minimist": { + "version": "1.2.0", + "bundled": true + }, + "strip-json-comments": { + "version": "2.0.1", + "bundled": true + } + } + } + } + } + } + } + } + }, + "semver-diff": { + "version": "2.1.0", + "bundled": true, + "requires": { + "semver": "^5.0.3" + } + }, + "xdg-basedir": { + "version": "3.0.0", + "bundled": true + } + } + }, + "uuid": { + "version": "3.2.1", + "bundled": true + }, + "validate-npm-package-license": { + "version": "3.0.1", + "bundled": true, + "requires": { + "spdx-correct": "~1.0.0", + "spdx-expression-parse": "~1.0.0" + }, + "dependencies": { + "spdx-correct": { + "version": "1.0.2", + "bundled": true, + "requires": { + "spdx-license-ids": "^1.0.2" + }, + "dependencies": { + "spdx-license-ids": { + "version": "1.2.2", + "bundled": true + } + } + }, + "spdx-expression-parse": { + "version": "1.0.4", + "bundled": true + } + } + }, + "validate-npm-package-name": { + "version": "3.0.0", + "bundled": true, + "requires": { + "builtins": "^1.0.3" + }, + "dependencies": { + "builtins": { + "version": "1.0.3", + "bundled": true + } + } + }, + "which": { + "version": "1.3.0", + "bundled": true, + "requires": { + "isexe": "^2.0.0" + }, + "dependencies": { + "isexe": { + "version": "2.0.0", + "bundled": true + } + } + }, + "worker-farm": { + "version": "1.5.2", + "bundled": true, + "requires": { + "errno": "^0.1.4", + "xtend": "^4.0.1" + }, + "dependencies": { + "errno": { + "version": "0.1.7", + "bundled": true, + "requires": { + "prr": "~1.0.1" + }, + "dependencies": { + "prr": { + "version": "1.0.1", + "bundled": true + } + } + }, + "xtend": { + "version": "4.0.1", + "bundled": true + } + } + }, + "wrappy": { + "version": "1.0.2", + "bundled": true + }, + "write-file-atomic": { + "version": "2.1.0", + "bundled": true, + "requires": { + "graceful-fs": "^4.1.11", + "imurmurhash": "^0.1.4", + "slide": "^1.1.5" + } + } + } + }, + "nssocket": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/nssocket/-/nssocket-0.6.0.tgz", + "integrity": "sha1-Wflvb/MhVm8zxw99vu7N/cBxVPo=", + "requires": { + "eventemitter2": "~0.4.14", + "lazy": "~1.0.11" + }, + "dependencies": { + "eventemitter2": { + "version": "0.4.14", + "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-0.4.14.tgz", + "integrity": "sha1-j2G3XN4BKy6esoTUVFWDtWQ7Yas=" + } + } + }, + "nyc": { + "version": "11.5.0", + "resolved": "https://registry.npmjs.org/nyc/-/nyc-11.5.0.tgz", + "integrity": "sha512-xIYK189By0YiM5/T4TviHu3J7bV7lCj5WYJfyZK3z03QgAaQ60WcLaJuXf0zhKoI6PBnUR92ZpSwBICCrgSBGg==", + "dev": true, + "requires": { + "archy": "^1.0.0", + "arrify": "^1.0.1", + "caching-transform": "^1.0.0", + "convert-source-map": "^1.5.1", + "debug-log": "^1.0.1", + "default-require-extensions": "^1.0.0", + "find-cache-dir": "^0.1.1", + "find-up": "^2.1.0", + "foreground-child": "^1.5.3", + "glob": "^7.0.6", + "istanbul-lib-coverage": "^1.1.2", + "istanbul-lib-hook": "^1.1.0", + "istanbul-lib-instrument": "^1.9.2", + "istanbul-lib-report": "^1.1.3", + "istanbul-lib-source-maps": "^1.2.3", + "istanbul-reports": "^1.1.4", + "md5-hex": "^1.2.0", + "merge-source-map": "^1.0.2", + "micromatch": "^2.3.11", + "mkdirp": "^0.5.0", + "resolve-from": "^2.0.0", + "rimraf": "^2.5.4", + "signal-exit": "^3.0.1", + "spawn-wrap": "^1.4.2", + "test-exclude": "^4.2.0", + "yargs": "^10.0.3", + "yargs-parser": "^8.0.0" + }, + "dependencies": { + "align-text": { + "version": "0.1.4", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "kind-of": "^3.0.2", + "longest": "^1.0.1", + "repeat-string": "^1.5.2" + } + }, + "amdefine": { + "version": "1.0.1", + "bundled": true, + "dev": true + }, + "ansi-regex": { + "version": "2.1.1", + "bundled": true, + "dev": true + }, + "ansi-styles": { + "version": "2.2.1", + "bundled": true, + "dev": true + }, + "append-transform": { + "version": "0.4.0", + "bundled": true, + "dev": true, + "requires": { + "default-require-extensions": "^1.0.0" + } + }, + "archy": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "arr-diff": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "requires": { + "arr-flatten": "^1.0.1" + } + }, + "arr-flatten": { + "version": "1.1.0", + "bundled": true, + "dev": true + }, + "array-unique": { + "version": "0.2.1", + "bundled": true, + "dev": true + }, + "arrify": { + "version": "1.0.1", + "bundled": true, + "dev": true + }, + "async": { + "version": "1.5.2", + "bundled": true, + "dev": true + }, + "babel-code-frame": { + "version": "6.26.0", + "bundled": true, + "dev": true, + "requires": { + "chalk": "^1.1.3", + "esutils": "^2.0.2", + "js-tokens": "^3.0.2" + } + }, + "babel-generator": { + "version": "6.26.1", + "bundled": true, + "dev": true, + "requires": { + "babel-messages": "^6.23.0", + "babel-runtime": "^6.26.0", + "babel-types": "^6.26.0", + "detect-indent": "^4.0.0", + "jsesc": "^1.3.0", + "lodash": "^4.17.4", + "source-map": "^0.5.7", + "trim-right": "^1.0.1" + } + }, + "babel-messages": { + "version": "6.23.0", + "bundled": true, + "dev": true, + "requires": { + "babel-runtime": "^6.22.0" + } + }, + "babel-runtime": { + "version": "6.26.0", + "bundled": true, + "dev": true, + "requires": { + "core-js": "^2.4.0", + "regenerator-runtime": "^0.11.0" + } + }, + "babel-template": { + "version": "6.26.0", + "bundled": true, + "dev": true, + "requires": { + "babel-runtime": "^6.26.0", + "babel-traverse": "^6.26.0", + "babel-types": "^6.26.0", + "babylon": "^6.18.0", + "lodash": "^4.17.4" + } + }, + "babel-traverse": { + "version": "6.26.0", + "bundled": true, + "dev": true, + "requires": { + "babel-code-frame": "^6.26.0", + "babel-messages": "^6.23.0", + "babel-runtime": "^6.26.0", + "babel-types": "^6.26.0", + "babylon": "^6.18.0", + "debug": "^2.6.8", + "globals": "^9.18.0", + "invariant": "^2.2.2", + "lodash": "^4.17.4" + } + }, + "babel-types": { + "version": "6.26.0", + "bundled": true, + "dev": true, + "requires": { + "babel-runtime": "^6.26.0", + "esutils": "^2.0.2", + "lodash": "^4.17.4", + "to-fast-properties": "^1.0.3" + } + }, + "babylon": { + "version": "6.18.0", + "bundled": true, + "dev": true + }, + "balanced-match": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "brace-expansion": { + "version": "1.1.11", + "bundled": true, + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "1.8.5", + "bundled": true, + "dev": true, + "requires": { + "expand-range": "^1.8.1", + "preserve": "^0.2.0", + "repeat-element": "^1.1.2" + } + }, + "builtin-modules": { + "version": "1.1.1", + "bundled": true, + "dev": true + }, + "caching-transform": { + "version": "1.0.1", + "bundled": true, + "dev": true, + "requires": { + "md5-hex": "^1.2.0", + "mkdirp": "^0.5.1", + "write-file-atomic": "^1.1.4" + } + }, + "camelcase": { + "version": "1.2.1", + "bundled": true, + "dev": true, + "optional": true + }, + "center-align": { + "version": "0.1.3", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "align-text": "^0.1.3", + "lazy-cache": "^1.0.3" + } + }, + "chalk": { + "version": "1.1.3", + "bundled": true, + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + } + }, + "cliui": { + "version": "2.1.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "center-align": "^0.1.1", + "right-align": "^0.1.1", + "wordwrap": "0.0.2" + }, + "dependencies": { + "wordwrap": { + "version": "0.0.2", + "bundled": true, + "dev": true, + "optional": true + } + } + }, + "code-point-at": { + "version": "1.1.0", + "bundled": true, + "dev": true + }, + "commondir": { + "version": "1.0.1", + "bundled": true, + "dev": true + }, + "concat-map": { + "version": "0.0.1", + "bundled": true, + "dev": true + }, + "convert-source-map": { + "version": "1.5.1", + "bundled": true, + "dev": true + }, + "core-js": { + "version": "2.5.3", + "bundled": true, + "dev": true + }, + "cross-spawn": { + "version": "4.0.2", + "bundled": true, + "dev": true, + "requires": { + "lru-cache": "^4.0.1", + "which": "^1.2.9" + } + }, + "debug": { + "version": "2.6.9", + "bundled": true, + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "debug-log": { + "version": "1.0.1", + "bundled": true, + "dev": true + }, + "decamelize": { + "version": "1.2.0", + "bundled": true, + "dev": true + }, + "default-require-extensions": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "requires": { + "strip-bom": "^2.0.0" + } + }, + "detect-indent": { + "version": "4.0.0", + "bundled": true, + "dev": true, + "requires": { + "repeating": "^2.0.0" + } + }, + "error-ex": { + "version": "1.3.1", + "bundled": true, + "dev": true, + "requires": { + "is-arrayish": "^0.2.1" + } + }, + "escape-string-regexp": { + "version": "1.0.5", + "bundled": true, + "dev": true + }, + "esutils": { + "version": "2.0.2", + "bundled": true, + "dev": true + }, + "execa": { + "version": "0.7.0", + "bundled": true, + "dev": true, + "requires": { + "cross-spawn": "^5.0.1", + "get-stream": "^3.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + }, + "dependencies": { + "cross-spawn": { + "version": "5.1.0", + "bundled": true, + "dev": true, + "requires": { + "lru-cache": "^4.0.1", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + } + } + }, + "expand-brackets": { + "version": "0.1.5", + "bundled": true, + "dev": true, + "requires": { + "is-posix-bracket": "^0.1.0" + } + }, + "expand-range": { + "version": "1.8.2", + "bundled": true, + "dev": true, + "requires": { + "fill-range": "^2.1.0" + } + }, + "extglob": { + "version": "0.3.2", + "bundled": true, + "dev": true, + "requires": { + "is-extglob": "^1.0.0" + } + }, + "filename-regex": { + "version": "2.0.1", + "bundled": true, + "dev": true + }, + "fill-range": { + "version": "2.2.3", + "bundled": true, + "dev": true, + "requires": { + "is-number": "^2.1.0", + "isobject": "^2.0.0", + "randomatic": "^1.1.3", + "repeat-element": "^1.1.2", + "repeat-string": "^1.5.2" + } + }, + "find-cache-dir": { + "version": "0.1.1", + "bundled": true, + "dev": true, + "requires": { + "commondir": "^1.0.1", + "mkdirp": "^0.5.1", + "pkg-dir": "^1.0.0" + } + }, + "find-up": { + "version": "2.1.0", + "bundled": true, + "dev": true, + "requires": { + "locate-path": "^2.0.0" + } + }, + "for-in": { + "version": "1.0.2", + "bundled": true, + "dev": true + }, + "for-own": { + "version": "0.1.5", + "bundled": true, + "dev": true, + "requires": { + "for-in": "^1.0.1" + } + }, + "foreground-child": { + "version": "1.5.6", + "bundled": true, + "dev": true, + "requires": { + "cross-spawn": "^4", + "signal-exit": "^3.0.0" + } + }, + "fs.realpath": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "get-caller-file": { + "version": "1.0.2", + "bundled": true, + "dev": true + }, + "get-stream": { + "version": "3.0.0", + "bundled": true, + "dev": true + }, + "glob": { + "version": "7.1.2", + "bundled": true, + "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" + } + }, + "glob-base": { + "version": "0.3.0", + "bundled": true, + "dev": true, + "requires": { + "glob-parent": "^2.0.0", + "is-glob": "^2.0.0" + } + }, + "glob-parent": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "requires": { + "is-glob": "^2.0.0" + } + }, + "globals": { + "version": "9.18.0", + "bundled": true, + "dev": true + }, + "graceful-fs": { + "version": "4.1.11", + "bundled": true, + "dev": true + }, + "handlebars": { + "version": "4.0.11", + "bundled": true, + "dev": true, + "requires": { + "async": "^1.4.0", + "optimist": "^0.6.1", + "source-map": "^0.4.4", + "uglify-js": "^2.6" + }, + "dependencies": { + "source-map": { + "version": "0.4.4", + "bundled": true, + "dev": true, + "requires": { + "amdefine": ">=0.0.4" + } + } + } + }, + "has-ansi": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "has-flag": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "hosted-git-info": { + "version": "2.5.0", + "bundled": true, + "dev": true + }, + "imurmurhash": { + "version": "0.1.4", + "bundled": true, + "dev": true + }, + "inflight": { + "version": "1.0.6", + "bundled": true, + "dev": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.3", + "bundled": true, + "dev": true + }, + "invariant": { + "version": "2.2.2", + "bundled": true, + "dev": true, + "requires": { + "loose-envify": "^1.0.0" + } + }, + "invert-kv": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "is-arrayish": { + "version": "0.2.1", + "bundled": true, + "dev": true + }, + "is-buffer": { + "version": "1.1.6", + "bundled": true, + "dev": true + }, + "is-builtin-module": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "requires": { + "builtin-modules": "^1.0.0" + } + }, + "is-dotfile": { + "version": "1.0.3", + "bundled": true, + "dev": true + }, + "is-equal-shallow": { + "version": "0.1.3", + "bundled": true, + "dev": true, + "requires": { + "is-primitive": "^2.0.0" + } + }, + "is-extendable": { + "version": "0.1.1", + "bundled": true, + "dev": true + }, + "is-extglob": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "is-finite": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "bundled": true, + "dev": true + }, + "is-glob": { + "version": "2.0.1", + "bundled": true, + "dev": true, + "requires": { + "is-extglob": "^1.0.0" + } + }, + "is-number": { + "version": "2.1.0", + "bundled": true, + "dev": true, + "requires": { + "kind-of": "^3.0.2" + } + }, + "is-posix-bracket": { + "version": "0.1.1", + "bundled": true, + "dev": true + }, + "is-primitive": { + "version": "2.0.0", + "bundled": true, + "dev": true + }, + "is-stream": { + "version": "1.1.0", + "bundled": true, + "dev": true + }, + "is-utf8": { + "version": "0.2.1", + "bundled": true, + "dev": true + }, + "isarray": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "isexe": { + "version": "2.0.0", + "bundled": true, + "dev": true + }, + "isobject": { + "version": "2.1.0", + "bundled": true, + "dev": true, + "requires": { + "isarray": "1.0.0" + } + }, + "istanbul-lib-coverage": { + "version": "1.1.2", + "bundled": true, + "dev": true + }, + "istanbul-lib-hook": { + "version": "1.1.0", + "bundled": true, + "dev": true, + "requires": { + "append-transform": "^0.4.0" + } + }, + "istanbul-lib-instrument": { + "version": "1.9.2", + "bundled": true, + "dev": true, + "requires": { + "babel-generator": "^6.18.0", + "babel-template": "^6.16.0", + "babel-traverse": "^6.18.0", + "babel-types": "^6.18.0", + "babylon": "^6.18.0", + "istanbul-lib-coverage": "^1.1.2", + "semver": "^5.3.0" + } + }, + "istanbul-lib-report": { + "version": "1.1.3", + "bundled": true, + "dev": true, + "requires": { + "istanbul-lib-coverage": "^1.1.2", + "mkdirp": "^0.5.1", + "path-parse": "^1.0.5", + "supports-color": "^3.1.2" + }, + "dependencies": { + "supports-color": { + "version": "3.2.3", + "bundled": true, + "dev": true, + "requires": { + "has-flag": "^1.0.0" + } + } + } + }, + "istanbul-lib-source-maps": { + "version": "1.2.3", + "bundled": true, + "dev": true, + "requires": { + "debug": "^3.1.0", + "istanbul-lib-coverage": "^1.1.2", + "mkdirp": "^0.5.1", + "rimraf": "^2.6.1", + "source-map": "^0.5.3" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "bundled": true, + "dev": true, + "requires": { + "ms": "2.0.0" + } + } + } + }, + "istanbul-reports": { + "version": "1.1.4", + "bundled": true, + "dev": true, + "requires": { + "handlebars": "^4.0.3" + } + }, + "js-tokens": { + "version": "3.0.2", + "bundled": true, + "dev": true + }, + "jsesc": { + "version": "1.3.0", + "bundled": true, + "dev": true + }, + "kind-of": { + "version": "3.2.2", + "bundled": true, + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + }, + "lazy-cache": { + "version": "1.0.4", + "bundled": true, + "dev": true, + "optional": true + }, + "lcid": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "requires": { + "invert-kv": "^1.0.0" + } + }, + "load-json-file": { + "version": "1.1.0", + "bundled": true, + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "parse-json": "^2.2.0", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0", + "strip-bom": "^2.0.0" + } + }, + "locate-path": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "requires": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + }, + "dependencies": { + "path-exists": { + "version": "3.0.0", + "bundled": true, + "dev": true + } + } + }, + "lodash": { + "version": "4.17.5", + "bundled": true, + "dev": true + }, + "longest": { + "version": "1.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "loose-envify": { + "version": "1.3.1", + "bundled": true, + "dev": true, + "requires": { + "js-tokens": "^3.0.0" + } + }, + "lru-cache": { + "version": "4.1.1", + "bundled": true, + "dev": true, + "requires": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } + }, + "md5-hex": { + "version": "1.3.0", + "bundled": true, + "dev": true, + "requires": { + "md5-o-matic": "^0.1.1" + } + }, + "md5-o-matic": { + "version": "0.1.1", + "bundled": true, + "dev": true + }, + "mem": { + "version": "1.1.0", + "bundled": true, + "dev": true, + "requires": { + "mimic-fn": "^1.0.0" + } + }, + "merge-source-map": { + "version": "1.1.0", + "bundled": true, + "dev": true, + "requires": { + "source-map": "^0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "bundled": true, + "dev": true + } + } + }, + "micromatch": { + "version": "2.3.11", + "bundled": true, + "dev": true, + "requires": { + "arr-diff": "^2.0.0", + "array-unique": "^0.2.1", + "braces": "^1.8.2", + "expand-brackets": "^0.1.4", + "extglob": "^0.3.1", + "filename-regex": "^2.0.0", + "is-extglob": "^1.0.0", + "is-glob": "^2.0.1", + "kind-of": "^3.0.2", + "normalize-path": "^2.0.1", + "object.omit": "^2.0.0", + "parse-glob": "^3.0.4", + "regex-cache": "^0.4.2" + } + }, + "mimic-fn": { + "version": "1.2.0", + "bundled": true, + "dev": true + }, + "minimatch": { + "version": "3.0.4", + "bundled": true, + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "0.0.8", + "bundled": true, + "dev": true + }, + "mkdirp": { + "version": "0.5.1", + "bundled": true, + "dev": true, + "requires": { + "minimist": "0.0.8" + } + }, + "ms": { + "version": "2.0.0", + "bundled": true, + "dev": true + }, + "normalize-package-data": { + "version": "2.4.0", + "bundled": true, + "dev": true, + "requires": { + "hosted-git-info": "^2.1.4", + "is-builtin-module": "^1.0.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "normalize-path": { + "version": "2.1.1", + "bundled": true, + "dev": true, + "requires": { + "remove-trailing-separator": "^1.0.1" + } + }, + "npm-run-path": { + "version": "2.0.2", + "bundled": true, + "dev": true, + "requires": { + "path-key": "^2.0.0" + } + }, + "number-is-nan": { + "version": "1.0.1", + "bundled": true, + "dev": true + }, + "object-assign": { + "version": "4.1.1", + "bundled": true, + "dev": true + }, + "object.omit": { + "version": "2.0.1", + "bundled": true, + "dev": true, + "requires": { + "for-own": "^0.1.4", + "is-extendable": "^0.1.1" + } + }, + "once": { + "version": "1.4.0", + "bundled": true, + "dev": true, + "requires": { + "wrappy": "1" + } + }, + "optimist": { + "version": "0.6.1", + "bundled": true, + "dev": true, + "requires": { + "minimist": "~0.0.1", + "wordwrap": "~0.0.2" + } + }, + "os-homedir": { + "version": "1.0.2", + "bundled": true, + "dev": true + }, + "os-locale": { + "version": "2.1.0", + "bundled": true, + "dev": true, + "requires": { + "execa": "^0.7.0", + "lcid": "^1.0.0", + "mem": "^1.1.0" + } + }, + "p-finally": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "p-limit": { + "version": "1.2.0", + "bundled": true, + "dev": true, + "requires": { + "p-try": "^1.0.0" + } + }, + "p-locate": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "requires": { + "p-limit": "^1.1.0" + } + }, + "p-try": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "parse-glob": { + "version": "3.0.4", + "bundled": true, + "dev": true, + "requires": { + "glob-base": "^0.3.0", + "is-dotfile": "^1.0.0", + "is-extglob": "^1.0.0", + "is-glob": "^2.0.0" + } + }, + "parse-json": { + "version": "2.2.0", + "bundled": true, + "dev": true, + "requires": { + "error-ex": "^1.2.0" + } + }, + "path-exists": { + "version": "2.1.0", + "bundled": true, + "dev": true, + "requires": { + "pinkie-promise": "^2.0.0" + } + }, + "path-is-absolute": { + "version": "1.0.1", + "bundled": true, + "dev": true + }, + "path-key": { + "version": "2.0.1", + "bundled": true, + "dev": true + }, + "path-parse": { + "version": "1.0.5", + "bundled": true, + "dev": true + }, + "path-type": { + "version": "1.1.0", + "bundled": true, + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" + } + }, + "pify": { + "version": "2.3.0", + "bundled": true, + "dev": true + }, + "pinkie": { + "version": "2.0.4", + "bundled": true, + "dev": true + }, + "pinkie-promise": { + "version": "2.0.1", + "bundled": true, + "dev": true, + "requires": { + "pinkie": "^2.0.0" + } + }, + "pkg-dir": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "requires": { + "find-up": "^1.0.0" + }, + "dependencies": { + "find-up": { + "version": "1.1.2", + "bundled": true, + "dev": true, + "requires": { + "path-exists": "^2.0.0", + "pinkie-promise": "^2.0.0" + } + } + } + }, + "preserve": { + "version": "0.2.0", + "bundled": true, + "dev": true + }, + "pseudomap": { + "version": "1.0.2", + "bundled": true, + "dev": true + }, + "randomatic": { + "version": "1.1.7", + "bundled": true, + "dev": true, + "requires": { + "is-number": "^3.0.0", + "kind-of": "^4.0.0" + }, + "dependencies": { + "is-number": { + "version": "3.0.0", + "bundled": true, + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "bundled": true, + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "kind-of": { + "version": "4.0.0", + "bundled": true, + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "read-pkg": { + "version": "1.1.0", + "bundled": true, + "dev": true, + "requires": { + "load-json-file": "^1.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^1.0.0" + } + }, + "read-pkg-up": { + "version": "1.0.1", + "bundled": true, + "dev": true, + "requires": { + "find-up": "^1.0.0", + "read-pkg": "^1.0.0" + }, + "dependencies": { + "find-up": { + "version": "1.1.2", + "bundled": true, + "dev": true, + "requires": { + "path-exists": "^2.0.0", + "pinkie-promise": "^2.0.0" + } + } + } + }, + "regenerator-runtime": { + "version": "0.11.1", + "bundled": true, + "dev": true + }, + "regex-cache": { + "version": "0.4.4", + "bundled": true, + "dev": true, + "requires": { + "is-equal-shallow": "^0.1.3" + } + }, + "remove-trailing-separator": { + "version": "1.1.0", + "bundled": true, + "dev": true + }, + "repeat-element": { + "version": "1.1.2", + "bundled": true, + "dev": true + }, + "repeat-string": { + "version": "1.6.1", + "bundled": true, + "dev": true + }, + "repeating": { + "version": "2.0.1", + "bundled": true, + "dev": true, + "requires": { + "is-finite": "^1.0.0" + } + }, + "require-directory": { + "version": "2.1.1", + "bundled": true, + "dev": true + }, + "require-main-filename": { + "version": "1.0.1", + "bundled": true, + "dev": true + }, + "resolve-from": { + "version": "2.0.0", + "bundled": true, + "dev": true + }, + "right-align": { + "version": "0.1.3", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "align-text": "^0.1.1" + } + }, + "rimraf": { + "version": "2.6.2", + "bundled": true, + "dev": true, + "requires": { + "glob": "^7.0.5" + } + }, + "semver": { + "version": "5.5.0", + "bundled": true, + "dev": true + }, + "set-blocking": { + "version": "2.0.0", + "bundled": true, + "dev": true + }, + "shebang-command": { + "version": "1.2.0", + "bundled": true, + "dev": true, + "requires": { + "shebang-regex": "^1.0.0" + } + }, + "shebang-regex": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "signal-exit": { + "version": "3.0.2", + "bundled": true, + "dev": true + }, + "slide": { + "version": "1.1.6", + "bundled": true, + "dev": true + }, + "source-map": { + "version": "0.5.7", + "bundled": true, + "dev": true + }, + "spawn-wrap": { + "version": "1.4.2", + "bundled": true, + "dev": true, + "requires": { + "foreground-child": "^1.5.6", + "mkdirp": "^0.5.0", + "os-homedir": "^1.0.1", + "rimraf": "^2.6.2", + "signal-exit": "^3.0.2", + "which": "^1.3.0" + } + }, + "spdx-correct": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "requires": { + "spdx-license-ids": "^1.0.2" + } + }, + "spdx-expression-parse": { + "version": "1.0.4", + "bundled": true, + "dev": true + }, + "spdx-license-ids": { + "version": "1.2.2", + "bundled": true, + "dev": true + }, + "string-width": { + "version": "2.1.1", + "bundled": true, + "dev": true, + "requires": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "bundled": true, + "dev": true + }, + "strip-ansi": { + "version": "4.0.0", + "bundled": true, + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + } + } + }, + "strip-ansi": { + "version": "3.0.1", + "bundled": true, + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "strip-bom": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "requires": { + "is-utf8": "^0.2.0" + } + }, + "strip-eof": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "supports-color": { + "version": "2.0.0", + "bundled": true, + "dev": true + }, + "test-exclude": { + "version": "4.2.0", + "bundled": true, + "dev": true, + "requires": { + "arrify": "^1.0.1", + "micromatch": "^2.3.11", + "object-assign": "^4.1.0", + "read-pkg-up": "^1.0.1", + "require-main-filename": "^1.0.1" + } + }, + "to-fast-properties": { + "version": "1.0.3", + "bundled": true, + "dev": true + }, + "trim-right": { + "version": "1.0.1", + "bundled": true, + "dev": true + }, + "uglify-js": { + "version": "2.8.29", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "source-map": "~0.5.1", + "uglify-to-browserify": "~1.0.0", + "yargs": "~3.10.0" + }, + "dependencies": { + "yargs": { + "version": "3.10.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "camelcase": "^1.0.2", + "cliui": "^2.1.0", + "decamelize": "^1.0.0", + "window-size": "0.1.0" + } + } + } + }, + "uglify-to-browserify": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "validate-npm-package-license": { + "version": "3.0.1", + "bundled": true, + "dev": true, + "requires": { + "spdx-correct": "~1.0.0", + "spdx-expression-parse": "~1.0.0" + } + }, + "which": { + "version": "1.3.0", + "bundled": true, + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + }, + "which-module": { + "version": "2.0.0", + "bundled": true, + "dev": true + }, + "window-size": { + "version": "0.1.0", + "bundled": true, + "dev": true, + "optional": true + }, + "wordwrap": { + "version": "0.0.3", + "bundled": true, + "dev": true + }, + "wrap-ansi": { + "version": "2.1.0", + "bundled": true, + "dev": true, + "requires": { + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1" + }, + "dependencies": { + "is-fullwidth-code-point": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "string-width": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + } + } + }, + "wrappy": { + "version": "1.0.2", + "bundled": true, + "dev": true + }, + "write-file-atomic": { + "version": "1.3.4", + "bundled": true, + "dev": true, + "requires": { + "graceful-fs": "^4.1.11", + "imurmurhash": "^0.1.4", + "slide": "^1.1.5" + } + }, + "y18n": { + "version": "3.2.1", + "bundled": true, + "dev": true + }, + "yallist": { + "version": "2.1.2", + "bundled": true, + "dev": true + }, + "yargs": { + "version": "10.1.2", + "bundled": true, + "dev": true, + "requires": { + "cliui": "^4.0.0", + "decamelize": "^1.1.1", + "find-up": "^2.1.0", + "get-caller-file": "^1.0.1", + "os-locale": "^2.0.0", + "require-directory": "^2.1.1", + "require-main-filename": "^1.0.1", + "set-blocking": "^2.0.0", + "string-width": "^2.0.0", + "which-module": "^2.0.0", + "y18n": "^3.2.1", + "yargs-parser": "^8.1.0" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "bundled": true, + "dev": true + }, + "cliui": { + "version": "4.0.0", + "bundled": true, + "dev": true, + "requires": { + "string-width": "^2.1.1", + "strip-ansi": "^4.0.0", + "wrap-ansi": "^2.0.0" + } + }, + "strip-ansi": { + "version": "4.0.0", + "bundled": true, + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + } + } + }, + "yargs-parser": { + "version": "8.1.0", + "bundled": true, + "dev": true, + "requires": { + "camelcase": "^4.1.0" + }, + "dependencies": { + "camelcase": { + "version": "4.1.0", + "bundled": true, + "dev": true + } + } + } + } + }, + "oauth-sign": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==" + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" + }, + "object-component": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/object-component/-/object-component-0.0.3.tgz", + "integrity": "sha1-8MaapQ78lbhmwYb0AKM3acsvEpE=" + }, + "object-copy": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", + "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", + "requires": { + "copy-descriptor": "^0.1.0", + "define-property": "^0.2.5", + "kind-of": "^3.0.3" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "object-filter-sequence": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/object-filter-sequence/-/object-filter-sequence-1.0.0.tgz", + "integrity": "sha512-CsubGNxhIEChNY4cXYuA6KXafztzHqzLLZ/y3Kasf3A+sa3lL9thq3z+7o0pZqzEinjXT6lXDPAfVWI59dUyzQ==" + }, + "object-hash": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-0.3.0.tgz", + "integrity": "sha1-VIII5Ds2pE5NowutbFasU7iF50Q=" + }, + "object-identity-map": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/object-identity-map/-/object-identity-map-1.0.2.tgz", + "integrity": "sha512-a2XZDGyYTngvGS67kWnqVdpoaJWsY7C1GhPJvejWAFCsUioTAaiTu8oBad7c6cI4McZxr4CmvnZeycK05iav5A==", + "requires": { + "object.entries": "^1.1.0" + } + }, + "object-inspect": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.8.0.tgz", + "integrity": "sha512-jLdtEOB112fORuypAyl/50VRVIBIdVQOSUUGQHzJ4xBSbit81zRarz7GThkEFZy1RceYrWYcPcBFPQwHyAc1gA==" + }, + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" + }, + "object-visit": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", + "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", + "requires": { + "isobject": "^3.0.0" + } + }, + "object.assign": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", + "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", + "requires": { + "define-properties": "^1.1.2", + "function-bind": "^1.1.1", + "has-symbols": "^1.0.0", + "object-keys": "^1.0.11" + } + }, + "object.entries": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.2.tgz", + "integrity": "sha512-BQdB9qKmb/HyNdMNWVr7O3+z5MUIx3aiegEIJqjMBbBf0YT9RRxTJSim4mzFqtyr7PDAHigq0N9dO0m0tRakQA==", + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5", + "has": "^1.0.3" + } + }, + "object.pick": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", + "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", + "requires": { + "isobject": "^3.0.1" + } + }, + "on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "requires": { + "ee-first": "1.1.1" + } + }, + "on-headers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==" + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "requires": { + "wrappy": "1" + } + }, + "one-time": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/one-time/-/one-time-0.0.4.tgz", + "integrity": "sha1-+M33eISCb+Tf+T46nMN7HkSAdC4=" + }, + "opencollective-postinstall": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/opencollective-postinstall/-/opencollective-postinstall-2.0.3.tgz", + "integrity": "sha512-8AV/sCtuzUeTo8gQK5qDZzARrulB3egtLzFgteqB2tcT4Mw7B8Kt7JcDHmltjz6FOAHsvTevk70gZEbhM4ZS9Q==" + }, + "optional-js": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/optional-js/-/optional-js-2.3.0.tgz", + "integrity": "sha512-B0LLi+Vg+eko++0z/b8zIv57kp7HKEzaPJo7LowJXMUKYdf+3XJGu/cw03h/JhIOsLnP+cG5QnTHAuicjA5fMw==" + }, + "original-url": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/original-url/-/original-url-1.2.3.tgz", + "integrity": "sha512-BYm+pKYLtS4mVe/mgT3YKGtWV5HzN/XKiaIu1aK4rsxyjuHeTW9N+xVBEpJcY1onB3nccfH0RbzUEoimMqFUHQ==", + "requires": { + "forwarded-parse": "^2.1.0" + } + }, + "otp": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/otp/-/otp-0.1.3.tgz", + "integrity": "sha1-wle/JdL5Anr3esUiabPBQmjSvWs=", + "requires": { + "thirty-two": "^0.0.2" + } + }, + "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==" + }, + "packet-reader": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/packet-reader/-/packet-reader-0.3.1.tgz", + "integrity": "sha1-zWLmCvjX/qinBexP+ZCHHEaHHyc=" + }, + "parse-json": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.1.0.tgz", + "integrity": "sha512-+mi/lmVVNKFNVyLXV31ERiy2CY5E1/F6QtJFEzoChPRwwngMNXRDQ9GJ5WdE2Z2P4AujsOi0/+2qHID68KwfIQ==", + "requires": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + } + }, + "parseqs": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.5.tgz", + "integrity": "sha1-1SCKNzjkZ2bikbouoXNoSSGouJ0=", + "requires": { + "better-assert": "~1.0.0" + } + }, + "parseuri": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.5.tgz", + "integrity": "sha1-gCBKUNTbt3m/3G6+J3jZDkvOMgo=", + "requires": { + "better-assert": "~1.0.0" + } + }, + "parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" + }, + "pascalcase": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", + "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=" + }, + "path-dirname": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", + "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=" + }, + "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==" + }, + "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=" + }, + "path-loader": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/path-loader/-/path-loader-1.0.10.tgz", + "integrity": "sha512-CMP0v6S6z8PHeJ6NFVyVJm6WyJjIwFvyz2b0n2/4bKdS/0uZa/9sKUlYZzubrn3zuDRU0zIuEDX9DZYQ2ZI8TA==", + "requires": { + "native-promise-only": "^0.8.1", + "superagent": "^3.8.3" + }, + "dependencies": { + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "requires": { + "ms": "^2.1.1" + } + }, + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "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" + } + }, + "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==", + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "superagent": { + "version": "3.8.3", + "resolved": "https://registry.npmjs.org/superagent/-/superagent-3.8.3.tgz", + "integrity": "sha512-GLQtLMCoEIK4eDv6OGtkOoSMt3D+oq0y3dsxMuYuDvaNUvuT8eFBuLmfR0iYYzHC1e8hpzC6ZsxbuP6DIalMFA==", + "requires": { + "component-emitter": "^1.2.0", + "cookiejar": "^2.1.0", + "debug": "^3.1.0", + "extend": "^3.0.0", + "form-data": "^2.3.1", + "formidable": "^1.2.0", + "methods": "^1.1.1", + "mime": "^1.4.1", + "qs": "^6.5.1", + "readable-stream": "^2.3.5" + } + } + } + }, + "path-parse": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", + "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==" + }, + "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=" + }, + "pathval": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.0.tgz", + "integrity": "sha1-uULm1L3mUwBe9rcTYd74cn0GReA=" + }, + "pend": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", + "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=" + }, + "performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" + }, + "pg": { + "version": "6.4.2", + "resolved": "https://registry.npmjs.org/pg/-/pg-6.4.2.tgz", + "integrity": "sha1-w2QBEGDqx6UHoq4GPrhX7OkQ4n8=", + "requires": { + "buffer-writer": "1.0.1", + "js-string-escape": "1.0.1", + "packet-reader": "0.3.1", + "pg-connection-string": "0.1.3", + "pg-pool": "1.*", + "pg-types": "1.*", + "pgpass": "1.*", + "semver": "4.3.2" + }, + "dependencies": { + "semver": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-4.3.2.tgz", + "integrity": "sha1-x6BxWKgL7dBSNVt3DYLWZA+AO+c=" + } + } + }, + "pg-connection-string": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/pg-connection-string/-/pg-connection-string-0.1.3.tgz", + "integrity": "sha1-2hhHsglA5C7hSSvq9l1J2RskXfc=" + }, + "pg-hstore": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/pg-hstore/-/pg-hstore-2.3.2.tgz", + "integrity": "sha1-9+8FPnubiSrphq8vfL6GQy388k8=", + "requires": { + "underscore": "^1.7.0" + } + }, + "pg-int8": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/pg-int8/-/pg-int8-1.0.1.tgz", + "integrity": "sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==" + }, + "pg-pool": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/pg-pool/-/pg-pool-1.8.0.tgz", + "integrity": "sha1-9+xzgkw3oD8Hb1G/33DjQBR8Tzc=", + "requires": { + "generic-pool": "2.4.3", + "object-assign": "4.1.0" + }, + "dependencies": { + "object-assign": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.0.tgz", + "integrity": "sha1-ejs9DpgGPUP0wD8uiubNUahog6A=" + } + } + }, + "pg-types": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/pg-types/-/pg-types-1.13.0.tgz", + "integrity": "sha512-lfKli0Gkl/+za/+b6lzENajczwZHc7D5kiUCZfgm914jipD2kIOIvEkAhZ8GrW3/TUoP9w8FHjwpPObBye5KQQ==", + "requires": { + "pg-int8": "1.0.1", + "postgres-array": "~1.0.0", + "postgres-bytea": "~1.0.0", + "postgres-date": "~1.0.0", + "postgres-interval": "^1.1.0" + } + }, + "pgpass": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/pgpass/-/pgpass-1.0.2.tgz", + "integrity": "sha1-Knu0G2BltnkH6R2hsHwYR8h3swY=", + "requires": { + "split": "^1.0.0" + } + }, + "pidusage": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pidusage/-/pidusage-1.2.0.tgz", + "integrity": "sha512-OGo+iSOk44HRJ8q15AyG570UYxcm5u+R99DI8Khu8P3tKGkVu5EZX4ywHglWSTMNNXQ274oeGpYrvFEhDIFGPg==" + }, + "pipeworks": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/pipeworks/-/pipeworks-1.3.1.tgz", + "integrity": "sha1-+ENvhWXtHZe/OoBjKlOXv9NTOF8=" + }, + "platform": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/platform/-/platform-1.3.5.tgz", + "integrity": "sha512-TuvHS8AOIZNAlE77WUDiR4rySV/VMptyMfcfeoMgs4P8apaZM3JrnbzBiixKUv+XR6i+BXrQh8WAnjaSPFO65Q==" + }, + "pm2": { + "version": "2.10.1", + "resolved": "https://registry.npmjs.org/pm2/-/pm2-2.10.1.tgz", + "integrity": "sha512-l5U3Hh908TMw7qyOVAlCCoRlgonpnEw5pr2YnKT8+8fuay9tAysPTccU+SLPDjI6hQ9Q03p4lfNOtJUczzTrPA==", + "requires": { + "async": "^2.5", + "blessed": "^0.1.81", + "chalk": "^1.1", + "chokidar": "^2", + "cli-table-redemption": "^1.0.0", + "commander": "2.13.0", + "cron": "^1.3", + "debug": "^3.0", + "eventemitter2": "1.0.5", + "fclone": "1.0.11", + "gkt": "https://tgz.pm2.io/gkt-1.0.0.tgz", + "mkdirp": "0.5.1", + "moment": "^2.19", + "needle": "^2.1.0", + "nssocket": "0.6.0", + "pidusage": "^1.2.0", + "pm2-axon": "3.1.0", + "pm2-axon-rpc": "0.5.0", + "pm2-deploy": "^0.3.9", + "pm2-multimeter": "^0.1.2", + "pmx": "^1.6", + "promptly": "2.2.0", + "semver": "^5.3", + "shelljs": "0.7.8", + "source-map-support": "^0.5", + "sprintf-js": "1.1.1", + "v8-compile-cache": "^1.1.0", + "vizion": "^0.2", + "yamljs": "^0.3.0" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=" + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + } + }, + "commander": { + "version": "2.13.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.13.0.tgz", + "integrity": "sha512-MVuS359B+YzaWqjCL/c+22gfryv+mCBPHAv3zyVI2GN8EY6IRP8VwtasXn8jyyhvvq84R4ImN1OKRtcbIasjYA==" + }, + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "requires": { + "ms": "^2.1.1" + } + }, + "minimist": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" + }, + "mkdirp": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "requires": { + "minimist": "0.0.8" + } + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + }, + "sprintf-js": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.1.tgz", + "integrity": "sha1-Nr54Mgr+WAH2zqPueLblqrlA6gw=" + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" + } + } + }, + "pm2-axon": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/pm2-axon/-/pm2-axon-3.1.0.tgz", + "integrity": "sha512-5sBM+vHw0Cp2K9CJ9ZOYhKtNCCcgQ0eKOyFrSo5Jusbq9FfvuelsMG4WDaxkqosaQbf8N5YfyHhD7eOUcnm5rQ==", + "requires": { + "amp": "~0.3.1", + "amp-message": "~0.1.1", + "debug": "^3.0", + "escape-regexp": "0.0.1" + }, + "dependencies": { + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "requires": { + "ms": "^2.1.1" + } + } + } + }, + "pm2-axon-rpc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/pm2-axon-rpc/-/pm2-axon-rpc-0.5.0.tgz", + "integrity": "sha512-jKiAlnIitx+TtJ1++jThmN49gM0Dte4gm27Kqu2xAUQn33Rh9+5lOOqShS5Xbp0RPZL42hKNEgaVVOSqm3sJCg==", + "requires": { + "debug": "^3.0", + "fclone": "^1" + }, + "dependencies": { + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "requires": { + "ms": "^2.1.1" + } + } + } + }, + "pm2-deploy": { + "version": "0.3.10", + "resolved": "https://registry.npmjs.org/pm2-deploy/-/pm2-deploy-0.3.10.tgz", + "integrity": "sha512-WagPKsX+LDCe8wLCL5nzu8RQvVUQ5GlFdJRVYCL0ogFnHfYRym91qNU4PkNSWSq11pdvG8la7DTjdW6FWXc8lw==", + "requires": { + "async": "^2.6", + "tv4": "^1.3" + } + }, + "pm2-multimeter": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/pm2-multimeter/-/pm2-multimeter-0.1.2.tgz", + "integrity": "sha1-Gh5VFT1BoFU0zqI8/oYKuqDrSs4=", + "requires": { + "charm": "~0.1.1" + } + }, + "pmx": { + "version": "1.6.4", + "resolved": "https://registry.npmjs.org/pmx/-/pmx-1.6.4.tgz", + "integrity": "sha512-uk6REZHe8j3RhGlFUfyVwFrE6JFhZigTpMFs/4iYO4MzCqVTpNp1cED032oCc4R+m32wUITV/2RDmPX21T1LLg==", + "requires": { + "debug": "^3", + "deep-metrics": "^0.0.1", + "json-stringify-safe": "^5.0", + "semver": "5.*", + "vxx": "^1.2.0" + }, + "dependencies": { + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "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==" + } + } + }, + "posix-character-classes": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", + "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=" + }, + "postgres-array": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/postgres-array/-/postgres-array-1.0.3.tgz", + "integrity": "sha512-5wClXrAP0+78mcsNX3/ithQ5exKvCyK5lr5NEEEeGwwM6NJdQgzIJBVxLvRW+huFpX92F2QnZ5CcokH0VhK2qQ==" + }, + "postgres-bytea": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/postgres-bytea/-/postgres-bytea-1.0.0.tgz", + "integrity": "sha1-AntTPAqokOJtFy1Hz5zOzFIazTU=" + }, + "postgres-date": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/postgres-date/-/postgres-date-1.0.7.tgz", + "integrity": "sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q==" + }, + "postgres-interval": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/postgres-interval/-/postgres-interval-1.2.0.tgz", + "integrity": "sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ==", + "requires": { + "xtend": "^4.0.0" + } + }, + "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==" + }, + "promptly": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/promptly/-/promptly-2.2.0.tgz", + "integrity": "sha1-KhP6BjaIoqWYOxYf/wEIoH0m/HQ=", + "requires": { + "read": "^1.0.4" + } + }, + "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" + } + }, + "pseudomap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", + "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=" + }, + "psl": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", + "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==" + }, + "pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "punycode": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", + "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=" + }, + "qs": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.1.tgz", + "integrity": "sha512-eRzhrN1WSINYCDCbrz796z37LOe3m5tmW7RQf6oBntukAG1nmovJvhnwHHRMAfeoItc1m2Hk02WER2aQ/iqs+A==" + }, + "querystring": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", + "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=" + }, + "random-poly-fill": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/random-poly-fill/-/random-poly-fill-1.0.1.tgz", + "integrity": "sha512-bMOL0hLfrNs52+EHtIPIXxn2PxYwXb0qjnKruTjXiM/sKfYqj506aB2plFwWW1HN+ri724bAVVGparh4AtlJKw==" + }, + "random-string": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/random-string/-/random-string-0.2.0.tgz", + "integrity": "sha1-pG5DdTUr7amg17DRntbTIezR2C0=" + }, + "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.3.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.2.tgz", + "integrity": "sha1-vNYMd9Prk83gBQKVw/N5OJvIj4k=", + "requires": { + "bytes": "3.0.0", + "http-errors": "1.6.2", + "iconv-lite": "0.4.19", + "unpipe": "1.0.0" + }, + "dependencies": { + "depd": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.1.tgz", + "integrity": "sha1-V4O04cRZ8G+lyif5kfPQbnoxA1k=" + }, + "http-errors": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.2.tgz", + "integrity": "sha1-CgAsyFcHGSp+eUbO7cERVfYOxzY=", + "requires": { + "depd": "1.1.1", + "inherits": "2.0.3", + "setprototypeof": "1.0.3", + "statuses": ">= 1.3.1 < 2" + } + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + }, + "setprototypeof": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.0.3.tgz", + "integrity": "sha1-ZlZ+NwQ+608E2RvWWMDL77VbjgQ=" + } + } + }, + "read": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/read/-/read-1.0.7.tgz", + "integrity": "sha1-s9oZvQUkMal2cdRKQmNK33ELQMQ=", + "requires": { + "mute-stream": "~0.0.4" + } + }, + "read-pkg": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", + "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", + "requires": { + "@types/normalize-package-data": "^2.4.0", + "normalize-package-data": "^2.5.0", + "parse-json": "^5.0.0", + "type-fest": "^0.6.0" + }, + "dependencies": { + "type-fest": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", + "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==" + } + } + }, + "read-pkg-up": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", + "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", + "requires": { + "find-up": "^4.1.0", + "read-pkg": "^5.2.0", + "type-fest": "^0.8.1" + } + }, + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "readdirp": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", + "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", + "requires": { + "graceful-fs": "^4.1.11", + "micromatch": "^3.1.10", + "readable-stream": "^2.0.2" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "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" + } + }, + "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==", + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "rechoir": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", + "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", + "requires": { + "resolve": "^1.1.6" + } + }, + "redact-secrets": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/redact-secrets/-/redact-secrets-1.0.0.tgz", + "integrity": "sha1-YPHbVpJP6QogO6jMs5KDzbsNkHw=", + "requires": { + "is-secret": "^1.0.0", + "traverse": "^0.6.6" + } + }, + "redis": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/redis/-/redis-2.8.0.tgz", + "integrity": "sha512-M1OkonEQwtRmZv4tEWF2VgpG0JWJ8Fv1PhlgT5+B+uNq2cA3Rt1Yt/ryoR+vQNOQcIEgdCdfH0jr3bDpihAw1A==", + "requires": { + "double-ended-queue": "^2.1.0-0", + "redis-commands": "^1.2.0", + "redis-parser": "^2.6.0" + } + }, + "redis-commands": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/redis-commands/-/redis-commands-1.6.0.tgz", + "integrity": "sha512-2jnZ0IkjZxvguITjFTrGiLyzQZcTvaw8DAaCXxZq/dsHXz7KfMQ3OUJy7Tz9vnRtZRVz6VRCPDvruvU8Ts44wQ==" + }, + "redis-parser": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/redis-parser/-/redis-parser-2.6.0.tgz", + "integrity": "sha1-Uu0J2srBCPGmMcB+m2mUHnoZUEs=" + }, + "reduce-component": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/reduce-component/-/reduce-component-1.0.1.tgz", + "integrity": "sha1-4Mk1QsV0UhvqE98PlIjtgqt3xdo=" + }, + "redux": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/redux/-/redux-4.0.1.tgz", + "integrity": "sha512-R7bAtSkk7nY6O/OYMVR9RiBI+XghjF9rlbl5806HJbQph0LJVHZrU5oaO4q70eUKiqMRqm4y07KLTlMZ2BlVmg==", + "requires": { + "loose-envify": "^1.4.0", + "symbol-observable": "^1.2.0" + } + }, + "referrer-policy": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/referrer-policy/-/referrer-policy-1.1.0.tgz", + "integrity": "sha1-NXdOtzW/UPtsB46DM0tHI1AgfXk=" + }, + "regex-not": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", + "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", + "requires": { + "extend-shallow": "^3.0.2", + "safe-regex": "^1.1.0" + } + }, + "relative-microtime": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/relative-microtime/-/relative-microtime-2.0.0.tgz", + "integrity": "sha512-l18ha6HEZc+No/uK4GyAnNxgKW7nvEe35IaeN54sShMojtqik2a6GbTyuiezkjpPaqP874Z3lW5ysBo5irz4NA==" + }, + "remove-trailing-separator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", + "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=" + }, + "repeat-element": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", + "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==" + }, + "repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=" + }, + "request": { + "version": "2.83.0", + "resolved": "https://registry.npmjs.org/request/-/request-2.83.0.tgz", + "integrity": "sha512-lR3gD69osqm6EYLk9wB/G1W/laGWjzH90t1vEa2xuxHD5KUrSzp9pUSfTm+YC5Nxt2T8nMPEvKlhbQayU7bgFw==", + "requires": { + "aws-sign2": "~0.7.0", + "aws4": "^1.6.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.5", + "extend": "~3.0.1", + "forever-agent": "~0.6.1", + "form-data": "~2.3.1", + "har-validator": "~5.0.3", + "hawk": "~6.0.2", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.17", + "oauth-sign": "~0.8.2", + "performance-now": "^2.1.0", + "qs": "~6.5.1", + "safe-buffer": "^5.1.1", + "stringstream": "~0.0.5", + "tough-cookie": "~2.3.3", + "tunnel-agent": "^0.6.0", + "uuid": "^3.1.0" + }, + "dependencies": { + "ajv": { + "version": "5.5.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", + "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", + "requires": { + "co": "^4.6.0", + "fast-deep-equal": "^1.0.0", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.3.0" + } + }, + "fast-deep-equal": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz", + "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=" + }, + "har-validator": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.0.3.tgz", + "integrity": "sha1-ukAsJmGU8VlW7xXg/PJCmT9qff0=", + "requires": { + "ajv": "^5.1.0", + "har-schema": "^2.0.0" + } + }, + "json-schema-traverse": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", + "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=" + }, + "oauth-sign": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz", + "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=" + }, + "punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" + }, + "tough-cookie": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.4.tgz", + "integrity": "sha512-TZ6TTfI5NtZnuyy/Kecv+CnoROnyXn2DN97LontgQpCwsX2XyLYCC0ENhYkehSOwAp8rTQKc/NUIF7BkQ5rKLA==", + "requires": { + "punycode": "^1.4.1" + } + } + } + }, + "request-promise": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/request-promise/-/request-promise-4.2.2.tgz", + "integrity": "sha1-0epG1lSm7k+O5qT+oQGMIpEZBLQ=", + "requires": { + "bluebird": "^3.5.0", + "request-promise-core": "1.1.1", + "stealthy-require": "^1.1.0", + "tough-cookie": ">=2.3.3" + } + }, + "request-promise-core": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.1.tgz", + "integrity": "sha1-Pu4AssWqgyOc+wTFcA2jb4HNCLY=", + "requires": { + "lodash": "^4.13.1" + } + }, + "require-ancestors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/require-ancestors/-/require-ancestors-1.0.0.tgz", + "integrity": "sha512-Nqeo9Gfp0KvnxTixnxLGEbThMAi+YYgnwRoigtOs1Oo3eGBYfqCd3dagq1vBCVVuc1EnIt3Eu1eGemwOOEZozw==" + }, + "require-in-the-middle": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/require-in-the-middle/-/require-in-the-middle-5.0.3.tgz", + "integrity": "sha512-p/ICV8uMlqC4tjOYabLMxAWCIKa0YUQgZZ6KDM0xgXJNgdGQ1WmL2A07TwmrZw+wi6ITUFKzH5v3n+ENEyXVkA==", + "requires": { + "debug": "^4.1.1", + "module-details-from-path": "^1.0.3", + "resolve": "^1.12.0" + } + }, + "resolve": { + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz", + "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==", + "requires": { + "path-parse": "^1.0.6" + } + }, + "resolve-url": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", + "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=" + }, + "ret": { + "version": "0.1.15", + "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", + "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==" + }, + "retry-as-promised": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/retry-as-promised/-/retry-as-promised-2.3.2.tgz", + "integrity": "sha1-zZdO5P2bX+A8vzGHHuSCIcB3N7c=", + "requires": { + "bluebird": "^3.4.6", + "debug": "^2.6.9" + }, + "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=" + } + } + }, + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "requires": { + "glob": "^7.1.3" + } + }, + "rttc": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/rttc/-/rttc-7.4.0.tgz", + "integrity": "sha1-vJys1Grdkj3rYklaAZNOt+9hn7Q=", + "requires": { + "lodash": "^3.8.0" + }, + "dependencies": { + "lodash": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz", + "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=" + } + } + }, + "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==" + }, + "safe-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", + "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", + "requires": { + "ret": "~0.1.10" + } + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "sax": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.1.tgz", + "integrity": "sha1-e45lYZCyKOgaZq6nSEgNgozS03o=" + }, + "seed-random": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/seed-random/-/seed-random-2.2.0.tgz", + "integrity": "sha1-KpsZ4lCoFwmSMaW5mk2vgLf77VQ=" + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + }, + "send": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/send/-/send-0.16.1.tgz", + "integrity": "sha512-ElCLJdJIKPk6ux/Hocwhk7NFHpI3pVm/IZOYWqUmoxcgeyM+MpxHHKhb8QmlJDX1pU6WrgaHBkVNm73Sv7uc2A==", + "requires": { + "debug": "2.6.9", + "depd": "~1.1.1", + "destroy": "~1.0.4", + "encodeurl": "~1.0.1", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "~1.6.2", + "mime": "1.4.1", + "ms": "2.0.0", + "on-finished": "~2.3.0", + "range-parser": "~1.2.0", + "statuses": "~1.3.1" + }, + "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=" + } + } + }, + "sequelize": { + "version": "4.37.7", + "resolved": "https://registry.npmjs.org/sequelize/-/sequelize-4.37.7.tgz", + "integrity": "sha512-1/M1Aua2GgejZbUI3T90G3uXXjcM4gTfFC36jGsepaJh3cRK9plPmlZeKkAQWWn4bCJaJozeEtuxfyPfQUY9wg==", + "requires": { + "bluebird": "^3.5.0", + "cls-bluebird": "^2.1.0", + "debug": "^3.1.0", + "depd": "^1.1.0", + "dottie": "^2.0.0", + "generic-pool": "^3.4.0", + "inflection": "1.12.0", + "lodash": "^4.17.1", + "moment": "^2.20.0", + "moment-timezone": "^0.5.14", + "retry-as-promised": "^2.3.2", + "semver": "^5.5.0", + "terraformer-wkt-parser": "^1.1.2", + "toposort-class": "^1.0.1", + "uuid": "^3.2.1", + "validator": "^9.4.1", + "wkx": "^0.4.1" + }, + "dependencies": { + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "requires": { + "ms": "^2.1.1" + } + }, + "generic-pool": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/generic-pool/-/generic-pool-3.7.1.tgz", + "integrity": "sha512-ug6DAZoNgWm6q5KhPFA+hzXfBLFQu5sTXxPpv44DmE0A2g+CiHoq9LTVdkXpZMkYVMoGw83F6W+WT0h0MFMK/w==" + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + } + } + }, + "serve-static": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.1.tgz", + "integrity": "sha512-hSMUZrsPa/I09VYFJwa627JJkNs0NrfL1Uzuup+GqHfToR2KcsXFymXSV90hoyw3M+msjFuQly+YzIH/q0MGlQ==", + "requires": { + "encodeurl": "~1.0.1", + "escape-html": "~1.0.3", + "parseurl": "~1.3.2", + "send": "0.16.1" + } + }, + "set-cookie-serde": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/set-cookie-serde/-/set-cookie-serde-1.0.0.tgz", + "integrity": "sha512-Vq8e5GsupfJ7okHIvEPcfs5neCo7MZ1ZuWrO3sllYi3DOWt6bSSCpADzqXjz3k0fXehnoFIrmmhty9IN6U6BXQ==" + }, + "set-value": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", + "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", + "requires": { + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.3", + "split-string": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "setprototypeof": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==" + }, + "shallow-clone-shim": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shallow-clone-shim/-/shallow-clone-shim-2.0.0.tgz", + "integrity": "sha512-YRNymdiL3KGOoS67d73TEmk4tdPTO9GSMCoiphQsTcC9EtC+AOmMPjkyBkRoCJfW9ASsaZw1craaiw1dPN2D3Q==" + }, + "shelljs": { + "version": "0.7.8", + "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.7.8.tgz", + "integrity": "sha1-3svPh0sNHl+3LhSxZKloMEjprLM=", + "requires": { + "glob": "^7.0.0", + "interpret": "^1.0.0", + "rechoir": "^0.6.2" + } + }, + "shimmer": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/shimmer/-/shimmer-1.2.1.tgz", + "integrity": "sha512-sQTKC1Re/rM6XyFM6fIAGHRPVGvyXfgzIDvzoq608vM+jeyVD0Tu1E6Np0Kc2zAIFWIj963V2800iF/9LPieQw==" + }, + "should": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/should/-/should-7.1.0.tgz", + "integrity": "sha1-WUGumqZnW+JAZ9QywCryEMzZx3I=", + "dev": true, + "requires": { + "should-equal": "0.5.0", + "should-format": "0.3.0", + "should-type": "0.2.0" + } + }, + "should-equal": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/should-equal/-/should-equal-0.5.0.tgz", + "integrity": "sha1-x5fxNfMGf+tp6+zbMGscP+IbPm8=", + "dev": true, + "requires": { + "should-type": "0.2.0" + } + }, + "should-format": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/should-format/-/should-format-0.3.0.tgz", + "integrity": "sha1-QgB+wKochupEkUzJER8bnyfTzqw=", + "dev": true, + "requires": { + "should-type": "0.2.0" + } + }, + "should-type": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/should-type/-/should-type-0.2.0.tgz", + "integrity": "sha1-ZwfvlVKdmJ3MCY/gdTqx+RNrt/Y=", + "dev": true + }, + "simple-swizzle": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", + "integrity": "sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=", + "requires": { + "is-arrayish": "^0.3.1" + }, + "dependencies": { + "is-arrayish": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", + "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==" + } + } + }, + "slash": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", + "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=" + }, + "snapdragon": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", + "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", + "requires": { + "base": "^0.11.1", + "debug": "^2.2.0", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "map-cache": "^0.2.2", + "source-map": "^0.5.6", + "source-map-resolve": "^0.5.0", + "use": "^3.1.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" + } + }, + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } + } + }, + "snapdragon-node": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", + "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", + "requires": { + "define-property": "^1.0.0", + "isobject": "^3.0.0", + "snapdragon-util": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "snapdragon-util": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", + "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", + "requires": { + "kind-of": "^3.2.0" + }, + "dependencies": { + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "sntp": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/sntp/-/sntp-2.1.0.tgz", + "integrity": "sha512-FL1b58BDrqS3A11lJ0zEdnJ3UOKqVxawAkF3k7F0CVN7VQ34aZrV+G8BZ1WC9ZL7NyrwsW0oviwsWDgRuVYtJg==", + "requires": { + "hoek": "4.x.x" + } + }, + "socket-location": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/socket-location/-/socket-location-1.0.0.tgz", + "integrity": "sha512-TwxpRM0pPE/3b24XQGLx8zq2J8kOwTy40FtiNC1KrWvl/Tsf7RYXruE9icecMhQwicXMo/HUJlGap8DNt2cgYw==", + "requires": { + "await-event": "^2.1.0" + } + }, + "socket.io": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-2.0.4.tgz", + "integrity": "sha1-waRZDO/4fs8TxyZS8Eb3FrKeYBQ=", + "requires": { + "debug": "~2.6.6", + "engine.io": "~3.1.0", + "socket.io-adapter": "~1.1.0", + "socket.io-client": "2.0.4", + "socket.io-parser": "~3.1.1" + }, + "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" + } + }, + "engine.io-client": { + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-3.1.6.tgz", + "integrity": "sha512-hnuHsFluXnsKOndS4Hv6SvUrgdYx1pk2NqfaDMW+GWdgfU3+/V25Cj7I8a0x92idSpa5PIhJRKxPvp9mnoLsfg==", + "requires": { + "component-emitter": "1.2.1", + "component-inherit": "0.0.3", + "debug": "~3.1.0", + "engine.io-parser": "~2.1.1", + "has-cors": "1.1.0", + "indexof": "0.0.1", + "parseqs": "0.0.5", + "parseuri": "0.0.5", + "ws": "~3.3.1", + "xmlhttprequest-ssl": "~1.5.4", + "yeast": "0.1.2" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "requires": { + "ms": "2.0.0" + } + } + } + }, + "isarray": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", + "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=" + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "socket.io-client": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-2.0.4.tgz", + "integrity": "sha1-CRilUkBtxeVAs4Dc2Xr8SmQzL44=", + "requires": { + "backo2": "1.0.2", + "base64-arraybuffer": "0.1.5", + "component-bind": "1.0.0", + "component-emitter": "1.2.1", + "debug": "~2.6.4", + "engine.io-client": "~3.1.0", + "has-cors": "1.1.0", + "indexof": "0.0.1", + "object-component": "0.0.3", + "parseqs": "0.0.5", + "parseuri": "0.0.5", + "socket.io-parser": "~3.1.1", + "to-array": "0.1.4" + } + }, + "socket.io-parser": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.1.3.tgz", + "integrity": "sha512-g0a2HPqLguqAczs3dMECuA1RgoGFPyvDqcbaDEdCWY9g59kdUAz3YRmaJBNKXflrHNwB7Q12Gkf/0CZXfdHR7g==", + "requires": { + "component-emitter": "1.2.1", + "debug": "~3.1.0", + "has-binary2": "~1.0.2", + "isarray": "2.0.1" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "requires": { + "ms": "2.0.0" + } + } + } + }, + "ws": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-3.3.3.tgz", + "integrity": "sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA==", + "requires": { + "async-limiter": "~1.0.0", + "safe-buffer": "~5.1.0", + "ultron": "~1.1.0" + } + } + } + }, + "socket.io-adapter": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-1.1.2.tgz", + "integrity": "sha512-WzZRUj1kUjrTIrUKpZLEzFZ1OLj5FwLlAFQs9kuZJzJi5DKdU7FsWc36SNmA8iDOtwBQyT8FkrriRM8vXLYz8g==" + }, + "socket.io-client": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-2.2.0.tgz", + "integrity": "sha512-56ZrkTDbdTLmBIyfFYesgOxsjcLnwAKoN4CiPyTVkMQj3zTUh0QAx3GbvIvLpFEOvQWu92yyWICxB0u7wkVbYA==", + "requires": { + "backo2": "1.0.2", + "base64-arraybuffer": "0.1.5", + "component-bind": "1.0.0", + "component-emitter": "1.2.1", + "debug": "~3.1.0", + "engine.io-client": "~3.3.1", + "has-binary2": "~1.0.2", + "has-cors": "1.1.0", + "indexof": "0.0.1", + "object-component": "0.0.3", + "parseqs": "0.0.5", + "parseuri": "0.0.5", + "socket.io-parser": "~3.3.0", + "to-array": "0.1.4" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } + } + }, + "socket.io-emitter": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/socket.io-emitter/-/socket.io-emitter-3.1.1.tgz", + "integrity": "sha1-sF+CAG5pvD63QoeUysO7zUuqDMc=", + "requires": { + "debug": "~3.1.0", + "notepack.io": "~2.1.0", + "redis": "2.6.3", + "socket.io-parser": "3.1.2" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "requires": { + "ms": "2.0.0" + } + }, + "isarray": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", + "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=" + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "redis": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/redis/-/redis-2.6.3.tgz", + "integrity": "sha1-hDBbklU8ah8Jx8R8MLEazn27etQ=", + "requires": { + "double-ended-queue": "^2.1.0-0", + "redis-commands": "^1.2.0", + "redis-parser": "^2.0.0" + } + }, + "socket.io-parser": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.1.2.tgz", + "integrity": "sha1-28IoIVH8T6675Aru3Ady66YZ9/I=", + "requires": { + "component-emitter": "1.2.1", + "debug": "~2.6.4", + "has-binary2": "~1.0.2", + "isarray": "2.0.1" + }, + "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" + } + } + } + } + } + }, + "socket.io-parser": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.3.0.tgz", + "integrity": "sha512-hczmV6bDgdaEbVqhAeVMM/jfUfzuEZHsQg6eOmLgJht6G3mPKMxYm75w2+qhAQZ+4X+1+ATZ+QFKeOZD5riHng==", + "requires": { + "component-emitter": "1.2.1", + "debug": "~3.1.0", + "isarray": "2.0.1" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "requires": { + "ms": "2.0.0" + } + }, + "isarray": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", + "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=" + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } + } + }, + "socket.io-redis": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/socket.io-redis/-/socket.io-redis-5.2.0.tgz", + "integrity": "sha1-j+KtlEX8UIhvtwq8dZ1nQD1Ymd8=", + "requires": { + "debug": "~2.6.8", + "notepack.io": "~2.1.2", + "redis": "~2.8.0", + "socket.io-adapter": "~1.1.0", + "uid2": "0.0.3" + }, + "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=" + } + } + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" + }, + "source-map-resolve": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", + "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", + "requires": { + "atob": "^2.1.2", + "decode-uri-component": "^0.2.0", + "resolve-url": "^0.2.1", + "source-map-url": "^0.4.0", + "urix": "^0.1.0" + } + }, + "source-map-support": { + "version": "0.5.19", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", + "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + } + } + }, + "source-map-url": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", + "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=" + }, + "spark-md5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/spark-md5/-/spark-md5-1.0.1.tgz", + "integrity": "sha1-xLmo1Bz3sIRUI6ghgk+N/6D1G3w=" + }, + "spdx-correct": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", + "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", + "requires": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-exceptions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", + "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==" + }, + "spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "requires": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-license-ids": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz", + "integrity": "sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q==" + }, + "split": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/split/-/split-1.0.1.tgz", + "integrity": "sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==", + "requires": { + "through": "2" + } + }, + "split-string": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", + "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", + "requires": { + "extend-shallow": "^3.0.0" + } + }, + "sprintf-js": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.2.tgz", + "integrity": "sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug==" + }, + "sql-summary": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/sql-summary/-/sql-summary-1.0.1.tgz", + "integrity": "sha512-IpCr2tpnNkP3Jera4ncexsZUp0enJBLr+pHCyTweMUBrbJsTgQeLWx1FXLhoBj/MvcnUQpkgOn2EY8FKOkUzww==" + }, + "sshpk": { + "version": "1.16.1", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", + "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", + "requires": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + }, + "dependencies": { + "jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=" + } + } + }, + "stack-trace": { + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", + "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=" + }, + "stackframe": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.2.0.tgz", + "integrity": "sha512-GrdeshiRmS1YLMYgzF16olf2jJ/IzxXY9lhKOskuVziubpTYcYqyOwYeJKzQkwy7uN0fYSsbsC4RQaXf9LCrYA==" + }, + "stackman": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/stackman/-/stackman-4.0.1.tgz", + "integrity": "sha512-lntIge3BFEElgvpZT2ld5f4U+mF84fRtJ8vA3ymUVx1euVx43ZMkd09+5RWW4FmvYDFhZwPh1gvtdsdnJyF4Fg==", + "requires": { + "after-all-results": "^2.0.0", + "async-cache": "^1.1.0", + "debug": "^4.1.1", + "error-callsites": "^2.0.3", + "load-source-map": "^1.0.0" + } + }, + "static-extend": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", + "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", + "requires": { + "define-property": "^0.2.5", + "object-copy": "^0.1.0" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "requires": { + "is-descriptor": "^0.1.0" + } + } + } + }, + "statuses": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz", + "integrity": "sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4=" + }, + "stealthy-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz", + "integrity": "sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks=" + }, + "stream-chopper": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/stream-chopper/-/stream-chopper-3.0.1.tgz", + "integrity": "sha512-f7h+ly8baAE26iIjcp3VbnBkbIRGtrvV0X0xxFM/d7fwLTYnLzDPTXRKNxa2HZzohOrc96NTrR+FaV3mzOelNA==", + "requires": { + "readable-stream": "^3.0.6" + } + }, + "streamsearch": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-0.1.2.tgz", + "integrity": "sha1-gIudDlb8Jz2Am6VzOOkpkZoanxo=" + }, + "string": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/string/-/string-3.3.3.tgz", + "integrity": "sha1-XqIRzZLSKOGEKUmQpsyXs2anfLA=" + }, + "string.prototype.trimend": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.1.tgz", + "integrity": "sha512-LRPxFUaTtpqYsTeNKaFOw3R4bxIzWOnbQ837QfBylo8jIxtcbK/A/sMV7Q+OAV/vWo+7s25pOE10KYSjaSO06g==", + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5" + } + }, + "string.prototype.trimstart": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.1.tgz", + "integrity": "sha512-XxZn+QpvrBI1FOcg6dIpxUPgWCPuNXvMD72aaRaUQv1eD4e/Qy8i/hFTe0BUmD60p/QA6bh1avmuPTfNjqVWRw==", + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5" + } + }, + "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==", + "requires": { + "safe-buffer": "~5.2.0" + }, + "dependencies": { + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" + } + } + }, + "stringstream": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.6.tgz", + "integrity": "sha512-87GEBAkegbBcweToUrdzf3eLhWNg06FJTebl4BVJz/JgWy8CvEr9dRtX5qWphiynMSQlxxi+QqN0z5T32SLlhA==" + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "superagent": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/superagent/-/superagent-1.8.5.tgz", + "integrity": "sha1-HA3cOvMOgOuE68BcshItqP6UC1U=", + "requires": { + "component-emitter": "~1.2.0", + "cookiejar": "2.0.6", + "debug": "2", + "extend": "3.0.0", + "form-data": "1.0.0-rc3", + "formidable": "~1.0.14", + "methods": "~1.1.1", + "mime": "1.3.4", + "qs": "2.3.3", + "readable-stream": "1.0.27-1", + "reduce-component": "1.0.1" + }, + "dependencies": { + "async": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", + "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=" + }, + "cookiejar": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.0.6.tgz", + "integrity": "sha1-Cr81atANHFohnYjURRgEbdAmrP4=" + }, + "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" + } + }, + "extend": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.0.tgz", + "integrity": "sha1-WkdDU7nzNT3dgXbf03uRyDpG8dQ=" + }, + "form-data": { + "version": "1.0.0-rc3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-1.0.0-rc3.tgz", + "integrity": "sha1-01vGLn+8KTeuePlIqqDTjZBgdXc=", + "requires": { + "async": "^1.4.0", + "combined-stream": "^1.0.5", + "mime-types": "^2.1.3" + } + }, + "formidable": { + "version": "1.0.16", + "resolved": "https://registry.npmjs.org/formidable/-/formidable-1.0.16.tgz", + "integrity": "sha1-SRbP38TL7QILJXpqlQWpqzjCzQ4=" + }, + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" + }, + "mime": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.3.4.tgz", + "integrity": "sha1-EV+eO2s9rylZmDyzjxSaLUDrXVM=" + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "qs": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/qs/-/qs-2.3.3.tgz", + "integrity": "sha1-6eha2+ddoLvkyOBHaghikPhjtAQ=" + }, + "readable-stream": { + "version": "1.0.27-1", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.27-1.tgz", + "integrity": "sha1-a2eYPCA1fO/QfwFlABoW1xDZEHg=", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" + } + } + }, + "supertest": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supertest/-/supertest-1.0.0.tgz", + "integrity": "sha1-0QxZv0uab43x6jAOAiIfHWrgke0=", + "dev": true, + "requires": { + "methods": "1.x", + "superagent": "~1.2.0" + }, + "dependencies": { + "async": { + "version": "0.9.2", + "resolved": "https://registry.npmjs.org/async/-/async-0.9.2.tgz", + "integrity": "sha1-rqdNXmHB+JlhO/ZL2mbUx48v0X0=", + "dev": true + }, + "combined-stream": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-0.0.7.tgz", + "integrity": "sha1-ATfmV7qlp1QcV6w3rF/AfXO03B8=", + "dev": true, + "requires": { + "delayed-stream": "0.0.5" + } + }, + "component-emitter": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.1.2.tgz", + "integrity": "sha1-KWWU8nU9qmOZbSrwjRWpURbJrsM=", + "dev": true + }, + "cookiejar": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.0.1.tgz", + "integrity": "sha1-PRJ1L2rfaKiS8zJDNJK9WBK7Zo8=", + "dev": true + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "delayed-stream": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-0.0.5.tgz", + "integrity": "sha1-1LH0OpPoKW3+AmlPRoC8N6MTxz8=", + "dev": true + }, + "extend": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/extend/-/extend-1.2.1.tgz", + "integrity": "sha1-oPX9bPyDpf5J72mNYOyKYk3UV2w=", + "dev": true + }, + "form-data": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-0.2.0.tgz", + "integrity": "sha1-Jvi8JtpkQOKZy9z7aQNcT3em5GY=", + "dev": true, + "requires": { + "async": "~0.9.0", + "combined-stream": "~0.0.4", + "mime-types": "~2.0.3" + } + }, + "formidable": { + "version": "1.0.14", + "resolved": "https://registry.npmjs.org/formidable/-/formidable-1.0.14.tgz", + "integrity": "sha1-Kz9MQRy7X91pXESEPiojUUpDIxo=", + "dev": true + }, + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "dev": true + }, + "mime": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.3.4.tgz", + "integrity": "sha1-EV+eO2s9rylZmDyzjxSaLUDrXVM=", + "dev": true + }, + "mime-db": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.12.0.tgz", + "integrity": "sha1-PQxjGA9FjrENMlqqN9fFiuMS6dc=", + "dev": true + }, + "mime-types": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.0.14.tgz", + "integrity": "sha1-MQ4VnbI+B3+Lsit0jav6SVcUCqY=", + "dev": true, + "requires": { + "mime-db": "~1.12.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "qs": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/qs/-/qs-2.3.3.tgz", + "integrity": "sha1-6eha2+ddoLvkyOBHaghikPhjtAQ=", + "dev": true + }, + "readable-stream": { + "version": "1.0.27-1", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.27-1.tgz", + "integrity": "sha1-a2eYPCA1fO/QfwFlABoW1xDZEHg=", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", + "dev": true + }, + "superagent": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/superagent/-/superagent-1.2.0.tgz", + "integrity": "sha1-qsJiUzwexVOBRKETcc028kSldP0=", + "dev": true, + "requires": { + "component-emitter": "1.1.2", + "cookiejar": "2.0.1", + "debug": "2", + "extend": "1.2.1", + "form-data": "0.2.0", + "formidable": "1.0.14", + "methods": "1.0.1", + "mime": "1.3.4", + "qs": "2.3.3", + "readable-stream": "1.0.27-1", + "reduce-component": "1.0.1" + }, + "dependencies": { + "methods": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.0.1.tgz", + "integrity": "sha1-dbyRlD3/19oDfPPusO1zoAN80Us=", + "dev": true + } + } + } + } + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "requires": { + "has-flag": "^3.0.0" + } + }, + "swagger-converter": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/swagger-converter/-/swagger-converter-0.1.7.tgz", + "integrity": "sha1-oJdRnG8e5N1n4wjZtT3cnCslf5c=", + "requires": { + "lodash.clonedeep": "^2.4.1" + } + }, + "swagger-express-mw": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/swagger-express-mw/-/swagger-express-mw-0.1.0.tgz", + "integrity": "sha1-seT7WgGVnO8imRoSHq5JSt0w5To=", + "requires": { + "swagger-node-runner": "^0.5.0" + } + }, + "swagger-node-runner": { + "version": "0.5.13", + "resolved": "https://registry.npmjs.org/swagger-node-runner/-/swagger-node-runner-0.5.13.tgz", + "integrity": "sha1-VwwCCq55e9Waqyr2kXK/XWE3aKQ=", + "requires": { + "bagpipes": "^0.0.6", + "config": "^1.16.0", + "cors": "^2.5.3", + "debug": "^2.1.3", + "js-yaml": "^3.3.0", + "lodash": "^3.6.0", + "swagger-tools": "^0.9.7" + }, + "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" + } + }, + "lodash": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz", + "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=" + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } + } + }, + "swagger-tools": { + "version": "0.9.16", + "resolved": "https://registry.npmjs.org/swagger-tools/-/swagger-tools-0.9.16.tgz", + "integrity": "sha1-45+uPVgdcTaCSR4ZJs2Hvywgm/s=", + "requires": { + "async": "^1.3.0", + "body-parser": "1.12.4", + "commander": "^2.8.1", + "debug": "^2.2.0", + "js-yaml": "^3.3.1", + "json-refs": "^2.1.5", + "lodash-compat": "^3.10.0", + "multer": "^1.1.0", + "parseurl": "^1.3.0", + "path-to-regexp": "^1.2.0", + "qs": "^4.0.0", + "serve-static": "^1.10.0", + "spark-md5": "^1.0.0", + "string": "^3.3.0", + "superagent": "^1.2.0", + "swagger-converter": "^0.1.7", + "traverse": "^0.6.6", + "z-schema": "^3.15.4" + }, + "dependencies": { + "async": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", + "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=" + }, + "body-parser": { + "version": "1.12.4", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.12.4.tgz", + "integrity": "sha1-CQcAxLoohiqFIO83g5X97l9hwik=", + "requires": { + "bytes": "1.0.0", + "content-type": "~1.0.1", + "debug": "~2.2.0", + "depd": "~1.0.1", + "iconv-lite": "0.4.8", + "on-finished": "~2.2.1", + "qs": "2.4.2", + "raw-body": "~2.0.1", + "type-is": "~1.6.2" + }, + "dependencies": { + "debug": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", + "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=", + "requires": { + "ms": "0.7.1" + } + }, + "qs": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-2.4.2.tgz", + "integrity": "sha1-9854jld33wtQENp/fE5zujJHD1o=" + } + } + }, + "bytes": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-1.0.0.tgz", + "integrity": "sha1-NWnt6Lo0MV+rmcPpLLBMciDeH6g=" + }, + "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=" + } + } + }, + "depd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.0.1.tgz", + "integrity": "sha1-gK7GTJ1tl+ZcwqnKqTwKpqv3Oqo=" + }, + "ee-first": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.0.tgz", + "integrity": "sha1-ag18YiHkkP7v2S7D9EHJzozQl/Q=" + }, + "iconv-lite": { + "version": "0.4.8", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.8.tgz", + "integrity": "sha1-xgGadZXyzvynAuq2lKAQvNkpjSA=" + }, + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" + }, + "ms": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz", + "integrity": "sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg=" + }, + "on-finished": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.2.1.tgz", + "integrity": "sha1-XIXBzDYpn3gCllP2Z/J7a5nrwCk=", + "requires": { + "ee-first": "1.1.0" + } + }, + "path-to-regexp": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.8.0.tgz", + "integrity": "sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==", + "requires": { + "isarray": "0.0.1" + } + }, + "qs": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-4.0.0.tgz", + "integrity": "sha1-wx2bdOwn33XlQ6hseHKO2NRiNgc=" + }, + "raw-body": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.0.2.tgz", + "integrity": "sha1-osL5jIUxzumcY9jSOLfel7tln8o=", + "requires": { + "bytes": "2.1.0", + "iconv-lite": "0.4.8" + }, + "dependencies": { + "bytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-2.1.0.tgz", + "integrity": "sha1-rJPEEOL/ycx89LRks4KJBn9eR7Q=" + } + } + } + } + }, + "switchback": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/switchback/-/switchback-2.0.5.tgz", + "integrity": "sha512-w9gnsTxR5geOKt45QUryhDP9KTLcOAqje9usR2VQ2ng8DfhaF+mkIcArxioMP/p6Z/ecKE58i2/B0DDlMJK1jw==", + "requires": { + "@sailshq/lodash": "^3.10.3" + } + }, + "symbol-observable": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.2.0.tgz", + "integrity": "sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ==" + }, + "terraformer": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/terraformer/-/terraformer-1.0.12.tgz", + "integrity": "sha512-MokUp0+MFal4CmJDVL6VAO1bKegeXcBM2RnPVfqcFIp2IIv8EbPAjG0j/vEy/vuKB8NVMMSF2vfpVS/QLe4DBg==", + "requires": { + "@types/geojson": "^7946.0.0 || ^1.0.0" + } + }, + "terraformer-wkt-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/terraformer-wkt-parser/-/terraformer-wkt-parser-1.2.1.tgz", + "integrity": "sha512-+CJyNLWb3lJ9RsZMTM66BY0MT3yIo4l4l22Jd9CrZuwzk54fsu4Sc7zejuS9fCITTuTQy3p06d4MZMVI7v5wSg==", + "requires": { + "@types/geojson": "^1.0.0", + "terraformer": "~1.0.5" + } + }, + "text-hex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/text-hex/-/text-hex-1.0.0.tgz", + "integrity": "sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg==" + }, + "thirty-two": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/thirty-two/-/thirty-two-0.0.2.tgz", + "integrity": "sha1-QlPinYywWPBIAmfFaYwOSSflS2o=" + }, + "through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" + }, + "tiny-emitter": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/tiny-emitter/-/tiny-emitter-2.0.2.tgz", + "integrity": "sha512-2NM0auVBGft5tee/OxP4PI3d8WItkDM+fPnaRAVo6xTDI2knbz9eC5ArWGqtGlYqiH3RU5yMpdyTTO7MguC4ow==" + }, + "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-object-path": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", + "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "to-regex": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", + "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", + "requires": { + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "regex-not": "^1.0.2", + "safe-regex": "^1.1.0" + } + }, + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "requires": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + } + }, + "to-source-code": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/to-source-code/-/to-source-code-1.0.2.tgz", + "integrity": "sha1-3RNr2x4dvYC76s8IiZJnjpBwv+o=", + "requires": { + "is-nil": "^1.0.0" + } + }, + "topo": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/topo/-/topo-1.1.0.tgz", + "integrity": "sha1-6ddRYV0buH3IZdsYL6HKCl71NtU=", + "requires": { + "hoek": "2.x.x" + }, + "dependencies": { + "hoek": { + "version": "2.16.3", + "resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz", + "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=" + } + } + }, + "toposort-class": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toposort-class/-/toposort-class-1.0.1.tgz", + "integrity": "sha1-f/0feMi+KMO6Rc1OGj9e4ZO9mYg=" + }, + "tough-cookie": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz", + "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==", + "requires": { + "psl": "^1.1.24", + "punycode": "^1.4.1" + }, + "dependencies": { + "punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" + } + } + }, + "traceparent": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/traceparent/-/traceparent-1.0.0.tgz", + "integrity": "sha512-b/hAbgx57pANQ6cg2eBguY3oxD6FGVLI1CC2qoi01RmHR7AYpQHPXTig9FkzbWohEsVuHENZHP09aXuw3/LM+w==", + "requires": { + "random-poly-fill": "^1.0.1" + } + }, + "traverse": { + "version": "0.6.6", + "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.6.6.tgz", + "integrity": "sha1-y99WD9e5r2MlAv7UD5GMFX6pcTc=" + }, + "triple-beam": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/triple-beam/-/triple-beam-1.3.0.tgz", + "integrity": "sha512-XrHUvV5HpdLmIj4uVMxHggLbFSZYIn7HEWsqePZcI50pco+MPqJ50wMGY794X7AOOhxOBAjbkqfAbEe/QMp2Lw==" + }, + "tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "requires": { + "safe-buffer": "^5.0.1" + } + }, + "tv4": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/tv4/-/tv4-1.3.0.tgz", + "integrity": "sha1-0CDIRvrdUMhVq7JeuuzGj8EPeWM=" + }, + "tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=" + }, + "type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==" + }, + "type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==" + }, + "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" + } + }, + "typed-function": { + "version": "0.10.7", + "resolved": "https://registry.npmjs.org/typed-function/-/typed-function-0.10.7.tgz", + "integrity": "sha512-3mlZ5AwRMbLvUKkc8a1TI4RUJUS2H27pmD5q0lHRObgsoWzhDAX01yg82kwSP1FUw922/4Y9ZliIEh0qJZcz+g==" + }, + "typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=" + }, + "tz-offset": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/tz-offset/-/tz-offset-0.0.1.tgz", + "integrity": "sha512-kMBmblijHJXyOpKzgDhKx9INYU4u4E1RPMB0HqmKSgWG8vEcf3exEfLh4FFfzd3xdQOw9EuIy/cP0akY6rHopQ==" + }, + "uid2": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/uid2/-/uid2-0.0.3.tgz", + "integrity": "sha1-SDEm4Rd03y9xuLY53NeZw3YWK4I=" + }, + "ultron": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.1.1.tgz", + "integrity": "sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og==" + }, + "underscore": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.11.0.tgz", + "integrity": "sha512-xY96SsN3NA461qIRKZ/+qox37YXPtSBswMGfiNptr+wrt6ds4HaMw23TP612fEyGekRE6LNRiLYr/aqbHXNedw==" + }, + "unicode-byte-truncate": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unicode-byte-truncate/-/unicode-byte-truncate-1.0.0.tgz", + "integrity": "sha1-qm8PNHUZP+IMMgrJIT425i6HZKc=", + "requires": { + "is-integer": "^1.0.6", + "unicode-substring": "^0.1.0" + } + }, + "unicode-substring": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/unicode-substring/-/unicode-substring-0.1.0.tgz", + "integrity": "sha1-YSDOPDkDhdvND2DDK5BlxBgdSzY=" + }, + "union-value": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", + "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", + "requires": { + "arr-union": "^3.1.0", + "get-value": "^2.0.6", + "is-extendable": "^0.1.1", + "set-value": "^2.0.1" + } + }, + "unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" + }, + "unset-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", + "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", + "requires": { + "has-value": "^0.3.1", + "isobject": "^3.0.0" + }, + "dependencies": { + "has-value": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", + "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", + "requires": { + "get-value": "^2.0.3", + "has-values": "^0.1.4", + "isobject": "^2.0.0" + }, + "dependencies": { + "isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "requires": { + "isarray": "1.0.0" + } + } + } + }, + "has-values": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", + "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=" + } + } + }, + "upath": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", + "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==" + }, + "uri-js": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.0.tgz", + "integrity": "sha512-B0yRTzYdUCCn9n+F4+Gh4yIDtMQcaJsmYBDsTSG8g/OejKBodLQ2IHfN3bM7jUsRXndopT7OIXWdYqc1fjmV6g==", + "requires": { + "punycode": "^2.1.0" + }, + "dependencies": { + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" + } + } + }, + "urix": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", + "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=" + }, + "url": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/url/-/url-0.10.3.tgz", + "integrity": "sha1-Ah5NnHcF8hu/N9A861h2dAJ3TGQ=", + "requires": { + "punycode": "1.3.2", + "querystring": "0.2.0" + } + }, + "use": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", + "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==" + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + }, + "utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" + }, + "uuid": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.2.1.tgz", + "integrity": "sha512-jZnMwlb9Iku/O3smGWvZhauCf6cvvpKi4BKRiliS3cxnI+Gz9j5MEpTz2UFuXiKPJocb7gnsLHwiS05ige5BEA==" + }, + "uws": { + "version": "9.14.0", + "resolved": "https://registry.npmjs.org/uws/-/uws-9.14.0.tgz", + "integrity": "sha512-HNMztPP5A1sKuVFmdZ6BPVpBQd5bUjNC8EFMFiICK+oho/OQsAJy5hnIx4btMHiOk8j04f/DbIlqnEZ9d72dqg==", + "optional": true + }, + "v8-compile-cache": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-1.1.2.tgz", + "integrity": "sha512-ejdrifsIydN1XDH7EuR2hn8ZrkRKUYF7tUcBjBy/lhrCvs2K+zRlbW9UHc0IQ9RsYFZJFqJrieoIHfkCa0DBRA==" + }, + "validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "requires": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "validator": { + "version": "9.4.1", + "resolved": "https://registry.npmjs.org/validator/-/validator-9.4.1.tgz", + "integrity": "sha512-YV5KjzvRmSyJ1ee/Dm5UED0G+1L4GZnLN3w6/T+zZm8scVua4sOhYKWTUrKa0H/tMiJyO9QLHMPN+9mB/aMunA==" + }, + "vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" + }, + "verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", + "requires": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } + }, + "vizion": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/vizion/-/vizion-0.2.13.tgz", + "integrity": "sha1-ExTN7is0EW+fWxJIU2+V2/zW718=", + "requires": { + "async": "1.5" + }, + "dependencies": { + "async": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", + "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=" + } + } + }, + "vxx": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/vxx/-/vxx-1.2.2.tgz", + "integrity": "sha1-dB+1HG8R0zg9pvm5IBil17qAdhE=", + "requires": { + "continuation-local-storage": "^3.1.4", + "debug": "^2.6.3", + "extend": "^3.0.0", + "is": "^3.2.0", + "lodash.findindex": "^4.4.0", + "lodash.isequal": "^4.0.0", + "lodash.merge": "^4.6.0", + "methods": "^1.1.1", + "semver": "^5.0.1", + "shimmer": "^1.0.0", + "uuid": "^3.0.1" + }, + "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=" + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + } + } + }, + "winston": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/winston/-/winston-3.2.1.tgz", + "integrity": "sha512-zU6vgnS9dAWCEKg/QYigd6cgMVVNwyTzKs81XZtTFuRwJOcDdBg7AU0mXVyNbs7O5RH2zdv+BdNZUlx7mXPuOw==", + "requires": { + "async": "^2.6.1", + "diagnostics": "^1.1.1", + "is-stream": "^1.1.0", + "logform": "^2.1.1", + "one-time": "0.0.4", + "readable-stream": "^3.1.1", + "stack-trace": "0.0.x", + "triple-beam": "^1.3.0", + "winston-transport": "^4.3.0" + } + }, + "winston-compat": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/winston-compat/-/winston-compat-0.1.5.tgz", + "integrity": "sha512-EPvPcHT604AV3Ji6d3+vX8ENKIml9VSxMRnPQ+cuK/FX6f3hvPP2hxyoeeCOCFvDrJEujalfcKWlWPvAnFyS9g==", + "requires": { + "cycle": "~1.0.3", + "logform": "^1.6.0", + "triple-beam": "^1.2.0" + }, + "dependencies": { + "fecha": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fecha/-/fecha-2.3.3.tgz", + "integrity": "sha512-lUGBnIamTAwk4znq5BcqsDaxSmZ9nDVJaij6NvRt/Tg4R69gERA+otPKbS86ROw9nxVMw2/mp1fnaiWqbs6Sdg==" + }, + "logform": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/logform/-/logform-1.10.0.tgz", + "integrity": "sha512-em5ojIhU18fIMOw/333mD+ZLE2fis0EzXl1ZwHx4iQzmpQi6odNiY/t+ITNr33JZhT9/KEaH+UPIipr6a9EjWg==", + "requires": { + "colors": "^1.2.1", + "fast-safe-stringify": "^2.0.4", + "fecha": "^2.3.3", + "ms": "^2.1.1", + "triple-beam": "^1.2.0" + } + } + } + }, + "winston-elasticsearch-apm": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/winston-elasticsearch-apm/-/winston-elasticsearch-apm-0.0.7.tgz", + "integrity": "sha512-Bae5BkM36/6x2TN7zv5Qu7qQF2SnUDhba26b0kCL6+A3yaTyOa9sjf4sakoWx27Lil7M6OCicC39rfcIKNkHHg==", + "requires": { + "lodash": "^4.17.11", + "lodash.defaultsdeep": "^4.6.0", + "winston-compat": "^0.1.4", + "winston-transport": "^4.2.0" + }, + "dependencies": { + "lodash": { + "version": "4.17.20", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", + "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==" + } + } + }, + "winston-transport": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/winston-transport/-/winston-transport-4.4.0.tgz", + "integrity": "sha512-Lc7/p3GtqtqPBYYtS6KCN3c77/2QCev51DvcJKbkFPQNoj1sinkGwLGFDxkXY9J6p9+EPnYs+D90uwbnaiURTw==", + "requires": { + "readable-stream": "^2.3.7", + "triple-beam": "^1.2.0" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "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" + } + }, + "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==", + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "wkx": { + "version": "0.4.8", + "resolved": "https://registry.npmjs.org/wkx/-/wkx-0.4.8.tgz", + "integrity": "sha512-ikPXMM9IR/gy/LwiOSqWlSL3X/J5uk9EO2hHNRXS41eTLXaUFEVw9fn/593jW/tE5tedNg8YjT5HkCa4FqQZyQ==", + "requires": { + "@types/node": "*" + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + }, + "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" + } + }, + "x-xss-protection": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/x-xss-protection/-/x-xss-protection-1.1.0.tgz", + "integrity": "sha512-rx3GzJlgEeZ08MIcDsU2vY2B1QEriUKJTSiNHHUIem6eg9pzVOr2TL3Y4Pd6TMAM5D5azGjcxqI62piITBDHVg==" + }, + "xml2js": { + "version": "0.4.17", + "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.17.tgz", + "integrity": "sha1-F76T6q4/O3eTWceVtBlwWogX6Gg=", + "requires": { + "sax": ">=0.6.0", + "xmlbuilder": "^4.1.0" + } + }, + "xmlbuilder": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-4.2.1.tgz", + "integrity": "sha1-qlijBBoGb5DqoWwvU4n/GfP0YaU=", + "requires": { + "lodash": "^4.0.0" + } + }, + "xmlhttprequest-ssl": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.5.tgz", + "integrity": "sha1-wodrBhaKrcQOV9l+gRkayPQ5iz4=" + }, + "xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" + }, + "yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=" + }, + "yamljs": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/yamljs/-/yamljs-0.3.0.tgz", + "integrity": "sha512-C/FsVVhht4iPQYXOInoxUM/1ELSf9EsgKH34FofQOp6hwCPrW4vG4w5++TED3xRUo8gD7l0P1J1dLlDYzODsTQ==", + "requires": { + "argparse": "^1.0.7", + "glob": "^7.0.5" + } + }, + "yauzl": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=", + "requires": { + "buffer-crc32": "~0.2.3", + "fd-slicer": "~1.1.0" + } + }, + "yeast": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/yeast/-/yeast-0.1.2.tgz", + "integrity": "sha1-AI4G2AlDIMNy28L47XagymyKxBk=" + }, + "z-schema": { + "version": "3.25.1", + "resolved": "https://registry.npmjs.org/z-schema/-/z-schema-3.25.1.tgz", + "integrity": "sha512-7tDlwhrBG+oYFdXNOjILSurpfQyuVgkRe3hB2q8TEssamDHB7BbLWYkYO98nTn0FibfdFroFKDjndbgufAgS/Q==", + "requires": { + "commander": "^2.7.1", + "core-js": "^2.5.7", + "lodash.get": "^4.0.0", + "lodash.isequal": "^4.0.0", + "validator": "^10.0.0" + }, + "dependencies": { + "validator": { + "version": "10.11.0", + "resolved": "https://registry.npmjs.org/validator/-/validator-10.11.0.tgz", + "integrity": "sha512-X/p3UZerAIsbBfN/IwahhYaBbY68EN/UQBWHtsbXGT5bfrH/p4NQzUCG1kF/rtKaNpnJ7jAu6NGTdSNtyNIXMw==" + } + } + } + } +} diff --git a/server/package.json b/server/package.json new file mode 100644 index 0000000000..204bfa80ed --- /dev/null +++ b/server/package.json @@ -0,0 +1,89 @@ +{ + "version": "2.0.0", + "private": false, + "description": "HollaEx Kit", + "keywords": [ + "swagger", + "api", + "exchange", + "bitcoin", + "cryptocurrency", + "bitholla", + "hollaex" + ], + "author": "bitHolla Inc.", + "license": "bitHolla Inc.", + "main": "app.js", + "dependencies": { + "bcryptjs": "2.4.3", + "bluebird": "3.5.3", + "body-parser": "1.19.0", + "chai": "4.2.0", + "cors": "2.8.5", + "elastic-apm-node": "3.5.0", + "eval": "0.1.4", + "expect-ct": "0.1.0", + "express": "4.16.2", + "express-validator": "6.7.0", + "flat": "5.0.0", + "geoip-lite": "1.4.1", + "helmet": "3.12.0", + "hollaex-node-lib": "github:bitholla/hollaex-node-lib#2.0", + "hollaex-tools-lib": "github:bitholla/hollaex-tools-lib#master", + "http": "0.0.0", + "install": "0.10.4", + "json2csv": "4.5.4", + "jsonwebtoken": "7.4.3", + "lodash": "4.17.5", + "mathjs": "3.20.2", + "moment": "2.21.0", + "moment-timezone": "0.5.28", + "morgan": "1.9.0", + "multer": "1.4.2", + "node-cron": "2.0.3", + "nodemailer": "6.4.6", + "npm": "5.7.1", + "npmi": "4.0.0", + "otp": "0.1.3", + "pg": "6.4.2", + "pg-hstore": "2.3.2", + "pm2": "2.10.1", + "pmx": "1.6.4", + "random-string": "0.2.0", + "redis": "2.8.0", + "redux": "4.0.1", + "request": "2.83.0", + "request-promise": "4.2.2", + "sequelize": "4.37.7", + "swagger-express-mw": "0.1.0", + "uglify-es": "^3.3.9", + "uuid": "3.2.1", + "validator": "9.4.1", + "winston": "3.2.1", + "winston-elasticsearch-apm": "0.0.7", + "ws-heartbeat": "1.1.0", + "yamljs": "0.3.0" + }, + "devDependencies": { + "chai": "4.2.0", + "mocha": "3.5.3", + "nyc": "11.5.0", + "should": "7.1.0", + "supertest": "1.0.0" + }, + "scripts": { + "undomigrate": "sequelize db:migrate:undo:all", + "migrate": "sequelize db:migrate", + "start": "node app.js", + "test": "NODE_ENV=test nyc --reporter=html --reporter=text mocha --recursive --timeout 5000" + }, + "nyc": { + "exclude": [ + "db", + "config", + "test", + "app.js", + "constants.js" + ] + } +} diff --git a/server/plugins.js b/server/plugins.js new file mode 100644 index 0000000000..140fa1797e --- /dev/null +++ b/server/plugins.js @@ -0,0 +1,1030 @@ +'use strict'; + +var app = require('express')(); +const _eval = require('eval'); +const lodash = require('lodash'); +const PORT = process.env.PLUGIN_PORT || 10011; +const toolsLib = require('hollaex-tools-lib'); +const bodyParser = require('body-parser'); +const expressValidator = require('express-validator'); +const { checkSchema } = expressValidator; +const morgan = require('morgan'); +const { logEntryRequest, stream, loggerPlugin } = require('./config/logger'); +const { domainMiddleware, helmetMiddleware } = require('./config/middleware'); +const morganType = process.env.NODE_ENV === 'development' ? 'dev' : 'combined'; +const npmi = require('npmi'); +const multer = require('multer'); +const moment = require('moment'); +const { checkStatus } = require('./init'); +const UglifyJS = require('uglify-es'); +const cors = require('cors'); + +const installLibrary = (library) => { + return new Promise((resolve, reject) => { + npmi({ + name: library, + npmLoad: { + save: false, + forceInstall: false, + loglevel: 'silent' + } + }, (err, result) => { + if (err) { + reject(err); + } else { + try { + const lib = require(library); + resolve(lib); + } catch (err) { + reject(err); + } + } + }); + }); +}; + +app.use(morgan(morganType, { stream })); +app.listen(PORT); +app.use(cors()); +app.use(bodyParser.urlencoded({ extended: true })); +app.use(bodyParser.json()); +app.use(logEntryRequest); +app.use(domainMiddleware); +helmetMiddleware(app); + +checkStatus() + .then((nodeLib) => { + if (nodeLib) { + app.get('/plugins', [ + checkSchema({ + name: { + in: ['query'], + errorMessage: 'must be a string', + isString: true, + isLength: { + errorMessage: 'must be minimum length of 1', + options: { min: 1 } + }, + optional: true + }, + limit: { + in: ['query'], + errorMessage: 'must be an integer', + isInt: true, + optional: true + }, + page: { + in: ['query'], + errorMessage: 'must be an integer', + isInt: true, + optional: true + }, + search: { + in: ['query'], + errorMessage: 'must be a string', + isString: true, + isLength: { + errorMessage: 'must be minimum length of 1', + options: { min: 1 } + }, + optional: true + } + }) + ], (req, res) => { + const errors = expressValidator.validationResult(req); + if (!errors.isEmpty()) { + return res.status(400).json({ errors: errors.array() }); + } + + const { limit, page, name, search } = req.query; + + let promiseQuery = toolsLib.plugin.getPaginatedPlugins(limit, page, search); + + if (name) { + promiseQuery = toolsLib.plugin.getPlugin( + name, + { + raw: true, + attributes: [ + 'name', + 'version', + 'enabled', + 'author', + 'description', + 'bio', + 'url', + 'logo', + 'icon', + 'documentation', + 'web_view', + 'admin_view', + 'created_at', + 'updated_at' + ] + } + ); + } + + promiseQuery + .then((plugins) => { + if (name) { + if (!plugins) { + throw new Error('Plugin not found'); + } else { + plugins.enabled_admin_view = !!plugins.admin_view; + delete plugins.admin_view; + } + } + return res.json(plugins); + }) + .catch((err) => { + loggerPlugin.error(req.uuid, 'GET /plugins err', err.message); + return res.status(err.status || 400).json({ message: err.message }); + }); + }); + + app.delete('/plugins', [ + toolsLib.security.verifyBearerTokenExpressMiddleware(['admin']), + checkSchema({ + name: { + in: ['query'], + errorMessage: 'must be a string', + isString: true, + isLength: { + errorMessage: 'must be minimum length of 1', + options: { min: 1 } + }, + optional: false + } + }) + ], (req, res) => { + const errors = expressValidator.validationResult(req); + if (!errors.isEmpty()) { + return res.status(400).json({ errors: errors.array() }); + } + + loggerPlugin.verbose( + req.uuid, + 'DELETE /plugins auth', + req.auth.sub + ); + + const { name } = req.query; + + loggerPlugin.info(req.uuid, 'DELETE /plugins name', name); + + toolsLib.plugin.getPlugin(name) + .then((plugin) => { + if (!plugin) { + throw new Error('Plugin not found'); + } + + return plugin.destroy(); + }) + .then(() => { + loggerPlugin.info(req.uuid, 'DELETE /plugins deleted plugin', name); + + res.json({ message: 'Success' }); + + process.exit(); + }) + .catch((err) => { + loggerPlugin.error(req.uuid, 'DELETE /plugins err', err.message); + return res.status(err.status || 400).json({ message: err.message }); + }); + }); + + app.put('/plugins', [ + toolsLib.security.verifyBearerTokenExpressMiddleware(['admin']), + checkSchema({ + name: { + in: ['body'], + errorMessage: 'must be a string', + isString: true, + isLength: { + errorMessage: 'must be minimum length of 1', + options: { min: 1 } + }, + optional: false + }, + script: { + in: ['body'], + errorMessage: 'must be a string', + isString: true, + isLength: { + errorMessage: 'must be minimum length of 5', + options: { min: 5 } + }, + optional: false + }, + version: { + in: ['body'], + errorMessage: 'must be a number', + isNumeric: true, + optional: false + }, + description: { + in: ['body'], + errorMessage: 'must be a string or null', + isString: true, + optional: { options: { nullable: true } } + }, + author: { + in: ['body'], + errorMessage: 'must be a string or null', + isString: true, + optional: { options: { nullable: true } } + }, + url: { + in: ['body'], + errorMessage: 'must be a string or null', + isString: true, + optional: { options: { nullable: true } } + }, + bio: { + in: ['body'], + errorMessage: 'must be a string or null', + isString: true, + optional: { options: { nullable: true } } + }, + documentation: { + in: ['body'], + errorMessage: 'must be a string or null', + isString: true, + optional: { options: { nullable: true } } + }, + icon: { + in: ['body'], + errorMessage: 'must be a string or null', + isString: true, + optional: { options: { nullable: true } } + }, + logo: { + in: ['body'], + errorMessage: 'must be a string or null', + isString: true, + optional: { options: { nullable: true } } + }, + admin_view: { + in: ['body'], + errorMessage: 'must be a string or null', + isString: true, + optional: { options: { nullable: true } } + }, + web_view: { + in: ['body'], + errorMessage: 'must be a string or null', + isString: true, + optional: { options: { nullable: true } } + }, + prescript: { + in: ['body'], + custom: { + options: (value) => { + if (!lodash.isPlainObject(value)) { + return false; + } + if (value.install && lodash.isArray(value.install)) { + for (let lib of value.install) { + if (!lodash.isString(lib)) { + return false; + } + } + } + if (value.run && !lodash.isString(value.run)) { + return false; + } + return true; + }, + errorMessage: 'must be an object. install value must be an array of strings. run value must be a string' + }, + optional: { options: { nullable: true } } + }, + postscript: { + in: ['body'], + custom: { + options: (value) => { + if (!lodash.isPlainObject(value)) { + return false; + } + if (value.run && lodash.isString(value.run)) { + return false; + } + return true; + }, + errorMessage: 'must be an object. run value must be a string' + }, + optional: true + }, + meta: { + in: ['body'], + custom: { + options: (value) => { + return lodash.isPlainObject(value); + }, + errorMessage: 'must be an object' + }, + optional: { options: { nullable: true } } + } + }) + ], (req, res) => { + const errors = expressValidator.validationResult(req); + if (!errors.isEmpty()) { + return res.status(400).json({ errors: errors.array() }); + } + + loggerPlugin.verbose( + req.uuid, + 'PUT /plugins auth', + req.auth.sub + ); + + const { + name, + script, + version, + description, + author, + url, + icon, + documentation, + bio, + web_view, + admin_view, + logo, + prescript, + postscript, + meta + } = req.body; + + loggerPlugin.info(req.uuid, 'PUT /plugins name', name, 'version', version); + + toolsLib.plugin.getPlugin(name) + .then((plugin) => { + if (!plugin) { + throw new Error('Plugin not installed'); + } + if (plugin.version === version) { + throw new Error('Version is already installed'); + } + + const minifiedScript = UglifyJS.minify(script); + + if (minifiedScript.error) { + throw new Error('Error while minifying script'); + } + + const updatedPlugin = { + script: minifiedScript.code, + version + }; + + if (description) { + updatedPlugin.description = description; + } + + if (bio) { + updatedPlugin.bio = bio; + } + + if (author) { + updatedPlugin.author = author; + } + + if (documentation) { + updatedPlugin.documentation = documentation; + } + + if (icon) { + updatedPlugin.icon = icon; + } + + if (url) { + updatedPlugin.url = url; + } + + if (logo) { + updatedPlugin.logo = logo; + } + + if (!lodash.isUndefined(web_view)) { + updatedPlugin.web_view = web_view; + } + + if (!lodash.isUndefined(admin_view)) { + updatedPlugin.admin_view = admin_view; + } + + if (lodash.isPlainObject(prescript)) { + updatedPlugin.prescript = prescript; + } + + if (lodash.isPlainObject(postscript)) { + updatedPlugin.postscript = postscript; + } + + if (lodash.isPlainObject(meta)) { + const existingMeta = lodash.pick(plugin.meta, Object.keys(meta)); + + updatedPlugin.meta = { + ...meta, + ...existingMeta + }; + } + + return plugin.update(updatedPlugin); + }) + .then(async (plugin) => { + loggerPlugin.info(req.uuid, 'PUT /plugins updated', name); + + plugin = plugin.dataValues; + + plugin.enabled_admin_view = !!plugin.admin_view; + + res.json(lodash.omit(plugin, [ + 'id', + 'meta', + 'admin_view', + 'script', + 'prescript', + 'postscript' + ])); + + if (plugin.enabled) { + process.exit(); + } + }) + .catch((err) => { + loggerPlugin.error(req.uuid, 'POST /plugins err', err.message); + return res.status(err.status || 400).json({ message: err.message }); + }); + }); + + app.post('/plugins', [ + toolsLib.security.verifyBearerTokenExpressMiddleware(['admin']), + checkSchema({ + name: { + in: ['body'], + errorMessage: 'must be a string', + isString: true, + isLength: { + errorMessage: 'must be minimum length of 1', + options: { min: 1 } + }, + optional: false + }, + script: { + in: ['body'], + errorMessage: 'must be a string', + isString: true, + isLength: { + errorMessage: 'must be minimum length of 5', + options: { min: 5 } + }, + optional: false + }, + version: { + in: ['body'], + errorMessage: 'must be a number', + isNumeric: true, + optional: false + }, + author: { + in: ['body'], + errorMessage: 'must be a string', + isString: true, + optional: false + }, + enabled: { + in: ['body'], + errorMessage: 'must be a boolean', + isBoolean: true, + optional: false + }, + description: { + in: ['body'], + errorMessage: 'must be a string or null', + isString: true, + optional: { options: { nullable: true } } + }, + bio: { + in: ['body'], + errorMessage: 'must be a string or null', + isString: true, + optional: { options: { nullable: true } } + }, + documentation: { + in: ['body'], + errorMessage: 'must be a string or null', + isString: true, + optional: { options: { nullable: true } } + }, + icon: { + in: ['body'], + errorMessage: 'must be a string or null', + isString: true, + optional: { options: { nullable: true } } + }, + url: { + in: ['body'], + errorMessage: 'must be a string or null', + isString: true, + optional: { options: { nullable: true } } + }, + logo: { + in: ['body'], + errorMessage: 'must be a string or null', + isString: true, + optional: { options: { nullable: true } } + }, + admin_view: { + in: ['body'], + errorMessage: 'must be a string or null', + isString: true, + optional: { options: { nullable: true } } + }, + web_view: { + in: ['body'], + errorMessage: 'must be a string or null', + isString: true, + optional: { options: { nullable: true } } + }, + prescript: { + in: ['body'], + custom: { + options: (value) => { + if (!lodash.isPlainObject(value)) { + return false; + } + if (value.install && lodash.isArray(value.install)) { + for (let lib of value.install) { + if (!lodash.isString(lib)) { + return false; + } + } + } + if (value.run && !lodash.isString(value.run)) { + return false; + } + return true; + }, + errorMessage: 'must be an object. install value must be an array of strings. run value must be a string' + }, + optional: { options: { nullable: true } } + }, + postscript: { + in: ['body'], + custom: { + options: (value) => { + if (!lodash.isPlainObject(value)) { + return false; + } + if (value.run && !lodash.isString(value.run)) { + return false; + } + return true; + }, + errorMessage: 'must be an object. run value must be a string' + }, + optional: { options: { nullable: true } } + }, + meta: { + in: ['body'], + custom: { + options: (value) => { + return lodash.isPlainObject(value); + }, + errorMessage: 'must be an object' + }, + optional: { options: { nullable: true } } + } + }) + ], (req, res) => { + const errors = expressValidator.validationResult(req); + if (!errors.isEmpty()) { + return res.status(400).json({ errors: errors.array() }); + } + + loggerPlugin.verbose( + req.uuid, + 'POST /plugins auth', + req.auth.sub + ); + + const { + name, + script, + version, + description, + author, + icon, + bio, + documentation, + web_view, + admin_view, + url, + logo, + enabled, + prescript, + postscript, + meta + } = req.body; + + loggerPlugin.info(req.uuid, 'POST /plugins name', name, 'version', version); + + toolsLib.plugin.getPlugin(name) + .then((plugin) => { + if (plugin) { + throw new Error('Plugin is already installed'); + } + + const minifiedScript = UglifyJS.minify(script); + + if (minifiedScript.error) { + throw new Error('Error while minifying script'); + } + + const newPlugin = { + name, + script: minifiedScript.code, + version, + author, + enabled + }; + + if (description) { + newPlugin.description = description; + } + + if (bio) { + newPlugin.bio = bio; + } + + if (documentation) { + newPlugin.documentation = documentation; + } + + if (icon) { + newPlugin.icon = icon; + } + + if (url) { + newPlugin.url = url; + } + + if (logo) { + newPlugin.logo = logo; + } + + if (!lodash.isUndefined(web_view)) { + newPlugin.web_view = web_view; + } + + if (!lodash.isUndefined(admin_view)) { + newPlugin.admin_view = admin_view; + } + + if (lodash.isPlainObject(prescript)) { + newPlugin.prescript = prescript; + } + + if (lodash.isPlainObject(postscript)) { + newPlugin.postscript = postscript; + } + + if (lodash.isPlainObject(meta)) { + newPlugin.meta = meta; + } + + return toolsLib.database.create('plugin', newPlugin); + }) + .then((plugin) => { + loggerPlugin.info(req.uuid, 'POST /plugins installed', name); + + plugin = plugin.dataValues; + + plugin.enabled_admin_view = !!plugin.admin_view; + + res.json(lodash.omit(plugin, [ + 'id', + 'meta', + 'admin_view', + 'script', + 'prescript', + 'postscript' + ])); + + if (plugin.enabled) { + process.exit(); + } + }) + .catch((err) => { + loggerPlugin.error(req.uuid, 'POST /plugins err', err.message); + return res.status(err.status || 400).json({ message: err.message }); + }); + }); + + app.put('/plugins/meta', [ + toolsLib.security.verifyBearerTokenExpressMiddleware(['admin']), + checkSchema({ + name: { + in: ['body'], + errorMessage: 'must be a string', + isString: true, + isLength: { + errorMessage: 'must be minimum length of 1', + options: { min: 1 } + }, + optional: false + }, + meta: { + in: ['body'], + custom: { + options: (value) => { + return lodash.isPlainObject(value); + }, + errorMessage: 'must be an object' + }, + optional: false + } + }) + ], (req, res) => { + const errors = expressValidator.validationResult(req); + if (!errors.isEmpty()) { + return res.status(400).json({ errors: errors.array() }); + } + + loggerPlugin.verbose( + req.uuid, + 'PUT /plugins/meta auth', + req.auth.sub + ); + + const { name, meta } = req.body; + + loggerPlugin.info(req.uuid, 'PUT /plugins/meta name', name); + + toolsLib.plugin.getPlugin(name) + .then((plugin) => { + if (!plugin) { + throw new Error('Plugin not found'); + } + + const updatedMeta = lodash.pick(meta, Object.keys(plugin.meta)); + + const newMeta = { + ...plugin.meta, + ...updatedMeta + }; + + return plugin.update({ meta: newMeta }, { fields: ['meta']}); + }) + .then((plugin) => { + loggerPlugin.info(req.uuid, 'PUT /plugins/meta updated', name); + + res.json({ message: 'Success' }); + + if (plugin.enabled) { + process.exit(); + } + }) + .catch((err) => { + loggerPlugin.error(req.uuid, 'PUT /plugins/meta err', err.message); + return res.status(err.status || 400).json({ message: err.message }); + }); + }); + + app.get('/plugins/meta', [ + toolsLib.security.verifyBearerTokenExpressMiddleware(['admin']), + checkSchema({ + name: { + in: ['query'], + errorMessage: 'must be a string', + isString: true, + isLength: { + errorMessage: 'must be minimum length of 1', + options: { min: 1 } + }, + optional: false + } + }) + ], (req, res) => { + const errors = expressValidator.validationResult(req); + if (!errors.isEmpty()) { + return res.status(400).json({ errors: errors.array() }); + } + + loggerPlugin.verbose( + req.uuid, + 'GET /plugins/meta auth', + req.auth.sub + ); + + const { name } = req.query; + + loggerPlugin.info(req.uuid, 'GET /plugins/meta name', name); + + toolsLib.plugin.getPlugin(name, { raw: true, attributes: ['name', 'version', 'meta'] }) + .then((plugin) => { + if (!plugin) { + throw new Error('Plugin not found'); + } + + return res.json(plugin); + }) + .catch((err) => { + loggerPlugin.error(req.uuid, 'GET /plugins/meta err', err.message); + return res.status(err.status || 400).json({ message: err.message }); + }); + }); + + app.get('/plugins/script', [ + toolsLib.security.verifyBearerTokenExpressMiddleware(['admin']), + checkSchema({ + name: { + in: ['query'], + errorMessage: 'must be a string', + isString: true, + isLength: { + errorMessage: 'must be minimum length of 1', + options: { min: 1 } + }, + optional: false + } + }) + ], (req, res) => { + const errors = expressValidator.validationResult(req); + if (!errors.isEmpty()) { + return res.status(400).json({ errors: errors.array() }); + } + + loggerPlugin.verbose( + req.uuid, + 'GET /plugins/script auth', + req.auth.sub + ); + + const { name } = req.query; + + loggerPlugin.info(req.uuid, 'GET /plugins/script name', name); + + toolsLib.plugin.getPlugin(name, { raw: true, attributes: ['name', 'version', 'script', 'prescript', 'postscript', 'admin_view'] }) + .then((plugin) => { + if (!plugin) { + throw new Error('Plugin not found'); + } + + return res.json(plugin); + }) + .catch((err) => { + loggerPlugin.error(req.uuid, 'GET /plugins/script err', err.message); + return res.status(err.status || 400).json({ message: err.message }); + }); + }); + + app.get('/plugins/disable', [ + toolsLib.security.verifyBearerTokenExpressMiddleware(['admin']), + checkSchema({ + name: { + in: ['query'], + errorMessage: 'must be a string', + isString: true, + isLength: { + errorMessage: 'must be minimum length of 1', + options: { min: 1 } + }, + optional: false + } + }) + ], (req, res) => { + const errors = expressValidator.validationResult(req); + if (!errors.isEmpty()) { + return res.status(400).json({ errors: errors.array() }); + } + + loggerPlugin.verbose( + req.uuid, + 'GET /plugins/disable auth', + req.auth.sub + ); + + const { name } = req.query; + + loggerPlugin.info(req.uuid, 'GET /plugins/disable name', name); + + toolsLib.plugin.getPlugin(name) + .then((plugin) => { + if (!plugin) { + throw new Error('Plugin not found'); + } + + if (!plugin.enabled) { + throw new Error('Plugin is already disabled'); + } + + return plugin.update({ enabled: false }, { fields: ['enabled']}); + }) + .then(() => { + loggerPlugin.info(req.uuid, 'GET /plugins/disable disabled plugin', name); + + res.json({ message: 'Success' }); + + process.exit(); + }) + .catch((err) => { + loggerPlugin.error(req.uuid, 'GET /plugins/disable err', err.message); + return res.status(err.status || 400).json({ message: err.message }); + }); + }); + + app.get('/plugins/enable', [ + toolsLib.security.verifyBearerTokenExpressMiddleware(['admin']), + checkSchema({ + name: { + in: ['query'], + errorMessage: 'must be a string', + isString: true, + isLength: { + errorMessage: 'must be minimum length of 1', + options: { min: 1 } + }, + optional: false + } + }) + ], (req, res) => { + const errors = expressValidator.validationResult(req); + if (!errors.isEmpty()) { + return res.status(400).json({ errors: errors.array() }); + } + + loggerPlugin.verbose( + req.uuid, + 'GET /plugins/enable auth', + req.auth.sub + ); + + const { name } = req.query; + + loggerPlugin.info(req.uuid, 'GET /plugins/enable name', name); + + toolsLib.plugin.getPlugin(name) + .then((plugin) => { + if (!plugin) { + throw new Error('Plugin not found'); + } + + if (plugin.enabled) { + throw new Error('Plugin is already enabled'); + } + + return plugin.update({ enabled: true }, { fields: ['enabled']}); + }) + .then(() => { + loggerPlugin.info(req.uuid, 'GET /plugins/enable enabled plugin', name); + + res.json({ message: 'Success' }); + + process.exit(); + }) + .catch((err) => { + loggerPlugin.error(req.uuid, 'GET /plugins/enable err', err.message); + return res.status(err.status || 400).json({ message: err.message }); + }); + }); + + toolsLib.database.findAll('plugin', { + where: { enabled: true }, + raw: true + }) + .then(async (plugins) => { + for (let plugin of plugins) { + try { + loggerPlugin.verbose('plugin', plugin.name, 'enabling'); + const context = { + app, + toolsLib, + lodash, + expressValidator, + loggerPlugin, + multer, + moment, + meta: plugin.meta, + installedLibraries: {} + }; + if (plugin.prescript.install) { + loggerPlugin.verbose('plugin', plugin.name, 'installing packages'); + for (let library of plugin.prescript.install) { + context.installedLibraries[library] = await installLibrary(library); + } + loggerPlugin.verbose('plugin', plugin.name, 'packages installed'); + } + + _eval(plugin.script, plugin.name, context, true); + loggerPlugin.verbose('plugin', plugin.name, 'enabled'); + } catch (err) { + loggerPlugin.error('plugin', plugin.name, 'error while installing prepackages', err.message); + } + } + }); + } + }); \ No newline at end of file diff --git a/server/tools/Dockerfile.pm2 b/server/tools/Dockerfile.pm2 new file mode 100644 index 0000000000..da36182dba --- /dev/null +++ b/server/tools/Dockerfile.pm2 @@ -0,0 +1,37 @@ +### Multi-Stage Build Dockerfile + +### Build section +FROM node:10.15.3-stretch-slim as build + +RUN apt-get update && apt-get install -y --no-install-recommends git python build-essential && rm -rf /var/lib/apt/lists/* + +## DISTRIBUTION MODE +ENV NODE_ENV=production + +RUN mkdir -p /app/logs + +COPY package.json /app/package.json + +COPY . /app + +WORKDIR /app + +RUN npm install + +FROM node:10.15.3-stretch-slim + +COPY --from=build /app /app + +RUN apt-get update && apt-get install -y --no-install-recommends git python build-essential && rm -rf /var/lib/apt/lists/* + +RUN npm install pm2@3.2.7 sequelize-cli@5.4.0 mocha -g + +## DISTRIBUTION MODE +ENV NODE_ENV=production + +# SERVER PORT +EXPOSE 10010 10080 10011 + +WORKDIR /app + +ENTRYPOINT ["/app/entrypoint.sh"] diff --git a/server/tools/dbs/checkConfig.js b/server/tools/dbs/checkConfig.js new file mode 100644 index 0000000000..b6054e3b3b --- /dev/null +++ b/server/tools/dbs/checkConfig.js @@ -0,0 +1,95 @@ +'use strict'; + +const { Status } = require('../../db/models'); +const { publisher } = require('../../db/pubsub'); +const { CONFIGURATION_CHANNEL } = require('../../constants'); +const { isBoolean } = require('lodash'); + +Status.findOne() + .then((status) => { + const existingKitConfigurations = status.dataValues.kit; + const existingSecrets = status.dataValues.secrets; + const kit = { + api_name: existingKitConfigurations.api_name || process.env.API_NAME || '', + description: existingKitConfigurations.description || '', + color: existingKitConfigurations.color || {}, + interface: existingKitConfigurations.interface || {}, + icons: existingKitConfigurations.icons || {}, + strings: existingKitConfigurations.strings || {}, + title: existingKitConfigurations.title || '', + links: existingKitConfigurations.links || { + twitter: '', + instagram: '', + telegram: '', + facebook: '', + linkedin: '', + github: '', + contact: '', + helpdesk: '', + terms: '', + privacy: '', + api: process.env.API_HOST || '', + whitepaper: '', + website: '', + information: '', + }, + setup_completed: isBoolean(existingKitConfigurations.setup_completed) ? existingKitConfigurations.setup_completed : false, + native_currency: existingKitConfigurations.native_currency || process.env.NATIVE_CURRENCY, + logo_image: existingKitConfigurations.logo_image || existingKitConfigurations.logo_path || process.env.LOGO_IMAGE || 'https://dash.testnet.bitholla.com/assets/img/hex-pattern-icon-black-01.svg', + valid_languages: existingKitConfigurations.valid_languages || process.env.VALID_LANGUAGES || 'en,fa,ko,ar,fr', + new_user_is_activated: existingKitConfigurations.new_user_is_activated || (process.env.NEW_USER_IS_ACTIVATED && process.env.NEW_USER_IS_ACTIVATED === 'true') || false, + captcha: { + site_key: existingKitConfigurations.captcha ? (existingKitConfigurations.captcha.site_key || process.env.CAPTCHA_SITE_KEY) : process.env.CAPTCHA_SITE_KEY + }, + defaults: { + language: existingKitConfigurations.defaults ? (existingKitConfigurations.defaults.language || process.env.NEW_USER_DEFAULT_LANGUAGE || 'en') : (process.env.NEW_USER_DEFAULT_LANGUAGE || 'en'), + theme: existingKitConfigurations.defaults ? (existingKitConfigurations.defaults.theme || process.env.DEFAULT_THEME || 'white') : (process.env.DEFAULT_THEME || 'white') + }, + features: existingKitConfigurations.features || {}, + meta: existingKitConfigurations.meta || {}, + }; + + const secrets = { + allowed_domains: existingSecrets.allowed_domains || (process.env.ALLOWED_DOMAINS ? process.env.ALLOWED_DOMAINS.split(',') : []), + admin_whitelist: existingSecrets.admin_whitelist || (process.env.ADMIN_WHITELIST_IP ? process.env.ADMIN_WHITELIST_IP.split(',') : []), + security: { + token_time: existingSecrets.security ? (existingSecrets.security.token_time || '24h') : '24h', + withdrawal_token_expiry: existingSecrets.security ? (existingSecrets.security.withdrawal_token_expiry || 300000) : 300000 + }, + emails: { + timezone: existingSecrets.emails ? (existingSecrets.emails.timzeone || process.env.EMAILS_TIMEZONE || '') : (process.env.EMAILS_TIMEZONE || ''), + send_email_to_support: existingSecrets.emails ? (existingSecrets.emails.send_email_to_support || (process.env.SEND_EMAIL_TO_SUPPORT && process.env.SEND_EMAIL_TO_SUPPORT === 'true') || false) : ((process.env.SEND_EMAIL_TO_SUPPORT && process.env.SEND_EMAIL_TO_SUPPORT === 'true') || false), + sender: existingSecrets.emails ? (existingSecrets.emails.sender || process.env.SENDER_EMAIL || '') : (process.env.SENDER_EMAIL || ''), + audit: existingSecrets.audit ? (existingSecrets.emails.audit || process.env.ADMIN_EMAIL || '') : (process.env.ADMIN_EMAIL || '') + }, + captcha: { + secret_key: existingSecrets.captcha ? (existingSecrets.captcha.secret_key || process.env.CAPTCHA_SECRET_KEY) : process.env.CAPTCHA_SECRET_KEY + }, + smtp: { + server: existingSecrets.smtp ? (existingSecrets.smtp.server || process.env.SMTP_SERVER || '') : (process.env.SMTP_SERVER || ''), + port: existingSecrets.smtp ? (existingSecrets.smtp.port || process.env.SMTP_PORT || 587) : (process.env.SMTP_PORT || 587), + user: existingSecrets.smtp ? (existingSecrets.smtp.user || process.env.SMTP_USER) : process.env.SMTP_USER, + password: existingSecrets.smtp ? (existingSecrets.smtp.password || process.env.SMTP_PASSWORD) : (process.env.SMTP_PASSWORD) + } + }; + + return status.update( + { kit, secrets }, + { fields: ['kit', 'secrets'] } + ); + }) + .then((data) => { + publisher.publish( + CONFIGURATION_CHANNEL, + JSON.stringify({ + type: 'update', + data: { kit: data.kit, secrets: data.secrets } + }) + ); + console.log('tools/dbs/checkConfig successfully checked/updated'); + process.exit(0); + }) + .catch((err) => { + console.error('tools/dbs/checkConfig err', err); + process.exit(1); + }); diff --git a/server/tools/dbs/flushRedis.js b/server/tools/dbs/flushRedis.js new file mode 100644 index 0000000000..2585050ca7 --- /dev/null +++ b/server/tools/dbs/flushRedis.js @@ -0,0 +1,13 @@ +'use strict'; + +const redis = require('../../db/redis'); + +redis.flushall((err, succeeded) => { + if (err) { + console.error('Error', err); + process.exit(1); + } else { + console.log('Whole Redis is flushed successfully.', succeeded); + process.exit(0); + } +}); diff --git a/server/tools/dbs/runTriggers.js b/server/tools/dbs/runTriggers.js new file mode 100644 index 0000000000..0324f8d117 --- /dev/null +++ b/server/tools/dbs/runTriggers.js @@ -0,0 +1,27 @@ +'use strict'; + +const { sequelize } = require('../../db/models'); + +const functions = [ + // functions + '../../db/functions/create-uuid.js', + // triggers + '../../db/triggers/create_verification-code_after_user.js', + '../../db/triggers/update_userlevel_after_verify.js', +]; + +let sql = ''; +functions.forEach((f) => { + sql += require(f); +}); + +sequelize + .query(sql, { raw: true }) + .then(() => { + console.log('Triggers and functions are successfully set'); + process.exit(0); + }) + .catch((err) => { + console.error('Error', err); + process.exit(1); + }); diff --git a/server/tools/dbs/setActivationCode.js b/server/tools/dbs/setActivationCode.js new file mode 100644 index 0000000000..692cddcfe7 --- /dev/null +++ b/server/tools/dbs/setActivationCode.js @@ -0,0 +1,20 @@ +const { Status } = require('../../db/models'); + +const { ACTIVATION_CODE, API_KEY, API_SECRET } = process.env; + +Status.findOne({}).then((status) => { + status.update({ + activation_code: ACTIVATION_CODE, + activated: true, + api_key: API_KEY, + api_secret: API_SECRET, + }) + .then(() => { + console.log('Activation Code and keys are set'); + process.exit(0); + }) + .catch((err) => { + console.error('Error', err); + process.exit(1); + }); +}); \ No newline at end of file diff --git a/server/tools/dbs/setConfig.js b/server/tools/dbs/setConfig.js new file mode 100644 index 0000000000..adc1348b74 --- /dev/null +++ b/server/tools/dbs/setConfig.js @@ -0,0 +1,111 @@ +'use strict'; + +const { Status } = require('../../db/models'); +const { publisher } = require('../../db/pubsub'); +const { CONFIGURATION_CHANNEL } = require('../../constants'); + +const { + API_NAME, + API_HOST, + LOGO_IMAGE, + EMAILS_TIMEZONE, + VALID_LANGUAGES, + NEW_USER_DEFAULT_LANGUAGE, + SENDER_EMAIL, + DEFAULT_THEME, + NEW_USER_IS_ACTIVATED, + SMTP_SERVER, + SMTP_PORT, + SMTP_USER, + SMTP_PASSWORD, + SEND_EMAIL_TO_SUPPORT, + ALLOWED_DOMAINS, + CAPTCHA_SECRET_KEY, + ADMIN_EMAIL, + CAPTCHA_SITE_KEY, + ADMIN_WHITELIST_IP, + NATIVE_CURRENCY +} = process.env; + +const kit = { + api_name: API_NAME || '', + description: '', + color: {}, + interface: {}, + icons: {}, + strings: {}, + title: '', + links: { + twitter: '', + instagram: '', + telegram: '', + facebook: '', + linkedin: '', + github: '', + contact: '', + helpdesk: '', + terms: '', + privacy: '', + api: API_HOST || '', + whitepaper: '', + website: '', + information: '', + }, + setup_completed: false, + native_currency: NATIVE_CURRENCY, + logo_image: LOGO_IMAGE || 'https://dash.testnet.bitholla.com/assets/img/hex-pattern-icon-black-01.svg', + valid_languages: VALID_LANGUAGES || 'en,fa,ko,ar,fr', + new_user_is_activated: (NEW_USER_IS_ACTIVATED && NEW_USER_IS_ACTIVATED === 'true') || false, + captcha: { + site_key: CAPTCHA_SITE_KEY + }, + defaults: { + language: NEW_USER_DEFAULT_LANGUAGE || 'en', + theme: DEFAULT_THEME || 'white' + }, + features: {}, + meta: {} +}; + +const secrets = { + allowed_domains: ALLOWED_DOMAINS ? ALLOWED_DOMAINS.split(',') : [], + admin_whitelist: ADMIN_WHITELIST_IP ? ADMIN_WHITELIST_IP.split(',') : [], + security: { + token_time: '24h', + withdrawal_token_expiry: 300000 + }, + emails: { + timezone: EMAILS_TIMEZONE || '', + send_email_to_support: (SEND_EMAIL_TO_SUPPORT && SEND_EMAIL_TO_SUPPORT === 'true') || false, + sender: SENDER_EMAIL || '', + audit: ADMIN_EMAIL || '' + }, + captcha: { + secret_key: CAPTCHA_SECRET_KEY + }, + smtp: { + server: SMTP_SERVER || '', + port: SMTP_PORT || 587, + user: SMTP_USER, + password: SMTP_PASSWORD + } +}; + +Status.findOne({}).then((status) => { + status.update({ kit, secrets }, { fields: ['kit', 'secrets'], returning: true }) + .then((data) => { + publisher.publish( + CONFIGURATION_CHANNEL, + JSON.stringify({ + type: 'update', + data: { kit: data.dataValues.kit, secrets: data.dataValues.secrets } + }) + ); + console.log('Kit and Secrets are updated'); + process.exit(0); + }) + .catch((err) => { + console.error('Error', err); + process.exit(1); + }); +}); \ No newline at end of file diff --git a/server/tools/dbs/setExchange.js b/server/tools/dbs/setExchange.js new file mode 100644 index 0000000000..de02111853 --- /dev/null +++ b/server/tools/dbs/setExchange.js @@ -0,0 +1,28 @@ +const { Status } = require('../../db/models'); + +const { ACTIVATION_CODE, EXCHANGE_NAME, EXCHANGE_URL } = process.env; + +const exchange = { + activated: true +}; +if (EXCHANGE_NAME) { + exchange.name = EXCHANGE_NAME; +} +if (EXCHANGE_URL) { + exchange.url = EXCHANGE_URL; +} +if (ACTIVATION_CODE) { + exchange.activation_code = ACTIVATION_CODE; +} + +Status.findOne({}).then((status) => { + status.update(exchange) + .then(() => { + console.log('Exchange is updated'); + process.exit(0); + }) + .catch((err) => { + console.error('Error', err); + process.exit(1); + }); +}); \ No newline at end of file diff --git a/server/tools/dbs/setKitVersion.js b/server/tools/dbs/setKitVersion.js new file mode 100644 index 0000000000..f6a71dc7c7 --- /dev/null +++ b/server/tools/dbs/setKitVersion.js @@ -0,0 +1,19 @@ +const { Status } = require('../../db/models'); +const { publisher } = require('../../db/pubsub'); +const { INIT_CHANNEL } = require('../../constants'); + +Status.findOne({}) + .then((status) => { + return status.update({ + kit_version: process.env.KIT_VERSION || status.kit_version + }, { fields: ['kit_version'], returning: true }); + }) + .then(() => { + publisher.publish(INIT_CHANNEL, JSON.stringify({ type: 'refreshInit' })); + console.log('Kit version is updated'); + process.exit(0); + }) + .catch((err) => { + console.error('Error', err); + process.exit(1); + }); \ No newline at end of file diff --git a/server/tools/dbs/setSecurity.js b/server/tools/dbs/setSecurity.js new file mode 100644 index 0000000000..4c808ed0ec --- /dev/null +++ b/server/tools/dbs/setSecurity.js @@ -0,0 +1,45 @@ +const { Status } = require('../../db/models'); +const { CONFIGURATION_CHANNEL } = require('../../constants'); +const { + ALLOWED_DOMAINS, + CAPTCHA_SECRET_KEY, + CAPTCHA_SITE_KEY, + ADMIN_WHITELIST_IP +} = process.env; +const { publisher } = require('../../db/pubsub'); + +Status.findOne({}) + .then((status) => { + const kit = { + ...status.kit, + captcha: { + site_key: CAPTCHA_SITE_KEY + } + }; + + const secrets = { + ...status.secrets, + allowed_domains: ALLOWED_DOMAINS ? ALLOWED_DOMAINS.split(',') : [], + admin_whitelist: ADMIN_WHITELIST_IP ? ADMIN_WHITELIST_IP.split(',') : [], + captcha: { + secret_key: CAPTCHA_SECRET_KEY + } + }; + + return status.update({ kit, secrets }, { fields: ['kit', 'secrets'], returning: true }); + }) + .then((data) => { + publisher.publish( + CONFIGURATION_CHANNEL, + JSON.stringify({ + type: 'update', + data: { kit: data.kit, secrets: data.secrets } + }) + ); + console.log('Security values are reset'); + process.exit(0); + }) + .catch((err) => { + console.error('Error', err); + process.exit(1); + }); \ No newline at end of file diff --git a/server/tools/general/random.js b/server/tools/general/random.js new file mode 100644 index 0000000000..540dcfc5b6 --- /dev/null +++ b/server/tools/general/random.js @@ -0,0 +1,6 @@ +'use strict'; + +const crypto = require('crypto'); + +const size = parseInt(process.env.RANDOM_SIZE) || 20; +console.log(crypto.randomBytes(size).toString('hex')); \ No newline at end of file diff --git a/server/tools/hollaex-kit.env.local.example b/server/tools/hollaex-kit.env.local.example new file mode 100644 index 0000000000..58abed7655 --- /dev/null +++ b/server/tools/hollaex-kit.env.local.example @@ -0,0 +1,85 @@ +DEPLOYMENT_MODE=all + +API_HOST=localhost +API_NAME=hollaex-kit +DOMAIN=http://localhost:3000 +NETWORK=testnet + +ACTIVATION_CODE= + +NATIVE_CURRENCY= + +CURRENCIES=xht,usdt,btc,eth,bch,xrp +DEFAULT_THEME=dark +EMAILS_TIMEZONE=UTC +LOGO_IMAGE=https://s3.ap-northeast-2.amazonaws.com/public-holla-images/bitholla-logo.png +NEW_USER_DEFAULT_LANGUAGE=en +NEW_USER_IS_ACTIVATED=true +NODE_ENV=development +PAIRS=xht-usdt + +PORT=10010 +WEBSOCKET_PORT=10080 + +PUBSUB_HOST=hollaex-kit-redis +PUBSUB_PORT=6379 +PUBSUB_PASSWORD=bitholla +REDIS_HOST=hollaex-kit-redis +REDIS_PORT=6379 +REDIS_PASSWORD=bitholla + +SENDER_EMAIL=support@holla.tech + +SUPPORT_EMAIL=support@holla.tech +VALID_LANGUAGES=en + + +ADMIN_EMAIL=admin@hollaex.com +ADMIN_PASSWORD= + +ISSUER=bitholla +SECRET=secret +CAPTCHA_SECRET_KEY= +CAPTCHA_SITE_KEY= + +ADMIN_WHITELIST_IP= + +DB_HOST=hollaex-kit-db +DB_NAME=hollaex +DB_PASSWORD=root +DB_PORT=5432 +DB_USERNAME=admin +DB_DIALECT=postgres +DB_SSL=false + +FRESHDESK_HOST= +FRESHDESK_AUTH= +FRESHDESK_KEY= + +ZENDESK_HOST= +ZENDESK_KEY= + +ID_DOCS_BUCKET= +S3_ACCESSKEYID= +S3_SECRETACCESSKEY= +SES_ACCESSKEYID= +SES_REGION= +SES_SECRETACCESSKEY= +SNS_ACCESSKEYID= +SNS_REGION= +SNS_SECRETACCESSKEY= + +SMTP_SERVER= +SMTP_PORT= +SMTP_USER= +SMTP_PASSWORD= + +PLUGINS= + +SEND_EMAIL_TO_SUPPORT= +ALLOWED_DOMAINS= + +API_KEY= +API_SECRET= + +KIT_VERSION= \ No newline at end of file diff --git a/server/tools/nginx/conf.d/upstream.conf b/server/tools/nginx/conf.d/upstream.conf new file mode 100644 index 0000000000..a827cfd8a4 --- /dev/null +++ b/server/tools/nginx/conf.d/upstream.conf @@ -0,0 +1,13 @@ + + upstream api { + server hollaex-kit-server:10010; + } + + upstream socket { + ip_hash; + server hollaex-kit-server:10080; + } + + upstream plugins { + server hollaex-kit-server:10011; + } \ No newline at end of file diff --git a/server/tools/nginx/logs/error.log b/server/tools/nginx/logs/error.log new file mode 100644 index 0000000000..e69de29bb2 diff --git a/server/tools/nginx/logs/hollaex.access.log b/server/tools/nginx/logs/hollaex.access.log new file mode 100644 index 0000000000..e69de29bb2 diff --git a/server/tools/nginx/mime.types b/server/tools/nginx/mime.types new file mode 100644 index 0000000000..25ae94eb7a --- /dev/null +++ b/server/tools/nginx/mime.types @@ -0,0 +1,48 @@ +types { + text/html html htm shtml; + text/css css; + text/xml xml rss; + image/gif gif; + image/jpeg jpeg jpg; + application/x-javascript js; + text/plain txt; + text/x-component htc; + text/mathml mml; + image/png png; + image/x-icon ico; + image/x-jng jng; + image/vnd.wap.wbmp wbmp; + application/java-archive jar war ear; + application/mac-binhex40 hqx; + application/pdf pdf; + application/x-cocoa cco; + application/x-java-archive-diff jardiff; + application/x-java-jnlp-file jnlp; + application/x-makeself run; + application/x-perl pl pm; + application/x-pilot prc pdb; + application/x-rar-compressed rar; + application/x-redhat-package-manager rpm; + application/x-sea sea; + application/x-shockwave-flash swf; + application/x-stuffit sit; + application/x-tcl tcl tk; + application/x-x509-ca-cert der pem crt; + application/x-xpinstall xpi; + application/zip zip; + application/octet-stream deb; + application/octet-stream bin exe dll; + application/octet-stream dmg; + application/octet-stream eot; + application/octet-stream iso img; + application/octet-stream msi msp msm; + audio/mpeg mp3; + audio/x-realaudio ra; + video/mpeg mpeg mpg; + video/quicktime mov; + video/x-flv flv; + video/x-msvideo avi; + video/x-ms-wmv wmv; + video/x-ms-asf asx asf; + video/x-mng mng; +} diff --git a/server/tools/nginx/nginx.conf b/server/tools/nginx/nginx.conf new file mode 100644 index 0000000000..cfc0bdda88 --- /dev/null +++ b/server/tools/nginx/nginx.conf @@ -0,0 +1,69 @@ +worker_processes 4; + +error_log /var/log/error.log warn; +pid /var/log/nginx.pid; + +worker_rlimit_nofile 8192; + +events { + worker_connections 1024; +} + +http { + include /etc/nginx/mime.types; + include /etc/nginx/proxy.conf; + include /etc/nginx/conf.d/upstream.conf; + + default_type application/octet-stream; + log_format main '$remote_addr - $remote_user [$time_local] $status ' + '"$request" $body_bytes_sent "$http_referer" ' + '"$http_user_agent" "$http_x_forwarded_for"'; + + limit_req_zone $remote_addr zone=api:1m rate=2r/s; + limit_req_zone $remote_addr zone=order:1m rate=5r/s; + + #Server blockes will be automatically generated + +server { + listen 80; + server_name hollaex; + access_log /var/log/hollaex.access.log main; + + include /etc/nginx/conf.d/plugin*.conf; + + location /api-docs { + proxy_pass http://api; + } + + location /docs { + proxy_pass http://api; + } + + location /v2/order { + proxy_pass http://api; + } + + location /v2 { + proxy_pass http://api; + } + + location /plugins { + proxy_pass http://plugins; + } + + location /stream { + proxy_http_version 1.1; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection "upgrade"; + + proxy_pass http://socket; + } + + error_page 429 /429.html; + location = /429.html { + root /usr/share/nginx/html; + internal; + } + } + } + diff --git a/server/tools/nginx/proxy.conf b/server/tools/nginx/proxy.conf new file mode 100644 index 0000000000..966876fade --- /dev/null +++ b/server/tools/nginx/proxy.conf @@ -0,0 +1,11 @@ +proxy_redirect off; +proxy_set_header Host $host; +proxy_set_header X-Real-IP $remote_addr; +proxy_set_header X-Real-Origin $http_origin; +proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; +client_max_body_size 10m; +client_body_buffer_size 128k; +proxy_connect_timeout 90; +proxy_send_timeout 90; +proxy_read_timeout 90; +proxy_buffers 32 4k; diff --git a/server/tools/nginx/static/429.html b/server/tools/nginx/static/429.html new file mode 100644 index 0000000000..3b90326039 --- /dev/null +++ b/server/tools/nginx/static/429.html @@ -0,0 +1,9 @@ + + + Too Many Requests + + +

    Too Many Requests

    +

    There is a limit of 1 requests per second. Try again soon.

    + + diff --git a/server/utils/conversion.js b/server/utils/conversion.js new file mode 100644 index 0000000000..e39ff4bc3e --- /dev/null +++ b/server/utils/conversion.js @@ -0,0 +1,9 @@ +'use strict'; + +const toBool = (value) => { + return value === 'true' ? true : value === 'false' ? false : value; +}; + +module.exports = { + toBool +}; \ No newline at end of file diff --git a/server/utils/index.js b/server/utils/index.js new file mode 100644 index 0000000000..89fa63f3e4 --- /dev/null +++ b/server/utils/index.js @@ -0,0 +1,13 @@ +'use strict'; + +const initializeMode = (modeString = '') => { + let modes = []; + modeString.split(',').forEach((mode = '') => { + modes.push(mode.toLowerCase().trim()); + }); + return modes; +}; + +module.exports = { + initializeMode +}; diff --git a/server/utils/security.js b/server/utils/security.js new file mode 100644 index 0000000000..e99d9c445a --- /dev/null +++ b/server/utils/security.js @@ -0,0 +1,31 @@ +'use strict'; + +const bcrypt = require('bcryptjs'); +const randomString = require('random-string'); + + +const generateHash = (password) => { + const { SALT_ROUNDS } = require('../constants'); + return bcrypt.hash(password, SALT_ROUNDS); +}; + +const generateHashSync = (password) => { + const { SALT_ROUNDS } = require('../constants'); + return bcrypt.hashSync(password, SALT_ROUNDS); +}; + +const generateAffiliationCode = () => { + const { AFFILIATION_CODE_LENGTH } = require('../constants'); + return randomString({ + length: AFFILIATION_CODE_LENGTH, + numeric: true, + letters: true + }).toUpperCase(); +}; + + +module.exports = { + generateHash, + generateHashSync, + generateAffiliationCode +}; \ No newline at end of file diff --git a/server/utils/strings.js b/server/utils/strings.js new file mode 100644 index 0000000000..05254091e4 --- /dev/null +++ b/server/utils/strings.js @@ -0,0 +1,15 @@ +'use strict'; +const toolsLib = require('hollaex-tools-lib'); +const DEFAULT_LANGUAGE = () => toolsLib.getKitConfig().defaults.language; +const VALID_LANGUAGES = () => toolsLib.getKitConfig().valid_languages; + +const getValidLanguage = (language = DEFAULT_LANGUAGE()) => { + if (VALID_LANGUAGES().indexOf(language) > -1) { + return language; + } + return DEFAULT_LANGUAGE(); +}; + +module.exports = { + getValidLanguage +}; diff --git a/server/ws/channel.js b/server/ws/channel.js new file mode 100644 index 0000000000..8ab554133a --- /dev/null +++ b/server/ws/channel.js @@ -0,0 +1,54 @@ +'use strict'; + +const { findIndex } = require('lodash'); +const { loggerWebsocket } = require('../config/logger'); + +let channels = {}; + +const getChannels = () => { + return channels; +}; + +const addSubscriber = (channel, ws) => { + if (!channels[channel]) { + channels[channel] = []; + } + + const index = findIndex(channels[channel], socket => { + return socket.id == ws.id; + }); + + if (index === -1) { + channels[channel].push(ws); + loggerWebsocket.verbose(ws.id, 'ws/channel/addSubscriber', channel, ws.id); + } else { + throw new Error(`Already subscribed to channel ${channel}`); + } +}; + +const removeSubscriber = (channel, ws, type = undefined) => { + const index = findIndex(channels[channel], socket => { + return socket.id == ws.id; + }); + + if (index > -1) { + channels[channel].splice(index, 1); + if (type === 'private' && channels[channel].length === 0) { + delete channels[channel]; + } + loggerWebsocket.verbose(ws.id, 'ws/channel/removeSubscriber', channel, ws.id); + } else { + throw new Error(`Not subscribed to channel ${channel}`); + } +}; + +const resetChannels = () => { + channels = {}; +}; + +module.exports = { + getChannels, + addSubscriber, + removeSubscriber, + resetChannels +}; \ No newline at end of file diff --git a/server/ws/chat/ban.js b/server/ws/chat/ban.js new file mode 100644 index 0000000000..5415947dac --- /dev/null +++ b/server/ws/chat/ban.js @@ -0,0 +1,62 @@ +'use strict'; +const { storeData, restoreData } = require('./utils'); +const { getUserIdByUsername } = require('./username'); +const { loggerChat } = require('../../config/logger'); +const { getChannels } = require('../channel'); +const { each } = require('lodash'); +const { WEBSOCKET_CHANNEL } = require('../../constants'); + +const BANS_KEY = 'WS:BANS'; + +let BANS = {}; + +const banUser = (username) => { + if (username) { + getUserIdByUsername(username).then((id) => { + BANS[id] = username; + storeData(BANS_KEY, BANS); + each(getChannels()[WEBSOCKET_CHANNEL('chat')], (ws) => { + sendBannedUsers(ws); + }); + }); + } +}; + +const unbanUser = (user_id) => { + if (user_id) { + BANS[user_id] = 0; + delete BANS[user_id]; + storeData(BANS_KEY, BANS); + each(getChannels()[WEBSOCKET_CHANNEL('chat')], (ws) => { + sendBannedUsers(ws); + }); + } +}; + +const getBannedUsers = () => { + return BANS; +}; + +const sendBannedUsers = (ws) => { + ws.send(JSON.stringify({ + topic: 'chat', + action: 'bannedUsers', + data: getBannedUsers() + })); +}; + +const isUserBanned = (id) => { + return BANS[id]; +}; + +restoreData(BANS_KEY).then((bans = {}) => { + loggerChat.debug('retore_bannedUsers', bans); + BANS = bans; +}); + +module.exports = { + banUser, + unbanUser, + isUserBanned, + sendBannedUsers +}; diff --git a/server/ws/chat/index.js b/server/ws/chat/index.js new file mode 100644 index 0000000000..9af971eaf6 --- /dev/null +++ b/server/ws/chat/index.js @@ -0,0 +1,94 @@ +'use strict'; +const { debounce, each } = require('lodash'); +const { + CHAT_MESSAGE_CHANNEL, + CHAT_MAX_MESSAGES, + WEBSOCKET_CHANNEL +} = require('../../constants'); +const { storeData, restoreData } = require('./utils'); +const { isUserBanned } = require('./ban'); +const moment = require('moment'); +const { subscriber, publisher } = require('../../db/pubsub'); +const { getChannels } = require('../channel'); + +const MESSAGES_KEY = 'WS:MESSAGES'; +let MESSAGES = []; + +// redis subscriber, get message and updates MESSAGES array +subscriber.subscribe(CHAT_MESSAGE_CHANNEL); +subscriber.on('message', (channel, data) => { + if (channel === CHAT_MESSAGE_CHANNEL) { + data = JSON.parse(data); + if (data.type === 'message') { + MESSAGES.push(data.data); + } else if (data.type === 'deleteMessage') { + MESSAGES.splice(data.data, 1); + } + } +}); + +const getMessages = (limit = CHAT_MAX_MESSAGES) => { + return MESSAGES.slice(-limit); +}; + +const sendInitialMessages = (ws) => { + ws.send(JSON.stringify({ + topic: 'chat', + action: 'init', + data: getMessages() + })); +}; + +const addMessage = (username, verification_level, userId, message) => { + const timestamp = moment().unix(); + if (!isUserBanned(userId)) { + const data = { + id: `${timestamp}-${username}`, + username, + verification_level, + message, + timestamp + }; + publisher.publish(CHAT_MESSAGE_CHANNEL, JSON.stringify({ type: 'message', data })); + publishChatMessage('addMessage', data); + maintenanceMessageList(); + } else { + throw new Error('User is banned'); + } +}; + +const deleteMessage = (idToDelete) => { + const indexOfMessage = MESSAGES.findIndex(({ id }) => id === idToDelete); + if (indexOfMessage > -1) { + publisher.publish(CHAT_MESSAGE_CHANNEL, JSON.stringify({ type: 'deleteMessage', data: indexOfMessage })); + maintenanceMessageList(); + publishChatMessage('deleteMessage', idToDelete); + } +}; + +const publishChatMessage = (event, data) => { + each(getChannels()[WEBSOCKET_CHANNEL('chat')], (ws) => { + ws.send(JSON.stringify({ + topic: 'chat', + action: event, + data + })); + }); +}; + +const maintenanceMessageList = debounce(() => { + MESSAGES = getMessages(); + storeData(MESSAGES_KEY, MESSAGES); +}, 5000); + +restoreData(MESSAGES_KEY).then((messages) => { + MESSAGES = messages; +}); + +module.exports = { + getMessages, + addMessage, + deleteMessage, + publishChatMessage, + sendInitialMessages +}; diff --git a/server/ws/chat/username.js b/server/ws/chat/username.js new file mode 100644 index 0000000000..cc3fe8806c --- /dev/null +++ b/server/ws/chat/username.js @@ -0,0 +1,56 @@ +'use strict'; + +const { User } = require('../../db/models'); +const DAY = 1000 * 60 * 60 * 24; + +let usernames = {}; + +setInterval(() => { + usernames = {}; +}, DAY); + +const findUsername = (id) => { + return User.findOne({ + where: { id }, + attributes: ['id', 'username', 'verification_level', 'settings'] + }).then((user) => { + return [ + user.username, + user.settings.chat.set_username, + user.verification_level + ]; + }); +}; + +const getUsername = (id) => { + if (usernames[id]) { + return Promise.resolve(usernames[id]); + } else { + return changeUsername(id); + } +}; + +const changeUsername = async (id) => { + return findUsername(id).then( + ([username, set_username = false, verification_level = 1]) => { + if (set_username) { + usernames[id] = { username, verification_level }; + } + return { username, verification_level }; + } + ); +}; +const getUserIdByUsername = (username) => { + return User.findOne({ + where: { username }, + attributes: ['id', 'username'] + }).then((user) => { + return user.id; + }); +}; + +module.exports = { + getUsername, + getUserIdByUsername, + changeUsername +}; diff --git a/server/ws/chat/utils.js b/server/ws/chat/utils.js new file mode 100644 index 0000000000..4a594ca16b --- /dev/null +++ b/server/ws/chat/utils.js @@ -0,0 +1,22 @@ +'use strict'; +const redis = require('../../db/redis').duplicate(); + +const storeData = (key = '', data = []) => { + return redis.setAsync(key, JSON.stringify(data)); +}; + +const restoreData = (key = '') => { + return redis.getAsync(key).then((data) => { + if (!data) { + if(key === 'WS:BANS') return {}; + return []; + } + data = JSON.parse(data); + return data; + }); +}; + +module.exports = { + storeData, + restoreData +}; diff --git a/server/ws/hub.js b/server/ws/hub.js new file mode 100644 index 0000000000..cecc824a49 --- /dev/null +++ b/server/ws/hub.js @@ -0,0 +1,121 @@ +'use strict'; + +const { loggerWebsocket } = require('../config/logger'); +const { checkStatus } = require('../init'); +const { subscriber } = require('../db/pubsub'); +const { WS_HUB_CHANNEL, WEBSOCKET_CHANNEL } = require('../constants'); +const { each } = require('lodash'); +const { getChannels, resetChannels } = require('./channel'); +const { updateOrderbookData, updateTradeData, resetPublicData } = require('./publicData'); + +let networkNodeLib = null; +let wsConnected = false; +const hubConnected = () => wsConnected; + +subscriber.on('message', (channel, message) => { + if (channel === WS_HUB_CHANNEL) { + const { action } = JSON.parse(message); + switch(action) { + case 'restart': + if (hubConnected() && networkNodeLib && networkNodeLib.wsConnected()) { + networkNodeLib.disconnect(); + connect(); + } + break; + default: + break; + } + } + return; +}); + +subscriber.subscribe(WS_HUB_CHANNEL); + +const connect = () => { + checkStatus() + .then((nodeLib) => { + if (nodeLib) { + networkNodeLib = nodeLib; + networkNodeLib.connect(['orderbook', 'trade']); + + networkNodeLib.ws.on('open', () => { + wsConnected = true; + loggerWebsocket.info('ws/hub open'); + }); + + networkNodeLib.ws.on('unexpected-response', () => { + wsConnected = false; + loggerWebsocket.error('ws/hub unexpected-response'); + }); + + networkNodeLib.ws.on('error', (err) => { + wsConnected = false; + loggerWebsocket.error('ws/hub err', err.message); + }); + + networkNodeLib.ws.on('close', () => { + wsConnected = false; + loggerWebsocket.info('ws/hub close'); + closeAllClients(); + }); + + networkNodeLib.ws.on('message', (data) => { + if (data !== 'pong') { + try { + data = JSON.parse(data); + } catch (err) { + loggerWebsocket.error('ws/hub message err', err.message); + } + handleHubData(data); + } + }); + } + }); +}; + +const sendNetworkWsMessage = (op, topic, networkId) => { + if (hubConnected()) { + networkNodeLib[op]([`${topic}:${networkId}`]); + } +}; + +const handleHubData = (data) => { + switch (data.topic) { + case 'orderbook': + updateOrderbookData(data); + each(getChannels()[WEBSOCKET_CHANNEL(data.topic, data.symbol)], (ws) => { + ws.send(JSON.stringify(data)); + }); + break; + case 'trade': + updateTradeData(data); + each(getChannels()[WEBSOCKET_CHANNEL(data.topic, data.symbol)], (ws) => { + ws.send(JSON.stringify(data)); + }); + break; + case 'order': + case 'wallet': + each(getChannels()[WEBSOCKET_CHANNEL(data.topic, data.user_id)], (ws) => { + ws.send(JSON.stringify(data)); + }); + break; + default: + break; + } +}; + +const closeAllClients = () => { + each(getChannels(), (channel) => { + each(channel, (ws) => { + ws.close(); + }); + }); + resetChannels(); + resetPublicData(); +}; + +module.exports = { + sendNetworkWsMessage, + connect, + hubConnected +}; diff --git a/server/ws/index.js b/server/ws/index.js new file mode 100644 index 0000000000..7a65af1543 --- /dev/null +++ b/server/ws/index.js @@ -0,0 +1,93 @@ +'use strict'; + +const wss = require('./server'); +const uuid = require('uuid/v4'); +const { loggerWebsocket } = require('../config/logger'); +const { + WS_EMPTY_MESSAGE, + WS_WRONG_INPUT, + WS_WELCOME, + WS_UNSUPPORTED_OPERATION, + WS_USER_AUTHENTICATED +} = require('../messages'); +const { initializeTopic, terminateTopic, authorizeUser, terminateClosedChannels, handleChatData } = require('./sub'); +const { connect, hubConnected } = require('./hub'); +const { setWsHeartbeat } = require('ws-heartbeat/server'); + +wss.on('connection', (ws, req) => { + // attaching unique id and authorization to the socket + ws.id = uuid(); + ws.auth = req.auth; + + // send welcome message + ws.send(JSON.stringify({ message: WS_WELCOME })); + + // send authenticated message if authenticated + if (ws.auth.sub) { + ws.send(JSON.stringify({ message: WS_USER_AUTHENTICATED(ws.auth.sub.email) })); + } + + ws.on('message', (message) => { + try { + // throw error if empty message + if (!message || message.length === 0) { + throw new Error(WS_EMPTY_MESSAGE); + } + + try { + message = JSON.parse(message); + } catch (err) { + throw new Error(WS_WRONG_INPUT); + } + + const { op, args } = message; + if (op === 'ping') { + ws.send(JSON.stringify({ message: 'pong' })); + } else if (op === 'subscribe') { + loggerWebsocket.info(ws.id, 'ws/index/message', message); + args.forEach(arg => { + let [topic, symbol] = arg.split(':'); + initializeTopic(topic, ws, symbol); + }); + } else if (op === 'unsubscribe') { + loggerWebsocket.info(ws.id, 'ws/index/message', message); + args.forEach(arg => { + let [topic, symbol] = arg.split(':'); + terminateTopic(topic, ws, symbol); + }); + } else if (op === 'auth') { + loggerWebsocket.info(ws.id, 'ws/index/message auth'); + const credentials = args[0]; + const ip = req.socket ? req.socket.remoteAddress : undefined; + authorizeUser(credentials, ws, ip); + } else if (op === 'chat') { + loggerWebsocket.info(ws.id, 'ws/index/message', message); + args.forEach(arg => { + const { action, data } = arg; + handleChatData(action, ws, data); + }); + } else { + throw new Error(WS_UNSUPPORTED_OPERATION); + } + } catch (err) { + if (err && err.message) { + loggerWebsocket.error(ws.id, 'ws/index/message catch', err.message); + ws.send(JSON.stringify({ error: err.message })); + } else { + loggerWebsocket.error(ws.id, 'ws/index/message catch', err); + ws.send(JSON.stringify({ error: WS_WRONG_INPUT })); + } + } + }); + + ws.on('close', () => { + if (hubConnected()) { + terminateClosedChannels(ws); + } + }); +}); + +// If no message received within a minute, close connection +setWsHeartbeat(wss, () => {}, 60000); + +connect(); \ No newline at end of file diff --git a/server/ws/publicData.js b/server/ws/publicData.js new file mode 100644 index 0000000000..3ee2fa4dc1 --- /dev/null +++ b/server/ws/publicData.js @@ -0,0 +1,36 @@ +'use strict'; + +let publicData = { + orderbook: {}, + trade: {} +}; + +const getPublicData = () => publicData; + +const resetPublicData = () => { + publicData = { + orderbook: {}, + trade: {} + }; +}; + +const updateOrderbookData = (data) => { + publicData.orderbook[data.symbol] = {...data, action: 'partial'}; +}; + +const updateTradeData = (data) => { + if (data.action === 'partial') { + publicData.trade[data.symbol] = data; + } else { + const updatedTrades = data.data.concat(publicData.trade[data.symbol].data); + publicData.trade[data.symbol].time = data.time; + publicData.trade[data.symbol].data = updatedTrades.length <= 50 ? updatedTrades : updatedTrades.slice(0, 50); + } +}; + +module.exports = { + getPublicData, + resetPublicData, + updateOrderbookData, + updateTradeData +}; \ No newline at end of file diff --git a/server/ws/server.js b/server/ws/server.js new file mode 100644 index 0000000000..1262ca8595 --- /dev/null +++ b/server/ws/server.js @@ -0,0 +1,67 @@ +'use strict'; + +const WebSocket = require('ws'); +const { loggerWebsocket } = require('../config/logger'); +const toolsLib = require('hollaex-tools-lib'); +const { MULTIPLE_API_KEY } = require('../messages'); +const url = require('url'); +const { hubConnected } = require('./hub'); + +const PORT = process.env.WEBSOCKET_PORT || 10080; + +const wss = new WebSocket.Server({ + port: PORT, + verifyClient: (info, next) => { + try { + if (!hubConnected()) { + throw new Error('Hub websocket is disconnected'); + } + + const query = url.parse(info.req.url, true).query; + const bearerToken = query.authorization; + const hmacKey = query['api-key']; + info.req.auth = {}; + if (bearerToken && hmacKey) { + // throw error if both bearer and hmac authentication methods are given + loggerWebsocket.error('ws/server', MULTIPLE_API_KEY); + return next(false, 400, MULTIPLE_API_KEY); + } else if (bearerToken) { + // Function will set req.auth to authenticated token object if successful + info.req.headers.authorization = bearerToken; + toolsLib.security.verifyBearerTokenMiddleware(info.req, null, bearerToken, (err) => { + if (err) { + loggerWebsocket.error('ws/server', err); + return next(false, 403, err.message); + } else { + return next(true); + } + }, true); + } else if (hmacKey) { + info.req.headers['api-key'] = hmacKey; + info.req.headers['api-signature'] = query['api-signature']; + info.req.headers['api-expires'] = query['api-expires']; + info.req.method = 'CONNECT'; + info.req.originalUrl = '/stream'; + // Function will set req.auth to authenticated token object if successful + toolsLib.security.verifyHmacTokenMiddleware(info.req, null, hmacKey, (err) => { + if (err) { + loggerWebsocket.error('ws/server', err); + return next(false, 403, err.message); + } else { + return next(true); + } + }, true); + } else { + // No authentication given so req.auth is empty + return next(true); + } + } catch (err) { + loggerWebsocket.error('ws/server/catch', err.message); + return next(false, 400, err.message); + } + } +}); +loggerWebsocket.verbose(`Ẃebsocket server listening on port: ${PORT}`); + + +module.exports = wss; diff --git a/server/ws/sub.js b/server/ws/sub.js new file mode 100644 index 0000000000..dd46dc0437 --- /dev/null +++ b/server/ws/sub.js @@ -0,0 +1,280 @@ +'use strict'; + +const { getPublicData } = require('./publicData'); +const { addSubscriber, removeSubscriber, getChannels } = require('./channel'); +const { WEBSOCKET_CHANNEL, WS_PUBSUB_DEPOSIT_CHANNEL, ROLES } = require('../constants'); +const { each } = require('lodash'); +const toolsLib = require('hollaex-tools-lib'); +const { loggerWebsocket } = require('../config/logger'); +const { + WS_AUTHENTICATION_REQUIRED, + WS_USER_AUTHENTICATED, + MULTIPLE_API_KEY, + WS_ALREADY_AUTHENTICATED, + WS_MISSING_HEADER, + WS_INVALID_TOPIC +} = require('../messages'); +const { subscriber } = require('../db/pubsub'); +const { sendInitialMessages, addMessage, deleteMessage } = require('./chat'); +const { getUsername, changeUsername } = require('./chat/username'); +const { sendBannedUsers, banUser, unbanUser } = require('./chat/ban'); +const { sendNetworkWsMessage } = require('./hub'); + +subscriber.subscribe(WS_PUBSUB_DEPOSIT_CHANNEL); +subscriber.on('message', (channel, data) => { + if (channel === WS_PUBSUB_DEPOSIT_CHANNEL) { + data = JSON.parse(data); + handleDepositData(data); + } +}); + +const initializeTopic = (topic, ws, symbol) => { + switch (topic) { + case 'orderbook': + case 'trade': + if (symbol) { + if (!toolsLib.subscribedToPair(symbol)) { + throw new Error('Invalid symbol'); + } + addSubscriber(WEBSOCKET_CHANNEL(topic, symbol), ws); + if (getPublicData()[topic][symbol]) { + ws.send(JSON.stringify(getPublicData()[topic][symbol])); + } + } else { + each(toolsLib.getKitPairs(), (pair) => { + try { + addSubscriber(WEBSOCKET_CHANNEL(topic, pair), ws); + if (getPublicData()[topic][pair]) { + ws.send(JSON.stringify(getPublicData()[topic][pair])); + } + } catch (err) { + ws.send(JSON.stringify({ message: err.message })); + } + }); + } + break; + case 'order': + case 'wallet': + if (!ws.auth.sub) { // throw unauthenticated error if req.auth.sub does not exist + throw new Error(WS_AUTHENTICATION_REQUIRED); + } + if (!getChannels()[WEBSOCKET_CHANNEL(topic, ws.auth.sub.networkId)]) { + addSubscriber(WEBSOCKET_CHANNEL(topic, ws.auth.sub.networkId), ws); + sendNetworkWsMessage('subscribe', topic, ws.auth.sub.networkId); + } else { + sendNetworkWsMessage('unsubscribe', topic, ws.auth.sub.networkId); + addSubscriber(WEBSOCKET_CHANNEL(topic, ws.auth.sub.networkId), ws); + sendNetworkWsMessage('subscribe', topic, ws.auth.sub.networkId); + } + break; + case 'deposit': + if (!ws.auth.sub) { // throw unauthenticated error if req.auth.sub does not exist + throw new Error(WS_AUTHENTICATION_REQUIRED); + } + addSubscriber(WEBSOCKET_CHANNEL(topic, ws.auth.sub.networkId), ws); + break; + case 'chat': + addSubscriber(WEBSOCKET_CHANNEL(topic), ws); + sendInitialMessages(ws); + break; + default: + throw new Error(WS_INVALID_TOPIC(topic)); + } +}; + +const terminateTopic = (topic, ws, symbol) => { + switch (topic) { + case 'orderbook': + case 'trade': + if (symbol) { + if (!toolsLib.subscribedToPair(symbol)) { + throw new Error('Invalid symbol'); + } + removeSubscriber(WEBSOCKET_CHANNEL(topic, symbol), ws); + ws.send(JSON.stringify({ message: `Unsubscribed from channel ${topic}:${symbol}`})); + } else { + each(toolsLib.getKitPairs(), (pair) => { + try { + removeSubscriber(WEBSOCKET_CHANNEL(topic, pair), ws); + ws.send(JSON.stringify({ message: `Unsubscribed from channel ${topic}:${symbol}`})); + } catch (err) { + ws.send(JSON.stringify({ message: err.message })); + } + }); + } + break; + case 'order': + case 'wallet': + if (!ws.auth.sub) { // throw unauthenticated error if req.auth.sub does not exist + throw new Error(WS_AUTHENTICATION_REQUIRED); + } + removeSubscriber(WEBSOCKET_CHANNEL(topic, ws.auth.sub.networkId), ws, 'private'); + if (!getChannels()[WEBSOCKET_CHANNEL(topic, ws.auth.sub.networkId)]) { + sendNetworkWsMessage('unsubscribe', topic, ws.auth.sub.networkId); + } + ws.send(JSON.stringify({ message: `Unsubscribed from channel ${topic}:${ws.auth.sub.networkId}`})); + break; + case 'deposit': + if (!ws.auth.sub) { // throw unauthenticated error if req.auth.sub does not exist + throw new Error(WS_AUTHENTICATION_REQUIRED); + } + removeSubscriber(WEBSOCKET_CHANNEL(topic, ws.auth.sub.networkId), ws, 'private'); + ws.send(JSON.stringify({ message: `Unsubscribed from channel ${topic}:${ws.auth.sub.networkId}`})); + break; + case 'chat': + removeSubscriber(WEBSOCKET_CHANNEL(topic), ws); + ws.send(JSON.stringify({ message: `Unsubscribed from channel ${topic}:${ws.auth.sub.id}`})); + break; + default: + throw new Error(WS_INVALID_TOPIC(topic)); + } +}; + +const authorizeUser = async (credentials, ws, ip) => { + // throw error if user is already authenticated + if (ws.auth.sub) { + throw new Error(WS_ALREADY_AUTHENTICATED); + } + + // first element in args array should be object with credentials + const bearerToken = credentials.authorization; + const hmacKey = credentials['api-key']; + + if (bearerToken && hmacKey) { // throw error if both authentication methods are given + throw new Error(MULTIPLE_API_KEY); + } else if (bearerToken) { + + // get authenticated user data and set as ws.auth. + // Function will throw an error if there is an issue which will be caught below + const auth = await toolsLib.security.verifyBearerTokenPromise(bearerToken, ip); + + // If authentication was successful, set ws.auth to new auth object and send authenticated message + ws.auth = auth; + ws.send(JSON.stringify({ message: WS_USER_AUTHENTICATED(ws.auth.sub.email) })); + } else if (hmacKey) { + const apiSignature = credentials['api-signature']; + const apiExpires = credentials['api-expires']; + const method = 'CONNECT'; + const url = '/stream'; + + // get authenticated user data and set as ws.auth. + // Function will throw an error if there is an issue which will be caught below + const auth = await toolsLib.security.verifyHmacTokenPromise(hmacKey, apiSignature, apiExpires, method, url); + + // If authentication was successful, set ws.auth to new auth object and send authenticated message + ws.auth = auth; + ws.send(JSON.stringify({ message: WS_USER_AUTHENTICATED(ws.auth.sub.email) })); + } else { + // throw error if bearer and hmac token are missing + throw new Error(WS_MISSING_HEADER); + } +}; + +const terminateClosedChannels = (ws) => { + each(toolsLib.getKitPairs(), (pair) => { + try { + removeSubscriber(WEBSOCKET_CHANNEL('orderbook', pair), ws); + } catch (err) { + loggerWebsocket.debug(ws.id, 'ws/sub/terminateClosedChannels', err.message); + } + try { + removeSubscriber(WEBSOCKET_CHANNEL('trade', pair), ws); + } catch (err) { + loggerWebsocket.debug(ws.id, 'ws/sub/terminateClosedChannels', err.message); + } + }); + if (ws.auth.sub) { + try { + removeSubscriber(WEBSOCKET_CHANNEL('order', ws.auth.sub.networkId), ws, 'private'); + if (!getChannels()[WEBSOCKET_CHANNEL('order', ws.auth.sub.networkId)]) { + sendNetworkWsMessage('unsubscribe', 'order', ws.auth.sub.networkId); + } + } catch (err) { + loggerWebsocket.debug(ws.id, 'ws/sub/terminateClosedChannels', err.message); + } + + try { + removeSubscriber(WEBSOCKET_CHANNEL('wallet', ws.auth.sub.networkId), ws, 'private'); + if (!getChannels()[WEBSOCKET_CHANNEL('wallet', ws.auth.sub.networkId)]) { + sendNetworkWsMessage('unsubscribe', 'wallet', ws.auth.sub.networkId); + } + } catch (err) { + loggerWebsocket.debug(ws.id, 'ws/sub/terminateClosedChannels', err.message); + } + + try { + removeSubscriber(WEBSOCKET_CHANNEL('deposit', ws.auth.sub.networkId), ws, 'private'); + } catch (err) { + loggerWebsocket.debug(ws.id, 'ws/sub/terminateClosedChannels', err.message); + } + + try { + removeSubscriber(WEBSOCKET_CHANNEL('chat'), ws); + } catch (err) { + loggerWebsocket.debug(ws.id, 'ws/sub/terminateClosedChannels', err.message); + } + } +}; + +const handleChatData = (action, ws, data) => { + if (!ws.auth.sub) { + throw new Error('Not authorized'); + } else if (action === 'deleteMessage' || action === 'getBannedUsers' || action === 'banUser' || action === 'unbanUser') { + if ( + ws.auth.scopes.indexOf(ROLES.ADMIN) === -1 && + ws.auth.scopes.indexOf(ROLES.SUPERVISOR) === -1 && + ws.auth.scopes.indexOf(ROLES.SUPPORT) === -1 + ) { + throw new Error('Not authorized'); + } + } + getUsername(ws.auth.sub.id) + .then(({ username, verification_level }) => { + switch (action) { + case 'addMessage': + addMessage(username, verification_level, ws.auth.sub.id, data); + break; + case 'deleteMessage': + deleteMessage(data); + break; + case 'getBannedUsers': + sendBannedUsers(ws); + break; + case 'banUser': + banUser(data); + break; + case 'unbanUser': + unbanUser(data); + break; + case 'changeUsername': + changeUsername(data); + break; + default: + throw new Error('Invalid action'); + } + }) + .catch((err) => { + loggerWebsocket.error(ws.id, 'ws/sub/handleChatData', err.message); + ws.send(JSON.stringify({ error: err.message })); + }); +}; + +const handleDepositData = (data) => { + switch (data.topic) { + case 'deposit': + each(getChannels()[WEBSOCKET_CHANNEL(data.topic, data.user_id)], (ws) => { + ws.send(JSON.stringify(data)); + }); + break; + default: + break; + } +}; + +module.exports = { + initializeTopic, + terminateTopic, + authorizeUser, + terminateClosedChannels, + handleChatData +}; diff --git a/settings/configmap b/settings/configmap index 4e69244531..789ce6a754 100644 --- a/settings/configmap +++ b/settings/configmap @@ -11,10 +11,7 @@ ENVIRONMENT_EXCHANGE_NAME=hollaex HOLLAEX_CONFIGMAP_API_NAME=my-hollaex-exchange HOLLAEX_CONFIGMAP_DOMAIN=https://yourdomain.com -HOLLAEX_CONFIGMAP_LOGO_PATH=https://bitholla.s3.ap-northeast-2.amazonaws.com/kit/LOGO_IMAGE_LIGHT -HOLLAEX_CONFIGMAP_LOGO_BLACK_PATH=https://bitholla.s3.ap-northeast-2.amazonaws.com/kit/LOGO_IMAGE_DARK - -HOLLAEX_CONFIGMAP_CAPTCHA_SITE_KEY= +HOLLAEX_CONFIGMAP_LOGO_IMAGE=https://bitholla.s3.ap-northeast-2.amazonaws.com/kit/LOGO_IMAGE_LIGHT ENVIRONMENT_WEB_DEFAULT_COUNTRY=KR HOLLAEX_CONFIGMAP_EMAILS_TIMEZONE=UTC @@ -42,10 +39,6 @@ HOLLAEX_CONFIGMAP_SMTP_SERVER= HOLLAEX_CONFIGMAP_SMTP_PORT=587 HOLLAEX_CONFIGMAP_SMTP_USER= -HOLLAEX_CONFIGMAP_PLUGINS= - -HOLLAEX_CONFIGMAP_TECH_EMAIL= - ################################# #### ADVANCED CONFIGURATIONS #### ################################# @@ -54,18 +47,8 @@ HOLLAEX_CONFIGMAP_NODE_ENV=production HOLLAEX_CONFIGMAP_PORT=10010 HOLLAEX_CONFIGMAP_WEBSOCKET_PORT=10080 -HOLLAEX_CONFIGMAP_FRESHDESK_HOST= - -HOLLAEX_CONFIGMAP_ADMIN_WHITELIST_IP= - HOLLAEX_CONFIGMAP_SEND_EMAIL_TO_SUPPORT=true -HOLLAEX_CONFIGMAP_MAX_TRADES=50 - -HOLLAEX_CONFIGMAP_ALLOWED_DOMAINS= - -HOLLAEX_CONFIGMAP_ID_DOCS_BUCKET= - HOLLAEX_CONFIGMAP_NETWORK=mainnet HOLLAEX_CONFIGMAP_VAULT_NAME= @@ -74,28 +57,25 @@ HOLLAEX_CONFIGMAP_DB_SSL=false HOLLAEX_CONFIGMAP_LOG_LEVEL=verbose -ENVIRONMENT_EXCHANGE_RUN_MODE=api,stream,engine +HOLLAEX_CONFIGMAP_KIT_VERSION=$(cat version) + +ENVIRONMENT_EXCHANGE_RUN_MODE=api,stream,plugins ENVIRONMENT_DOCKER_COMPOSE_RUN_POSTGRESQL_DB=true ENVIRONMENT_DOCKER_COMPOSE_RUN_REDIS=true -ENVIRONMENT_DOCKER_COMPOSE_RUN_INFLUXDB=true ENVIRONMENT_KUBERNETES_RUN_POSTGRESQL_DB=true ENVIRONMENT_KUBERNETES_POSTGRESQL_DB_VOLUMESIZE=50Gi ENVIRONMENT_KUBERNETES_RUN_REDIS=true -ENVIRONMENT_KUBERNETES_RUN_INFLUXDB=true -ENVIRONMENT_KUBERNETES_INFLUXDB_VOLUMESIZE=30Gi - ENVIRONMENT_KUBERNETES_POSTGRESQL_DB_NODESELECTOR="{}" ENVIRONMENT_KUBERNETES_REDIS_NODESELECTOR="{}" ENVIRONMENT_KUBERNETES_INFLUXDB_NODESELECTOR="{}" ENVIRONMENT_KUBERNETES_EXCHANGE_STATEFUL_NODESELECTOR="{}" ENVIRONMENT_KUBERNETES_EXCHANGE_STATELESS_NODESELECTOR="{}" -ENVIRONMENT_DOCKER_IMAGE_REGISTRY=bitholla/hollaex-core -ENVIRONMENT_DOCKER_IMAGE_VERSION=1.24.12 +ENVIRONMENT_DOCKER_IMAGE_VERSION=2.0.0 ENVIRONMENT_DOCKER_IMAGE_POSTGRESQL_REGISTRY=postgres ENVIRONMENT_DOCKER_IMAGE_POSTGRESQL_VERSION=10.9-alpine @@ -148,16 +128,6 @@ ENVIRONMENT_KUBERNETES_STREAM_MEMORY_LIMITS=256Mi ENVIRONMENT_KUBERNETES_STREAM_CPU_REQUESTS=10m ENVIRONMENT_KUBERNETES_STREAM_MEMORY_REQUESTS=128Mi -ENVIRONMENT_KUBERNETES_PLUGINS_CPU_LIMITS=200m -ENVIRONMENT_KUBERNETES_PLUGINS_MEMORY_LIMITS=512Mi -ENVIRONMENT_KUBERNETES_PLUGINS_CPU_REQUESTS=10m -ENVIRONMENT_KUBERNETES_PLUGINS_MEMORY_REQUESTS=128Mi - -ENVIRONMENT_KUBERNETES_ENGINE_CPU_LIMITS=200m -ENVIRONMENT_KUBERNETES_ENGINE_MEMORY_LIMITS=256Mi -ENVIRONMENT_KUBERNETES_ENGINE_CPU_REQUESTS=10m -ENVIRONMENT_KUBERNETES_ENGINE_MEMORY_REQUESTS=128Mi - ENVIRONMENT_KUBERNETES_POSTGRESQL_CPU_LIMITS=100m ENVIRONMENT_KUBERNETES_POSTGRESQL_MEMORY_LIMITS=200Mi ENVIRONMENT_KUBERNETES_POSTGRESQL_CPU_REQUESTS=10m @@ -168,11 +138,6 @@ ENVIRONMENT_KUBERNETES_REDIS_MEMORY_LIMITS=200Mi ENVIRONMENT_KUBERNETES_REDIS_CPU_REQUESTS=10m ENVIRONMENT_KUBERNETES_REDIS_MEMORY_REQUESTS=100Mi -ENVIRONMENT_KUBERNETES_INFLUXDB_CPU_LIMITS=200m -ENVIRONMENT_KUBERNETES_INFLUXDB_MEMORY_LIMITS=400Mi -ENVIRONMENT_KUBERNETES_INFLUXDB_CPU_REQUESTS=100m -ENVIRONMENT_KUBERNETES_INFLUXDB_MEMORY_REQUESTS=256Mi - ENVIRONMENT_KUBERNETES_S3_BACKUP_CRONJOB_RULE='0 1 * * *' ENVIRONMENT_KUBERNETES_S3_BACKUP_CRONJOB_REGION= ENVIRONMENT_KUBERNETES_S3_BACKUP_CRONJOB_BUCKET= @@ -190,4 +155,4 @@ ENVIRONMENT_KUBERNETES_WEB_HPA_AVGMEMORY=500000000 ENVIRONMENT_KUBERNETES_API_HPA_MAXREPLICAS=4 ENVIRONMENT_KUBERNETES_STREAM_HPA_MAXREPLICAS=4 -ENVIRONMENT_KUBERNETES_WEB_HPA_MAXREPLICAS=4 \ No newline at end of file +ENVIRONMENT_KUBERNETES_WEB_HPA_MAXREPLICAS=4 diff --git a/settings/secret b/settings/secret index 9c397fcdef..bbb7a84bcf 100644 --- a/settings/secret +++ b/settings/secret @@ -4,10 +4,6 @@ HOLLAEX_SECRET_ACTIVATION_CODE= -HOLLAEX_SECRET_CAPTCHA_SECRET_KEY= - -HOLLAEX_SECRET_ADMIN_PASSWORD= - ######################################## #### ADVANCED SECRET CONFIGURATIONS #### ######################################## @@ -26,44 +22,25 @@ HOLLAEX_SECRET_DB_PASSWORD= HOLLAEX_SECRET_DB_HOST=$ENVIRONMENT_EXCHANGE_NAME-db HOLLAEX_SECRET_DB_PORT=5432 -HOLLAEX_SECRET_S3_WRITE_ACCESSKEYID= -HOLLAEX_SECRET_S3_WRITE_SECRETACCESSKEY= - -HOLLAEX_SECRET_S3_READ_ACCESSKEYID= -HOLLAEX_SECRET_S3_READ_SECRETACCESSKEY= - -HOLLAEX_SECRET_SES_ACCESSKEYID= -HOLLAEX_SECRET_SES_SECRETACCESSKEY= -HOLLAEX_SECRET_SES_REGION= - -HOLLAEX_SECRET_SNS_ACCESSKEYID= -HOLLAEX_SECRET_SNS_SECRETACCESSKEY= -HOLLAEX_SECRET_SNS_REGION= - HOLLAEX_SECRET_INFLUX_DB=hollaex HOLLAEX_SECRET_INFLUX_HOST=$ENVIRONMENT_EXCHANGE_NAME-influxdb HOLLAEX_SECRET_INFLUX_PORT=8086 HOLLAEX_SECRET_INFLUX_USER=hollaex HOLLAEX_SECRET_INFLUX_PASSWORD= -HOLLAEX_SECRET_VAULT_KEY= -HOLLAEX_SECRET_VAULT_SECRET= - -HOLLAEX_SECRET_FRESHDESK_KEY= -HOLLAEX_SECRET_FRESHDESK_AUTH= - ENVIRONMENT_KUBERNETES_DOCKER_REGISTRY_HOST=docker.io ENVIRONMENT_KUBERNETES_DOCKER_REGISTRY_USERNAME= ENVIRONMENT_KUBERNETES_DOCKER_REGISTRY_PASSWORD= ENVIRONMENT_KUBERNETES_DOCKER_REGISTRY_EMAIL= -HOLLAEX_SECRET_SMTP_PASSWORD= - -HOLLAEX_SECRET_TECH_PASSWORD= - ENVIRONMENT_KUBERNETES_S3_BACKUP_CRONJOB_ACCESSKEY= ENVIRONMENT_KUBERNETES_S3_BACKUP_CRONJOB_SECRETKEY= +HOLLAEX_SECRET_API_KEY= +HOLLAEX_SECRET_API_SECRET= + +HOLLAEX_SECRET_SMTP_PASSWORD= + ###################################################################### #### AUTOMATICALLY GENERATED PASSWORDS GONNA BE STORED DOWN BELOW #### ###################################################################### @@ -72,4 +49,4 @@ HOLLAEX_SECRET_SUPERVISOR_PASSWORD= HOLLAEX_SECRET_SUPPORT_PASSWORD= HOLLAEX_SECRET_KYC_PASSWORD= HOLLAEX_SECRET_QUICK_TRADE_SECRET= -HOLLAEX_SECRET_SECRET= +HOLLAEX_SECRET_SECRET= \ No newline at end of file diff --git a/templates/local/nginx/nginx.conf b/templates/local/nginx/nginx.conf index 6221ad60c6..0f063bf502 100644 --- a/templates/local/nginx/nginx.conf +++ b/templates/local/nginx/nginx.conf @@ -50,7 +50,7 @@ server { proxy_pass http://api; } - location /v1/order { + location /v2/order { limit_req zone=api burst=10 nodelay; limit_req_log_level info; limit_req_status 429; @@ -58,7 +58,7 @@ server { proxy_pass http://api; } - location /v1 { + location /v2 { limit_req zone=api burst=10 nodelay; limit_req_log_level info; limit_req_status 429; @@ -66,7 +66,7 @@ server { proxy_pass http://api; } - location /socket.io { + location /stream { proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; @@ -75,10 +75,9 @@ server { } location /plugins { - proxy_pass http://plugins-controller; + proxy_pass http://plugins; } - error_page 429 /429.html; location = /429.html { root /usr/share/nginx/html; diff --git a/version b/version index 5495313844..227cea2156 100644 --- a/version +++ b/version @@ -1 +1 @@ -1.5.15 \ No newline at end of file +2.0.0 diff --git a/web/.babelrc b/web/.babelrc index 2c6b2b122f..05dcb3f8de 100644 --- a/web/.babelrc +++ b/web/.babelrc @@ -1,4 +1,4 @@ { - "presets": ["react", "es2015", "stage-0"], - "plugins": ["transform-decorators-legacy","transform-object-assign"] + "presets": ["react", "es2015", "stage-0"], + "plugins": ["transform-decorators-legacy", "transform-object-assign"] } diff --git a/web/.eslintrc b/web/.eslintrc index 5e603ecd19..e6aa150f11 100644 --- a/web/.eslintrc +++ b/web/.eslintrc @@ -1,3 +1,3 @@ { - "extends": "react-app" + "extends": "react-app" } diff --git a/web/.prettierignore b/web/.prettierignore new file mode 100644 index 0000000000..68eef54bea --- /dev/null +++ b/web/.prettierignore @@ -0,0 +1,8 @@ +# Ignore artifacts: +.idea +build +docker +node_modules +public +src/charting_library +src/index.css diff --git a/web/.prettierrc.json b/web/.prettierrc.json new file mode 100644 index 0000000000..9b1900e1e3 --- /dev/null +++ b/web/.prettierrc.json @@ -0,0 +1,14 @@ +{ + "printWidth": 80, + "tabWidth": 2, + "useTabs": true, + "semi": true, + "singleQuote": true, + "jsxSingleQuote": false, + "jsxBracketSameLine": false, + "trailingComma": "es5", + "bracketSpacing": true, + "arrowParens": "always", + "proseWrap": "preserve", + "endOfLine": "lf" +} diff --git a/web/README.md b/web/README.md index 37a25d5f74..613ea587ff 100644 --- a/web/README.md +++ b/web/README.md @@ -1,23 +1,30 @@ # Web Application + HollaEx Kit uses Reactjs framework as a single page application and communicates with the back-end servers through REST API and Websocket channels. ## Development + ### Requirements + You need to have nodejs and npm installed ### Installation + 1. clone the repository 2. `cd web` 3. `npm install` ### Run in your local machine + 2. HollaEx uses sass for styling. You need to generate css files before running the project. `node run build-css` builds all css files from sass styles in `/src` folder. 3. `npm start` it will also listen to changes in sass files and autogenerates css files in there. ## Production + You can build the project by running `npm run build` and the projects builds the entire client in `/build` folder ## Properties to set + - Build variables in `.env` file: - NODE_ENV `['production', 'development']` - REACT_APP_PUBLIC_URL `https://hollaex.com` @@ -25,7 +32,9 @@ You can build the project by running `npm run build` and the projects builds the - REACT_APP_CAPTCHA_SITE_KEY your Google Recaptcha key for security purposes ### Styles + ### Steps to configure white and dark theme + 1. Modify colors under `colors for white theme` and `colors for dark theme` text in variables.scss file. there is also some common colors that effect in both dark and white theme. 2. Coin colors also categorized by theme in variables.scss file. 3. To apply different colors for chart element outline(slice in dount, bar in bar chart) change the `coin-${symbol}-1` and `dark-coin-${symbol}-1`. diff --git a/web/build-benchmark.txt b/web/build-benchmark.txt new file mode 100644 index 0000000000..14cf5fb5d8 --- /dev/null +++ b/web/build-benchmark.txt @@ -0,0 +1,40 @@ + + + SMP ⏱ +General output time took 6 mins, 40.43 secs + + SMP ⏱ Plugins +TerserPlugin took 2 mins, 20.43 secs +IgnorePlugin took 42.85 secs +OptimizeCssAssetsWebpackPlugin took 9.88 secs +MiniCssExtractPlugin took 7.91 secs +HtmlWebpackPlugin took 6.25 secs +ManifestPlugin took 4.34 secs +GenerateSW took 0.067 secs +InterpolateHtmlPlugin took 0.018 secs +InlineChunkHtmlPlugin took 0.017 secs +DefinePlugin took 0.014 secs +ModuleNotFoundPlugin took 0.01 secs + + SMP ⏱ Loaders +babel-loader took 3 mins, 36.58 secs + module count = 3751 +babel-loader, and +eslint-loader took 1 min, 59.18 secs + module count = 402 +mini-css-extract-plugin, and +css-loader, and +postcss-loader took 36.24 secs + module count = 19 +css-loader, and +postcss-loader took 20.39 secs + module count = 23 +modules with no loaders took 15.52 secs + module count = 65 +file-loader took 7.88 secs + module count = 514 +html-webpack-plugin took 0.056 secs + module count = 1 + + + diff --git a/web/config-overrides.js b/web/config-overrides.js new file mode 100644 index 0000000000..c55e4dba1e --- /dev/null +++ b/web/config-overrides.js @@ -0,0 +1,12 @@ +const SpeedMeasurePlugin = require('speed-measure-webpack-plugin'); +const smp = new SpeedMeasurePlugin({ + outputFormat: 'human', + outputTarget: './measure.txt', +}); + +module.exports = function (config, env) { + config = smp.wrap({ + ...config, + }); + return config; +}; diff --git a/web/docker/Dockerfile b/web/docker/Dockerfile index 4f128ff48f..f23233ac10 100644 --- a/web/docker/Dockerfile +++ b/web/docker/Dockerfile @@ -1,5 +1,5 @@ # build environment -FROM node:10.15.3-alpine as build +FROM node:12.18.3-alpine as build ENV NODE_OPTIONS=--max_old_space_size=3072 WORKDIR /app COPY package.json /app/package.json diff --git a/web/jsconfig.json b/web/jsconfig.json new file mode 100644 index 0000000000..7a2b846014 --- /dev/null +++ b/web/jsconfig.json @@ -0,0 +1,6 @@ +{ + "compilerOptions": { + "baseUrl": "src" + }, + "include": ["src"] +} diff --git a/web/package-lock.json b/web/package-lock.json index 886573cfdf..b89e08b2c2 100644 --- a/web/package-lock.json +++ b/web/package-lock.json @@ -1,6 +1,6 @@ { "name": "hollaex-kit", - "version": "1.5.15", + "version": "2.0.0", "lockfileVersion": 1, "requires": true, "dependencies": { @@ -12,13 +12,20 @@ "tinycolor2": "^1.4.1" } }, - "@ant-design/create-react-context": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/@ant-design/create-react-context/-/create-react-context-0.2.5.tgz", - "integrity": "sha512-1rMAa4qgP2lfl/QBH9i78+Gjxtj9FTMpMyDGZsEBW5Kih72EuUo9958mV8PgpRkh4uwPSQ7vVZWXeyNZXVAFDg==", + "@ant-design/compatible": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@ant-design/compatible/-/compatible-1.0.5.tgz", + "integrity": "sha512-UrMtEtx0M7blj/0EKvhfE7U/Q6vLd9c1EUsIf2fl8C3CRWogAUu67FwKAJKtcwQZwkinCDCJgTjtscZm1UvX4A==", "requires": { - "gud": "^1.0.0", - "warning": "^4.0.3" + "@ant-design/icons": "^4.0.0", + "classnames": "^2.2.6", + "lodash.camelcase": "^4.3.0", + "lodash.upperfirst": "^4.3.1", + "omit.js": "^1.0.2", + "rc-animate": "^2.10.2", + "rc-editor-mention": "^1.1.13", + "rc-form": "^2.4.10", + "rc-util": "^4.10.0" } }, "@ant-design/css-animation": { @@ -27,91 +34,119 @@ "integrity": "sha512-LrX0OGZtW+W6iLnTAqnTaoIsRelYeuLZWsrmBJFUXDALQphPsN8cE5DCsmoSlL0QYb94BQxINiuS70Ar/8BNgA==" }, "@ant-design/icons": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@ant-design/icons/-/icons-2.1.1.tgz", - "integrity": "sha512-jCH+k2Vjlno4YWl6g535nHR09PwCEmTBKAG6VqF+rhkrSPRLfgpU2maagwbZPLjaHuU5Jd1DFQ2KJpQuI6uG8w==" - }, - "@ant-design/icons-react": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@ant-design/icons-react/-/icons-react-2.0.1.tgz", - "integrity": "sha512-r1QfoltMuruJZqdiKcbPim3d8LNsVPB733U0gZEUSxBLuqilwsW28K2rCTWSMTjmFX7Mfpf+v/wdiFe/XCqThw==", + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@ant-design/icons/-/icons-4.2.2.tgz", + "integrity": "sha512-DrVV+wcupnHS7PehJ6KiTcJtAR5c25UMgjGECCc6pUT9rsvw0AuYG+a4HDjfxEQuDqKTHwW+oX/nIvCymyLE8Q==", "requires": { "@ant-design/colors": "^3.1.0", - "babel-runtime": "^6.26.0" + "@ant-design/icons-svg": "^4.0.0", + "@babel/runtime": "^7.10.4", + "classnames": "^2.2.6", + "insert-css": "^2.0.0", + "rc-util": "^5.0.1" + }, + "dependencies": { + "rc-util": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/rc-util/-/rc-util-5.2.1.tgz", + "integrity": "sha512-OnIKp4DsYZpT3St9LwiGARXyMR38wNbk7C4jXS6NGAGHZEQWck7W6qfiJwj+MUmhJiUisAknU6BUs65exbhFTw==", + "requires": { + "react-is": "^16.12.0", + "shallowequal": "^1.1.0" + } + } + } + }, + "@ant-design/icons-svg": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@ant-design/icons-svg/-/icons-svg-4.1.0.tgz", + "integrity": "sha512-Fi03PfuUqRs76aI3UWYpP864lkrfPo0hluwGqh7NJdLhvH4iRDc3jbJqZIvRDLHKbXrvAfPPV3+zjUccfFvWOQ==" + }, + "@ant-design/react-slick": { + "version": "0.27.10", + "resolved": "https://registry.npmjs.org/@ant-design/react-slick/-/react-slick-0.27.10.tgz", + "integrity": "sha512-Lg/9RlGaYGeFjB1UkvK50xUKf7XgIVpxXVPkm+45/VoA66c3uC1KN5yRxx7AEayHcSPZDqO9TGvMXu1WbbY2vw==", + "requires": { + "@babel/runtime": "^7.10.4", + "classnames": "^2.2.5", + "json2mq": "^0.2.0", + "lodash": "^4.17.15", + "resize-observer-polyfill": "^1.5.0" } }, "@babel/code-frame": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", - "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", + "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", "dev": true, "requires": { "@babel/highlight": "^7.10.4" } }, "@babel/compat-data": { - "version": "7.12.7", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.12.7.tgz", - "integrity": "sha512-YaxPMGs/XIWtYqrdEOZOCPsVWfEoriXopnsz3/i7apYPXQ3698UFhS6dVT1KN5qOsWmVgw/FOrmQgpRaZayGsw==", - "dev": true - }, - "@babel/core": { - "version": "7.2.2", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.2.2.tgz", - "integrity": "sha512-59vB0RWt09cAct5EIe58+NzGP4TFSD3Bz//2/ELy3ZeTeKF6VTD1AXlH8BGGbCX0PuobZBsIzO7IAI9PH67eKw==", + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.11.0.tgz", + "integrity": "sha512-TPSvJfv73ng0pfnEOh17bYMPQbI95+nGWc71Ss4vZdRBHTDqmM9Z8ZV4rYz8Ks7sfzc95n30k6ODIq5UGnXcYQ==", "dev": true, "requires": { - "@babel/code-frame": "^7.0.0", - "@babel/generator": "^7.2.2", - "@babel/helpers": "^7.2.0", - "@babel/parser": "^7.2.2", - "@babel/template": "^7.2.2", - "@babel/traverse": "^7.2.2", - "@babel/types": "^7.2.2", - "convert-source-map": "^1.1.0", + "browserslist": "^4.12.0", + "invariant": "^2.2.4", + "semver": "^5.5.0" + } + }, + "@babel/core": { + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.9.0.tgz", + "integrity": "sha512-kWc7L0fw1xwvI0zi8OKVBuxRVefwGOrKSQMvrQ3dW+bIIavBY3/NpXmpjMy7bQnLgwgzWQZ8TlM57YHpHNHz4w==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.8.3", + "@babel/generator": "^7.9.0", + "@babel/helper-module-transforms": "^7.9.0", + "@babel/helpers": "^7.9.0", + "@babel/parser": "^7.9.0", + "@babel/template": "^7.8.6", + "@babel/traverse": "^7.9.0", + "@babel/types": "^7.9.0", + "convert-source-map": "^1.7.0", "debug": "^4.1.0", - "json5": "^2.1.0", - "lodash": "^4.17.10", + "gensync": "^1.0.0-beta.1", + "json5": "^2.1.2", + "lodash": "^4.17.13", "resolve": "^1.3.2", "semver": "^5.4.1", "source-map": "^0.5.0" }, "dependencies": { "debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "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.2" + "ms": "^2.1.1" } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true } } }, "@babel/generator": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.12.11.tgz", - "integrity": "sha512-Ggg6WPOJtSi8yYQvLVjG8F/TlpWDlKx0OpS4Kt+xMQPs5OaGYWy+v1A+1TvxI6sAMGZpKWWoAQ1DaeQbImlItA==", + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.11.0.tgz", + "integrity": "sha512-fEm3Uzw7Mc9Xi//qU20cBKatTfs2aOtKqmvy/Vm7RkJEGFQ4xc9myCfbXxqK//ZS8MR/ciOHw6meGASJuKmDfQ==", "dev": true, "requires": { - "@babel/types": "^7.12.11", + "@babel/types": "^7.11.0", "jsesc": "^2.5.1", "source-map": "^0.5.0" } }, "@babel/helper-annotate-as-pure": { - "version": "7.12.10", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.12.10.tgz", - "integrity": "sha512-XplmVbC1n+KY6jL8/fgLVXXUauDIB+lD5+GsQEh6F6GBF1dq1qy4DP4yXWzDKcoqXB3X58t61e85Fitoww4JVQ==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.10.4.tgz", + "integrity": "sha512-XQlqKQP4vXFB7BN8fEEerrmYvHp3fK/rBkRFz9jaJbzK0B1DSfej9Kc7ZzE8Z/OnId1jpJdNAZ3BFQjWG68rcA==", "dev": true, "requires": { - "@babel/types": "^7.12.10" + "@babel/types": "^7.10.4" } }, "@babel/helper-builder-binary-assignment-operator-visitor": { @@ -124,39 +159,63 @@ "@babel/types": "^7.10.4" } }, + "@babel/helper-builder-react-jsx": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-react-jsx/-/helper-builder-react-jsx-7.10.4.tgz", + "integrity": "sha512-5nPcIZ7+KKDxT1427oBivl9V9YTal7qk0diccnh7RrcgrT/pGFOjgGw1dgryyx1GvHEpXVfoDF6Ak3rTiWh8Rg==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.10.4", + "@babel/types": "^7.10.4" + } + }, + "@babel/helper-builder-react-jsx-experimental": { + "version": "7.10.5", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-react-jsx-experimental/-/helper-builder-react-jsx-experimental-7.10.5.tgz", + "integrity": "sha512-Buewnx6M4ttG+NLkKyt7baQn7ScC/Td+e99G914fRU8fGIUivDDgVIQeDHFa5e4CRSJQt58WpNHhsAZgtzVhsg==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.10.4", + "@babel/helper-module-imports": "^7.10.4", + "@babel/types": "^7.10.5" + } + }, "@babel/helper-compilation-targets": { - "version": "7.12.5", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.12.5.tgz", - "integrity": "sha512-+qH6NrscMolUlzOYngSBMIOQpKUGPPsc61Bu5W10mg84LxZ7cmvnBHzARKbDoFxVvqqAbj6Tg6N7bSrWSPXMyw==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.10.4.tgz", + "integrity": "sha512-a3rYhlsGV0UHNDvrtOXBg8/OpfV0OKTkxKPzIplS1zpx7CygDcWWxckxZeDd3gzPzC4kUT0A4nVFDK0wGMh4MQ==", "dev": true, "requires": { - "@babel/compat-data": "^7.12.5", - "@babel/helper-validator-option": "^7.12.1", - "browserslist": "^4.14.5", + "@babel/compat-data": "^7.10.4", + "browserslist": "^4.12.0", + "invariant": "^2.2.4", + "levenary": "^1.1.1", "semver": "^5.5.0" } }, "@babel/helper-create-class-features-plugin": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.12.1.tgz", - "integrity": "sha512-hkL++rWeta/OVOBTRJc9a5Azh5mt5WgZUGAKMD8JM141YsE08K//bp1unBBieO6rUKkIPyUE0USQ30jAy3Sk1w==", + "version": "7.10.5", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.10.5.tgz", + "integrity": "sha512-0nkdeijB7VlZoLT3r/mY3bUkw3T8WG/hNw+FATs/6+pG2039IJWjTYL0VTISqsNHMUTEnwbVnc89WIJX9Qed0A==", "dev": true, "requires": { "@babel/helper-function-name": "^7.10.4", - "@babel/helper-member-expression-to-functions": "^7.12.1", + "@babel/helper-member-expression-to-functions": "^7.10.5", "@babel/helper-optimise-call-expression": "^7.10.4", - "@babel/helper-replace-supers": "^7.12.1", + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-replace-supers": "^7.10.4", "@babel/helper-split-export-declaration": "^7.10.4" } }, "@babel/helper-create-regexp-features-plugin": { - "version": "7.12.7", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.12.7.tgz", - "integrity": "sha512-idnutvQPdpbduutvi3JVfEgcVIHooQnhvhx0Nk9isOINOIGYkZea1Pk2JlJRiUnMefrlvr0vkByATBY/mB4vjQ==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.10.4.tgz", + "integrity": "sha512-2/hu58IEPKeoLF45DBwx3XFqsbCXmkdAay4spVr2x0jYgRxrSNp+ePwvSsy9g6YSaNDcKIQVPXk1Ov8S2edk2g==", "dev": true, "requires": { "@babel/helper-annotate-as-pure": "^7.10.4", - "regexpu-core": "^4.7.1" + "@babel/helper-regex": "^7.10.4", + "regexpu-core": "^4.7.0" } }, "@babel/helper-define-map": { @@ -171,32 +230,33 @@ } }, "@babel/helper-explode-assignable-expression": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.12.1.tgz", - "integrity": "sha512-dmUwH8XmlrUpVqgtZ737tK88v07l840z9j3OEhCLwKTkjlvKpfqXVIZ0wpK3aeOxspwGrf/5AP5qLx4rO3w5rA==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.10.4.tgz", + "integrity": "sha512-4K71RyRQNPRrR85sr5QY4X3VwG4wtVoXZB9+L3r1Gp38DhELyHCtovqydRi7c1Ovb17eRGiQ/FD5s8JdU0Uy5A==", "dev": true, "requires": { - "@babel/types": "^7.12.1" + "@babel/traverse": "^7.10.4", + "@babel/types": "^7.10.4" } }, "@babel/helper-function-name": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.12.11.tgz", - "integrity": "sha512-AtQKjtYNolKNi6nNNVLQ27CP6D9oFR6bq/HPYSizlzbp7uC1M59XJe8L+0uXjbIaZaUJF99ruHqVGiKXU/7ybA==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz", + "integrity": "sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ==", "dev": true, "requires": { - "@babel/helper-get-function-arity": "^7.12.10", - "@babel/template": "^7.12.7", - "@babel/types": "^7.12.11" + "@babel/helper-get-function-arity": "^7.10.4", + "@babel/template": "^7.10.4", + "@babel/types": "^7.10.4" } }, "@babel/helper-get-function-arity": { - "version": "7.12.10", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.10.tgz", - "integrity": "sha512-mm0n5BPjR06wh9mPQaDdXWDoll/j5UpCAPl1x8fS71GHm7HA6Ua2V4ylG1Ju8lvcTOietbPNNPaSilKj+pj+Ag==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz", + "integrity": "sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A==", "dev": true, "requires": { - "@babel/types": "^7.12.10" + "@babel/types": "^7.10.4" } }, "@babel/helper-hoist-variables": { @@ -209,47 +269,45 @@ } }, "@babel/helper-member-expression-to-functions": { - "version": "7.12.7", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.12.7.tgz", - "integrity": "sha512-DCsuPyeWxeHgh1Dus7APn7iza42i/qXqiFPWyBDdOFtvS581JQePsc1F/nD+fHrcswhLlRc2UpYS1NwERxZhHw==", + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.11.0.tgz", + "integrity": "sha512-JbFlKHFntRV5qKw3YC0CvQnDZ4XMwgzzBbld7Ly4Mj4cbFy3KywcR8NtNctRToMWJOVvLINJv525Gd6wwVEx/Q==", "dev": true, "requires": { - "@babel/types": "^7.12.7" + "@babel/types": "^7.11.0" } }, "@babel/helper-module-imports": { - "version": "7.12.5", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.12.5.tgz", - "integrity": "sha512-SR713Ogqg6++uexFRORf/+nPXMmWIn80TALu0uaFb+iQIUoR7bOC7zBWyzBs5b3tBBJXuyD0cRu1F15GyzjOWA==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.10.4.tgz", + "integrity": "sha512-nEQJHqYavI217oD9+s5MUBzk6x1IlvoS9WTPfgG43CbMEeStE0v+r+TucWdx8KFGowPGvyOkDT9+7DHedIDnVw==", "dev": true, "requires": { - "@babel/types": "^7.12.5" + "@babel/types": "^7.10.4" } }, "@babel/helper-module-transforms": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.12.1.tgz", - "integrity": "sha512-QQzehgFAZ2bbISiCpmVGfiGux8YVFXQ0abBic2Envhej22DVXV9nCFaS5hIQbkyo1AdGb+gNME2TSh3hYJVV/w==", + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.11.0.tgz", + "integrity": "sha512-02EVu8COMuTRO1TAzdMtpBPbe6aQ1w/8fePD2YgQmxZU4gpNWaL9gK3Jp7dxlkUlUCJOTaSeA+Hrm1BRQwqIhg==", "dev": true, "requires": { - "@babel/helper-module-imports": "^7.12.1", - "@babel/helper-replace-supers": "^7.12.1", - "@babel/helper-simple-access": "^7.12.1", + "@babel/helper-module-imports": "^7.10.4", + "@babel/helper-replace-supers": "^7.10.4", + "@babel/helper-simple-access": "^7.10.4", "@babel/helper-split-export-declaration": "^7.11.0", - "@babel/helper-validator-identifier": "^7.10.4", "@babel/template": "^7.10.4", - "@babel/traverse": "^7.12.1", - "@babel/types": "^7.12.1", + "@babel/types": "^7.11.0", "lodash": "^4.17.19" } }, "@babel/helper-optimise-call-expression": { - "version": "7.12.10", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.12.10.tgz", - "integrity": "sha512-4tpbU0SrSTjjt65UMWSrUOPZTsgvPgGG4S8QSTNHacKzpS51IVWGDj0yCwyeZND/i+LSN2g/O63jEXEWm49sYQ==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.10.4.tgz", + "integrity": "sha512-n3UGKY4VXwXThEiKrgRAoVPBMqeoPgHVqiHZOanAJCG9nQUL2pLRQirUzl0ioKclHGpGqRgIOkgcIJaIWLpygg==", "dev": true, "requires": { - "@babel/types": "^7.12.10" + "@babel/types": "^7.10.4" } }, "@babel/helper-plugin-utils": { @@ -258,72 +316,78 @@ "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==", "dev": true }, + "@babel/helper-regex": { + "version": "7.10.5", + "resolved": "https://registry.npmjs.org/@babel/helper-regex/-/helper-regex-7.10.5.tgz", + "integrity": "sha512-68kdUAzDrljqBrio7DYAEgCoJHxppJOERHOgOrDN7WjOzP0ZQ1LsSDRXcemzVZaLvjaJsJEESb6qt+znNuENDg==", + "dev": true, + "requires": { + "lodash": "^4.17.19" + } + }, "@babel/helper-remap-async-to-generator": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.12.1.tgz", - "integrity": "sha512-9d0KQCRM8clMPcDwo8SevNs+/9a8yWVVmaE80FGJcEP8N1qToREmWEGnBn8BUlJhYRFz6fqxeRL1sl5Ogsed7A==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.10.4.tgz", + "integrity": "sha512-86Lsr6NNw3qTNl+TBcF1oRZMaVzJtbWTyTko+CQL/tvNvcGYEFKbLXDPxtW0HKk3McNOk4KzY55itGWCAGK5tg==", "dev": true, "requires": { "@babel/helper-annotate-as-pure": "^7.10.4", "@babel/helper-wrap-function": "^7.10.4", - "@babel/types": "^7.12.1" + "@babel/template": "^7.10.4", + "@babel/traverse": "^7.10.4", + "@babel/types": "^7.10.4" } }, "@babel/helper-replace-supers": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.12.11.tgz", - "integrity": "sha512-q+w1cqmhL7R0FNzth/PLLp2N+scXEK/L2AHbXUyydxp828F4FEa5WcVoqui9vFRiHDQErj9Zof8azP32uGVTRA==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.10.4.tgz", + "integrity": "sha512-sPxZfFXocEymYTdVK1UNmFPBN+Hv5mJkLPsYWwGBxZAxaWfFu+xqp7b6qWD0yjNuNL2VKc6L5M18tOXUP7NU0A==", "dev": true, "requires": { - "@babel/helper-member-expression-to-functions": "^7.12.7", - "@babel/helper-optimise-call-expression": "^7.12.10", - "@babel/traverse": "^7.12.10", - "@babel/types": "^7.12.11" + "@babel/helper-member-expression-to-functions": "^7.10.4", + "@babel/helper-optimise-call-expression": "^7.10.4", + "@babel/traverse": "^7.10.4", + "@babel/types": "^7.10.4" } }, "@babel/helper-simple-access": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.12.1.tgz", - "integrity": "sha512-OxBp7pMrjVewSSC8fXDFrHrBcJATOOFssZwv16F3/6Xtc138GHybBfPbm9kfiqQHKhYQrlamWILwlDCeyMFEaA==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.10.4.tgz", + "integrity": "sha512-0fMy72ej/VEvF8ULmX6yb5MtHG4uH4Dbd6I/aHDb/JVg0bbivwt9Wg+h3uMvX+QSFtwr5MeItvazbrc4jtRAXw==", "dev": true, "requires": { - "@babel/types": "^7.12.1" + "@babel/template": "^7.10.4", + "@babel/types": "^7.10.4" } }, "@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.12.1.tgz", - "integrity": "sha512-Mf5AUuhG1/OCChOJ/HcADmvcHM42WJockombn8ATJG3OnyiSxBK/Mm5x78BQWvmtXZKHgbjdGL2kin/HOLlZGA==", + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.11.0.tgz", + "integrity": "sha512-0XIdiQln4Elglgjbwo9wuJpL/K7AGCY26kmEt0+pRP0TAj4jjyNq1MjoRvikrTVqKcx4Gysxt4cXvVFXP/JO2Q==", "dev": true, "requires": { - "@babel/types": "^7.12.1" + "@babel/types": "^7.11.0" } }, "@babel/helper-split-export-declaration": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.12.11.tgz", - "integrity": "sha512-LsIVN8j48gHgwzfocYUSkO/hjYAOJqlpJEc7tGXcIm4cubjVUf8LGW6eWRyxEu7gA25q02p0rQUWoCI33HNS5g==", + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.11.0.tgz", + "integrity": "sha512-74Vejvp6mHkGE+m+k5vHY93FX2cAtrw1zXrZXRlG4l410Nm9PxfEiVTn1PjDPV5SnmieiueY4AFg2xqhNFuuZg==", "dev": true, "requires": { - "@babel/types": "^7.12.11" + "@babel/types": "^7.11.0" } }, "@babel/helper-validator-identifier": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz", - "integrity": "sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw==", - "dev": true - }, - "@babel/helper-validator-option": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.12.11.tgz", - "integrity": "sha512-TBFCyj939mFSdeX7U7DDj32WtzYY7fDcalgq8v3fBZMNOJQNn7nOYzMaUCiPxPYfCup69mtIpqlKgMZLvQ8Xhw==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz", + "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==", "dev": true }, "@babel/helper-wrap-function": { - "version": "7.12.3", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.12.3.tgz", - "integrity": "sha512-Cvb8IuJDln3rs6tzjW3Y8UeelAOdnpB8xtQ4sme2MSZ9wOxrbThporC0y/EtE16VAtoyEfLM404Xr1e0OOp+ow==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.10.4.tgz", + "integrity": "sha512-6py45WvEF0MhiLrdxtRjKjufwLL1/ob2qDJgg5JgNdojBAZSAKnAjkyOCNug6n+OBl4VW76XjvgSFTdaMcW0Ug==", "dev": true, "requires": { "@babel/helper-function-name": "^7.10.4", @@ -333,14 +397,14 @@ } }, "@babel/helpers": { - "version": "7.12.5", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.12.5.tgz", - "integrity": "sha512-lgKGMQlKqA8meJqKsW6rUnc4MdUk35Ln0ATDqdM1a/UpARODdI4j5Y5lVfUScnSNkJcdCRAaWkspykNoFg9sJA==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.10.4.tgz", + "integrity": "sha512-L2gX/XeUONeEbI78dXSrJzGdz4GQ+ZTA/aazfUsFaWjSe95kiCuOZ5HsXvkiw3iwF+mFHSRUfJU8t6YavocdXA==", "dev": true, "requires": { "@babel/template": "^7.10.4", - "@babel/traverse": "^7.12.5", - "@babel/types": "^7.12.5" + "@babel/traverse": "^7.10.4", + "@babel/types": "^7.10.4" } }, "@babel/highlight": { @@ -355,47 +419,47 @@ } }, "@babel/parser": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.12.11.tgz", - "integrity": "sha512-N3UxG+uuF4CMYoNj8AhnbAcJF0PiuJ9KHuy1lQmkYsxTer/MAH9UBNHsBoAX/4s6NvlDD047No8mYVGGzLL4hg==", + "version": "7.11.3", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.11.3.tgz", + "integrity": "sha512-REo8xv7+sDxkKvoxEywIdsNFiZLybwdI7hcT5uEPyQrSMB4YQ973BfC9OOrD/81MaIjh6UxdulIQXkjmiH3PcA==", "dev": true }, "@babel/plugin-proposal-async-generator-functions": { - "version": "7.12.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.12.12.tgz", - "integrity": "sha512-nrz9y0a4xmUrRq51bYkWJIO5SBZyG2ys2qinHsN0zHDHVsUaModrkpyWWWXfGqYQmOL3x9sQIcTNN/pBGpo09A==", + "version": "7.10.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.10.5.tgz", + "integrity": "sha512-cNMCVezQbrRGvXJwm9fu/1sJj9bHdGAgKodZdLqOQIpfoH3raqmRPBM17+lh7CzhiKRRBrGtZL9WcjxSoGYUSg==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-remap-async-to-generator": "^7.12.1", + "@babel/helper-remap-async-to-generator": "^7.10.4", "@babel/plugin-syntax-async-generators": "^7.8.0" } }, "@babel/plugin-proposal-class-properties": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.12.1.tgz", - "integrity": "sha512-cKp3dlQsFsEs5CWKnN7BnSHOd0EOW8EKpEjkoz1pO2E5KzIDNV9Ros1b0CnmbVgAGXJubOYVBOGCT1OmJwOI7w==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.10.4.tgz", + "integrity": "sha512-vhwkEROxzcHGNu2mzUC0OFFNXdZ4M23ib8aRRcJSsW8BZK9pQMD7QB7csl97NBbgGZO7ZyHUyKDnxzOaP4IrCg==", "dev": true, "requires": { - "@babel/helper-create-class-features-plugin": "^7.12.1", + "@babel/helper-create-class-features-plugin": "^7.10.4", "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-proposal-decorators": { - "version": "7.3.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.3.0.tgz", - "integrity": "sha512-3W/oCUmsO43FmZIqermmq6TKaRSYhmh/vybPfVFwQWdSb8xwki38uAIvknCRzuyHRuYfCYmJzL9or1v0AffPjg==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.8.3.tgz", + "integrity": "sha512-e3RvdvS4qPJVTe288DlXjwKflpfy1hr0j5dz5WpIYYeP7vQZg2WfAEIp8k5/Lwis/m5REXEteIz6rrcDtXXG7w==", "dev": true, "requires": { - "@babel/helper-create-class-features-plugin": "^7.3.0", - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-syntax-decorators": "^7.2.0" + "@babel/helper-create-class-features-plugin": "^7.8.3", + "@babel/helper-plugin-utils": "^7.8.3", + "@babel/plugin-syntax-decorators": "^7.8.3" } }, "@babel/plugin-proposal-dynamic-import": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.12.1.tgz", - "integrity": "sha512-a4rhUSZFuq5W8/OO8H7BL5zspjnc1FLd9hlOxIK/f7qG4a0qsqk8uvF/ywgBA8/OmjsapjpvaEOYItfGG1qIvQ==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.10.4.tgz", + "integrity": "sha512-up6oID1LeidOOASNXgv/CFbgBqTuKJ0cJjz6An5tWD+NVBNlp3VNSBxv2ZdU7SYl3NxJC7agAQDApZusV6uFwQ==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.10.4", @@ -403,9 +467,9 @@ } }, "@babel/plugin-proposal-export-namespace-from": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.12.1.tgz", - "integrity": "sha512-6CThGf0irEkzujYS5LQcjBx8j/4aQGiVv7J9+2f7pGfxqyKh3WnmVJYW3hdrQjyksErMGBPQrCnHfOtna+WLbw==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.10.4.tgz", + "integrity": "sha512-aNdf0LY6/3WXkhh0Fdb6Zk9j1NMD8ovj3F6r0+3j837Pn1S1PdNtcwJ5EG9WkVPNHPxyJDaxMaAOVq4eki0qbg==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.10.4", @@ -413,9 +477,9 @@ } }, "@babel/plugin-proposal-json-strings": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.12.1.tgz", - "integrity": "sha512-GoLDUi6U9ZLzlSda2Df++VSqDJg3CG+dR0+iWsv6XRw1rEq+zwt4DirM9yrxW6XWaTpmai1cWJLMfM8qQJf+yw==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.10.4.tgz", + "integrity": "sha512-fCL7QF0Jo83uy1K0P2YXrfX11tj3lkpN7l4dMv9Y9VkowkhkQDwFHFd8IiwyK5MZjE8UpbgokkgtcReH88Abaw==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.10.4", @@ -423,9 +487,9 @@ } }, "@babel/plugin-proposal-logical-assignment-operators": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.12.1.tgz", - "integrity": "sha512-k8ZmVv0JU+4gcUGeCDZOGd0lCIamU/sMtIiX3UWnUc5yzgq6YUGyEolNYD+MLYKfSzgECPcqetVcJP9Afe/aCA==", + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.11.0.tgz", + "integrity": "sha512-/f8p4z+Auz0Uaf+i8Ekf1iM7wUNLcViFUGiPxKeXvxTSl63B875YPiVdUDdem7hREcI0E0kSpEhS8tF5RphK7Q==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.10.4", @@ -433,9 +497,9 @@ } }, "@babel/plugin-proposal-nullish-coalescing-operator": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.12.1.tgz", - "integrity": "sha512-nZY0ESiaQDI1y96+jk6VxMOaL4LPo/QDHBqL+SF3/vl6dHkTwHlOI8L4ZwuRBHgakRBw5zsVylel7QPbbGuYgg==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.10.4.tgz", + "integrity": "sha512-wq5n1M3ZUlHl9sqT2ok1T2/MTt6AXE0e1Lz4WzWBr95LsAZ5qDXe4KnFuauYyEyLiohvXFMdbsOTMyLZs91Zlw==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.10.4", @@ -443,9 +507,9 @@ } }, "@babel/plugin-proposal-numeric-separator": { - "version": "7.12.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.12.7.tgz", - "integrity": "sha512-8c+uy0qmnRTeukiGsjLGy6uVs/TFjJchGXUeBqlG4VWYOdJWkhhVPdQ3uHwbmalfJwv2JsV0qffXP4asRfL2SQ==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.10.4.tgz", + "integrity": "sha512-73/G7QoRoeNkLZFxsoCCvlg4ezE4eM+57PnOqgaPOozd5myfj7p0muD1mRVJvbUWbOzD+q3No2bWbaKy+DJ8DA==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.10.4", @@ -453,20 +517,20 @@ } }, "@babel/plugin-proposal-object-rest-spread": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.12.1.tgz", - "integrity": "sha512-s6SowJIjzlhx8o7lsFx5zmY4At6CTtDvgNQDdPzkBQucle58A6b/TTeEBYtyDgmcXjUTM+vE8YOGHZzzbc/ioA==", + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.11.0.tgz", + "integrity": "sha512-wzch41N4yztwoRw0ak+37wxwJM2oiIiy6huGCoqkvSTA9acYWcPfn9Y4aJqmFFJ70KTJUu29f3DQ43uJ9HXzEA==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.10.4", "@babel/plugin-syntax-object-rest-spread": "^7.8.0", - "@babel/plugin-transform-parameters": "^7.12.1" + "@babel/plugin-transform-parameters": "^7.10.4" } }, "@babel/plugin-proposal-optional-catch-binding": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.12.1.tgz", - "integrity": "sha512-hFvIjgprh9mMw5v42sJWLI1lzU5L2sznP805zeT6rySVRA0Y18StRhDqhSxlap0oVgItRsB6WSROp4YnJTJz0g==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.10.4.tgz", + "integrity": "sha512-LflT6nPh+GK2MnFiKDyLiqSqVHkQnVf7hdoAvyTnnKj9xB3docGRsdPuxp6qqqW19ifK3xgc9U5/FwrSaCNX5g==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.10.4", @@ -474,33 +538,33 @@ } }, "@babel/plugin-proposal-optional-chaining": { - "version": "7.12.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.12.7.tgz", - "integrity": "sha512-4ovylXZ0PWmwoOvhU2vhnzVNnm88/Sm9nx7V8BPgMvAzn5zDou3/Awy0EjglyubVHasJj+XCEkr/r1X3P5elCA==", + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.11.0.tgz", + "integrity": "sha512-v9fZIu3Y8562RRwhm1BbMRxtqZNFmFA2EG+pT2diuU8PT3H6T/KXoZ54KgYisfOFZHV6PfvAiBIZ9Rcz+/JCxA==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-skip-transparent-expression-wrappers": "^7.12.1", + "@babel/helper-skip-transparent-expression-wrappers": "^7.11.0", "@babel/plugin-syntax-optional-chaining": "^7.8.0" } }, "@babel/plugin-proposal-private-methods": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.12.1.tgz", - "integrity": "sha512-mwZ1phvH7/NHK6Kf8LP7MYDogGV+DKB1mryFOEwx5EBNQrosvIczzZFTUmWaeujd5xT6G1ELYWUz3CutMhjE1w==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.10.4.tgz", + "integrity": "sha512-wh5GJleuI8k3emgTg5KkJK6kHNsGEr0uBTDBuQUBJwckk9xs1ez79ioheEVVxMLyPscB0LfkbVHslQqIzWV6Bw==", "dev": true, "requires": { - "@babel/helper-create-class-features-plugin": "^7.12.1", + "@babel/helper-create-class-features-plugin": "^7.10.4", "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-proposal-unicode-property-regex": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.12.1.tgz", - "integrity": "sha512-MYq+l+PvHuw/rKUz1at/vb6nCnQ2gmJBNaM62z0OgH7B2W1D9pvkpYtlti9bGtizNIU1K3zm4bZF9F91efVY0w==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.10.4.tgz", + "integrity": "sha512-H+3fOgPnEXFL9zGYtKQe4IDOPKYlZdF1kqFDQRRb8PK4B8af1vAGK04tF5iQAAsui+mHNBQSAtd2/ndEDe9wuA==", "dev": true, "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.12.1", + "@babel/helper-create-regexp-features-plugin": "^7.10.4", "@babel/helper-plugin-utils": "^7.10.4" } }, @@ -514,18 +578,18 @@ } }, "@babel/plugin-syntax-class-properties": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.1.tgz", - "integrity": "sha512-U40A76x5gTwmESz+qiqssqmeEsKvcSyvtgktrm0uzcARAmM9I1jR221f6Oq+GmHrcD+LvZDag1UTOTe2fL3TeA==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.10.4.tgz", + "integrity": "sha512-GCSBF7iUle6rNugfURwNmCGG3Z/2+opxAMLs1nND4bhEG5PuxTIggDBoeYYSujAlLtsupzOHYJQgPS3pivwXIA==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-syntax-decorators": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.12.1.tgz", - "integrity": "sha512-ir9YW5daRrTYiy9UJ2TzdNIJEZu8KclVzDcfSt4iEmOtwQ4llPtWInNKJyKnVXp1vE4bbVd5S31M/im3mYMO1w==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.10.4.tgz", + "integrity": "sha512-2NaoC6fAk2VMdhY1eerkfHV+lVYC1u8b+jmRJISqANCJlTxYy19HGdIkkQtix2UtkcPuPu+IlDgrVseZnU03bw==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.10.4" @@ -550,9 +614,9 @@ } }, "@babel/plugin-syntax-flow": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.12.1.tgz", - "integrity": "sha512-1lBLLmtxrwpm4VKmtVFselI/P3pX+G63fAtUUt6b2Nzgao77KNDwyuRt90Mj2/9pKobtt68FdvjfqohZjg/FCA==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.10.4.tgz", + "integrity": "sha512-yxQsX1dJixF4qEEdzVbst3SZQ58Nrooz8NV9Z9GL4byTE25BvJgl5lf0RECUf0fh28rZBb/RYTWn/eeKwCMrZQ==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.10.4" @@ -568,9 +632,9 @@ } }, "@babel/plugin-syntax-jsx": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.12.1.tgz", - "integrity": "sha512-1yRi7yAtB0ETgxdY9ti/p2TivUxJkTdhu/ZbF9MshVGqOx1TdB3b7xCXs49Fupgg50N45KcAsRP/ZqWjs9SRjg==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.10.4.tgz", + "integrity": "sha512-KCg9mio9jwiARCB7WAcQ7Y1q+qicILjoK8LP/VkPkEKaf5dkaZZK1EcTe91a3JJlZ3qy6L5s9X52boEYi8DM9g==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.10.4" @@ -631,65 +695,65 @@ } }, "@babel/plugin-syntax-top-level-await": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.12.1.tgz", - "integrity": "sha512-i7ooMZFS+a/Om0crxZodrTzNEPJHZrlMVGMTEpFAj6rYY/bKCddB0Dk/YxfPuYXOopuhKk/e1jV6h+WUU9XN3A==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.10.4.tgz", + "integrity": "sha512-ni1brg4lXEmWyafKr0ccFWkJG0CeMt4WV1oyeBW6EFObF4oOHclbkj5cARxAPQyAQ2UTuplJyK4nfkXIMMFvsQ==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-syntax-typescript": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.12.1.tgz", - "integrity": "sha512-UZNEcCY+4Dp9yYRCAHrHDU+9ZXLYaY9MgBXSRLkB9WjYFRR6quJBumfVrEkUxrePPBwFcpWfNKXqVRQQtm7mMA==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.10.4.tgz", + "integrity": "sha512-oSAEz1YkBCAKr5Yiq8/BNtvSAPwkp/IyUnwZogd8p+F0RuYQQrLeRUzIQhueQTTBy/F+a40uS7OFKxnkRvmvFQ==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-arrow-functions": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.12.1.tgz", - "integrity": "sha512-5QB50qyN44fzzz4/qxDPQMBCTHgxg3n0xRBLJUmBlLoU/sFvxVWGZF/ZUfMVDQuJUKXaBhbupxIzIfZ6Fwk/0A==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.10.4.tgz", + "integrity": "sha512-9J/oD1jV0ZCBcgnoFWFq1vJd4msoKb/TCpGNFyyLt0zABdcvgK3aYikZ8HjzB14c26bc7E3Q1yugpwGy2aTPNA==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-async-to-generator": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.12.1.tgz", - "integrity": "sha512-SDtqoEcarK1DFlRJ1hHRY5HvJUj5kX4qmtpMAm2QnhOlyuMC4TMdCRgW6WXpv93rZeYNeLP22y8Aq2dbcDRM1A==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.10.4.tgz", + "integrity": "sha512-F6nREOan7J5UXTLsDsZG3DXmZSVofr2tGNwfdrVwkDWHfQckbQXnXSPfD7iO+c/2HGqycwyLST3DnZ16n+cBJQ==", "dev": true, "requires": { - "@babel/helper-module-imports": "^7.12.1", + "@babel/helper-module-imports": "^7.10.4", "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-remap-async-to-generator": "^7.12.1" + "@babel/helper-remap-async-to-generator": "^7.10.4" } }, "@babel/plugin-transform-block-scoped-functions": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.12.1.tgz", - "integrity": "sha512-5OpxfuYnSgPalRpo8EWGPzIYf0lHBWORCkj5M0oLBwHdlux9Ri36QqGW3/LR13RSVOAoUUMzoPI/jpE4ABcHoA==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.10.4.tgz", + "integrity": "sha512-WzXDarQXYYfjaV1szJvN3AD7rZgZzC1JtjJZ8dMHUyiK8mxPRahynp14zzNjU3VkPqPsO38CzxiWO1c9ARZ8JA==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-block-scoping": { - "version": "7.12.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.12.12.tgz", - "integrity": "sha512-VOEPQ/ExOVqbukuP7BYJtI5ZxxsmegTwzZ04j1aF0dkSypGo9XpDHuOrABsJu+ie+penpSJheDJ11x1BEZNiyQ==", + "version": "7.11.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.11.1.tgz", + "integrity": "sha512-00dYeDE0EVEHuuM+26+0w/SCL0BH2Qy7LwHuI4Hi4MH5gkC8/AqMN5uWFJIsoXZrAphiMm1iXzBw6L2T+eA0ew==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-classes": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.12.1.tgz", - "integrity": "sha512-/74xkA7bVdzQTBeSUhLLJgYIcxw/dpEpCdRDiHgPJ3Mv6uC11UhjpOhl72CgqbBCmt1qtssCyB2xnJm1+PFjog==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.10.4.tgz", + "integrity": "sha512-2oZ9qLjt161dn1ZE0Ms66xBncQH4In8Sqw1YWgBUZuGVJJS5c0OFZXL6dP2MRHrkU/eKhWg8CzFJhRQl50rQxA==", "dev": true, "requires": { "@babel/helper-annotate-as-pure": "^7.10.4", @@ -697,52 +761,52 @@ "@babel/helper-function-name": "^7.10.4", "@babel/helper-optimise-call-expression": "^7.10.4", "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-replace-supers": "^7.12.1", + "@babel/helper-replace-supers": "^7.10.4", "@babel/helper-split-export-declaration": "^7.10.4", "globals": "^11.1.0" } }, "@babel/plugin-transform-computed-properties": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.12.1.tgz", - "integrity": "sha512-vVUOYpPWB7BkgUWPo4C44mUQHpTZXakEqFjbv8rQMg7TC6S6ZhGZ3otQcRH6u7+adSlE5i0sp63eMC/XGffrzg==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.10.4.tgz", + "integrity": "sha512-JFwVDXcP/hM/TbyzGq3l/XWGut7p46Z3QvqFMXTfk6/09m7xZHJUN9xHfsv7vqqD4YnfI5ueYdSJtXqqBLyjBw==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-destructuring": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.12.1.tgz", - "integrity": "sha512-fRMYFKuzi/rSiYb2uRLiUENJOKq4Gnl+6qOv5f8z0TZXg3llUwUhsNNwrwaT/6dUhJTzNpBr+CUvEWBtfNY1cw==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.10.4.tgz", + "integrity": "sha512-+WmfvyfsyF603iPa6825mq6Qrb7uLjTOsa3XOFzlYcYDHSS4QmpOWOL0NNBY5qMbvrcf3tq0Cw+v4lxswOBpgA==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-dotall-regex": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.12.1.tgz", - "integrity": "sha512-B2pXeRKoLszfEW7J4Hg9LoFaWEbr/kzo3teWHmtFCszjRNa/b40f9mfeqZsIDLLt/FjwQ6pz/Gdlwy85xNckBA==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.10.4.tgz", + "integrity": "sha512-ZEAVvUTCMlMFAbASYSVQoxIbHm2OkG2MseW6bV2JjIygOjdVv8tuxrCTzj1+Rynh7ODb8GivUy7dzEXzEhuPaA==", "dev": true, "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.12.1", + "@babel/helper-create-regexp-features-plugin": "^7.10.4", "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-duplicate-keys": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.12.1.tgz", - "integrity": "sha512-iRght0T0HztAb/CazveUpUQrZY+aGKKaWXMJ4uf9YJtqxSUe09j3wteztCUDRHs+SRAL7yMuFqUsLoAKKzgXjw==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.10.4.tgz", + "integrity": "sha512-GL0/fJnmgMclHiBTTWXNlYjYsA7rDrtsazHG6mglaGSTh0KsrW04qml+Bbz9FL0LcJIRwBWL5ZqlNHKTkU3xAA==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-exponentiation-operator": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.12.1.tgz", - "integrity": "sha512-7tqwy2bv48q+c1EHbXK0Zx3KXd2RVQp6OC7PbwFNt/dPTAV3Lu5sWtWuAj8owr5wqtWnqHfl2/mJlUmqkChKug==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.10.4.tgz", + "integrity": "sha512-S5HgLVgkBcRdyQAHbKj+7KyuWx8C6t5oETmUuwz1pt3WTWJhsUV0WIIXuVvfXMxl/QQyHKlSCNNtaIamG8fysw==", "dev": true, "requires": { "@babel/helper-builder-binary-assignment-operator-visitor": "^7.10.4", @@ -750,28 +814,28 @@ } }, "@babel/plugin-transform-flow-strip-types": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.2.3.tgz", - "integrity": "sha512-xnt7UIk9GYZRitqCnsVMjQK1O2eKZwFB3CvvHjf5SGx6K6vr/MScCKQDnf1DxRaj501e3pXjti+inbSXX2ZUoQ==", + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.9.0.tgz", + "integrity": "sha512-7Qfg0lKQhEHs93FChxVLAvhBshOPQDtJUTVHr/ZwQNRccCm4O9D79r9tVSoV8iNwjP1YgfD+e/fgHcPkN1qEQg==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-syntax-flow": "^7.2.0" + "@babel/helper-plugin-utils": "^7.8.3", + "@babel/plugin-syntax-flow": "^7.8.3" } }, "@babel/plugin-transform-for-of": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.12.1.tgz", - "integrity": "sha512-Zaeq10naAsuHo7heQvyV0ptj4dlZJwZgNAtBYBnu5nNKJoW62m0zKcIEyVECrUKErkUkg6ajMy4ZfnVZciSBhg==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.10.4.tgz", + "integrity": "sha512-ItdQfAzu9AlEqmusA/65TqJ79eRcgGmpPPFvBnGILXZH975G0LNjP1yjHvGgfuCxqrPPueXOPe+FsvxmxKiHHQ==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-function-name": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.12.1.tgz", - "integrity": "sha512-JF3UgJUILoFrFMEnOJLJkRHSk6LUSXLmEFsA23aR2O5CSLUxbeUX1IZ1YQ7Sn0aXb601Ncwjx73a+FVqgcljVw==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.10.4.tgz", + "integrity": "sha512-OcDCq2y5+E0dVD5MagT5X+yTRbcvFjDI2ZVAottGH6tzqjx/LKpgkUepu3hp/u4tZBzxxpNGwLsAvGBvQ2mJzg==", "dev": true, "requires": { "@babel/helper-function-name": "^7.10.4", @@ -779,177 +843,180 @@ } }, "@babel/plugin-transform-literals": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.12.1.tgz", - "integrity": "sha512-+PxVGA+2Ag6uGgL0A5f+9rklOnnMccwEBzwYFL3EUaKuiyVnUipyXncFcfjSkbimLrODoqki1U9XxZzTvfN7IQ==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.10.4.tgz", + "integrity": "sha512-Xd/dFSTEVuUWnyZiMu76/InZxLTYilOSr1UlHV+p115Z/Le2Fi1KXkJUYz0b42DfndostYlPub3m8ZTQlMaiqQ==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-member-expression-literals": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.12.1.tgz", - "integrity": "sha512-1sxePl6z9ad0gFMB9KqmYofk34flq62aqMt9NqliS/7hPEpURUCMbyHXrMPlo282iY7nAvUB1aQd5mg79UD9Jg==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.10.4.tgz", + "integrity": "sha512-0bFOvPyAoTBhtcJLr9VcwZqKmSjFml1iVxvPL0ReomGU53CX53HsM4h2SzckNdkQcHox1bpAqzxBI1Y09LlBSw==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-modules-amd": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.12.1.tgz", - "integrity": "sha512-tDW8hMkzad5oDtzsB70HIQQRBiTKrhfgwC/KkJeGsaNFTdWhKNt/BiE8c5yj19XiGyrxpbkOfH87qkNg1YGlOQ==", + "version": "7.10.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.10.5.tgz", + "integrity": "sha512-elm5uruNio7CTLFItVC/rIzKLfQ17+fX7EVz5W0TMgIHFo1zY0Ozzx+lgwhL4plzl8OzVn6Qasx5DeEFyoNiRw==", "dev": true, "requires": { - "@babel/helper-module-transforms": "^7.12.1", + "@babel/helper-module-transforms": "^7.10.5", "@babel/helper-plugin-utils": "^7.10.4", "babel-plugin-dynamic-import-node": "^2.3.3" } }, "@babel/plugin-transform-modules-commonjs": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.12.1.tgz", - "integrity": "sha512-dY789wq6l0uLY8py9c1B48V8mVL5gZh/+PQ5ZPrylPYsnAvnEMjqsUXkuoDVPeVK+0VyGar+D08107LzDQ6pag==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.10.4.tgz", + "integrity": "sha512-Xj7Uq5o80HDLlW64rVfDBhao6OX89HKUmb+9vWYaLXBZOma4gA6tw4Ni1O5qVDoZWUV0fxMYA0aYzOawz0l+1w==", "dev": true, "requires": { - "@babel/helper-module-transforms": "^7.12.1", + "@babel/helper-module-transforms": "^7.10.4", "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-simple-access": "^7.12.1", + "@babel/helper-simple-access": "^7.10.4", "babel-plugin-dynamic-import-node": "^2.3.3" } }, "@babel/plugin-transform-modules-systemjs": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.12.1.tgz", - "integrity": "sha512-Hn7cVvOavVh8yvW6fLwveFqSnd7rbQN3zJvoPNyNaQSvgfKmDBO9U1YL9+PCXGRlZD9tNdWTy5ACKqMuzyn32Q==", + "version": "7.10.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.10.5.tgz", + "integrity": "sha512-f4RLO/OL14/FP1AEbcsWMzpbUz6tssRaeQg11RH1BP/XnPpRoVwgeYViMFacnkaw4k4wjRSjn3ip1Uw9TaXuMw==", "dev": true, "requires": { "@babel/helper-hoist-variables": "^7.10.4", - "@babel/helper-module-transforms": "^7.12.1", + "@babel/helper-module-transforms": "^7.10.5", "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-validator-identifier": "^7.10.4", "babel-plugin-dynamic-import-node": "^2.3.3" } }, "@babel/plugin-transform-modules-umd": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.12.1.tgz", - "integrity": "sha512-aEIubCS0KHKM0zUos5fIoQm+AZUMt1ZvMpqz0/H5qAQ7vWylr9+PLYurT+Ic7ID/bKLd4q8hDovaG3Zch2uz5Q==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.10.4.tgz", + "integrity": "sha512-mohW5q3uAEt8T45YT7Qc5ws6mWgJAaL/8BfWD9Dodo1A3RKWli8wTS+WiQ/knF+tXlPirW/1/MqzzGfCExKECA==", "dev": true, "requires": { - "@babel/helper-module-transforms": "^7.12.1", + "@babel/helper-module-transforms": "^7.10.4", "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.12.1.tgz", - "integrity": "sha512-tB43uQ62RHcoDp9v2Nsf+dSM8sbNodbEicbQNA53zHz8pWUhsgHSJCGpt7daXxRydjb0KnfmB+ChXOv3oADp1Q==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.10.4.tgz", + "integrity": "sha512-V6LuOnD31kTkxQPhKiVYzYC/Jgdq53irJC/xBSmqcNcqFGV+PER4l6rU5SH2Vl7bH9mLDHcc0+l9HUOe4RNGKA==", "dev": true, "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.12.1" + "@babel/helper-create-regexp-features-plugin": "^7.10.4" } }, "@babel/plugin-transform-new-target": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.12.1.tgz", - "integrity": "sha512-+eW/VLcUL5L9IvJH7rT1sT0CzkdUTvPrXC2PXTn/7z7tXLBuKvezYbGdxD5WMRoyvyaujOq2fWoKl869heKjhw==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.10.4.tgz", + "integrity": "sha512-YXwWUDAH/J6dlfwqlWsztI2Puz1NtUAubXhOPLQ5gjR/qmQ5U96DY4FQO8At33JN4XPBhrjB8I4eMmLROjjLjw==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-object-super": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.12.1.tgz", - "integrity": "sha512-AvypiGJH9hsquNUn+RXVcBdeE3KHPZexWRdimhuV59cSoOt5kFBmqlByorAeUlGG2CJWd0U+4ZtNKga/TB0cAw==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.10.4.tgz", + "integrity": "sha512-5iTw0JkdRdJvr7sY0vHqTpnruUpTea32JHmq/atIWqsnNussbRzjEDyWep8UNztt1B5IusBYg8Irb0bLbiEBCQ==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-replace-supers": "^7.12.1" + "@babel/helper-replace-supers": "^7.10.4" } }, "@babel/plugin-transform-parameters": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.12.1.tgz", - "integrity": "sha512-xq9C5EQhdPK23ZeCdMxl8bbRnAgHFrw5EOC3KJUsSylZqdkCaFEXxGSBuTSObOpiiHHNyb82es8M1QYgfQGfNg==", + "version": "7.10.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.10.5.tgz", + "integrity": "sha512-xPHwUj5RdFV8l1wuYiu5S9fqWGM2DrYc24TMvUiRrPVm+SM3XeqU9BcokQX/kEUe+p2RBwy+yoiR1w/Blq6ubw==", "dev": true, "requires": { + "@babel/helper-get-function-arity": "^7.10.4", "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-property-literals": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.12.1.tgz", - "integrity": "sha512-6MTCR/mZ1MQS+AwZLplX4cEySjCpnIF26ToWo942nqn8hXSm7McaHQNeGx/pt7suI1TWOWMfa/NgBhiqSnX0cQ==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.10.4.tgz", + "integrity": "sha512-ofsAcKiUxQ8TY4sScgsGeR2vJIsfrzqvFb9GvJ5UdXDzl+MyYCaBj/FGzXuv7qE0aJcjWMILny1epqelnFlz8g==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-react-constant-elements": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.12.1.tgz", - "integrity": "sha512-KOHd0tIRLoER+J+8f9DblZDa1fLGPwaaN1DI1TVHuQFOpjHV22C3CUB3obeC4fexHY9nx+fH0hQNvLFFfA1mxA==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.10.4.tgz", + "integrity": "sha512-cYmQBW1pXrqBte1raMkAulXmi7rjg3VI6ZLg9QIic8Hq7BtYXaWuZSxsr2siOMI6SWwpxjWfnwhTUrd7JlAV7g==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-react-display-name": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.12.1.tgz", - "integrity": "sha512-cAzB+UzBIrekfYxyLlFqf/OagTvHLcVBb5vpouzkYkBclRPraiygVnafvAoipErZLI8ANv8Ecn6E/m5qPXD26w==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.10.4.tgz", + "integrity": "sha512-Zd4X54Mu9SBfPGnEcaGcOrVAYOtjT2on8QZkLKEq1S/tHexG39d9XXGZv19VfRrDjPJzFmPfTAqOQS1pfFOujw==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-react-jsx": { - "version": "7.12.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.12.12.tgz", - "integrity": "sha512-JDWGuzGNWscYcq8oJVCtSE61a5+XAOos+V0HrxnDieUus4UMnBEosDnY1VJqU5iZ4pA04QY7l0+JvHL1hZEfsw==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.10.4.tgz", + "integrity": "sha512-L+MfRhWjX0eI7Js093MM6MacKU4M6dnCRa/QPDwYMxjljzSCzzlzKzj9Pk4P3OtrPcxr2N3znR419nr3Xw+65A==", "dev": true, "requires": { - "@babel/helper-annotate-as-pure": "^7.12.10", - "@babel/helper-module-imports": "^7.12.5", + "@babel/helper-builder-react-jsx": "^7.10.4", + "@babel/helper-builder-react-jsx-experimental": "^7.10.4", "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-jsx": "^7.12.1", - "@babel/types": "^7.12.12" + "@babel/plugin-syntax-jsx": "^7.10.4" } }, "@babel/plugin-transform-react-jsx-development": { - "version": "7.12.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.12.12.tgz", - "integrity": "sha512-i1AxnKxHeMxUaWVXQOSIco4tvVvvCxMSfeBMnMM06mpaJt3g+MpxYQQrDfojUQldP1xxraPSJYSMEljoWM/dCg==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.10.4.tgz", + "integrity": "sha512-RM3ZAd1sU1iQ7rI2dhrZRZGv0aqzNQMbkIUCS1txYpi9wHQ2ZHNjo5TwX+UD6pvFW4AbWqLVYvKy5qJSAyRGjQ==", "dev": true, "requires": { - "@babel/plugin-transform-react-jsx": "^7.12.12" + "@babel/helper-builder-react-jsx-experimental": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-jsx": "^7.10.4" } }, "@babel/plugin-transform-react-jsx-self": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.12.1.tgz", - "integrity": "sha512-FbpL0ieNWiiBB5tCldX17EtXgmzeEZjFrix72rQYeq9X6nUK38HCaxexzVQrZWXanxKJPKVVIU37gFjEQYkPkA==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.10.4.tgz", + "integrity": "sha512-yOvxY2pDiVJi0axdTWHSMi5T0DILN+H+SaeJeACHKjQLezEzhLx9nEF9xgpBLPtkZsks9cnb5P9iBEi21En3gg==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-jsx": "^7.10.4" } }, "@babel/plugin-transform-react-jsx-source": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.12.1.tgz", - "integrity": "sha512-keQ5kBfjJNRc6zZN1/nVHCd6LLIHq4aUKcVnvE/2l+ZZROSbqoiGFRtT5t3Is89XJxBQaP7NLZX2jgGHdZvvFQ==", + "version": "7.10.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.10.5.tgz", + "integrity": "sha512-wTeqHVkN1lfPLubRiZH3o73f4rfon42HpgxUSs86Nc+8QIcm/B9s8NNVXu/gwGcOyd7yDib9ikxoDLxJP0UiDA==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-jsx": "^7.10.4" } }, "@babel/plugin-transform-react-pure-annotations": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.12.1.tgz", - "integrity": "sha512-RqeaHiwZtphSIUZ5I85PEH19LOSzxfuEazoY7/pWASCAIBuATQzpSVD+eT6MebeeZT2F4eSL0u4vw6n4Nm0Mjg==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.10.4.tgz", + "integrity": "sha512-+njZkqcOuS8RaPakrnR9KvxjoG1ASJWpoIv/doyWngId88JoFlPlISenGXjrVacZUIALGUr6eodRs1vmPnF23A==", "dev": true, "requires": { "@babel/helper-annotate-as-pure": "^7.10.4", @@ -957,137 +1024,138 @@ } }, "@babel/plugin-transform-regenerator": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.12.1.tgz", - "integrity": "sha512-gYrHqs5itw6i4PflFX3OdBPMQdPbF4bj2REIUxlMRUFk0/ZOAIpDFuViuxPjUL7YC8UPnf+XG7/utJvqXdPKng==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.10.4.tgz", + "integrity": "sha512-3thAHwtor39A7C04XucbMg17RcZ3Qppfxr22wYzZNcVIkPHfpM9J0SO8zuCV6SZa265kxBJSrfKTvDCYqBFXGw==", "dev": true, "requires": { "regenerator-transform": "^0.14.2" } }, "@babel/plugin-transform-reserved-words": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.12.1.tgz", - "integrity": "sha512-pOnUfhyPKvZpVyBHhSBoX8vfA09b7r00Pmm1sH+29ae2hMTKVmSp4Ztsr8KBKjLjx17H0eJqaRC3bR2iThM54A==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.10.4.tgz", + "integrity": "sha512-hGsw1O6Rew1fkFbDImZIEqA8GoidwTAilwCyWqLBM9f+e/u/sQMQu7uX6dyokfOayRuuVfKOW4O7HvaBWM+JlQ==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-runtime": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.2.0.tgz", - "integrity": "sha512-jIgkljDdq4RYDnJyQsiWbdvGeei/0MOTtSHKO/rfbd/mXBxNpdlulMx49L0HQ4pug1fXannxoqCI+fYSle9eSw==", + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.9.0.tgz", + "integrity": "sha512-pUu9VSf3kI1OqbWINQ7MaugnitRss1z533436waNXp+0N3ur3zfut37sXiQMxkuCF4VUjwZucen/quskCh7NHw==", "dev": true, "requires": { - "@babel/helper-module-imports": "^7.0.0", - "@babel/helper-plugin-utils": "^7.0.0", + "@babel/helper-module-imports": "^7.8.3", + "@babel/helper-plugin-utils": "^7.8.3", "resolve": "^1.8.1", "semver": "^5.5.1" } }, "@babel/plugin-transform-shorthand-properties": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.12.1.tgz", - "integrity": "sha512-GFZS3c/MhX1OusqB1MZ1ct2xRzX5ppQh2JU1h2Pnfk88HtFTM+TWQqJNfwkmxtPQtb/s1tk87oENfXJlx7rSDw==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.10.4.tgz", + "integrity": "sha512-AC2K/t7o07KeTIxMoHneyX90v3zkm5cjHJEokrPEAGEy3UCp8sLKfnfOIGdZ194fyN4wfX/zZUWT9trJZ0qc+Q==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-spread": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.12.1.tgz", - "integrity": "sha512-vuLp8CP0BE18zVYjsEBZ5xoCecMK6LBMMxYzJnh01rxQRvhNhH1csMMmBfNo5tGpGO+NhdSNW2mzIvBu3K1fng==", + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.11.0.tgz", + "integrity": "sha512-UwQYGOqIdQJe4aWNyS7noqAnN2VbaczPLiEtln+zPowRNlD+79w3oi2TWfYe0eZgd+gjZCbsydN7lzWysDt+gw==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-skip-transparent-expression-wrappers": "^7.12.1" + "@babel/helper-skip-transparent-expression-wrappers": "^7.11.0" } }, "@babel/plugin-transform-sticky-regex": { - "version": "7.12.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.12.7.tgz", - "integrity": "sha512-VEiqZL5N/QvDbdjfYQBhruN0HYjSPjC4XkeqW4ny/jNtH9gcbgaqBIXYEZCNnESMAGs0/K/R7oFGMhOyu/eIxg==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.10.4.tgz", + "integrity": "sha512-Ddy3QZfIbEV0VYcVtFDCjeE4xwVTJWTmUtorAJkn6u/92Z/nWJNV+mILyqHKrUxXYKA2EoCilgoPePymKL4DvQ==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-regex": "^7.10.4" } }, "@babel/plugin-transform-template-literals": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.12.1.tgz", - "integrity": "sha512-b4Zx3KHi+taXB1dVRBhVJtEPi9h1THCeKmae2qP0YdUHIFhVjtpqqNfxeVAa1xeHVhAy4SbHxEwx5cltAu5apw==", + "version": "7.10.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.10.5.tgz", + "integrity": "sha512-V/lnPGIb+KT12OQikDvgSuesRX14ck5FfJXt6+tXhdkJ+Vsd0lDCVtF6jcB4rNClYFzaB2jusZ+lNISDk2mMMw==", "dev": true, "requires": { + "@babel/helper-annotate-as-pure": "^7.10.4", "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-typeof-symbol": { - "version": "7.12.10", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.12.10.tgz", - "integrity": "sha512-JQ6H8Rnsogh//ijxspCjc21YPd3VLVoYtAwv3zQmqAt8YGYUtdo5usNhdl4b9/Vir2kPFZl6n1h0PfUz4hJhaA==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.10.4.tgz", + "integrity": "sha512-QqNgYwuuW0y0H+kUE/GWSR45t/ccRhe14Fs/4ZRouNNQsyd4o3PG4OtHiIrepbM2WKUBDAXKCAK/Lk4VhzTaGA==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-typescript": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.12.1.tgz", - "integrity": "sha512-VrsBByqAIntM+EYMqSm59SiMEf7qkmI9dqMt6RbD/wlwueWmYcI0FFK5Fj47pP6DRZm+3teXjosKlwcZJ5lIMw==", + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.11.0.tgz", + "integrity": "sha512-edJsNzTtvb3MaXQwj8403B7mZoGu9ElDJQZOKjGUnvilquxBA3IQoEIOvkX/1O8xfAsnHS/oQhe2w/IXrr+w0w==", "dev": true, "requires": { - "@babel/helper-create-class-features-plugin": "^7.12.1", + "@babel/helper-create-class-features-plugin": "^7.10.5", "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-typescript": "^7.12.1" + "@babel/plugin-syntax-typescript": "^7.10.4" } }, "@babel/plugin-transform-unicode-escapes": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.12.1.tgz", - "integrity": "sha512-I8gNHJLIc7GdApm7wkVnStWssPNbSRMPtgHdmH3sRM1zopz09UWPS4x5V4n1yz/MIWTVnJ9sp6IkuXdWM4w+2Q==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.10.4.tgz", + "integrity": "sha512-y5XJ9waMti2J+e7ij20e+aH+fho7Wb7W8rNuu72aKRwCHFqQdhkdU2lo3uZ9tQuboEJcUFayXdARhcxLQ3+6Fg==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-unicode-regex": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.12.1.tgz", - "integrity": "sha512-SqH4ClNngh/zGwHZOOQMTD+e8FGWexILV+ePMyiDJttAWRh5dhDL8rcl5lSgU3Huiq6Zn6pWTMvdPAb21Dwdyg==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.10.4.tgz", + "integrity": "sha512-wNfsc4s8N2qnIwpO/WP2ZiSyjfpTamT2C9V9FDH/Ljub9zw6P3SjkXcFmc0RQUt96k2fmIvtla2MMjgTwIAC+A==", "dev": true, "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.12.1", + "@babel/helper-create-regexp-features-plugin": "^7.10.4", "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/preset-env": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.12.11.tgz", - "integrity": "sha512-j8Tb+KKIXKYlDBQyIOy4BLxzv1NUOwlHfZ74rvW+Z0Gp4/cI2IMDPBWAgWceGcE7aep9oL/0K9mlzlMGxA8yNw==", + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.11.0.tgz", + "integrity": "sha512-2u1/k7rG/gTh02dylX2kL3S0IJNF+J6bfDSp4DI2Ma8QN6Y9x9pmAax59fsCk6QUQG0yqH47yJWA+u1I1LccAg==", "dev": true, "requires": { - "@babel/compat-data": "^7.12.7", - "@babel/helper-compilation-targets": "^7.12.5", - "@babel/helper-module-imports": "^7.12.5", + "@babel/compat-data": "^7.11.0", + "@babel/helper-compilation-targets": "^7.10.4", + "@babel/helper-module-imports": "^7.10.4", "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-validator-option": "^7.12.11", - "@babel/plugin-proposal-async-generator-functions": "^7.12.1", - "@babel/plugin-proposal-class-properties": "^7.12.1", - "@babel/plugin-proposal-dynamic-import": "^7.12.1", - "@babel/plugin-proposal-export-namespace-from": "^7.12.1", - "@babel/plugin-proposal-json-strings": "^7.12.1", - "@babel/plugin-proposal-logical-assignment-operators": "^7.12.1", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.12.1", - "@babel/plugin-proposal-numeric-separator": "^7.12.7", - "@babel/plugin-proposal-object-rest-spread": "^7.12.1", - "@babel/plugin-proposal-optional-catch-binding": "^7.12.1", - "@babel/plugin-proposal-optional-chaining": "^7.12.7", - "@babel/plugin-proposal-private-methods": "^7.12.1", - "@babel/plugin-proposal-unicode-property-regex": "^7.12.1", + "@babel/plugin-proposal-async-generator-functions": "^7.10.4", + "@babel/plugin-proposal-class-properties": "^7.10.4", + "@babel/plugin-proposal-dynamic-import": "^7.10.4", + "@babel/plugin-proposal-export-namespace-from": "^7.10.4", + "@babel/plugin-proposal-json-strings": "^7.10.4", + "@babel/plugin-proposal-logical-assignment-operators": "^7.11.0", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.10.4", + "@babel/plugin-proposal-numeric-separator": "^7.10.4", + "@babel/plugin-proposal-object-rest-spread": "^7.11.0", + "@babel/plugin-proposal-optional-catch-binding": "^7.10.4", + "@babel/plugin-proposal-optional-chaining": "^7.11.0", + "@babel/plugin-proposal-private-methods": "^7.10.4", + "@babel/plugin-proposal-unicode-property-regex": "^7.10.4", "@babel/plugin-syntax-async-generators": "^7.8.0", - "@babel/plugin-syntax-class-properties": "^7.12.1", + "@babel/plugin-syntax-class-properties": "^7.10.4", "@babel/plugin-syntax-dynamic-import": "^7.8.0", "@babel/plugin-syntax-export-namespace-from": "^7.8.3", "@babel/plugin-syntax-json-strings": "^7.8.0", @@ -1097,49 +1165,52 @@ "@babel/plugin-syntax-object-rest-spread": "^7.8.0", "@babel/plugin-syntax-optional-catch-binding": "^7.8.0", "@babel/plugin-syntax-optional-chaining": "^7.8.0", - "@babel/plugin-syntax-top-level-await": "^7.12.1", - "@babel/plugin-transform-arrow-functions": "^7.12.1", - "@babel/plugin-transform-async-to-generator": "^7.12.1", - "@babel/plugin-transform-block-scoped-functions": "^7.12.1", - "@babel/plugin-transform-block-scoping": "^7.12.11", - "@babel/plugin-transform-classes": "^7.12.1", - "@babel/plugin-transform-computed-properties": "^7.12.1", - "@babel/plugin-transform-destructuring": "^7.12.1", - "@babel/plugin-transform-dotall-regex": "^7.12.1", - "@babel/plugin-transform-duplicate-keys": "^7.12.1", - "@babel/plugin-transform-exponentiation-operator": "^7.12.1", - "@babel/plugin-transform-for-of": "^7.12.1", - "@babel/plugin-transform-function-name": "^7.12.1", - "@babel/plugin-transform-literals": "^7.12.1", - "@babel/plugin-transform-member-expression-literals": "^7.12.1", - "@babel/plugin-transform-modules-amd": "^7.12.1", - "@babel/plugin-transform-modules-commonjs": "^7.12.1", - "@babel/plugin-transform-modules-systemjs": "^7.12.1", - "@babel/plugin-transform-modules-umd": "^7.12.1", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.12.1", - "@babel/plugin-transform-new-target": "^7.12.1", - "@babel/plugin-transform-object-super": "^7.12.1", - "@babel/plugin-transform-parameters": "^7.12.1", - "@babel/plugin-transform-property-literals": "^7.12.1", - "@babel/plugin-transform-regenerator": "^7.12.1", - "@babel/plugin-transform-reserved-words": "^7.12.1", - "@babel/plugin-transform-shorthand-properties": "^7.12.1", - "@babel/plugin-transform-spread": "^7.12.1", - "@babel/plugin-transform-sticky-regex": "^7.12.7", - "@babel/plugin-transform-template-literals": "^7.12.1", - "@babel/plugin-transform-typeof-symbol": "^7.12.10", - "@babel/plugin-transform-unicode-escapes": "^7.12.1", - "@babel/plugin-transform-unicode-regex": "^7.12.1", + "@babel/plugin-syntax-top-level-await": "^7.10.4", + "@babel/plugin-transform-arrow-functions": "^7.10.4", + "@babel/plugin-transform-async-to-generator": "^7.10.4", + "@babel/plugin-transform-block-scoped-functions": "^7.10.4", + "@babel/plugin-transform-block-scoping": "^7.10.4", + "@babel/plugin-transform-classes": "^7.10.4", + "@babel/plugin-transform-computed-properties": "^7.10.4", + "@babel/plugin-transform-destructuring": "^7.10.4", + "@babel/plugin-transform-dotall-regex": "^7.10.4", + "@babel/plugin-transform-duplicate-keys": "^7.10.4", + "@babel/plugin-transform-exponentiation-operator": "^7.10.4", + "@babel/plugin-transform-for-of": "^7.10.4", + "@babel/plugin-transform-function-name": "^7.10.4", + "@babel/plugin-transform-literals": "^7.10.4", + "@babel/plugin-transform-member-expression-literals": "^7.10.4", + "@babel/plugin-transform-modules-amd": "^7.10.4", + "@babel/plugin-transform-modules-commonjs": "^7.10.4", + "@babel/plugin-transform-modules-systemjs": "^7.10.4", + "@babel/plugin-transform-modules-umd": "^7.10.4", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.10.4", + "@babel/plugin-transform-new-target": "^7.10.4", + "@babel/plugin-transform-object-super": "^7.10.4", + "@babel/plugin-transform-parameters": "^7.10.4", + "@babel/plugin-transform-property-literals": "^7.10.4", + "@babel/plugin-transform-regenerator": "^7.10.4", + "@babel/plugin-transform-reserved-words": "^7.10.4", + "@babel/plugin-transform-shorthand-properties": "^7.10.4", + "@babel/plugin-transform-spread": "^7.11.0", + "@babel/plugin-transform-sticky-regex": "^7.10.4", + "@babel/plugin-transform-template-literals": "^7.10.4", + "@babel/plugin-transform-typeof-symbol": "^7.10.4", + "@babel/plugin-transform-unicode-escapes": "^7.10.4", + "@babel/plugin-transform-unicode-regex": "^7.10.4", "@babel/preset-modules": "^0.1.3", - "@babel/types": "^7.12.11", - "core-js-compat": "^3.8.0", + "@babel/types": "^7.11.0", + "browserslist": "^4.12.0", + "core-js-compat": "^3.6.2", + "invariant": "^2.2.2", + "levenary": "^1.1.1", "semver": "^5.5.0" } }, "@babel/preset-modules": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.4.tgz", - "integrity": "sha512-J36NhwnfdzpmH41M1DrnkkgAqhZaqr/NBdPfQ677mLzlaXo+oDiv1deyCDtgAhz8p328otdob0Du7+xgHGZbKg==", + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.3.tgz", + "integrity": "sha512-Ra3JXOHBq2xd56xSF7lMKXdjBn3T772Y1Wet3yWnkDly9zHvJki029tAFzvAAK5cf4YV3yoxuP61crYRol6SVg==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.0.0", @@ -1150,154 +1221,447 @@ } }, "@babel/preset-react": { - "version": "7.12.10", - "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.12.10.tgz", - "integrity": "sha512-vtQNjaHRl4DUpp+t+g4wvTHsLQuye+n0H/wsXIZRn69oz/fvNC7gQ4IK73zGJBaxvHoxElDvnYCthMcT7uzFoQ==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.10.4.tgz", + "integrity": "sha512-BrHp4TgOIy4M19JAfO1LhycVXOPWdDbTRep7eVyatf174Hff+6Uk53sDyajqZPu8W1qXRBiYOfIamek6jA7YVw==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-transform-react-display-name": "^7.12.1", - "@babel/plugin-transform-react-jsx": "^7.12.10", - "@babel/plugin-transform-react-jsx-development": "^7.12.7", - "@babel/plugin-transform-react-pure-annotations": "^7.12.1" + "@babel/plugin-transform-react-display-name": "^7.10.4", + "@babel/plugin-transform-react-jsx": "^7.10.4", + "@babel/plugin-transform-react-jsx-development": "^7.10.4", + "@babel/plugin-transform-react-jsx-self": "^7.10.4", + "@babel/plugin-transform-react-jsx-source": "^7.10.4", + "@babel/plugin-transform-react-pure-annotations": "^7.10.4" } }, "@babel/preset-typescript": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.1.0.tgz", - "integrity": "sha512-LYveByuF9AOM8WrsNne5+N79k1YxjNB6gmpCQsnuSBAcV8QUeB+ZUxQzL7Rz7HksPbahymKkq2qBR+o36ggFZA==", + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.9.0.tgz", + "integrity": "sha512-S4cueFnGrIbvYJgwsVFKdvOmpiL0XGw9MFW9D0vgRys5g36PBhZRL8NX8Gr2akz8XRtzq6HuDXPD/1nniagNUg==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-transform-typescript": "^7.1.0" + "@babel/helper-plugin-utils": "^7.8.3", + "@babel/plugin-transform-typescript": "^7.9.0" } }, "@babel/runtime": { - "version": "7.12.5", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.5.tgz", - "integrity": "sha512-plcc+hbExy3McchJCEQG3knOsuh3HH+Prx1P6cLIkET/0dLuQDEnrT+s27Axgc9bqfsmNUNHfscgMUdBpC9xfg==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.10.4.tgz", + "integrity": "sha512-UpTN5yUJr9b4EX2CnGNWIvER7Ab83ibv0pcvvHc4UOdrBI5jb8bj+32cCwPX6xu0mt2daFNjYhoi+X7beH0RSw==", "requires": { "regenerator-runtime": "^0.13.4" }, + "dependencies": { + "regenerator-runtime": { + "version": "0.13.5", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.5.tgz", + "integrity": "sha512-ZS5w8CpKFinUzOwW3c83oPeVXoNsrLsaCoLtJvAClH135j/R77RuymhiSErhm2lKcwSCIpmvIWSbDkIfAqKQlA==" + } + } + }, + "@babel/runtime-corejs3": { + "version": "7.11.2", + "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.11.2.tgz", + "integrity": "sha512-qh5IR+8VgFz83VBa6OkaET6uN/mJOhHONuy3m1sgF0CV6mXdPSEBdA7e1eUbVvyNtANjMbg22JUv71BaDXLY6A==", + "dev": true, + "requires": { + "core-js-pure": "^3.0.0", + "regenerator-runtime": "^0.13.4" + }, "dependencies": { "regenerator-runtime": { "version": "0.13.7", "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz", - "integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==" + "integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==", + "dev": true } } }, "@babel/template": { - "version": "7.12.7", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.12.7.tgz", - "integrity": "sha512-GkDzmHS6GV7ZeXfJZ0tLRBhZcMcY0/Lnb+eEbXDBfCAcZCjrZKe6p3J4we/D24O9Y8enxWAg1cWwof59yLh2ow==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.4.tgz", + "integrity": "sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA==", "dev": true, "requires": { "@babel/code-frame": "^7.10.4", - "@babel/parser": "^7.12.7", - "@babel/types": "^7.12.7" + "@babel/parser": "^7.10.4", + "@babel/types": "^7.10.4" } }, "@babel/traverse": { - "version": "7.12.12", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.12.12.tgz", - "integrity": "sha512-s88i0X0lPy45RrLM8b9mz8RPH5FqO9G9p7ti59cToE44xFm1Q+Pjh5Gq4SXBbtb88X7Uy7pexeqRIQDDMNkL0w==", + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.11.0.tgz", + "integrity": "sha512-ZB2V+LskoWKNpMq6E5UUCrjtDUh5IOTAyIl0dTjIEoXum/iKWkoIEKIRDnUucO6f+2FzNkE0oD4RLKoPIufDtg==", "dev": true, "requires": { - "@babel/code-frame": "^7.12.11", - "@babel/generator": "^7.12.11", - "@babel/helper-function-name": "^7.12.11", - "@babel/helper-split-export-declaration": "^7.12.11", - "@babel/parser": "^7.12.11", - "@babel/types": "^7.12.12", + "@babel/code-frame": "^7.10.4", + "@babel/generator": "^7.11.0", + "@babel/helper-function-name": "^7.10.4", + "@babel/helper-split-export-declaration": "^7.11.0", + "@babel/parser": "^7.11.0", + "@babel/types": "^7.11.0", "debug": "^4.1.0", "globals": "^11.1.0", "lodash": "^4.17.19" }, "dependencies": { "debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "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.2" + "ms": "^2.1.1" } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true } } }, "@babel/types": { - "version": "7.12.12", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.12.tgz", - "integrity": "sha512-lnIX7piTxOH22xE7fDXDbSHg9MM1/6ORnafpJmov5rs0kX5g4BZxeXNJLXsMRiO0U5Rb8/FvMS6xlTnTHvxonQ==", + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.11.0.tgz", + "integrity": "sha512-O53yME4ZZI0jO1EVGtF1ePGl0LHirG4P1ibcD80XyzZcKhcMFeCXmh4Xb1ifGBIV233Qg12x4rBfQgA+tmOukA==", "dev": true, "requires": { - "@babel/helper-validator-identifier": "^7.12.11", + "@babel/helper-validator-identifier": "^7.10.4", "lodash": "^4.17.19", "to-fast-properties": "^2.0.0" } }, + "@cnakazawa/watch": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@cnakazawa/watch/-/watch-1.0.4.tgz", + "integrity": "sha512-v9kIhKwjeZThiWrLmj0y17CWoyddASLj9O2yvbZkbvw/N3rWOYy9zkV66ursAoVr0mV15bL8g0c4QZUE6cdDoQ==", + "dev": true, + "requires": { + "exec-sh": "^0.3.2", + "minimist": "^1.2.0" + } + }, "@csstools/convert-colors": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/@csstools/convert-colors/-/convert-colors-1.4.0.tgz", "integrity": "sha512-5a6wqoJV/xEdbRNKVo6I4hO3VjyDq//8q2f9I6PBAvMesJHFauXDorcNCsr9RzvsZnaWi5NYCcfyqP1QeFHFbw==", "dev": true }, - "@material/animation": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/@material/animation/-/animation-0.4.1.tgz", - "integrity": "sha1-v4tQrtrUz/zopbQo/cqPGruvF24=" + "@csstools/normalize.css": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/@csstools/normalize.css/-/normalize.css-10.1.0.tgz", + "integrity": "sha512-ij4wRiunFfaJxjB0BdrYHIH8FxBJpOwNPhhAcunlmPdXudL1WQV1qoP9un6JsEBAgQH+7UXyyjh0g7jTxXK6tg==", + "dev": true }, - "@material/base": { - "version": "0.2.6", - "resolved": "https://registry.npmjs.org/@material/base/-/base-0.2.6.tgz", - "integrity": "sha1-MAPz3ywG0XIVHUFguMiy5sZefAE=" + "@hapi/address": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@hapi/address/-/address-2.1.4.tgz", + "integrity": "sha512-QD1PhQk+s31P1ixsX0H0Suoupp3VMXzIVMSwobR3F3MSUO2YCV0B7xqLcUw/Bh8yuvd3LhpyqLQWTNcRmp6IdQ==", + "dev": true }, - "@material/button": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/@material/button/-/button-0.7.0.tgz", - "integrity": "sha512-T2Gcn8IJOJtzSU8mHN7HMqGbvkOy5lEWDZ/dLmVviGKeip22XR9pjm8sO52dCcs1rJJxsJPCl9UnaQUmT8Shaw==", + "@hapi/bourne": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@hapi/bourne/-/bourne-1.3.2.tgz", + "integrity": "sha512-1dVNHT76Uu5N3eJNTYcvxee+jzX4Z9lfciqRRHCU27ihbUcYi+iSc2iml5Ke1LXe1SyJCLA0+14Jh4tXJgOppA==", + "dev": true + }, + "@hapi/hoek": { + "version": "8.5.1", + "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-8.5.1.tgz", + "integrity": "sha512-yN7kbciD87WzLGc5539Tn0sApjyiGHAJgKvG9W8C7O+6c7qmoQMfVs0W4bX17eqz6C78QJqqFrtgdK5EWf6Qow==", + "dev": true + }, + "@hapi/joi": { + "version": "15.1.1", + "resolved": "https://registry.npmjs.org/@hapi/joi/-/joi-15.1.1.tgz", + "integrity": "sha512-entf8ZMOK8sc+8YfeOlM8pCfg3b5+WZIKBfUaaJT8UsjAAPjartzxIYm3TIbjvA4u+u++KbcXD38k682nVHDAQ==", + "dev": true, "requires": { - "@material/elevation": "^0.1.12", - "@material/ripple": "^0.8.7", - "@material/theme": "^0.3.1", - "@material/typography": "^0.3.0" + "@hapi/address": "2.x.x", + "@hapi/bourne": "1.x.x", + "@hapi/hoek": "8.x.x", + "@hapi/topo": "3.x.x" } }, - "@material/elevation": { - "version": "0.1.13", - "resolved": "https://registry.npmjs.org/@material/elevation/-/elevation-0.1.13.tgz", - "integrity": "sha1-o4iF88r0OYymp0aMMIiH1wvUYFs=", + "@hapi/topo": { + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-3.1.6.tgz", + "integrity": "sha512-tAag0jEcjwH+P2quUfipd7liWCNX2F8NvYjQp2wtInsZxnMlypdw0FtAOLxtvvkO+GSRRbmNi8m/5y42PQJYCQ==", + "dev": true, "requires": { - "@material/animation": "^0.4.1" + "@hapi/hoek": "^8.3.0" } }, - "@material/ripple": { - "version": "0.8.8", - "resolved": "https://registry.npmjs.org/@material/ripple/-/ripple-0.8.8.tgz", - "integrity": "sha1-Irie2eY4g/F/pPANEjcOMuDEWbc=", + "@jest/console": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-24.9.0.tgz", + "integrity": "sha512-Zuj6b8TnKXi3q4ymac8EQfc3ea/uhLeCGThFqXeC8H9/raaH8ARPUTdId+XyGd03Z4In0/VjD2OYFcBF09fNLQ==", + "dev": true, "requires": { - "@material/base": "^0.2.6", - "@material/theme": "^0.4.0" - }, - "dependencies": { - "@material/theme": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/@material/theme/-/theme-0.4.0.tgz", - "integrity": "sha1-Cu8aAnm2XBWZBYT7i47KCVxzRkE=" - } + "@jest/source-map": "^24.9.0", + "chalk": "^2.0.1", + "slash": "^2.0.0" } }, - "@material/theme": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/@material/theme/-/theme-0.3.1.tgz", - "integrity": "sha512-0PRLqMPCL3mEaUXyc/SWZWDHWjfyS7xXT64h7dT4lwwA0oHpq0OdQaqemYWkI1h+CVHeT0qSwirRNJ0jxBlhtA==" + "@jest/core": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-24.9.0.tgz", + "integrity": "sha512-Fogg3s4wlAr1VX7q+rhV9RVnUv5tD7VuWfYy1+whMiWUrvl7U3QJSJyWcDio9Lq2prqYsZaeTv2Rz24pWGkJ2A==", + "dev": true, + "requires": { + "@jest/console": "^24.7.1", + "@jest/reporters": "^24.9.0", + "@jest/test-result": "^24.9.0", + "@jest/transform": "^24.9.0", + "@jest/types": "^24.9.0", + "ansi-escapes": "^3.0.0", + "chalk": "^2.0.1", + "exit": "^0.1.2", + "graceful-fs": "^4.1.15", + "jest-changed-files": "^24.9.0", + "jest-config": "^24.9.0", + "jest-haste-map": "^24.9.0", + "jest-message-util": "^24.9.0", + "jest-regex-util": "^24.3.0", + "jest-resolve": "^24.9.0", + "jest-resolve-dependencies": "^24.9.0", + "jest-runner": "^24.9.0", + "jest-runtime": "^24.9.0", + "jest-snapshot": "^24.9.0", + "jest-util": "^24.9.0", + "jest-validate": "^24.9.0", + "jest-watcher": "^24.9.0", + "micromatch": "^3.1.10", + "p-each-series": "^1.0.0", + "realpath-native": "^1.1.0", + "rimraf": "^2.5.4", + "slash": "^2.0.0", + "strip-ansi": "^5.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 + }, + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "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" + } + } + } + }, + "@jest/environment": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-24.9.0.tgz", + "integrity": "sha512-5A1QluTPhvdIPFYnO3sZC3smkNeXPVELz7ikPbhUj0bQjB07EoE9qtLrem14ZUYWdVayYbsjVwIiL4WBIMV4aQ==", + "dev": true, + "requires": { + "@jest/fake-timers": "^24.9.0", + "@jest/transform": "^24.9.0", + "@jest/types": "^24.9.0", + "jest-mock": "^24.9.0" + } + }, + "@jest/fake-timers": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-24.9.0.tgz", + "integrity": "sha512-eWQcNa2YSwzXWIMC5KufBh3oWRIijrQFROsIqt6v/NS9Io/gknw1jsAC9c+ih/RQX4A3O7SeWAhQeN0goKhT9A==", + "dev": true, + "requires": { + "@jest/types": "^24.9.0", + "jest-message-util": "^24.9.0", + "jest-mock": "^24.9.0" + } + }, + "@jest/reporters": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-24.9.0.tgz", + "integrity": "sha512-mu4X0yjaHrffOsWmVLzitKmmmWSQ3GGuefgNscUSWNiUNcEOSEQk9k3pERKEQVBb0Cnn88+UESIsZEMH3o88Gw==", + "dev": true, + "requires": { + "@jest/environment": "^24.9.0", + "@jest/test-result": "^24.9.0", + "@jest/transform": "^24.9.0", + "@jest/types": "^24.9.0", + "chalk": "^2.0.1", + "exit": "^0.1.2", + "glob": "^7.1.2", + "istanbul-lib-coverage": "^2.0.2", + "istanbul-lib-instrument": "^3.0.1", + "istanbul-lib-report": "^2.0.4", + "istanbul-lib-source-maps": "^3.0.1", + "istanbul-reports": "^2.2.6", + "jest-haste-map": "^24.9.0", + "jest-resolve": "^24.9.0", + "jest-runtime": "^24.9.0", + "jest-util": "^24.9.0", + "jest-worker": "^24.6.0", + "node-notifier": "^5.4.2", + "slash": "^2.0.0", + "source-map": "^0.6.0", + "string-length": "^2.0.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "@jest/source-map": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-24.9.0.tgz", + "integrity": "sha512-/Xw7xGlsZb4MJzNDgB7PW5crou5JqWiBQaz6xyPd3ArOg2nfn/PunV8+olXbbEZzNl591o5rWKE9BRDaFAuIBg==", + "dev": true, + "requires": { + "callsites": "^3.0.0", + "graceful-fs": "^4.1.15", + "source-map": "^0.6.0" + }, + "dependencies": { + "callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "@jest/test-result": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-24.9.0.tgz", + "integrity": "sha512-XEFrHbBonBJ8dGp2JmF8kP/nQI/ImPpygKHwQ/SY+es59Z3L5PI4Qb9TQQMAEeYsThG1xF0k6tmG0tIKATNiiA==", + "dev": true, + "requires": { + "@jest/console": "^24.9.0", + "@jest/types": "^24.9.0", + "@types/istanbul-lib-coverage": "^2.0.0" + } + }, + "@jest/test-sequencer": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-24.9.0.tgz", + "integrity": "sha512-6qqsU4o0kW1dvA95qfNog8v8gkRN9ph6Lz7r96IvZpHdNipP2cBcb07J1Z45mz/VIS01OHJ3pY8T5fUY38tg4A==", + "dev": true, + "requires": { + "@jest/test-result": "^24.9.0", + "jest-haste-map": "^24.9.0", + "jest-runner": "^24.9.0", + "jest-runtime": "^24.9.0" + } + }, + "@jest/transform": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-24.9.0.tgz", + "integrity": "sha512-TcQUmyNRxV94S0QpMOnZl0++6RMiqpbH/ZMccFB/amku6Uwvyb1cjYX7xkp5nGNkbX4QPH/FcB6q1HBTHynLmQ==", + "dev": true, + "requires": { + "@babel/core": "^7.1.0", + "@jest/types": "^24.9.0", + "babel-plugin-istanbul": "^5.1.0", + "chalk": "^2.0.1", + "convert-source-map": "^1.4.0", + "fast-json-stable-stringify": "^2.0.0", + "graceful-fs": "^4.1.15", + "jest-haste-map": "^24.9.0", + "jest-regex-util": "^24.9.0", + "jest-util": "^24.9.0", + "micromatch": "^3.1.10", + "pirates": "^4.0.1", + "realpath-native": "^1.1.0", + "slash": "^2.0.0", + "source-map": "^0.6.1", + "write-file-atomic": "2.4.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "@jest/types": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-24.9.0.tgz", + "integrity": "sha512-XKK7ze1apu5JWQ5eZjHITP66AX+QsLlbaJRBGYr8pNzwcAE2JVkwnf0yqjHTsDRcjR0mujy/NmZMXw5kl+kGBw==", + "dev": true, + "requires": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^1.1.1", + "@types/yargs": "^13.0.0" + } + }, + "@material/animation": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@material/animation/-/animation-0.4.1.tgz", + "integrity": "sha1-v4tQrtrUz/zopbQo/cqPGruvF24=" + }, + "@material/base": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/@material/base/-/base-0.2.6.tgz", + "integrity": "sha1-MAPz3ywG0XIVHUFguMiy5sZefAE=" + }, + "@material/button": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@material/button/-/button-0.7.0.tgz", + "integrity": "sha512-T2Gcn8IJOJtzSU8mHN7HMqGbvkOy5lEWDZ/dLmVviGKeip22XR9pjm8sO52dCcs1rJJxsJPCl9UnaQUmT8Shaw==", + "requires": { + "@material/elevation": "^0.1.12", + "@material/ripple": "^0.8.7", + "@material/theme": "^0.3.1", + "@material/typography": "^0.3.0" + } + }, + "@material/elevation": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/@material/elevation/-/elevation-0.1.13.tgz", + "integrity": "sha1-o4iF88r0OYymp0aMMIiH1wvUYFs=", + "requires": { + "@material/animation": "^0.4.1" + } + }, + "@material/ripple": { + "version": "0.8.8", + "resolved": "https://registry.npmjs.org/@material/ripple/-/ripple-0.8.8.tgz", + "integrity": "sha1-Irie2eY4g/F/pPANEjcOMuDEWbc=", + "requires": { + "@material/base": "^0.2.6", + "@material/theme": "^0.4.0" + }, + "dependencies": { + "@material/theme": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@material/theme/-/theme-0.4.0.tgz", + "integrity": "sha1-Cu8aAnm2XBWZBYT7i47KCVxzRkE=" + } + } + }, + "@material/theme": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@material/theme/-/theme-0.3.1.tgz", + "integrity": "sha512-0PRLqMPCL3mEaUXyc/SWZWDHWjfyS7xXT64h7dT4lwwA0oHpq0OdQaqemYWkI1h+CVHeT0qSwirRNJ0jxBlhtA==" }, "@material/typography": { "version": "0.3.0", @@ -1320,14 +1684,6 @@ "integrity": "sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw==", "dev": true }, - "@samverschueren/stream-to-observable": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/@samverschueren/stream-to-observable/-/stream-to-observable-0.3.1.tgz", - "integrity": "sha512-c/qwwcHyafOQuVQJj0IlBjf5yYgBI7YPJ77k4fOJYesb41jio65eaJODRUmfYKhTOFBrIZ66kgvGPlNbjuoRdQ==", - "requires": { - "any-observable": "^0.3.0" - } - }, "@svgr/babel-plugin-add-jsx-attribute": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-4.2.0.tgz", @@ -1430,46 +1786,6 @@ "@svgr/babel-preset": "^4.3.3", "@svgr/hast-util-to-babel-ast": "^4.3.2", "svg-parser": "^2.0.0" - }, - "dependencies": { - "@babel/core": { - "version": "7.12.10", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.12.10.tgz", - "integrity": "sha512-eTAlQKq65zHfkHZV0sIVODCPGVgoo1HdBlbSLi9CqOzuZanMv2ihzY+4paiKr1mH+XmYESMAmJ/dpZ68eN6d8w==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.10.4", - "@babel/generator": "^7.12.10", - "@babel/helper-module-transforms": "^7.12.1", - "@babel/helpers": "^7.12.5", - "@babel/parser": "^7.12.10", - "@babel/template": "^7.12.7", - "@babel/traverse": "^7.12.10", - "@babel/types": "^7.12.10", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.1", - "json5": "^2.1.2", - "lodash": "^4.17.19", - "semver": "^5.4.1", - "source-map": "^0.5.0" - } - }, - "debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", - "dev": true, - "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==", - "dev": true - } } }, "@svgr/plugin-svgo": { @@ -1484,235 +1800,454 @@ } }, "@svgr/webpack": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@svgr/webpack/-/webpack-4.1.0.tgz", - "integrity": "sha512-d09ehQWqLMywP/PT/5JvXwPskPK9QCXUjiSkAHehreB381qExXf5JFCBWhfEyNonRbkIneCeYM99w+Ud48YIQQ==", + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@svgr/webpack/-/webpack-4.3.3.tgz", + "integrity": "sha512-bjnWolZ6KVsHhgyCoYRFmbd26p8XVbulCzSG53BDQqAr+JOAderYK7CuYrB3bDjHJuF6LJ7Wrr42+goLRV9qIg==", "dev": true, "requires": { - "@babel/core": "^7.1.6", + "@babel/core": "^7.4.5", "@babel/plugin-transform-react-constant-elements": "^7.0.0", - "@babel/preset-env": "^7.1.6", + "@babel/preset-env": "^7.4.5", "@babel/preset-react": "^7.0.0", - "@svgr/core": "^4.1.0", - "@svgr/plugin-jsx": "^4.1.0", - "@svgr/plugin-svgo": "^4.0.3", - "loader-utils": "^1.1.0" + "@svgr/core": "^4.3.3", + "@svgr/plugin-jsx": "^4.3.3", + "@svgr/plugin-svgo": "^4.3.1", + "loader-utils": "^1.2.3" } }, - "@types/cookie": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.3.3.tgz", - "integrity": "sha512-LKVP3cgXBT9RYj+t+9FDKwS5tdI+rPBXaNSkma7hvqy35lc7mAokC2zsqWJH0LaqIt3B962nuYI77hsJoT1gow==" - }, - "@types/object-assign": { - "version": "4.0.30", - "resolved": "https://registry.npmjs.org/@types/object-assign/-/object-assign-4.0.30.tgz", - "integrity": "sha1-iUk3HVqZ9Dge4PHfCpt6GH4H5lI=" - }, - "@types/prop-types": { - "version": "15.7.3", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.3.tgz", - "integrity": "sha512-KfRL3PuHmqQLOG+2tGpRO26Ctg+Cq1E01D2DMriKEATHgWLfeNDmq9e29Q9WIky0dQ3NPkd1mzYH8Lm936Z9qw==" - }, - "@types/q": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.4.tgz", - "integrity": "sha512-1HcDas8SEj4z1Wc696tH56G8OlRaH/sqZOynNNB+HF0WOeXPaxTtbYzJY2oEfiUxjSKjhCKr+MvR7dCHcEelug==", - "dev": true - }, - "@types/react": { - "version": "17.0.0", - "resolved": "https://registry.npmjs.org/@types/react/-/react-17.0.0.tgz", - "integrity": "sha512-aj/L7RIMsRlWML3YB6KZiXB3fV2t41+5RBGYF8z+tAKU43Px8C3cYUZsDvf1/+Bm4FK21QWBrDutu8ZJ/70qOw==", + "@tanem/svg-injector": { + "version": "8.2.2", + "resolved": "https://registry.npmjs.org/@tanem/svg-injector/-/svg-injector-8.2.2.tgz", + "integrity": "sha512-a4C3GMCD15URV+ZNjt8Fibxu04qejJip0G6qIDl/Dne7TGt++2MjJzwV5lRVo7yqT/OIVFOnAQwMH0qfHGWlpw==", "requires": { - "@types/prop-types": "*", - "csstype": "^3.0.2" + "@babel/runtime": "^7.12.5", + "content-type": "^1.0.4", + "tslib": "^2.0.3" + }, + "dependencies": { + "@babel/runtime": { + "version": "7.12.5", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.5.tgz", + "integrity": "sha512-plcc+hbExy3McchJCEQG3knOsuh3HH+Prx1P6cLIkET/0dLuQDEnrT+s27Axgc9bqfsmNUNHfscgMUdBpC9xfg==", + "requires": { + "regenerator-runtime": "^0.13.4" + } + }, + "regenerator-runtime": { + "version": "0.13.7", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz", + "integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==" + }, + "tslib": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.1.0.tgz", + "integrity": "sha512-hcVC3wYEziELGGmEEXue7D75zbwIIVUMWAVbHItGPx0ziyXxrOMQx4rQEVEV45Ut/1IotuEvwqPopzIOkDMf0A==" + } } }, - "@types/react-slick": { - "version": "0.23.4", - "resolved": "https://registry.npmjs.org/@types/react-slick/-/react-slick-0.23.4.tgz", - "integrity": "sha512-vXoIy4GUfB7/YgqubR4H7RALo+pRdMYCeLgWwV3MPwl5pggTlEkFBTF19R7u+LJc85uMqC7RfsbkqPLMQ4ab+A==", + "@types/babel__core": { + "version": "7.1.9", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.9.tgz", + "integrity": "sha512-sY2RsIJ5rpER1u3/aQ8OFSI7qGIy8o1NEEbgb2UaJcvOtXOMpd39ko723NBpjQFg9SIX7TXtjejZVGeIMLhoOw==", + "dev": true, "requires": { - "@types/react": "*" + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" } }, - "@types/tapable": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@types/tapable/-/tapable-1.0.2.tgz", - "integrity": "sha512-42zEJkBpNfMEAvWR5WlwtTH22oDzcMjFsL9gDGExwF8X8WvAiw7Vwop7hPw03QT8TKfec83LwbHj6SvpqM4ELQ==", - "dev": true - }, - "@webassemblyjs/ast": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.7.11.tgz", - "integrity": "sha512-ZEzy4vjvTzScC+SH8RBssQUawpaInUdMTYwYYLh54/s8TuT0gBLuyUnppKsVyZEi876VmmStKsUs28UxPgdvrA==", + "@types/babel__generator": { + "version": "7.6.1", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.1.tgz", + "integrity": "sha512-bBKm+2VPJcMRVwNhxKu8W+5/zT7pwNEqeokFOmbvVSqGzFneNxYcEBro9Ac7/N9tlsaPYnZLK8J1LWKkMsLAew==", "dev": true, "requires": { - "@webassemblyjs/helper-module-context": "1.7.11", - "@webassemblyjs/helper-wasm-bytecode": "1.7.11", - "@webassemblyjs/wast-parser": "1.7.11" + "@babel/types": "^7.0.0" } }, - "@webassemblyjs/floating-point-hex-parser": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.7.11.tgz", - "integrity": "sha512-zY8dSNyYcgzNRNT666/zOoAyImshm3ycKdoLsyDw/Bwo6+/uktb7p4xyApuef1dwEBo/U/SYQzbGBvV+nru2Xg==", - "dev": true - }, - "@webassemblyjs/helper-api-error": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.7.11.tgz", - "integrity": "sha512-7r1qXLmiglC+wPNkGuXCvkmalyEstKVwcueZRP2GNC2PAvxbLYwLLPr14rcdJaE4UtHxQKfFkuDFuv91ipqvXg==", - "dev": true - }, - "@webassemblyjs/helper-buffer": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.7.11.tgz", - "integrity": "sha512-MynuervdylPPh3ix+mKZloTcL06P8tenNH3sx6s0qE8SLR6DdwnfgA7Hc9NSYeob2jrW5Vql6GVlsQzKQCa13w==", - "dev": true + "@types/babel__template": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.0.2.tgz", + "integrity": "sha512-/K6zCpeW7Imzgab2bLkLEbz0+1JlFSrUMdw7KoIIu+IUdu51GWaBZpd3y1VXGVXzynvGa4DaIaxNZHiON3GXUg==", + "dev": true, + "requires": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } }, - "@webassemblyjs/helper-code-frame": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.7.11.tgz", - "integrity": "sha512-T8ESC9KMXFTXA5urJcyor5cn6qWeZ4/zLPyWeEXZ03hj/x9weSokGNkVCdnhSabKGYWxElSdgJ+sFa9G/RdHNw==", + "@types/babel__traverse": { + "version": "7.0.13", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.0.13.tgz", + "integrity": "sha512-i+zS7t6/s9cdQvbqKDARrcbrPvtJGlbYsMkazo03nTAK3RX9FNrLllXys22uiTGJapPOTZTQ35nHh4ISph4SLQ==", "dev": true, "requires": { - "@webassemblyjs/wast-printer": "1.7.11" + "@babel/types": "^7.3.0" } }, - "@webassemblyjs/helper-fsm": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.7.11.tgz", - "integrity": "sha512-nsAQWNP1+8Z6tkzdYlXT0kxfa2Z1tRTARd8wYnc/e3Zv3VydVVnaeePgqUzFrpkGUyhUUxOl5ML7f1NuT+gC0A==", + "@types/color-name": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@types/color-name/-/color-name-1.1.1.tgz", + "integrity": "sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==", "dev": true }, - "@webassemblyjs/helper-module-context": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.7.11.tgz", - "integrity": "sha512-JxfD5DX8Ygq4PvXDucq0M+sbUFA7BJAv/GGl9ITovqE+idGX+J3QSzJYz+LwQmL7fC3Rs+utvWoJxDb6pmC0qg==", - "dev": true + "@types/cookie": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.3.3.tgz", + "integrity": "sha512-LKVP3cgXBT9RYj+t+9FDKwS5tdI+rPBXaNSkma7hvqy35lc7mAokC2zsqWJH0LaqIt3B962nuYI77hsJoT1gow==" }, - "@webassemblyjs/helper-wasm-bytecode": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.7.11.tgz", - "integrity": "sha512-cMXeVS9rhoXsI9LLL4tJxBgVD/KMOKXuFqYb5oCJ/opScWpkCMEz9EJtkonaNcnLv2R3K5jIeS4TRj/drde1JQ==", + "@types/eslint-visitor-keys": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@types/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz", + "integrity": "sha512-OCutwjDZ4aFS6PB1UZ988C4YgwlBHJd6wCeQqaLdmadZ/7e+w79+hbMUFC1QXDNCmdyoRfAFdm0RypzwR+Qpag==", "dev": true }, - "@webassemblyjs/helper-wasm-section": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.7.11.tgz", - "integrity": "sha512-8ZRY5iZbZdtNFE5UFunB8mmBEAbSI3guwbrsCl4fWdfRiAcvqQpeqd5KHhSWLL5wuxo53zcaGZDBU64qgn4I4Q==", + "@types/glob": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.3.tgz", + "integrity": "sha512-SEYeGAIQIQX8NN6LDKprLjbrd5dARM5EXsd8GI/A5l0apYI1fGMWgPHSe4ZKL4eozlAyI+doUE9XbYS4xCkQ1w==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.7.11", - "@webassemblyjs/helper-buffer": "1.7.11", - "@webassemblyjs/helper-wasm-bytecode": "1.7.11", - "@webassemblyjs/wasm-gen": "1.7.11" + "@types/minimatch": "*", + "@types/node": "*" } }, - "@webassemblyjs/ieee754": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.7.11.tgz", - "integrity": "sha512-Mmqx/cS68K1tSrvRLtaV/Lp3NZWzXtOHUW2IvDvl2sihAwJh4ACE0eL6A8FvMyDG9abes3saB6dMimLOs+HMoQ==", + "@types/istanbul-lib-coverage": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz", + "integrity": "sha512-sz7iLqvVUg1gIedBOvlkxPlc8/uVzyS5OwGz1cKjXzkl3FpL3al0crU8YGU1WoHkxn0Wxbw5tyi6hvzJKNzFsw==", + "dev": true + }, + "@types/istanbul-lib-report": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", + "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", "dev": true, "requires": { - "@xtuc/ieee754": "^1.2.0" + "@types/istanbul-lib-coverage": "*" } }, - "@webassemblyjs/leb128": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.7.11.tgz", - "integrity": "sha512-vuGmgZjjp3zjcerQg+JA+tGOncOnJLWVkt8Aze5eWQLwTQGNgVLcyOTqgSCxWTR4J42ijHbBxnuRaL1Rv7XMdw==", + "@types/istanbul-reports": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-1.1.2.tgz", + "integrity": "sha512-P/W9yOX/3oPZSpaYOCQzGqgCQRXn0FFO/V8bWrCQs+wLmvVVxk6CRBXALEvNs9OHIatlnlFokfhuDo2ug01ciw==", "dev": true, "requires": { - "@xtuc/long": "4.2.1" + "@types/istanbul-lib-coverage": "*", + "@types/istanbul-lib-report": "*" } }, - "@webassemblyjs/utf8": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.7.11.tgz", - "integrity": "sha512-C6GFkc7aErQIAH+BMrIdVSmW+6HSe20wg57HEC1uqJP8E/xpMjXqQUxkQw07MhNDSDcGpxI9G5JSNOQCqJk4sA==", + "@types/json-schema": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.5.tgz", + "integrity": "sha512-7+2BITlgjgDhH0vvwZU/HZJVyk+2XUlvxXe8dFMedNX/aMkaOq++rMAFXc0tM7ij15QaWlbdQASBR9dihi+bDQ==", "dev": true }, - "@webassemblyjs/wasm-edit": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.7.11.tgz", - "integrity": "sha512-FUd97guNGsCZQgeTPKdgxJhBXkUbMTY6hFPf2Y4OedXd48H97J+sOY2Ltaq6WGVpIH8o/TGOVNiVz/SbpEMJGg==", - "dev": true, + "@types/minimatch": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz", + "integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==", + "dev": true + }, + "@types/minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-aaI6OtKcrwCX8G7aWbNh7i8GOfY=", + "dev": true + }, + "@types/node": { + "version": "14.6.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.6.0.tgz", + "integrity": "sha512-mikldZQitV94akrc4sCcSjtJfsTKt4p+e/s0AGscVA6XArQ9kFclP+ZiYUMnq987rc6QlYxXv/EivqlfSLxpKA==", + "dev": true + }, + "@types/normalize-package-data": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.0.tgz", + "integrity": "sha512-f5j5b/Gf71L+dbqxIpQ4Z2WlmI/mPJ0fOkGGmFgtb6sAu97EPczzbS3/tJKxmcYDj55OX6ssqwDAWOHIYDRDGA==", + "dev": true + }, + "@types/object-assign": { + "version": "4.0.30", + "resolved": "https://registry.npmjs.org/@types/object-assign/-/object-assign-4.0.30.tgz", + "integrity": "sha1-iUk3HVqZ9Dge4PHfCpt6GH4H5lI=" + }, + "@types/parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", + "dev": true + }, + "@types/q": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.4.tgz", + "integrity": "sha512-1HcDas8SEj4z1Wc696tH56G8OlRaH/sqZOynNNB+HF0WOeXPaxTtbYzJY2oEfiUxjSKjhCKr+MvR7dCHcEelug==", + "dev": true + }, + "@types/stack-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-1.0.1.tgz", + "integrity": "sha512-l42BggppR6zLmpfU6fq9HEa2oGPEI8yrSPL3GITjfRInppYFahObbIQOQK3UGxEnyQpltZLaPe75046NOZQikw==", + "dev": true + }, + "@types/yargs": { + "version": "13.0.10", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-13.0.10.tgz", + "integrity": "sha512-MU10TSgzNABgdzKvQVW1nuuT+sgBMWeXNc3XOs5YXV5SDAK+PPja2eUuBNB9iqElu03xyEDqlnGw0jgl4nbqGQ==", + "dev": true, + "requires": { + "@types/yargs-parser": "*" + } + }, + "@types/yargs-parser": { + "version": "15.0.0", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-15.0.0.tgz", + "integrity": "sha512-FA/BWv8t8ZWJ+gEOnLLd8ygxH/2UFbAvgEonyfN6yWGLKc7zVjbpl2Y4CTjid9h2RfgPP6SEt6uHwEOply00yw==", + "dev": true + }, + "@typescript-eslint/eslint-plugin": { + "version": "2.34.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-2.34.0.tgz", + "integrity": "sha512-4zY3Z88rEE99+CNvTbXSyovv2z9PNOVffTWD2W8QF5s2prBQtwN2zadqERcrHpcR7O/+KMI3fcTAmUUhK/iQcQ==", + "dev": true, + "requires": { + "@typescript-eslint/experimental-utils": "2.34.0", + "functional-red-black-tree": "^1.0.1", + "regexpp": "^3.0.0", + "tsutils": "^3.17.1" + } + }, + "@typescript-eslint/experimental-utils": { + "version": "2.34.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-2.34.0.tgz", + "integrity": "sha512-eS6FTkq+wuMJ+sgtuNTtcqavWXqsflWcfBnlYhg/nS4aZ1leewkXGbvBhaapn1q6qf4M71bsR1tez5JTRMuqwA==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.3", + "@typescript-eslint/typescript-estree": "2.34.0", + "eslint-scope": "^5.0.0", + "eslint-utils": "^2.0.0" + } + }, + "@typescript-eslint/parser": { + "version": "2.34.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-2.34.0.tgz", + "integrity": "sha512-03ilO0ucSD0EPTw2X4PntSIRFtDPWjrVq7C3/Z3VQHRC7+13YB55rcJI3Jt+YgeHbjUdJPcPa7b23rXCBokuyA==", + "dev": true, + "requires": { + "@types/eslint-visitor-keys": "^1.0.0", + "@typescript-eslint/experimental-utils": "2.34.0", + "@typescript-eslint/typescript-estree": "2.34.0", + "eslint-visitor-keys": "^1.1.0" + } + }, + "@typescript-eslint/typescript-estree": { + "version": "2.34.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-2.34.0.tgz", + "integrity": "sha512-OMAr+nJWKdlVM9LOqCqh3pQQPwxHAN7Du8DR6dmwCrAmxtiXQnhHJ6tBNtf+cggqfo51SG/FCwnKhXCIM7hnVg==", + "dev": true, + "requires": { + "debug": "^4.1.1", + "eslint-visitor-keys": "^1.1.0", + "glob": "^7.1.6", + "is-glob": "^4.0.1", + "lodash": "^4.17.15", + "semver": "^7.3.2", + "tsutils": "^3.17.1" + }, + "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": "7.3.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", + "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==", + "dev": true + } + } + }, + "@webassemblyjs/ast": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.8.5.tgz", + "integrity": "sha512-aJMfngIZ65+t71C3y2nBBg5FFG0Okt9m0XEgWZ7Ywgn1oMAT8cNwx00Uv1cQyHtidq0Xn94R4TAywO+LCQ+ZAQ==", + "dev": true, + "requires": { + "@webassemblyjs/helper-module-context": "1.8.5", + "@webassemblyjs/helper-wasm-bytecode": "1.8.5", + "@webassemblyjs/wast-parser": "1.8.5" + } + }, + "@webassemblyjs/floating-point-hex-parser": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.8.5.tgz", + "integrity": "sha512-9p+79WHru1oqBh9ewP9zW95E3XAo+90oth7S5Re3eQnECGq59ly1Ri5tsIipKGpiStHsUYmY3zMLqtk3gTcOtQ==", + "dev": true + }, + "@webassemblyjs/helper-api-error": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.8.5.tgz", + "integrity": "sha512-Za/tnzsvnqdaSPOUXHyKJ2XI7PDX64kWtURyGiJJZKVEdFOsdKUCPTNEVFZq3zJ2R0G5wc2PZ5gvdTRFgm81zA==", + "dev": true + }, + "@webassemblyjs/helper-buffer": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.8.5.tgz", + "integrity": "sha512-Ri2R8nOS0U6G49Q86goFIPNgjyl6+oE1abW1pS84BuhP1Qcr5JqMwRFT3Ah3ADDDYGEgGs1iyb1DGX+kAi/c/Q==", + "dev": true + }, + "@webassemblyjs/helper-code-frame": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.8.5.tgz", + "integrity": "sha512-VQAadSubZIhNpH46IR3yWO4kZZjMxN1opDrzePLdVKAZ+DFjkGD/rf4v1jap744uPVU6yjL/smZbRIIJTOUnKQ==", + "dev": true, + "requires": { + "@webassemblyjs/wast-printer": "1.8.5" + } + }, + "@webassemblyjs/helper-fsm": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.8.5.tgz", + "integrity": "sha512-kRuX/saORcg8se/ft6Q2UbRpZwP4y7YrWsLXPbbmtepKr22i8Z4O3V5QE9DbZK908dh5Xya4Un57SDIKwB9eow==", + "dev": true + }, + "@webassemblyjs/helper-module-context": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.8.5.tgz", + "integrity": "sha512-/O1B236mN7UNEU4t9X7Pj38i4VoU8CcMHyy3l2cV/kIF4U5KoHXDVqcDuOs1ltkac90IM4vZdHc52t1x8Yfs3g==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.8.5", + "mamacro": "^0.0.3" + } + }, + "@webassemblyjs/helper-wasm-bytecode": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.8.5.tgz", + "integrity": "sha512-Cu4YMYG3Ddl72CbmpjU/wbP6SACcOPVbHN1dI4VJNJVgFwaKf1ppeFJrwydOG3NDHxVGuCfPlLZNyEdIYlQ6QQ==", + "dev": true + }, + "@webassemblyjs/helper-wasm-section": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.8.5.tgz", + "integrity": "sha512-VV083zwR+VTrIWWtgIUpqfvVdK4ff38loRmrdDBgBT8ADXYsEZ5mPQ4Nde90N3UYatHdYoDIFb7oHzMncI02tA==", + "dev": true, "requires": { - "@webassemblyjs/ast": "1.7.11", - "@webassemblyjs/helper-buffer": "1.7.11", - "@webassemblyjs/helper-wasm-bytecode": "1.7.11", - "@webassemblyjs/helper-wasm-section": "1.7.11", - "@webassemblyjs/wasm-gen": "1.7.11", - "@webassemblyjs/wasm-opt": "1.7.11", - "@webassemblyjs/wasm-parser": "1.7.11", - "@webassemblyjs/wast-printer": "1.7.11" + "@webassemblyjs/ast": "1.8.5", + "@webassemblyjs/helper-buffer": "1.8.5", + "@webassemblyjs/helper-wasm-bytecode": "1.8.5", + "@webassemblyjs/wasm-gen": "1.8.5" + } + }, + "@webassemblyjs/ieee754": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.8.5.tgz", + "integrity": "sha512-aaCvQYrvKbY/n6wKHb/ylAJr27GglahUO89CcGXMItrOBqRarUMxWLJgxm9PJNuKULwN5n1csT9bYoMeZOGF3g==", + "dev": true, + "requires": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "@webassemblyjs/leb128": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.8.5.tgz", + "integrity": "sha512-plYUuUwleLIziknvlP8VpTgO4kqNaH57Y3JnNa6DLpu/sGcP6hbVdfdX5aHAV716pQBKrfuU26BJK29qY37J7A==", + "dev": true, + "requires": { + "@xtuc/long": "4.2.2" + } + }, + "@webassemblyjs/utf8": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.8.5.tgz", + "integrity": "sha512-U7zgftmQriw37tfD934UNInokz6yTmn29inT2cAetAsaU9YeVCveWEwhKL1Mg4yS7q//NGdzy79nlXh3bT8Kjw==", + "dev": true + }, + "@webassemblyjs/wasm-edit": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.8.5.tgz", + "integrity": "sha512-A41EMy8MWw5yvqj7MQzkDjU29K7UJq1VrX2vWLzfpRHt3ISftOXqrtojn7nlPsZ9Ijhp5NwuODuycSvfAO/26Q==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.8.5", + "@webassemblyjs/helper-buffer": "1.8.5", + "@webassemblyjs/helper-wasm-bytecode": "1.8.5", + "@webassemblyjs/helper-wasm-section": "1.8.5", + "@webassemblyjs/wasm-gen": "1.8.5", + "@webassemblyjs/wasm-opt": "1.8.5", + "@webassemblyjs/wasm-parser": "1.8.5", + "@webassemblyjs/wast-printer": "1.8.5" } }, "@webassemblyjs/wasm-gen": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.7.11.tgz", - "integrity": "sha512-U/KDYp7fgAZX5KPfq4NOupK/BmhDc5Kjy2GIqstMhvvdJRcER/kUsMThpWeRP8BMn4LXaKhSTggIJPOeYHwISA==", + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.8.5.tgz", + "integrity": "sha512-BCZBT0LURC0CXDzj5FXSc2FPTsxwp3nWcqXQdOZE4U7h7i8FqtFK5Egia6f9raQLpEKT1VL7zr4r3+QX6zArWg==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.7.11", - "@webassemblyjs/helper-wasm-bytecode": "1.7.11", - "@webassemblyjs/ieee754": "1.7.11", - "@webassemblyjs/leb128": "1.7.11", - "@webassemblyjs/utf8": "1.7.11" + "@webassemblyjs/ast": "1.8.5", + "@webassemblyjs/helper-wasm-bytecode": "1.8.5", + "@webassemblyjs/ieee754": "1.8.5", + "@webassemblyjs/leb128": "1.8.5", + "@webassemblyjs/utf8": "1.8.5" } }, "@webassemblyjs/wasm-opt": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.7.11.tgz", - "integrity": "sha512-XynkOwQyiRidh0GLua7SkeHvAPXQV/RxsUeERILmAInZegApOUAIJfRuPYe2F7RcjOC9tW3Cb9juPvAC/sCqvg==", + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.8.5.tgz", + "integrity": "sha512-HKo2mO/Uh9A6ojzu7cjslGaHaUU14LdLbGEKqTR7PBKwT6LdPtLLh9fPY33rmr5wcOMrsWDbbdCHq4hQUdd37Q==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.7.11", - "@webassemblyjs/helper-buffer": "1.7.11", - "@webassemblyjs/wasm-gen": "1.7.11", - "@webassemblyjs/wasm-parser": "1.7.11" + "@webassemblyjs/ast": "1.8.5", + "@webassemblyjs/helper-buffer": "1.8.5", + "@webassemblyjs/wasm-gen": "1.8.5", + "@webassemblyjs/wasm-parser": "1.8.5" } }, "@webassemblyjs/wasm-parser": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.7.11.tgz", - "integrity": "sha512-6lmXRTrrZjYD8Ng8xRyvyXQJYUQKYSXhJqXOBLw24rdiXsHAOlvw5PhesjdcaMadU/pyPQOJ5dHreMjBxwnQKg==", + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.8.5.tgz", + "integrity": "sha512-pi0SYE9T6tfcMkthwcgCpL0cM9nRYr6/6fjgDtL6q/ZqKHdMWvxitRi5JcZ7RI4SNJJYnYNaWy5UUrHQy998lw==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.7.11", - "@webassemblyjs/helper-api-error": "1.7.11", - "@webassemblyjs/helper-wasm-bytecode": "1.7.11", - "@webassemblyjs/ieee754": "1.7.11", - "@webassemblyjs/leb128": "1.7.11", - "@webassemblyjs/utf8": "1.7.11" + "@webassemblyjs/ast": "1.8.5", + "@webassemblyjs/helper-api-error": "1.8.5", + "@webassemblyjs/helper-wasm-bytecode": "1.8.5", + "@webassemblyjs/ieee754": "1.8.5", + "@webassemblyjs/leb128": "1.8.5", + "@webassemblyjs/utf8": "1.8.5" } }, "@webassemblyjs/wast-parser": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.7.11.tgz", - "integrity": "sha512-lEyVCg2np15tS+dm7+JJTNhNWq9yTZvi3qEhAIIOaofcYlUp0UR5/tVqOwa/gXYr3gjwSZqw+/lS9dscyLelbQ==", + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.8.5.tgz", + "integrity": "sha512-daXC1FyKWHF1i11obK086QRlsMsY4+tIOKgBqI1lxAnkp9xe9YMcgOxm9kLe+ttjs5aWV2KKE1TWJCN57/Btsg==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.7.11", - "@webassemblyjs/floating-point-hex-parser": "1.7.11", - "@webassemblyjs/helper-api-error": "1.7.11", - "@webassemblyjs/helper-code-frame": "1.7.11", - "@webassemblyjs/helper-fsm": "1.7.11", - "@xtuc/long": "4.2.1" + "@webassemblyjs/ast": "1.8.5", + "@webassemblyjs/floating-point-hex-parser": "1.8.5", + "@webassemblyjs/helper-api-error": "1.8.5", + "@webassemblyjs/helper-code-frame": "1.8.5", + "@webassemblyjs/helper-fsm": "1.8.5", + "@xtuc/long": "4.2.2" } }, "@webassemblyjs/wast-printer": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.7.11.tgz", - "integrity": "sha512-m5vkAsuJ32QpkdkDOUPGSltrg8Cuk3KBx4YrmAGQwCZPRdUHXxG4phIOuuycLemHFr74sWL9Wthqss4fzdzSwg==", + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.8.5.tgz", + "integrity": "sha512-w0U0pD4EhlnvRyeJzBqaVSJAo9w/ce7/WPogeXLzGkO6hzhr4GnQIZ4W4uUt5b9ooAaXPtnXlj0gzsXEOUNYMg==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.7.11", - "@webassemblyjs/wast-parser": "1.7.11", - "@xtuc/long": "4.2.1" + "@webassemblyjs/ast": "1.8.5", + "@webassemblyjs/wast-parser": "1.8.5", + "@xtuc/long": "4.2.2" } }, "@xtuc/ieee754": { @@ -1722,64 +2257,31 @@ "dev": true }, "@xtuc/long": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.1.tgz", - "integrity": "sha512-FZdkNBDqBRHKQ2MEbSC17xnPFOhZxeJ2YGSfr2BKf3sujG49Qe3bB+rGCwQfIaA7WHnGeGkSijX4FuBCdrzW/g==", + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", "dev": true }, - "abab": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/abab/-/abab-1.0.4.tgz", - "integrity": "sha1-X6rZwsB/YN12dw9xzwJbYqY8/U4=" - }, "abbrev": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", + "dev": true }, "accepts": { "version": "1.3.7", "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", + "dev": true, "requires": { "mime-types": "~2.1.24", "negotiator": "0.6.2" } }, - "acorn": { - "version": "4.0.13", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-4.0.13.tgz", - "integrity": "sha1-EFSVrlNh1pe9GVyCUZLhrX8lN4c=" - }, - "acorn-dynamic-import": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/acorn-dynamic-import/-/acorn-dynamic-import-3.0.0.tgz", - "integrity": "sha512-zVWV8Z8lislJoOKKqdNMOB+s6+XV5WERty8MnKBeFgwA+19XJjJHs2RP5dzM57FftIs+jQnRToLiWazKr6sSWg==", - "dev": true, - "requires": { - "acorn": "^5.0.0" - }, - "dependencies": { - "acorn": { - "version": "5.7.4", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.4.tgz", - "integrity": "sha512-1D++VG7BhrtvQpNbBzovKNc1FLGGEE/oGe7b9xJm/RFHMBeUaUGpluV9RLjZa47YFdPcDAenEYuq9pQPcMdLJg==", - "dev": true - } - } - }, - "acorn-globals": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-3.1.0.tgz", - "integrity": "sha1-/YJw9x+7SZawBPqIDuXUZXOnMb8=", - "requires": { - "acorn": "^4.0.4" - } - }, "acorn-jsx": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.1.tgz", - "integrity": "sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.2.0.tgz", + "integrity": "sha512-HiUX/+K2YpkpJ+SzBffkM/AQ2YE03S0U1kjTLVpoJdhZMOWy8qvXVN9JdLqv2QsaQ6MPYQIuNmwD8zOiYUofLQ==", "dev": true }, "acorn-walk": { @@ -1802,15 +2304,75 @@ "integrity": "sha1-0ME1RB+oAUqBN5BFMQlvZ/KPJjo=" }, "address": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/address/-/address-1.0.3.tgz", - "integrity": "sha512-z55ocwKBRLryBs394Sm3ushTtBeg6VAeuku7utSoSnsJKvKcnXFIyC6vh27n3rXyxSgkJBBCAvyOn7gSUcTYjg==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/address/-/address-1.1.2.tgz", + "integrity": "sha512-aT6camzM4xEA54YVJYSqxz1kv4IHnQZRtThJJHhUMRExaU5spC7jX5ugSwTaTgJliIgs4VhZOk7htClvQ/LmRA==", "dev": true }, - "after": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/after/-/after-0.8.2.tgz", - "integrity": "sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8=" + "adjust-sourcemap-loader": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/adjust-sourcemap-loader/-/adjust-sourcemap-loader-2.0.0.tgz", + "integrity": "sha512-4hFsTsn58+YjrU9qKzML2JSSDqKvN8mUGQ0nNIrfPi8hmIONT4L3uUaT6MKdMsZ9AjsU6D2xDkZxCkbQPxChrA==", + "dev": true, + "requires": { + "assert": "1.4.1", + "camelcase": "5.0.0", + "loader-utils": "1.2.3", + "object-path": "0.11.4", + "regex-parser": "2.2.10" + }, + "dependencies": { + "camelcase": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.0.0.tgz", + "integrity": "sha512-faqwZqnWxbxn+F1d399ygeamQNy3lPp/H9H6rNrqYh4FSVCtcY+3cub1MxA8o9mDd55mM8Aghuu/kuyYA6VTsA==", + "dev": true + }, + "emojis-list": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz", + "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=", + "dev": true + }, + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dev": true, + "requires": { + "minimist": "^1.2.0" + } + }, + "loader-utils": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.2.3.tgz", + "integrity": "sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA==", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^2.0.0", + "json5": "^1.0.1" + } + } + } + }, + "aggregate-error": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.0.1.tgz", + "integrity": "sha512-quoaXsZ9/BLNae5yiNoUz+Nhkwz83GhWwtYFglcjEQB2NDHCIpApbqXxIFnm4Pq/Nvhrsq5sYJFyohrrxnTGAA==", + "dev": true, + "requires": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + }, + "dependencies": { + "indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "dev": true + } + } }, "airbnb-prop-types": { "version": "2.16.0", @@ -1829,9 +2391,10 @@ } }, "ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "version": "6.12.3", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.3.tgz", + "integrity": "sha512-4K0cK3L1hsqk9xIb2z9vs/XU+PGJZ9PNpJRDS9YLzmNdX6jmVPfamLvTJr0aDAusnHyCHO6MjzlkAsgtqp9teA==", + "dev": true, "requires": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -1860,7 +2423,8 @@ "amdefine": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", - "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=" + "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=", + "dev": true }, "ansi-colors": { "version": "3.2.4", @@ -1871,7 +2435,8 @@ "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==" + "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==", + "dev": true }, "ansi-html": { "version": "0.0.7", @@ -1882,7 +2447,8 @@ "ansi-regex": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true }, "ansi-styles": { "version": "3.2.1", @@ -1893,62 +2459,134 @@ } }, "antd": { - "version": "3.21.4", - "resolved": "https://registry.npmjs.org/antd/-/antd-3.21.4.tgz", - "integrity": "sha512-ZtX2UAEewrWUepl4sT6TeJw91A98bgl4VGTjRIKfwzNW1GKGKKf4iI9bA6oCyMt/C4QEFsSsmkBwfBqT+N+Xzg==", - "requires": { - "@ant-design/create-react-context": "^0.2.4", - "@ant-design/icons": "~2.1.1", - "@ant-design/icons-react": "~2.0.1", - "@types/react-slick": "^0.23.4", + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/antd/-/antd-4.6.2.tgz", + "integrity": "sha512-6hmSRiSV3Lzz/1fKGOLHld7gf0d+MW7fg7MNGCAAceGmxtG1WEaaOtV8dZeL2WXq0SGH4wY4GytN6chRrtatfw==", + "requires": { + "@ant-design/colors": "^4.0.5", + "@ant-design/css-animation": "^1.7.2", + "@ant-design/icons": "^4.2.1", + "@ant-design/react-slick": "~0.27.0", + "@babel/runtime": "^7.10.4", "array-tree-filter": "^2.1.0", - "babel-runtime": "6.x", - "classnames": "~2.2.6", + "classnames": "^2.2.6", "copy-to-clipboard": "^3.2.0", - "css-animation": "^1.5.0", - "dom-closest": "^0.2.0", - "enquire.js": "^2.1.6", - "lodash": "^4.17.13", - "moment": "^2.24.0", - "omit.js": "^1.0.2", - "prop-types": "^15.7.2", + "lodash": "^4.17.20", + "moment": "^2.25.3", + "omit.js": "^2.0.2", "raf": "^3.4.1", - "rc-animate": "^2.8.3", - "rc-calendar": "~9.15.5", - "rc-cascader": "~0.17.4", - "rc-checkbox": "~2.1.6", - "rc-collapse": "~1.11.3", - "rc-dialog": "~7.5.2", - "rc-drawer": "~2.0.1", - "rc-dropdown": "~2.4.1", - "rc-editor-mention": "^1.1.13", - "rc-form": "^2.4.5", - "rc-input-number": "~4.4.5", - "rc-mentions": "~0.3.1", - "rc-menu": "~7.4.23", - "rc-notification": "~3.3.1", - "rc-pagination": "~1.20.5", - "rc-progress": "~2.5.0", - "rc-rate": "~2.5.0", - "rc-select": "~9.2.0", - "rc-slider": "~8.6.11", - "rc-steps": "~3.4.1", - "rc-switch": "~1.9.0", - "rc-table": "~6.7.0", - "rc-tabs": "~9.6.4", - "rc-time-picker": "~3.7.1", - "rc-tooltip": "~3.7.3", - "rc-tree": "~2.1.0", - "rc-tree-select": "~2.9.1", - "rc-trigger": "^2.6.2", - "rc-upload": "~2.7.0", - "rc-util": "^4.6.0", - "react-lazy-load": "^3.0.13", - "react-lifecycles-compat": "^3.0.4", - "react-slick": "~0.24.0", - "resize-observer-polyfill": "^1.5.1", - "shallowequal": "^1.1.0", - "warning": "~4.0.3" + "rc-animate": "~3.1.0", + "rc-cascader": "~1.3.0", + "rc-checkbox": "~2.3.0", + "rc-collapse": "~2.0.0", + "rc-dialog": "~8.1.0", + "rc-drawer": "~4.1.0", + "rc-dropdown": "~3.1.2", + "rc-field-form": "~1.10.0", + "rc-image": "~3.0.2", + "rc-input-number": "~6.0.0", + "rc-mentions": "~1.4.0", + "rc-menu": "~8.5.2", + "rc-motion": "^1.0.0", + "rc-notification": "~4.4.0", + "rc-pagination": "~3.0.3", + "rc-picker": "~2.0.6", + "rc-progress": "~3.0.0", + "rc-rate": "~2.8.2", + "rc-resize-observer": "^0.2.3", + "rc-select": "~11.1.0", + "rc-slider": "~9.3.0", + "rc-steps": "~4.1.0", + "rc-switch": "~3.2.0", + "rc-table": "~7.9.2", + "rc-tabs": "~11.6.0", + "rc-textarea": "~0.3.0", + "rc-tooltip": "~4.2.0", + "rc-tree": "~3.9.0", + "rc-tree-select": "~4.1.1", + "rc-trigger": "~4.4.0", + "rc-upload": "~3.2.1", + "rc-util": "^5.1.0", + "scroll-into-view-if-needed": "^2.2.25", + "warning": "^4.0.3" + }, + "dependencies": { + "@ant-design/colors": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/@ant-design/colors/-/colors-4.0.5.tgz", + "integrity": "sha512-3mnuX2prnWOWvpFTS2WH2LoouWlOgtnIpc6IarWN6GOzzLF8dW/U8UctuvIPhoboETehZfJ61XP+CGakBEPJ3Q==", + "requires": { + "tinycolor2": "^1.4.1" + } + }, + "lodash": { + "version": "4.17.20", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", + "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==" + }, + "moment": { + "version": "2.27.0", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.27.0.tgz", + "integrity": "sha512-al0MUK7cpIcglMv3YF13qSgdAIqxHTO7brRtaz3DlSULbqfazqkc5kEjNrLDOM7fsjshoFIihnU8snrP7zUvhQ==" + }, + "omit.js": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/omit.js/-/omit.js-2.0.2.tgz", + "integrity": "sha512-hJmu9D+bNB40YpL9jYebQl4lsTW6yEHRTroJzNLqQJYHm7c+NQnJGfZmIWh8S3q3KoaxV1aLhV6B3+0N0/kyJg==" + }, + "rc-align": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/rc-align/-/rc-align-4.0.3.tgz", + "integrity": "sha512-TpI0t1tvAo/wYdoZbZlkCK+MkQBqNuPyRZesfsji4tMlqoqQ0q0MhnC9JD5KGPitMvmSB+KWgFpaN2uTz4hw6Q==", + "requires": { + "@babel/runtime": "^7.10.1", + "classnames": "2.x", + "dom-align": "^1.7.0", + "rc-util": "^5.0.1", + "resize-observer-polyfill": "^1.5.1" + } + }, + "rc-animate": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/rc-animate/-/rc-animate-3.1.0.tgz", + "integrity": "sha512-8FsM+3B1H+0AyTyGggY6JyVldHTs1CyYT8CfTmG/nGHHXlecvSLeICJhcKgRLjUiQlctNnRtB1rwz79cvBVmrw==", + "requires": { + "@ant-design/css-animation": "^1.7.2", + "classnames": "^2.2.6", + "raf": "^3.4.0", + "rc-util": "^5.0.1" + } + }, + "rc-tooltip": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/rc-tooltip/-/rc-tooltip-4.2.2.tgz", + "integrity": "sha512-mAs+gAngUyHVA6HdFXsELoJOHgfjAACLLc8SGtnVhovJdyqs5ZGSL9p5i+ApNaVpwjswqShw7L4DRtMl7cXCQg==", + "requires": { + "rc-trigger": "^4.2.1" + } + }, + "rc-trigger": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/rc-trigger/-/rc-trigger-4.4.2.tgz", + "integrity": "sha512-uw2/s7j1b/RXyixa4omPuxZWv/3ln+H+p0v3trIUBxseolbdj8TTFpXYjXMZdGtMpAEAIbN1yo/K+r7wRB+xtQ==", + "requires": { + "@babel/runtime": "^7.10.1", + "classnames": "^2.2.6", + "raf": "^3.4.1", + "rc-align": "^4.0.0", + "rc-motion": "^1.0.0", + "rc-util": "^5.0.1" + } + }, + "rc-util": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/rc-util/-/rc-util-5.2.1.tgz", + "integrity": "sha512-OnIKp4DsYZpT3St9LwiGARXyMR38wNbk7C4jXS6NGAGHZEQWck7W6qfiJwj+MUmhJiUisAknU6BUs65exbhFTw==", + "requires": { + "react-is": "^16.12.0", + "shallowequal": "^1.1.0" + } + } } }, "antd-mobile": { @@ -2027,15 +2665,11 @@ } } }, - "any-observable": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/any-observable/-/any-observable-0.3.0.tgz", - "integrity": "sha512-/FQM1EDkTsf63Ub2C6O7GuYFDsSXUwsaZDurV0np41ocwq0jthUAYCmhBX9f+KwlaCgIuWyr/4WlUQUBfKfZog==" - }, "anymatch": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + "dev": true, "requires": { "micromatch": "^3.1.4", "normalize-path": "^2.1.1" @@ -2045,30 +2679,24 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "dev": true, "requires": { "remove-trailing-separator": "^1.0.1" } } } }, - "append-transform": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/append-transform/-/append-transform-0.4.0.tgz", - "integrity": "sha1-126/jKlNJ24keja61EpLdKthGZE=", - "dev": true, - "requires": { - "default-require-extensions": "^1.0.0" - } - }, "aproba": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", - "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==" + "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", + "dev": true }, "are-we-there-yet": { "version": "1.1.5", "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz", "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==", + "dev": true, "requires": { "delegates": "^1.0.0", "readable-stream": "^2.0.6" @@ -2078,6 +2706,7 @@ "version": "2.3.7", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, "requires": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -2091,12 +2720,14 @@ "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==" + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": 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==", + "dev": true, "requires": { "safe-buffer": "~5.1.0" } @@ -2107,6 +2738,7 @@ "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" } @@ -2121,67 +2753,59 @@ "commander": "^2.11.0" } }, + "arity-n": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/arity-n/-/arity-n-1.0.4.tgz", + "integrity": "sha1-2edrEXM+CFacCEeuezmyhgswt0U=", + "dev": true + }, "arr-diff": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=" + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", + "dev": true }, "arr-flatten": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", - "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==" + "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", + "dev": true }, "arr-union": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", - "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=" + "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", + "dev": true }, "array-equal": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/array-equal/-/array-equal-1.0.0.tgz", - "integrity": "sha1-jCpe8kcv2ep0KwTHenUJO6J1fJM=" - }, - "array-filter": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/array-filter/-/array-filter-0.0.1.tgz", - "integrity": "sha1-fajPLiZijtcygDWB/SH2fKzS7uw=", + "integrity": "sha1-jCpe8kcv2ep0KwTHenUJO6J1fJM=", "dev": true }, "array-find-index": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", - "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=" + "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=", + "dev": true }, "array-flatten": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" + "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=", + "dev": true }, "array-includes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.2.tgz", - "integrity": "sha512-w2GspexNQpx+PutG3QpT437/BenZBj0M/MZGn5mzv/MofYqo0xmRHzn4lFsoDlWJ+THYsGJmFlW68WlDFx7VRw==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.1.tgz", + "integrity": "sha512-c2VXaCHl7zPsvpkFsw4nxvFie4fh1ur9bpcgsVkIjqn0H/Xwdg+7fv3n2r/isyS8EBj5b06M9kHyZuIr4El6WQ==", "dev": true, "requires": { - "call-bind": "^1.0.0", "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.1", - "get-intrinsic": "^1.0.1", + "es-abstract": "^1.17.0", "is-string": "^1.0.5" } }, - "array-map": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/array-map/-/array-map-0.0.0.tgz", - "integrity": "sha1-iKK6tz0c97zVwbEYoAP2b2ZfpmI=", - "dev": true - }, - "array-reduce": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/array-reduce/-/array-reduce-0.0.0.tgz", - "integrity": "sha1-FziZ0//Rx9k4PkR5Ul2+J4yrXys=", - "dev": true - }, "array-tree-filter": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/array-tree-filter/-/array-tree-filter-2.1.0.tgz", @@ -2191,6 +2815,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", + "dev": true, "requires": { "array-uniq": "^1.0.1" } @@ -2198,12 +2823,14 @@ "array-uniq": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", - "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=" + "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", + "dev": true }, "array-unique": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=" + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", + "dev": true }, "array.prototype.find": { "version": "2.1.1", @@ -2212,47 +2839,22 @@ "requires": { "define-properties": "^1.1.3", "es-abstract": "^1.17.4" - }, - "dependencies": { - "es-abstract": { - "version": "1.17.7", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.7.tgz", - "integrity": "sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g==", - "requires": { - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1", - "is-callable": "^1.2.2", - "is-regex": "^1.1.1", - "object-inspect": "^1.8.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.1", - "string.prototype.trimend": "^1.0.1", - "string.prototype.trimstart": "^1.0.1" - } - } } }, "array.prototype.flat": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.2.4.tgz", - "integrity": "sha512-4470Xi3GAPAjZqFcljX2xzckv1qeKPizoNkiS0+O4IoPR2ZNpcjE0pkhdihlDouK+x6QOast26B4Q/O9DJnwSg==", + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.2.3.tgz", + "integrity": "sha512-gBlRZV0VSmfPIeWfuuy56XZMvbVfbEUnOXUvt3F/eUUUSyzlgLxhEX4YAEpxNAogRGehPSnfXyPtYyKAhkzQhQ==", "requires": { - "call-bind": "^1.0.0", "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.1" + "es-abstract": "^1.17.0-next.1" } }, - "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", - "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=" + "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", + "dev": true }, "asap": { "version": "2.0.6", @@ -2263,6 +2865,7 @@ "version": "0.2.4", "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", + "dev": true, "requires": { "safer-buffer": "~2.1.0" } @@ -2288,41 +2891,25 @@ } }, "assert": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.0.tgz", - "integrity": "sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==", + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/assert/-/assert-1.4.1.tgz", + "integrity": "sha1-mZEtWRg2tab1s0XA8H7vwI/GXZE=", "dev": true, "requires": { - "object-assign": "^4.1.1", "util": "0.10.3" - }, - "dependencies": { - "inherits": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", - "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=", - "dev": true - }, - "util": { - "version": "0.10.3", - "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", - "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", - "dev": true, - "requires": { - "inherits": "2.0.1" - } - } } }, "assert-plus": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true }, "assign-symbols": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", - "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=" + "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", + "dev": true }, "ast-types-flow": { "version": "0.0.7", @@ -2348,17 +2935,20 @@ "async-each": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz", - "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==" + "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==", + "dev": true }, "async-foreach": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/async-foreach/-/async-foreach-0.1.3.tgz", - "integrity": "sha1-NhIfhFwFeBct5Bmpfb6x0W7DRUI=" + "integrity": "sha1-NhIfhFwFeBct5Bmpfb6x0W7DRUI=", + "dev": true }, "async-limiter": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", - "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==" + "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==", + "dev": true }, "async-validator": { "version": "1.11.5", @@ -2368,12 +2958,14 @@ "asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", + "dev": true }, "atob": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", - "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==" + "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", + "dev": true }, "autoprefixer": { "version": "9.8.6", @@ -2390,62 +2982,37 @@ "postcss-value-parser": "^4.1.0" }, "dependencies": { - "postcss": { - "version": "7.0.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", - "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", - "dev": true, - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, "postcss-value-parser": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz", "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==", "dev": true - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } } } }, "awesome-phonenumber": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/awesome-phonenumber/-/awesome-phonenumber-2.7.0.tgz", - "integrity": "sha512-oV8NvckkLmVK9V0QhjACiP8E3jRC4oHn/xjDckB+Dv9NLhqjoa3JDNOIFnhACpssLFK3ITLhVyxUpLNh9AT//w==" + "version": "2.43.0", + "resolved": "https://registry.npmjs.org/awesome-phonenumber/-/awesome-phonenumber-2.43.0.tgz", + "integrity": "sha512-UjrT0oi4k5EDUoasCT0C6HszA2qqKaG5ZCM136Akgq+oDlevR2wIcAFQFpduGjV7/GHBaWpEwiQDh3mCMlpe+g==" }, "aws-sign2": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=" + "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", + "dev": true }, "aws4": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz", - "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==" + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.10.0.tgz", + "integrity": "sha512-3YDiu347mtVtjpyV3u5kVqQLP242c06zwDOgpeRnybmXlYYsLbtTrUBUm8i8srONt+FWobl5aibnU1030PeeuA==", + "dev": true }, "axios": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.18.0.tgz", - "integrity": "sha1-MtU+SFHv3AoRmTts0AB4nXDAUQI=", + "version": "0.21.1", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.1.tgz", + "integrity": "sha512-dKQiRHxGD9PPRIUNIWvZhPTPpl1rf/OxTYKsqKUDjBwYylTvV7SjSHJb9ratfyzM6wCdLCOYLzs73qpg5c4iGA==", "requires": { - "follow-redirects": "^1.3.0", - "is-buffer": "^1.1.5" + "follow-redirects": "^1.10.0" } }, "axobject-query": { @@ -2498,24 +3065,18 @@ } } }, - "babel-core": { - "version": "7.0.0-bridge.0", - "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-7.0.0-bridge.0.tgz", - "integrity": "sha512-poPX9mZH/5CSanm50Q+1toVci6pv5KSRv/5TWCwtzQS5XEwn40BcCrgIeMFWP9CKKIniKXNxoIOnOq4VVlGXhg==", - "dev": true - }, "babel-eslint": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-9.0.0.tgz", - "integrity": "sha512-itv1MwE3TMbY0QtNfeL7wzak1mV47Uy+n6HtSOO4Xd7rvmO+tsGQSgyOEEgo6Y2vHZKZphaoelNeSVj4vkLA1g==", + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-10.1.0.tgz", + "integrity": "sha512-ifWaTHQ0ce+448CYop8AdrQiBsGrnC+bMgfyKFdi6EsPLTAWG+QfyDeM6OH+FmWnKvEq5NnBMLvlBUPKQZoDSg==", "dev": true, "requires": { "@babel/code-frame": "^7.0.0", - "@babel/parser": "^7.0.0", - "@babel/traverse": "^7.0.0", - "@babel/types": "^7.0.0", - "eslint-scope": "3.7.1", - "eslint-visitor-keys": "^1.0.0" + "@babel/parser": "^7.7.0", + "@babel/traverse": "^7.7.0", + "@babel/types": "^7.7.0", + "eslint-visitor-keys": "^1.0.0", + "resolve": "^1.12.0" } }, "babel-extract-comments": { @@ -2527,69 +3088,40 @@ "babylon": "^6.18.0" } }, - "babel-generator": { - "version": "6.26.1", - "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.1.tgz", - "integrity": "sha512-HyfwY6ApZj7BYTcJURpM5tznulaBvyio7/0d4zFOeMPUmfxkCjHocCuoLa2SAGzBI8AREcH3eP3758F672DppA==", - "dev": true, - "requires": { - "babel-messages": "^6.23.0", - "babel-runtime": "^6.26.0", - "babel-types": "^6.26.0", - "detect-indent": "^4.0.0", - "jsesc": "^1.3.0", - "lodash": "^4.17.4", - "source-map": "^0.5.7", - "trim-right": "^1.0.1" - }, - "dependencies": { - "jsesc": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz", - "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=", - "dev": true - } - } - }, - "babel-helpers": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helpers/-/babel-helpers-6.24.1.tgz", - "integrity": "sha1-NHHenK7DiOXIUOWX5Yom3fN2ArI=", - "dev": true, - "requires": { - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1" - } - }, "babel-jest": { - "version": "23.6.0", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-23.6.0.tgz", - "integrity": "sha512-lqKGG6LYXYu+DQh/slrQ8nxXQkEkhugdXsU6St7GmhVS7Ilc/22ArwqXNJrf0QaOBjZB0360qZMwXqDYQHXaew==", + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-24.9.0.tgz", + "integrity": "sha512-ntuddfyiN+EhMw58PTNL1ph4C9rECiQXjI4nMMBKBaNjXvqLdkXpPRcMSr4iyBrJg/+wz9brFUD6RhOAT6r4Iw==", "dev": true, "requires": { - "babel-plugin-istanbul": "^4.1.6", - "babel-preset-jest": "^23.2.0" + "@jest/transform": "^24.9.0", + "@jest/types": "^24.9.0", + "@types/babel__core": "^7.1.0", + "babel-plugin-istanbul": "^5.1.0", + "babel-preset-jest": "^24.9.0", + "chalk": "^2.4.2", + "slash": "^2.0.0" } }, "babel-loader": { - "version": "8.0.5", - "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.0.5.tgz", - "integrity": "sha512-NTnHnVRd2JnRqPC0vW+iOQWU5pchDbYXsG2E6DMXEpMfUcQKclF9gmf3G3ZMhzG7IG9ji4coL0cm+FxeWxDpnw==", - "dev": true, - "requires": { - "find-cache-dir": "^2.0.0", - "loader-utils": "^1.0.2", - "mkdirp": "^0.5.1", - "util.promisify": "^1.0.0" - } - }, - "babel-messages": { - "version": "6.23.0", - "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz", - "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.1.0.tgz", + "integrity": "sha512-7q7nC1tYOrqvUrN3LQK4GwSk/TQorZSOlO9C+RZDZpODgyN4ZlCqE5q9cDsyWOliN+aU9B4JX01xK9eJXowJLw==", "dev": true, "requires": { - "babel-runtime": "^6.22.0" + "find-cache-dir": "^2.1.0", + "loader-utils": "^1.4.0", + "mkdirp": "^0.5.3", + "pify": "^4.0.1", + "schema-utils": "^2.6.5" + }, + "dependencies": { + "pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true + } } }, "babel-plugin-dynamic-import-node": { @@ -2602,82 +3134,90 @@ } }, "babel-plugin-istanbul": { - "version": "4.1.6", - "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-4.1.6.tgz", - "integrity": "sha512-PWP9FQ1AhZhS01T/4qLSKoHGY/xvkZdVBGlKM/HuxxS3+sC66HhTNR7+MpbO/so/cz/wY94MeSWJuP1hXIPfwQ==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-5.2.0.tgz", + "integrity": "sha512-5LphC0USA8t4i1zCtjbbNb6jJj/9+X6P37Qfirc/70EQ34xKlMW+a1RHGwxGI+SwWpNwZ27HqvzAobeqaXwiZw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "find-up": "^3.0.0", + "istanbul-lib-instrument": "^3.3.0", + "test-exclude": "^5.2.3" + } + }, + "babel-plugin-jest-hoist": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-24.9.0.tgz", + "integrity": "sha512-2EMA2P8Vp7lG0RAzr4HXqtYwacfMErOuv1U3wrvxHX6rD1sV6xS3WXG3r8TRQ2r6w8OhvSdWt+z41hQNwNm3Xw==", + "dev": true, + "requires": { + "@types/babel__traverse": "^7.0.6" + } + }, + "babel-plugin-macros": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-2.8.0.tgz", + "integrity": "sha512-SEP5kJpfGYqYKpBrj5XU3ahw5p5GOHJ0U5ssOSQ/WBVdwkD2Dzlce95exQTs3jOVWPPKLBN2rlEWkCK7dSmLvg==", "dev": true, "requires": { - "babel-plugin-syntax-object-rest-spread": "^6.13.0", - "find-up": "^2.1.0", - "istanbul-lib-instrument": "^1.10.1", - "test-exclude": "^4.2.1" + "@babel/runtime": "^7.7.2", + "cosmiconfig": "^6.0.0", + "resolve": "^1.12.0" }, "dependencies": { - "find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "cosmiconfig": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-6.0.0.tgz", + "integrity": "sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==", "dev": true, "requires": { - "locate-path": "^2.0.0" + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.1.0", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.7.2" } }, - "locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "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": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" } }, - "p-limit": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", - "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "parse-json": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.0.1.tgz", + "integrity": "sha512-ztoZ4/DYeXQq4E21v169sC8qWINGpcosGv9XhTDvg9/hWvx/zrFkc9BiWxR58OJLHGk28j5BL0SDLeV2WmFZlQ==", "dev": true, "requires": { - "p-try": "^1.0.0" + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1", + "lines-and-columns": "^1.1.6" } }, - "p-locate": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", - "dev": true, - "requires": { - "p-limit": "^1.1.0" - } + "path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true }, - "p-try": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", + "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 } } }, - "babel-plugin-jest-hoist": { - "version": "23.2.0", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-23.2.0.tgz", - "integrity": "sha1-5h+uBaHKiAGq3uV6bWa4zvr0QWc=", - "dev": true - }, - "babel-plugin-macros": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-2.5.0.tgz", - "integrity": "sha512-BWw0lD0kVZAXRD3Od1kMrdmfudqzDzYv2qrN3l2ISR1HVp1EgLKfbOrYV9xmY5k3qx3RIu5uPAUZZZHpo0o5Iw==", - "dev": true, - "requires": { - "cosmiconfig": "^5.0.5", - "resolve": "^1.8.1" - } - }, "babel-plugin-named-asset-import": { - "version": "0.3.7", - "resolved": "https://registry.npmjs.org/babel-plugin-named-asset-import/-/babel-plugin-named-asset-import-0.3.7.tgz", - "integrity": "sha512-squySRkf+6JGnvjoUtDEjSREJEBirnXi9NqP6rjSYsylxQxqBTz+pkmf395i9E2zsvmYUaI40BHo6SqZUdydlw==", + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/babel-plugin-named-asset-import/-/babel-plugin-named-asset-import-0.3.6.tgz", + "integrity": "sha512-1aGDUfL1qOOIoqk9QKGIo2lANk+C7ko/fqH0uIyC71x3PEGz0uVP8ISgfEsFuG+FKmjHTvFK/nNM8dowpmUxLA==", "dev": true }, "babel-plugin-syntax-object-rest-spread": { @@ -2720,272 +3260,182 @@ } }, "babel-preset-jest": { - "version": "23.2.0", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-23.2.0.tgz", - "integrity": "sha1-jsegOhOPABoaj7HoETZSvxpV2kY=", + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-24.9.0.tgz", + "integrity": "sha512-izTUuhE4TMfTRPF92fFwD2QfdXaZW08qvWTFCI51V8rW5x00UuPgc3ajRoWofXOuxjfcOM5zzSYsQS3H8KGCAg==", "dev": true, "requires": { - "babel-plugin-jest-hoist": "^23.2.0", - "babel-plugin-syntax-object-rest-spread": "^6.13.0" + "@babel/plugin-syntax-object-rest-spread": "^7.0.0", + "babel-plugin-jest-hoist": "^24.9.0" } }, "babel-preset-react-app": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/babel-preset-react-app/-/babel-preset-react-app-7.0.2.tgz", - "integrity": "sha512-mwCk/u2wuiO8qQqblN5PlDa44taY0acq7hw6W+a70W522P7a9mIcdggL1fe5/LgAT7tqCq46q9wwhqaMoYKslQ==", - "dev": true, - "requires": { - "@babel/core": "7.2.2", - "@babel/plugin-proposal-class-properties": "7.3.0", - "@babel/plugin-proposal-decorators": "7.3.0", - "@babel/plugin-proposal-object-rest-spread": "7.3.2", - "@babel/plugin-syntax-dynamic-import": "7.2.0", - "@babel/plugin-transform-classes": "7.2.2", - "@babel/plugin-transform-destructuring": "7.3.2", - "@babel/plugin-transform-flow-strip-types": "7.2.3", - "@babel/plugin-transform-react-constant-elements": "7.2.0", - "@babel/plugin-transform-react-display-name": "7.2.0", - "@babel/plugin-transform-runtime": "7.2.0", - "@babel/preset-env": "7.3.1", - "@babel/preset-react": "7.0.0", - "@babel/preset-typescript": "7.1.0", - "@babel/runtime": "7.3.1", - "babel-loader": "8.0.5", - "babel-plugin-dynamic-import-node": "2.2.0", - "babel-plugin-macros": "2.5.0", + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/babel-preset-react-app/-/babel-preset-react-app-9.1.2.tgz", + "integrity": "sha512-k58RtQOKH21NyKtzptoAvtAODuAJJs3ZhqBMl456/GnXEQ/0La92pNmwgWoMn5pBTrsvk3YYXdY7zpY4e3UIxA==", + "dev": true, + "requires": { + "@babel/core": "7.9.0", + "@babel/plugin-proposal-class-properties": "7.8.3", + "@babel/plugin-proposal-decorators": "7.8.3", + "@babel/plugin-proposal-nullish-coalescing-operator": "7.8.3", + "@babel/plugin-proposal-numeric-separator": "7.8.3", + "@babel/plugin-proposal-optional-chaining": "7.9.0", + "@babel/plugin-transform-flow-strip-types": "7.9.0", + "@babel/plugin-transform-react-display-name": "7.8.3", + "@babel/plugin-transform-runtime": "7.9.0", + "@babel/preset-env": "7.9.0", + "@babel/preset-react": "7.9.1", + "@babel/preset-typescript": "7.9.0", + "@babel/runtime": "7.9.0", + "babel-plugin-macros": "2.8.0", "babel-plugin-transform-react-remove-prop-types": "0.4.24" }, "dependencies": { "@babel/plugin-proposal-class-properties": { - "version": "7.3.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.3.0.tgz", - "integrity": "sha512-wNHxLkEKTQ2ay0tnsam2z7fGZUi+05ziDJflEt3AZTP3oXLKHJp9HqhfroB/vdMvt3sda9fAbq7FsG8QPDrZBg==", - "dev": true, - "requires": { - "@babel/helper-create-class-features-plugin": "^7.3.0", - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/plugin-proposal-object-rest-spread": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.3.2.tgz", - "integrity": "sha512-DjeMS+J2+lpANkYLLO+m6GjoTMygYglKmRe6cDTbFv3L9i6mmiE8fe6B8MtCSLZpVXscD5kn7s6SgtHrDoBWoA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-syntax-object-rest-spread": "^7.2.0" - } - }, - "@babel/plugin-syntax-dynamic-import": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.2.0.tgz", - "integrity": "sha512-mVxuJ0YroI/h/tbFTPGZR8cv6ai+STMKNBq0f8hFxsxWjl94qqhsb+wXbpNMDPU3cfR1TIsVFzU3nXyZMqyK4w==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.8.3.tgz", + "integrity": "sha512-EqFhbo7IosdgPgZggHaNObkmO1kNUe3slaKu54d5OWvy+p9QIKOzK1GAEpAIsZtWVtPXUHSMcT4smvDrCfY4AA==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-create-class-features-plugin": "^7.8.3", + "@babel/helper-plugin-utils": "^7.8.3" } }, - "@babel/plugin-transform-classes": { - "version": "7.2.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.2.2.tgz", - "integrity": "sha512-gEZvgTy1VtcDOaQty1l10T3jQmJKlNVxLDCs+3rCVPr6nMkODLELxViq5X9l+rfxbie3XrfrMCYYY6eX3aOcOQ==", + "@babel/plugin-proposal-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-TS9MlfzXpXKt6YYomudb/KU7nQI6/xnapG6in1uZxoxDghuSMZsPb6D2fyUwNYSAp4l1iR7QtFOjkqcRYcUsfw==", "dev": true, "requires": { - "@babel/helper-annotate-as-pure": "^7.0.0", - "@babel/helper-define-map": "^7.1.0", - "@babel/helper-function-name": "^7.1.0", - "@babel/helper-optimise-call-expression": "^7.0.0", - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-replace-supers": "^7.1.0", - "@babel/helper-split-export-declaration": "^7.0.0", - "globals": "^11.1.0" + "@babel/helper-plugin-utils": "^7.8.3", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.0" } }, - "@babel/plugin-transform-destructuring": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.3.2.tgz", - "integrity": "sha512-Lrj/u53Ufqxl/sGxyjsJ2XNtNuEjDyjpqdhMNh5aZ+XFOdThL46KBj27Uem4ggoezSYBxKWAil6Hu8HtwqesYw==", + "@babel/plugin-proposal-numeric-separator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.8.3.tgz", + "integrity": "sha512-jWioO1s6R/R+wEHizfaScNsAx+xKgwTLNXSh7tTC4Usj3ItsPEhYkEpU4h+lpnBwq7NBVOJXfO6cRFYcX69JUQ==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.8.3" } }, - "@babel/plugin-transform-react-constant-elements": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.2.0.tgz", - "integrity": "sha512-YYQFg6giRFMsZPKUM9v+VcHOdfSQdz9jHCx3akAi3UYgyjndmdYGSXylQ/V+HswQt4fL8IklchD9HTsaOCrWQQ==", + "@babel/plugin-proposal-optional-chaining": { + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.9.0.tgz", + "integrity": "sha512-NDn5tu3tcv4W30jNhmc2hyD5c56G6cXx4TesJubhxrJeCvuuMpttxr0OnNCqbZGhFjLrg+NIhxxC+BK5F6yS3w==", "dev": true, "requires": { - "@babel/helper-annotate-as-pure": "^7.0.0", - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.0" } }, "@babel/plugin-transform-react-display-name": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.2.0.tgz", - "integrity": "sha512-Htf/tPa5haZvRMiNSQSFifK12gtr/8vwfr+A9y69uF0QcU77AVu4K7MiHEkTxF7lQoHOL0F9ErqgfNEAKgXj7A==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.8.3.tgz", + "integrity": "sha512-3Jy/PCw8Fe6uBKtEgz3M82ljt+lTg+xJaM4og+eyu83qLT87ZUSckn0wy7r31jflURWLO83TW6Ylf7lyXj3m5A==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "^7.8.3" } }, "@babel/preset-env": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.3.1.tgz", - "integrity": "sha512-FHKrD6Dxf30e8xgHQO0zJZpUPfVZg+Xwgz5/RdSWCbza9QLNk4Qbp40ctRoqDxml3O8RMzB1DU55SXeDG6PqHQ==", - "dev": true, - "requires": { - "@babel/helper-module-imports": "^7.0.0", - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-proposal-async-generator-functions": "^7.2.0", - "@babel/plugin-proposal-json-strings": "^7.2.0", - "@babel/plugin-proposal-object-rest-spread": "^7.3.1", - "@babel/plugin-proposal-optional-catch-binding": "^7.2.0", - "@babel/plugin-proposal-unicode-property-regex": "^7.2.0", - "@babel/plugin-syntax-async-generators": "^7.2.0", - "@babel/plugin-syntax-json-strings": "^7.2.0", - "@babel/plugin-syntax-object-rest-spread": "^7.2.0", - "@babel/plugin-syntax-optional-catch-binding": "^7.2.0", - "@babel/plugin-transform-arrow-functions": "^7.2.0", - "@babel/plugin-transform-async-to-generator": "^7.2.0", - "@babel/plugin-transform-block-scoped-functions": "^7.2.0", - "@babel/plugin-transform-block-scoping": "^7.2.0", - "@babel/plugin-transform-classes": "^7.2.0", - "@babel/plugin-transform-computed-properties": "^7.2.0", - "@babel/plugin-transform-destructuring": "^7.2.0", - "@babel/plugin-transform-dotall-regex": "^7.2.0", - "@babel/plugin-transform-duplicate-keys": "^7.2.0", - "@babel/plugin-transform-exponentiation-operator": "^7.2.0", - "@babel/plugin-transform-for-of": "^7.2.0", - "@babel/plugin-transform-function-name": "^7.2.0", - "@babel/plugin-transform-literals": "^7.2.0", - "@babel/plugin-transform-modules-amd": "^7.2.0", - "@babel/plugin-transform-modules-commonjs": "^7.2.0", - "@babel/plugin-transform-modules-systemjs": "^7.2.0", - "@babel/plugin-transform-modules-umd": "^7.2.0", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.3.0", - "@babel/plugin-transform-new-target": "^7.0.0", - "@babel/plugin-transform-object-super": "^7.2.0", - "@babel/plugin-transform-parameters": "^7.2.0", - "@babel/plugin-transform-regenerator": "^7.0.0", - "@babel/plugin-transform-shorthand-properties": "^7.2.0", - "@babel/plugin-transform-spread": "^7.2.0", - "@babel/plugin-transform-sticky-regex": "^7.2.0", - "@babel/plugin-transform-template-literals": "^7.2.0", - "@babel/plugin-transform-typeof-symbol": "^7.2.0", - "@babel/plugin-transform-unicode-regex": "^7.2.0", - "browserslist": "^4.3.4", + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.9.0.tgz", + "integrity": "sha512-712DeRXT6dyKAM/FMbQTV/FvRCms2hPCx+3weRjZ8iQVQWZejWWk1wwG6ViWMyqb/ouBbGOl5b6aCk0+j1NmsQ==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.9.0", + "@babel/helper-compilation-targets": "^7.8.7", + "@babel/helper-module-imports": "^7.8.3", + "@babel/helper-plugin-utils": "^7.8.3", + "@babel/plugin-proposal-async-generator-functions": "^7.8.3", + "@babel/plugin-proposal-dynamic-import": "^7.8.3", + "@babel/plugin-proposal-json-strings": "^7.8.3", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-proposal-numeric-separator": "^7.8.3", + "@babel/plugin-proposal-object-rest-spread": "^7.9.0", + "@babel/plugin-proposal-optional-catch-binding": "^7.8.3", + "@babel/plugin-proposal-optional-chaining": "^7.9.0", + "@babel/plugin-proposal-unicode-property-regex": "^7.8.3", + "@babel/plugin-syntax-async-generators": "^7.8.0", + "@babel/plugin-syntax-dynamic-import": "^7.8.0", + "@babel/plugin-syntax-json-strings": "^7.8.0", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.0", + "@babel/plugin-syntax-numeric-separator": "^7.8.0", + "@babel/plugin-syntax-object-rest-spread": "^7.8.0", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.0", + "@babel/plugin-syntax-optional-chaining": "^7.8.0", + "@babel/plugin-syntax-top-level-await": "^7.8.3", + "@babel/plugin-transform-arrow-functions": "^7.8.3", + "@babel/plugin-transform-async-to-generator": "^7.8.3", + "@babel/plugin-transform-block-scoped-functions": "^7.8.3", + "@babel/plugin-transform-block-scoping": "^7.8.3", + "@babel/plugin-transform-classes": "^7.9.0", + "@babel/plugin-transform-computed-properties": "^7.8.3", + "@babel/plugin-transform-destructuring": "^7.8.3", + "@babel/plugin-transform-dotall-regex": "^7.8.3", + "@babel/plugin-transform-duplicate-keys": "^7.8.3", + "@babel/plugin-transform-exponentiation-operator": "^7.8.3", + "@babel/plugin-transform-for-of": "^7.9.0", + "@babel/plugin-transform-function-name": "^7.8.3", + "@babel/plugin-transform-literals": "^7.8.3", + "@babel/plugin-transform-member-expression-literals": "^7.8.3", + "@babel/plugin-transform-modules-amd": "^7.9.0", + "@babel/plugin-transform-modules-commonjs": "^7.9.0", + "@babel/plugin-transform-modules-systemjs": "^7.9.0", + "@babel/plugin-transform-modules-umd": "^7.9.0", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.8.3", + "@babel/plugin-transform-new-target": "^7.8.3", + "@babel/plugin-transform-object-super": "^7.8.3", + "@babel/plugin-transform-parameters": "^7.8.7", + "@babel/plugin-transform-property-literals": "^7.8.3", + "@babel/plugin-transform-regenerator": "^7.8.7", + "@babel/plugin-transform-reserved-words": "^7.8.3", + "@babel/plugin-transform-shorthand-properties": "^7.8.3", + "@babel/plugin-transform-spread": "^7.8.3", + "@babel/plugin-transform-sticky-regex": "^7.8.3", + "@babel/plugin-transform-template-literals": "^7.8.3", + "@babel/plugin-transform-typeof-symbol": "^7.8.4", + "@babel/plugin-transform-unicode-regex": "^7.8.3", + "@babel/preset-modules": "^0.1.3", + "@babel/types": "^7.9.0", + "browserslist": "^4.9.1", + "core-js-compat": "^3.6.2", "invariant": "^2.2.2", - "js-levenshtein": "^1.1.3", - "semver": "^5.3.0" + "levenary": "^1.1.1", + "semver": "^5.5.0" } }, "@babel/preset-react": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.0.0.tgz", - "integrity": "sha512-oayxyPS4Zj+hF6Et11BwuBkmpgT/zMxyuZgFrMeZID6Hdh3dGlk4sHCAhdBCpuCKW2ppBfl2uCCetlrUIJRY3w==", + "version": "7.9.1", + "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.9.1.tgz", + "integrity": "sha512-aJBYF23MPj0RNdp/4bHnAP0NVqqZRr9kl0NAOP4nJCex6OYVio59+dnQzsAWFuogdLyeaKA1hmfUIVZkY5J+TQ==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-transform-react-display-name": "^7.0.0", - "@babel/plugin-transform-react-jsx": "^7.0.0", - "@babel/plugin-transform-react-jsx-self": "^7.0.0", - "@babel/plugin-transform-react-jsx-source": "^7.0.0" + "@babel/helper-plugin-utils": "^7.8.3", + "@babel/plugin-transform-react-display-name": "^7.8.3", + "@babel/plugin-transform-react-jsx": "^7.9.1", + "@babel/plugin-transform-react-jsx-development": "^7.9.0", + "@babel/plugin-transform-react-jsx-self": "^7.9.0", + "@babel/plugin-transform-react-jsx-source": "^7.9.0" } }, "@babel/runtime": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.3.1.tgz", - "integrity": "sha512-7jGW8ppV0ant637pIqAcFfQDDH1orEPGJb8aXfUozuCU3QqX7rX4DA8iwrbPrR1hcH0FTTHz47yQnk+bl5xHQA==", + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.9.0.tgz", + "integrity": "sha512-cTIudHnzuWLS56ik4DnRnqqNf8MkdUzV4iFFI1h7Jo9xvrpQROYaAnaSd2mHLQAzzZAPfATynX5ord6YlNYNMA==", "dev": true, "requires": { - "regenerator-runtime": "^0.12.0" - } - }, - "babel-plugin-dynamic-import-node": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.2.0.tgz", - "integrity": "sha512-fP899ELUnTaBcIzmrW7nniyqqdYWrWuJUyPWHxFa/c7r7hS6KC8FscNfLlBNIoPSc55kYMGEEKjPjJGCLbE1qA==", - "dev": true, - "requires": { - "object.assign": "^4.1.0" + "regenerator-runtime": "^0.13.4" } }, "regenerator-runtime": { - "version": "0.12.1", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.12.1.tgz", - "integrity": "sha512-odxIc1/vDlo4iZcfXqRYFj0vpXFNoGdKMAUieAlFYO6m/nl5e9KR/beGf41z4a1FI+aQgtjhuaSlDxQ0hmkrHg==", - "dev": true - } - } - }, - "babel-register": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-register/-/babel-register-6.26.0.tgz", - "integrity": "sha1-btAhFz4vy0htestFxgCahW9kcHE=", - "dev": true, - "requires": { - "babel-core": "^6.26.0", - "babel-runtime": "^6.26.0", - "core-js": "^2.5.0", - "home-or-tmp": "^2.0.0", - "lodash": "^4.17.4", - "mkdirp": "^0.5.1", - "source-map-support": "^0.4.15" - }, - "dependencies": { - "babel-core": { - "version": "6.26.3", - "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-6.26.3.tgz", - "integrity": "sha512-6jyFLuDmeidKmUEb3NM+/yawG0M2bDZ9Z1qbZP59cyHLz8kYGKYwpJP0UwUKKUiTRNvxfLesJnTedqczP7cTDA==", - "dev": true, - "requires": { - "babel-code-frame": "^6.26.0", - "babel-generator": "^6.26.0", - "babel-helpers": "^6.24.1", - "babel-messages": "^6.23.0", - "babel-register": "^6.26.0", - "babel-runtime": "^6.26.0", - "babel-template": "^6.26.0", - "babel-traverse": "^6.26.0", - "babel-types": "^6.26.0", - "babylon": "^6.18.0", - "convert-source-map": "^1.5.1", - "debug": "^2.6.9", - "json5": "^0.5.1", - "lodash": "^4.17.4", - "minimatch": "^3.0.4", - "path-is-absolute": "^1.0.1", - "private": "^0.1.8", - "slash": "^1.0.0", - "source-map": "^0.5.7" - } - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "json5": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", - "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=", - "dev": true - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "slash": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", - "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=", + "version": "0.13.7", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz", + "integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==", "dev": true } } @@ -2999,99 +3449,22 @@ "regenerator-runtime": "^0.11.0" } }, - "babel-template": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz", - "integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=", + "babylon": { + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", + "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==", + "dev": true + }, + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" + }, + "base": { + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", + "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", "dev": true, - "requires": { - "babel-runtime": "^6.26.0", - "babel-traverse": "^6.26.0", - "babel-types": "^6.26.0", - "babylon": "^6.18.0", - "lodash": "^4.17.4" - } - }, - "babel-traverse": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz", - "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=", - "dev": true, - "requires": { - "babel-code-frame": "^6.26.0", - "babel-messages": "^6.23.0", - "babel-runtime": "^6.26.0", - "babel-types": "^6.26.0", - "babylon": "^6.18.0", - "debug": "^2.6.8", - "globals": "^9.18.0", - "invariant": "^2.2.2", - "lodash": "^4.17.4" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "globals": { - "version": "9.18.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz", - "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==", - "dev": true - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } - } - }, - "babel-types": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz", - "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=", - "dev": true, - "requires": { - "babel-runtime": "^6.26.0", - "esutils": "^2.0.2", - "lodash": "^4.17.4", - "to-fast-properties": "^1.0.3" - }, - "dependencies": { - "to-fast-properties": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz", - "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=", - "dev": true - } - } - }, - "babylon": { - "version": "6.18.0", - "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", - "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==", - "dev": true - }, - "backo2": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz", - "integrity": "sha1-MasayLEpNjRj41s+u2n038+6eUc=" - }, - "balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" - }, - "base": { - "version": "0.11.2", - "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", - "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", "requires": { "cache-base": "^1.0.1", "class-utils": "^0.3.5", @@ -3106,6 +3479,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, "requires": { "is-descriptor": "^1.0.0" } @@ -3114,6 +3488,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, "requires": { "kind-of": "^6.0.0" } @@ -3122,6 +3497,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, "requires": { "kind-of": "^6.0.0" } @@ -3130,6 +3506,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, "requires": { "is-accessor-descriptor": "^1.0.0", "is-data-descriptor": "^1.0.0", @@ -3146,15 +3523,10 @@ "safe-buffer": "^5.0.1" } }, - "base64-arraybuffer": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz", - "integrity": "sha1-c5JncZI7Whl0etZmqlzUv5xunOg=" - }, "base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz", + "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==" }, "batch": { "version": "0.6.1", @@ -3175,33 +3547,9 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", - "requires": { - "tweetnacl": "^0.14.3" - } - }, - "bech32": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/bech32/-/bech32-1.1.4.tgz", - "integrity": "sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ==" - }, - "better-assert": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/better-assert/-/better-assert-1.0.2.tgz", - "integrity": "sha1-QIZrnhueC1W0gYlDEeaPr/rrxSI=", - "requires": { - "callsite": "1.0.0" - } - }, - "bfj": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/bfj/-/bfj-6.1.1.tgz", - "integrity": "sha512-+GUNvzHR4nRyGybQc2WpNJL4MJazMuvf92ueIyA0bIkPRwhhQu3IfZQ2PSoVPpCBJfmoSdOxu5rnotfFLlvYRQ==", "dev": true, "requires": { - "bluebird": "^3.5.1", - "check-types": "^7.3.0", - "hoopy": "^0.1.2", - "tryer": "^1.0.0" + "tweetnacl": "^0.14.3" } }, "big-integer": { @@ -3218,46 +3566,24 @@ "binary-extensions": { "version": "1.13.1", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", - "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==" + "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", + "dev": true }, "bindings": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", + "dev": true, "optional": true, "requires": { "file-uri-to-path": "1.0.0" } }, - "bitcoin-address-validation": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/bitcoin-address-validation/-/bitcoin-address-validation-0.2.7.tgz", - "integrity": "sha512-UuBju2QlGggTln5IeoyLmgXuwDHA4fK40WQ4/a0WiYjcNZvLQcJqXPG06UJGenP/0/OrNZDDq79HeRQcYXj+Bg==", - "requires": { - "base-x": "3.0.4", - "bech32": "^1.1.3", - "hash.js": "^1.1.7" - }, - "dependencies": { - "base-x": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.4.tgz", - "integrity": "sha512-UYOadoSIkEI/VrRGSG6qp93rp2WdokiAiNYDfGW5qURAY8GiAQkvMbwNNSDYiVJopqv4gCna7xqf4rrNGp+5AA==", - "requires": { - "safe-buffer": "^5.0.1" - } - } - } - }, - "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", "integrity": "sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo=", + "dev": true, "requires": { "inherits": "~2.0.0" } @@ -3277,6 +3603,7 @@ "version": "1.19.0", "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", + "dev": true, "requires": { "bytes": "3.1.0", "content-type": "~1.0.4", @@ -3294,27 +3621,22 @@ "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, "requires": { "ms": "2.0.0" } }, - "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" - } - }, "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true }, "qs": { "version": "6.7.0", "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", - "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==" + "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==", + "dev": true } } }, @@ -3359,6 +3681,7 @@ "version": "2.3.2", "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, "requires": { "arr-flatten": "^1.1.0", "array-unique": "^0.3.2", @@ -3376,6 +3699,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, "requires": { "is-extendable": "^0.1.0" } @@ -3454,13 +3778,21 @@ } }, "browserify-rsa": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.0.tgz", - "integrity": "sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz", + "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=", "dev": true, "requires": { - "bn.js": "^5.0.0", + "bn.js": "^4.1.0", "randombytes": "^2.0.1" + }, + "dependencies": { + "bn.js": { + "version": "4.11.9", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", + "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==", + "dev": true + } } }, "browserify-sign": { @@ -3490,16 +3822,15 @@ } }, "browserslist": { - "version": "4.16.0", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.0.tgz", - "integrity": "sha512-/j6k8R0p3nxOC6kx5JGAxsnhc9ixaWJfYc+TNTzxg6+ARaESAvQGV7h0uNOB4t+pLQJZWzcrMxXOxjgsCj3dqQ==", + "version": "4.14.0", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.14.0.tgz", + "integrity": "sha512-pUsXKAF2lVwhmtpeA3LJrZ76jXuusrNyhduuQs7CDFf9foT4Y38aQOserd2lMe5DSSrjf3fx34oHwryuvxAUgQ==", "dev": true, "requires": { - "caniuse-lite": "^1.0.30001165", - "colorette": "^1.2.1", - "electron-to-chromium": "^1.3.621", - "escalade": "^3.1.1", - "node-releases": "^1.1.67" + "caniuse-lite": "^1.0.30001111", + "electron-to-chromium": "^1.3.523", + "escalade": "^3.0.2", + "node-releases": "^1.1.60" } }, "bs58": { @@ -3530,12 +3861,12 @@ } }, "buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.6.0.tgz", + "integrity": "sha512-/gDYp/UtU0eA1ys8bOs9J6a+E/KWIY+DZ+Q2WESNUA0jFRsJOc0SNUO6xJ5SGA1xueg3NL65W6s+NY5l9cunuw==", "requires": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" + "base64-js": "^1.0.2", + "ieee754": "^1.1.4" } }, "buffer-from": { @@ -3565,28 +3896,33 @@ "bytes": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", - "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==" + "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", + "dev": true }, "cacache": { - "version": "11.3.3", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-11.3.3.tgz", - "integrity": "sha512-p8WcneCytvzPxhDvYp31PD039vi77I12W+/KfR9S8AZbaiARFBCpsPJS+9uhWfeBfeAtW7o/4vt3MUqLkbY6nA==", + "version": "13.0.1", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-13.0.1.tgz", + "integrity": "sha512-5ZvAxd05HDDU+y9BVvcqYu2LLXmPnQ0hW62h32g4xBTgL/MppR4/04NHfj/ycM2y6lmTnbw6HVi+1eN0Psba6w==", "dev": true, "requires": { - "bluebird": "^3.5.5", - "chownr": "^1.1.1", + "chownr": "^1.1.2", "figgy-pudding": "^3.5.1", + "fs-minipass": "^2.0.0", "glob": "^7.1.4", - "graceful-fs": "^4.1.15", + "graceful-fs": "^4.2.2", + "infer-owner": "^1.0.4", "lru-cache": "^5.1.1", - "mississippi": "^3.0.0", + "minipass": "^3.0.0", + "minipass-collect": "^1.0.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.2", "mkdirp": "^0.5.1", "move-concurrently": "^1.0.1", + "p-map": "^3.0.0", "promise-inflight": "^1.0.1", - "rimraf": "^2.6.3", - "ssri": "^6.0.1", - "unique-filename": "^1.1.1", - "y18n": "^4.0.0" + "rimraf": "^2.7.1", + "ssri": "^7.0.0", + "unique-filename": "^1.1.1" }, "dependencies": { "lru-cache": { @@ -3598,6 +3934,24 @@ "yallist": "^3.0.2" } }, + "p-map": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz", + "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==", + "dev": true, + "requires": { + "aggregate-error": "^3.0.0" + } + }, + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, "yallist": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", @@ -3610,6 +3964,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", + "dev": true, "requires": { "collection-visit": "^1.0.0", "component-emitter": "^1.2.1", @@ -3622,15 +3977,6 @@ "unset-value": "^1.0.0" } }, - "call-bind": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.0.tgz", - "integrity": "sha512-AEXsYIyyDY3MCzbwdhzG3Jx1R0J2wetQyUynn6dYHAO+bg8l1k7jwZtRv4ryryFs7EP+NDlikJlVe59jr0cM2w==", - "requires": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.0" - } - }, "call-me-maybe": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.1.tgz", @@ -3641,6 +3987,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/caller-callsite/-/caller-callsite-2.0.0.tgz", "integrity": "sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ=", + "dev": true, "requires": { "callsites": "^2.0.0" } @@ -3649,39 +3996,38 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-2.0.0.tgz", "integrity": "sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ=", + "dev": true, "requires": { "caller-callsite": "^2.0.0" } }, - "callsite": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/callsite/-/callsite-1.0.0.tgz", - "integrity": "sha1-KAOY5dZkvXQDi28JBRU+borxvCA=" - }, "callsites": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz", - "integrity": "sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=" + "integrity": "sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=", + "dev": true }, "camel-case": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-3.0.0.tgz", - "integrity": "sha1-yjw2iKTpzzpM2nd9xNy8cTJJz3M=", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.1.tgz", + "integrity": "sha512-7fa2WcG4fYFkclIvEmxBbTvmibwF2/agfEBc6q3lOpVu0A13ltLsA+Hr/8Hp6kp5f+G7hKi6t8lys6XxP+1K6Q==", "dev": true, "requires": { - "no-case": "^2.2.0", - "upper-case": "^1.1.1" + "pascal-case": "^3.1.1", + "tslib": "^1.10.0" } }, "camelcase": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", - "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=" + "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=", + "dev": true }, "camelcase-keys": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz", "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=", + "dev": true, "requires": { "camelcase": "^2.0.0", "map-obj": "^1.0.0" @@ -3705,30 +4051,31 @@ } }, "caniuse-lite": { - "version": "1.0.30001170", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001170.tgz", - "integrity": "sha512-Dd4d/+0tsK0UNLrZs3CvNukqalnVTRrxb5mcQm8rHL49t7V5ZaTygwXkrq+FB+dVDf++4ri8eJnFEJAB8332PA==", + "version": "1.0.30001116", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001116.tgz", + "integrity": "sha512-f2lcYnmAI5Mst9+g0nkMIznFGsArRmZ0qU+dnq8l91hymdc2J3SFbiPhOJEeDqC1vtE8nc1qNQyklzB8veJefQ==", "dev": true }, "capture-exit": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/capture-exit/-/capture-exit-1.2.0.tgz", - "integrity": "sha1-HF/MSJ/QqwDU8ax64QcuMXP7q28=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/capture-exit/-/capture-exit-2.0.0.tgz", + "integrity": "sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g==", "dev": true, "requires": { - "rsvp": "^3.3.3" + "rsvp": "^4.8.4" } }, "case-sensitive-paths-webpack-plugin": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.2.0.tgz", - "integrity": "sha512-u5ElzokS8A1pm9vM3/iDgTcI3xqHxuCao94Oz8etI3cf0Tio0p8izkDYbTIn09uP3yUUr6+veaE6IkjnTYS46g==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.3.0.tgz", + "integrity": "sha512-/4YgnZS8y1UXXmC02xD5rRrBEu6T5ub+mQHLNRj0fzTRbgdBYhsNo2V5EqwgqrExjxsjtF/OpAKAMkKsxbD5XQ==", "dev": true }, "caseless": { "version": "0.12.0", "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", + "dev": true }, "cashaddrjs": { "version": "0.3.12", @@ -3754,16 +4101,11 @@ "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", "dev": true }, - "check-types": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/check-types/-/check-types-7.4.0.tgz", - "integrity": "sha512-YbulWHdfP99UfZ73NcUDlNJhEIDgm9Doq9GhpyXbF+7Aegi3CVV7qqMCKTTqJxlvEvnQBp9IA+dxsGN6xK/nSg==", - "dev": true - }, "chokidar": { "version": "2.1.8", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", + "dev": true, "requires": { "anymatch": "^2.0.0", "async-each": "^1.0.1", @@ -3797,7 +4139,8 @@ "ci-info": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", - "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==" + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", + "dev": true }, "cipher-base": { "version": "1.0.4", @@ -3808,16 +4151,11 @@ "safe-buffer": "^5.0.1" } }, - "circular-json": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/circular-json/-/circular-json-0.3.3.tgz", - "integrity": "sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A==", - "dev": true - }, "class-utils": { "version": "0.3.6", "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", + "dev": true, "requires": { "arr-union": "^3.1.0", "define-property": "^0.2.5", @@ -3829,6 +4167,7 @@ "version": "0.2.5", "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, "requires": { "is-descriptor": "^0.1.0" } @@ -3857,33 +4196,126 @@ } } }, + "clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "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-table3": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.5.1.tgz", + "integrity": "sha512-7Qg2Jrep1S/+Q3EceiZtQcDPWxhAvBw+ERf1162v4sikJrvojMHFqXt8QIVha8UlH9rgU0BeWPytZ9/TzYqlUw==", + "dev": true, + "requires": { + "colors": "^1.1.2", + "object-assign": "^4.1.0", + "string-width": "^2.1.1" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, + "requires": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + } + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + } + } + }, "cli-truncate": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-0.2.1.tgz", - "integrity": "sha1-nxXPuwcFAFNpIWxiasfQWrkN1XQ=", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz", + "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==", + "dev": true, "requires": { - "slice-ansi": "0.0.4", - "string-width": "^1.0.1" + "slice-ansi": "^3.0.0", + "string-width": "^4.2.0" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "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==", + "dev": true + }, + "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==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" + } + }, + "strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.0" + } + } } }, "cli-width": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.1.tgz", - "integrity": "sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", + "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", "dev": true }, "cliui": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", + "dev": true, "requires": { "string-width": "^3.1.0", "strip-ansi": "^5.2.0", @@ -3893,17 +4325,20 @@ "ansi-regex": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==" + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true }, "is-fullwidth-code-point": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "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", @@ -3914,6 +4349,7 @@ "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" } @@ -3922,6 +4358,7 @@ "version": "5.1.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", + "dev": true, "requires": { "ansi-styles": "^3.2.0", "string-width": "^3.0.0", @@ -3974,12 +4411,14 @@ "code-point-at": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=" + "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", + "dev": true }, "collection-visit": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", + "dev": true, "requires": { "map-visit": "^1.0.0", "object-visit": "^1.0.0" @@ -3989,7 +4428,6 @@ "version": "3.1.3", "resolved": "https://registry.npmjs.org/color/-/color-3.1.3.tgz", "integrity": "sha512-xgXAcTHa2HeFCGLE9Xs/R82hujGtu9Jd9x4NW3T34+OMs7VoPsjwzRczKHvTAHeJwWFwX5j15+MgAppE8ztObQ==", - "dev": true, "requires": { "color-convert": "^1.9.1", "color-string": "^1.5.4" @@ -4012,7 +4450,6 @@ "version": "1.5.4", "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.5.4.tgz", "integrity": "sha512-57yF5yt8Xa3czSEW1jfQDE79Idk0+AkN/4KWad6tbdxUmAs3MvjxlWSWD4deYytcRfoZ9nhKyFl1kj5tBvidbw==", - "dev": true, "requires": { "color-name": "^1.0.0", "simple-swizzle": "^0.2.2" @@ -4024,10 +4461,18 @@ "integrity": "sha512-puCDz0CzydiSYOrnXpz/PKd69zRrribezjtE9yd4zvytoRc8+RY/KJPvtPFKZS3E3wP6neGyMe0vOTlHO5L3Pw==", "dev": true }, + "colors": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", + "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", + "dev": true, + "optional": true + }, "combined-stream": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dev": true, "requires": { "delayed-stream": "~1.0.0" } @@ -4035,7 +4480,8 @@ "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==" + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true }, "common-tags": { "version": "1.8.0", @@ -4049,16 +4495,17 @@ "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", "dev": true }, + "compare-versions": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/compare-versions/-/compare-versions-3.6.0.tgz", + "integrity": "sha512-W6Af2Iw1z4CB7q4uU4hv646dW9GQuBM+YpC0UvUCWSD8w90SJjp+ujJuXaEMtAXBtSqGfMPuFOVn4/+FlaqfBA==", + "dev": true + }, "complex.js": { "version": "2.0.11", "resolved": "https://registry.npmjs.org/complex.js/-/complex.js-2.0.11.tgz", "integrity": "sha512-6IArJLApNtdg1P1dFtn3dnyzoZBEF0MwMnrfF1exSBRpZYoy4yieMkpZhQDC0uwctw48vii0CFVyHfpgZ/DfGw==" }, - "component-bind": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/component-bind/-/component-bind-1.0.0.tgz", - "integrity": "sha1-AMYIq33Nk4l8AAllGx06jh5zu9E=" - }, "component-classes": { "version": "1.2.6", "resolved": "https://registry.npmjs.org/component-classes/-/component-classes-1.2.6.tgz", @@ -4070,17 +4517,22 @@ "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==" + "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", + "dev": true }, "component-indexof": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/component-indexof/-/component-indexof-0.0.3.tgz", "integrity": "sha1-EdCRMSI5648yyPJa6csAL/6NPCQ=" }, - "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", + "integrity": "sha1-ntZ18TzFRQHTCVCkhv9qe6OrGF8=", + "dev": true, + "requires": { + "arity-n": "^1.0.4" + } }, "compressible": { "version": "2.0.18", @@ -4135,6 +4587,11 @@ } } }, + "compute-scroll-into-view": { + "version": "1.0.16", + "resolved": "https://registry.npmjs.org/compute-scroll-into-view/-/compute-scroll-into-view-1.0.16.tgz", + "integrity": "sha512-a85LHKY81oQnikatZYA90pufpZ6sQx++BoCxOEMsjpZx+ZnaKGQnCyCehTRr/1p9GBIAHTjcU9k71kSYWloLiQ==" + }, "computed-style": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/computed-style/-/computed-style-0.1.4.tgz", @@ -4190,15 +4647,16 @@ } }, "confusing-browser-globals": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/confusing-browser-globals/-/confusing-browser-globals-1.0.10.tgz", - "integrity": "sha512-gNld/3lySHwuhaVluJUKLePYirM3QNCKzVxqAdhJII9/WXKVX5PURzMVJspS1jTslSqjeuG4KMVTSouit5YPHA==", + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/confusing-browser-globals/-/confusing-browser-globals-1.0.9.tgz", + "integrity": "sha512-KbS1Y0jMtyPgIxjO7ZzMAuUpAKMt1SzCL9fsrKsX6b0zJPTaT0SiSPmewwVZg9UAO83HVIlEhZF84LIjZ0lmAw==", "dev": true }, "connect-history-api-fallback": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz", - "integrity": "sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==" + "integrity": "sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==", + "dev": true }, "console-browserify": { "version": "1.2.0", @@ -4209,7 +4667,8 @@ "console-control-strings": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", - "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=" + "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=", + "dev": true }, "consolidated-events": { "version": "2.0.2", @@ -4232,6 +4691,7 @@ "version": "0.5.3", "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", + "dev": true, "requires": { "safe-buffer": "5.1.2" }, @@ -4239,7 +4699,8 @@ "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==" + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true } } }, @@ -4248,11 +4709,6 @@ "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" }, - "content-type-parser": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/content-type-parser/-/content-type-parser-1.0.2.tgz", - "integrity": "sha512-lM4l4CnMEwOLHAHr/P6MEZwZFPJFtAAKgL6pogbXmVZggIqXhdB6RbBtPOTsw2FcXwYhehRGERJmRrjOiIB8pQ==" - }, "convert-source-map": { "version": "1.7.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz", @@ -4278,7 +4734,8 @@ "cookie-signature": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" + "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=", + "dev": true }, "copy-concurrently": { "version": "1.0.5", @@ -4292,12 +4749,24 @@ "mkdirp": "^0.5.1", "rimraf": "^2.5.4", "run-queue": "^1.0.0" + }, + "dependencies": { + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + } } }, "copy-descriptor": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", - "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=" + "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", + "dev": true }, "copy-to-clipboard": { "version": "3.3.1", @@ -4308,17 +4777,17 @@ } }, "core-js": { - "version": "2.6.12", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.12.tgz", - "integrity": "sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==" + "version": "2.6.11", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.11.tgz", + "integrity": "sha512-5wjnpaT/3dV+XB4borEsnAYQchn00XSgTAWKDkEqv+K8KevjbzmofK6hfJ9TZIlpj2N0xQpazy7PiRQiWHqzWg==" }, "core-js-compat": { - "version": "3.8.1", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.8.1.tgz", - "integrity": "sha512-a16TLmy9NVD1rkjUGbwuyWkiDoN0FDpAwrfLONvHFQx0D9k7J9y0srwMT8QP/Z6HE3MIFaVynEeYwZwPX1o5RQ==", + "version": "3.6.5", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.6.5.tgz", + "integrity": "sha512-7ItTKOhOZbznhXAQ2g/slGg1PJV5zDO/WdkTwi7UEOJmkvsE32PWvx6mKtDjiMpjnR2CNf6BAD6sSxIlv7ptng==", "dev": true, "requires": { - "browserslist": "^4.15.0", + "browserslist": "^4.8.5", "semver": "7.0.0" }, "dependencies": { @@ -4330,15 +4799,23 @@ } } }, + "core-js-pure": { + "version": "3.6.5", + "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.6.5.tgz", + "integrity": "sha512-lacdXOimsiD0QyNf9BC/mxivNJ/ybBGJXQFKzRekp1WTHoVUWsUHEn+2T8GJAzzIhyOuXA+gOxCVN3l+5PLPUA==", + "dev": true + }, "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=" + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", + "dev": true }, "cosmiconfig": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz", "integrity": "sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==", + "dev": true, "requires": { "import-fresh": "^2.0.0", "is-directory": "^0.3.1", @@ -4355,6 +4832,303 @@ "underscore": ">1.4.4" } }, + "cp-file": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/cp-file/-/cp-file-7.0.0.tgz", + "integrity": "sha512-0Cbj7gyvFVApzpK/uhCtQ/9kE9UnYpxMzaq5nQQC/Dh4iaj5fxp7iEFIullrYwzj8nf0qnsI1Qsx34hAeAebvw==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "make-dir": "^3.0.0", + "nested-error-stacks": "^2.0.0", + "p-event": "^4.1.0" + }, + "dependencies": { + "make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, + "requires": { + "semver": "^6.0.0" + } + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "cpy": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/cpy/-/cpy-8.1.0.tgz", + "integrity": "sha512-XwlImkjPxMr01qXqC564VD4rfcDQ2eKtYmFlCy0ixsLRJ1cwYVUBh+v47jsQTO1IrmvdjqO813VpDQ0JiTuOdA==", + "dev": true, + "requires": { + "arrify": "^2.0.1", + "cp-file": "^7.0.0", + "globby": "^9.2.0", + "has-glob": "^1.0.0", + "junk": "^3.1.0", + "nested-error-stacks": "^2.1.0", + "p-all": "^2.1.0", + "p-filter": "^2.1.0", + "p-map": "^3.0.0" + }, + "dependencies": { + "arrify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz", + "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==", + "dev": true + }, + "dir-glob": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-2.2.2.tgz", + "integrity": "sha512-f9LBi5QWzIW3I6e//uxZoLBlUt9kcp66qo0sSCxL6YZKc75R1c4MFCoe/LaZiBGmgujvQdxc5Bn3QhfyvK5Hsw==", + "dev": true, + "requires": { + "path-type": "^3.0.0" + } + }, + "globby": { + "version": "9.2.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-9.2.0.tgz", + "integrity": "sha512-ollPHROa5mcxDEkwg6bPt3QbEf4pDQSNtd6JPL1YvOvAo/7/0VAm9TccUeoTmarjPw4pfUthSCqcyfNB1I3ZSg==", + "dev": true, + "requires": { + "@types/glob": "^7.1.1", + "array-union": "^1.0.2", + "dir-glob": "^2.2.2", + "fast-glob": "^2.2.6", + "glob": "^7.1.3", + "ignore": "^4.0.3", + "pify": "^4.0.1", + "slash": "^2.0.0" + } + }, + "p-map": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz", + "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==", + "dev": true, + "requires": { + "aggregate-error": "^3.0.0" + } + }, + "path-type": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", + "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", + "dev": true, + "requires": { + "pify": "^3.0.0" + }, + "dependencies": { + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true + } + } + }, + "pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true + } + } + }, + "cpy-cli": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/cpy-cli/-/cpy-cli-3.1.1.tgz", + "integrity": "sha512-HCpNdBkQy3rw+uARLuIf0YurqsMXYzBa9ihhSAuxYJcNIrqrSq3BstPfr0cQN38AdMrQiO9Dp4hYy7GtGJsLPg==", + "dev": true, + "requires": { + "cpy": "^8.0.0", + "meow": "^6.1.1" + }, + "dependencies": { + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true + }, + "camelcase-keys": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz", + "integrity": "sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==", + "dev": true, + "requires": { + "camelcase": "^5.3.1", + "map-obj": "^4.0.0", + "quick-lru": "^4.0.1" + } + }, + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "dev": true + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "requires": { + "p-locate": "^4.1.0" + } + }, + "map-obj": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.1.0.tgz", + "integrity": "sha512-glc9y00wgtwcDmp7GaE/0b0OnxpNJsVf3ael/An6Fe2Q51LLwN1er6sdomLRzz5h0+yMpiYLhWYF5R7HeqVd4g==", + "dev": true + }, + "meow": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/meow/-/meow-6.1.1.tgz", + "integrity": "sha512-3YffViIt2QWgTy6Pale5QpopX/IvU3LPL03jOTqp6pGj3VjesdO/U8CuHMKpnQr4shCNCM5fd5XFFvIIl6JBHg==", + "dev": true, + "requires": { + "@types/minimist": "^1.2.0", + "camelcase-keys": "^6.2.2", + "decamelize-keys": "^1.1.0", + "hard-rejection": "^2.1.0", + "minimist-options": "^4.0.2", + "normalize-package-data": "^2.5.0", + "read-pkg-up": "^7.0.1", + "redent": "^3.0.0", + "trim-newlines": "^3.0.0", + "type-fest": "^0.13.1", + "yargs-parser": "^18.1.3" + } + }, + "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==", + "dev": true, + "requires": { + "p-limit": "^2.2.0" + } + }, + "parse-json": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.0.1.tgz", + "integrity": "sha512-ztoZ4/DYeXQq4E21v169sC8qWINGpcosGv9XhTDvg9/hWvx/zrFkc9BiWxR58OJLHGk28j5BL0SDLeV2WmFZlQ==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1", + "lines-and-columns": "^1.1.6" + } + }, + "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==", + "dev": true + }, + "read-pkg": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", + "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", + "dev": true, + "requires": { + "@types/normalize-package-data": "^2.4.0", + "normalize-package-data": "^2.5.0", + "parse-json": "^5.0.0", + "type-fest": "^0.6.0" + }, + "dependencies": { + "type-fest": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", + "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", + "dev": true + } + } + }, + "read-pkg-up": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", + "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", + "dev": true, + "requires": { + "find-up": "^4.1.0", + "read-pkg": "^5.2.0", + "type-fest": "^0.8.1" + }, + "dependencies": { + "type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "dev": true + } + } + }, + "redent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", + "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", + "dev": true, + "requires": { + "indent-string": "^4.0.0", + "strip-indent": "^3.0.0" + } + }, + "strip-indent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", + "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", + "dev": true, + "requires": { + "min-indent": "^1.0.0" + } + }, + "trim-newlines": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.0.tgz", + "integrity": "sha512-C4+gOpvmxaSMKuEf9Qc134F1ZuOHVXKRbtEflf4NTtuuJDEIJ9p5PXsalL8SkeRw+qit1Mo+yuvMPAKwWg/1hA==", + "dev": true + }, + "type-fest": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.13.1.tgz", + "integrity": "sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==", + "dev": true + }, + "yargs-parser": { + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "dev": true, + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + } + } + }, "create-ecdh": { "version": "4.0.4", "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz", @@ -4400,10 +5174,11 @@ } }, "create-react-class": { - "version": "15.7.0", - "resolved": "https://registry.npmjs.org/create-react-class/-/create-react-class-15.7.0.tgz", - "integrity": "sha512-QZv4sFWG9S5RUvkTYWbflxeZX+JG7Cz0Tn33rQBJ+WFQTqTfUTjMjiv9tnfXazjsO5r0KhPs+AqCjyrQX6h2ng==", + "version": "15.6.3", + "resolved": "https://registry.npmjs.org/create-react-class/-/create-react-class-15.6.3.tgz", + "integrity": "sha512-M+/3Q6E6DLO6Yx3OwrWjwHBnvfXXYA7W+dFjt/ZDBemHO1DDZhsalX/NUtnTYclN6GfnBDRh4qRHjcDHmlJBJg==", "requires": { + "fbjs": "^0.8.9", "loose-envify": "^1.3.1", "object-assign": "^4.1.1" } @@ -4439,6 +5214,26 @@ "randomfill": "^1.0.3" } }, + "css": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/css/-/css-2.2.4.tgz", + "integrity": "sha512-oUnjmWpy0niI3x/mPL8dVEI1l7MnG3+HHyRPHf+YFSbK+svOhXpmSOcDURUh2aOCgl2grzrOPt1nHLuCVFULLw==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "source-map": "^0.6.1", + "source-map-resolve": "^0.5.2", + "urix": "^0.1.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, "css-animation": { "version": "1.6.1", "resolved": "https://registry.npmjs.org/css-animation/-/css-animation-1.6.1.tgz", @@ -4455,34 +5250,6 @@ "dev": true, "requires": { "postcss": "^7.0.5" - }, - "dependencies": { - "postcss": { - "version": "7.0.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", - "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", - "dev": true, - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } } }, "css-color-keywords": { @@ -4504,34 +5271,6 @@ "requires": { "postcss": "^7.0.1", "timsort": "^0.3.0" - }, - "dependencies": { - "postcss": { - "version": "7.0.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", - "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", - "dev": true, - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } } }, "css-has-pseudo": { @@ -4550,63 +5289,51 @@ "integrity": "sha512-MsCAG1z9lPdoO/IUMLSBWBSVxVtJ1395VGIQ+Fc2gNdkQ1hNDnQdw3YhA71WJCBW1vdwA0cAnk/DnW6bqoEUYg==", "dev": true }, - "postcss": { - "version": "7.0.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", - "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", - "dev": true, - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "postcss-selector-parser": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz", - "integrity": "sha512-w+zLE5Jhg6Liz8+rQOWEAwtwkyqpfnmsinXjXg6cY7YIONZZtgvE0v2O0uhQBs0peNomOJwWRKt6JBfTdTd3OQ==", + "postcss-selector-parser": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz", + "integrity": "sha512-w+zLE5Jhg6Liz8+rQOWEAwtwkyqpfnmsinXjXg6cY7YIONZZtgvE0v2O0uhQBs0peNomOJwWRKt6JBfTdTd3OQ==", "dev": true, "requires": { "cssesc": "^2.0.0", "indexes-of": "^1.0.1", "uniq": "^1.0.1" } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } } } }, "css-loader": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-1.0.0.tgz", - "integrity": "sha512-tMXlTYf3mIMt3b0dDCOQFJiVvxbocJ5Ho577WiGPYPZcqVEO218L2iU22pDXzkTZCLDE+9AmGSUkWxeh/nZReA==", + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-3.4.2.tgz", + "integrity": "sha512-jYq4zdZT0oS0Iykt+fqnzVLRIeiPWhka+7BqPn+oSIpWJAHak5tmB/WZrJ2a21JhCeFyNnnlroSl8c+MtVndzA==", "dev": true, "requires": { - "babel-code-frame": "^6.26.0", - "css-selector-tokenizer": "^0.7.0", - "icss-utils": "^2.1.0", - "loader-utils": "^1.0.2", - "lodash.camelcase": "^4.3.0", - "postcss": "^6.0.23", - "postcss-modules-extract-imports": "^1.2.0", - "postcss-modules-local-by-default": "^1.2.0", - "postcss-modules-scope": "^1.1.0", - "postcss-modules-values": "^1.3.0", - "postcss-value-parser": "^3.3.0", - "source-list-map": "^2.0.0" + "camelcase": "^5.3.1", + "cssesc": "^3.0.0", + "icss-utils": "^4.1.1", + "loader-utils": "^1.2.3", + "normalize-path": "^3.0.0", + "postcss": "^7.0.23", + "postcss-modules-extract-imports": "^2.0.0", + "postcss-modules-local-by-default": "^3.0.2", + "postcss-modules-scope": "^2.1.1", + "postcss-modules-values": "^3.0.0", + "postcss-value-parser": "^4.0.2", + "schema-utils": "^2.6.0" + }, + "dependencies": { + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true + }, + "postcss-value-parser": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz", + "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==", + "dev": true + } } }, "css-prefers-color-scheme": { @@ -4616,34 +5343,6 @@ "dev": true, "requires": { "postcss": "^7.0.5" - }, - "dependencies": { - "postcss": { - "version": "7.0.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", - "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", - "dev": true, - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } } }, "css-select": { @@ -4664,16 +5363,6 @@ "integrity": "sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w==", "dev": true }, - "css-selector-tokenizer": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/css-selector-tokenizer/-/css-selector-tokenizer-0.7.3.tgz", - "integrity": "sha512-jWQv3oCEL5kMErj4wRnK/OPoBi0D+P1FR2cDCKYPaMeD2eW3/mttav8HT4hT1CKopiJI/psEULjkClhvJo4Lvg==", - "dev": true, - "requires": { - "cssesc": "^3.0.0", - "fastparse": "^1.1.2" - } - }, "css-to-react-native": { "version": "2.3.2", "resolved": "https://registry.npmjs.org/css-to-react-native/-/css-to-react-native-2.3.2.tgz", @@ -4703,9 +5392,9 @@ } }, "css-what": { - "version": "3.4.2", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-3.4.2.tgz", - "integrity": "sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-3.3.0.tgz", + "integrity": "sha512-pv9JPyatiPaQ6pf4OvD/dbfm0o5LviWmwxNWzblYf/1u9QZd0ihV+PMwy5jdQWQ3349kZmKEx9WXuSka2dM4cg==", "dev": true }, "cssdb": { @@ -4730,34 +5419,6 @@ "cssnano-preset-default": "^4.0.7", "is-resolvable": "^1.0.0", "postcss": "^7.0.0" - }, - "dependencies": { - "postcss": { - "version": "7.0.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", - "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", - "dev": true, - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } } }, "cssnano-preset-default": { @@ -4796,34 +5457,6 @@ "postcss-reduce-transforms": "^4.0.2", "postcss-svgo": "^4.0.2", "postcss-unique-selectors": "^4.0.1" - }, - "dependencies": { - "postcss": { - "version": "7.0.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", - "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", - "dev": true, - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } } }, "cssnano-util-get-arguments": { @@ -4845,34 +5478,6 @@ "dev": true, "requires": { "postcss": "^7.0.0" - }, - "dependencies": { - "postcss": { - "version": "7.0.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", - "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", - "dev": true, - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } } }, "cssnano-util-same-parent": { @@ -4882,28 +5487,28 @@ "dev": true }, "csso": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz", - "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/csso/-/csso-4.0.3.tgz", + "integrity": "sha512-NL3spysxUkcrOgnpsT4Xdl2aiEiBG6bXswAABQVHcMrfjjBisFOKwLDOmf4wf32aPdcJws1zds2B0Rg+jqMyHQ==", "dev": true, "requires": { - "css-tree": "^1.1.2" + "css-tree": "1.0.0-alpha.39" }, "dependencies": { "css-tree": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.2.tgz", - "integrity": "sha512-wCoWush5Aeo48GLhfHPbmvZs59Z+M7k5+B1xDnXbdWNcEF423DoFdqSWE0PM5aNk5nI5cp1q7ms36zGApY/sKQ==", + "version": "1.0.0-alpha.39", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.39.tgz", + "integrity": "sha512-7UvkEYgBAHRG9Nt980lYxjsTrCyHFN53ky3wVsDkiMdVqylqRt+Zc+jm5qw7/qyOvN2dHSYtX0e4MbCCExSvnA==", "dev": true, "requires": { - "mdn-data": "2.0.14", + "mdn-data": "2.0.6", "source-map": "^0.6.1" } }, "mdn-data": { - "version": "2.0.14", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", - "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==", + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.6.tgz", + "integrity": "sha512-rQvjv71olwNHgiTbfPZFkJtjNMciWgswYeciZhtvWLO8bmX3TnhyA62I6sTWOyZssWHJJjY6/KiWwqQsWWsqOA==", "dev": true }, "source-map": { @@ -4917,15 +5522,8 @@ "cssom": { "version": "0.3.8", "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", - "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==" - }, - "cssstyle": { - "version": "0.2.37", - "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-0.2.37.tgz", - "integrity": "sha1-VBCXI0yyUTyDzu06zdwn/yeYfVQ=", - "requires": { - "cssom": "0.3.x" - } + "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", + "dev": true }, "csstype": { "version": "3.0.5", @@ -4941,16 +5539,33 @@ "version": "0.4.1", "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=", + "dev": true, "requires": { "array-find-index": "^1.0.1" } }, + "cycle": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/cycle/-/cycle-1.0.3.tgz", + "integrity": "sha1-IegLK+hYD5i0aPN5QwZisEbDStI=", + "dev": true + }, "cyclist": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-1.0.1.tgz", "integrity": "sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk=", "dev": true }, + "d": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", + "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", + "dev": true, + "requires": { + "es5-ext": "^0.10.50", + "type": "^1.0.1" + } + }, "d3-array": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-1.2.4.tgz", @@ -4988,9 +5603,9 @@ } }, "d3-format": { - "version": "1.4.5", - "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-1.4.5.tgz", - "integrity": "sha512-J0piedu6Z8iB6TbIGfZgDzfXxUFN3qQRMofy2oPdXzQibYGqPB/9iMcxr/TGalU+2RsyDO+U4f33id8tbnSRMQ==" + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-1.4.4.tgz", + "integrity": "sha512-TWks25e7t8/cqctxCmxpUuzZN11QxIA7YrMbram94zMQ0PXjE4LVIMe/f6a4+xxL8HQ3OsAFULOINQi1pE62Aw==" }, "d3-interpolate": { "version": "1.4.0", @@ -5042,9 +5657,9 @@ "integrity": "sha512-Z3wpvhPLW4vEScGeIMUckDW7+3hWKOQfAWg/U7PlWBnQmeKQ00gCUsTtWSYulrKNA7ta8hJ+xXc6MHrMuITwEw==" }, "d3-time-format": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-2.3.0.tgz", - "integrity": "sha512-guv6b2H37s2Uq/GefleCDtbe0XZAuy7Wa49VGkPVPMfLL9qObgBST3lEHJBMUp8S7NdLQAGIvr2KXk8Hc98iKQ==", + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-2.2.3.tgz", + "integrity": "sha512-RAHNnD8+XvC4Zc4d2A56Uw0yJoM7bsvOlJR33bclxq399Rak/b9bhvu/InjxdWhPtkgU53JJcleJTGkNRnN6IA==", "requires": { "d3-time": "1" } @@ -5064,6 +5679,7 @@ "version": "1.14.1", "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "dev": true, "requires": { "assert-plus": "^1.0.0" } @@ -5080,9 +5696,9 @@ }, "dependencies": { "abab": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.5.tgz", - "integrity": "sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q==", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.4.tgz", + "integrity": "sha512-Eu9ELJWCz/c1e9gTiCY+FceWxcqzjYEbqMgtndnuSqZSUCOL73TWNK2mHfIj4Cw2E/ongOp+JISVNCmovt2KYQ==", "dev": true }, "tr46": { @@ -5107,15 +5723,15 @@ } } }, - "date-fns": { - "version": "1.30.1", - "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-1.30.1.tgz", - "integrity": "sha512-hBSVCvSmWC+QypYObzwGOd9wqdDpOt+0wl0KbU+R+uuZBS1jN8VsD1ss3irQDknRj5NvxiTF6oj/nDRnN/UQNw==" + "dayjs": { + "version": "1.8.35", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.8.35.tgz", + "integrity": "sha512-isAbIEenO4ilm6f8cpqvgjZCsuerDAz2Kb7ri201AiNn58aqXuaLJEnCtfIMdCvERZHNGRY5lDMTr/jdAnKSWQ==" }, "debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", "requires": { "ms": "^2.1.1" } @@ -5123,7 +5739,18 @@ "decamelize": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=" + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "dev": true + }, + "decamelize-keys": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.0.tgz", + "integrity": "sha1-0XGoeTMlKAfrPLYdwcFEXQeN8tk=", + "dev": true, + "requires": { + "decamelize": "^1.1.0", + "map-obj": "^1.0.0" + } }, "decimal.js": { "version": "10.2.0", @@ -5138,7 +5765,8 @@ "dedent": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", - "integrity": "sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw=" + "integrity": "sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw=", + "dev": true }, "deep-diff": { "version": "0.3.8", @@ -5162,7 +5790,8 @@ "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=" + "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", + "dev": true }, "deepmerge": { "version": "1.5.2", @@ -5170,45 +5799,13 @@ "integrity": "sha512-95k0GDqvBjZavkuvzx/YqVLv/6YYa17fz6ILMSf7neqQITCPbnfEnQvEgMPNjH4kgobe7+WIL0yJEHku+H3qtQ==" }, "default-gateway": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-2.7.2.tgz", - "integrity": "sha512-lAc4i9QJR0YHSDFdzeBQKfZ1SRDG3hsJNEkrpcZa8QhBfidLAilT60BDEIVUUGqosFp425KOgB3uYqcnQrWafQ==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-4.2.0.tgz", + "integrity": "sha512-h6sMrVB1VMWVrW13mSc6ia/DwYYw5MN6+exNu1OaJeFac5aSAvwM7lZ0NVfTABuSkQelr4h5oebg3KB1XPdjgA==", "dev": true, "requires": { - "execa": "^0.10.0", + "execa": "^1.0.0", "ip-regex": "^2.1.0" - }, - "dependencies": { - "execa": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-0.10.0.tgz", - "integrity": "sha512-7XOMnz8Ynx1gGo/3hyV9loYNPWM94jG3+3T3Y8tsfSstFmETmENCMU/A/zj8Lyaj1lkgEepKepvd6240tBRvlw==", - "dev": true, - "requires": { - "cross-spawn": "^6.0.0", - "get-stream": "^3.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" - } - }, - "get-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", - "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", - "dev": true - } - } - }, - "default-require-extensions": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/default-require-extensions/-/default-require-extensions-1.0.0.tgz", - "integrity": "sha1-836hXT4T/9m0N9M+GnW1+5eHTLg=", - "dev": true, - "requires": { - "strip-bom": "^2.0.0" } }, "define-properties": { @@ -5223,6 +5820,7 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "dev": true, "requires": { "is-descriptor": "^1.0.2", "isobject": "^3.0.1" @@ -5232,6 +5830,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, "requires": { "kind-of": "^6.0.0" } @@ -5240,6 +5839,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, "requires": { "kind-of": "^6.0.0" } @@ -5248,6 +5848,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, "requires": { "is-accessor-descriptor": "^1.0.0", "is-data-descriptor": "^1.0.0", @@ -5256,33 +5857,23 @@ } } }, - "del": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/del/-/del-3.0.0.tgz", - "integrity": "sha1-U+z2mf/LyzljdpGrE7rxYIGXZuU=", - "requires": { - "globby": "^6.1.0", - "is-path-cwd": "^1.0.0", - "is-path-in-cwd": "^1.0.0", - "p-map": "^1.1.1", - "pify": "^3.0.0", - "rimraf": "^2.2.8" - } - }, "delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", + "dev": true }, "delegates": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", - "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=" + "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=", + "dev": true }, "depd": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", + "dev": true }, "des.js": { "version": "1.0.1", @@ -5297,16 +5888,8 @@ "destroy": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", - "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" - }, - "detect-indent": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz", - "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=", - "dev": true, - "requires": { - "repeating": "^2.0.0" - } + "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=", + "dev": true }, "detect-newline": { "version": "2.1.0", @@ -5347,10 +5930,10 @@ } } }, - "diff": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", - "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", + "diff-sequences": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-24.9.0.tgz", + "integrity": "sha512-Dj6Wk3tWyTE+Fo1rW8v0Xhwk80um6yFYKbuAxc9c3EZxIHFDYwbi34Uk42u1CdnIiVorvt4RmlSDjIPyzGC2ew==", "dev": true }, "diffie-hellman": { @@ -5424,9 +6007,9 @@ } }, "doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "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" @@ -5445,14 +6028,6 @@ "resolved": "https://registry.npmjs.org/dom-align/-/dom-align-1.12.0.tgz", "integrity": "sha512-YkoezQuhp3SLFGdOlr5xkqZ640iXrnHAwVYcDg8ZKRUtO7mSzSC2BA5V0VuyAwPSJA4CLIc6EDDJh4bEsD2+zA==" }, - "dom-closest": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/dom-closest/-/dom-closest-0.2.0.tgz", - "integrity": "sha1-69n5HRvyLo1vR3h2u80+yQIWwM8=", - "requires": { - "dom-matches": ">=1.0.1" - } - }, "dom-converter": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz", @@ -5472,10 +6047,14 @@ "to-camel-case": "1.0.0" } }, - "dom-matches": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/dom-matches/-/dom-matches-2.0.0.tgz", - "integrity": "sha1-0nKLQWqHUzmA6wibhI0lPPI6dYw=" + "dom-helpers": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.2.0.tgz", + "integrity": "sha512-Ru5o9+V8CpunKnz5LGgWXkmrH/20cGKwcHwS4m73zIvs54CN9epEmT/HLqFJW3kXpakAFkEdzgy1hzlJe3E4OQ==", + "requires": { + "@babel/runtime": "^7.8.7", + "csstype": "^3.0.2" + } }, "dom-scroll-into-view": { "version": "1.2.1", @@ -5493,9 +6072,9 @@ }, "dependencies": { "domelementtype": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.1.0.tgz", - "integrity": "sha512-LsTgx/L5VpD+Q8lmsXSHW2WpA+eBlZ9HPf3erD1IoPF00/3JKHZ3BknUVA2QGDNu69ZNmyFmCWBSO45XjYKC5w==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.0.1.tgz", + "integrity": "sha512-5HOHUDsYZWV8FGWN0Njbr/Rn7f/eWSQi1v7+HsUVwXgn8nWWlL64zKDkS0n8ZmQ3mlWOMuXOnR+7Nx/5tMO5AQ==", "dev": true } } @@ -5540,10 +6119,20 @@ "domelementtype": "1" } }, + "dot-case": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.3.tgz", + "integrity": "sha512-7hwEmg6RiSQfm/GwPL4AAWXKy3YNNZA3oFv2Pdiey0mwkRCPZ9x6SZbkLcn8Ma5PYeVokzoD4Twv2n7LKp5WeA==", + "dev": true, + "requires": { + "no-case": "^3.0.3", + "tslib": "^1.10.0" + } + }, "dot-prop": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", - "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.2.0.tgz", + "integrity": "sha512-uEUyaDKoSQ1M4Oq8l45hSE26SnTxL6snNnqvK/VWx5wJhmff5z0FUVJDKDanor/6w3kzE3i7XZOk+7wC0EXr1A==", "dev": true, "requires": { "is-obj": "^2.0.0" @@ -5558,15 +6147,15 @@ } }, "dotenv": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-6.0.0.tgz", - "integrity": "sha512-FlWbnhgjtwD+uNLUGHbMykMOYQaTivdHEmYwAKFjn6GKe/CqY0fNae93ZHTd20snh9ZLr8mTzIL9m0APQ1pjQg==", + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.2.0.tgz", + "integrity": "sha512-8sJ78ElpbDJBHNeBzUbUVLsqKdccaa/BXF1uPTw3GrvQTBgrQrtObr2mUrE38vzYd8cEv+m/JBfDLioYcfXoaw==", "dev": true }, "dotenv-expand": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-4.2.0.tgz", - "integrity": "sha1-3vHxyl1gWdJKdm5YeULCEQbOEnU=", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-5.1.0.tgz", + "integrity": "sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==", "dev": true }, "draft-js": { @@ -5660,6 +6249,7 @@ "version": "0.1.2", "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", + "dev": true, "requires": { "jsbn": "~0.1.0", "safer-buffer": "^2.1.0" @@ -5668,19 +6258,15 @@ "ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", + "dev": true }, "electron-to-chromium": { - "version": "1.3.633", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.633.tgz", - "integrity": "sha512-bsVCsONiVX1abkWdH7KtpuDAhsQ3N3bjPYhROSAXE78roJKet0Y5wznA14JE9pzbwSZmSMAW6KiKYf1RvbTJkA==", + "version": "1.3.539", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.539.tgz", + "integrity": "sha512-rM0LWDIstdqfaRUADZetNrL6+zd/0NBmavbMEhBXgc2u/CC1d1GaDyN5hho29fFvBiOVFwrSWZkzmNcZnCEDog==", "dev": true }, - "elegant-spinner": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/elegant-spinner/-/elegant-spinner-1.0.1.tgz", - "integrity": "sha1-2wQ1IcldfjA/2PNFvtwzSc+wcp4=" - }, "elliptic": { "version": "6.5.3", "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.3.tgz", @@ -5715,7 +6301,8 @@ "emoji-regex": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==" + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true }, "emojis-list": { "version": "3.0.0", @@ -5726,83 +6313,35 @@ "encodeurl": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", + "dev": true }, "encoding": { - "version": "0.1.13", - "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", - "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", + "version": "0.1.12", + "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.12.tgz", + "integrity": "sha1-U4tm8+5izRq1HsMjgp0flIDHS+s=", "requires": { - "iconv-lite": "^0.6.2" + "iconv-lite": "~0.4.13" } }, "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==", + "dev": true, "requires": { "once": "^1.4.0" } }, - "engine.io-client": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-3.3.2.tgz", - "integrity": "sha512-y0CPINnhMvPuwtqXfsGuWE8BB66+B6wTtCofQDRecMQPYX3MYUZXFNKDhdrSe3EVjgOu4V3rxdeqN/Tr91IgbQ==", - "requires": { - "component-emitter": "1.2.1", - "component-inherit": "0.0.3", - "debug": "~3.1.0", - "engine.io-parser": "~2.1.1", - "has-cors": "1.1.0", - "indexof": "0.0.1", - "parseqs": "0.0.5", - "parseuri": "0.0.5", - "ws": "~6.1.0", - "xmlhttprequest-ssl": "~1.5.4", - "yeast": "0.1.2" - }, - "dependencies": { - "component-emitter": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", - "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=" - }, - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - } - } - }, - "engine.io-parser": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-2.1.3.tgz", - "integrity": "sha512-6HXPre2O4Houl7c4g7Ic/XzPnHBvaEmN90vtRO9uLmwtRqQmTOw0QMevL1TOfL2Cpu1VzsaTmMotQgMdkzGkVA==", - "requires": { - "after": "0.8.2", - "arraybuffer.slice": "~0.0.7", - "base64-arraybuffer": "0.1.5", - "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", - "integrity": "sha512-3e87LvavsdxyoCfGusJnrZ5G8SLPOFeHSNpZI/ATL9a5leXo2k0w6MKnbqhdBad9qTobSfB20Ld7UmgoNbAZkQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "memory-fs": "^0.5.0", - "tapable": "^1.0.0" + "enhanced-resolve": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.3.0.tgz", + "integrity": "sha512-3e87LvavsdxyoCfGusJnrZ5G8SLPOFeHSNpZI/ATL9a5leXo2k0w6MKnbqhdBad9qTobSfB20Ld7UmgoNbAZkQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "memory-fs": "^0.5.0", + "tapable": "^1.0.0" }, "dependencies": { "memory-fs": { @@ -5847,21 +6386,33 @@ } } }, - "enquire.js": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/enquire.js/-/enquire.js-2.1.6.tgz", - "integrity": "sha1-PoeAybi4NQhMP2DhZtvDwqPImBQ=" + "enquirer": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", + "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", + "dev": true, + "requires": { + "ansi-colors": "^4.1.1" + }, + "dependencies": { + "ansi-colors": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", + "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", + "dev": true + } + } }, "entities": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.1.0.tgz", - "integrity": "sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.0.3.tgz", + "integrity": "sha512-MyoZ0jgnLvB2X3Lg5HqpFmn1kybDiIfEQmKzTb5apr51Rb+T3KdmMiqa70T+bhGnyv7bQ6WMj2QMHpGMmlrUYQ==", "dev": true }, "errno": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", - "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz", + "integrity": "sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==", "dev": true, "requires": { "prr": "~1.0.1" @@ -5876,20 +6427,19 @@ } }, "es-abstract": { - "version": "1.18.0-next.1", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0-next.1.tgz", - "integrity": "sha512-I4UGspA0wpZXWENrdA0uHbnhte683t3qT/1VFH9aX2dA5PPSf6QW5HHXf5HImaqPmjXaVeVk4RGWnaylmV7uAA==", + "version": "1.17.6", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.6.tgz", + "integrity": "sha512-Fr89bON3WFyUi5EvAeI48QTWX0AyekGgLA8H+c+7fbfCkJwRWRMLd8CQedNEyJuoYYhmtEqY92pgte1FAhBlhw==", "requires": { "es-to-primitive": "^1.2.1", "function-bind": "^1.1.1", "has": "^1.0.3", "has-symbols": "^1.0.1", - "is-callable": "^1.2.2", - "is-negative-zero": "^2.0.0", - "is-regex": "^1.1.1", - "object-inspect": "^1.8.0", + "is-callable": "^1.2.0", + "is-regex": "^1.1.0", + "object-inspect": "^1.7.0", "object-keys": "^1.1.1", - "object.assign": "^4.1.1", + "object.assign": "^4.1.0", "string.prototype.trimend": "^1.0.1", "string.prototype.trimstart": "^1.0.1" } @@ -5904,21 +6454,54 @@ "is-symbol": "^1.0.2" } }, + "es5-ext": { + "version": "0.10.53", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.53.tgz", + "integrity": "sha512-Xs2Stw6NiNHWypzRTY1MtaG/uJlwCk8kH81920ma8mvN8Xq1gsfhZvpkImLQArw8AHnv8MT2I45J3c0R8slE+Q==", + "dev": true, + "requires": { + "es6-iterator": "~2.0.3", + "es6-symbol": "~3.1.3", + "next-tick": "~1.0.0" + } + }, "es6-error": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz", "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==" }, + "es6-iterator": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", + "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", + "dev": true, + "requires": { + "d": "1", + "es5-ext": "^0.10.35", + "es6-symbol": "^3.1.1" + } + }, + "es6-symbol": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", + "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", + "dev": true, + "requires": { + "d": "^1.0.1", + "ext": "^1.1.2" + } + }, "escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.0.2.tgz", + "integrity": "sha512-gPYAU37hYCUhW5euPeR+Y74F7BL+IBsV93j5cvGriSaD1aG6MGsqsV1yamRdrWrb2j3aiZvb0X+UBOWpx3JWtQ==", "dev": true }, "escape-html": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=", + "dev": true }, "escape-latex": { "version": "1.2.0", @@ -5934,6 +6517,7 @@ "version": "1.14.3", "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz", "integrity": "sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==", + "dev": true, "requires": { "esprima": "^4.0.1", "estraverse": "^4.2.0", @@ -5946,94 +6530,112 @@ "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, "optional": true } } }, "eslint": { - "version": "5.12.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-5.12.0.tgz", - "integrity": "sha512-LntwyPxtOHrsJdcSwyQKVtHofPHdv+4+mFwEe91r2V13vqpM8yLr7b1sW+Oo/yheOPkWYsYlYJCkzlFAt8KV7g==", + "version": "6.8.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-6.8.0.tgz", + "integrity": "sha512-K+Iayyo2LtyYhDSYwz5D5QdWw0hCacNzyq1Y821Xna2xSJj7cijoLLYmLxTQgcgZ9mC61nryMy9S7GRbYpI5Ig==", "dev": true, "requires": { "@babel/code-frame": "^7.0.0", - "ajv": "^6.5.3", + "ajv": "^6.10.0", "chalk": "^2.1.0", "cross-spawn": "^6.0.5", "debug": "^4.0.1", - "doctrine": "^2.1.0", - "eslint-scope": "^4.0.0", - "eslint-utils": "^1.3.1", - "eslint-visitor-keys": "^1.0.0", - "espree": "^5.0.0", + "doctrine": "^3.0.0", + "eslint-scope": "^5.0.0", + "eslint-utils": "^1.4.3", + "eslint-visitor-keys": "^1.1.0", + "espree": "^6.1.2", "esquery": "^1.0.1", "esutils": "^2.0.2", - "file-entry-cache": "^2.0.0", + "file-entry-cache": "^5.0.1", "functional-red-black-tree": "^1.0.1", - "glob": "^7.1.2", - "globals": "^11.7.0", + "glob-parent": "^5.0.0", + "globals": "^12.1.0", "ignore": "^4.0.6", "import-fresh": "^3.0.0", "imurmurhash": "^0.1.4", - "inquirer": "^6.1.0", - "js-yaml": "^3.12.0", + "inquirer": "^7.0.0", + "is-glob": "^4.0.0", + "js-yaml": "^3.13.1", "json-stable-stringify-without-jsonify": "^1.0.1", "levn": "^0.3.0", - "lodash": "^4.17.5", + "lodash": "^4.17.14", "minimatch": "^3.0.4", "mkdirp": "^0.5.1", "natural-compare": "^1.4.0", - "optionator": "^0.8.2", - "path-is-inside": "^1.0.2", - "pluralize": "^7.0.0", + "optionator": "^0.8.3", "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.0.2", - "text-table": "^0.2.0" + "semver": "^6.1.2", + "strip-ansi": "^5.2.0", + "strip-json-comments": "^3.0.1", + "table": "^5.2.3", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" }, "dependencies": { "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", "dev": true }, "debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "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.2" + "ms": "^2.1.1" } }, - "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==", + "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": { - "esrecurse": "^4.1.0", - "estraverse": "^4.1.1" + "eslint-visitor-keys": "^1.1.0" + } + }, + "glob-parent": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", + "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + }, + "globals": { + "version": "12.4.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz", + "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==", + "dev": true, + "requires": { + "type-fest": "^0.8.1" } }, "import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "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" } }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "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": { @@ -6042,24 +6644,30 @@ "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", "dev": true }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + }, "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "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": "^3.0.0" + "ansi-regex": "^4.1.0" } } } }, "eslint-config-react-app": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/eslint-config-react-app/-/eslint-config-react-app-3.0.8.tgz", - "integrity": "sha512-Ovi6Bva67OjXrom9Y/SLJRkrGqKhMAL0XCH8BizPhjEVEhYczl2ZKiNZI2CuqO5/CJwAfMwRXAVGY0KToWr1aA==", + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/eslint-config-react-app/-/eslint-config-react-app-5.2.1.tgz", + "integrity": "sha512-pGIZ8t0mFLcV+6ZirRgYK6RVqUIKRIi9MmgzUEmrIknsn3AdO0I32asO86dJgloHq+9ZPl8UIg8mYrvgP5u2wQ==", "dev": true, "requires": { - "confusing-browser-globals": "^1.0.6" + "confusing-browser-globals": "^1.0.9" } }, "eslint-import-resolver-node": { @@ -6090,16 +6698,16 @@ } }, "eslint-loader": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/eslint-loader/-/eslint-loader-2.1.1.tgz", - "integrity": "sha512-1GrJFfSevQdYpoDzx8mEE2TDWsb/zmFuY09l6hURg1AeFIKQOvZ+vH0UPjzmd1CZIbfTV5HUkMeBmFiDBkgIsQ==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/eslint-loader/-/eslint-loader-3.0.3.tgz", + "integrity": "sha512-+YRqB95PnNvxNp1HEjQmvf9KNvCin5HXYYseOXVC2U0KEcw4IkQ2IQEBG46j7+gW39bMzeu0GsUhVbBY3Votpw==", "dev": true, "requires": { - "loader-fs-cache": "^1.0.0", - "loader-utils": "^1.0.2", - "object-assign": "^4.0.1", - "object-hash": "^1.1.4", - "rimraf": "^2.6.1" + "fs-extra": "^8.1.0", + "loader-fs-cache": "^1.0.2", + "loader-utils": "^1.2.3", + "object-hash": "^2.0.1", + "schema-utils": "^2.6.1" } }, "eslint-module-utils": { @@ -6182,30 +6790,32 @@ } }, "eslint-plugin-flowtype": { - "version": "2.50.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-flowtype/-/eslint-plugin-flowtype-2.50.1.tgz", - "integrity": "sha512-9kRxF9hfM/O6WGZcZPszOVPd2W0TLHBtceulLTsGfwMPtiCCLnCW0ssRiOOiXyqrCA20pm1iXdXm7gQeN306zQ==", + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-flowtype/-/eslint-plugin-flowtype-4.6.0.tgz", + "integrity": "sha512-W5hLjpFfZyZsXfo5anlu7HM970JBDqbEshAJUkeczP6BFCIfJXuiIBQXyberLRtOStT0OGPF8efeTbxlHk4LpQ==", "dev": true, "requires": { - "lodash": "^4.17.10" + "lodash": "^4.17.15" } }, "eslint-plugin-import": { - "version": "2.14.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.14.0.tgz", - "integrity": "sha512-FpuRtniD/AY6sXByma2Wr0TXvXJ4nA/2/04VPlfpmUDPOpOY264x+ILiwnrk/k4RINgDAyFZByxqPUbSQ5YE7g==", + "version": "2.20.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.20.1.tgz", + "integrity": "sha512-qQHgFOTjguR+LnYRoToeZWT62XM55MBVXObHM6SKFd1VzDcX/vqT1kAz8ssqigh5eMj8qXcRoXXGZpPP6RfdCw==", "dev": true, "requires": { + "array-includes": "^3.0.3", + "array.prototype.flat": "^1.2.1", "contains-path": "^0.1.0", - "debug": "^2.6.8", + "debug": "^2.6.9", "doctrine": "1.5.0", - "eslint-import-resolver-node": "^0.3.1", - "eslint-module-utils": "^2.2.0", - "has": "^1.0.1", - "lodash": "^4.17.4", - "minimatch": "^3.0.3", + "eslint-import-resolver-node": "^0.3.2", + "eslint-module-utils": "^2.4.1", + "has": "^1.0.3", + "minimatch": "^3.0.4", + "object.values": "^1.1.0", "read-pkg-up": "^2.0.0", - "resolve": "^1.6.0" + "resolve": "^1.12.0" }, "dependencies": { "debug": { @@ -6342,48 +6952,69 @@ } }, "eslint-plugin-jsx-a11y": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.1.2.tgz", - "integrity": "sha512-7gSSmwb3A+fQwtw0arguwMdOdzmKUgnUcbSNlo+GjKLAQFuC2EZxWqG9XHRI8VscBJD5a8raz3RuxQNFW+XJbw==", + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.2.3.tgz", + "integrity": "sha512-CawzfGt9w83tyuVekn0GDPU9ytYtxyxyFZ3aSWROmnRRFQFT2BiPJd7jvRdzNDi6oLWaS2asMeYSNMjWTV4eNg==", "dev": true, "requires": { + "@babel/runtime": "^7.4.5", "aria-query": "^3.0.0", "array-includes": "^3.0.3", "ast-types-flow": "^0.0.7", - "axobject-query": "^2.0.1", + "axobject-query": "^2.0.2", "damerau-levenshtein": "^1.0.4", - "emoji-regex": "^6.5.1", + "emoji-regex": "^7.0.2", "has": "^1.0.3", - "jsx-ast-utils": "^2.0.1" - }, - "dependencies": { - "emoji-regex": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-6.5.1.tgz", - "integrity": "sha512-PAHp6TxrCy7MGMFidro8uikr+zlJJKJ/Q6mm2ExZ7HwkyR9lSVFfE3kt36qcwa24BQL7y0G9axycGjK1A/0uNQ==", - "dev": true - } + "jsx-ast-utils": "^2.2.1" } }, "eslint-plugin-react": { - "version": "7.12.4", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.12.4.tgz", - "integrity": "sha512-1puHJkXJY+oS1t467MjbqjvX53uQ05HXwjqDgdbGBqf5j9eeydI54G3KwiJmWciQ0HTBacIKw2jgwSBSH3yfgQ==", + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.19.0.tgz", + "integrity": "sha512-SPT8j72CGuAP+JFbT0sJHOB80TX/pu44gQ4vXH/cq+hQTiY2PuZ6IHkqXJV6x1b28GDdo1lbInjKUrrdUf0LOQ==", "dev": true, "requires": { - "array-includes": "^3.0.3", + "array-includes": "^3.1.1", "doctrine": "^2.1.0", "has": "^1.0.3", - "jsx-ast-utils": "^2.0.1", - "object.fromentries": "^2.0.0", - "prop-types": "^15.6.2", - "resolve": "^1.9.0" + "jsx-ast-utils": "^2.2.3", + "object.entries": "^1.1.1", + "object.fromentries": "^2.0.2", + "object.values": "^1.1.1", + "prop-types": "^15.7.2", + "resolve": "^1.15.1", + "semver": "^6.3.0", + "string.prototype.matchall": "^4.0.2", + "xregexp": "^4.3.0" + }, + "dependencies": { + "doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "requires": { + "esutils": "^2.0.2" + } + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } } }, + "eslint-plugin-react-hooks": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-1.7.0.tgz", + "integrity": "sha512-iXTCFcOmlWvw4+TOE8CLWj6yX1GwzT0Y6cUfHHZqWnSk144VmVIRcVGtUAzrLES7C798lmvnt02C7rxaOX1HNA==", + "dev": true + }, "eslint-scope": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-3.7.1.tgz", - "integrity": "sha1-PWPD7f2gLgbgGkUq2IyqzHzctug=", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.0.tgz", + "integrity": "sha512-iiGRvtxWqgtx5m8EyQUJihBloE4EnYeGE/bz1wSPwJE6tZuJUtHlhqDM4Xj2ukE8Dyy1+HCZ4hE0fzIVMzb58w==", "dev": true, "requires": { "esrecurse": "^4.1.0", @@ -6391,9 +7022,9 @@ } }, "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==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", + "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", "dev": true, "requires": { "eslint-visitor-keys": "^1.1.0" @@ -6406,20 +7037,20 @@ "dev": true }, "espree": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-5.0.1.tgz", - "integrity": "sha512-qWAZcWh4XE/RwzLJejfcofscgMc9CamR6Tn1+XRXNzrvUSSbiAjGOI/fggztjIi7y9VLPqnICMIPiGyr8JaZ0A==", + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-6.2.1.tgz", + "integrity": "sha512-ysCxRQY3WaXJz9tdbWOwuWr5Y/XrPTGX9Kiz3yoUXwW0VZ4w30HTkQLaGx/+ttFjF8i+ACbArnB4ce68a9m5hw==", "dev": true, "requires": { - "acorn": "^6.0.7", - "acorn-jsx": "^5.0.0", - "eslint-visitor-keys": "^1.0.0" + "acorn": "^7.1.1", + "acorn-jsx": "^5.2.0", + "eslint-visitor-keys": "^1.1.0" }, "dependencies": { "acorn": { - "version": "6.4.2", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.2.tgz", - "integrity": "sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==", + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.0.tgz", + "integrity": "sha512-+G7P8jJmCHr+S+cLfQxygbWhXy+8YTVGzAkpEbcLo2mLoL7tij/VG41QSHACSf5QgYRhMZYHuNc6drJaO0Da+w==", "dev": true } } @@ -6427,7 +7058,8 @@ "esprima": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true }, "esquery": { "version": "1.3.1", @@ -6447,46 +7079,37 @@ } }, "esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "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": "^5.2.0" - }, - "dependencies": { - "estraverse": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", - "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", - "dev": true - } + "estraverse": "^4.1.0" } }, "estraverse": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==" + "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==" + "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=" + "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", + "dev": true }, "eventemitter3": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", - "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==" - }, - "eventlistener": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/eventlistener/-/eventlistener-0.0.1.tgz", - "integrity": "sha1-7Suqu4UiJ68rz4iRUscsY8pTLrg=" + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.4.tgz", + "integrity": "sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ==", + "dev": true }, "events": { "version": "3.2.0", @@ -6514,18 +7137,16 @@ } }, "exec-sh": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/exec-sh/-/exec-sh-0.2.2.tgz", - "integrity": "sha512-FIUCJz1RbuS0FKTdaAafAByGS0CPvU3R0MeHxgtl+djzCc//F8HakL8GzmVNZanasTbTAY/3DRFA0KpVqj/eAw==", - "dev": true, - "requires": { - "merge": "^1.2.0" - } + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/exec-sh/-/exec-sh-0.3.4.tgz", + "integrity": "sha512-sEFIkc61v75sWeOe72qyrqg2Qg0OuLESziUDk/O/z2qgS15y2gWVFrI6f2Qn/qw/0/NCfCEsmNA4zOjkwEZT1A==", + "dev": true }, "execa": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", + "dev": true, "requires": { "cross-spawn": "^6.0.0", "get-stream": "^4.0.0", @@ -6551,6 +7172,7 @@ "version": "2.1.4", "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", + "dev": true, "requires": { "debug": "^2.3.3", "define-property": "^0.2.5", @@ -6565,6 +7187,7 @@ "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, "requires": { "ms": "2.0.0" } @@ -6573,6 +7196,7 @@ "version": "0.2.5", "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, "requires": { "is-descriptor": "^0.1.0" } @@ -6581,6 +7205,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, "requires": { "is-extendable": "^0.1.0" } @@ -6588,74 +7213,30 @@ "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - } - } - }, - "expand-range": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz", - "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=", - "requires": { - "fill-range": "^2.1.0" - }, - "dependencies": { - "fill-range": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.4.tgz", - "integrity": "sha512-cnrcCbj01+j2gTG921VZPnHbjmdAf8oQV/iGeV2kZxGSyfYjjTyY79ErsK1WJWMpw6DaApEX72binqJE+/d+5Q==", - "requires": { - "is-number": "^2.1.0", - "isobject": "^2.0.0", - "randomatic": "^3.0.0", - "repeat-element": "^1.1.2", - "repeat-string": "^1.5.2" - } - }, - "is-number": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz", - "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=", - "requires": { - "kind-of": "^3.0.2" - } - }, - "isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", - "requires": { - "isarray": "1.0.0" - } - }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "^1.1.5" - } + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true } } }, "expect": { - "version": "23.6.0", - "resolved": "https://registry.npmjs.org/expect/-/expect-23.6.0.tgz", - "integrity": "sha512-dgSoOHgmtn/aDGRVFWclQyPDKl2CQRq0hmIEoUAuQs/2rn2NcvCWcSCovm6BLeuB/7EZuLGu2QfnR+qRt5OM4w==", + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/expect/-/expect-24.9.0.tgz", + "integrity": "sha512-wvVAx8XIol3Z5m9zvZXiyZOQ+sRJqNTIm6sGjdWlaZIeupQGO3WbYI+15D/AmEwZywL6wtJkbAbJtzkOfBuR0Q==", "dev": true, "requires": { + "@jest/types": "^24.9.0", "ansi-styles": "^3.2.0", - "jest-diff": "^23.6.0", - "jest-get-type": "^22.1.0", - "jest-matcher-utils": "^23.6.0", - "jest-message-util": "^23.4.0", - "jest-regex-util": "^23.3.0" + "jest-get-type": "^24.9.0", + "jest-matcher-utils": "^24.9.0", + "jest-message-util": "^24.9.0", + "jest-regex-util": "^24.9.0" } }, "express": { "version": "4.17.1", "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==", + "dev": true, "requires": { "accepts": "~1.3.7", "array-flatten": "1.1.1", @@ -6693,6 +7274,7 @@ "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, "requires": { "ms": "2.0.0" } @@ -6700,29 +7282,51 @@ "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true }, "qs": { "version": "6.7.0", "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", - "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==" + "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==", + "dev": true }, "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==" + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + } + } + }, + "ext": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/ext/-/ext-1.4.0.tgz", + "integrity": "sha512-Key5NIsUxdqKg3vIsdw9dSuXpPCQ297y6wBjL30edxwPgt2E44WcWBZey/ZvUc6sERLTxKdyCu4gZFmUbk1Q7A==", + "dev": true, + "requires": { + "type": "^2.0.0" + }, + "dependencies": { + "type": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/type/-/type-2.0.0.tgz", + "integrity": "sha512-KBt58xCHry4Cejnc2ISQAF7QY+ORngsWfxezO68+12hKV6lQY8P/psIkcbjeHWn7MqcgciWJyCCevFMJdIXpow==", + "dev": true } } }, "extend": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "dev": true }, "extend-shallow": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dev": true, "requires": { "assign-symbols": "^1.0.0", "is-extendable": "^1.0.1" @@ -6732,6 +7336,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, "requires": { "is-plain-object": "^2.0.4" } @@ -6747,23 +7352,13 @@ "chardet": "^0.7.0", "iconv-lite": "^0.4.24", "tmp": "^0.0.33" - }, - "dependencies": { - "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dev": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - } } }, "extglob": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", + "dev": true, "requires": { "array-unique": "^0.3.2", "define-property": "^1.0.0", @@ -6779,6 +7374,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, "requires": { "is-descriptor": "^1.0.0" } @@ -6787,6 +7383,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, "requires": { "is-extendable": "^0.1.0" } @@ -6795,6 +7392,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, "requires": { "kind-of": "^6.0.0" } @@ -6803,6 +7401,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, "requires": { "kind-of": "^6.0.0" } @@ -6811,6 +7410,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, "requires": { "is-accessor-descriptor": "^1.0.0", "is-data-descriptor": "^1.0.0", @@ -6822,12 +7422,20 @@ "extsprintf": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" + "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", + "dev": true + }, + "eyes": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/eyes/-/eyes-0.1.8.tgz", + "integrity": "sha1-Ys8SAjTGg3hdkCNIqADvPgzCC8A=", + "dev": true }, "fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true }, "fast-glob": { "version": "2.2.7", @@ -6846,23 +7454,19 @@ "fast-json-stable-stringify": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "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=" - }, - "fastparse": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/fastparse/-/fastparse-1.1.2.tgz", - "integrity": "sha512-483XLLxTVIwWK3QTrMGRqUfUpoOs/0hbQrl2oz4J0pAcm3A3bu84wxTFqGqkJzewCLdME38xJLJAxBABfQT8sQ==", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", "dev": 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==", + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.10.0.tgz", + "integrity": "sha1-TkkvjQTftviQA1B/btvy1QHnxvQ=", "dev": true, "requires": { "websocket-driver": ">=0.5.1" @@ -6910,65 +7514,51 @@ "dev": true }, "figures": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz", - "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", + "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", + "dev": true, "requires": { - "escape-string-regexp": "^1.0.5", - "object-assign": "^4.1.0" + "escape-string-regexp": "^1.0.5" } }, "file-entry-cache": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-2.0.0.tgz", - "integrity": "sha1-w5KZDD5oR4PYOLjISkXYoEhFg2E=", + "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": "^1.2.1", - "object-assign": "^4.0.1" + "flat-cache": "^2.0.1" } }, "file-loader": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-2.0.0.tgz", - "integrity": "sha512-YCsBfd1ZGCyonOKLxPiKPdu+8ld9HAaMEvJewzz+b2eTF7uL5Zm/HdBF6FjCrpCMRq25Mi0U1gl4pwn2TlH7hQ==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-4.3.0.tgz", + "integrity": "sha512-aKrYPYjF1yG3oX0kWRrqrSMfgftm7oJW5M+m4owoldH5C51C0RkIwB++JbRvEW3IU6/ZG5n8UvEcdgwOt2UOWA==", "dev": true, "requires": { - "loader-utils": "^1.0.2", - "schema-utils": "^1.0.0" + "loader-utils": "^1.2.3", + "schema-utils": "^2.5.0" } }, "file-uri-to-path": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", - "optional": true - }, - "filename-regex": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz", - "integrity": "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=" - }, - "fileset": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/fileset/-/fileset-2.0.3.tgz", - "integrity": "sha1-jnVIqW08wjJ+5eZ0FocjozO7oqA=", "dev": true, - "requires": { - "glob": "^7.0.3", - "minimatch": "^3.0.3" - } + "optional": true }, "filesize": { - "version": "3.6.1", - "resolved": "https://registry.npmjs.org/filesize/-/filesize-3.6.1.tgz", - "integrity": "sha512-7KjR1vv6qnicaPMi1iiTcI85CyYwRO/PSFCu6SvqL8jN2Wjt/NIYQTFtFs7fSDCYOstUkEWIQGFUg5YZQfjlcg==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/filesize/-/filesize-6.0.1.tgz", + "integrity": "sha512-u4AYWPgbI5GBhs6id1KdImZWn5yfyFrrQ8OWZdN7ZMfA8Bf4HcO0BGo9bmUIEV8yrp8I1xVfJ/dn90GtFNNJcg==", "dev": true }, "fill-range": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, "requires": { "extend-shallow": "^2.0.1", "is-number": "^3.0.0", @@ -6980,6 +7570,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, "requires": { "is-extendable": "^0.1.0" } @@ -6990,6 +7581,7 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", + "dev": true, "requires": { "debug": "2.6.9", "encodeurl": "~1.0.2", @@ -7004,6 +7596,7 @@ "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, "requires": { "ms": "2.0.0" } @@ -7011,7 +7604,8 @@ "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true } } }, @@ -7030,25 +7624,39 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, "requires": { "locate-path": "^3.0.0" } }, + "find-versions": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/find-versions/-/find-versions-3.2.0.tgz", + "integrity": "sha512-P8WRou2S+oe222TOCHitLy8zj+SIsVJh52VP4lvXkaFVnOFFdoWv1H1Jjvel1aI6NCFOAaeAVm8qrI0odiLcww==", + "dev": true, + "requires": { + "semver-regex": "^2.0.0" + } + }, "flag-icon-css": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/flag-icon-css/-/flag-icon-css-3.3.0.tgz", "integrity": "sha512-u5lCGVExrJJRykNGd//ZrBU5Bkt0LTZJFSuG+Az/pwcHgzDeFwomwFbsgVtI1aJd6ysyHsx+5UGrA+nhSGd4yw==" }, + "flat": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==" + }, "flat-cache": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-1.3.4.tgz", - "integrity": "sha512-VwyB3Lkgacfik2vhqR4uv2rvebqmDvFu4jlN/C1RzWoJEo8I7z4Q404oiqYCkq41mni8EzQnm95emU9seckwtg==", + "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": { - "circular-json": "^0.3.1", - "graceful-fs": "^4.1.2", - "rimraf": "~2.6.2", - "write": "^0.2.1" + "flatted": "^2.0.0", + "rimraf": "2.6.3", + "write": "1.0.3" }, "dependencies": { "rimraf": { @@ -7062,6 +7670,12 @@ } } }, + "flatted": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz", + "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==", + "dev": true + }, "flatten": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/flatten/-/flatten-1.0.3.tgz", @@ -7110,25 +7724,22 @@ } } }, - "fn-name": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fn-name/-/fn-name-2.0.1.tgz", - "integrity": "sha1-UhTXU3pNBqSjAcDMJi/rhBiAAuc=" - }, "follow-redirects": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.13.1.tgz", - "integrity": "sha512-SSG5xmZh1mkPGyKzjZP8zLjltIfpW32Y5QpdNJyjcfGxK3qo3NDDkZOZSFiGn1A6SclQxY9GzEwAHQ3dmYRWpg==" + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.12.1.tgz", + "integrity": "sha512-tmRv0AVuR7ZyouUHLeNSiO6pqulF7dYa3s19c6t+wz9LD69/uSzdMxJ2S91nTI9U3rt/IldxpzMOFejp6f0hjg==" }, "for-in": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=" + "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", + "dev": true }, "for-own": { "version": "0.1.5", "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz", "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=", + "dev": true, "requires": { "for-in": "^1.0.1" } @@ -7136,27 +7747,131 @@ "forever-agent": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=" + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", + "dev": true }, "fork-ts-checker-webpack-plugin": { - "version": "1.0.0-alpha.6", - "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-1.0.0-alpha.6.tgz", - "integrity": "sha512-s/V+58nLrUjuXyzYk8AL11XG8bxIirTbafDLMn26sL59HQx8QvvsRTqOkhq4MV0coIkog1jZuH/E9Abm8zFZ2g==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-3.1.1.tgz", + "integrity": "sha512-DuVkPNrM12jR41KM2e+N+styka0EgLkTnXmNcXdgOM37vtGeY+oCBK/Jx0hzSeEU6memFCtWb4htrHPMDfwwUQ==", "dev": true, "requires": { "babel-code-frame": "^6.22.0", "chalk": "^2.4.1", - "chokidar": "^2.0.4", + "chokidar": "^3.3.0", "micromatch": "^3.1.10", "minimatch": "^3.0.4", "semver": "^5.6.0", - "tapable": "^1.0.0" + "tapable": "^1.0.0", + "worker-rpc": "^0.1.0" + }, + "dependencies": { + "anymatch": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz", + "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==", + "dev": true, + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "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==", + "dev": true + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "requires": { + "fill-range": "^7.0.1" + } + }, + "chokidar": { + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.4.2.tgz", + "integrity": "sha512-IZHaDeBeI+sZJRX7lGcXsdzgvZqKv6sECqsbErJA4mHWfpRrD8B97kSFN4cQz6nGBGiuFia1MKR4d6c1o8Cv7A==", + "dev": true, + "requires": { + "anymatch": "~3.1.1", + "braces": "~3.0.2", + "fsevents": "~2.1.2", + "glob-parent": "~5.1.0", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.4.0" + } + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "fsevents": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz", + "integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==", + "dev": true, + "optional": true + }, + "glob-parent": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", + "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + }, + "is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "requires": { + "binary-extensions": "^2.0.0" + } + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true + }, + "readdirp": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.4.0.tgz", + "integrity": "sha512-0xe001vZBnJEK+uKcj8qOhyAKPzIT+gStxWr3LCB0DwcXR5NZJ3IaC+yGnHCYzB/S7ov3m3EEbZI2zeNvX+hGQ==", + "dev": true, + "requires": { + "picomatch": "^2.2.1" + } + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "requires": { + "is-number": "^7.0.0" + } + } } }, "form-data": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "dev": true, "requires": { "asynckit": "^0.4.0", "combined-stream": "^1.0.6", @@ -7166,7 +7881,8 @@ "forwarded": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", - "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=" + "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=", + "dev": true }, "fraction.js": { "version": "4.0.12", @@ -7177,6 +7893,7 @@ "version": "0.2.1", "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", + "dev": true, "requires": { "map-cache": "^0.2.2" } @@ -7184,7 +7901,8 @@ "fresh": { "version": "0.5.2", "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", + "dev": true }, "from2": { "version": "2.3.0", @@ -7229,16 +7947,25 @@ } }, "fs-extra": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", - "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", "dev": true, "requires": { - "graceful-fs": "^4.1.2", + "graceful-fs": "^4.2.0", "jsonfile": "^4.0.0", "universalify": "^0.1.0" } }, + "fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "dev": true, + "requires": { + "minipass": "^3.0.0" + } + }, "fs-write-stream-atomic": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz", @@ -7292,6 +8019,7 @@ "version": "1.2.13", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", + "dev": true, "optional": true, "requires": { "bindings": "^1.5.0", @@ -7302,11 +8030,23 @@ "version": "1.0.12", "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.12.tgz", "integrity": "sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg==", + "dev": true, "requires": { "graceful-fs": "^4.1.2", "inherits": "~2.0.0", "mkdirp": ">=0.5 0", "rimraf": "2" + }, + "dependencies": { + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + } } }, "function-bind": { @@ -7315,14 +8055,13 @@ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" }, "function.prototype.name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.3.tgz", - "integrity": "sha512-H51qkbNSp8mtkJt+nyW1gyStBiKZxfRqySNUR99ylq6BPXHKI4SEvIlTKp4odLfjRKJV04DFWMU3G/YRlQOsag==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.2.tgz", + "integrity": "sha512-C8A+LlHBJjB2AdcRPorc5JvJ5VUoWlXdEHLOJdCI7kjHEtGTpHQUiqMvCIKUwIsGwZX2jZJy761AXsn356bJQg==", "requires": { - "call-bind": "^1.0.0", "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.1", - "functions-have-names": "^1.2.1" + "es-abstract": "^1.17.0-next.1", + "functions-have-names": "^1.2.0" } }, "functional-red-black-tree": { @@ -7332,24 +8071,15 @@ "dev": true }, "functions-have-names": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.2.tgz", - "integrity": "sha512-bLgc3asbWdwPbx2mNk2S49kmJCuQeu0nfmaOgbs8WIyzzkw3r4htszdIi9Q9EMezDPTYuJx2wvjZ/EwgAthpnA==" - }, - "g-status": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/g-status/-/g-status-2.0.2.tgz", - "integrity": "sha512-kQoE9qH+T1AHKgSSD0Hkv98bobE90ILQcXAF4wvGgsr7uFqNvwmh8j+Lq3l0RVt3E3HjSbv2B9biEGcEtpHLCA==", - "requires": { - "arrify": "^1.0.1", - "matcher": "^1.0.0", - "simple-git": "^1.85.0" - } + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.1.tgz", + "integrity": "sha512-j48B/ZI7VKs3sgeI2cZp7WXWmZXu7Iq5pl5/vptV5N2mq+DGFuS/ulaDjtaoLpYzuD6u8UgrUKHfgo7fDTSiBA==" }, "gauge": { "version": "2.7.4", "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", + "dev": true, "requires": { "aproba": "^1.0.3", "console-control-strings": "^1.0.0", @@ -7365,45 +8095,34 @@ "version": "1.1.3", "resolved": "https://registry.npmjs.org/gaze/-/gaze-1.1.3.tgz", "integrity": "sha512-BRdNm8hbWzFzWHERTrejLqwHDfS4GibPoq5wjTPIoJHoBtKGPg3xAFfxmM+9ztbXelxcf2hwQcaz1PtmFeue8g==", + "dev": true, "requires": { "globule": "^1.0.0" } }, "gensync": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "version": "1.0.0-beta.1", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.1.tgz", + "integrity": "sha512-r8EC6NO1sngH/zdD9fiRDLdcgnbayXah+mLgManTaIZJqEC1MZstmnox8KpnI2/fxQwrp5OpCOYWLp4rBl4Jcg==", "dev": true }, "get-caller-file": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" - }, - "get-intrinsic": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.0.2.tgz", - "integrity": "sha512-aeX0vrFm21ILl3+JpFFRNe9aUvp6VFZb2/CTbgLb8j75kOhvoNYjt9d8KA/tJG4gSo8nzEDedRl0h7vDmBYRVg==", - "requires": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1" - } + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true }, "get-own-enumerable-property-symbols": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz", - "integrity": "sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==" - }, - "get-stdin": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-6.0.0.tgz", - "integrity": "sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g==" + "integrity": "sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==", + "dev": true }, "get-stream": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "dev": true, "requires": { "pump": "^3.0.0" } @@ -7411,12 +8130,14 @@ "get-value": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", - "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=" + "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", + "dev": true }, "getpass": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "dev": true, "requires": { "assert-plus": "^1.0.0" } @@ -7434,42 +8155,11 @@ "path-is-absolute": "^1.0.0" } }, - "glob-base": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz", - "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=", - "requires": { - "glob-parent": "^2.0.0", - "is-glob": "^2.0.0" - }, - "dependencies": { - "glob-parent": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", - "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", - "requires": { - "is-glob": "^2.0.0" - } - }, - "is-extglob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", - "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=" - }, - "is-glob": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", - "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", - "requires": { - "is-extglob": "^1.0.0" - } - } - } - }, "glob-parent": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "dev": true, "requires": { "is-glob": "^3.1.0", "path-dirname": "^1.0.0" @@ -7479,6 +8169,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "dev": true, "requires": { "is-extglob": "^2.1.0" } @@ -7488,7 +8179,8 @@ "glob-to-regexp": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz", - "integrity": "sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs=" + "integrity": "sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs=", + "dev": true }, "global-cache": { "version": "1.2.1", @@ -7529,6 +8221,7 @@ "version": "6.1.0", "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=", + "dev": true, "requires": { "array-union": "^1.0.1", "glob": "^7.0.3", @@ -7540,7 +8233,8 @@ "pify": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=" + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true } } }, @@ -7548,6 +8242,7 @@ "version": "1.3.2", "resolved": "https://registry.npmjs.org/globule/-/globule-1.3.2.tgz", "integrity": "sha512-7IDTQTIu2xzXkT+6mlluidnWo+BypnbSoEVVQCGfzqnl5Ik8d3e1d4wycb8Rj9tWW+Z39uPWsdlquqiqPCd/pA==", + "dev": true, "requires": { "glob": "~7.1.1", "lodash": "~4.17.10", @@ -7565,67 +8260,52 @@ "integrity": "sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE=", "dev": true }, - "gud": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/gud/-/gud-1.0.0.tgz", - "integrity": "sha512-zGEOVKFM5sVPPrYs7J5/hYEw2Pof8KCyOwyhG8sAF26mCAeUFAcYPu1mwB7hhpIP29zOIBaDqwuHdLp0jvZXjw==" - }, "gzip-size": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-5.0.0.tgz", - "integrity": "sha512-5iI7omclyqrnWw4XbXAmGhPsABkSIDQonv2K0h61lybgofWa6iZyvrI3r2zsJH4P8Nb64fFVzlvfhs0g7BBxAA==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-5.1.1.tgz", + "integrity": "sha512-FNHi6mmoHvs1mxZAds4PpdCS6QG8B4C1krxJsMutgxl5t3+GlRTzzI3NEkifXx2pVsOvJdOGSmIgDhQ55FwdPA==", "dev": true, "requires": { "duplexer": "^0.1.1", - "pify": "^3.0.0" + "pify": "^4.0.1" + }, + "dependencies": { + "pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true + } } }, - "hammerjs": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/hammerjs/-/hammerjs-2.0.8.tgz", - "integrity": "sha1-BO93hiz/K7edMPdpIJWTAiK/YPE=" - }, "handle-thing": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==", "dev": true }, - "handlebars": { - "version": "4.7.6", - "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.6.tgz", - "integrity": "sha512-1f2BACcBfiwAfStCKZNrUCgqNZkGsAT7UM3kkYtXuLo0KnaVfjKOyf7PRzB6++aK9STyT1Pd2ZCPe3EGOXleXA==", - "dev": true, - "requires": { - "minimist": "^1.2.5", - "neo-async": "^2.6.0", - "source-map": "^0.6.1", - "uglify-js": "^3.1.4", - "wordwrap": "^1.0.0" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, "har-schema": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=" + "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", + "dev": true }, "har-validator": { - "version": "5.1.5", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", - "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz", + "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==", + "dev": true, "requires": { - "ajv": "^6.12.3", + "ajv": "^6.5.5", "har-schema": "^2.0.0" } }, + "hard-rejection": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz", + "integrity": "sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==", + "dev": true + }, "harmony-reflect": { "version": "1.6.1", "resolved": "https://registry.npmjs.org/harmony-reflect/-/harmony-reflect-1.6.1.tgz", @@ -7644,35 +8324,36 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "dev": true, "requires": { "ansi-regex": "^2.0.0" } }, - "has-binary2": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-binary2/-/has-binary2-1.0.3.tgz", - "integrity": "sha512-G1LWKhDSvhGeAQ8mPVQlqNcOB2sJdwATtZKl2pDKKHfpf/rYj24lkinxf69blJbnsvtqqNU+L3SL50vzZhXOnw==", + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "has-glob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-glob/-/has-glob-1.0.0.tgz", + "integrity": "sha1-mqqe7b/7G6OZCnsAEPtnjuAIEgc=", + "dev": true, "requires": { - "isarray": "2.0.1" + "is-glob": "^3.0.0" }, "dependencies": { - "isarray": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", - "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=" + "is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "dev": true, + "requires": { + "is-extglob": "^2.1.0" + } } } }, - "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": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" - }, "has-symbols": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", @@ -7681,12 +8362,14 @@ "has-unicode": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", - "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=" + "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=", + "dev": true }, "has-value": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", + "dev": true, "requires": { "get-value": "^2.0.6", "has-values": "^1.0.0", @@ -7697,6 +8380,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", + "dev": true, "requires": { "is-number": "^3.0.0", "kind-of": "^4.0.0" @@ -7706,6 +8390,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", + "dev": true, "requires": { "is-buffer": "^1.1.5" } @@ -7726,6 +8411,7 @@ "version": "1.1.7", "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", + "dev": true, "requires": { "inherits": "^2.0.3", "minimalistic-assert": "^1.0.1" @@ -7743,6 +8429,16 @@ "integrity": "sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ==", "dev": true }, + "highcharts": { + "version": "8.2.2", + "resolved": "https://registry.npmjs.org/highcharts/-/highcharts-8.2.2.tgz", + "integrity": "sha512-F63TXO7RxsvTcpO/KOubQZWualYpCMyCTuKtoWbt7KCsfQ3Kl7Fr6HEyyJdjkYl+XlnmnKlSRi9d3HjLK9Q0wg==" + }, + "highcharts-react-official": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/highcharts-react-official/-/highcharts-react-official-3.0.0.tgz", + "integrity": "sha512-VefJgDY2hkT9gfppsQGrRF2g5u8d9dtfHGcx2/xqiP+PkZXCqalw9xOeKVCRvJKTOh0coiDFwvVjOvB7KaGl4A==" + }, "history": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/history/-/history-3.3.0.tgz", @@ -7784,12 +8480,6 @@ "minimalistic-crypto-utils": "^1.0.1" } }, - "hoek": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/hoek/-/hoek-4.2.1.tgz", - "integrity": "sha512-QLg82fGkfnJ/4iy1xZ81/9SIJiq1NGFUMGs6ParyjBZr6jW2Ufj/snDqTHixNlHdPNwN2RLVD0Pi3igeK9+JfA==", - "dev": true - }, "hoist-non-react-statics": { "version": "3.3.2", "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", @@ -7798,22 +8488,6 @@ "react-is": "^16.7.0" } }, - "home-or-tmp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/home-or-tmp/-/home-or-tmp-2.0.0.tgz", - "integrity": "sha1-42w/LSyufXRqhX440Y1fMqeILbg=", - "dev": true, - "requires": { - "os-homedir": "^1.0.0", - "os-tmpdir": "^1.0.1" - } - }, - "hoopy": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/hoopy/-/hoopy-0.1.4.tgz", - "integrity": "sha512-HRcs+2mr52W0K+x8RzcLzuPPmVIKMSv97RGHy0Ea9y/mpcaK+xTrjICA04KAHi4GRzxliNqNJEFYWHghy3rSfQ==", - "dev": true - }, "hosted-git-info": { "version": "2.8.8", "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.8.tgz", @@ -7885,35 +8559,42 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-1.0.2.tgz", "integrity": "sha512-71lZziiDnsuabfdYiUeWdCVyKuqwWi23L8YeIgV9jSSZHCtb6wB1BKWooH7L3tn4/FuZJMVWyNaIDr4RGmaSYw==", + "dev": true, "requires": { "whatwg-encoding": "^1.0.1" } }, "html-entities": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-1.4.0.tgz", - "integrity": "sha512-8nxjcBcd8wovbeKx7h3wTji4e6+rhaVuPNpMqwWgnHh+N9ToqsCs6XztWRBPQ+UtzsoMAdKZtUENoVzU/EMtZA==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-1.3.1.tgz", + "integrity": "sha512-rhE/4Z3hIhzHAUKbW8jVcCyuT5oJCXXqhN/6mXXVCpzTmvJnoH2HL/bt3EZ6p55jbFJBeAe1ZNpL5BugLujxNA==", + "dev": true + }, + "html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", "dev": true }, - "html-minifier": { - "version": "3.5.21", - "resolved": "https://registry.npmjs.org/html-minifier/-/html-minifier-3.5.21.tgz", - "integrity": "sha512-LKUKwuJDhxNa3uf/LPR/KVjm/l3rBqtYeCOAekvG8F1vItxMUpueGd94i/asDDr8/1u7InxzFA5EeGjhhG5mMA==", + "html-minifier-terser": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-5.1.1.tgz", + "integrity": "sha512-ZPr5MNObqnV/T9akshPKbVgyOqLmy+Bxo7juKCfTfnjNniTAMdy4hz21YQqoofMBJD2kdREaqPPdThoR78Tgxg==", "dev": true, "requires": { - "camel-case": "3.0.x", - "clean-css": "4.2.x", - "commander": "2.17.x", - "he": "1.2.x", - "param-case": "2.1.x", - "relateurl": "0.2.x", - "uglify-js": "3.4.x" + "camel-case": "^4.1.1", + "clean-css": "^4.2.3", + "commander": "^4.1.1", + "he": "^1.2.0", + "param-case": "^3.0.3", + "relateurl": "^0.2.7", + "terser": "^4.6.3" }, "dependencies": { "commander": { - "version": "2.17.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz", - "integrity": "sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", "dev": true } } @@ -7924,17 +8605,16 @@ "integrity": "sha512-kggLXBNciKDwKf+KYsuE+V5gw4dZ7nHyGMX9m0wy7urzWjKGWyNFetmArRLvRV0VrxKN70WylFsJvMTJx02OBQ==" }, "html-webpack-plugin": { - "version": "4.0.0-alpha.2", - "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-4.0.0-alpha.2.tgz", - "integrity": "sha512-tyvhjVpuGqD7QYHi1l1drMQTg5i+qRxpQEGbdnYFREgOKy7aFDf/ocQ/V1fuEDlQx7jV2zMap3Hj2nE9i5eGXw==", + "version": "4.0.0-beta.11", + "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-4.0.0-beta.11.tgz", + "integrity": "sha512-4Xzepf0qWxf8CGg7/WQM5qBB2Lc/NFI7MhU59eUDTkuQp3skZczH4UA1d6oQyDEIoMDgERVhRyTdtUPZ5s5HBg==", "dev": true, "requires": { - "@types/tapable": "1.0.2", - "html-minifier": "^3.2.3", - "loader-utils": "^1.1.0", - "lodash": "^4.17.10", - "pretty-error": "^2.0.2", - "tapable": "^1.0.0", + "html-minifier-terser": "^5.0.1", + "loader-utils": "^1.2.3", + "lodash": "^4.17.15", + "pretty-error": "^2.1.1", + "tapable": "^1.1.3", "util.promisify": "1.0.0" }, "dependencies": { @@ -7982,6 +8662,7 @@ "version": "1.7.2", "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", + "dev": true, "requires": { "depd": "~1.1.2", "inherits": "2.0.3", @@ -7993,198 +8674,231 @@ "inherits": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true } } }, - "http-parser-js": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.2.tgz", - "integrity": "sha512-opCO9ASqg5Wy2FNo7A0sxy71yGbbkJJXLdgMK04Tcypw9jr2MgWbyubb0+WdmDmGnFflO7fRbqbaihh/ENDlRQ==", - "dev": true - }, "http-proxy": { "version": "1.18.1", "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", + "dev": true, "requires": { "eventemitter3": "^4.0.0", "follow-redirects": "^1.0.0", "requires-port": "^1.0.0" } }, - "http-proxy-middleware": { - "version": "0.17.4", - "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-0.17.4.tgz", - "integrity": "sha1-ZC6ISIUdZvCdTxJJEoRtuutBuDM=", + "http-signature": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", + "dev": true, "requires": { - "http-proxy": "^1.16.2", - "is-glob": "^3.1.0", - "lodash": "^4.17.2", - "micromatch": "^2.3.11" + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + } + }, + "https-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", + "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=", + "dev": true + }, + "human-signals": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", + "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", + "dev": true + }, + "husky": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/husky/-/husky-4.3.0.tgz", + "integrity": "sha512-tTMeLCLqSBqnflBZnlVDhpaIMucSGaYyX6855jM4AguGeWCeSzNdb1mfyWduTZ3pe3SJVvVWGL0jO1iKZVPfTA==", + "dev": true, + "requires": { + "chalk": "^4.0.0", + "ci-info": "^2.0.0", + "compare-versions": "^3.6.0", + "cosmiconfig": "^7.0.0", + "find-versions": "^3.2.0", + "opencollective-postinstall": "^2.0.2", + "pkg-dir": "^4.2.0", + "please-upgrade-node": "^3.2.0", + "slash": "^3.0.0", + "which-pm-runs": "^1.0.0" }, "dependencies": { - "arr-diff": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", - "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, "requires": { - "arr-flatten": "^1.0.1" + "color-convert": "^2.0.1" } }, - "array-unique": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", - "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=" - }, - "braces": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", - "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", + "chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "dev": true, "requires": { - "expand-range": "^1.8.1", - "preserve": "^0.2.0", - "repeat-element": "^1.1.2" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" } }, - "expand-brackets": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", - "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, "requires": { - "is-posix-bracket": "^0.1.0" + "color-name": "~1.1.4" } }, - "extglob": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", - "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "cosmiconfig": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.0.tgz", + "integrity": "sha512-pondGvTuVYDk++upghXJabWzL6Kxu6f26ljFw64Swq9v6sQPUL3EUlVDV56diOjpCayKihL6hVe8exIACU4XcA==", + "dev": true, "requires": { - "is-extglob": "^1.0.0" - }, - "dependencies": { - "is-extglob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", - "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=" - } + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.2.1", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.10.0" } }, - "is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, "requires": { - "is-extglob": "^2.1.0" + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" } }, - "kind-of": { + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "import-fresh": { "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.2.2.tgz", + "integrity": "sha512-cTPNrlvJT6twpYy+YmKUKrTSjWFs3bjYjAhCwm+z4EOCubZxAuO+hHpRN64TqjEaYSHs7tJAE0w1CKMGmsG/lw==", + "dev": true, "requires": { - "is-buffer": "^1.1.5" + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" } }, - "micromatch": { - "version": "2.3.11", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", - "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", - "requires": { - "arr-diff": "^2.0.0", - "array-unique": "^0.2.1", - "braces": "^1.8.2", - "expand-brackets": "^0.1.4", - "extglob": "^0.3.1", - "filename-regex": "^2.0.0", - "is-extglob": "^1.0.0", - "is-glob": "^2.0.1", - "kind-of": "^3.0.2", - "normalize-path": "^2.0.1", - "object.omit": "^2.0.0", - "parse-glob": "^3.0.4", - "regex-cache": "^0.4.2" - }, - "dependencies": { - "is-extglob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", - "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=" - }, - "is-glob": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", - "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", - "requires": { - "is-extglob": "^1.0.0" - } - } + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "requires": { + "p-locate": "^4.1.0" } }, - "normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "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==", + "dev": true, "requires": { - "remove-trailing-separator": "^1.0.1" + "p-limit": "^2.2.0" + } + }, + "parse-json": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.1.0.tgz", + "integrity": "sha512-+mi/lmVVNKFNVyLXV31ERiy2CY5E1/F6QtJFEzoChPRwwngMNXRDQ9GJ5WdE2Z2P4AujsOi0/+2qHID68KwfIQ==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + } + }, + "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==", + "dev": true + }, + "path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true + }, + "pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, + "requires": { + "find-up": "^4.0.0" + } + }, + "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 + }, + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" } } } }, - "http-signature": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", - "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", - "requires": { - "assert-plus": "^1.0.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" - } - }, - "https-browserify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", - "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=", + "i": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/i/-/i-0.3.6.tgz", + "integrity": "sha1-2WyScyB28HJxG2sQ/X1PZa2O4j0=", "dev": true }, - "husky": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/husky/-/husky-1.3.1.tgz", - "integrity": "sha512-86U6sVVVf4b5NYSZ0yvv88dRgBSSXXmHaiq5pP4KDj5JVzdwKgBjEtUPOm8hcoytezFwbU+7gotXNhpHdystlg==", - "requires": { - "cosmiconfig": "^5.0.7", - "execa": "^1.0.0", - "find-up": "^3.0.0", - "get-stdin": "^6.0.0", - "is-ci": "^2.0.0", - "pkg-dir": "^3.0.0", - "please-upgrade-node": "^3.1.1", - "read-pkg": "^4.0.1", - "run-node": "^1.0.0", - "slash": "^2.0.0" - } - }, "iconv-lite": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.2.tgz", - "integrity": "sha512-2y91h5OpQlolefMPmUlivelittSWy0rP+oYVpn6A7GwVHNE8AWzoYOBNmlwks3LobaJxgHCYZAnyNo2GgpNRNQ==", + "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.0.0" + "safer-buffer": ">= 2.1.2 < 3" } }, - "icss-replace-symbols": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz", - "integrity": "sha1-Bupvg2ead0njhs/h/oEq5dsiPe0=", - "dev": true - }, "icss-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-2.1.0.tgz", - "integrity": "sha1-g/Cg7DeL8yRheLbCrZE28TWxyWI=", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-4.1.1.tgz", + "integrity": "sha512-4aFq7wvWyMHKgxsH8QQtGpvbASCf+eM3wPRLI6R+MgAnTCZ6STYsRvttLvRWK0Nfif5piF394St3HeJDaljGPA==", "dev": true, "requires": { - "postcss": "^6.0.1" + "postcss": "^7.0.14" } }, "identity-obj-proxy": { @@ -8197,9 +8911,9 @@ } }, "ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==" + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", + "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==" }, "iferr": { "version": "0.1.5", @@ -8237,6 +8951,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz", "integrity": "sha1-2BNVwVYS04bGH53dOSLUMEgipUY=", + "dev": true, "requires": { "caller-path": "^2.0.0", "resolve-from": "^3.0.0" @@ -8252,67 +8967,13 @@ } }, "import-local": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-1.0.0.tgz", - "integrity": "sha512-vAaZHieK9qjGo58agRBg+bhHX3hoTZU/Oa3GESWLz7t1U62fk63aHuDJJEteXoDeTCcPmUT+z38gkHPZkkmpmQ==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-2.0.0.tgz", + "integrity": "sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ==", "dev": true, "requires": { - "pkg-dir": "^2.0.0", + "pkg-dir": "^3.0.0", "resolve-cwd": "^2.0.0" - }, - "dependencies": { - "find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", - "dev": true, - "requires": { - "locate-path": "^2.0.0" - } - }, - "locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", - "dev": true, - "requires": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" - } - }, - "p-limit": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", - "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", - "dev": true, - "requires": { - "p-try": "^1.0.0" - } - }, - "p-locate": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", - "dev": true, - "requires": { - "p-limit": "^1.1.0" - } - }, - "p-try": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", - "dev": true - }, - "pkg-dir": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz", - "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=", - "dev": true, - "requires": { - "find-up": "^2.1.0" - } - } } }, "imurmurhash": { @@ -8324,12 +8985,14 @@ "in-publish": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/in-publish/-/in-publish-2.0.1.tgz", - "integrity": "sha512-oDM0kUSNFC31ShNxHKUyfZKy8ZeXZBWMjMdZHKLOk13uvT27VTL/QzRGfRUcevJhpkZAvlhPYuXkF7eNWrtyxQ==" + "integrity": "sha512-oDM0kUSNFC31ShNxHKUyfZKy8ZeXZBWMjMdZHKLOk13uvT27VTL/QzRGfRUcevJhpkZAvlhPYuXkF7eNWrtyxQ==", + "dev": true }, "indent-string": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-3.2.0.tgz", - "integrity": "sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok=" + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "dev": true }, "indexes-of": { "version": "1.0.1", @@ -8337,10 +9000,11 @@ "integrity": "sha1-8w9xbI4r00bHtn0985FVZqfAVgc=", "dev": true }, - "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", + "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==", + "dev": true }, "inflight": { "version": "1.0.6", @@ -8357,101 +9021,204 @@ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, "ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", + "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", "dev": true }, "inquirer": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.5.2.tgz", - "integrity": "sha512-cntlB5ghuB0iuO65Ovoi8ogLHiWGs/5yNrtUcKjFhSSiVeAIVpD7koaSU9RM8mpXw5YDi9RdYXGQMaOURB7ycQ==", + "version": "7.3.3", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.3.3.tgz", + "integrity": "sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA==", "dev": true, "requires": { - "ansi-escapes": "^3.2.0", - "chalk": "^2.4.2", - "cli-cursor": "^2.1.0", - "cli-width": "^2.0.0", + "ansi-escapes": "^4.2.1", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-width": "^3.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", + "figures": "^3.0.0", + "lodash": "^4.17.19", + "mute-stream": "0.0.8", + "run-async": "^2.4.0", + "rxjs": "^6.6.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0", "through": "^2.3.6" }, "dependencies": { + "ansi-escapes": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.1.tgz", + "integrity": "sha512-JWF7ocqNrp8u9oqpgV+wH5ftbt+cfvv+PTjOvKLT3AdYly/LmORARfEVT1iyjwN+4MqE5UmVKoAdIBqeoCHgLA==", + "dev": true, + "requires": { + "type-fest": "^0.11.0" + } + }, "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true + }, + "ansi-styles": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", + "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", + "dev": true, + "requires": { + "@types/color-name": "^1.1.1", + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "dev": true, + "requires": { + "restore-cursor": "^3.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "dev": true }, "figures": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", - "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", + "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", "dev": true, "requires": { "escape-string-regexp": "^1.0.5" } }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "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==", + "dev": true + }, + "mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", "dev": true }, + "onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "requires": { + "mimic-fn": "^2.1.0" + } + }, + "restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "dev": true, + "requires": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + } + }, "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", + "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", "dev": true, "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - }, - "dependencies": { - "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" - } - } + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.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==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", "dev": true, "requires": { - "ansi-regex": "^4.1.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 - } + "ansi-regex": "^5.0.0" + } + }, + "supports-color": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", + "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" } + }, + "type-fest": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.11.0.tgz", + "integrity": "sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ==", + "dev": true } } }, + "insert-css": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/insert-css/-/insert-css-2.0.0.tgz", + "integrity": "sha1-610Ql7dUL0x56jBg067gfQU4gPQ=" + }, "internal-ip": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/internal-ip/-/internal-ip-3.0.1.tgz", - "integrity": "sha512-NXXgESC2nNVtU+pqmC9e6R8B1GpKxzsAQhffvh5AL79qKnodd+L7tnEQmTiUAVngqLalPbSqRA7XGIEL5nCd0Q==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/internal-ip/-/internal-ip-4.3.0.tgz", + "integrity": "sha512-S1zBo1D6zcsyuC6PMmY5+55YMILQ9av8lotMx447Bq6SAgo/sDK6y6uUKmuYhW7eacnIhFfsPmCNYdDzsnnDCg==", + "dev": true, + "requires": { + "default-gateway": "^4.2.0", + "ipaddr.js": "^1.9.0" + } + }, + "internal-slot": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.2.tgz", + "integrity": "sha512-2cQNfwhAfJIkU4KZPkDI+Gj5yNNnbqi40W9Gge6dfnk4TocEVm00B3bdiL+JINrbGJil2TeHvM4rETGzk/f/0g==", "dev": true, "requires": { - "default-gateway": "^2.6.0", - "ipaddr.js": "^1.5.2" + "es-abstract": "^1.17.0-next.1", + "has": "^1.0.3", + "side-channel": "^1.0.2" } }, "invariant": { @@ -8465,7 +9232,8 @@ "invert-kv": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", - "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=" + "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=", + "dev": true }, "ip": { "version": "1.1.5", @@ -8482,7 +9250,8 @@ "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==" + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "dev": true }, "is-absolute-url": { "version": "2.1.0", @@ -8494,6 +9263,7 @@ "version": "0.1.6", "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, "requires": { "kind-of": "^3.0.2" }, @@ -8502,6 +9272,7 @@ "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, "requires": { "is-buffer": "^1.1.5" } @@ -8509,13 +9280,10 @@ } }, "is-arguments": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.0.tgz", - "integrity": "sha512-1Ij4lOMPl/xB5kBDn7I+b2ttPMKa8szhEIrXDuXQD/oe3HJLTLhqhgGspwgyGd6MOywBUqVvYicF72lkgDnIHg==", - "dev": true, - "requires": { - "call-bind": "^1.0.0" - } + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.0.4.tgz", + "integrity": "sha512-xPh0Rmt8NE65sNzvyUmWgI1tz3mKq74lGA0mL8LYZcoIzKOzDh6HmrYm3d18k60nHerC8A9Km8kYu87zfSFnLA==", + "dev": true }, "is-arrayish": { "version": "0.2.1", @@ -8526,6 +9294,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", + "dev": true, "requires": { "binary-extensions": "^1.0.0" } @@ -8533,17 +9302,19 @@ "is-buffer": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "dev": true }, "is-callable": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.2.tgz", - "integrity": "sha512-dnMqspv5nU3LoewK2N/y7KLtxtakvTuaCsU9FU50/QDmdbHNy/4/JuRtMHqRU22o3q+W89YQndQEeCVwK+3qrA==" + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.0.tgz", + "integrity": "sha512-pyVD9AaGLxtg6srb2Ng6ynWJqkHU9bEM087AKck0w8QwDarTfNcpIYoU8x8Hv2Icm8u6kFJM18Dag8lyqGkviw==" }, "is-ci": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", + "dev": true, "requires": { "ci-info": "^2.0.0" } @@ -8562,18 +9333,11 @@ "rgba-regex": "^1.0.0" } }, - "is-core-module": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.2.0.tgz", - "integrity": "sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ==", - "requires": { - "has": "^1.0.3" - } - }, "is-data-descriptor": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, "requires": { "kind-of": "^3.0.2" }, @@ -8582,6 +9346,7 @@ "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, "requires": { "is-buffer": "^1.1.5" } @@ -8597,6 +9362,7 @@ "version": "0.1.6", "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, "requires": { "is-accessor-descriptor": "^0.1.6", "is-data-descriptor": "^0.1.4", @@ -8606,47 +9372,52 @@ "kind-of": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==" + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true } } }, "is-directory": { "version": "0.3.1", "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz", - "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=" + "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=", + "dev": true }, - "is-dotfile": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz", - "integrity": "sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=" + "is-docker": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.1.1.tgz", + "integrity": "sha512-ZOoqiXfEwtGknTiuDEy8pN2CfE3TxMHprvNer1mXiqwkOT77Rw3YVrUQ52EqAOU3QAWDQ+bQdx7HJzrv7LS2Hw==", + "dev": true }, - "is-equal-shallow": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz", - "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=", - "requires": { - "is-primitive": "^2.0.0" - } + "is-domain": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/is-domain/-/is-domain-0.0.1.tgz", + "integrity": "sha1-f/sojVzO1rB8Ty35HJvpFTURNI4=", + "dev": true }, "is-extendable": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=" + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true }, "is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true }, "is-finite": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.1.0.tgz", - "integrity": "sha512-cdyMtqX/BOqqNBBiKlIVkytNHm49MtMlYyn1zxzvJKWmFMlGzm+ry5BBfYyeY9YmNKbRSo/o7OX9w9ale0wg3w==" + "integrity": "sha512-cdyMtqX/BOqqNBBiKlIVkytNHm49MtMlYyn1zxzvJKWmFMlGzm+ry5BBfYyeY9YmNKbRSo/o7OX9w9ale0wg3w==", + "dev": true }, "is-fullwidth-code-point": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "dev": true, "requires": { "number-is-nan": "^1.0.0" } @@ -8657,28 +9428,25 @@ "integrity": "sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ==" }, "is-generator-fn": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-1.0.0.tgz", - "integrity": "sha1-lp1J4bszKfa7fwkIm+JleLLd1Go=", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", + "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", "dev": true }, "is-glob": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "dev": true, "requires": { "is-extglob": "^2.1.1" } }, - "is-negative-zero": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz", - "integrity": "sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==" - }, "is-number": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, "requires": { "kind-of": "^3.0.2" }, @@ -8687,6 +9455,7 @@ "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, "requires": { "is-buffer": "^1.1.5" } @@ -8696,36 +9465,14 @@ "is-obj": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", - "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=" + "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=", + "dev": true }, - "is-observable": { + "is-plain-obj": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-observable/-/is-observable-1.1.0.tgz", - "integrity": "sha512-NqCa4Sa2d+u7BWc6CukaObG3Fh+CU9bvixbpcXYhy2VvYS7vVGIdAgnIS5Ks3A/cqk4rebLJ9s8zBstT2aKnIA==", - "requires": { - "symbol-observable": "^1.1.0" - } - }, - "is-path-cwd": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz", - "integrity": "sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0=" - }, - "is-path-in-cwd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz", - "integrity": "sha512-FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ==", - "requires": { - "is-path-inside": "^1.0.0" - } - }, - "is-path-inside": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz", - "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=", - "requires": { - "path-is-inside": "^1.0.1" - } + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", + "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=", + "dev": true }, "is-plain-object": { "version": "2.0.4", @@ -8735,25 +9482,15 @@ "isobject": "^3.0.1" } }, - "is-posix-bracket": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz", - "integrity": "sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=" - }, - "is-primitive": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz", - "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=" - }, "is-promise": { "version": "2.2.2", "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.2.2.tgz", "integrity": "sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==" }, "is-regex": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.1.tgz", - "integrity": "sha512-1+QkEcxiLlB7VEyFtyBg94e08OAsvq7FUBgApTq/w2ymCLyKJgDPsybBENVtA7XCQEgEXxKPonG+mvYRxh/LIg==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.0.tgz", + "integrity": "sha512-iI97M8KTWID2la5uYXlkbSDQIg4F6o1sYboZKKTDpnDQMLtUL86zxhgDet3Q2SriaYsyGqZ6Mn2SjbRKeLHdqw==", "requires": { "has-symbols": "^1.0.1" } @@ -8761,7 +9498,8 @@ "is-regexp": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz", - "integrity": "sha1-/S2INUXEa6xaYz57mgnof6LLUGk=" + "integrity": "sha1-/S2INUXEa6xaYz57mgnof6LLUGk=", + "dev": true }, "is-resolvable": { "version": "1.1.0", @@ -8770,9 +9508,9 @@ "dev": true }, "is-root": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-root/-/is-root-2.0.0.tgz", - "integrity": "sha512-F/pJIk8QD6OX5DNhRB7hWamLsUilmkDGho48KbgZ6xg/lmAZXHxzXQ91jzB3yRSw5kdQGGGc4yz8HYhTYIMWPg==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-root/-/is-root-2.1.0.tgz", + "integrity": "sha512-AGOriNp96vNBd3HtU+RzFEc75FfR5ymiYv8E553I71SCeXBiMsVDUtdio1OEFvrPyLIQ9tVR5RxXIFe5PUFjMg==", "dev": true }, "is-stream": { @@ -8811,17 +9549,20 @@ "is-typedarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", + "dev": true }, "is-utf8": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", - "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=" + "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", + "dev": true }, "is-windows": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==" + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", + "dev": true }, "is-wsl": { "version": "1.1.0", @@ -8832,16 +9573,8 @@ "isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" - }, - "isemail": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/isemail/-/isemail-3.2.0.tgz", - "integrity": "sha512-zKqkK+O+dGqevc93KNsbZ/TqTUFd46MwWjYOoMrjIMZ51eU7DtQG3Wmd9SQQT7i7RVnuTPEiYEWHU3MSbxC1Tg==", - "dev": true, - "requires": { - "punycode": "2.x.x" - } + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true }, "isexe": { "version": "2.0.0", @@ -8865,2905 +9598,2425 @@ "isstream": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" - }, - "istanbul-api": { - "version": "1.3.7", - "resolved": "https://registry.npmjs.org/istanbul-api/-/istanbul-api-1.3.7.tgz", - "integrity": "sha512-4/ApBnMVeEPG3EkSzcw25wDe4N66wxwn+KKn6b47vyek8Xb3NBAcg4xfuQbS7BqcZuTX4wxfD5lVagdggR3gyA==", - "dev": true, - "requires": { - "async": "^2.1.4", - "fileset": "^2.0.2", - "istanbul-lib-coverage": "^1.2.1", - "istanbul-lib-hook": "^1.2.2", - "istanbul-lib-instrument": "^1.10.2", - "istanbul-lib-report": "^1.1.5", - "istanbul-lib-source-maps": "^1.2.6", - "istanbul-reports": "^1.5.1", - "js-yaml": "^3.7.0", - "mkdirp": "^0.5.1", - "once": "^1.4.0" - } + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", + "dev": true }, "istanbul-lib-coverage": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-1.2.1.tgz", - "integrity": "sha512-PzITeunAgyGbtY1ibVIUiV679EFChHjoMNRibEIobvmrCRaIgwLxNucOSimtNWUhEib/oO7QY2imD75JVgCJWQ==", + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.5.tgz", + "integrity": "sha512-8aXznuEPCJvGnMSRft4udDRDtb1V3pkQkMMI5LI+6HuQz5oQ4J2UFn1H82raA3qJtyOLkkwVqICBQkjnGtn5mA==", "dev": true }, - "istanbul-lib-hook": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/istanbul-lib-hook/-/istanbul-lib-hook-1.2.2.tgz", - "integrity": "sha512-/Jmq7Y1VeHnZEQ3TL10VHyb564mn6VrQXHchON9Jf/AEcmQ3ZIiyD1BVzNOKTZf/G3gE+kiGK6SmpF9y3qGPLw==", - "dev": true, - "requires": { - "append-transform": "^0.4.0" - } - }, "istanbul-lib-instrument": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-1.10.2.tgz", - "integrity": "sha512-aWHxfxDqvh/ZlxR8BBaEPVSWDPUkGD63VjGQn3jcw8jCp7sHEMKcrj4xfJn/ABzdMEHiQNyvDQhqm5o8+SQg7A==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-3.3.0.tgz", + "integrity": "sha512-5nnIN4vo5xQZHdXno/YDXJ0G+I3dAm4XgzfSVTPLQpj/zAV2dV6Juy0yaf10/zrJOJeHoN3fraFe+XRq2bFVZA==", "dev": true, "requires": { - "babel-generator": "^6.18.0", - "babel-template": "^6.16.0", - "babel-traverse": "^6.18.0", - "babel-types": "^6.18.0", - "babylon": "^6.18.0", - "istanbul-lib-coverage": "^1.2.1", - "semver": "^5.3.0" + "@babel/generator": "^7.4.0", + "@babel/parser": "^7.4.3", + "@babel/template": "^7.4.0", + "@babel/traverse": "^7.4.3", + "@babel/types": "^7.4.0", + "istanbul-lib-coverage": "^2.0.5", + "semver": "^6.0.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } } }, "istanbul-lib-report": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-1.1.5.tgz", - "integrity": "sha512-UsYfRMoi6QO/doUshYNqcKJqVmFe9w51GZz8BS3WB0lYxAllQYklka2wP9+dGZeHYaWIdcXUx8JGdbqaoXRXzw==", + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-2.0.8.tgz", + "integrity": "sha512-fHBeG573EIihhAblwgxrSenp0Dby6tJMFR/HvlerBsrCTD5bkUuoNtn3gVh29ZCS824cGGBPn7Sg7cNk+2xUsQ==", "dev": true, "requires": { - "istanbul-lib-coverage": "^1.2.1", - "mkdirp": "^0.5.1", - "path-parse": "^1.0.5", - "supports-color": "^3.1.2" + "istanbul-lib-coverage": "^2.0.5", + "make-dir": "^2.1.0", + "supports-color": "^6.1.0" }, "dependencies": { - "has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", - "dev": true - }, "supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", "dev": true, "requires": { - "has-flag": "^1.0.0" + "has-flag": "^3.0.0" } } } }, "istanbul-lib-source-maps": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-1.2.6.tgz", - "integrity": "sha512-TtbsY5GIHgbMsMiRw35YBHGpZ1DVFEO19vxxeiDMYaeOFOCzfnYVxvl6pOUIZR4dtPhAGpSMup8OyF8ubsaqEg==", - "dev": true, - "requires": { - "debug": "^3.1.0", - "istanbul-lib-coverage": "^1.2.1", - "mkdirp": "^0.5.1", - "rimraf": "^2.6.1", - "source-map": "^0.5.3" - } - }, - "istanbul-reports": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-1.5.1.tgz", - "integrity": "sha512-+cfoZ0UXzWjhAdzosCPP3AN8vvef8XDkWtTfgaN+7L3YTpNYITnCaEkceo5SEYy644VkHka/P1FvkWvrG/rrJw==", + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-3.0.6.tgz", + "integrity": "sha512-R47KzMtDJH6X4/YW9XTx+jrLnZnscW4VpNN+1PViSYTejLVPWv7oov+Duf8YQSPyVRUvueQqz1TcsC6mooZTXw==", "dev": true, "requires": { - "handlebars": "^4.0.3" - } - }, - "jalaali-js": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/jalaali-js/-/jalaali-js-1.1.5.tgz", - "integrity": "sha512-eS+zDRtz2JcGnVPWeng53rzlKU8tX2RWbJ1cqu1+eZHPEh1QL5ydB+pXD4RCf/zE3eKDN2bLQEjY0u/WIewMVQ==" - }, - "javascript-natural-sort": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/javascript-natural-sort/-/javascript-natural-sort-0.7.1.tgz", - "integrity": "sha1-+eIwPUUH9tdDVac2ZNFED7Wg71k=" - }, - "jest": { - "version": "23.6.0", - "resolved": "https://registry.npmjs.org/jest/-/jest-23.6.0.tgz", - "integrity": "sha512-lWzcd+HSiqeuxyhG+EnZds6iO3Y3ZEnMrfZq/OTGvF/C+Z4fPMCdhWTGSAiO2Oym9rbEXfwddHhh6jqrTF3+Lw==", - "dev": true, - "requires": { - "import-local": "^1.0.0", - "jest-cli": "^23.6.0" + "debug": "^4.1.1", + "istanbul-lib-coverage": "^2.0.5", + "make-dir": "^2.1.0", + "rimraf": "^2.6.3", + "source-map": "^0.6.1" }, "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true + "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" + } }, - "arr-diff": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", - "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", "dev": true, "requires": { - "arr-flatten": "^1.0.1" + "glob": "^7.1.3" } }, - "array-unique": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", - "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=", + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true - }, - "braces": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", - "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", + } + } + }, + "istanbul-reports": { + "version": "2.2.7", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-2.2.7.tgz", + "integrity": "sha512-uu1F/L1o5Y6LzPVSVZXNOoD/KXpJue9aeLRd0sM9uMXfZvzomB0WxVamWb5ue8kA2vVWEmW7EG+A5n3f1kqHKg==", + "dev": true, + "requires": { + "html-escaper": "^2.0.0" + } + }, + "jalaali-js": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/jalaali-js/-/jalaali-js-1.1.0.tgz", + "integrity": "sha512-eznOFGRtHb0ttHkHf8pVYPVfKJdbOqutTwcQYACbv91Q2NiYgnM5Z6+NN/8FMAhuMDAXAmeAG9+UBzqVKdA4cg==" + }, + "javascript-natural-sort": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/javascript-natural-sort/-/javascript-natural-sort-0.7.1.tgz", + "integrity": "sha1-+eIwPUUH9tdDVac2ZNFED7Wg71k=" + }, + "jest": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest/-/jest-24.9.0.tgz", + "integrity": "sha512-YvkBL1Zm7d2B1+h5fHEOdyjCG+sGMz4f8D86/0HiqJ6MB4MnDc8FgP5vdWsGnemOQro7lnYo8UakZ3+5A0jxGw==", + "dev": true, + "requires": { + "import-local": "^2.0.0", + "jest-cli": "^24.9.0" + }, + "dependencies": { + "jest-cli": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-24.9.0.tgz", + "integrity": "sha512-+VLRKyitT3BWoMeSUIHRxV/2g8y9gw91Jh5z2UmXZzkZKpbC08CSehVxgHUwTpy+HwGcns/tqafQDJW7imYvGg==", "dev": true, "requires": { - "expand-range": "^1.8.1", - "preserve": "^0.2.0", - "repeat-element": "^1.1.2" + "@jest/core": "^24.9.0", + "@jest/test-result": "^24.9.0", + "@jest/types": "^24.9.0", + "chalk": "^2.0.1", + "exit": "^0.1.2", + "import-local": "^2.0.0", + "is-ci": "^2.0.0", + "jest-config": "^24.9.0", + "jest-util": "^24.9.0", + "jest-validate": "^24.9.0", + "prompts": "^2.0.1", + "realpath-native": "^1.1.0", + "yargs": "^13.3.0" } - }, - "camelcase": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", - "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", + } + } + }, + "jest-changed-files": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-24.9.0.tgz", + "integrity": "sha512-6aTWpe2mHF0DhL28WjdkO8LyGjs3zItPET4bMSeXU6T3ub4FPMw+mcOcbdGXQOAfmLcxofD23/5Bl9Z4AkFwqg==", + "dev": true, + "requires": { + "@jest/types": "^24.9.0", + "execa": "^1.0.0", + "throat": "^4.0.0" + } + }, + "jest-config": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-24.9.0.tgz", + "integrity": "sha512-RATtQJtVYQrp7fvWg6f5y3pEFj9I+H8sWw4aKxnDZ96mob5i5SD6ZEGWgMLXQ4LE8UurrjbdlLWdUeo+28QpfQ==", + "dev": true, + "requires": { + "@babel/core": "^7.1.0", + "@jest/test-sequencer": "^24.9.0", + "@jest/types": "^24.9.0", + "babel-jest": "^24.9.0", + "chalk": "^2.0.1", + "glob": "^7.1.1", + "jest-environment-jsdom": "^24.9.0", + "jest-environment-node": "^24.9.0", + "jest-get-type": "^24.9.0", + "jest-jasmine2": "^24.9.0", + "jest-regex-util": "^24.3.0", + "jest-resolve": "^24.9.0", + "jest-util": "^24.9.0", + "jest-validate": "^24.9.0", + "micromatch": "^3.1.10", + "pretty-format": "^24.9.0", + "realpath-native": "^1.1.0" + } + }, + "jest-diff": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-24.9.0.tgz", + "integrity": "sha512-qMfrTs8AdJE2iqrTp0hzh7kTd2PQWrsFyj9tORoKmu32xjPjeE4NyjVRDz8ybYwqS2ik8N4hsIpiVTyFeo2lBQ==", + "dev": true, + "requires": { + "chalk": "^2.0.1", + "diff-sequences": "^24.9.0", + "jest-get-type": "^24.9.0", + "pretty-format": "^24.9.0" + } + }, + "jest-docblock": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-24.9.0.tgz", + "integrity": "sha512-F1DjdpDMJMA1cN6He0FNYNZlo3yYmOtRUnktrT9Q37njYzC5WEaDdmbynIgy0L/IvXvvgsG8OsqhLPXTpfmZAA==", + "dev": true, + "requires": { + "detect-newline": "^2.1.0" + } + }, + "jest-each": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-24.9.0.tgz", + "integrity": "sha512-ONi0R4BvW45cw8s2Lrx8YgbeXL1oCQ/wIDwmsM3CqM/nlblNCPmnC3IPQlMbRFZu3wKdQ2U8BqM6lh3LJ5Bsog==", + "dev": true, + "requires": { + "@jest/types": "^24.9.0", + "chalk": "^2.0.1", + "jest-get-type": "^24.9.0", + "jest-util": "^24.9.0", + "pretty-format": "^24.9.0" + } + }, + "jest-environment-jsdom": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-24.9.0.tgz", + "integrity": "sha512-Zv9FV9NBRzLuALXjvRijO2351DRQeLYXtpD4xNvfoVFw21IOKNhZAEUKcbiEtjTkm2GsJ3boMVgkaR7rN8qetA==", + "dev": true, + "requires": { + "@jest/environment": "^24.9.0", + "@jest/fake-timers": "^24.9.0", + "@jest/types": "^24.9.0", + "jest-mock": "^24.9.0", + "jest-util": "^24.9.0", + "jsdom": "^11.5.1" + }, + "dependencies": { + "abab": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.4.tgz", + "integrity": "sha512-Eu9ELJWCz/c1e9gTiCY+FceWxcqzjYEbqMgtndnuSqZSUCOL73TWNK2mHfIj4Cw2E/ongOp+JISVNCmovt2KYQ==", "dev": true }, - "ci-info": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-1.6.0.tgz", - "integrity": "sha512-vsGdkwSCDpWmP80ncATX7iea5DWQemg1UgCW5J8tqjU3lYw4FBYuj89J0CTVomA7BEfvSZd84GmHko+MxFQU2A==", + "acorn": { + "version": "5.7.4", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.4.tgz", + "integrity": "sha512-1D++VG7BhrtvQpNbBzovKNc1FLGGEE/oGe7b9xJm/RFHMBeUaUGpluV9RLjZa47YFdPcDAenEYuq9pQPcMdLJg==", "dev": true }, - "cliui": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz", - "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==", + "acorn-globals": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-4.3.4.tgz", + "integrity": "sha512-clfQEh21R+D0leSbUdWf3OcfqyaCSAQ8Ryq00bofSekfr9W8u1jyYZo6ir0xu9Gtcf7BjcHJpnbZH7JOCpP60A==", "dev": true, "requires": { - "string-width": "^2.1.1", - "strip-ansi": "^4.0.0", - "wrap-ansi": "^2.0.0" + "acorn": "^6.0.1", + "acorn-walk": "^6.0.1" + }, + "dependencies": { + "acorn": { + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.1.tgz", + "integrity": "sha512-ZVA9k326Nwrj3Cj9jlh3wGFutC2ZornPNARZwsNYqQYgN0EsV2d53w5RN/co65Ohn4sUAUtb1rSUAOD6XN9idA==", + "dev": true + } } }, - "expand-brackets": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", - "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", + "cssstyle": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-1.4.0.tgz", + "integrity": "sha512-GBrLZYZ4X4x6/QEoBnIrqb8B/f5l4+8me2dkom/j1Gtbxy0kBv6OGzKuAsGM75bkGwGAFkt56Iwg28S3XTZgSA==", "dev": true, "requires": { - "is-posix-bracket": "^0.1.0" + "cssom": "0.3.x" } }, - "extglob": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", - "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", + "jsdom": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-11.12.0.tgz", + "integrity": "sha512-y8Px43oyiBM13Zc1z780FrfNLJCXTL40EWlty/LXUtcjykRBNgLlCjWXpfSPBl2iv+N7koQN+dvqszHZgT/Fjw==", "dev": true, "requires": { - "is-extglob": "^1.0.0" + "abab": "^2.0.0", + "acorn": "^5.5.3", + "acorn-globals": "^4.1.0", + "array-equal": "^1.0.0", + "cssom": ">= 0.3.2 < 0.4.0", + "cssstyle": "^1.0.0", + "data-urls": "^1.0.0", + "domexception": "^1.0.1", + "escodegen": "^1.9.1", + "html-encoding-sniffer": "^1.0.2", + "left-pad": "^1.3.0", + "nwsapi": "^2.0.7", + "parse5": "4.0.0", + "pn": "^1.1.0", + "request": "^2.87.0", + "request-promise-native": "^1.0.5", + "sax": "^1.2.4", + "symbol-tree": "^3.2.2", + "tough-cookie": "^2.3.4", + "w3c-hr-time": "^1.0.1", + "webidl-conversions": "^4.0.2", + "whatwg-encoding": "^1.0.3", + "whatwg-mimetype": "^2.1.0", + "whatwg-url": "^6.4.1", + "ws": "^5.2.0", + "xml-name-validator": "^3.0.0" } }, - "find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "parse5": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-4.0.0.tgz", + "integrity": "sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA==", + "dev": true + }, + "tr46": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", + "integrity": "sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk=", "dev": true, "requires": { - "locate-path": "^2.0.0" + "punycode": "^2.1.0" } }, - "get-caller-file": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", - "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==", - "dev": true - }, - "invert-kv": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-2.0.0.tgz", - "integrity": "sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA==", - "dev": true + "whatwg-url": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-6.5.0.tgz", + "integrity": "sha512-rhRZRqx/TLJQWUpQ6bmrt2UV4f0HCQ463yQuONJqC6fO2VoEb1pTYddbe59SkYq87aoM5A3bdhMZiUiVws+fzQ==", + "dev": true, + "requires": { + "lodash.sortby": "^4.7.0", + "tr46": "^1.0.1", + "webidl-conversions": "^4.0.2" + } }, - "is-ci": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-1.2.1.tgz", - "integrity": "sha512-s6tfsaQaQi3JNciBH6shVqEDvhGut0SUXr31ag8Pd8BBbVVlcGfWhpPmEOoM6RJ5TFhbypvf5yyRw/VXW1IiWg==", + "ws": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/ws/-/ws-5.2.2.tgz", + "integrity": "sha512-jaHFD6PFv6UgoIVda6qZllptQsMlDEJkTQcybzzXDYM1XO9Y8em691FGMPmM46WGyLU4z9KMgQN+qrux/nhlHA==", "dev": true, "requires": { - "ci-info": "^1.5.0" + "async-limiter": "~1.0.0" } }, - "is-extglob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", - "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", + "xml-name-validator": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", + "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==", + "dev": true + } + } + }, + "jest-environment-jsdom-fourteen": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/jest-environment-jsdom-fourteen/-/jest-environment-jsdom-fourteen-1.0.1.tgz", + "integrity": "sha512-DojMX1sY+at5Ep+O9yME34CdidZnO3/zfPh8UW+918C5fIZET5vCjfkegixmsi7AtdYfkr4bPlIzmWnlvQkP7Q==", + "dev": true, + "requires": { + "@jest/environment": "^24.3.0", + "@jest/fake-timers": "^24.3.0", + "@jest/types": "^24.3.0", + "jest-mock": "^24.0.0", + "jest-util": "^24.0.0", + "jsdom": "^14.1.0" + }, + "dependencies": { + "abab": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.4.tgz", + "integrity": "sha512-Eu9ELJWCz/c1e9gTiCY+FceWxcqzjYEbqMgtndnuSqZSUCOL73TWNK2mHfIj4Cw2E/ongOp+JISVNCmovt2KYQ==", "dev": true }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "acorn": { + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.1.tgz", + "integrity": "sha512-ZVA9k326Nwrj3Cj9jlh3wGFutC2ZornPNARZwsNYqQYgN0EsV2d53w5RN/co65Ohn4sUAUtb1rSUAOD6XN9idA==", "dev": true }, - "is-glob": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", - "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "acorn-globals": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-4.3.4.tgz", + "integrity": "sha512-clfQEh21R+D0leSbUdWf3OcfqyaCSAQ8Ryq00bofSekfr9W8u1jyYZo6ir0xu9Gtcf7BjcHJpnbZH7JOCpP60A==", "dev": true, "requires": { - "is-extglob": "^1.0.0" + "acorn": "^6.0.1", + "acorn-walk": "^6.0.1" } }, - "jest-cli": { - "version": "23.6.0", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-23.6.0.tgz", - "integrity": "sha512-hgeD1zRUp1E1zsiyOXjEn4LzRLWdJBV//ukAHGlx6s5mfCNJTbhbHjgxnDUXA8fsKWN/HqFFF6X5XcCwC/IvYQ==", + "cssstyle": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-1.4.0.tgz", + "integrity": "sha512-GBrLZYZ4X4x6/QEoBnIrqb8B/f5l4+8me2dkom/j1Gtbxy0kBv6OGzKuAsGM75bkGwGAFkt56Iwg28S3XTZgSA==", "dev": true, "requires": { - "ansi-escapes": "^3.0.0", - "chalk": "^2.0.1", - "exit": "^0.1.2", - "glob": "^7.1.2", - "graceful-fs": "^4.1.11", - "import-local": "^1.0.0", - "is-ci": "^1.0.10", - "istanbul-api": "^1.3.1", - "istanbul-lib-coverage": "^1.2.0", - "istanbul-lib-instrument": "^1.10.1", - "istanbul-lib-source-maps": "^1.2.4", - "jest-changed-files": "^23.4.2", - "jest-config": "^23.6.0", - "jest-environment-jsdom": "^23.4.0", - "jest-get-type": "^22.1.0", - "jest-haste-map": "^23.6.0", - "jest-message-util": "^23.4.0", - "jest-regex-util": "^23.3.0", - "jest-resolve-dependencies": "^23.6.0", - "jest-runner": "^23.6.0", - "jest-runtime": "^23.6.0", - "jest-snapshot": "^23.6.0", - "jest-util": "^23.4.0", - "jest-validate": "^23.6.0", - "jest-watcher": "^23.4.0", - "jest-worker": "^23.2.0", - "micromatch": "^2.3.11", - "node-notifier": "^5.2.1", - "prompts": "^0.1.9", - "realpath-native": "^1.0.0", - "rimraf": "^2.5.4", - "slash": "^1.0.0", - "string-length": "^2.0.0", - "strip-ansi": "^4.0.0", - "which": "^1.2.12", - "yargs": "^11.0.0" + "cssom": "0.3.x" } }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "jsdom": { + "version": "14.1.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-14.1.0.tgz", + "integrity": "sha512-O901mfJSuTdwU2w3Sn+74T+RnDVP+FuV5fH8tcPWyqrseRAb0s5xOtPgCFiPOtLcyK7CLIJwPyD83ZqQWvA5ng==", "dev": true, "requires": { - "is-buffer": "^1.1.5" + "abab": "^2.0.0", + "acorn": "^6.0.4", + "acorn-globals": "^4.3.0", + "array-equal": "^1.0.0", + "cssom": "^0.3.4", + "cssstyle": "^1.1.1", + "data-urls": "^1.1.0", + "domexception": "^1.0.1", + "escodegen": "^1.11.0", + "html-encoding-sniffer": "^1.0.2", + "nwsapi": "^2.1.3", + "parse5": "5.1.0", + "pn": "^1.1.0", + "request": "^2.88.0", + "request-promise-native": "^1.0.5", + "saxes": "^3.1.9", + "symbol-tree": "^3.2.2", + "tough-cookie": "^2.5.0", + "w3c-hr-time": "^1.0.1", + "w3c-xmlserializer": "^1.1.2", + "webidl-conversions": "^4.0.2", + "whatwg-encoding": "^1.0.5", + "whatwg-mimetype": "^2.3.0", + "whatwg-url": "^7.0.0", + "ws": "^6.1.2", + "xml-name-validator": "^3.0.0" } }, - "lcid": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz", - "integrity": "sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==", + "parse5": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.0.tgz", + "integrity": "sha512-fxNG2sQjHvlVAYmzBZS9YlDp6PTSSDwa98vkD4QgVDDCAo84z5X1t5XyJQ62ImdLXx5NdIIfihey6xpum9/gRQ==", + "dev": true + }, + "tr46": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", + "integrity": "sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk=", "dev": true, "requires": { - "invert-kv": "^2.0.0" + "punycode": "^2.1.0" } }, - "locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", - "dev": true, - "requires": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" - } - }, - "micromatch": { - "version": "2.3.11", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", - "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", - "dev": true, - "requires": { - "arr-diff": "^2.0.0", - "array-unique": "^0.2.1", - "braces": "^1.8.2", - "expand-brackets": "^0.1.4", - "extglob": "^0.3.1", - "filename-regex": "^2.0.0", - "is-extglob": "^1.0.0", - "is-glob": "^2.0.1", - "kind-of": "^3.0.2", - "normalize-path": "^2.0.1", - "object.omit": "^2.0.0", - "parse-glob": "^3.0.4", - "regex-cache": "^0.4.2" - } - }, - "normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", - "dev": true, - "requires": { - "remove-trailing-separator": "^1.0.1" - } - }, - "os-locale": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-3.1.0.tgz", - "integrity": "sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q==", - "dev": true, - "requires": { - "execa": "^1.0.0", - "lcid": "^2.0.0", - "mem": "^4.0.0" - } - }, - "p-limit": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", - "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", - "dev": true, - "requires": { - "p-try": "^1.0.0" - } - }, - "p-locate": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", - "dev": true, - "requires": { - "p-limit": "^1.1.0" - } - }, - "p-try": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", - "dev": true - }, - "require-main-filename": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", - "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=", - "dev": true - }, - "slash": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", - "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=", - "dev": true - }, - "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "dev": true, - "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - } - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "requires": { - "ansi-regex": "^3.0.0" - } - }, - "wrap-ansi": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", - "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", + "whatwg-url": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz", + "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==", "dev": true, "requires": { - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1" - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "dev": true, - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "dev": true, - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - } + "lodash.sortby": "^4.7.0", + "tr46": "^1.0.1", + "webidl-conversions": "^4.0.2" } }, - "y18n": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", - "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=", + "xml-name-validator": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", + "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==", "dev": true - }, - "yargs": { - "version": "11.1.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-11.1.1.tgz", - "integrity": "sha512-PRU7gJrJaXv3q3yQZ/+/X6KBswZiaQ+zOmdprZcouPYtQgvNU35i+68M4b1ZHLZtYFT5QObFLV+ZkmJYcwKdiw==", - "dev": true, - "requires": { - "cliui": "^4.0.0", - "decamelize": "^1.1.1", - "find-up": "^2.1.0", - "get-caller-file": "^1.0.1", - "os-locale": "^3.1.0", - "require-directory": "^2.1.1", - "require-main-filename": "^1.0.1", - "set-blocking": "^2.0.0", - "string-width": "^2.0.0", - "which-module": "^2.0.0", - "y18n": "^3.2.1", - "yargs-parser": "^9.0.2" - } - }, - "yargs-parser": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-9.0.2.tgz", - "integrity": "sha1-nM9qQ0YP5O1Aqbto9I1DuKaMwHc=", - "dev": true, - "requires": { - "camelcase": "^4.1.0" - } } } }, - "jest-changed-files": { - "version": "23.4.2", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-23.4.2.tgz", - "integrity": "sha512-EyNhTAUWEfwnK0Is/09LxoqNDOn7mU7S3EHskG52djOFS/z+IT0jT3h3Ql61+dklcG7bJJitIWEMB4Sp1piHmA==", + "jest-environment-node": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-24.9.0.tgz", + "integrity": "sha512-6d4V2f4nxzIzwendo27Tr0aFm+IXWa0XEUnaH6nU0FMaozxovt+sfRvh4J47wL1OvF83I3SSTu0XK+i4Bqe7uA==", "dev": true, "requires": { - "throat": "^4.0.0" + "@jest/environment": "^24.9.0", + "@jest/fake-timers": "^24.9.0", + "@jest/types": "^24.9.0", + "jest-mock": "^24.9.0", + "jest-util": "^24.9.0" } }, - "jest-config": { - "version": "23.6.0", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-23.6.0.tgz", - "integrity": "sha512-i8V7z9BeDXab1+VNo78WM0AtWpBRXJLnkT+lyT+Slx/cbP5sZJ0+NDuLcmBE5hXAoK0aUp7vI+MOxR+R4d8SRQ==", + "jest-get-type": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-24.9.0.tgz", + "integrity": "sha512-lUseMzAley4LhIcpSP9Jf+fTrQ4a1yHQwLNeeVa2cEmbCGeoZAtYPOIv8JaxLD/sUpKxetKGP+gsHl8f8TSj8Q==", + "dev": true + }, + "jest-haste-map": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-24.9.0.tgz", + "integrity": "sha512-kfVFmsuWui2Sj1Rp1AJ4D9HqJwE4uwTlS/vO+eRUaMmd54BFpli2XhMQnPC2k4cHFVbB2Q2C+jtI1AGLgEnCjQ==", "dev": true, "requires": { - "babel-core": "^6.0.0", - "babel-jest": "^23.6.0", - "chalk": "^2.0.1", - "glob": "^7.1.1", - "jest-environment-jsdom": "^23.4.0", - "jest-environment-node": "^23.4.0", - "jest-get-type": "^22.1.0", - "jest-jasmine2": "^23.6.0", - "jest-regex-util": "^23.3.0", - "jest-resolve": "^23.6.0", - "jest-util": "^23.4.0", - "jest-validate": "^23.6.0", - "micromatch": "^2.3.11", - "pretty-format": "^23.6.0" - }, - "dependencies": { - "arr-diff": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", - "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", - "dev": true, - "requires": { - "arr-flatten": "^1.0.1" - } - }, - "array-unique": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", - "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=", - "dev": true - }, - "babel-core": { - "version": "6.26.3", - "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-6.26.3.tgz", - "integrity": "sha512-6jyFLuDmeidKmUEb3NM+/yawG0M2bDZ9Z1qbZP59cyHLz8kYGKYwpJP0UwUKKUiTRNvxfLesJnTedqczP7cTDA==", - "dev": true, - "requires": { - "babel-code-frame": "^6.26.0", - "babel-generator": "^6.26.0", - "babel-helpers": "^6.24.1", - "babel-messages": "^6.23.0", - "babel-register": "^6.26.0", - "babel-runtime": "^6.26.0", - "babel-template": "^6.26.0", - "babel-traverse": "^6.26.0", - "babel-types": "^6.26.0", - "babylon": "^6.18.0", - "convert-source-map": "^1.5.1", - "debug": "^2.6.9", - "json5": "^0.5.1", - "lodash": "^4.17.4", - "minimatch": "^3.0.4", - "path-is-absolute": "^1.0.1", - "private": "^0.1.8", - "slash": "^1.0.0", - "source-map": "^0.5.7" - } - }, - "braces": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", - "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", - "dev": true, - "requires": { - "expand-range": "^1.8.1", - "preserve": "^0.2.0", - "repeat-element": "^1.1.2" - } - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "expand-brackets": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", - "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", - "dev": true, - "requires": { - "is-posix-bracket": "^0.1.0" - } - }, - "extglob": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", - "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", - "dev": true, - "requires": { - "is-extglob": "^1.0.0" - } - }, - "is-extglob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", - "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", - "dev": true - }, - "is-glob": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", - "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", - "dev": true, - "requires": { - "is-extglob": "^1.0.0" - } - }, - "json5": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", - "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=", - "dev": true - }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - }, - "micromatch": { - "version": "2.3.11", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", - "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", - "dev": true, - "requires": { - "arr-diff": "^2.0.0", - "array-unique": "^0.2.1", - "braces": "^1.8.2", - "expand-brackets": "^0.1.4", - "extglob": "^0.3.1", - "filename-regex": "^2.0.0", - "is-extglob": "^1.0.0", - "is-glob": "^2.0.1", - "kind-of": "^3.0.2", - "normalize-path": "^2.0.1", - "object.omit": "^2.0.0", - "parse-glob": "^3.0.4", - "regex-cache": "^0.4.2" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", - "dev": true, - "requires": { - "remove-trailing-separator": "^1.0.1" - } - }, - "slash": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", - "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=", - "dev": true - } + "@jest/types": "^24.9.0", + "anymatch": "^2.0.0", + "fb-watchman": "^2.0.0", + "fsevents": "^1.2.7", + "graceful-fs": "^4.1.15", + "invariant": "^2.2.4", + "jest-serializer": "^24.9.0", + "jest-util": "^24.9.0", + "jest-worker": "^24.9.0", + "micromatch": "^3.1.10", + "sane": "^4.0.3", + "walker": "^1.0.7" } }, - "jest-diff": { - "version": "23.6.0", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-23.6.0.tgz", - "integrity": "sha512-Gz9l5Ov+X3aL5L37IT+8hoCUsof1CVYBb2QEkOupK64XyRR3h+uRpYIm97K7sY8diFxowR8pIGEdyfMKTixo3g==", + "jest-jasmine2": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-24.9.0.tgz", + "integrity": "sha512-Cq7vkAgaYKp+PsX+2/JbTarrk0DmNhsEtqBXNwUHkdlbrTBLtMJINADf2mf5FkowNsq8evbPc07/qFO0AdKTzw==", "dev": true, "requires": { + "@babel/traverse": "^7.1.0", + "@jest/environment": "^24.9.0", + "@jest/test-result": "^24.9.0", + "@jest/types": "^24.9.0", "chalk": "^2.0.1", - "diff": "^3.2.0", - "jest-get-type": "^22.1.0", - "pretty-format": "^23.6.0" + "co": "^4.6.0", + "expect": "^24.9.0", + "is-generator-fn": "^2.0.0", + "jest-each": "^24.9.0", + "jest-matcher-utils": "^24.9.0", + "jest-message-util": "^24.9.0", + "jest-runtime": "^24.9.0", + "jest-snapshot": "^24.9.0", + "jest-util": "^24.9.0", + "pretty-format": "^24.9.0", + "throat": "^4.0.0" } }, - "jest-docblock": { - "version": "23.2.0", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-23.2.0.tgz", - "integrity": "sha1-8IXh8YVI2Z/dabICB+b9VdkTg6c=", + "jest-leak-detector": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-24.9.0.tgz", + "integrity": "sha512-tYkFIDsiKTGwb2FG1w8hX9V0aUb2ot8zY/2nFg087dUageonw1zrLMP4W6zsRO59dPkTSKie+D4rhMuP9nRmrA==", "dev": true, "requires": { - "detect-newline": "^2.1.0" + "jest-get-type": "^24.9.0", + "pretty-format": "^24.9.0" } }, - "jest-each": { - "version": "23.6.0", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-23.6.0.tgz", - "integrity": "sha512-x7V6M/WGJo6/kLoissORuvLIeAoyo2YqLOoCDkohgJ4XOXSqOtyvr8FbInlAWS77ojBsZrafbozWoKVRdtxFCg==", + "jest-matcher-utils": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-24.9.0.tgz", + "integrity": "sha512-OZz2IXsu6eaiMAwe67c1T+5tUAtQyQx27/EMEkbFAGiw52tB9em+uGbzpcgYVpA8wl0hlxKPZxrly4CXU/GjHA==", "dev": true, "requires": { "chalk": "^2.0.1", - "pretty-format": "^23.6.0" + "jest-diff": "^24.9.0", + "jest-get-type": "^24.9.0", + "pretty-format": "^24.9.0" } }, - "jest-environment-jsdom": { - "version": "23.4.0", - "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-23.4.0.tgz", - "integrity": "sha1-BWp5UrP+pROsYqFAosNox52eYCM=", + "jest-message-util": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-24.9.0.tgz", + "integrity": "sha512-oCj8FiZ3U0hTP4aSui87P4L4jC37BtQwUMqk+zk/b11FR19BJDeZsZAvIHutWnmtw7r85UmR3CEWZ0HWU2mAlw==", "dev": true, "requires": { - "jest-mock": "^23.2.0", - "jest-util": "^23.4.0", - "jsdom": "^11.5.1" - }, - "dependencies": { - "abab": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.5.tgz", - "integrity": "sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q==", - "dev": true - }, - "acorn": { - "version": "5.7.4", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.4.tgz", - "integrity": "sha512-1D++VG7BhrtvQpNbBzovKNc1FLGGEE/oGe7b9xJm/RFHMBeUaUGpluV9RLjZa47YFdPcDAenEYuq9pQPcMdLJg==", - "dev": true - }, - "acorn-globals": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-4.3.4.tgz", - "integrity": "sha512-clfQEh21R+D0leSbUdWf3OcfqyaCSAQ8Ryq00bofSekfr9W8u1jyYZo6ir0xu9Gtcf7BjcHJpnbZH7JOCpP60A==", - "dev": true, - "requires": { - "acorn": "^6.0.1", - "acorn-walk": "^6.0.1" - }, - "dependencies": { - "acorn": { - "version": "6.4.2", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.2.tgz", - "integrity": "sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==", - "dev": true - } - } - }, - "cssstyle": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-1.4.0.tgz", - "integrity": "sha512-GBrLZYZ4X4x6/QEoBnIrqb8B/f5l4+8me2dkom/j1Gtbxy0kBv6OGzKuAsGM75bkGwGAFkt56Iwg28S3XTZgSA==", - "dev": true, - "requires": { - "cssom": "0.3.x" - } - }, - "jsdom": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-11.12.0.tgz", - "integrity": "sha512-y8Px43oyiBM13Zc1z780FrfNLJCXTL40EWlty/LXUtcjykRBNgLlCjWXpfSPBl2iv+N7koQN+dvqszHZgT/Fjw==", - "dev": true, - "requires": { - "abab": "^2.0.0", - "acorn": "^5.5.3", - "acorn-globals": "^4.1.0", - "array-equal": "^1.0.0", - "cssom": ">= 0.3.2 < 0.4.0", - "cssstyle": "^1.0.0", - "data-urls": "^1.0.0", - "domexception": "^1.0.1", - "escodegen": "^1.9.1", - "html-encoding-sniffer": "^1.0.2", - "left-pad": "^1.3.0", - "nwsapi": "^2.0.7", - "parse5": "4.0.0", - "pn": "^1.1.0", - "request": "^2.87.0", - "request-promise-native": "^1.0.5", - "sax": "^1.2.4", - "symbol-tree": "^3.2.2", - "tough-cookie": "^2.3.4", - "w3c-hr-time": "^1.0.1", - "webidl-conversions": "^4.0.2", - "whatwg-encoding": "^1.0.3", - "whatwg-mimetype": "^2.1.0", - "whatwg-url": "^6.4.1", - "ws": "^5.2.0", - "xml-name-validator": "^3.0.0" - } - }, - "parse5": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-4.0.0.tgz", - "integrity": "sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA==", - "dev": true - }, - "tr46": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", - "integrity": "sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk=", - "dev": true, - "requires": { - "punycode": "^2.1.0" - } - }, - "whatwg-url": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-6.5.0.tgz", - "integrity": "sha512-rhRZRqx/TLJQWUpQ6bmrt2UV4f0HCQ463yQuONJqC6fO2VoEb1pTYddbe59SkYq87aoM5A3bdhMZiUiVws+fzQ==", - "dev": true, - "requires": { - "lodash.sortby": "^4.7.0", - "tr46": "^1.0.1", - "webidl-conversions": "^4.0.2" - } - }, - "ws": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/ws/-/ws-5.2.2.tgz", - "integrity": "sha512-jaHFD6PFv6UgoIVda6qZllptQsMlDEJkTQcybzzXDYM1XO9Y8em691FGMPmM46WGyLU4z9KMgQN+qrux/nhlHA==", - "dev": true, - "requires": { - "async-limiter": "~1.0.0" - } - }, - "xml-name-validator": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", - "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==", - "dev": true - } + "@babel/code-frame": "^7.0.0", + "@jest/test-result": "^24.9.0", + "@jest/types": "^24.9.0", + "@types/stack-utils": "^1.0.1", + "chalk": "^2.0.1", + "micromatch": "^3.1.10", + "slash": "^2.0.0", + "stack-utils": "^1.0.1" } }, - "jest-environment-node": { - "version": "23.4.0", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-23.4.0.tgz", - "integrity": "sha1-V+gO0IQd6jAxZ8zozXlSHeuv3hA=", + "jest-mock": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-24.9.0.tgz", + "integrity": "sha512-3BEYN5WbSq9wd+SyLDES7AHnjH9A/ROBwmz7l2y+ol+NtSFO8DYiEBzoO1CeFc9a8DYy10EO4dDFVv/wN3zl1w==", "dev": true, "requires": { - "jest-mock": "^23.2.0", - "jest-util": "^23.4.0" + "@jest/types": "^24.9.0" } }, - "jest-get-type": { - "version": "22.4.3", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-22.4.3.tgz", - "integrity": "sha512-/jsz0Y+V29w1chdXVygEKSz2nBoHoYqNShPe+QgxSNjAuP1i8+k4LbQNrfoliKej0P45sivkSCh7yiD6ubHS3w==", + "jest-pnp-resolver": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz", + "integrity": "sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==", "dev": true }, - "jest-haste-map": { - "version": "23.6.0", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-23.6.0.tgz", - "integrity": "sha512-uyNhMyl6dr6HaXGHp8VF7cK6KpC6G9z9LiMNsst+rJIZ8l7wY0tk8qwjPmEghczojZ2/ZhtEdIabZ0OQRJSGGg==", + "jest-regex-util": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-24.9.0.tgz", + "integrity": "sha512-05Cmb6CuxaA+Ys6fjr3PhvV3bGQmO+2p2La4hFbU+W5uOc479f7FdLXUWXw4pYMAhhSZIuKHwSXSu6CsSBAXQA==", + "dev": true + }, + "jest-resolve": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-24.9.0.tgz", + "integrity": "sha512-TaLeLVL1l08YFZAt3zaPtjiVvyy4oSA6CRe+0AFPPVX3Q/VI0giIWWoAvoS5L96vj9Dqxj4fB5p2qrHCmTU/MQ==", "dev": true, "requires": { - "fb-watchman": "^2.0.0", - "graceful-fs": "^4.1.11", - "invariant": "^2.2.4", - "jest-docblock": "^23.2.0", - "jest-serializer": "^23.0.1", - "jest-worker": "^23.2.0", - "micromatch": "^2.3.11", - "sane": "^2.0.0" + "@jest/types": "^24.9.0", + "browser-resolve": "^1.11.3", + "chalk": "^2.0.1", + "jest-pnp-resolver": "^1.2.1", + "realpath-native": "^1.1.0" + } + }, + "jest-resolve-dependencies": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-24.9.0.tgz", + "integrity": "sha512-Fm7b6AlWnYhT0BXy4hXpactHIqER7erNgIsIozDXWl5dVm+k8XdGVe1oTg1JyaFnOxarMEbax3wyRJqGP2Pq+g==", + "dev": true, + "requires": { + "@jest/types": "^24.9.0", + "jest-regex-util": "^24.3.0", + "jest-snapshot": "^24.9.0" + } + }, + "jest-runner": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-24.9.0.tgz", + "integrity": "sha512-KksJQyI3/0mhcfspnxxEOBueGrd5E4vV7ADQLT9ESaCzz02WnbdbKWIf5Mkaucoaj7obQckYPVX6JJhgUcoWWg==", + "dev": true, + "requires": { + "@jest/console": "^24.7.1", + "@jest/environment": "^24.9.0", + "@jest/test-result": "^24.9.0", + "@jest/types": "^24.9.0", + "chalk": "^2.4.2", + "exit": "^0.1.2", + "graceful-fs": "^4.1.15", + "jest-config": "^24.9.0", + "jest-docblock": "^24.3.0", + "jest-haste-map": "^24.9.0", + "jest-jasmine2": "^24.9.0", + "jest-leak-detector": "^24.9.0", + "jest-message-util": "^24.9.0", + "jest-resolve": "^24.9.0", + "jest-runtime": "^24.9.0", + "jest-util": "^24.9.0", + "jest-worker": "^24.6.0", + "source-map-support": "^0.5.6", + "throat": "^4.0.0" + } + }, + "jest-runtime": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-24.9.0.tgz", + "integrity": "sha512-8oNqgnmF3v2J6PVRM2Jfuj8oX3syKmaynlDMMKQ4iyzbQzIG6th5ub/lM2bCMTmoTKM3ykcUYI2Pw9xwNtjMnw==", + "dev": true, + "requires": { + "@jest/console": "^24.7.1", + "@jest/environment": "^24.9.0", + "@jest/source-map": "^24.3.0", + "@jest/transform": "^24.9.0", + "@jest/types": "^24.9.0", + "@types/yargs": "^13.0.0", + "chalk": "^2.0.1", + "exit": "^0.1.2", + "glob": "^7.1.3", + "graceful-fs": "^4.1.15", + "jest-config": "^24.9.0", + "jest-haste-map": "^24.9.0", + "jest-message-util": "^24.9.0", + "jest-mock": "^24.9.0", + "jest-regex-util": "^24.3.0", + "jest-resolve": "^24.9.0", + "jest-snapshot": "^24.9.0", + "jest-util": "^24.9.0", + "jest-validate": "^24.9.0", + "realpath-native": "^1.1.0", + "slash": "^2.0.0", + "strip-bom": "^3.0.0", + "yargs": "^13.3.0" }, "dependencies": { - "arr-diff": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", - "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", - "dev": true, - "requires": { - "arr-flatten": "^1.0.1" - } - }, - "array-unique": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", - "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=", - "dev": true - }, - "braces": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", - "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", - "dev": true, - "requires": { - "expand-range": "^1.8.1", - "preserve": "^0.2.0", - "repeat-element": "^1.1.2" - } - }, - "expand-brackets": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", - "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", - "dev": true, - "requires": { - "is-posix-bracket": "^0.1.0" - } - }, - "extglob": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", - "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", - "dev": true, - "requires": { - "is-extglob": "^1.0.0" - } - }, - "is-extglob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", - "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", + "strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", "dev": true - }, - "is-glob": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", - "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", - "dev": true, - "requires": { - "is-extglob": "^1.0.0" - } - }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - }, - "micromatch": { - "version": "2.3.11", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", - "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", - "dev": true, - "requires": { - "arr-diff": "^2.0.0", - "array-unique": "^0.2.1", - "braces": "^1.8.2", - "expand-brackets": "^0.1.4", - "extglob": "^0.3.1", - "filename-regex": "^2.0.0", - "is-extglob": "^1.0.0", - "is-glob": "^2.0.1", - "kind-of": "^3.0.2", - "normalize-path": "^2.0.1", - "object.omit": "^2.0.0", - "parse-glob": "^3.0.4", - "regex-cache": "^0.4.2" - } - }, - "normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", - "dev": true, - "requires": { - "remove-trailing-separator": "^1.0.1" - } } } }, - "jest-jasmine2": { - "version": "23.6.0", - "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-23.6.0.tgz", - "integrity": "sha512-pe2Ytgs1nyCs8IvsEJRiRTPC0eVYd8L/dXJGU08GFuBwZ4sYH/lmFDdOL3ZmvJR8QKqV9MFuwlsAi/EWkFUbsQ==", + "jest-serializer": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-24.9.0.tgz", + "integrity": "sha512-DxYipDr8OvfrKH3Kel6NdED3OXxjvxXZ1uIY2I9OFbGg+vUkkg7AGvi65qbhbWNPvDckXmzMPbK3u3HaDO49bQ==", + "dev": true + }, + "jest-snapshot": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-24.9.0.tgz", + "integrity": "sha512-uI/rszGSs73xCM0l+up7O7a40o90cnrk429LOiK3aeTvfC0HHmldbd81/B7Ix81KSFe1lwkbl7GnBGG4UfuDew==", "dev": true, "requires": { - "babel-traverse": "^6.0.0", + "@babel/types": "^7.0.0", + "@jest/types": "^24.9.0", "chalk": "^2.0.1", - "co": "^4.6.0", - "expect": "^23.6.0", - "is-generator-fn": "^1.0.0", - "jest-diff": "^23.6.0", - "jest-each": "^23.6.0", - "jest-matcher-utils": "^23.6.0", - "jest-message-util": "^23.4.0", - "jest-snapshot": "^23.6.0", - "jest-util": "^23.4.0", - "pretty-format": "^23.6.0" + "expect": "^24.9.0", + "jest-diff": "^24.9.0", + "jest-get-type": "^24.9.0", + "jest-matcher-utils": "^24.9.0", + "jest-message-util": "^24.9.0", + "jest-resolve": "^24.9.0", + "mkdirp": "^0.5.1", + "natural-compare": "^1.4.0", + "pretty-format": "^24.9.0", + "semver": "^6.2.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } } }, - "jest-leak-detector": { - "version": "23.6.0", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-23.6.0.tgz", - "integrity": "sha512-f/8zA04rsl1Nzj10HIyEsXvYlMpMPcy0QkQilVZDFOaPbv2ur71X5u2+C4ZQJGyV/xvVXtCCZ3wQ99IgQxftCg==", + "jest-util": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-24.9.0.tgz", + "integrity": "sha512-x+cZU8VRmOJxbA1K5oDBdxQmdq0OIdADarLxk0Mq+3XS4jgvhG/oKGWcIDCtPG0HgjxOYvF+ilPJQsAyXfbNOg==", "dev": true, "requires": { - "pretty-format": "^23.6.0" + "@jest/console": "^24.9.0", + "@jest/fake-timers": "^24.9.0", + "@jest/source-map": "^24.9.0", + "@jest/test-result": "^24.9.0", + "@jest/types": "^24.9.0", + "callsites": "^3.0.0", + "chalk": "^2.0.1", + "graceful-fs": "^4.1.15", + "is-ci": "^2.0.0", + "mkdirp": "^0.5.1", + "slash": "^2.0.0", + "source-map": "^0.6.0" + }, + "dependencies": { + "callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } } }, - "jest-matcher-utils": { - "version": "23.6.0", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-23.6.0.tgz", - "integrity": "sha512-rosyCHQfBcol4NsckTn01cdelzWLU9Cq7aaigDf8VwwpIRvWE/9zLgX2bON+FkEW69/0UuYslUe22SOdEf2nog==", + "jest-validate": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-24.9.0.tgz", + "integrity": "sha512-HPIt6C5ACwiqSiwi+OfSSHbK8sG7akG8eATl+IPKaeIjtPOeBUd/g3J7DghugzxrGjI93qS/+RPKe1H6PqvhRQ==", "dev": true, "requires": { + "@jest/types": "^24.9.0", + "camelcase": "^5.3.1", "chalk": "^2.0.1", - "jest-get-type": "^22.1.0", - "pretty-format": "^23.6.0" + "jest-get-type": "^24.9.0", + "leven": "^3.1.0", + "pretty-format": "^24.9.0" + }, + "dependencies": { + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true + } } }, - "jest-message-util": { - "version": "23.4.0", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-23.4.0.tgz", - "integrity": "sha1-F2EMUJQjSVCNAaPR4L2iwHkIap8=", + "jest-watch-typeahead": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/jest-watch-typeahead/-/jest-watch-typeahead-0.4.2.tgz", + "integrity": "sha512-f7VpLebTdaXs81rg/oj4Vg/ObZy2QtGzAmGLNsqUS5G5KtSN68tFcIsbvNODfNyQxU78g7D8x77o3bgfBTR+2Q==", "dev": true, "requires": { - "@babel/code-frame": "^7.0.0-beta.35", - "chalk": "^2.0.1", - "micromatch": "^2.3.11", - "slash": "^1.0.0", - "stack-utils": "^1.0.1" + "ansi-escapes": "^4.2.1", + "chalk": "^2.4.1", + "jest-regex-util": "^24.9.0", + "jest-watcher": "^24.3.0", + "slash": "^3.0.0", + "string-length": "^3.1.0", + "strip-ansi": "^5.0.0" }, "dependencies": { - "arr-diff": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", - "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", + "ansi-escapes": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.1.tgz", + "integrity": "sha512-JWF7ocqNrp8u9oqpgV+wH5ftbt+cfvv+PTjOvKLT3AdYly/LmORARfEVT1iyjwN+4MqE5UmVKoAdIBqeoCHgLA==", "dev": true, "requires": { - "arr-flatten": "^1.0.1" + "type-fest": "^0.11.0" } }, - "array-unique": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", - "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=", + "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 }, - "braces": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", - "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", - "dev": true, - "requires": { - "expand-range": "^1.8.1", - "preserve": "^0.2.0", - "repeat-element": "^1.1.2" - } - }, - "expand-brackets": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", - "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", - "dev": true, - "requires": { - "is-posix-bracket": "^0.1.0" - } - }, - "extglob": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", - "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", - "dev": true, - "requires": { - "is-extglob": "^1.0.0" - } - }, - "is-extglob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", - "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", "dev": true }, - "is-glob": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", - "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "string-length": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-length/-/string-length-3.1.0.tgz", + "integrity": "sha512-Ttp5YvkGm5v9Ijagtaz1BnN+k9ObpvS0eIBblPMp2YWL8FBmi9qblQ9fexc2k/CXFgrTIteU3jAw3payCnwSTA==", "dev": true, "requires": { - "is-extglob": "^1.0.0" + "astral-regex": "^1.0.0", + "strip-ansi": "^5.2.0" } }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "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": { - "is-buffer": "^1.1.5" - } - }, - "micromatch": { - "version": "2.3.11", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", - "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", - "dev": true, - "requires": { - "arr-diff": "^2.0.0", - "array-unique": "^0.2.1", - "braces": "^1.8.2", - "expand-brackets": "^0.1.4", - "extglob": "^0.3.1", - "filename-regex": "^2.0.0", - "is-extglob": "^1.0.0", - "is-glob": "^2.0.1", - "kind-of": "^3.0.2", - "normalize-path": "^2.0.1", - "object.omit": "^2.0.0", - "parse-glob": "^3.0.4", - "regex-cache": "^0.4.2" + "ansi-regex": "^4.1.0" } }, - "normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "type-fest": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.11.0.tgz", + "integrity": "sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ==", + "dev": true + } + } + }, + "jest-watcher": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-24.9.0.tgz", + "integrity": "sha512-+/fLOfKPXXYJDYlks62/4R4GoT+GU1tYZed99JSCOsmzkkF7727RqKrjNAxtfO4YpGv11wybgRvCjR73lK2GZw==", + "dev": true, + "requires": { + "@jest/test-result": "^24.9.0", + "@jest/types": "^24.9.0", + "@types/yargs": "^13.0.0", + "ansi-escapes": "^3.0.0", + "chalk": "^2.0.1", + "jest-util": "^24.9.0", + "string-length": "^2.0.0" + } + }, + "jest-worker": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-24.9.0.tgz", + "integrity": "sha512-51PE4haMSXcHohnSMdM42anbvZANYTqMrr52tVKPqqsPJMzoP6FYYDVqahX/HrAoKEKz3uUPzSvKs9A3qR4iVw==", + "dev": true, + "requires": { + "merge-stream": "^2.0.0", + "supports-color": "^6.1.0" + }, + "dependencies": { + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", "dev": true, "requires": { - "remove-trailing-separator": "^1.0.1" + "has-flag": "^3.0.0" } - }, - "slash": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", - "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=", - "dev": true } } }, - "jest-mock": { - "version": "23.2.0", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-23.2.0.tgz", - "integrity": "sha1-rRxg8p6HGdR8JuETgJi20YsmETQ=", + "js-base64": { + "version": "2.6.4", + "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.6.4.tgz", + "integrity": "sha512-pZe//GGmwJndub7ZghVHz7vjb2LgC1m8B07Au3eYqeqv9emhESByMXxaEgkUkEqJe87oBbSniGYoQNIBklc7IQ==", "dev": true }, - "jest-pnp-resolver": { + "js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + }, + "js-yaml": { + "version": "3.14.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.0.tgz", + "integrity": "sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A==", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", + "dev": true + }, + "jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true + }, + "json-parse-better-errors": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.0.2.tgz", - "integrity": "sha512-H2DvUlwdMedNGv4FOliPDnxani6ATWy70xe2eckGJgkLoMaWzRPqpSlc5ShqX0Ltk5OhRQvPQY2LLZPOpgcc7g==", + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==" + }, + "json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", "dev": true }, - "jest-regex-util": { - "version": "23.3.0", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-23.3.0.tgz", - "integrity": "sha1-X4ZylUfCeFxAAs6qj4Sf6MpHG8U=", + "json-schema": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", + "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", "dev": true }, - "jest-resolve": { - "version": "23.6.0", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-23.6.0.tgz", - "integrity": "sha512-XyoRxNtO7YGpQDmtQCmZjum1MljDqUCob7XlZ6jy9gsMugHdN2hY4+Acz9Qvjz2mSsOnPSH7skBmDYCHXVZqkA==", + "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": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", + "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=", "dev": true, "requires": { - "browser-resolve": "^1.11.3", - "chalk": "^2.0.1", - "realpath-native": "^1.0.0" + "jsonify": "~0.0.0" } }, - "jest-resolve-dependencies": { - "version": "23.6.0", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-23.6.0.tgz", - "integrity": "sha512-EkQWkFWjGKwRtRyIwRwI6rtPAEyPWlUC2MpzHissYnzJeHcyCn1Hc8j7Nn1xUVrS5C6W5+ZL37XTem4D4pLZdA==", + "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 + }, + "json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" + }, + "json2mq": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/json2mq/-/json2mq-0.2.0.tgz", + "integrity": "sha1-tje9O6nqvhIsg+lyBIOusQ0skEo=", + "requires": { + "string-convert": "^0.2.0" + } + }, + "json3": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/json3/-/json3-3.3.3.tgz", + "integrity": "sha512-c7/8mbUsKigAbLkD5B010BK4D9LZm7A1pNItkEwiUZRpIN66exu/e7YQWysGun+TRKaJp8MhemM+VkfWv42aCA==", + "dev": true + }, + "json5": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.3.tgz", + "integrity": "sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA==", "dev": true, "requires": { - "jest-regex-util": "^23.3.0", - "jest-snapshot": "^23.6.0" + "minimist": "^1.2.5" } }, - "jest-runner": { - "version": "23.6.0", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-23.6.0.tgz", - "integrity": "sha512-kw0+uj710dzSJKU6ygri851CObtCD9cN8aNkg8jWJf4ewFyEa6kwmiH/r/M1Ec5IL/6VFa0wnAk6w+gzUtjJzA==", + "jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", "dev": true, "requires": { - "exit": "^0.1.2", - "graceful-fs": "^4.1.11", - "jest-config": "^23.6.0", - "jest-docblock": "^23.2.0", - "jest-haste-map": "^23.6.0", - "jest-jasmine2": "^23.6.0", - "jest-leak-detector": "^23.6.0", - "jest-message-util": "^23.4.0", - "jest-runtime": "^23.6.0", - "jest-util": "^23.4.0", - "jest-worker": "^23.2.0", - "source-map-support": "^0.5.6", - "throat": "^4.0.0" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "source-map-support": { - "version": "0.5.19", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", - "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", - "dev": true, - "requires": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - } + "graceful-fs": "^4.1.6" } }, - "jest-runtime": { - "version": "23.6.0", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-23.6.0.tgz", - "integrity": "sha512-ycnLTNPT2Gv+TRhnAYAQ0B3SryEXhhRj1kA6hBPSeZaNQkJ7GbZsxOLUkwg6YmvWGdX3BB3PYKFLDQCAE1zNOw==", + "jsonify": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", + "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=", + "dev": true + }, + "jsprim": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", + "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", "dev": true, "requires": { - "babel-core": "^6.0.0", - "babel-plugin-istanbul": "^4.1.6", - "chalk": "^2.0.1", - "convert-source-map": "^1.4.0", - "exit": "^0.1.2", - "fast-json-stable-stringify": "^2.0.0", - "graceful-fs": "^4.1.11", - "jest-config": "^23.6.0", - "jest-haste-map": "^23.6.0", - "jest-message-util": "^23.4.0", - "jest-regex-util": "^23.3.0", - "jest-resolve": "^23.6.0", - "jest-snapshot": "^23.6.0", - "jest-util": "^23.4.0", - "jest-validate": "^23.6.0", - "micromatch": "^2.3.11", - "realpath-native": "^1.0.0", - "slash": "^1.0.0", - "strip-bom": "3.0.0", - "write-file-atomic": "^2.1.0", - "yargs": "^11.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - }, - "arr-diff": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", - "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", - "dev": true, - "requires": { - "arr-flatten": "^1.0.1" - } - }, - "array-unique": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", - "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=", - "dev": true - }, - "babel-core": { - "version": "6.26.3", - "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-6.26.3.tgz", - "integrity": "sha512-6jyFLuDmeidKmUEb3NM+/yawG0M2bDZ9Z1qbZP59cyHLz8kYGKYwpJP0UwUKKUiTRNvxfLesJnTedqczP7cTDA==", - "dev": true, - "requires": { - "babel-code-frame": "^6.26.0", - "babel-generator": "^6.26.0", - "babel-helpers": "^6.24.1", - "babel-messages": "^6.23.0", - "babel-register": "^6.26.0", - "babel-runtime": "^6.26.0", - "babel-template": "^6.26.0", - "babel-traverse": "^6.26.0", - "babel-types": "^6.26.0", - "babylon": "^6.18.0", - "convert-source-map": "^1.5.1", - "debug": "^2.6.9", - "json5": "^0.5.1", - "lodash": "^4.17.4", - "minimatch": "^3.0.4", - "path-is-absolute": "^1.0.1", - "private": "^0.1.8", - "slash": "^1.0.0", - "source-map": "^0.5.7" - } - }, - "braces": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", - "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", - "dev": true, - "requires": { - "expand-range": "^1.8.1", - "preserve": "^0.2.0", - "repeat-element": "^1.1.2" - } - }, - "camelcase": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", - "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", - "dev": true - }, - "cliui": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz", - "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==", - "dev": true, - "requires": { - "string-width": "^2.1.1", - "strip-ansi": "^4.0.0", - "wrap-ansi": "^2.0.0" - } - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "expand-brackets": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", - "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", - "dev": true, - "requires": { - "is-posix-bracket": "^0.1.0" - } - }, - "extglob": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", - "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", - "dev": true, - "requires": { - "is-extglob": "^1.0.0" - } - }, - "find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", - "dev": true, - "requires": { - "locate-path": "^2.0.0" - } - }, - "get-caller-file": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", - "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==", - "dev": true - }, - "invert-kv": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-2.0.0.tgz", - "integrity": "sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA==", - "dev": true - }, - "is-extglob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", - "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, - "is-glob": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", - "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.2.3", + "verror": "1.10.0" + } + }, + "jssha": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/jssha/-/jssha-2.3.1.tgz", + "integrity": "sha1-FHshJTaQNcpLL30hDcU58Amz3po=" + }, + "jsx-ast-utils": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-2.4.1.tgz", + "integrity": "sha512-z1xSldJ6imESSzOjd3NNkieVJKRlKYSOtMG8SFyCj2FIrvSaSuli/WjpBkEzCBoR9bYYYFgqJw61Xhu7Lcgk+w==", + "dev": true, + "requires": { + "array-includes": "^3.1.1", + "object.assign": "^4.1.0" + } + }, + "junk": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/junk/-/junk-3.1.0.tgz", + "integrity": "sha512-pBxcB3LFc8QVgdggvZWyeys+hnrNWg4OcZIU/1X59k5jQdLBlCsYGRQaz234SqoRLTCgMH00fY0xRJH+F9METQ==", + "dev": true + }, + "jwt-decode": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/jwt-decode/-/jwt-decode-2.2.0.tgz", + "integrity": "sha1-fYa9VmefWM5qhHBKZX3TkruoGnk=" + }, + "keycode": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/keycode/-/keycode-2.2.0.tgz", + "integrity": "sha1-PQr1bce4uOXLqNCpfxByBO7CKwQ=" + }, + "killable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/killable/-/killable-1.0.1.tgz", + "integrity": "sha512-LzqtLKlUwirEUyl/nicirVmNiPvYs7l5n8wOPP7fyJVpUPkvCnW/vuiXGpylGUlnPDnB7311rARzAt3Mhswpjg==", + "dev": true + }, + "kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true + }, + "kleur": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", + "dev": true + }, + "last-call-webpack-plugin": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/last-call-webpack-plugin/-/last-call-webpack-plugin-3.0.0.tgz", + "integrity": "sha512-7KI2l2GIZa9p2spzPIVZBYyNKkN+e/SQPpnjlTiPhdbDW3F86tdKKELxKpzJ5sgU19wQWsACULZmpTPYHeWO5w==", + "dev": true, + "requires": { + "lodash": "^4.17.5", + "webpack-sources": "^1.1.0" + } + }, + "lazy-cache": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", + "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=", + "dev": true + }, + "lcid": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", + "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", + "dev": true, + "requires": { + "invert-kv": "^1.0.0" + } + }, + "left-pad": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/left-pad/-/left-pad-1.3.0.tgz", + "integrity": "sha512-XI5MPzVNApjAyhQzphX8BkmKsKUxD4LdyK24iZeQGinBN9yTQT3bFlCBy/aVx2HrNcqQGsdot8ghrjyrvMCoEA==", + "dev": true + }, + "leven": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", + "dev": true + }, + "levenary": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/levenary/-/levenary-1.1.1.tgz", + "integrity": "sha512-mkAdOIt79FD6irqjYSs4rdbnlT5vRonMEvBVPVb3XmevfS8kgRXwfes0dhPdEtzTWD/1eNE/Bm/G1iRt6DcnQQ==", + "dev": true, + "requires": { + "leven": "^3.1.0" + } + }, + "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" + } + }, + "line-height": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/line-height/-/line-height-0.3.1.tgz", + "integrity": "sha1-SxIF7d4YKHKl76PI9iCzGHqcVMk=", + "requires": { + "computed-style": "~0.1.3" + } + }, + "lines-and-columns": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz", + "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=", + "dev": true + }, + "linkify-it": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-2.2.0.tgz", + "integrity": "sha512-GnAl/knGn+i1U/wjBz3akz2stz+HrHLsxMwHQGofCDfPvlf+gDKN58UtfmUquTY4/MXeE2x7k19KQmeoZi94Iw==", + "requires": { + "uc.micro": "^1.0.1" + } + }, + "lint-staged": { + "version": "10.5.1", + "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-10.5.1.tgz", + "integrity": "sha512-fTkTGFtwFIJJzn/PbUO3RXyEBHIhbfYBE7+rJyLcOXabViaO/h6OslgeK6zpeUtzkDrzkgyAYDTLAwx6JzDTHw==", + "dev": true, + "requires": { + "chalk": "^4.1.0", + "cli-truncate": "^2.1.0", + "commander": "^6.2.0", + "cosmiconfig": "^7.0.0", + "debug": "^4.2.0", + "dedent": "^0.7.0", + "enquirer": "^2.3.6", + "execa": "^4.1.0", + "listr2": "^3.2.2", + "log-symbols": "^4.0.0", + "micromatch": "^4.0.2", + "normalize-path": "^3.0.0", + "please-upgrade-node": "^3.2.0", + "string-argv": "0.3.1", + "stringify-object": "^3.3.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "requires": { - "is-extglob": "^1.0.0" + "color-convert": "^2.0.1" } }, - "json5": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", - "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=", - "dev": true - }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", "dev": true, "requires": { - "is-buffer": "^1.1.5" + "fill-range": "^7.0.1" } }, - "lcid": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz", - "integrity": "sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==", + "chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", "dev": true, "requires": { - "invert-kv": "^2.0.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" } }, - "locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "requires": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" + "color-name": "~1.1.4" } }, - "micromatch": { - "version": "2.3.11", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", - "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", - "dev": true, - "requires": { - "arr-diff": "^2.0.0", - "array-unique": "^0.2.1", - "braces": "^1.8.2", - "expand-brackets": "^0.1.4", - "extglob": "^0.3.1", - "filename-regex": "^2.0.0", - "is-extglob": "^1.0.0", - "is-glob": "^2.0.1", - "kind-of": "^3.0.2", - "normalize-path": "^2.0.1", - "object.omit": "^2.0.0", - "parse-glob": "^3.0.4", - "regex-cache": "^0.4.2" - } + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "commander": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.0.tgz", + "integrity": "sha512-zP4jEKbe8SHzKJYQmq8Y9gYjtO/POJLgIdKgV7B9qNmABVFVc+ctqSX6iXh4mCpJfRBOabiZ2YKPg8ciDw6C+Q==", "dev": true }, - "normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "cosmiconfig": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.0.tgz", + "integrity": "sha512-pondGvTuVYDk++upghXJabWzL6Kxu6f26ljFw64Swq9v6sQPUL3EUlVDV56diOjpCayKihL6hVe8exIACU4XcA==", "dev": true, "requires": { - "remove-trailing-separator": "^1.0.1" + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.2.1", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.10.0" } }, - "os-locale": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-3.1.0.tgz", - "integrity": "sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q==", + "cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", "dev": true, "requires": { - "execa": "^1.0.0", - "lcid": "^2.0.0", - "mem": "^4.0.0" + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" } }, - "p-limit": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", - "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "debug": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.2.0.tgz", + "integrity": "sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg==", "dev": true, "requires": { - "p-try": "^1.0.0" + "ms": "2.1.2" } }, - "p-locate": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "execa": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", + "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", "dev": true, "requires": { - "p-limit": "^1.1.0" + "cross-spawn": "^7.0.0", + "get-stream": "^5.0.0", + "human-signals": "^1.1.1", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.0", + "onetime": "^5.1.0", + "signal-exit": "^3.0.2", + "strip-final-newline": "^2.0.0" } }, - "p-try": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", - "dev": true + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } }, - "require-main-filename": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", - "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=", - "dev": true + "get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dev": true, + "requires": { + "pump": "^3.0.0" + } }, - "slash": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", - "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=", + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true }, - "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "import-fresh": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.2.2.tgz", + "integrity": "sha512-cTPNrlvJT6twpYy+YmKUKrTSjWFs3bjYjAhCwm+z4EOCubZxAuO+hHpRN64TqjEaYSHs7tJAE0w1CKMGmsG/lw==", "dev": true, "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" } }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true + }, + "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==", + "dev": true + }, + "micromatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz", + "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==", "dev": true, "requires": { - "ansi-regex": "^3.0.0" + "braces": "^3.0.1", + "picomatch": "^2.0.5" } }, - "strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", "dev": true }, - "wrap-ansi": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", - "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", + "npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", "dev": true, "requires": { - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1" - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "dev": true, - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "dev": true, - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - } + "path-key": "^3.0.0" } }, - "y18n": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", - "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=", + "onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "requires": { + "mimic-fn": "^2.1.0" + } + }, + "parse-json": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.1.0.tgz", + "integrity": "sha512-+mi/lmVVNKFNVyLXV31ERiy2CY5E1/F6QtJFEzoChPRwwngMNXRDQ9GJ5WdE2Z2P4AujsOi0/+2qHID68KwfIQ==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + } + }, + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", "dev": true }, - "yargs": { - "version": "11.1.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-11.1.1.tgz", - "integrity": "sha512-PRU7gJrJaXv3q3yQZ/+/X6KBswZiaQ+zOmdprZcouPYtQgvNU35i+68M4b1ZHLZtYFT5QObFLV+ZkmJYcwKdiw==", + "path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "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 + }, + "shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", "dev": true, "requires": { - "cliui": "^4.0.0", - "decamelize": "^1.1.1", - "find-up": "^2.1.0", - "get-caller-file": "^1.0.1", - "os-locale": "^3.1.0", - "require-directory": "^2.1.1", - "require-main-filename": "^1.0.1", - "set-blocking": "^2.0.0", - "string-width": "^2.0.0", - "which-module": "^2.0.0", - "y18n": "^3.2.1", - "yargs-parser": "^9.0.2" + "shebang-regex": "^3.0.0" } }, - "yargs-parser": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-9.0.2.tgz", - "integrity": "sha1-nM9qQ0YP5O1Aqbto9I1DuKaMwHc=", + "shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "requires": { + "is-number": "^7.0.0" + } + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "dev": true, "requires": { - "camelcase": "^4.1.0" + "isexe": "^2.0.0" } } } }, - "jest-serializer": { - "version": "23.0.1", - "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-23.0.1.tgz", - "integrity": "sha1-o3dq6zEekP6D+rnlM+hRAr0WQWU=", - "dev": true - }, - "jest-snapshot": { - "version": "23.6.0", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-23.6.0.tgz", - "integrity": "sha512-tM7/Bprftun6Cvj2Awh/ikS7zV3pVwjRYU2qNYS51VZHgaAMBs5l4o/69AiDHhQrj5+LA2Lq4VIvK7zYk/bswg==", - "dev": true, - "requires": { - "babel-types": "^6.0.0", - "chalk": "^2.0.1", - "jest-diff": "^23.6.0", - "jest-matcher-utils": "^23.6.0", - "jest-message-util": "^23.4.0", - "jest-resolve": "^23.6.0", - "mkdirp": "^0.5.1", - "natural-compare": "^1.4.0", - "pretty-format": "^23.6.0", - "semver": "^5.5.0" - } - }, - "jest-util": { - "version": "23.4.0", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-23.4.0.tgz", - "integrity": "sha1-TQY8uSe68KI4Mf9hvsLLv0l5NWE=", + "listr2": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/listr2/-/listr2-3.2.2.tgz", + "integrity": "sha512-AajqcZEUikF2ioph6PfH3dIuxJclhr3i3kHgTOP0xeXdWQohrvJAAmqVcV43/GI987HFY/vzT73jYXoa4esDHg==", "dev": true, "requires": { - "callsites": "^2.0.0", - "chalk": "^2.0.1", - "graceful-fs": "^4.1.11", - "is-ci": "^1.0.10", - "jest-message-util": "^23.4.0", - "mkdirp": "^0.5.1", - "slash": "^1.0.0", - "source-map": "^0.6.0" + "chalk": "^4.1.0", + "cli-truncate": "^2.1.0", + "figures": "^3.2.0", + "indent-string": "^4.0.0", + "log-update": "^4.0.0", + "p-map": "^4.0.0", + "rxjs": "^6.6.3", + "through": "^2.3.8" }, "dependencies": { - "ci-info": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-1.6.0.tgz", - "integrity": "sha512-vsGdkwSCDpWmP80ncATX7iea5DWQemg1UgCW5J8tqjU3lYw4FBYuj89J0CTVomA7BEfvSZd84GmHko+MxFQU2A==", - "dev": true + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } }, - "is-ci": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-1.2.1.tgz", - "integrity": "sha512-s6tfsaQaQi3JNciBH6shVqEDvhGut0SUXr31ag8Pd8BBbVVlcGfWhpPmEOoM6RJ5TFhbypvf5yyRw/VXW1IiWg==", + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "requires": { - "ci-info": "^1.5.0" + "color-name": "~1.1.4" } }, - "slash": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", - "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=", + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true + }, + "rxjs": { + "version": "6.6.3", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.3.tgz", + "integrity": "sha512-trsQc+xYYXZ3urjOiJOuCOa5N3jAZ3eiSpQB5hIT8zGlL2QfnHLJ2r7GMkBGuIausdJN1OneaI6gQlsqNHHmZQ==", + "dev": true, + "requires": { + "tslib": "^1.9.0" + } + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } } } }, - "jest-validate": { - "version": "23.6.0", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-23.6.0.tgz", - "integrity": "sha512-OFKapYxe72yz7agrDAWi8v2WL8GIfVqcbKRCLbRG9PAxtzF9b1SEDdTpytNDN12z2fJynoBwpMpvj2R39plI2A==", + "load-json-file": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", + "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", "dev": true, "requires": { - "chalk": "^2.0.1", - "jest-get-type": "^22.1.0", - "leven": "^2.1.0", - "pretty-format": "^23.6.0" + "graceful-fs": "^4.1.2", + "parse-json": "^2.2.0", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0", + "strip-bom": "^2.0.0" + }, + "dependencies": { + "parse-json": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", + "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", + "dev": true, + "requires": { + "error-ex": "^1.2.0" + } + }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + } } }, - "jest-watch-typeahead": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/jest-watch-typeahead/-/jest-watch-typeahead-0.2.1.tgz", - "integrity": "sha512-xdhEtKSj0gmnkDQbPTIHvcMmXNUDzYpHLEJ5TFqlaI+schi2NI96xhWiZk9QoesAS7oBmKwWWsHazTrYl2ORgg==", + "loader-fs-cache": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/loader-fs-cache/-/loader-fs-cache-1.0.3.tgz", + "integrity": "sha512-ldcgZpjNJj71n+2Mf6yetz+c9bM4xpKtNds4LbqXzU/PTdeAX0g3ytnU1AJMEcTk2Lex4Smpe3Q/eCTsvUBxbA==", "dev": true, "requires": { - "ansi-escapes": "^3.0.0", - "chalk": "^2.4.1", - "jest-watcher": "^23.1.0", - "slash": "^2.0.0", - "string-length": "^2.0.0", - "strip-ansi": "^5.0.0" + "find-cache-dir": "^0.1.1", + "mkdirp": "^0.5.1" }, "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 + "find-cache-dir": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-0.1.1.tgz", + "integrity": "sha1-yN765XyKUqinhPnjHFfHQumToLk=", + "dev": true, + "requires": { + "commondir": "^1.0.1", + "mkdirp": "^0.5.1", + "pkg-dir": "^1.0.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==", + "find-up": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", + "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", "dev": true, "requires": { - "ansi-regex": "^4.1.0" + "path-exists": "^2.0.0", + "pinkie-promise": "^2.0.0" + } + }, + "path-exists": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", + "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", + "dev": true, + "requires": { + "pinkie-promise": "^2.0.0" + } + }, + "pkg-dir": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-1.0.0.tgz", + "integrity": "sha1-ektQio1bstYp1EcFb/TpyTFM89Q=", + "dev": true, + "requires": { + "find-up": "^1.0.0" } } } }, - "jest-watcher": { - "version": "23.4.0", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-23.4.0.tgz", - "integrity": "sha1-0uKM50+NrWxq/JIrksq+9u0FyRw=", - "dev": true, - "requires": { - "ansi-escapes": "^3.0.0", - "chalk": "^2.0.1", - "string-length": "^2.0.0" - } + "loader-runner": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.4.0.tgz", + "integrity": "sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw==", + "dev": true }, - "jest-worker": { - "version": "23.2.0", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-23.2.0.tgz", - "integrity": "sha1-+vcGqNo2+uYOsmlXJX+ntdjqArk=", + "loader-utils": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", + "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", "dev": true, "requires": { - "merge-stream": "^1.0.1" + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + }, + "dependencies": { + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dev": true, + "requires": { + "minimist": "^1.2.0" + } + } } }, - "joi": { - "version": "11.4.0", - "resolved": "https://registry.npmjs.org/joi/-/joi-11.4.0.tgz", - "integrity": "sha512-O7Uw+w/zEWgbL6OcHbyACKSj0PkQeUgmehdoXVSxt92QFCq4+1390Rwh5moI2K/OgC7D8RHRZqHZxT2husMJHA==", + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", "dev": true, "requires": { - "hoek": "4.x.x", - "isemail": "3.x.x", - "topo": "2.x.x" + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" } }, - "js-base64": { - "version": "2.6.4", - "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.6.4.tgz", - "integrity": "sha512-pZe//GGmwJndub7ZghVHz7vjb2LgC1m8B07Au3eYqeqv9emhESByMXxaEgkUkEqJe87oBbSniGYoQNIBklc7IQ==" + "lodash": { + "version": "4.17.19", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.19.tgz", + "integrity": "sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ==" }, - "js-levenshtein": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/js-levenshtein/-/js-levenshtein-1.1.6.tgz", - "integrity": "sha512-X2BB11YZtrRqY4EnQcLX5Rh373zbK4alC1FW7D7MBhL2gtcC17cTnr6DmfHZeS0s2rTHjUTMMHfG7gO8SSdw+g==", + "lodash-es": { + "version": "4.17.15", + "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.15.tgz", + "integrity": "sha512-rlrc3yU3+JNOpZ9zj5pQtxnx2THmvRykwL4Xlxoa8I9lHBlVbbyPhgyPMioxVZ4NqyxaVVtaJnzsyOidQIhyyQ==" + }, + "lodash._reinterpolate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz", + "integrity": "sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0=", "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==" + "lodash.camelcase": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", + "integrity": "sha1-soqmKIorn8ZRA1x3EfZathkDMaY=" }, - "js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } + "lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=" }, - "jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=" - }, - "jsdom": { - "version": "9.12.0", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-9.12.0.tgz", - "integrity": "sha1-6MVG//ywbADUgzyoRBD+1/igl9Q=", - "requires": { - "abab": "^1.0.3", - "acorn": "^4.0.4", - "acorn-globals": "^3.1.0", - "array-equal": "^1.0.0", - "content-type-parser": "^1.0.1", - "cssom": ">= 0.3.2 < 0.4.0", - "cssstyle": ">= 0.2.37 < 0.3.0", - "escodegen": "^1.6.1", - "html-encoding-sniffer": "^1.0.1", - "nwmatcher": ">= 1.3.9 < 2.0.0", - "parse5": "^1.5.1", - "request": "^2.79.0", - "sax": "^1.2.1", - "symbol-tree": "^3.2.1", - "tough-cookie": "^2.3.2", - "webidl-conversions": "^4.0.0", - "whatwg-encoding": "^1.0.1", - "whatwg-url": "^4.3.0", - "xml-name-validator": "^2.0.1" - } + "lodash.flattendeep": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz", + "integrity": "sha1-+wMJF/hqMTTlvJvsDWngAT3f7bI=" }, - "jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "dev": true + "lodash.isequal": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", + "integrity": "sha1-QVxEePK8wwEgwizhDtMib30+GOA=" }, - "json-parse-better-errors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", - "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==" + "lodash.memoize": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", + "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=", + "dev": true }, - "json-schema": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", - "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=" + "lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==" }, - "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==" + "lodash.sortby": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", + "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=", + "dev": true }, - "json-stable-stringify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", - "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=", + "lodash.template": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-4.5.0.tgz", + "integrity": "sha512-84vYFxIkmidUiFxidA/KjjH9pAycqW+h980j7Fuz5qxRtO9pgB7MDFTdys1N7A5mcucRiDyEq4fusljItR1T/A==", "dev": true, "requires": { - "jsonify": "~0.0.0" + "lodash._reinterpolate": "^3.0.0", + "lodash.templatesettings": "^4.0.0" } }, - "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 - }, - "json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" - }, - "json2mq": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/json2mq/-/json2mq-0.2.0.tgz", - "integrity": "sha1-tje9O6nqvhIsg+lyBIOusQ0skEo=", + "lodash.templatesettings": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-4.2.0.tgz", + "integrity": "sha512-stgLz+i3Aa9mZgnjr/O+v9ruKZsPsndy7qPZOchbqk2cnTU1ZaldKK+v7m54WoKIyxiuMZTKT2H81F8BeAc3ZQ==", + "dev": true, "requires": { - "string-convert": "^0.2.0" + "lodash._reinterpolate": "^3.0.0" } }, - "json3": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/json3/-/json3-3.3.3.tgz", - "integrity": "sha512-c7/8mbUsKigAbLkD5B010BK4D9LZm7A1pNItkEwiUZRpIN66exu/e7YQWysGun+TRKaJp8MhemM+VkfWv42aCA==", + "lodash.uniq": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", + "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=", "dev": true }, - "json5": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.3.tgz", - "integrity": "sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA==", + "lodash.upperfirst": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/lodash.upperfirst/-/lodash.upperfirst-4.3.1.tgz", + "integrity": "sha1-E2Xt9DFIBIHvDRxolXpe2Z1J984=" + }, + "log-symbols": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.0.0.tgz", + "integrity": "sha512-FN8JBzLx6CzeMrB0tg6pqlGU1wCrXW+ZXGH481kfsBqer0hToTIiHdjH4Mq8xJUbvATujKCvaREGWpGUionraA==", "dev": true, "requires": { - "minimist": "^1.2.5" + "chalk": "^4.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } } }, - "jsonfile": { + "log-update": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", + "resolved": "https://registry.npmjs.org/log-update/-/log-update-4.0.0.tgz", + "integrity": "sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==", "dev": true, "requires": { - "graceful-fs": "^4.1.6" + "ansi-escapes": "^4.3.0", + "cli-cursor": "^3.1.0", + "slice-ansi": "^4.0.0", + "wrap-ansi": "^6.2.0" + }, + "dependencies": { + "ansi-escapes": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.1.tgz", + "integrity": "sha512-JWF7ocqNrp8u9oqpgV+wH5ftbt+cfvv+PTjOvKLT3AdYly/LmORARfEVT1iyjwN+4MqE5UmVKoAdIBqeoCHgLA==", + "dev": true, + "requires": { + "type-fest": "^0.11.0" + } + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "astral-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", + "dev": true + }, + "cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "dev": true, + "requires": { + "restore-cursor": "^3.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "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==", + "dev": true + }, + "mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true + }, + "onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "requires": { + "mimic-fn": "^2.1.0" + } + }, + "restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "dev": true, + "requires": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + } + }, + "slice-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", + "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + } + }, + "type-fest": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.11.0.tgz", + "integrity": "sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ==", + "dev": true + } } }, - "jsonify": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", - "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=", + "loglevel": { + "version": "1.6.8", + "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.6.8.tgz", + "integrity": "sha512-bsU7+gc9AJ2SqpzxwU3+1fedl8zAntbtC5XYlt3s2j1hJcn2PsXSmgN8TaLG/J1/2mod4+cE/3vNL70/c1RNCA==", "dev": true }, - "jsprim": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", - "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", + "loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", "requires": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.2.3", - "verror": "1.10.0" + "js-tokens": "^3.0.0 || ^4.0.0" } }, - "jssha": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/jssha/-/jssha-2.3.1.tgz", - "integrity": "sha1-FHshJTaQNcpLL30hDcU58Amz3po=" - }, - "jsx-ast-utils": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-2.4.1.tgz", - "integrity": "sha512-z1xSldJ6imESSzOjd3NNkieVJKRlKYSOtMG8SFyCj2FIrvSaSuli/WjpBkEzCBoR9bYYYFgqJw61Xhu7Lcgk+w==", + "loud-rejection": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz", + "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=", "dev": true, "requires": { - "array-includes": "^3.1.1", - "object.assign": "^4.1.0" + "currently-unhandled": "^0.4.1", + "signal-exit": "^3.0.0" } }, - "jwt-decode": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/jwt-decode/-/jwt-decode-2.2.0.tgz", - "integrity": "sha1-fYa9VmefWM5qhHBKZX3TkruoGnk=" - }, - "keycode": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/keycode/-/keycode-2.2.0.tgz", - "integrity": "sha1-PQr1bce4uOXLqNCpfxByBO7CKwQ=" - }, - "killable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/killable/-/killable-1.0.1.tgz", - "integrity": "sha512-LzqtLKlUwirEUyl/nicirVmNiPvYs7l5n8wOPP7fyJVpUPkvCnW/vuiXGpylGUlnPDnB7311rARzAt3Mhswpjg==", - "dev": true - }, - "kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==" - }, - "kleur": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-2.0.2.tgz", - "integrity": "sha512-77XF9iTllATmG9lSlIv0qdQ2BQ/h9t0bJllHlbvsQ0zUWfU7Yi0S8L5JXzPZgkefIiajLmBJJ4BsMJmqcf7oxQ==", - "dev": true - }, - "last-call-webpack-plugin": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/last-call-webpack-plugin/-/last-call-webpack-plugin-3.0.0.tgz", - "integrity": "sha512-7KI2l2GIZa9p2spzPIVZBYyNKkN+e/SQPpnjlTiPhdbDW3F86tdKKELxKpzJ5sgU19wQWsACULZmpTPYHeWO5w==", + "lower-case": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.1.tgz", + "integrity": "sha512-LiWgfDLLb1dwbFQZsSglpRj+1ctGnayXz3Uv0/WO8n558JycT5fg6zkNcnW0G68Nn0aEldTFeEfmjCfmqry/rQ==", "dev": true, "requires": { - "lodash": "^4.17.5", - "webpack-sources": "^1.1.0" + "tslib": "^1.10.0" } }, - "lazy-cache": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", - "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=", - "dev": true + "lru-cache": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", + "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", + "dev": true, + "requires": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } }, - "lcid": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", - "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", + "make-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "dev": true, "requires": { - "invert-kv": "^1.0.0" + "pify": "^4.0.1", + "semver": "^5.6.0" + }, + "dependencies": { + "pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true + } } }, - "left-pad": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/left-pad/-/left-pad-1.3.0.tgz", - "integrity": "sha512-XI5MPzVNApjAyhQzphX8BkmKsKUxD4LdyK24iZeQGinBN9yTQT3bFlCBy/aVx2HrNcqQGsdot8ghrjyrvMCoEA==", + "makeerror": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.11.tgz", + "integrity": "sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw=", + "dev": true, + "requires": { + "tmpl": "1.0.x" + } + }, + "mamacro": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/mamacro/-/mamacro-0.0.3.tgz", + "integrity": "sha512-qMEwh+UujcQ+kbz3T6V+wAmO2U8veoq2w+3wY8MquqwVA3jChfwY+Tk52GZKDfACEPjuZ7r2oJLejwpt8jtwTA==", "dev": true }, - "leven": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/leven/-/leven-2.1.0.tgz", - "integrity": "sha1-wuep93IJTe6dNCAq6KzORoeHVYA=", + "map-cache": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", + "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", "dev": true }, - "levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", - "requires": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" - } + "map-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", + "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", + "dev": true }, - "line-height": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/line-height/-/line-height-0.3.1.tgz", - "integrity": "sha1-SxIF7d4YKHKl76PI9iCzGHqcVMk=", + "map-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", + "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", + "dev": true, "requires": { - "computed-style": "~0.1.3" + "object-visit": "^1.0.0" } }, - "linkify-it": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-2.2.0.tgz", - "integrity": "sha512-GnAl/knGn+i1U/wjBz3akz2stz+HrHLsxMwHQGofCDfPvlf+gDKN58UtfmUquTY4/MXeE2x7k19KQmeoZi94Iw==", + "mathjs": { + "version": "5.10.3", + "resolved": "https://registry.npmjs.org/mathjs/-/mathjs-5.10.3.tgz", + "integrity": "sha512-ySjg30BC3dYjQm73ILZtwcWzFJde0VU6otkXW/57IjjuYRa3Qaf0Kb8pydEuBZYtqW2OxreAtsricrAmOj3jIw==", "requires": { - "uc.micro": "^1.0.1" + "complex.js": "2.0.11", + "decimal.js": "10.2.0", + "escape-latex": "1.2.0", + "fraction.js": "4.0.12", + "javascript-natural-sort": "0.7.1", + "seed-random": "2.2.0", + "tiny-emitter": "2.1.0", + "typed-function": "1.1.0" } }, - "lint-staged": { - "version": "8.2.1", - "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-8.2.1.tgz", - "integrity": "sha512-n0tDGR/rTCgQNwXnUf/eWIpPNddGWxC32ANTNYsj2k02iZb7Cz5ox2tytwBu+2r0zDXMEMKw7Y9OD/qsav561A==", + "md5.js": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", + "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", "requires": { - "chalk": "^2.3.1", - "commander": "^2.14.1", - "cosmiconfig": "^5.2.0", - "debug": "^3.1.0", - "dedent": "^0.7.0", - "del": "^3.0.0", - "execa": "^1.0.0", - "g-status": "^2.0.2", - "is-glob": "^4.0.0", - "is-windows": "^1.0.2", - "listr": "^0.14.2", - "listr-update-renderer": "^0.5.0", - "lodash": "^4.17.11", - "log-symbols": "^2.2.0", - "micromatch": "^3.1.8", - "npm-which": "^3.0.1", - "p-map": "^1.1.1", - "path-is-inside": "^1.0.2", - "pify": "^3.0.0", - "please-upgrade-node": "^3.0.2", - "staged-git-files": "1.1.2", - "string-argv": "^0.0.2", - "stringify-object": "^3.2.2", - "yup": "^0.27.0" - } - }, - "listr": { - "version": "0.14.3", - "resolved": "https://registry.npmjs.org/listr/-/listr-0.14.3.tgz", - "integrity": "sha512-RmAl7su35BFd/xoMamRjpIE4j3v+L28o8CT5YhAXQJm1fD+1l9ngXY8JAQRJ+tFK2i5njvi0iRUKV09vPwA0iA==", - "requires": { - "@samverschueren/stream-to-observable": "^0.3.0", - "is-observable": "^1.1.0", - "is-promise": "^2.1.0", - "is-stream": "^1.1.0", - "listr-silent-renderer": "^1.1.1", - "listr-update-renderer": "^0.5.0", - "listr-verbose-renderer": "^0.5.0", - "p-map": "^2.0.0", - "rxjs": "^6.3.3" - }, - "dependencies": { - "p-map": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz", - "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==" - } + "hash-base": "^3.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" } }, - "listr-silent-renderer": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/listr-silent-renderer/-/listr-silent-renderer-1.1.1.tgz", - "integrity": "sha1-kktaN1cVN3C/Go4/v3S4u/P5JC4=" + "mdn-data": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.4.tgz", + "integrity": "sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==", + "dev": true }, - "listr-update-renderer": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/listr-update-renderer/-/listr-update-renderer-0.5.0.tgz", - "integrity": "sha512-tKRsZpKz8GSGqoI/+caPmfrypiaq+OQCbd+CovEC24uk1h952lVj5sC7SqyFUm+OaJ5HN/a1YLt5cit2FMNsFA==", + "media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", + "dev": true + }, + "memory-fs": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", + "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=", + "dev": true, "requires": { - "chalk": "^1.1.3", - "cli-truncate": "^0.2.1", - "elegant-spinner": "^1.0.1", - "figures": "^1.7.0", - "indent-string": "^3.0.0", - "log-symbols": "^1.0.2", - "log-update": "^2.3.0", - "strip-ansi": "^3.0.1" + "errno": "^0.1.3", + "readable-stream": "^2.0.1" }, "dependencies": { - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=" - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" + "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" } }, - "log-symbols": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-1.0.2.tgz", - "integrity": "sha1-N2/3tY6jCGoPCfrMdGF+ylAeGhg=", - "requires": { - "chalk": "^1.0.0" - } + "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==", + "dev": true }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" - } - } - }, - "listr-verbose-renderer": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/listr-verbose-renderer/-/listr-verbose-renderer-0.5.0.tgz", - "integrity": "sha512-04PDPqSlsqIOaaaGZ+41vq5FejI9auqTInicFRndCBgE3bXG8D6W1I+mWhk+1nqbHmyhla/6BUrd5OSiHwKRXw==", - "requires": { - "chalk": "^2.4.1", - "cli-cursor": "^2.1.0", - "date-fns": "^1.27.2", - "figures": "^2.0.0" - }, - "dependencies": { - "figures": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", - "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, "requires": { - "escape-string-regexp": "^1.0.5" + "safe-buffer": "~5.1.0" } } } }, - "load-json-file": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", - "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", + "memorystream": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz", + "integrity": "sha1-htcJCzDORV1j+64S3aUaR93K+bI=" + }, + "meow": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz", + "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=", + "dev": true, "requires": { - "graceful-fs": "^4.1.2", - "parse-json": "^2.2.0", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0", - "strip-bom": "^2.0.0" - }, - "dependencies": { - "parse-json": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", - "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", - "requires": { - "error-ex": "^1.2.0" - } - }, - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=" - } + "camelcase-keys": "^2.0.0", + "decamelize": "^1.1.2", + "loud-rejection": "^1.0.0", + "map-obj": "^1.0.1", + "minimist": "^1.1.3", + "normalize-package-data": "^2.3.4", + "object-assign": "^4.0.1", + "read-pkg-up": "^1.0.1", + "redent": "^1.0.0", + "trim-newlines": "^1.0.0" } }, - "loader-fs-cache": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/loader-fs-cache/-/loader-fs-cache-1.0.3.tgz", - "integrity": "sha512-ldcgZpjNJj71n+2Mf6yetz+c9bM4xpKtNds4LbqXzU/PTdeAX0g3ytnU1AJMEcTk2Lex4Smpe3Q/eCTsvUBxbA==", + "merge-deep": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/merge-deep/-/merge-deep-3.0.2.tgz", + "integrity": "sha512-T7qC8kg4Zoti1cFd8Cr0M+qaZfOwjlPDEdZIIPPB2JZctjaPM4fX+i7HOId69tAti2fvO6X5ldfYUONDODsrkA==", "dev": true, "requires": { - "find-cache-dir": "^0.1.1", - "mkdirp": "^0.5.1" + "arr-union": "^3.1.0", + "clone-deep": "^0.2.4", + "kind-of": "^3.0.2" }, "dependencies": { - "find-cache-dir": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-0.1.1.tgz", - "integrity": "sha1-yN765XyKUqinhPnjHFfHQumToLk=", + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "commondir": "^1.0.1", - "mkdirp": "^0.5.1", - "pkg-dir": "^1.0.0" - } - }, - "find-up": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", - "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", - "dev": true, - "requires": { - "path-exists": "^2.0.0", - "pinkie-promise": "^2.0.0" - } - }, - "path-exists": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", - "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", - "dev": true, - "requires": { - "pinkie-promise": "^2.0.0" - } - }, - "pkg-dir": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-1.0.0.tgz", - "integrity": "sha1-ektQio1bstYp1EcFb/TpyTFM89Q=", - "dev": true, - "requires": { - "find-up": "^1.0.0" + "is-buffer": "^1.1.5" } } } }, - "loader-runner": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.4.0.tgz", - "integrity": "sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw==", + "merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=", "dev": true }, - "loader-utils": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", - "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", - "dev": true, - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^1.0.1" - }, - "dependencies": { - "json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "dev": true, - "requires": { - "minimist": "^1.2.0" - } - } - } - }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - } - }, - "lodash": { - "version": "4.17.20", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", - "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==" - }, - "lodash-es": { - "version": "4.17.20", - "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.20.tgz", - "integrity": "sha512-JD1COMZsq8maT6mnuz1UMV0jvYD0E0aUsSOdrr1/nAG3dhqQXwRRgeW0cSqH1U43INKcqxaiVIQNOUDld7gRDA==" - }, - "lodash._reinterpolate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz", - "integrity": "sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0=", + "merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", "dev": true }, - "lodash.camelcase": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", - "integrity": "sha1-soqmKIorn8ZRA1x3EfZathkDMaY=", + "merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", "dev": true }, - "lodash.debounce": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", - "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=" - }, - "lodash.flattendeep": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz", - "integrity": "sha1-+wMJF/hqMTTlvJvsDWngAT3f7bI=" - }, - "lodash.isarray": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/lodash.isarray/-/lodash.isarray-4.0.0.tgz", - "integrity": "sha1-KspJayjEym1yZxUxNZDALm6jRAM=" - }, - "lodash.isfinite": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/lodash.isfinite/-/lodash.isfinite-3.3.2.tgz", - "integrity": "sha1-+4m2WpqAKBgz8LdHizpRBPiY67M=" - }, - "lodash.isnan": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/lodash.isnan/-/lodash.isnan-3.0.2.tgz", - "integrity": "sha1-gu0Epfnqi9YibQwmrwysMvRQd0U=" - }, - "lodash.isstring": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", - "integrity": "sha1-1SfftUVuynzJu5XV2ur4i6VKVFE=" - }, - "lodash.memoize": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", - "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=", + "methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=", "dev": true }, - "lodash.sortby": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", - "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=", + "microevent.ts": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/microevent.ts/-/microevent.ts-0.1.1.tgz", + "integrity": "sha512-jo1OfR4TaEwd5HOrt5+tAZ9mqT4jmpNAusXtyfNzqVm9uiSYFZlKM1wYL4oU7azZW/PxQW53wM0S6OR1JHNa2g==", "dev": true }, - "lodash.tail": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lodash.tail/-/lodash.tail-4.1.1.tgz", - "integrity": "sha1-0jM6NtnncXyK0vfKyv7HwytERmQ=", - "dev": true + "micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dev": true, + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + } }, - "lodash.template": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-4.5.0.tgz", - "integrity": "sha512-84vYFxIkmidUiFxidA/KjjH9pAycqW+h980j7Fuz5qxRtO9pgB7MDFTdys1N7A5mcucRiDyEq4fusljItR1T/A==", + "miller-rabin": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", + "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", "dev": true, "requires": { - "lodash._reinterpolate": "^3.0.0", - "lodash.templatesettings": "^4.0.0" + "bn.js": "^4.0.0", + "brorand": "^1.0.1" + }, + "dependencies": { + "bn.js": { + "version": "4.11.9", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", + "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==", + "dev": true + } } }, - "lodash.templatesettings": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-4.2.0.tgz", - "integrity": "sha512-stgLz+i3Aa9mZgnjr/O+v9ruKZsPsndy7qPZOchbqk2cnTU1ZaldKK+v7m54WoKIyxiuMZTKT2H81F8BeAc3ZQ==", + "mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "dev": true + }, + "mime-db": { + "version": "1.44.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz", + "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==", + "dev": true + }, + "mime-types": { + "version": "2.1.27", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz", + "integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==", "dev": true, "requires": { - "lodash._reinterpolate": "^3.0.0" + "mime-db": "1.44.0" } }, - "lodash.throttle": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lodash.throttle/-/lodash.throttle-4.1.1.tgz", - "integrity": "sha1-wj6RtxAkKscMN/HhzaknTMOb8vQ=" + "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 }, - "lodash.uniq": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", - "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=", + "min-indent": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", + "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", "dev": true }, - "log-symbols": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz", - "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==", + "mini-css-extract-plugin": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-0.9.0.tgz", + "integrity": "sha512-lp3GeY7ygcgAmVIcRPBVhIkf8Us7FZjA+ILpal44qLdSu11wmjKQ3d9k15lfD7pO4esu9eUIAW7qiYIBppv40A==", + "dev": true, "requires": { - "chalk": "^2.0.1" + "loader-utils": "^1.1.0", + "normalize-url": "1.9.1", + "schema-utils": "^1.0.0", + "webpack-sources": "^1.1.0" + }, + "dependencies": { + "schema-utils": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", + "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", + "dev": true, + "requires": { + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" + } + } } }, - "log-update": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/log-update/-/log-update-2.3.0.tgz", - "integrity": "sha1-iDKP19HOeTiykoN0bwsbwSayRwg=", + "mini-store": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/mini-store/-/mini-store-3.0.6.tgz", + "integrity": "sha512-YzffKHbYsMQGUWQRKdsearR79QsMzzJcDDmZKlJBqt5JNkqpyJHYlK6gP61O36X+sLf76sO9G6mhKBe83gIZIQ==", "requires": { - "ansi-escapes": "^3.0.0", - "cli-cursor": "^2.0.0", - "wrap-ansi": "^3.0.1" + "hoist-non-react-statics": "^3.3.2", + "shallowequal": "^1.0.2" } }, - "loglevel": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.7.1.tgz", - "integrity": "sha512-Hesni4s5UkWkwCGJMQGAh71PaLUmKFM60dHvq0zi/vDhhrzuk+4GgNbTXJ12YYQJn6ZKBDNIjYcuQGKudvqrIw==", + "minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", "dev": true }, - "loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "requires": { - "js-tokens": "^3.0.0 || ^4.0.0" - } + "minimalistic-crypto-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", + "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=", + "dev": true }, - "loud-rejection": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz", - "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=", + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", "requires": { - "currently-unhandled": "^0.4.1", - "signal-exit": "^3.0.0" + "brace-expansion": "^1.1.7" } }, - "lower-case": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-1.1.4.tgz", - "integrity": "sha1-miyr0bno4K6ZOkv31YdcOcQujqw=", + "minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", "dev": true }, - "lru-cache": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", - "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", + "minimist-options": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz", + "integrity": "sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==", + "dev": true, "requires": { - "pseudomap": "^1.0.2", - "yallist": "^2.1.2" + "arrify": "^1.0.1", + "is-plain-obj": "^1.1.0", + "kind-of": "^6.0.3" } }, - "make-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", - "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "minipass": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.3.tgz", + "integrity": "sha512-Mgd2GdMVzY+x3IJ+oHnVM+KG3lA5c8tnabyJKmHSaG2kAGpudxuOf8ToDkhumF7UzME7DecbQE9uOZhNm7PuJg==", "dev": true, "requires": { - "pify": "^4.0.1", - "semver": "^5.6.0" + "yallist": "^4.0.0" }, "dependencies": { - "pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true } } }, - "makeerror": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.11.tgz", - "integrity": "sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw=", + "minipass-collect": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz", + "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==", "dev": true, "requires": { - "tmpl": "1.0.x" + "minipass": "^3.0.0" } }, - "map-age-cleaner": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz", - "integrity": "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==", + "minipass-flush": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", + "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", "dev": true, "requires": { - "p-defer": "^1.0.0" - } - }, - "map-cache": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", - "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=" - }, - "map-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", - "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=" - }, - "map-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", - "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", - "requires": { - "object-visit": "^1.0.0" + "minipass": "^3.0.0" } }, - "matcher": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/matcher/-/matcher-1.1.1.tgz", - "integrity": "sha512-+BmqxWIubKTRKNWx/ahnCkk3mG8m7OturVlqq6HiojGJTd5hVYbgZm6WzcYPCoB+KBT4Vd6R7WSRG2OADNaCjg==", + "minipass-pipeline": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", + "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", + "dev": true, "requires": { - "escape-string-regexp": "^1.0.4" + "minipass": "^3.0.0" } }, - "math-random": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/math-random/-/math-random-1.0.4.tgz", - "integrity": "sha512-rUxjysqif/BZQH2yhd5Aaq7vXMSx9NdEsQcyA07uEzIvxgI7zIr33gGsh+RU0/XjmQpCW7RsVof1vlkvQVCK5A==" - }, - "mathjs": { - "version": "5.10.3", - "resolved": "https://registry.npmjs.org/mathjs/-/mathjs-5.10.3.tgz", - "integrity": "sha512-ySjg30BC3dYjQm73ILZtwcWzFJde0VU6otkXW/57IjjuYRa3Qaf0Kb8pydEuBZYtqW2OxreAtsricrAmOj3jIw==", + "mississippi": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-3.0.0.tgz", + "integrity": "sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==", + "dev": true, "requires": { - "complex.js": "2.0.11", - "decimal.js": "10.2.0", - "escape-latex": "1.2.0", - "fraction.js": "4.0.12", - "javascript-natural-sort": "0.7.1", - "seed-random": "2.2.0", - "tiny-emitter": "2.1.0", - "typed-function": "1.1.0" + "concat-stream": "^1.5.0", + "duplexify": "^3.4.2", + "end-of-stream": "^1.1.0", + "flush-write-stream": "^1.0.0", + "from2": "^2.1.0", + "parallel-transform": "^1.1.0", + "pump": "^3.0.0", + "pumpify": "^1.3.3", + "stream-each": "^1.1.0", + "through2": "^2.0.0" } }, - "md5.js": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", - "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", + "mixin-deep": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", + "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", + "dev": true, "requires": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" + "for-in": "^1.0.2", + "is-extendable": "^1.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4" + } + } } }, - "mdn-data": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.4.tgz", - "integrity": "sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==", - "dev": true - }, - "media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" - }, - "mem": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/mem/-/mem-4.3.0.tgz", - "integrity": "sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w==", + "mixin-object": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mixin-object/-/mixin-object-2.0.1.tgz", + "integrity": "sha1-T7lJRB2rGCVA8f4DW6YOGUel5X4=", "dev": true, "requires": { - "map-age-cleaner": "^0.1.1", - "mimic-fn": "^2.0.0", - "p-is-promise": "^2.0.0" + "for-in": "^0.1.3", + "is-extendable": "^0.1.1" }, "dependencies": { - "mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "for-in": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-0.1.8.tgz", + "integrity": "sha1-2Hc5COMSVhCZUrH9ubP6hn0ndeE=", "dev": true } } }, - "memory-fs": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", - "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=", + "mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", "dev": true, "requires": { - "errno": "^0.1.3", - "readable-stream": "^2.0.1" + "minimist": "^1.2.5" + } + }, + "mobile-detect": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/mobile-detect/-/mobile-detect-1.4.2.tgz", + "integrity": "sha1-1F//+NCmQa7svDWhXYgUmjShg1A=" + }, + "moment": { + "version": "2.24.0", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.24.0.tgz", + "integrity": "sha512-bV7f+6l2QigeBBZSM/6yTNq4P2fNpSWj/0e7jQcy87A8e7o2nAfP/34/2ky5Vw4B9S446EtIhodAzkFCcR4dQg==" + }, + "moment-jalaali": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/moment-jalaali/-/moment-jalaali-0.7.2.tgz", + "integrity": "sha512-CO9FG+vuuhzcyboqmocubwmVj0d0Z1QvnU1uNUzuO9ZyyMT7oJAAj1oGC1JvN9PA5GcAhDcrEQkGWim1lfRYYQ==", + "requires": { + "jalaali-js": "^1.0.0", + "moment": "^2.18.1", + "rimraf": "^2.6.1" }, "dependencies": { - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": 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==", - "dev": 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==", - "dev": true, + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", "requires": { - "safe-buffer": "~5.1.0" + "glob": "^7.1.3" } } } }, - "memorystream": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz", - "integrity": "sha1-htcJCzDORV1j+64S3aUaR93K+bI=" - }, - "meow": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz", - "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=", + "moment-timezone": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.21.tgz", + "integrity": "sha512-j96bAh4otsgj3lKydm3K7kdtA3iKf2m6MY2iSYCzCm5a1zmHo1g+aK3068dDEeocLZQIS9kU8bsdQHLqEvgW0A==", "requires": { - "camelcase-keys": "^2.0.0", - "decamelize": "^1.1.2", - "loud-rejection": "^1.0.0", - "map-obj": "^1.0.1", - "minimist": "^1.1.3", - "normalize-package-data": "^2.3.4", - "object-assign": "^4.0.1", - "read-pkg-up": "^1.0.1", - "redent": "^1.0.0", - "trim-newlines": "^1.0.0" + "moment": ">= 2.9.0" } }, - "merge": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/merge/-/merge-1.2.1.tgz", - "integrity": "sha512-VjFo4P5Whtj4vsLzsYBu5ayHhoHJ0UqNm7ibvShmbmoz7tGi0vXaoJbGdB+GmDMLUdg8DpQXEIeVDAe8MaABvQ==", + "moniker": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/moniker/-/moniker-0.1.2.tgz", + "integrity": "sha1-hy37pXXc6o+gSlE1sT1fJL7MyX4=", "dev": true }, - "merge-deep": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/merge-deep/-/merge-deep-3.0.2.tgz", - "integrity": "sha512-T7qC8kg4Zoti1cFd8Cr0M+qaZfOwjlPDEdZIIPPB2JZctjaPM4fX+i7HOId69tAti2fvO6X5ldfYUONDODsrkA==", + "move-concurrently": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz", + "integrity": "sha1-viwAX9oy4LKa8fBdfEszIUxwH5I=", "dev": true, "requires": { - "arr-union": "^3.1.0", - "clone-deep": "^0.2.4", - "kind-of": "^3.0.2" + "aproba": "^1.1.1", + "copy-concurrently": "^1.0.0", + "fs-write-stream-atomic": "^1.0.8", + "mkdirp": "^0.5.1", + "rimraf": "^2.5.4", + "run-queue": "^1.0.3" }, "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", "dev": true, "requires": { - "is-buffer": "^1.1.5" + "glob": "^7.1.3" } } } }, - "merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, - "merge-stream": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-1.0.1.tgz", - "integrity": "sha1-QEEgLVCKNCugAXQAjfDCUbjBNeE=", - "dev": true, - "requires": { - "readable-stream": "^2.0.1" - }, - "dependencies": { - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": 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==", - "dev": 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==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, - "merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true - }, - "methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" - }, - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - } - }, - "miller-rabin": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", - "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", - "dev": true, - "requires": { - "bn.js": "^4.0.0", - "brorand": "^1.0.1" - }, - "dependencies": { - "bn.js": { - "version": "4.11.9", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", - "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==", - "dev": true - } - } - }, - "mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" - }, - "mime-db": { - "version": "1.44.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz", - "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==" - }, - "mime-types": { - "version": "2.1.27", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz", - "integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==", - "requires": { - "mime-db": "1.44.0" - } - }, - "mimic-fn": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", - "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==" - }, - "mini-css-extract-plugin": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-0.5.0.tgz", - "integrity": "sha512-IuaLjruM0vMKhUUT51fQdQzBYTX49dLj8w68ALEAe2A4iYNpIC4eMac67mt3NzycvjOlf07/kYxJDc0RTl1Wqw==", - "dev": true, - "requires": { - "loader-utils": "^1.1.0", - "schema-utils": "^1.0.0", - "webpack-sources": "^1.1.0" - } - }, - "mini-store": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mini-store/-/mini-store-2.0.0.tgz", - "integrity": "sha512-EG0CuwpQmX+XL4QVS0kxNwHW5ftSbhygu1qxQH0pipugjnPkbvkalCdQbEihMwtQY6d3MTN+MS0q+aurs+RfLQ==", - "requires": { - "hoist-non-react-statics": "^2.3.1", - "prop-types": "^15.6.0", - "react-lifecycles-compat": "^3.0.4", - "shallowequal": "^1.0.2" - }, - "dependencies": { - "hoist-non-react-statics": { - "version": "2.5.5", - "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-2.5.5.tgz", - "integrity": "sha512-rqcy4pJo55FTTLWt+bU8ukscqHeE/e9KWvsOW2b/a3afxQZhwkQdT1rPPCJ0rYXdj4vNcasY8zHTH+jF/qStxw==" - } - } - }, - "minimalistic-assert": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" - }, - "minimalistic-crypto-utils": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", - "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=", - "dev": true - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" - }, - "mississippi": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-3.0.0.tgz", - "integrity": "sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==", - "dev": true, - "requires": { - "concat-stream": "^1.5.0", - "duplexify": "^3.4.2", - "end-of-stream": "^1.1.0", - "flush-write-stream": "^1.0.0", - "from2": "^2.1.0", - "parallel-transform": "^1.1.0", - "pump": "^3.0.0", - "pumpify": "^1.3.3", - "stream-each": "^1.1.0", - "through2": "^2.0.0" - } - }, - "mixin-deep": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", - "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", - "requires": { - "for-in": "^1.0.2", - "is-extendable": "^1.0.1" - }, - "dependencies": { - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "requires": { - "is-plain-object": "^2.0.4" - } - } - } - }, - "mixin-object": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/mixin-object/-/mixin-object-2.0.1.tgz", - "integrity": "sha1-T7lJRB2rGCVA8f4DW6YOGUel5X4=", - "dev": true, - "requires": { - "for-in": "^0.1.3", - "is-extendable": "^0.1.1" - }, - "dependencies": { - "for-in": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-0.1.8.tgz", - "integrity": "sha1-2Hc5COMSVhCZUrH9ubP6hn0ndeE=", - "dev": true - } - } - }, - "mkdirp": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", - "requires": { - "minimist": "^1.2.5" - } - }, - "mobile-detect": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/mobile-detect/-/mobile-detect-1.4.2.tgz", - "integrity": "sha1-1F//+NCmQa7svDWhXYgUmjShg1A=" - }, - "moment": { - "version": "2.24.0", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.24.0.tgz", - "integrity": "sha512-bV7f+6l2QigeBBZSM/6yTNq4P2fNpSWj/0e7jQcy87A8e7o2nAfP/34/2ky5Vw4B9S446EtIhodAzkFCcR4dQg==" - }, - "moment-jalaali": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/moment-jalaali/-/moment-jalaali-0.7.2.tgz", - "integrity": "sha512-CO9FG+vuuhzcyboqmocubwmVj0d0Z1QvnU1uNUzuO9ZyyMT7oJAAj1oGC1JvN9PA5GcAhDcrEQkGWim1lfRYYQ==", - "requires": { - "jalaali-js": "^1.0.0", - "moment": "^2.18.1", - "rimraf": "^2.6.1" - } - }, - "moment-timezone": { - "version": "0.5.21", - "resolved": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.21.tgz", - "integrity": "sha512-j96bAh4otsgj3lKydm3K7kdtA3iKf2m6MY2iSYCzCm5a1zmHo1g+aK3068dDEeocLZQIS9kU8bsdQHLqEvgW0A==", - "requires": { - "moment": ">= 2.9.0" - } - }, - "move-concurrently": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz", - "integrity": "sha1-viwAX9oy4LKa8fBdfEszIUxwH5I=", - "dev": true, - "requires": { - "aproba": "^1.1.1", - "copy-concurrently": "^1.0.0", - "fs-write-stream-atomic": "^1.0.8", - "mkdirp": "^0.5.1", - "rimraf": "^2.5.4", - "run-queue": "^1.0.3" - } - }, - "ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" - }, - "multicast-dns": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-6.2.3.tgz", - "integrity": "sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g==", + "multicast-dns": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-6.2.3.tgz", + "integrity": "sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g==", "dev": true, "requires": { "dns-packet": "^1.3.1", @@ -11776,26 +12029,23 @@ "integrity": "sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE=", "dev": true }, - "mutationobserver-shim": { - "version": "0.3.7", - "resolved": "https://registry.npmjs.org/mutationobserver-shim/-/mutationobserver-shim-0.3.7.tgz", - "integrity": "sha512-oRIDTyZQU96nAiz2AQyngwx1e89iApl2hN5AOYwyxLUB47UYsU3Wv9lJWqH5y/QdiYkc5HQLi23ZNB3fELdHcQ==" - }, "mute-stream": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", - "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=", + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", + "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", "dev": true }, "nan": { - "version": "2.14.2", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.2.tgz", - "integrity": "sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ==" + "version": "2.14.1", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.1.tgz", + "integrity": "sha512-isWHgVjnFjh2x2yuJ/tj3JbwoHu3UC2dX5G/88Cm24yB6YopVgxvBObDY7n5xW6ExmFhJpSEQqFPvq9zaXc8Jw==", + "dev": true }, "nanomatch": { "version": "1.2.13", "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", + "dev": true, "requires": { "arr-diff": "^4.0.0", "array-unique": "^0.3.2", @@ -11816,10 +12066,17 @@ "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", "dev": true }, + "ncp": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/ncp/-/ncp-0.4.2.tgz", + "integrity": "sha1-q8xsvT7C7Spyn/bnwfqPAXhKhXQ=", + "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==" + "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==", + "dev": true }, "neo-async": { "version": "2.6.2", @@ -11827,18 +12084,37 @@ "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", "dev": true }, + "nested-error-stacks": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/nested-error-stacks/-/nested-error-stacks-2.1.0.tgz", + "integrity": "sha512-AO81vsIO1k1sM4Zrd6Hu7regmJN1NSiAja10gc4bX3F0wd+9rQmcuHQaHVQCYIEC8iFXnE+mavh23GOt7wBgug==", + "dev": true + }, + "netrc": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/netrc/-/netrc-0.1.4.tgz", + "integrity": "sha1-a+lPysqNd63gqWcNxGCRTJRHJEQ=", + "dev": true + }, + "next-tick": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz", + "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=", + "dev": true + }, "nice-try": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==" }, "no-case": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/no-case/-/no-case-2.3.2.tgz", - "integrity": "sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.3.tgz", + "integrity": "sha512-ehY/mVQCf9BL0gKfsJBvFJen+1V//U+0HQMPrWct40ixE4jnv0bfvxDbWtAHL9EcaPEOJHVVYKoQn1TlZUB8Tw==", "dev": true, "requires": { - "lower-case": "^1.1.1" + "lower-case": "^2.0.1", + "tslib": "^1.10.0" } }, "node-fetch": { @@ -11851,15 +12127,16 @@ } }, "node-forge": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.10.0.tgz", - "integrity": "sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA==", + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.9.0.tgz", + "integrity": "sha512-7ASaDa3pD+lJ3WvXFsxekJQelBKRpne+GOVbLbtHYdd7pFspyeuJHnWfLplGf3SwKGbfs/aYl5V/JCIaHVUKKQ==", "dev": true }, "node-gyp": { "version": "3.8.0", "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-3.8.0.tgz", "integrity": "sha512-3g8lYefrRRzvGeSowdJKAKyks8oUpLEd/DyPV4eMhVlhJ0aNaZqIrNUIPuEWWTAoPqyFkfGrM67MC69baqn6vA==", + "dev": true, "requires": { "fstream": "^1.0.0", "glob": "^7.0.3", @@ -11875,10 +12152,20 @@ "which": "1" }, "dependencies": { + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, "semver": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz", - "integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8=" + "integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8=", + "dev": true } } }, @@ -11967,9 +12254,32 @@ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", "dev": true + }, + "util": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/util/-/util-0.11.1.tgz", + "integrity": "sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==", + "dev": true, + "requires": { + "inherits": "2.0.3" + }, + "dependencies": { + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + } + } } } }, + "node-modules-regexp": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz", + "integrity": "sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA=", + "dev": true + }, "node-notifier": { "version": "5.4.3", "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-5.4.3.tgz", @@ -11984,15 +12294,16 @@ } }, "node-releases": { - "version": "1.1.67", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.67.tgz", - "integrity": "sha512-V5QF9noGFl3EymEwUYzO+3NTDpGfQB4ve6Qfnzf3UNydMhjQRVPR1DZTuvWiLzaFJYw2fmDwAfnRNEVb64hSIg==", + "version": "1.1.60", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.60.tgz", + "integrity": "sha512-gsO4vjEdQaTusZAEebUWp2a5d7dF5DYoIpDG7WySnk7BuZDW+GPpHXoXXuYawRBr/9t5q54tirPz79kFIWg4dA==", "dev": true }, "node-sass": { "version": "4.14.1", "resolved": "https://registry.npmjs.org/node-sass/-/node-sass-4.14.1.tgz", "integrity": "sha512-sjCuOlvGyCJS40R8BscF5vhVlQjNN069NtQ1gSxyK1u9iqvn6tf7O1R4GNowVZfiZUCRt5MmMs1xd+4V/7Yr0g==", + "dev": true, "requires": { "async-foreach": "^0.1.3", "chalk": "^1.1.1", @@ -12016,12 +12327,14 @@ "ansi-styles": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=" + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true }, "chalk": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, "requires": { "ansi-styles": "^2.2.1", "escape-string-regexp": "^1.0.2", @@ -12034,6 +12347,7 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-3.0.1.tgz", "integrity": "sha1-ElYDfsufDF9549bvE14wdwGEuYI=", + "dev": true, "requires": { "lru-cache": "^4.0.1", "which": "^1.2.9" @@ -12042,12 +12356,14 @@ "get-stdin": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", - "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=" + "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=", + "dev": true }, "sass-graph": { "version": "2.2.5", "resolved": "https://registry.npmjs.org/sass-graph/-/sass-graph-2.2.5.tgz", "integrity": "sha512-VFWDAHOe6mRuT4mZRd4eKE+d8Uedrk6Xnh7Sh9b4NGufQLQjOrvf/MQoOdx+0s92L89FeyUUNfU597j/3uNpag==", + "dev": true, "requires": { "glob": "^7.0.0", "lodash": "^4.0.0", @@ -12058,29 +12374,131 @@ "supports-color": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true } } }, "node-sass-chokidar": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/node-sass-chokidar/-/node-sass-chokidar-1.3.4.tgz", - "integrity": "sha512-AEKBr58QFzU37Ubud90K1n+ljEpTDekJm5UCS8ZyoWgHoz2qx8f2vAaN8rECbqF1vYPid64NZBh98AKzHh9D9A==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/node-sass-chokidar/-/node-sass-chokidar-1.5.0.tgz", + "integrity": "sha512-Ss7PbeKd1OmJGzWVObBjoYeqgVIi0S0w7b9Ryx+cC2+c2UwU2VL4ODxLJoXC8LBzMJNmKHlCHQ1gRRNXQRTLjQ==", + "dev": true, "requires": { "async-foreach": "^0.1.3", - "chokidar": "^2.0.4", + "chokidar": "^3.4.0", "get-stdin": "^4.0.1", "glob": "^7.0.3", "meow": "^3.7.0", - "node-sass": "^4.9.3", - "sass-graph": "^2.1.1", + "node-sass": "^4.14.1", + "sass-graph": "^2.2.4", "stdout-stream": "^1.4.0" }, "dependencies": { + "anymatch": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz", + "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==", + "dev": true, + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "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==", + "dev": true + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "requires": { + "fill-range": "^7.0.1" + } + }, + "chokidar": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.4.3.tgz", + "integrity": "sha512-DtM3g7juCXQxFVSNPNByEC2+NImtBuxQQvWlHunpJIS5Ocr0lG306cC7FCi7cEA0fzmybPUIl4txBIobk1gGOQ==", + "dev": true, + "requires": { + "anymatch": "~3.1.1", + "braces": "~3.0.2", + "fsevents": "~2.1.2", + "glob-parent": "~5.1.0", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.5.0" + } + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "fsevents": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz", + "integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==", + "dev": true, + "optional": true + }, "get-stdin": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", - "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=" + "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=", + "dev": true + }, + "glob-parent": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", + "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + }, + "is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "requires": { + "binary-extensions": "^2.0.0" + } + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true + }, + "readdirp": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.5.0.tgz", + "integrity": "sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==", + "dev": true, + "requires": { + "picomatch": "^2.2.1" + } + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "requires": { + "is-number": "^7.0.0" + } } } }, @@ -12088,6 +12506,7 @@ "version": "3.0.6", "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=", + "dev": true, "requires": { "abbrev": "1" } @@ -12106,7 +12525,8 @@ "normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true }, "normalize-range": { "version": "0.1.2", @@ -12115,24 +12535,34 @@ "dev": true }, "normalize-url": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-3.3.0.tgz", - "integrity": "sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg==", - "dev": true + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-1.9.1.tgz", + "integrity": "sha1-LMDWazHqIwNkWENuNiDYWVTGbDw=", + "dev": true, + "requires": { + "object-assign": "^4.0.1", + "prepend-http": "^1.0.0", + "query-string": "^4.1.0", + "sort-keys": "^1.0.0" + }, + "dependencies": { + "query-string": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/query-string/-/query-string-4.3.4.tgz", + "integrity": "sha1-u7aTucqRXCMlFbIosaArYJBD2+s=", + "dev": true, + "requires": { + "object-assign": "^4.1.0", + "strict-uri-encode": "^1.0.0" + } + } + } }, "normalize.css": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/normalize.css/-/normalize.css-7.0.0.tgz", "integrity": "sha1-q/sd2CRwZ04DIrU86xqvQSk45L8=" }, - "npm-path": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/npm-path/-/npm-path-2.0.4.tgz", - "integrity": "sha512-IFsj0R9C7ZdR5cP+ET342q77uSRdtWOlWpih5eC+lu29tIDbNEgDbzgVJ5UFvYHWhxDZ5TFkJafFioO0pPQjCw==", - "requires": { - "which": "^1.2.10" - } - }, "npm-run-all": { "version": "4.1.5", "resolved": "https://registry.npmjs.org/npm-run-all/-/npm-run-all-4.1.5.tgz", @@ -12189,24 +12619,16 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", + "dev": true, "requires": { "path-key": "^2.0.0" } }, - "npm-which": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/npm-which/-/npm-which-3.0.1.tgz", - "integrity": "sha1-kiXybsOihcIJyuZ8OxGmtKtxQKo=", - "requires": { - "commander": "^2.9.0", - "npm-path": "^2.0.2", - "which": "^1.2.10" - } - }, "npmlog": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", + "dev": true, "requires": { "are-we-there-yet": "~1.1.2", "console-control-strings": "~1.1.0", @@ -12232,18 +12654,14 @@ "number-is-nan": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=" + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", + "dev": true }, "numbro": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/numbro/-/numbro-1.11.1.tgz", "integrity": "sha512-qL0Etqbunz4RtPx4bNjMONe9HyUpgbrM4Sa3VpWY5oRdp9ry5DufAj6lCvnIcluRBA9QUacrllYc73QK0G6VAw==" }, - "nwmatcher": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/nwmatcher/-/nwmatcher-1.4.4.tgz", - "integrity": "sha512-3iuY4N5dhgMpCUrOVnuAdGrgxVqV2cJpM+XNccjR2DKOB1RUP0aA+wGXEiNziG/UKboFyGBIoKOaNlJxx8bciQ==" - }, "nwsapi": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.0.tgz", @@ -12253,22 +12671,19 @@ "oauth-sign": { "version": "0.9.0", "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", - "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==" + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", + "dev": true }, "object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" }, - "object-component": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/object-component/-/object-component-0.0.3.tgz", - "integrity": "sha1-8MaapQ78lbhmwYb0AKM3acsvEpE=" - }, "object-copy": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", + "dev": true, "requires": { "copy-descriptor": "^0.1.0", "define-property": "^0.2.5", @@ -12279,6 +12694,7 @@ "version": "0.2.5", "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, "requires": { "is-descriptor": "^0.1.0" } @@ -12287,6 +12703,7 @@ "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, "requires": { "is-buffer": "^1.1.5" } @@ -12294,23 +12711,23 @@ } }, "object-hash": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-1.3.1.tgz", - "integrity": "sha512-OSuu/pU4ENM9kmREg0BdNrUDIl1heYa4mBZacJc+vVWz4GtAwu7jO8s4AIt2aGRUTqxykpWzI3Oqnsm13tTMDA==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-2.0.3.tgz", + "integrity": "sha512-JPKn0GMu+Fa3zt3Bmr66JhokJU5BaNBIh4ZeTlaCBzrBsOeXzwcKKAK1tbLiPKgvwmPXsDvvLHoWh5Bm7ofIYg==", "dev": true }, "object-inspect": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.9.0.tgz", - "integrity": "sha512-i3Bp9iTqwhaLZBxGkRfo5ZbE07BQRT7MGu8+nNgwW9ItGp1TzCTw2DLEoWwjClxBjOFI/hWljTAmYGCEwmtnOw==" + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.8.0.tgz", + "integrity": "sha512-jLdtEOB112fORuypAyl/50VRVIBIdVQOSUUGQHzJ4xBSbit81zRarz7GThkEFZy1RceYrWYcPcBFPQwHyAc1gA==" }, "object-is": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.4.tgz", - "integrity": "sha512-1ZvAZ4wlF7IyPVOcE1Omikt7UpaFlOQq0HlSti+ZvDH3UiD2brwGMwDbyV43jao2bKJ+4+WdPJHSd7kgzKYVqg==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.2.tgz", + "integrity": "sha512-5lHCz+0uufF6wZ7CRFWJN3hp8Jqblpgve06U5CMQ3f//6iDjPr2PEo9MWCjEssDsa+UZEL4PkFpr+BMop6aKzQ==", "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3" + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5" } }, "object-keys": { @@ -12318,84 +12735,81 @@ "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" }, + "object-path": { + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/object-path/-/object-path-0.11.4.tgz", + "integrity": "sha1-NwrnUvvzfePqcKhhwju6iRVpGUk=", + "dev": true + }, "object-visit": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", + "dev": true, "requires": { "isobject": "^3.0.0" } }, "object.assign": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", - "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", + "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "has-symbols": "^1.0.1", - "object-keys": "^1.1.1" + "define-properties": "^1.1.2", + "function-bind": "^1.1.1", + "has-symbols": "^1.0.0", + "object-keys": "^1.0.11" } }, "object.entries": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.3.tgz", - "integrity": "sha512-ym7h7OZebNS96hn5IJeyUmaWhaSM4SVtAPPfNLQEI2MYWCO2egsITb9nab2+i/Pwibx+R0mtn+ltKJXRSeTMGg==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.2.tgz", + "integrity": "sha512-BQdB9qKmb/HyNdMNWVr7O3+z5MUIx3aiegEIJqjMBbBf0YT9RRxTJSim4mzFqtyr7PDAHigq0N9dO0m0tRakQA==", "requires": { - "call-bind": "^1.0.0", "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.1", + "es-abstract": "^1.17.5", "has": "^1.0.3" } }, "object.fromentries": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.3.tgz", - "integrity": "sha512-IDUSMXs6LOSJBWE++L0lzIbSqHl9KDCfff2x/JSEIDtEUavUnyMYC2ZGay/04Zq4UT8lvd4xNhU4/YHKibAOlw==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.2.tgz", + "integrity": "sha512-r3ZiBH7MQppDJVLx6fhD618GKNG40CZYH9wgwdhKxBDDbQgjeWGGd4AtkZad84d291YxvWe7bJGuE65Anh0dxQ==", "dev": true, "requires": { - "call-bind": "^1.0.0", "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.1", + "es-abstract": "^1.17.0-next.1", + "function-bind": "^1.1.1", "has": "^1.0.3" } }, "object.getownpropertydescriptors": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.1.tgz", - "integrity": "sha512-6DtXgZ/lIZ9hqx4GtZETobXLR/ZLaa0aqV0kzbn80Rf8Z2e/XFnhA0I7p07N2wH8bBBltr2xQPi6sbKWAY2Eng==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.0.tgz", + "integrity": "sha512-Z53Oah9A3TdLoblT7VKJaTDdXdT+lQO+cNpKVnya5JDe9uLvzu1YyY1yFDFrcxrlRgWrEFH0jJtD/IbuwjcEVg==", "dev": true, "requires": { - "call-bind": "^1.0.0", "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.1" - } - }, - "object.omit": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz", - "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=", - "requires": { - "for-own": "^0.1.4", - "is-extendable": "^0.1.1" + "es-abstract": "^1.17.0-next.1" } }, "object.pick": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", + "dev": true, "requires": { "isobject": "^3.0.1" } }, "object.values": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.2.tgz", - "integrity": "sha512-MYC0jvJopr8EK6dPBiO8Nb9mvjdypOachO5REGk6MXzujbBrAisKo3HmdEI6kZDL6fC31Mwee/5YbtMebixeag==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.1.tgz", + "integrity": "sha512-WTa54g2K8iu0kmS/us18jEmdv1a4Wi//BZ/DTVYEcH0XhLM5NYdpDHja3gt57VrZLcNAO2WGA+KpWsDBaHt6eA==", "requires": { - "call-bind": "^1.0.0", "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.1", + "es-abstract": "^1.17.0-next.1", + "function-bind": "^1.1.1", "has": "^1.0.3" } }, @@ -12417,6 +12831,7 @@ "version": "2.3.0", "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "dev": true, "requires": { "ee-first": "1.1.1" } @@ -12439,26 +12854,54 @@ "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" } }, + "open": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/open/-/open-7.1.0.tgz", + "integrity": "sha512-lLPI5KgOwEYCDKXf4np7y1PBEkj7HYIyP2DY8mVDRnx0VIIu6bNrRB0R66TuO7Mack6EnTNLm4uvcl1UoklTpA==", + "dev": true, + "requires": { + "is-docker": "^2.0.0", + "is-wsl": "^2.1.1" + }, + "dependencies": { + "is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "dev": true, + "requires": { + "is-docker": "^2.0.0" + } + } + } + }, + "opencollective-postinstall": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/opencollective-postinstall/-/opencollective-postinstall-2.0.3.tgz", + "integrity": "sha512-8AV/sCtuzUeTo8gQK5qDZzARrulB3egtLzFgteqB2tcT4Mw7B8Kt7JcDHmltjz6FOAHsvTevk70gZEbhM4ZS9Q==", + "dev": true + }, "opn": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/opn/-/opn-5.4.0.tgz", - "integrity": "sha512-YF9MNdVy/0qvJvDtunAOzFw9iasOQHpVthTCvGzxt61Il64AYSGdK+rYwld7NAfk9qJ7dt+hymBNSc9LNYS+Sw==", + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/opn/-/opn-5.5.0.tgz", + "integrity": "sha512-PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA==", "dev": true, "requires": { "is-wsl": "^1.1.0" } }, "optimize-css-assets-webpack-plugin": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/optimize-css-assets-webpack-plugin/-/optimize-css-assets-webpack-plugin-5.0.1.tgz", - "integrity": "sha512-Rqm6sSjWtx9FchdP0uzTQDc7GXDKnwVEGoSxjezPkzMewx7gEWE9IMUYKmigTRC4U3RaNSwYVnUDLuIdtTpm0A==", + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/optimize-css-assets-webpack-plugin/-/optimize-css-assets-webpack-plugin-5.0.3.tgz", + "integrity": "sha512-q9fbvCRS6EYtUKKSwI87qm2IxlyJK5b4dygW1rKUBT6mMDhdG5e5bZT63v6tnJR9F9FB/H5a0HTmtw+laUBxKA==", "dev": true, "requires": { - "cssnano": "^4.1.0", + "cssnano": "^4.1.10", "last-call-webpack-plugin": "^3.0.0" } }, @@ -12466,6 +12909,7 @@ "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", @@ -12493,12 +12937,14 @@ "os-homedir": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", - "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=" + "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", + "dev": true }, "os-locale": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=", + "dev": true, "requires": { "lcid": "^1.0.0" } @@ -12506,38 +12952,82 @@ "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=" + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", + "dev": true }, "osenv": { "version": "0.1.5", "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", + "dev": true, "requires": { "os-homedir": "^1.0.0", "os-tmpdir": "^1.0.0" } }, - "p-defer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz", - "integrity": "sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=", - "dev": true + "p-all": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-all/-/p-all-2.1.0.tgz", + "integrity": "sha512-HbZxz5FONzz/z2gJfk6bFca0BCiSRF8jU3yCsWOen/vR6lZjfPOu/e7L3uFzTW1i0H8TlC3vqQstEJPQL4/uLA==", + "dev": true, + "requires": { + "p-map": "^2.0.0" + }, + "dependencies": { + "p-map": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz", + "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==", + "dev": true + } + } }, - "p-finally": { + "p-each-series": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=" - }, - "p-is-promise": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-2.1.0.tgz", - "integrity": "sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg==", - "dev": true + "resolved": "https://registry.npmjs.org/p-each-series/-/p-each-series-1.0.0.tgz", + "integrity": "sha1-kw89Et0fUOdDRFeiLNbwSsatf3E=", + "dev": true, + "requires": { + "p-reduce": "^1.0.0" + } + }, + "p-event": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/p-event/-/p-event-4.2.0.tgz", + "integrity": "sha512-KXatOjCRXXkSePPb1Nbi0p0m+gQAwdlbhi4wQKJPI1HsMQS9g+Sqp2o+QHziPr7eYJyOZet836KoHEVM1mwOrQ==", + "dev": true, + "requires": { + "p-timeout": "^3.1.0" + } + }, + "p-filter": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-filter/-/p-filter-2.1.0.tgz", + "integrity": "sha512-ZBxxZ5sL2HghephhpGAQdoskxplTwr7ICaehZwLIlfL6acuVgZPm8yBNuRAFBGEqtD/hmUeq9eqLg2ys9Xr/yw==", + "dev": true, + "requires": { + "p-map": "^2.0.0" + }, + "dependencies": { + "p-map": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz", + "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==", + "dev": true + } + } + }, + "p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", + "dev": true }, "p-limit": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, "requires": { "p-try": "^2.0.0" } @@ -12546,19 +13036,49 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, "requires": { "p-limit": "^2.0.0" } }, "p-map": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-1.2.0.tgz", - "integrity": "sha512-r6zKACMNhjPJMTl8KcFH4li//gkrXWfbD6feV8l6doRHlzljFWGJ2AP6iKaCJXyZmAUMOPtvbW7EXkbWO/pLEA==" + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "dev": true, + "requires": { + "aggregate-error": "^3.0.0" + } + }, + "p-reduce": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-reduce/-/p-reduce-1.0.0.tgz", + "integrity": "sha1-GMKw3ZNqRpClKfgjH1ig/bakffo=", + "dev": true + }, + "p-retry": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-3.0.1.tgz", + "integrity": "sha512-XE6G4+YTTkT2a0UWb2kjZe8xNwf8bIbnqpc/IS/idOBVhyves0mK5OJgeocjx7q5pvX/6m23xuzVPYT1uGM73w==", + "dev": true, + "requires": { + "retry": "^0.12.0" + } + }, + "p-timeout": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-3.2.0.tgz", + "integrity": "sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==", + "dev": true, + "requires": { + "p-finally": "^1.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==" + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true }, "pako": { "version": "1.0.11", @@ -12610,12 +13130,13 @@ } }, "param-case": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/param-case/-/param-case-2.1.1.tgz", - "integrity": "sha1-35T9jPZTHs915r75oIWPvHK+Ikc=", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.3.tgz", + "integrity": "sha512-VWBVyimc1+QrzappRs7waeN2YmoZFCGXWASRYX1/rGHtXqEcrGEIDm+jqIwFa2fRXNgQEwrxaYuIrX0WcAguTA==", "dev": true, "requires": { - "no-case": "^2.2.0" + "dot-case": "^3.0.3", + "tslib": "^1.10.0" } }, "parent-module": { @@ -12648,32 +13169,6 @@ "safe-buffer": "^5.1.1" } }, - "parse-glob": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz", - "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=", - "requires": { - "glob-base": "^0.3.0", - "is-dotfile": "^1.0.0", - "is-extglob": "^1.0.0", - "is-glob": "^2.0.0" - }, - "dependencies": { - "is-extglob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", - "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=" - }, - "is-glob": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", - "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", - "requires": { - "is-extglob": "^1.0.0" - } - } - } - }, "parse-json": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", @@ -12683,36 +13178,27 @@ "json-parse-better-errors": "^1.0.1" } }, - "parse5": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-1.5.1.tgz", - "integrity": "sha1-m387DeMr543CQBsXVzzK8Pb1nZQ=" - }, - "parseqs": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.5.tgz", - "integrity": "sha1-1SCKNzjkZ2bikbouoXNoSSGouJ0=", - "requires": { - "better-assert": "~1.0.0" - } - }, - "parseuri": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.5.tgz", - "integrity": "sha1-gCBKUNTbt3m/3G6+J3jZDkvOMgo=", - "requires": { - "better-assert": "~1.0.0" - } - }, "parseurl": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "dev": true + }, + "pascal-case": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.1.tgz", + "integrity": "sha512-XIeHKqIrsquVTQL2crjq3NfJUxmdLasn3TYOU0VBM+UX2a6ztAWBlJQBePLGY7VHW8+2dRadeIPK5+KImwTxQA==", + "dev": true, + "requires": { + "no-case": "^3.0.3", + "tslib": "^1.10.0" + } }, "pascalcase": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", - "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=" + "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", + "dev": true }, "path-browserify": { "version": "0.0.1", @@ -12723,12 +13209,14 @@ "path-dirname": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", - "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=" + "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=", + "dev": true }, "path-exists": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=" + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true }, "path-is-absolute": { "version": "1.0.1", @@ -12738,7 +13226,8 @@ "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=" + "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", + "dev": true }, "path-key": { "version": "2.0.1", @@ -12753,12 +13242,14 @@ "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=" + "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=", + "dev": true }, "path-type": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", + "dev": true, "requires": { "graceful-fs": "^4.1.2", "pify": "^2.0.0", @@ -12768,7 +13259,8 @@ "pify": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=" + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true } } }, @@ -12794,8 +13286,7 @@ "version": "2.2.2", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==", - "dev": true, - "optional": true + "dev": true }, "pidtree": { "version": "0.3.1", @@ -12810,92 +13301,60 @@ "pinkie": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", - "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=" + "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", + "dev": true }, "pinkie-promise": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", + "dev": true, "requires": { "pinkie": "^2.0.0" } }, + "pirates": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.1.tgz", + "integrity": "sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA==", + "dev": true, + "requires": { + "node-modules-regexp": "^1.0.0" + } + }, "pkg-dir": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", + "dev": true, "requires": { "find-up": "^3.0.0" } }, "pkg-up": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-2.0.0.tgz", - "integrity": "sha1-yBmscoBZpGHKscOImivjxJoATX8=", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-3.1.0.tgz", + "integrity": "sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==", "dev": true, "requires": { - "find-up": "^2.1.0" - }, - "dependencies": { - "find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", - "dev": true, - "requires": { - "locate-path": "^2.0.0" - } - }, - "locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", - "dev": true, - "requires": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" - } - }, - "p-limit": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", - "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", - "dev": true, - "requires": { - "p-try": "^1.0.0" - } - }, - "p-locate": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", - "dev": true, - "requires": { - "p-limit": "^1.1.0" - } - }, - "p-try": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", - "dev": true - } + "find-up": "^3.0.0" } }, + "pkginfo": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/pkginfo/-/pkginfo-0.4.1.tgz", + "integrity": "sha1-tUGO8EOd5UJfxJlQQtztFPsqhP8=", + "dev": true + }, "please-upgrade-node": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/please-upgrade-node/-/please-upgrade-node-3.2.0.tgz", "integrity": "sha512-gQR3WpIgNIKwBMVLkpMUeR3e1/E1y42bqDQZfql+kDeXd8COYfM8PQA4X6y7a8u9Ua9FHmsrrmirW2vHs45hWg==", + "dev": true, "requires": { "semver-compare": "^1.0.0" } }, - "pluralize": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-7.0.0.tgz", - "integrity": "sha512-ARhBOdzS3e41FbkW/XWrTEtukqqLoK5+Z/4UeDaLuSW+39JPeFgs4gCGqsrJHVZX0fUrx//4OF0K1CUGwlIFow==", - "dev": true - }, "pn": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/pn/-/pn-1.1.0.tgz", @@ -12903,12 +13362,12 @@ "dev": true }, "pnp-webpack-plugin": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/pnp-webpack-plugin/-/pnp-webpack-plugin-1.2.1.tgz", - "integrity": "sha512-W6GctK7K2qQiVR+gYSv/Gyt6jwwIH4vwdviFqx+Y2jAtVf5eZyYIDf5Ac2NCDMBiX5yWscBLZElPTsyA1UtVVA==", + "version": "1.6.4", + "resolved": "https://registry.npmjs.org/pnp-webpack-plugin/-/pnp-webpack-plugin-1.6.4.tgz", + "integrity": "sha512-7Wjy+9E3WwLOEL30D+m8TSTF7qJJUJLONBnwQp0518siuMxUQUbgZwssaFX+QKlZkjHZcw/IpZCt/H0srrntSg==", "dev": true, "requires": { - "ts-pnp": "^1.0.0" + "ts-pnp": "^1.1.6" } }, "portfinder": { @@ -12925,17 +13384,18 @@ "posix-character-classes": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", - "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=" + "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", + "dev": true }, "postcss": { - "version": "6.0.23", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", - "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", + "version": "7.0.32", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.32.tgz", + "integrity": "sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw==", "dev": true, "requires": { - "chalk": "^2.4.1", + "chalk": "^2.4.2", "source-map": "^0.6.1", - "supports-color": "^5.4.0" + "supports-color": "^6.1.0" }, "dependencies": { "source-map": { @@ -12943,6 +13403,15 @@ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } } } }, @@ -12954,40 +13423,21 @@ "requires": { "postcss": "^7.0.2", "postcss-selector-parser": "^6.0.2" - }, - "dependencies": { - "postcss": { - "version": "7.0.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", - "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", - "dev": true, - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } + } + }, + "postcss-browser-comments": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-browser-comments/-/postcss-browser-comments-3.0.0.tgz", + "integrity": "sha512-qfVjLfq7HFd2e0HW4s1dvU8X080OZdG46fFbIBFjW7US7YPDcWfRvdElvwMJr2LI6hMmD+7LnH2HcmXTs+uOig==", + "dev": true, + "requires": { + "postcss": "^7" } }, "postcss-calc": { - "version": "7.0.5", - "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-7.0.5.tgz", - "integrity": "sha512-1tKHutbGtLtEZF6PT4JSihCHfIVldU72mZ8SdZHIYriIZ9fh9k9aWSppaT8rHsyI3dX+KSR+W+Ix9BMY3AODrg==", + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-7.0.3.tgz", + "integrity": "sha512-IB/EAEmZhIMEIhG7Ov4x+l47UaXOS1n2f4FBUk/aKllQhtSCxWhTzn0nJgkqN7fo/jcWySvWTSB6Syk9L+31bA==", "dev": true, "requires": { "postcss": "^7.0.27", @@ -12995,37 +13445,11 @@ "postcss-value-parser": "^4.0.2" }, "dependencies": { - "postcss": { - "version": "7.0.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", - "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", - "dev": true, - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, "postcss-value-parser": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz", "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==", "dev": true - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } } } }, @@ -13037,34 +13461,6 @@ "requires": { "postcss": "^7.0.2", "postcss-values-parser": "^2.0.0" - }, - "dependencies": { - "postcss": { - "version": "7.0.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", - "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", - "dev": true, - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } } }, "postcss-color-gray": { @@ -13076,34 +13472,6 @@ "@csstools/convert-colors": "^1.4.0", "postcss": "^7.0.5", "postcss-values-parser": "^2.0.0" - }, - "dependencies": { - "postcss": { - "version": "7.0.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", - "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", - "dev": true, - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } } }, "postcss-color-hex-alpha": { @@ -13114,34 +13482,6 @@ "requires": { "postcss": "^7.0.14", "postcss-values-parser": "^2.0.1" - }, - "dependencies": { - "postcss": { - "version": "7.0.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", - "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", - "dev": true, - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } } }, "postcss-color-mod-function": { @@ -13153,34 +13493,6 @@ "@csstools/convert-colors": "^1.4.0", "postcss": "^7.0.2", "postcss-values-parser": "^2.0.0" - }, - "dependencies": { - "postcss": { - "version": "7.0.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", - "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", - "dev": true, - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } } }, "postcss-color-rebeccapurple": { @@ -13191,34 +13503,6 @@ "requires": { "postcss": "^7.0.2", "postcss-values-parser": "^2.0.0" - }, - "dependencies": { - "postcss": { - "version": "7.0.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", - "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", - "dev": true, - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } } }, "postcss-colormin": { @@ -13232,34 +13516,6 @@ "has": "^1.0.0", "postcss": "^7.0.0", "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "postcss": { - "version": "7.0.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", - "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", - "dev": true, - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } } }, "postcss-convert-values": { @@ -13270,34 +13526,6 @@ "requires": { "postcss": "^7.0.0", "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "postcss": { - "version": "7.0.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", - "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", - "dev": true, - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } } }, "postcss-custom-media": { @@ -13307,34 +13535,6 @@ "dev": true, "requires": { "postcss": "^7.0.14" - }, - "dependencies": { - "postcss": { - "version": "7.0.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", - "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", - "dev": true, - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } } }, "postcss-custom-properties": { @@ -13345,34 +13545,6 @@ "requires": { "postcss": "^7.0.17", "postcss-values-parser": "^2.0.1" - }, - "dependencies": { - "postcss": { - "version": "7.0.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", - "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", - "dev": true, - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } } }, "postcss-custom-selectors": { @@ -13391,17 +13563,6 @@ "integrity": "sha512-MsCAG1z9lPdoO/IUMLSBWBSVxVtJ1395VGIQ+Fc2gNdkQ1hNDnQdw3YhA71WJCBW1vdwA0cAnk/DnW6bqoEUYg==", "dev": true }, - "postcss": { - "version": "7.0.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", - "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", - "dev": true, - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, "postcss-selector-parser": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz", @@ -13412,21 +13573,6 @@ "indexes-of": "^1.0.1", "uniq": "^1.0.1" } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } } } }, @@ -13446,17 +13592,6 @@ "integrity": "sha512-MsCAG1z9lPdoO/IUMLSBWBSVxVtJ1395VGIQ+Fc2gNdkQ1hNDnQdw3YhA71WJCBW1vdwA0cAnk/DnW6bqoEUYg==", "dev": true }, - "postcss": { - "version": "7.0.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", - "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", - "dev": true, - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, "postcss-selector-parser": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz", @@ -13467,21 +13602,6 @@ "indexes-of": "^1.0.1", "uniq": "^1.0.1" } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } } } }, @@ -13492,34 +13612,6 @@ "dev": true, "requires": { "postcss": "^7.0.0" - }, - "dependencies": { - "postcss": { - "version": "7.0.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", - "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", - "dev": true, - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } } }, "postcss-discard-duplicates": { @@ -13529,34 +13621,6 @@ "dev": true, "requires": { "postcss": "^7.0.0" - }, - "dependencies": { - "postcss": { - "version": "7.0.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", - "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", - "dev": true, - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } } }, "postcss-discard-empty": { @@ -13566,34 +13630,6 @@ "dev": true, "requires": { "postcss": "^7.0.0" - }, - "dependencies": { - "postcss": { - "version": "7.0.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", - "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", - "dev": true, - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } } }, "postcss-discard-overridden": { @@ -13603,34 +13639,6 @@ "dev": true, "requires": { "postcss": "^7.0.0" - }, - "dependencies": { - "postcss": { - "version": "7.0.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", - "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", - "dev": true, - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } } }, "postcss-double-position-gradients": { @@ -13641,34 +13649,6 @@ "requires": { "postcss": "^7.0.5", "postcss-values-parser": "^2.0.0" - }, - "dependencies": { - "postcss": { - "version": "7.0.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", - "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", - "dev": true, - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } } }, "postcss-env-function": { @@ -13679,34 +13659,6 @@ "requires": { "postcss": "^7.0.2", "postcss-values-parser": "^2.0.0" - }, - "dependencies": { - "postcss": { - "version": "7.0.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", - "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", - "dev": true, - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } } }, "postcss-flexbugs-fixes": { @@ -13716,34 +13668,6 @@ "dev": true, "requires": { "postcss": "^7.0.0" - }, - "dependencies": { - "postcss": { - "version": "7.0.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", - "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", - "dev": true, - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } } }, "postcss-focus-visible": { @@ -13753,34 +13677,6 @@ "dev": true, "requires": { "postcss": "^7.0.2" - }, - "dependencies": { - "postcss": { - "version": "7.0.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", - "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", - "dev": true, - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } } }, "postcss-focus-within": { @@ -13790,71 +13686,15 @@ "dev": true, "requires": { "postcss": "^7.0.2" - }, - "dependencies": { - "postcss": { - "version": "7.0.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", - "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", - "dev": true, - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } } }, "postcss-font-variant": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-font-variant/-/postcss-font-variant-4.0.1.tgz", - "integrity": "sha512-I3ADQSTNtLTTd8uxZhtSOrTCQ9G4qUVKPjHiDk0bV75QSxXjVWiJVJ2VLdspGUi9fbW9BcjKJoRvxAH1pckqmA==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-font-variant/-/postcss-font-variant-4.0.0.tgz", + "integrity": "sha512-M8BFYKOvCrI2aITzDad7kWuXXTm0YhGdP9Q8HanmN4EF1Hmcgs1KK5rSHylt/lUJe8yLxiSwWAHdScoEiIxztg==", "dev": true, "requires": { "postcss": "^7.0.2" - }, - "dependencies": { - "postcss": { - "version": "7.0.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", - "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", - "dev": true, - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } } }, "postcss-gap-properties": { @@ -13864,34 +13704,6 @@ "dev": true, "requires": { "postcss": "^7.0.2" - }, - "dependencies": { - "postcss": { - "version": "7.0.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", - "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", - "dev": true, - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } } }, "postcss-image-set-function": { @@ -13902,34 +13714,6 @@ "requires": { "postcss": "^7.0.2", "postcss-values-parser": "^2.0.0" - }, - "dependencies": { - "postcss": { - "version": "7.0.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", - "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", - "dev": true, - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } } }, "postcss-initial": { @@ -13940,34 +13724,6 @@ "requires": { "lodash.template": "^4.5.0", "postcss": "^7.0.2" - }, - "dependencies": { - "postcss": { - "version": "7.0.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", - "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", - "dev": true, - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } } }, "postcss-lab-function": { @@ -13979,40 +13735,12 @@ "@csstools/convert-colors": "^1.4.0", "postcss": "^7.0.2", "postcss-values-parser": "^2.0.0" - }, - "dependencies": { - "postcss": { - "version": "7.0.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", - "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", - "dev": true, - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } } }, "postcss-load-config": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-2.1.2.tgz", - "integrity": "sha512-/rDeGV6vMUo3mwJZmeHfEDvwnTKKqQ0S7OHUi/kJvvtx3aWtyWG2/0ZWnzCt2keEclwN6Tf0DST2v9kITdOKYw==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-2.1.0.tgz", + "integrity": "sha512-4pV3JJVPLd5+RueiVVB+gFOAa7GWc25XQcMp86Zexzke69mKf6Nx9LRcQywdz7yZI9n1udOxmLuAwTBypypF8Q==", "dev": true, "requires": { "cosmiconfig": "^5.0.0", @@ -14031,30 +13759,15 @@ "schema-utils": "^1.0.0" }, "dependencies": { - "postcss": { - "version": "7.0.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", - "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", - "dev": true, - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "schema-utils": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", + "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", "dev": true, "requires": { - "has-flag": "^3.0.0" + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" } } } @@ -14066,34 +13779,6 @@ "dev": true, "requires": { "postcss": "^7.0.2" - }, - "dependencies": { - "postcss": { - "version": "7.0.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", - "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", - "dev": true, - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } } }, "postcss-media-minmax": { @@ -14103,34 +13788,6 @@ "dev": true, "requires": { "postcss": "^7.0.2" - }, - "dependencies": { - "postcss": { - "version": "7.0.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", - "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", - "dev": true, - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } } }, "postcss-merge-longhand": { @@ -14143,34 +13800,6 @@ "postcss": "^7.0.0", "postcss-value-parser": "^3.0.0", "stylehacks": "^4.0.0" - }, - "dependencies": { - "postcss": { - "version": "7.0.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", - "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", - "dev": true, - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } } }, "postcss-merge-rules": { @@ -14187,17 +13816,6 @@ "vendors": "^1.0.0" }, "dependencies": { - "postcss": { - "version": "7.0.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", - "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", - "dev": true, - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, "postcss-selector-parser": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz", @@ -14208,21 +13826,6 @@ "indexes-of": "^1.0.1", "uniq": "^1.0.1" } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } } } }, @@ -14234,34 +13837,6 @@ "requires": { "postcss": "^7.0.0", "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "postcss": { - "version": "7.0.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", - "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", - "dev": true, - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } } }, "postcss-minify-gradients": { @@ -14274,34 +13849,6 @@ "is-color-stop": "^1.0.0", "postcss": "^7.0.0", "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "postcss": { - "version": "7.0.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", - "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", - "dev": true, - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } } }, "postcss-minify-params": { @@ -14316,59 +13863,20 @@ "postcss": "^7.0.0", "postcss-value-parser": "^3.0.0", "uniqs": "^2.0.0" + } + }, + "postcss-minify-selectors": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-4.0.2.tgz", + "integrity": "sha512-D5S1iViljXBj9kflQo4YutWnJmwm8VvIsU1GeXJGiG9j8CIg9zs4voPMdQDUmIxetUOh60VilsNzCiAFTOqu3g==", + "dev": true, + "requires": { + "alphanum-sort": "^1.0.0", + "has": "^1.0.0", + "postcss": "^7.0.0", + "postcss-selector-parser": "^3.0.0" }, "dependencies": { - "postcss": { - "version": "7.0.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", - "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", - "dev": true, - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "postcss-minify-selectors": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-4.0.2.tgz", - "integrity": "sha512-D5S1iViljXBj9kflQo4YutWnJmwm8VvIsU1GeXJGiG9j8CIg9zs4voPMdQDUmIxetUOh60VilsNzCiAFTOqu3g==", - "dev": true, - "requires": { - "alphanum-sort": "^1.0.0", - "has": "^1.0.0", - "postcss": "^7.0.0", - "postcss-selector-parser": "^3.0.0" - }, - "dependencies": { - "postcss": { - "version": "7.0.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", - "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", - "dev": true, - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, "postcss-selector-parser": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz", @@ -14379,61 +13887,56 @@ "indexes-of": "^1.0.1", "uniq": "^1.0.1" } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } } } }, "postcss-modules-extract-imports": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-1.2.1.tgz", - "integrity": "sha512-6jt9XZwUhwmRUhb/CkyJY020PYaPJsCyt3UjbaWo6XEbH/94Hmv6MP7fG2C5NDU/BcHzyGYxNtHvM+LTf9HrYw==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-2.0.0.tgz", + "integrity": "sha512-LaYLDNS4SG8Q5WAWqIJgdHPJrDDr/Lv775rMBFUbgjTz6j34lUznACHcdRWroPvXANP2Vj7yNK57vp9eFqzLWQ==", "dev": true, "requires": { - "postcss": "^6.0.1" + "postcss": "^7.0.5" } }, "postcss-modules-local-by-default": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-1.2.0.tgz", - "integrity": "sha1-99gMOYxaOT+nlkRmvRlQCn1hwGk=", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-3.0.3.tgz", + "integrity": "sha512-e3xDq+LotiGesympRlKNgaJ0PCzoUIdpH0dj47iWAui/kyTgh3CiAr1qP54uodmJhl6p9rN6BoNcdEDVJx9RDw==", "dev": true, "requires": { - "css-selector-tokenizer": "^0.7.0", - "postcss": "^6.0.1" + "icss-utils": "^4.1.1", + "postcss": "^7.0.32", + "postcss-selector-parser": "^6.0.2", + "postcss-value-parser": "^4.1.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz", + "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==", + "dev": true + } } }, "postcss-modules-scope": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-1.1.0.tgz", - "integrity": "sha1-1upkmUx5+XtipytCb75gVqGUu5A=", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-2.2.0.tgz", + "integrity": "sha512-YyEgsTMRpNd+HmyC7H/mh3y+MeFWevy7V1evVhJWewmMbjDHIbZbOXICC2y+m1xI1UVfIT1HMW/O04Hxyu9oXQ==", "dev": true, "requires": { - "css-selector-tokenizer": "^0.7.0", - "postcss": "^6.0.1" + "postcss": "^7.0.6", + "postcss-selector-parser": "^6.0.0" } }, "postcss-modules-values": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-1.3.0.tgz", - "integrity": "sha1-7P+p1+GSUYOJ9CrQ6D9yrsRW6iA=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-3.0.0.tgz", + "integrity": "sha512-1//E5jCBrZ9DmRX+zCtmQtRSV6PV42Ix7Bzj9GbwJceduuf7IqP8MgeTXuRDHOWj2m0VzZD5+roFWDuU8RQjcg==", "dev": true, "requires": { - "icss-replace-symbols": "^1.1.0", - "postcss": "^6.0.1" + "icss-utils": "^4.0.0", + "postcss": "^7.0.6" } }, "postcss-nesting": { @@ -14443,34 +13946,19 @@ "dev": true, "requires": { "postcss": "^7.0.2" - }, - "dependencies": { - "postcss": { - "version": "7.0.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", - "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", - "dev": true, - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } + } + }, + "postcss-normalize": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize/-/postcss-normalize-8.0.1.tgz", + "integrity": "sha512-rt9JMS/m9FHIRroDDBGSMsyW1c0fkvOJPy62ggxSHUldJO7B195TqFMqIf+lY5ezpDcYOV4j86aUp3/XbxzCCQ==", + "dev": true, + "requires": { + "@csstools/normalize.css": "^10.1.0", + "browserslist": "^4.6.2", + "postcss": "^7.0.17", + "postcss-browser-comments": "^3.0.0", + "sanitize.css": "^10.0.0" } }, "postcss-normalize-charset": { @@ -14480,34 +13968,6 @@ "dev": true, "requires": { "postcss": "^7.0.0" - }, - "dependencies": { - "postcss": { - "version": "7.0.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", - "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", - "dev": true, - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } } }, "postcss-normalize-display-values": { @@ -14519,34 +13979,6 @@ "cssnano-util-get-match": "^4.0.0", "postcss": "^7.0.0", "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "postcss": { - "version": "7.0.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", - "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", - "dev": true, - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } } }, "postcss-normalize-positions": { @@ -14559,34 +13991,6 @@ "has": "^1.0.0", "postcss": "^7.0.0", "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "postcss": { - "version": "7.0.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", - "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", - "dev": true, - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } } }, "postcss-normalize-repeat-style": { @@ -14599,34 +14003,6 @@ "cssnano-util-get-match": "^4.0.0", "postcss": "^7.0.0", "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "postcss": { - "version": "7.0.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", - "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", - "dev": true, - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } } }, "postcss-normalize-string": { @@ -14638,34 +14014,6 @@ "has": "^1.0.0", "postcss": "^7.0.0", "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "postcss": { - "version": "7.0.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", - "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", - "dev": true, - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } } }, "postcss-normalize-timing-functions": { @@ -14677,34 +14025,6 @@ "cssnano-util-get-match": "^4.0.0", "postcss": "^7.0.0", "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "postcss": { - "version": "7.0.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", - "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", - "dev": true, - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } } }, "postcss-normalize-unicode": { @@ -14716,34 +14036,6 @@ "browserslist": "^4.0.0", "postcss": "^7.0.0", "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "postcss": { - "version": "7.0.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", - "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", - "dev": true, - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } } }, "postcss-normalize-url": { @@ -14758,31 +14050,11 @@ "postcss-value-parser": "^3.0.0" }, "dependencies": { - "postcss": { - "version": "7.0.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", - "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", - "dev": true, - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "normalize-url": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-3.3.0.tgz", + "integrity": "sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg==", "dev": true - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } } } }, @@ -14794,34 +14066,6 @@ "requires": { "postcss": "^7.0.0", "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "postcss": { - "version": "7.0.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", - "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", - "dev": true, - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } } }, "postcss-ordered-values": { @@ -14833,34 +14077,6 @@ "cssnano-util-get-arguments": "^4.0.0", "postcss": "^7.0.0", "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "postcss": { - "version": "7.0.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", - "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", - "dev": true, - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } } }, "postcss-overflow-shorthand": { @@ -14870,34 +14086,6 @@ "dev": true, "requires": { "postcss": "^7.0.2" - }, - "dependencies": { - "postcss": { - "version": "7.0.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", - "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", - "dev": true, - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } } }, "postcss-page-break": { @@ -14907,34 +14095,6 @@ "dev": true, "requires": { "postcss": "^7.0.2" - }, - "dependencies": { - "postcss": { - "version": "7.0.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", - "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", - "dev": true, - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } } }, "postcss-place": { @@ -14945,58 +14105,30 @@ "requires": { "postcss": "^7.0.2", "postcss-values-parser": "^2.0.0" - }, - "dependencies": { - "postcss": { - "version": "7.0.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", - "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", - "dev": true, - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } } }, "postcss-preset-env": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-6.5.0.tgz", - "integrity": "sha512-RdsIrYJd9p9AouQoJ8dFP5ksBJEIegA4q4WzJDih8nevz3cZyIP/q1Eaw3pTVpUAu3n7Y32YmvAW3X07mSRGkw==", + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-6.7.0.tgz", + "integrity": "sha512-eU4/K5xzSFwUFJ8hTdTQzo2RBLbDVt83QZrAvI07TULOkmyQlnYlpwep+2yIK+K+0KlZO4BvFcleOCCcUtwchg==", "dev": true, "requires": { - "autoprefixer": "^9.4.2", - "browserslist": "^4.3.5", - "caniuse-lite": "^1.0.30000918", + "autoprefixer": "^9.6.1", + "browserslist": "^4.6.4", + "caniuse-lite": "^1.0.30000981", "css-blank-pseudo": "^0.1.4", "css-has-pseudo": "^0.10.0", "css-prefers-color-scheme": "^3.1.1", - "cssdb": "^4.3.0", - "postcss": "^7.0.6", - "postcss-attribute-case-insensitive": "^4.0.0", + "cssdb": "^4.4.0", + "postcss": "^7.0.17", + "postcss-attribute-case-insensitive": "^4.0.1", "postcss-color-functional-notation": "^2.0.1", "postcss-color-gray": "^5.0.0", - "postcss-color-hex-alpha": "^5.0.2", + "postcss-color-hex-alpha": "^5.0.3", "postcss-color-mod-function": "^3.0.3", "postcss-color-rebeccapurple": "^4.0.1", - "postcss-custom-media": "^7.0.7", - "postcss-custom-properties": "^8.0.9", + "postcss-custom-media": "^7.0.8", + "postcss-custom-properties": "^8.0.11", "postcss-custom-selectors": "^5.1.2", "postcss-dir-pseudo-class": "^5.0.0", "postcss-double-position-gradients": "^1.0.0", @@ -15018,34 +14150,6 @@ "postcss-replace-overflow-wrap": "^3.0.0", "postcss-selector-matches": "^4.0.0", "postcss-selector-not": "^4.0.0" - }, - "dependencies": { - "postcss": { - "version": "7.0.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", - "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", - "dev": true, - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } } }, "postcss-pseudo-class-any-link": { @@ -15064,17 +14168,6 @@ "integrity": "sha512-MsCAG1z9lPdoO/IUMLSBWBSVxVtJ1395VGIQ+Fc2gNdkQ1hNDnQdw3YhA71WJCBW1vdwA0cAnk/DnW6bqoEUYg==", "dev": true }, - "postcss": { - "version": "7.0.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", - "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", - "dev": true, - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, "postcss-selector-parser": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz", @@ -15085,21 +14178,6 @@ "indexes-of": "^1.0.1", "uniq": "^1.0.1" } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } } } }, @@ -15113,34 +14191,6 @@ "caniuse-api": "^3.0.0", "has": "^1.0.0", "postcss": "^7.0.0" - }, - "dependencies": { - "postcss": { - "version": "7.0.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", - "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", - "dev": true, - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } } }, "postcss-reduce-transforms": { @@ -15153,34 +14203,6 @@ "has": "^1.0.0", "postcss": "^7.0.0", "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "postcss": { - "version": "7.0.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", - "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", - "dev": true, - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } } }, "postcss-replace-overflow-wrap": { @@ -15190,34 +14212,6 @@ "dev": true, "requires": { "postcss": "^7.0.2" - }, - "dependencies": { - "postcss": { - "version": "7.0.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", - "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", - "dev": true, - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } } }, "postcss-safe-parser": { @@ -15227,34 +14221,6 @@ "dev": true, "requires": { "postcss": "^7.0.0" - }, - "dependencies": { - "postcss": { - "version": "7.0.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", - "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", - "dev": true, - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } } }, "postcss-selector-matches": { @@ -15265,84 +14231,27 @@ "requires": { "balanced-match": "^1.0.0", "postcss": "^7.0.2" - }, - "dependencies": { - "postcss": { - "version": "7.0.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", - "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", - "dev": true, - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } } }, "postcss-selector-not": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-selector-not/-/postcss-selector-not-4.0.1.tgz", - "integrity": "sha512-YolvBgInEK5/79C+bdFMyzqTg6pkYqDbzZIST/PDMqa/o3qtXenD05apBG2jLgT0/BQ77d4U2UK12jWpilqMAQ==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-selector-not/-/postcss-selector-not-4.0.0.tgz", + "integrity": "sha512-W+bkBZRhqJaYN8XAnbbZPLWMvZD1wKTu0UxtFKdhtGjWYmxhkUneoeOhRJKdAE5V7ZTlnbHfCR+6bNwK9e1dTQ==", "dev": true, "requires": { "balanced-match": "^1.0.0", "postcss": "^7.0.2" - }, - "dependencies": { - "postcss": { - "version": "7.0.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", - "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", - "dev": true, - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } } }, "postcss-selector-parser": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.4.tgz", - "integrity": "sha512-gjMeXBempyInaBqpp8gODmwZ52WaYsVOsfr4L4lDQ7n3ncD6mEyySiDtgzCT+NYC0mmeOLvtsF8iaEf0YT6dBw==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.2.tgz", + "integrity": "sha512-36P2QR59jDTOAiIkqEprfJDsoNrvwFei3eCqKd1Y0tUsBimsq39BLp7RD+JWny3WgB1zGhJX8XVePwm9k4wdBg==", "dev": true, "requires": { "cssesc": "^3.0.0", "indexes-of": "^1.0.1", - "uniq": "^1.0.1", - "util-deprecate": "^1.0.2" + "uniq": "^1.0.1" } }, "postcss-svgo": { @@ -15355,34 +14264,6 @@ "postcss": "^7.0.0", "postcss-value-parser": "^3.0.0", "svgo": "^1.0.0" - }, - "dependencies": { - "postcss": { - "version": "7.0.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", - "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", - "dev": true, - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } } }, "postcss-unique-selectors": { @@ -15394,34 +14275,6 @@ "alphanum-sort": "^1.0.0", "postcss": "^7.0.0", "uniqs": "^2.0.0" - }, - "dependencies": { - "postcss": { - "version": "7.0.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", - "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", - "dev": true, - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } } }, "postcss-value-parser": { @@ -15448,59 +14301,57 @@ "prelude-ls": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=" + "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", + "dev": true }, - "preserve": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz", - "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=" + "prepend-http": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", + "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=", + "dev": true }, "prettier": { - "version": "1.16.4", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.16.4.tgz", - "integrity": "sha512-ZzWuos7TI5CKUeQAtFd6Zhm2s6EpAD/ZLApIhsF9pRvRtM1RFo61dM/4MSRUA0SuLugA/zgrZD8m0BaY46Og7g==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.1.2.tgz", + "integrity": "sha512-16c7K+x4qVlJg9rEbXl7HEGmQyZlG4R9AgP+oHKRMsMsuk8s+ATStlf1NpDqyBI1HpVyfjLOeMhH2LvuNvV5Vg==", "dev": true }, "pretty-bytes": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-4.0.2.tgz", - "integrity": "sha1-sr+C5zUNZcbDOqlaqlpPYyf2HNk=", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.3.0.tgz", + "integrity": "sha512-hjGrh+P926p4R4WbaB6OckyRtO0F0/lQBiT+0gnxjV+5kjPBrfVBFCsCLbMqVQeydvIoouYTCmmEURiH3R1Bdg==", "dev": true }, "pretty-error": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-2.1.2.tgz", - "integrity": "sha512-EY5oDzmsX5wvuynAByrmY0P0hcp+QpnAKbJng2A2MPjVKXCxrDSUkzghVJ4ZGPIv+JC4gX8fPUWscC0RtjsWGw==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-2.1.1.tgz", + "integrity": "sha1-X0+HyPkeWuPzuoerTPXgOxoX8aM=", "dev": true, "requires": { - "lodash": "^4.17.20", - "renderkid": "^2.0.4" + "renderkid": "^2.0.1", + "utila": "~0.4" } }, "pretty-format": { - "version": "23.6.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-23.6.0.tgz", - "integrity": "sha512-zf9NV1NSlDLDjycnwm6hpFATCGl/K1lt0R/GdkAK2O5LN/rwJoB+Mh93gGJjut4YbmecbfgLWVGSTCr0Ewvvbw==", + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-24.9.0.tgz", + "integrity": "sha512-00ZMZUiHaJrNfk33guavqgvfJS30sLYf0f8+Srklv0AMPodGGHcoHgksZ3OThYnIvOd+8yMCn0YiEOogjlgsnA==", "dev": true, "requires": { - "ansi-regex": "^3.0.0", - "ansi-styles": "^3.2.0" + "@jest/types": "^24.9.0", + "ansi-regex": "^4.0.0", + "ansi-styles": "^3.2.0", + "react-is": "^16.8.4" }, "dependencies": { "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", "dev": true } } }, - "private": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz", - "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==", - "dev": true - }, "process": { "version": "0.11.10", "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", @@ -15510,7 +14361,8 @@ "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==" + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "dev": true }, "progress": { "version": "2.0.3", @@ -15532,14 +14384,27 @@ "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=", "dev": true }, + "prompt": { + "version": "0.2.14", + "resolved": "https://registry.npmjs.org/prompt/-/prompt-0.2.14.tgz", + "integrity": "sha1-V3VPZPVD/XsIRXB8gY7OYY8F/9w=", + "dev": true, + "requires": { + "pkginfo": "0.x.x", + "read": "1.0.x", + "revalidator": "0.1.x", + "utile": "0.2.x", + "winston": "0.8.x" + } + }, "prompts": { - "version": "0.1.14", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-0.1.14.tgz", - "integrity": "sha512-rxkyiE9YH6zAz/rZpywySLKkpaj0NMVyNw1qhsubdbjjSgcayjTShDreZGlFMcGSu5sab3bAKPfFk78PB90+8w==", + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.3.2.tgz", + "integrity": "sha512-Q06uKs2CkNYVID0VqwfAl9mipo99zkBv/n2JtWY89Yxa3ZabWSrs0e2KTudKVa3peLUvYXMefDqIleLPVUBZMA==", "dev": true, "requires": { - "kleur": "^2.0.1", - "sisteransi": "^0.1.1" + "kleur": "^3.0.3", + "sisteransi": "^1.0.4" } }, "prop-types": { @@ -15562,15 +14427,11 @@ "reflect.ownkeys": "^0.2.0" } }, - "property-expr": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/property-expr/-/property-expr-1.5.1.tgz", - "integrity": "sha512-CGuc0VUTGthpJXL36ydB6jnbyOf/rAHFvmVrJlH+Rg0DqqLFQGAP6hIaxD/G0OAmBJPhXDHuEJigrp0e0wFV6g==" - }, "proxy-addr": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.6.tgz", "integrity": "sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw==", + "dev": true, "requires": { "forwarded": "~0.1.2", "ipaddr.js": "1.9.1" @@ -15585,12 +14446,14 @@ "pseudomap": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", - "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=" + "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", + "dev": true }, "psl": { "version": "1.8.0", "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", - "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==" + "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==", + "dev": true }, "public-encrypt": { "version": "4.0.3", @@ -15618,6 +14481,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dev": true, "requires": { "end-of-stream": "^1.1.0", "once": "^1.3.1" @@ -15649,7 +14513,8 @@ "punycode": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true }, "q": { "version": "1.5.1", @@ -15674,7 +14539,8 @@ "qs": { "version": "6.5.2", "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", - "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" + "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", + "dev": true }, "query-string": { "version": "5.1.1", @@ -15704,6 +14570,12 @@ "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", "dev": true }, + "quick-lru": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz", + "integrity": "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==", + "dev": true + }, "raf": { "version": "3.4.1", "resolved": "https://registry.npmjs.org/raf/-/raf-3.4.1.tgz", @@ -15712,23 +14584,6 @@ "performance-now": "^2.1.0" } }, - "randomatic": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-3.1.1.tgz", - "integrity": "sha512-TuDE5KxZ0J461RVjrJZCJc+J+zCkTb1MbH9AQUq68sMhOMcy9jLcb3BrZKgp9q9Ncltdg4QVqWrH02W2EFFVYw==", - "requires": { - "is-number": "^4.0.0", - "kind-of": "^6.0.0", - "math-random": "^1.0.1" - }, - "dependencies": { - "is-number": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", - "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==" - } - } - }, "randombytes": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", @@ -15751,27 +14606,19 @@ "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==" + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "dev": true }, "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==", + "dev": true, "requires": { "bytes": "3.1.0", "http-errors": "1.7.2", "iconv-lite": "0.4.24", "unpipe": "1.0.0" - }, - "dependencies": { - "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" - } - } } }, "rc-align": { @@ -15799,90 +14646,219 @@ "react-lifecycles-compat": "^3.0.4" } }, - "rc-calendar": { - "version": "9.15.11", - "resolved": "https://registry.npmjs.org/rc-calendar/-/rc-calendar-9.15.11.tgz", - "integrity": "sha512-qv0VXfAAnysMWJigxaP6se4bJHvr17D9qsLbi8BOpdgEocsS0RkgY1IUiFaOVYKJDy/EyLC447O02sV/y5YYBg==", - "requires": { - "babel-runtime": "6.x", - "classnames": "2.x", - "moment": "2.x", - "prop-types": "^15.5.8", - "rc-trigger": "^2.2.0", - "rc-util": "^4.1.1", - "react-lifecycles-compat": "^3.0.4" - } - }, "rc-cascader": { - "version": "0.17.5", - "resolved": "https://registry.npmjs.org/rc-cascader/-/rc-cascader-0.17.5.tgz", - "integrity": "sha512-WYMVcxU0+Lj+xLr4YYH0+yXODumvNXDcVEs5i7L1mtpWwYkubPV/zbQpn+jGKFCIW/hOhjkU4J1db8/P/UKE7A==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/rc-cascader/-/rc-cascader-1.3.0.tgz", + "integrity": "sha512-wayuMo/dSZixvdpiRFZB4Q6A3omKRXQcJ3CxN02+PNiTEcRnK2KDqKUzrx7GwgMsyH5tz90lUZ91lLaEPNFv0A==", "requires": { "array-tree-filter": "^2.1.0", - "prop-types": "^15.5.8", - "rc-trigger": "^2.2.0", - "rc-util": "^4.0.4", - "react-lifecycles-compat": "^3.0.4", - "shallow-equal": "^1.0.0", + "rc-trigger": "^4.0.0", + "rc-util": "^5.0.1", "warning": "^4.0.1" + }, + "dependencies": { + "rc-align": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/rc-align/-/rc-align-4.0.3.tgz", + "integrity": "sha512-TpI0t1tvAo/wYdoZbZlkCK+MkQBqNuPyRZesfsji4tMlqoqQ0q0MhnC9JD5KGPitMvmSB+KWgFpaN2uTz4hw6Q==", + "requires": { + "@babel/runtime": "^7.10.1", + "classnames": "2.x", + "dom-align": "^1.7.0", + "rc-util": "^5.0.1", + "resize-observer-polyfill": "^1.5.1" + } + }, + "rc-trigger": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/rc-trigger/-/rc-trigger-4.4.2.tgz", + "integrity": "sha512-uw2/s7j1b/RXyixa4omPuxZWv/3ln+H+p0v3trIUBxseolbdj8TTFpXYjXMZdGtMpAEAIbN1yo/K+r7wRB+xtQ==", + "requires": { + "@babel/runtime": "^7.10.1", + "classnames": "^2.2.6", + "raf": "^3.4.1", + "rc-align": "^4.0.0", + "rc-motion": "^1.0.0", + "rc-util": "^5.0.1" + } + }, + "rc-util": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/rc-util/-/rc-util-5.2.1.tgz", + "integrity": "sha512-OnIKp4DsYZpT3St9LwiGARXyMR38wNbk7C4jXS6NGAGHZEQWck7W6qfiJwj+MUmhJiUisAknU6BUs65exbhFTw==", + "requires": { + "react-is": "^16.12.0", + "shallowequal": "^1.1.0" + } + } } }, "rc-checkbox": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/rc-checkbox/-/rc-checkbox-2.1.8.tgz", - "integrity": "sha512-6qOgh0/by0nVNASx6LZnhRTy17Etcgav+IrI7kL9V9kcDZ/g7K14JFlqrtJ3NjDq/Kyn+BPI1st1XvbkhfaJeg==", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/rc-checkbox/-/rc-checkbox-2.3.1.tgz", + "integrity": "sha512-i290/iTqmZ0WtI2UPIryqT9rW6O99+an4KeZIyZDH3r+Jbb6YdddaWNdzq7g5m9zaNhJvgjf//wJtC4fvve2Tg==", "requires": { - "babel-runtime": "^6.23.0", - "classnames": "2.x", - "prop-types": "15.x", - "react-lifecycles-compat": "^3.0.4" + "@babel/runtime": "^7.10.1", + "classnames": "^2.2.1" } }, "rc-collapse": { - "version": "1.11.8", - "resolved": "https://registry.npmjs.org/rc-collapse/-/rc-collapse-1.11.8.tgz", - "integrity": "sha512-8EhfPyScTYljkbRuIoHniSwZagD5UPpZ3CToYgoNYWC85L2qCbPYF7+OaC713FOrIkp6NbfNqXsITNxmDAmxog==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/rc-collapse/-/rc-collapse-2.0.0.tgz", + "integrity": "sha512-R5+Ge1uzwK9G1wZPRPhqQsed4FXTDmU0BKzsqfNBtZdk/wd+yey8ZutmJmSozYc5hQwjPkCvJHV7gOIRZKIlJg==", "requires": { + "@ant-design/css-animation": "^1.7.2", "classnames": "2.x", - "css-animation": "1.x", - "prop-types": "^15.5.6", - "rc-animate": "2.x", + "rc-animate": "3.x", "react-is": "^16.7.0", - "react-lifecycles-compat": "^3.0.4", "shallowequal": "^1.1.0" + }, + "dependencies": { + "rc-animate": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/rc-animate/-/rc-animate-3.1.0.tgz", + "integrity": "sha512-8FsM+3B1H+0AyTyGggY6JyVldHTs1CyYT8CfTmG/nGHHXlecvSLeICJhcKgRLjUiQlctNnRtB1rwz79cvBVmrw==", + "requires": { + "@ant-design/css-animation": "^1.7.2", + "classnames": "^2.2.6", + "raf": "^3.4.0", + "rc-util": "^5.0.1" + } + }, + "rc-util": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/rc-util/-/rc-util-5.2.1.tgz", + "integrity": "sha512-OnIKp4DsYZpT3St9LwiGARXyMR38wNbk7C4jXS6NGAGHZEQWck7W6qfiJwj+MUmhJiUisAknU6BUs65exbhFTw==", + "requires": { + "react-is": "^16.12.0", + "shallowequal": "^1.1.0" + } + } + } + }, + "rc-color-picker": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/rc-color-picker/-/rc-color-picker-1.2.6.tgz", + "integrity": "sha512-AaC9Pg7qCHSy5M4eVbqDIaNb2FC4SEw82GOHB2C4R/+vF2FVa/r5XA+Igg5+zLPmAvBLhz9tL4MAfkRA8yWNJw==", + "requires": { + "classnames": "^2.2.5", + "prop-types": "^15.5.8", + "rc-trigger": "1.x", + "rc-util": "^4.0.2", + "tinycolor2": "^1.4.1" + }, + "dependencies": { + "rc-trigger": { + "version": "1.11.5", + "resolved": "https://registry.npmjs.org/rc-trigger/-/rc-trigger-1.11.5.tgz", + "integrity": "sha512-MBuUPw1nFzA4K7jQOwb7uvFaZFjXGd00EofUYiZ+l/fgKVq8wnLC0lkv36kwqM7vfKyftRo2sh7cWVpdPuNnnw==", + "requires": { + "babel-runtime": "6.x", + "create-react-class": "15.x", + "prop-types": "15.x", + "rc-align": "2.x", + "rc-animate": "2.x", + "rc-util": "4.x" + } + } } }, "rc-dialog": { - "version": "7.5.14", - "resolved": "https://registry.npmjs.org/rc-dialog/-/rc-dialog-7.5.14.tgz", - "integrity": "sha512-gmEukl2iU2K74G2g66rVH6yOCwvLbVWqmEClbRO47Iec/stFyaDXCkvJmBb5vJcAWomQwaU4yZ9muRBW4u9AfA==", + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/rc-dialog/-/rc-dialog-8.1.1.tgz", + "integrity": "sha512-ToyHiMlV94z8LfnmeKoVvu04Pd9+HdwwSHhY2a8IWeYGA5Cjk1WyIZvS+njCsm8rSMM4NqPqFkMZA0N/Iw0NrQ==", "requires": { - "babel-runtime": "6.x", - "rc-animate": "2.x", - "rc-util": "^4.8.1" + "rc-animate": "3.x", + "rc-util": "^5.0.1" + }, + "dependencies": { + "rc-animate": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/rc-animate/-/rc-animate-3.1.0.tgz", + "integrity": "sha512-8FsM+3B1H+0AyTyGggY6JyVldHTs1CyYT8CfTmG/nGHHXlecvSLeICJhcKgRLjUiQlctNnRtB1rwz79cvBVmrw==", + "requires": { + "@ant-design/css-animation": "^1.7.2", + "classnames": "^2.2.6", + "raf": "^3.4.0", + "rc-util": "^5.0.1" + } + }, + "rc-util": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/rc-util/-/rc-util-5.2.1.tgz", + "integrity": "sha512-OnIKp4DsYZpT3St9LwiGARXyMR38wNbk7C4jXS6NGAGHZEQWck7W6qfiJwj+MUmhJiUisAknU6BUs65exbhFTw==", + "requires": { + "react-is": "^16.12.0", + "shallowequal": "^1.1.0" + } + } } }, "rc-drawer": { - "version": "2.0.9", - "resolved": "https://registry.npmjs.org/rc-drawer/-/rc-drawer-2.0.9.tgz", - "integrity": "sha512-7qwEND3TLvJeyuUvZfMDkL2pHsR/XHX5HvoaBlIH9mTcFWBmMNrvYGDuGHgGsdNKZZgIBwlkvl5vhckydTUc9Q==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/rc-drawer/-/rc-drawer-4.1.0.tgz", + "integrity": "sha512-kjeQFngPjdzAFahNIV0EvEBoIKMOnvUsAxpkSPELoD/1DuR4nLafom5ryma+TIxGwkFJ92W6yjsMi1U9aiOTeQ==", "requires": { - "babel-runtime": "6.x", - "classnames": "^2.2.5", - "rc-util": "^4.7.0", - "react-lifecycles-compat": "^3.0.4" + "@babel/runtime": "^7.10.1", + "classnames": "^2.2.6", + "rc-util": "^5.0.1" + }, + "dependencies": { + "rc-util": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/rc-util/-/rc-util-5.2.1.tgz", + "integrity": "sha512-OnIKp4DsYZpT3St9LwiGARXyMR38wNbk7C4jXS6NGAGHZEQWck7W6qfiJwj+MUmhJiUisAknU6BUs65exbhFTw==", + "requires": { + "react-is": "^16.12.0", + "shallowequal": "^1.1.0" + } + } } }, "rc-dropdown": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/rc-dropdown/-/rc-dropdown-2.4.1.tgz", - "integrity": "sha512-p0XYn0wrOpAZ2fUGE6YJ6U8JBNc5ASijznZ6dkojdaEfQJAeZtV9KMEewhxkVlxGSbbdXe10ptjBlTEW9vEwEg==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/rc-dropdown/-/rc-dropdown-3.1.2.tgz", + "integrity": "sha512-s2W5jqvjTid5DxotGO5FlTBaQWeB+Bu7McQgjB8Ot3Wbl72AIKwLf11+lgbV4mA2vWC1H8DKyn6SW9TKLTi0xg==", "requires": { - "babel-runtime": "^6.26.0", + "@babel/runtime": "^7.10.1", "classnames": "^2.2.6", - "prop-types": "^15.5.8", - "rc-trigger": "^2.5.1", - "react-lifecycles-compat": "^3.0.2" + "rc-trigger": "^4.0.0" + }, + "dependencies": { + "rc-align": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/rc-align/-/rc-align-4.0.3.tgz", + "integrity": "sha512-TpI0t1tvAo/wYdoZbZlkCK+MkQBqNuPyRZesfsji4tMlqoqQ0q0MhnC9JD5KGPitMvmSB+KWgFpaN2uTz4hw6Q==", + "requires": { + "@babel/runtime": "^7.10.1", + "classnames": "2.x", + "dom-align": "^1.7.0", + "rc-util": "^5.0.1", + "resize-observer-polyfill": "^1.5.1" + } + }, + "rc-trigger": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/rc-trigger/-/rc-trigger-4.4.2.tgz", + "integrity": "sha512-uw2/s7j1b/RXyixa4omPuxZWv/3ln+H+p0v3trIUBxseolbdj8TTFpXYjXMZdGtMpAEAIbN1yo/K+r7wRB+xtQ==", + "requires": { + "@babel/runtime": "^7.10.1", + "classnames": "^2.2.6", + "raf": "^3.4.1", + "rc-align": "^4.0.0", + "rc-motion": "^1.0.0", + "rc-util": "^5.0.1" + } + }, + "rc-util": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/rc-util/-/rc-util-5.2.1.tgz", + "integrity": "sha512-OnIKp4DsYZpT3St9LwiGARXyMR38wNbk7C4jXS6NGAGHZEQWck7W6qfiJwj+MUmhJiUisAknU6BUs65exbhFTw==", + "requires": { + "react-is": "^16.12.0", + "shallowequal": "^1.1.0" + } + } } }, "rc-editor-core": { @@ -15938,6 +14914,32 @@ } } }, + "rc-field-form": { + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/rc-field-form/-/rc-field-form-1.10.1.tgz", + "integrity": "sha512-aosTtNTqLYX2jsG5GyCv7axe+b57XH73T7TmmrX/cmhemhtFjvNE6RkRkmtP9VOJnZg5YGC5HfK172cnJ1Ij7Q==", + "requires": { + "@babel/runtime": "^7.8.4", + "async-validator": "^3.0.3", + "rc-util": "^5.0.0" + }, + "dependencies": { + "async-validator": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/async-validator/-/async-validator-3.4.0.tgz", + "integrity": "sha512-VrFk4eYiJAWKskEz115iiuCf9O0ftnMMPXrOFMqyzGH2KxO7YwncKyn/FgOOP+0MDHMfXL7gLExagCutaZGigA==" + }, + "rc-util": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/rc-util/-/rc-util-5.2.1.tgz", + "integrity": "sha512-OnIKp4DsYZpT3St9LwiGARXyMR38wNbk7C4jXS6NGAGHZEQWck7W6qfiJwj+MUmhJiUisAknU6BUs65exbhFTw==", + "requires": { + "react-is": "^16.12.0", + "shallowequal": "^1.1.0" + } + } + } + }, "rc-form": { "version": "2.4.11", "resolved": "https://registry.npmjs.org/rc-form/-/rc-form-2.4.11.tgz", @@ -15961,142 +14963,499 @@ "babel-runtime": "6.x" } }, - "rc-hammerjs": { - "version": "0.6.10", - "resolved": "https://registry.npmjs.org/rc-hammerjs/-/rc-hammerjs-0.6.10.tgz", - "integrity": "sha512-Vgh9qIudyN5CHRop4M+v+xUniQBFWXKrsJxQRVtJOi2xgRrCeI52/bkpaL5HWwUhqTK9Ayq0n7lYTItT6ld5rg==", + "rc-image": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/rc-image/-/rc-image-3.0.4.tgz", + "integrity": "sha512-XPcggtKffW4k2ktOxzcu4N4RXnQwN7yrdiS0rRXK4r55SHb8BG7qQUmA0VnvKF7o+bPXUP18A3y+OI35hr8CLQ==", "requires": { - "babel-runtime": "6.x", - "hammerjs": "^2.0.8", - "prop-types": "^15.5.9" + "@ant-design/icons": "^4.2.2", + "@babel/runtime": "^7.11.2", + "classnames": "^2.2.6", + "rc-dialog": "^8.3.2", + "rc-util": "^5.0.6" + }, + "dependencies": { + "@babel/runtime": { + "version": "7.11.2", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.11.2.tgz", + "integrity": "sha512-TeWkU52so0mPtDcaCTxNBI/IHiz0pZgr8VEFqXFtZWpYD08ZB6FaSwVAS8MKRQAP3bYKiVjwysOJgMFY28o6Tw==", + "requires": { + "regenerator-runtime": "^0.13.4" + } + }, + "rc-animate": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/rc-animate/-/rc-animate-3.1.0.tgz", + "integrity": "sha512-8FsM+3B1H+0AyTyGggY6JyVldHTs1CyYT8CfTmG/nGHHXlecvSLeICJhcKgRLjUiQlctNnRtB1rwz79cvBVmrw==", + "requires": { + "@ant-design/css-animation": "^1.7.2", + "classnames": "^2.2.6", + "raf": "^3.4.0", + "rc-util": "^5.0.1" + } + }, + "rc-dialog": { + "version": "8.3.3", + "resolved": "https://registry.npmjs.org/rc-dialog/-/rc-dialog-8.3.3.tgz", + "integrity": "sha512-EEc9PoyZ+5lLdoT+b8p39628qQngULF/+Id1Sw/LNE26+P/fjEdbTisAanCZyrguhjPI5ougAkEr3drlQAW/ZA==", + "requires": { + "@babel/runtime": "^7.10.1", + "rc-animate": "3.x", + "rc-util": "^5.0.1" + } + }, + "rc-util": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/rc-util/-/rc-util-5.2.1.tgz", + "integrity": "sha512-OnIKp4DsYZpT3St9LwiGARXyMR38wNbk7C4jXS6NGAGHZEQWck7W6qfiJwj+MUmhJiUisAknU6BUs65exbhFTw==", + "requires": { + "react-is": "^16.12.0", + "shallowequal": "^1.1.0" + } + }, + "regenerator-runtime": { + "version": "0.13.7", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz", + "integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==" + } } }, "rc-input-number": { - "version": "4.4.5", - "resolved": "https://registry.npmjs.org/rc-input-number/-/rc-input-number-4.4.5.tgz", - "integrity": "sha512-Dt20e8Ylc/N/6oXiPUlwDVdx3fz7W5umUOa4z5pBuWFG7NPlBVXRWkq7+nbnTyaK24UxN67PVpmD3+Omo+QRZQ==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/rc-input-number/-/rc-input-number-6.0.0.tgz", + "integrity": "sha512-vbe+g7HvR/joknSnvLkBTi9N9I+LsV4kljfuog8WNiS7OAF3aEN0QcHSOQ4+xk6+Hx9P1tU63z2+TyEx8W/j2Q==", "requires": { - "babel-runtime": "6.x", - "classnames": "^2.2.0", - "prop-types": "^15.5.7", - "rc-util": "^4.5.1", - "rmc-feedback": "^2.0.0" + "@babel/runtime": "^7.10.1", + "classnames": "^2.2.5", + "rc-util": "^5.0.1" + }, + "dependencies": { + "rc-util": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/rc-util/-/rc-util-5.2.1.tgz", + "integrity": "sha512-OnIKp4DsYZpT3St9LwiGARXyMR38wNbk7C4jXS6NGAGHZEQWck7W6qfiJwj+MUmhJiUisAknU6BUs65exbhFTw==", + "requires": { + "react-is": "^16.12.0", + "shallowequal": "^1.1.0" + } + } } }, "rc-mentions": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/rc-mentions/-/rc-mentions-0.3.1.tgz", - "integrity": "sha512-fa5dN3IMTahJfAga1nmma9OymK/ZBV/MZfV11h4kjDmCAVETv5EbAlV0mn6Y+JajvXS6n/XFoPUSF+nwK/AeWw==", + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/rc-mentions/-/rc-mentions-1.4.2.tgz", + "integrity": "sha512-wSmHRF9kFwrbj59mR+u4yVr0KtcrfPw53PYOVizYxYeDfmwaCcSgk29F8OjlDy5jVqUaMhHX5nIiYCePu5Aytg==", "requires": { - "@ant-design/create-react-context": "^0.2.4", - "babel-runtime": "^6.23.0", + "@babel/runtime": "^7.10.1", "classnames": "^2.2.6", - "rc-menu": "^7.4.22", - "rc-trigger": "^2.6.2", - "rc-util": "^4.6.0", - "react-lifecycles-compat": "^3.0.4" + "rc-menu": "^8.0.1", + "rc-textarea": "^0.3.0", + "rc-trigger": "^4.3.0", + "rc-util": "^5.0.1" + }, + "dependencies": { + "rc-align": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/rc-align/-/rc-align-4.0.3.tgz", + "integrity": "sha512-TpI0t1tvAo/wYdoZbZlkCK+MkQBqNuPyRZesfsji4tMlqoqQ0q0MhnC9JD5KGPitMvmSB+KWgFpaN2uTz4hw6Q==", + "requires": { + "@babel/runtime": "^7.10.1", + "classnames": "2.x", + "dom-align": "^1.7.0", + "rc-util": "^5.0.1", + "resize-observer-polyfill": "^1.5.1" + } + }, + "rc-trigger": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/rc-trigger/-/rc-trigger-4.4.2.tgz", + "integrity": "sha512-uw2/s7j1b/RXyixa4omPuxZWv/3ln+H+p0v3trIUBxseolbdj8TTFpXYjXMZdGtMpAEAIbN1yo/K+r7wRB+xtQ==", + "requires": { + "@babel/runtime": "^7.10.1", + "classnames": "^2.2.6", + "raf": "^3.4.1", + "rc-align": "^4.0.0", + "rc-motion": "^1.0.0", + "rc-util": "^5.0.1" + } + }, + "rc-util": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/rc-util/-/rc-util-5.2.1.tgz", + "integrity": "sha512-OnIKp4DsYZpT3St9LwiGARXyMR38wNbk7C4jXS6NGAGHZEQWck7W6qfiJwj+MUmhJiUisAknU6BUs65exbhFTw==", + "requires": { + "react-is": "^16.12.0", + "shallowequal": "^1.1.0" + } + } } }, "rc-menu": { - "version": "7.4.32", - "resolved": "https://registry.npmjs.org/rc-menu/-/rc-menu-7.4.32.tgz", - "integrity": "sha512-9/ySqniMdvhUhfiUFmqK3hLffYIdeR2nrDDNvXksTCc2ZYd1JmOWF16yO7iYyDPLZM33NU3Qw6EPZd21+FxJsQ==", + "version": "8.5.3", + "resolved": "https://registry.npmjs.org/rc-menu/-/rc-menu-8.5.3.tgz", + "integrity": "sha512-OLdN+jwhabgyRZDvWYjYpO7RP7wLybhNuAulgGqx1oUPBJrtgVlG/X4HtPb7nypRx/n+eicj6H8CtbCs0L4m/Q==", "requires": { + "@babel/runtime": "^7.10.1", "classnames": "2.x", - "dom-scroll-into-view": "1.x", - "mini-store": "^2.0.0", - "mutationobserver-shim": "^0.3.2", - "rc-animate": "2.x", - "rc-trigger": "^2.3.0", - "rc-util": "^4.13.0", - "resize-observer-polyfill": "^1.5.0" + "mini-store": "^3.0.1", + "omit.js": "^2.0.0", + "rc-motion": "^1.0.1", + "rc-trigger": "^4.4.0", + "rc-util": "^5.0.1", + "resize-observer-polyfill": "^1.5.0", + "shallowequal": "^1.1.0" + }, + "dependencies": { + "omit.js": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/omit.js/-/omit.js-2.0.2.tgz", + "integrity": "sha512-hJmu9D+bNB40YpL9jYebQl4lsTW6yEHRTroJzNLqQJYHm7c+NQnJGfZmIWh8S3q3KoaxV1aLhV6B3+0N0/kyJg==" + }, + "rc-align": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/rc-align/-/rc-align-4.0.3.tgz", + "integrity": "sha512-TpI0t1tvAo/wYdoZbZlkCK+MkQBqNuPyRZesfsji4tMlqoqQ0q0MhnC9JD5KGPitMvmSB+KWgFpaN2uTz4hw6Q==", + "requires": { + "@babel/runtime": "^7.10.1", + "classnames": "2.x", + "dom-align": "^1.7.0", + "rc-util": "^5.0.1", + "resize-observer-polyfill": "^1.5.1" + } + }, + "rc-trigger": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/rc-trigger/-/rc-trigger-4.4.2.tgz", + "integrity": "sha512-uw2/s7j1b/RXyixa4omPuxZWv/3ln+H+p0v3trIUBxseolbdj8TTFpXYjXMZdGtMpAEAIbN1yo/K+r7wRB+xtQ==", + "requires": { + "@babel/runtime": "^7.10.1", + "classnames": "^2.2.6", + "raf": "^3.4.1", + "rc-align": "^4.0.0", + "rc-motion": "^1.0.0", + "rc-util": "^5.0.1" + } + }, + "rc-util": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/rc-util/-/rc-util-5.2.1.tgz", + "integrity": "sha512-OnIKp4DsYZpT3St9LwiGARXyMR38wNbk7C4jXS6NGAGHZEQWck7W6qfiJwj+MUmhJiUisAknU6BUs65exbhFTw==", + "requires": { + "react-is": "^16.12.0", + "shallowequal": "^1.1.0" + } + } + } + }, + "rc-motion": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/rc-motion/-/rc-motion-1.1.2.tgz", + "integrity": "sha512-YC/E7SSWKBFakYg4PENhSRWD4ZLDqkI7FKmutJcrMewZ91/ZIWfoZSDvPaBdKO0hsFrrzWepFhXQIq0FNnCMWA==", + "requires": { + "@babel/runtime": "^7.11.1", + "classnames": "^2.2.1", + "raf": "^3.4.1", + "rc-util": "^5.0.6" + }, + "dependencies": { + "@babel/runtime": { + "version": "7.11.2", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.11.2.tgz", + "integrity": "sha512-TeWkU52so0mPtDcaCTxNBI/IHiz0pZgr8VEFqXFtZWpYD08ZB6FaSwVAS8MKRQAP3bYKiVjwysOJgMFY28o6Tw==", + "requires": { + "regenerator-runtime": "^0.13.4" + } + }, + "rc-util": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/rc-util/-/rc-util-5.2.1.tgz", + "integrity": "sha512-OnIKp4DsYZpT3St9LwiGARXyMR38wNbk7C4jXS6NGAGHZEQWck7W6qfiJwj+MUmhJiUisAknU6BUs65exbhFTw==", + "requires": { + "react-is": "^16.12.0", + "shallowequal": "^1.1.0" + } + }, + "regenerator-runtime": { + "version": "0.13.7", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz", + "integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==" + } } }, "rc-notification": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/rc-notification/-/rc-notification-3.3.1.tgz", - "integrity": "sha512-U5+f4BmBVfMSf3OHSLyRagsJ74yKwlrQAtbbL5ijoA0F2C60BufwnOcHG18tVprd7iaIjzZt1TKMmQSYSvgrig==", + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/rc-notification/-/rc-notification-4.4.0.tgz", + "integrity": "sha512-IDeNAFGVeOsy1tv4zNVqMAXB9tianR80ewQbtObaAQfjwAjWfONdqdyjFkEU6nc6UQhSUYA5OcTGb7kwwbnh0g==", "requires": { - "babel-runtime": "6.x", + "@babel/runtime": "^7.10.1", "classnames": "2.x", - "prop-types": "^15.5.8", - "rc-animate": "2.x", - "rc-util": "^4.0.4" + "rc-animate": "3.x", + "rc-util": "^5.0.1" + }, + "dependencies": { + "rc-animate": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/rc-animate/-/rc-animate-3.1.0.tgz", + "integrity": "sha512-8FsM+3B1H+0AyTyGggY6JyVldHTs1CyYT8CfTmG/nGHHXlecvSLeICJhcKgRLjUiQlctNnRtB1rwz79cvBVmrw==", + "requires": { + "@ant-design/css-animation": "^1.7.2", + "classnames": "^2.2.6", + "raf": "^3.4.0", + "rc-util": "^5.0.1" + } + }, + "rc-util": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/rc-util/-/rc-util-5.2.1.tgz", + "integrity": "sha512-OnIKp4DsYZpT3St9LwiGARXyMR38wNbk7C4jXS6NGAGHZEQWck7W6qfiJwj+MUmhJiUisAknU6BUs65exbhFTw==", + "requires": { + "react-is": "^16.12.0", + "shallowequal": "^1.1.0" + } + } } }, "rc-pagination": { - "version": "1.20.15", - "resolved": "https://registry.npmjs.org/rc-pagination/-/rc-pagination-1.20.15.tgz", - "integrity": "sha512-/Xr4/3GOa1DtL8iCYl7qRUroEMrRDhZiiuHwcVFfSiwa9LYloMlUWcOJsnr8LN6A7rLPdm3/CHStUNeYd+2pKw==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/rc-pagination/-/rc-pagination-3.0.3.tgz", + "integrity": "sha512-xm6LsiSOAWlxferiL5e0jcun1B9vbvYzcIkqpYZR7YvC5ZrcU9KKihb+DZe3DY+oUc49xhX2qGS4D66ITHqekQ==", "requires": { - "babel-runtime": "6.x", - "classnames": "^2.2.6", - "prop-types": "^15.5.7", - "react-lifecycles-compat": "^3.0.4" + "@babel/runtime": "^7.10.1", + "classnames": "^2.2.1" + } + }, + "rc-picker": { + "version": "2.0.9", + "resolved": "https://registry.npmjs.org/rc-picker/-/rc-picker-2.0.9.tgz", + "integrity": "sha512-fLVYQYUv+gV9Nr5TXsf//3if7mKaGT/h3roONNSrw3KN86To/ppbfFgvJfzkfdO7zyfY8TpOVhdgYPATehEolg==", + "requires": { + "@babel/runtime": "^7.10.1", + "classnames": "^2.2.1", + "date-fns": "^2.15.0", + "dayjs": "^1.8.30", + "moment": "^2.24.0", + "rc-trigger": "^4.0.0", + "rc-util": "^5.0.1", + "shallowequal": "^1.1.0" + }, + "dependencies": { + "date-fns": { + "version": "2.16.1", + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.16.1.tgz", + "integrity": "sha512-sAJVKx/FqrLYHAQeN7VpJrPhagZc9R4ImZIWYRFZaaohR3KzmuK88touwsSwSVT8Qcbd4zoDsnGfX4GFB4imyQ==" + }, + "rc-align": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/rc-align/-/rc-align-4.0.3.tgz", + "integrity": "sha512-TpI0t1tvAo/wYdoZbZlkCK+MkQBqNuPyRZesfsji4tMlqoqQ0q0MhnC9JD5KGPitMvmSB+KWgFpaN2uTz4hw6Q==", + "requires": { + "@babel/runtime": "^7.10.1", + "classnames": "2.x", + "dom-align": "^1.7.0", + "rc-util": "^5.0.1", + "resize-observer-polyfill": "^1.5.1" + } + }, + "rc-trigger": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/rc-trigger/-/rc-trigger-4.4.2.tgz", + "integrity": "sha512-uw2/s7j1b/RXyixa4omPuxZWv/3ln+H+p0v3trIUBxseolbdj8TTFpXYjXMZdGtMpAEAIbN1yo/K+r7wRB+xtQ==", + "requires": { + "@babel/runtime": "^7.10.1", + "classnames": "^2.2.6", + "raf": "^3.4.1", + "rc-align": "^4.0.0", + "rc-motion": "^1.0.0", + "rc-util": "^5.0.1" + } + }, + "rc-util": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/rc-util/-/rc-util-5.2.1.tgz", + "integrity": "sha512-OnIKp4DsYZpT3St9LwiGARXyMR38wNbk7C4jXS6NGAGHZEQWck7W6qfiJwj+MUmhJiUisAknU6BUs65exbhFTw==", + "requires": { + "react-is": "^16.12.0", + "shallowequal": "^1.1.0" + } + } } }, "rc-progress": { - "version": "2.5.3", - "resolved": "https://registry.npmjs.org/rc-progress/-/rc-progress-2.5.3.tgz", - "integrity": "sha512-K2fa4CnqGehLZoMrdmBeZ86ONSTVcdk5FlqetbwJ3R/+42XfqhwQVOjWp2MH4P7XSQOMAGcNOy1SFfCP3415sg==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/rc-progress/-/rc-progress-3.0.0.tgz", + "integrity": "sha512-dQv1KU3o6Vay604FMYMF4S0x4GNXAgXf1tbQ1QoxeIeQt4d5fUeB7Ri82YPu+G+aRvH/AtxYAlEcnxyVZ1/4Hw==", "requires": { - "babel-runtime": "6.x", - "prop-types": "^15.5.8" + "classnames": "^2.2.6" } }, "rc-rate": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/rc-rate/-/rc-rate-2.5.1.tgz", - "integrity": "sha512-3iJkNJT8xlHklPCdeZtUZmJmRVUbr6AHRlfSsztfYTXVlHrv2TcPn3XkHsH+12j812WVB7gvilS2j3+ffjUHXg==", + "version": "2.8.2", + "resolved": "https://registry.npmjs.org/rc-rate/-/rc-rate-2.8.2.tgz", + "integrity": "sha512-f9T/D+ZwWQrWHkpidpQbnXpnVMGMC4eSRAkwuu88a8Qv1C/9LNc4AErazoh8tpnZBFqq19F3j0Glv+sDgkfEig==", "requires": { + "@babel/runtime": "^7.10.1", "classnames": "^2.2.5", - "prop-types": "^15.5.8", - "rc-util": "^4.3.0", - "react-lifecycles-compat": "^3.0.4" + "rc-util": "^5.0.1" + }, + "dependencies": { + "rc-util": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/rc-util/-/rc-util-5.2.1.tgz", + "integrity": "sha512-OnIKp4DsYZpT3St9LwiGARXyMR38wNbk7C4jXS6NGAGHZEQWck7W6qfiJwj+MUmhJiUisAknU6BUs65exbhFTw==", + "requires": { + "react-is": "^16.12.0", + "shallowequal": "^1.1.0" + } + } } }, - "rc-select": { - "version": "9.2.3", - "resolved": "https://registry.npmjs.org/rc-select/-/rc-select-9.2.3.tgz", - "integrity": "sha512-WhswxOMWiNnkXRbxyrj0kiIvyCfo/BaRPaYbsDetSIAU2yEDwKHF798blCP5u86KLOBKBvtxWLFCkSsQw1so5w==", + "rc-resize-observer": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/rc-resize-observer/-/rc-resize-observer-0.2.5.tgz", + "integrity": "sha512-cc4sOI722MVoCkGf/ZZybDVsjxvnH0giyDdA7wBJLTiMSFJ0eyxBMnr0JLYoClxftjnr75Xzl/VUB3HDrAx04Q==", "requires": { - "babel-runtime": "^6.23.0", - "classnames": "2.x", - "component-classes": "1.x", - "dom-scroll-into-view": "1.x", - "prop-types": "^15.5.8", - "raf": "^3.4.0", - "rc-animate": "2.x", - "rc-menu": "^7.3.0", - "rc-trigger": "^2.5.4", - "rc-util": "^4.0.4", - "react-lifecycles-compat": "^3.0.2", - "warning": "^4.0.2" + "@babel/runtime": "^7.10.1", + "classnames": "^2.2.1", + "rc-util": "^5.0.0", + "resize-observer-polyfill": "^1.5.1" + }, + "dependencies": { + "rc-util": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/rc-util/-/rc-util-5.2.1.tgz", + "integrity": "sha512-OnIKp4DsYZpT3St9LwiGARXyMR38wNbk7C4jXS6NGAGHZEQWck7W6qfiJwj+MUmhJiUisAknU6BUs65exbhFTw==", + "requires": { + "react-is": "^16.12.0", + "shallowequal": "^1.1.0" + } + } } }, - "rc-slider": { - "version": "8.6.13", - "resolved": "https://registry.npmjs.org/rc-slider/-/rc-slider-8.6.13.tgz", - "integrity": "sha512-fCUe8pPn8n9pq1ARX44nN2nzJoATtna4x/PdskUrxIvZXN8ja7HuceN/hq6kokZjo3FBD2B1yMZvZh6oi68l6Q==", + "rc-select": { + "version": "11.1.7", + "resolved": "https://registry.npmjs.org/rc-select/-/rc-select-11.1.7.tgz", + "integrity": "sha512-HZozKGhFbLDI995OUKQW2uZ2ZcGyzNhWN6gTQqpW5/Z0rae1zftpgkI1yxZ79LukOc8lO2NKlDDKCGH/SJH2Cg==", "requires": { - "babel-runtime": "6.x", - "classnames": "^2.2.5", - "prop-types": "^15.5.4", - "rc-tooltip": "^3.7.0", - "rc-util": "^4.0.4", - "shallowequal": "^1.0.1", + "@babel/runtime": "^7.10.1", + "classnames": "2.x", + "rc-motion": "^1.0.1", + "rc-trigger": "^4.3.0", + "rc-util": "^5.0.1", + "rc-virtual-list": "^3.0.3", "warning": "^4.0.3" - } + }, + "dependencies": { + "rc-align": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/rc-align/-/rc-align-4.0.3.tgz", + "integrity": "sha512-TpI0t1tvAo/wYdoZbZlkCK+MkQBqNuPyRZesfsji4tMlqoqQ0q0MhnC9JD5KGPitMvmSB+KWgFpaN2uTz4hw6Q==", + "requires": { + "@babel/runtime": "^7.10.1", + "classnames": "2.x", + "dom-align": "^1.7.0", + "rc-util": "^5.0.1", + "resize-observer-polyfill": "^1.5.1" + } + }, + "rc-trigger": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/rc-trigger/-/rc-trigger-4.4.2.tgz", + "integrity": "sha512-uw2/s7j1b/RXyixa4omPuxZWv/3ln+H+p0v3trIUBxseolbdj8TTFpXYjXMZdGtMpAEAIbN1yo/K+r7wRB+xtQ==", + "requires": { + "@babel/runtime": "^7.10.1", + "classnames": "^2.2.6", + "raf": "^3.4.1", + "rc-align": "^4.0.0", + "rc-motion": "^1.0.0", + "rc-util": "^5.0.1" + } + }, + "rc-util": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/rc-util/-/rc-util-5.2.1.tgz", + "integrity": "sha512-OnIKp4DsYZpT3St9LwiGARXyMR38wNbk7C4jXS6NGAGHZEQWck7W6qfiJwj+MUmhJiUisAknU6BUs65exbhFTw==", + "requires": { + "react-is": "^16.12.0", + "shallowequal": "^1.1.0" + } + } + } + }, + "rc-slider": { + "version": "9.3.1", + "resolved": "https://registry.npmjs.org/rc-slider/-/rc-slider-9.3.1.tgz", + "integrity": "sha512-c52PWPyrfJWh28K6dixAm0906L3/4MUIxqrNQA4TLnC/Z+cBNycWJUZoJerpwSOE1HdM3XDwixCsmtFc/7aWlQ==", + "requires": { + "@babel/runtime": "^7.10.1", + "classnames": "^2.2.5", + "rc-tooltip": "^4.0.0", + "rc-util": "^5.0.0", + "shallowequal": "^1.1.0" + }, + "dependencies": { + "rc-align": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/rc-align/-/rc-align-4.0.3.tgz", + "integrity": "sha512-TpI0t1tvAo/wYdoZbZlkCK+MkQBqNuPyRZesfsji4tMlqoqQ0q0MhnC9JD5KGPitMvmSB+KWgFpaN2uTz4hw6Q==", + "requires": { + "@babel/runtime": "^7.10.1", + "classnames": "2.x", + "dom-align": "^1.7.0", + "rc-util": "^5.0.1", + "resize-observer-polyfill": "^1.5.1" + } + }, + "rc-tooltip": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/rc-tooltip/-/rc-tooltip-4.2.2.tgz", + "integrity": "sha512-mAs+gAngUyHVA6HdFXsELoJOHgfjAACLLc8SGtnVhovJdyqs5ZGSL9p5i+ApNaVpwjswqShw7L4DRtMl7cXCQg==", + "requires": { + "rc-trigger": "^4.2.1" + } + }, + "rc-trigger": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/rc-trigger/-/rc-trigger-4.4.2.tgz", + "integrity": "sha512-uw2/s7j1b/RXyixa4omPuxZWv/3ln+H+p0v3trIUBxseolbdj8TTFpXYjXMZdGtMpAEAIbN1yo/K+r7wRB+xtQ==", + "requires": { + "@babel/runtime": "^7.10.1", + "classnames": "^2.2.6", + "raf": "^3.4.1", + "rc-align": "^4.0.0", + "rc-motion": "^1.0.0", + "rc-util": "^5.0.1" + } + }, + "rc-util": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/rc-util/-/rc-util-5.2.1.tgz", + "integrity": "sha512-OnIKp4DsYZpT3St9LwiGARXyMR38wNbk7C4jXS6NGAGHZEQWck7W6qfiJwj+MUmhJiUisAknU6BUs65exbhFTw==", + "requires": { + "react-is": "^16.12.0", + "shallowequal": "^1.1.0" + } + } + } }, "rc-steps": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/rc-steps/-/rc-steps-3.4.1.tgz", - "integrity": "sha512-zdeOFmFqiXlXCQyHet1qrDDbGKZ7OQTrlzn8DP5N6M/WqN7HaYoUDy1fZ+NY2htL5WzzVFQpDRKzjiOiHaSqgw==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/rc-steps/-/rc-steps-4.1.2.tgz", + "integrity": "sha512-kTPiojPtJi12Y7whRqlydRgJXQ1u9JlvGchI6xDrmOMZVpCTLpfc/18iu+aHCtCZaSnM2ENU/9lfm/naWVFcRw==", "requires": { - "babel-runtime": "^6.23.0", + "@babel/runtime": "^7.10.2", "classnames": "^2.2.3", - "lodash": "^4.17.5", - "prop-types": "^15.5.7" + "rc-util": "^5.0.1" + }, + "dependencies": { + "rc-util": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/rc-util/-/rc-util-5.2.1.tgz", + "integrity": "sha512-OnIKp4DsYZpT3St9LwiGARXyMR38wNbk7C4jXS6NGAGHZEQWck7W6qfiJwj+MUmhJiUisAknU6BUs65exbhFTw==", + "requires": { + "react-is": "^16.12.0", + "shallowequal": "^1.1.0" + } + } } }, "rc-swipeout": { @@ -16111,71 +15470,117 @@ } }, "rc-switch": { - "version": "1.9.2", - "resolved": "https://registry.npmjs.org/rc-switch/-/rc-switch-1.9.2.tgz", - "integrity": "sha512-qaK7mY4FLDKy99Hq3A1tf8CcqfzKtHp9LPX8WTnZ0MzdHCTneSARb1XD7Eqeu8BactasYGsi2bF9p18Q+/5JEw==", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/rc-switch/-/rc-switch-3.2.1.tgz", + "integrity": "sha512-ZXYSmx2U+bpHjljjqS5LGj2UIPcQk0EAq6japkaOzQ/OcyzMwWVD9oXMjcRZdO5W1g/pClIV70uEBOWuBMqP4g==", "requires": { + "@babel/runtime": "^7.10.1", "classnames": "^2.2.1", - "prop-types": "^15.5.6", - "react-lifecycles-compat": "^3.0.4" + "rc-util": "^5.0.1" + }, + "dependencies": { + "rc-util": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/rc-util/-/rc-util-5.2.1.tgz", + "integrity": "sha512-OnIKp4DsYZpT3St9LwiGARXyMR38wNbk7C4jXS6NGAGHZEQWck7W6qfiJwj+MUmhJiUisAknU6BUs65exbhFTw==", + "requires": { + "react-is": "^16.12.0", + "shallowequal": "^1.1.0" + } + } } }, "rc-table": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/rc-table/-/rc-table-6.7.0.tgz", - "integrity": "sha512-zzu7UtEHLTzZibB1EOoeKQejH21suoxRQx3evlGGLwz5NUh2HDUHobSr12z5Kd8EPr1+y/LPzXJdX1ctFPC+hA==", + "version": "7.9.7", + "resolved": "https://registry.npmjs.org/rc-table/-/rc-table-7.9.7.tgz", + "integrity": "sha512-S/46pdU7fKBoL7N8JDu+KpkGSB3fJkiGoxvMCLBrR4p7/BJEYr1X4MFKb5BpkE7ZpEK4n44ILiVZZT7I7EiGVA==", "requires": { - "babel-runtime": "6.x", + "@babel/runtime": "^7.10.1", "classnames": "^2.2.5", - "component-classes": "^1.2.6", - "lodash": "^4.17.5", - "mini-store": "^2.0.0", - "prop-types": "^15.5.8", - "rc-util": "^4.0.4", - "react-lifecycles-compat": "^3.0.2", - "shallowequal": "^1.0.2", - "warning": "^3.0.0" + "raf": "^3.4.1", + "rc-resize-observer": "^0.2.0", + "rc-util": "^5.0.4", + "shallowequal": "^1.1.0" }, "dependencies": { - "warning": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/warning/-/warning-3.0.0.tgz", - "integrity": "sha1-MuU3fLVy3kqwR1O9+IIcAe1gW3w=", + "rc-util": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/rc-util/-/rc-util-5.2.1.tgz", + "integrity": "sha512-OnIKp4DsYZpT3St9LwiGARXyMR38wNbk7C4jXS6NGAGHZEQWck7W6qfiJwj+MUmhJiUisAknU6BUs65exbhFTw==", "requires": { - "loose-envify": "^1.0.0" + "react-is": "^16.12.0", + "shallowequal": "^1.1.0" } } } }, "rc-tabs": { - "version": "9.6.7", - "resolved": "https://registry.npmjs.org/rc-tabs/-/rc-tabs-9.6.7.tgz", - "integrity": "sha512-OXbDOgaqv2MGK9QaDi6cdva6bNz3XGw+M9BHQpm1gTGmVQEGx5VcclDClH/3xobIzooxy8hrxg/s0rTlgDnC2w==", + "version": "11.6.1", + "resolved": "https://registry.npmjs.org/rc-tabs/-/rc-tabs-11.6.1.tgz", + "integrity": "sha512-fJZUOmwBo2E4WTbucCSZO/N1ZK+d9K/QchgDeycTIqxl5D/xtX0Dw/vC2DFi140OFjAy2JL7H0EmsSeOFfCgzw==", "requires": { - "@ant-design/create-react-context": "^0.2.4", - "babel-runtime": "6.x", + "@babel/runtime": "^7.10.1", "classnames": "2.x", - "lodash": "^4.17.5", - "prop-types": "15.x", "raf": "^3.4.1", - "rc-hammerjs": "~0.6.0", - "rc-util": "^4.0.4", - "react-lifecycles-compat": "^3.0.4", - "resize-observer-polyfill": "^1.5.1", - "warning": "^4.0.3" + "rc-dropdown": "^3.1.0", + "rc-menu": "^8.2.1", + "rc-resize-observer": "^0.2.1", + "rc-trigger": "^4.2.1", + "rc-util": "^5.0.0" + }, + "dependencies": { + "rc-align": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/rc-align/-/rc-align-4.0.3.tgz", + "integrity": "sha512-TpI0t1tvAo/wYdoZbZlkCK+MkQBqNuPyRZesfsji4tMlqoqQ0q0MhnC9JD5KGPitMvmSB+KWgFpaN2uTz4hw6Q==", + "requires": { + "@babel/runtime": "^7.10.1", + "classnames": "2.x", + "dom-align": "^1.7.0", + "rc-util": "^5.0.1", + "resize-observer-polyfill": "^1.5.1" + } + }, + "rc-trigger": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/rc-trigger/-/rc-trigger-4.4.2.tgz", + "integrity": "sha512-uw2/s7j1b/RXyixa4omPuxZWv/3ln+H+p0v3trIUBxseolbdj8TTFpXYjXMZdGtMpAEAIbN1yo/K+r7wRB+xtQ==", + "requires": { + "@babel/runtime": "^7.10.1", + "classnames": "^2.2.6", + "raf": "^3.4.1", + "rc-align": "^4.0.0", + "rc-motion": "^1.0.0", + "rc-util": "^5.0.1" + } + }, + "rc-util": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/rc-util/-/rc-util-5.2.1.tgz", + "integrity": "sha512-OnIKp4DsYZpT3St9LwiGARXyMR38wNbk7C4jXS6NGAGHZEQWck7W6qfiJwj+MUmhJiUisAknU6BUs65exbhFTw==", + "requires": { + "react-is": "^16.12.0", + "shallowequal": "^1.1.0" + } + } } }, - "rc-time-picker": { - "version": "3.7.3", - "resolved": "https://registry.npmjs.org/rc-time-picker/-/rc-time-picker-3.7.3.tgz", - "integrity": "sha512-Lv1Mvzp9fRXhXEnRLO4nW6GLNxUkfAZ3RsiIBsWjGjXXvMNjdr4BX/ayElHAFK0DoJqOhm7c5tjmIYpEOwcUXg==", + "rc-textarea": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/rc-textarea/-/rc-textarea-0.3.0.tgz", + "integrity": "sha512-vrTPkPT6wrO7EI8ouLFZZLXA1pFVrVRCnkmyyf0yRComFbcH1ogmFEGu85CjVT96rQqAiQFOe0QV3nKopZOJow==", "requires": { - "classnames": "2.x", - "moment": "2.x", - "prop-types": "^15.5.8", - "raf": "^3.4.1", - "rc-trigger": "^2.2.0", - "react-lifecycles-compat": "^3.0.4" + "@babel/runtime": "^7.10.1", + "classnames": "^2.2.1", + "omit.js": "^2.0.0", + "rc-resize-observer": "^0.2.3" + }, + "dependencies": { + "omit.js": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/omit.js/-/omit.js-2.0.2.tgz", + "integrity": "sha512-hJmu9D+bNB40YpL9jYebQl4lsTW6yEHRTroJzNLqQJYHm7c+NQnJGfZmIWh8S3q3KoaxV1aLhV6B3+0N0/kyJg==" + } } }, "rc-tooltip": { @@ -16189,62 +15594,47 @@ } }, "rc-tree": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/rc-tree/-/rc-tree-2.1.4.tgz", - "integrity": "sha512-Xey794Iavgs8YldFlXcZLOhfcIhlX5Oz/yfKufknBXf2AlZCOkc7aHqSM9uTF7fBPtTGPhPxNEfOqHfY7b7xng==", + "version": "3.9.4", + "resolved": "https://registry.npmjs.org/rc-tree/-/rc-tree-3.9.4.tgz", + "integrity": "sha512-uzgpQL4LLoriYE7xTro2tzb5rd6Eg9lhjWZlN/MaWn+lsFw2nnlLbMULejHd7RQXdYB7t3tTCwk7DiKSN+udrA==", "requires": { - "@ant-design/create-react-context": "^0.2.4", + "@babel/runtime": "^7.10.1", "classnames": "2.x", - "prop-types": "^15.5.8", - "rc-animate": "^2.6.0", - "rc-util": "^4.5.1", - "react-lifecycles-compat": "^3.0.4", - "warning": "^4.0.3" + "rc-motion": "^1.0.0", + "rc-util": "^5.0.0", + "rc-virtual-list": "^3.0.1" + }, + "dependencies": { + "rc-util": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/rc-util/-/rc-util-5.2.1.tgz", + "integrity": "sha512-OnIKp4DsYZpT3St9LwiGARXyMR38wNbk7C4jXS6NGAGHZEQWck7W6qfiJwj+MUmhJiUisAknU6BUs65exbhFTw==", + "requires": { + "react-is": "^16.12.0", + "shallowequal": "^1.1.0" + } + } } }, "rc-tree-select": { - "version": "2.9.4", - "resolved": "https://registry.npmjs.org/rc-tree-select/-/rc-tree-select-2.9.4.tgz", - "integrity": "sha512-0HQkXAN4XbfBW20CZYh3G+V+VMrjX42XRtDCpyv6PDUm5vikC0Ob682ZBCVS97Ww2a5Hf6Ajmu0ahWEdIEpwhg==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/rc-tree-select/-/rc-tree-select-4.1.2.tgz", + "integrity": "sha512-2tRwZ4ChY+BarVKHoPR65kSZtopgwKCig6ngJiiTVgYfRdAhfdQp2j2+L8YW9TkosYGmwgTOhmlphlG3QNy7Pg==", "requires": { - "classnames": "^2.2.1", - "dom-scroll-into-view": "^1.2.1", - "prop-types": "^15.5.8", - "raf": "^3.4.0", - "rc-animate": "^2.8.2", - "rc-tree": "~2.1.0", - "rc-trigger": "^3.0.0", - "rc-util": "^4.5.0", - "react-lifecycles-compat": "^3.0.4", - "shallowequal": "^1.0.2", - "warning": "^4.0.1" + "@babel/runtime": "^7.10.1", + "classnames": "2.x", + "rc-select": "^11.1.1", + "rc-tree": "^3.8.0", + "rc-util": "^5.0.5" }, "dependencies": { - "rc-trigger": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/rc-trigger/-/rc-trigger-3.0.0.tgz", - "integrity": "sha512-hQxbbJpo23E2QnYczfq3Ec5J5tVl2mUDhkqxrEsQAqk16HfADQg+iKNWzEYXyERSncdxfnzYuaBgy764mNRzTA==", + "rc-util": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/rc-util/-/rc-util-5.2.1.tgz", + "integrity": "sha512-OnIKp4DsYZpT3St9LwiGARXyMR38wNbk7C4jXS6NGAGHZEQWck7W6qfiJwj+MUmhJiUisAknU6BUs65exbhFTw==", "requires": { - "babel-runtime": "6.x", - "classnames": "^2.2.6", - "prop-types": "15.x", - "raf": "^3.4.0", - "rc-align": "^2.4.1", - "rc-animate": "^3.0.0-rc.1", - "rc-util": "^4.15.7" - }, - "dependencies": { - "rc-animate": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/rc-animate/-/rc-animate-3.1.1.tgz", - "integrity": "sha512-8wg2Zg3EETy0k/9kYuis30NJNQg1D6/WSQwnCiz6SvyxQXNet/rVraRz3bPngwY6rcU2nlRvoShiYOorXyF7Sg==", - "requires": { - "@ant-design/css-animation": "^1.7.2", - "classnames": "^2.2.6", - "raf": "^3.4.0", - "rc-util": "^4.15.3" - } - } + "react-is": "^16.12.0", + "shallowequal": "^1.1.0" } } } @@ -16264,14 +15654,11 @@ } }, "rc-upload": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/rc-upload/-/rc-upload-2.7.0.tgz", - "integrity": "sha512-Oh9EJB4xE8MQUZ2D0OUST3UMIBjHjnO2IjPNW/cbPredxZz+lzbLPCZxcxRwUwu1gt0LA968UWXAgT1EvZdFfA==", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/rc-upload/-/rc-upload-3.2.1.tgz", + "integrity": "sha512-gmIy08tco2YFTSiru9zgeTmUcDKPyUMUUBdUIjG2CcHz4jdbpaPx/RL/Wz9CMD6ppQizK0gES0rcQ1+o5frK2Q==", "requires": { - "babel-runtime": "6.x", - "classnames": "^2.2.5", - "prop-types": "^15.5.7", - "warning": "4.x" + "classnames": "^2.2.5" } }, "rc-util": { @@ -16286,15 +15673,35 @@ "shallowequal": "^1.1.0" } }, + "rc-virtual-list": { + "version": "3.0.12", + "resolved": "https://registry.npmjs.org/rc-virtual-list/-/rc-virtual-list-3.0.12.tgz", + "integrity": "sha512-CSl/QFkLzuq84rqKi1GcrDnQgnYGdsfDiGtISIX8ZE2Uc4ZmUA2exQ/4lXmX2Hnex/sQK4oO+NJuQYfY3CTxxg==", + "requires": { + "classnames": "^2.2.6", + "rc-resize-observer": "^0.2.3", + "rc-util": "^5.0.7" + }, + "dependencies": { + "rc-util": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/rc-util/-/rc-util-5.2.1.tgz", + "integrity": "sha512-OnIKp4DsYZpT3St9LwiGARXyMR38wNbk7C4jXS6NGAGHZEQWck7W6qfiJwj+MUmhJiUisAknU6BUs65exbhFTw==", + "requires": { + "react-is": "^16.12.0", + "shallowequal": "^1.1.0" + } + } + } + }, "react": { - "version": "16.8.6", - "resolved": "https://registry.npmjs.org/react/-/react-16.8.6.tgz", - "integrity": "sha512-pC0uMkhLaHm11ZSJULfOBqV4tIZkx87ZLvbbQYunNixAAvjnC+snJCg0XQXn9VIsttVsbZP/H/ewzgsd5fxKXw==", + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react/-/react-16.13.1.tgz", + "integrity": "sha512-YMZQQq32xHLX0bz5Mnibv1/LHb3Sqzngu7xstSM+vrkE5Kzr9xE0yMByK5kMoTK30YVJE61WfbxIFFvfeDKT1w==", "requires": { "loose-envify": "^1.1.0", "object-assign": "^4.1.1", - "prop-types": "^15.6.2", - "scheduler": "^0.13.6" + "prop-types": "^15.6.2" } }, "react-addons-shallow-compare": { @@ -16306,38 +15713,48 @@ "object-assign": "^4.1.0" } }, + "react-alice-carousel": { + "version": "1.19.3", + "resolved": "https://registry.npmjs.org/react-alice-carousel/-/react-alice-carousel-1.19.3.tgz", + "integrity": "sha512-FaOQ/f7C/4cBuXr2tA4YgVyVrvWI7VbccGxJpu+rCsnnUlcN0YLz+20iJ2TFCXJp9M+/FjBratUNC7vQBrMQPw==", + "requires": { + "prop-types": "^15.5.10", + "vanilla-swipe": "1.2.0" + } + }, "react-app-polyfill": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/react-app-polyfill/-/react-app-polyfill-0.2.2.tgz", - "integrity": "sha512-mAYn96B/nB6kWG87Ry70F4D4rsycU43VYTj3ZCbKP+SLJXwC0x6YCbwcICh3uW8/C9s1VgP197yx+w7SCWeDdQ==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/react-app-polyfill/-/react-app-polyfill-1.0.6.tgz", + "integrity": "sha512-OfBnObtnGgLGfweORmdZbyEz+3dgVePQBb3zipiaDsMHV1NpWm0rDFYIVXFV/AK+x4VIIfWHhrdMIeoTLyRr2g==", "dev": true, "requires": { - "core-js": "2.6.4", - "object-assign": "4.1.1", - "promise": "8.0.2", - "raf": "3.4.1", - "whatwg-fetch": "3.0.0" + "core-js": "^3.5.0", + "object-assign": "^4.1.1", + "promise": "^8.0.3", + "raf": "^3.4.1", + "regenerator-runtime": "^0.13.3", + "whatwg-fetch": "^3.0.0" }, "dependencies": { "core-js": { - "version": "2.6.4", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.4.tgz", - "integrity": "sha512-05qQ5hXShcqGkPZpXEFLIpxayZscVD2kuMBZewxiIPPEagukO4mqgPA9CWhUvFBJfy3ODdK2p9xyHh7FTU9/7A==", + "version": "3.6.5", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.5.tgz", + "integrity": "sha512-vZVEEwZoIsI+vPEuoF9Iqf5H7/M3eeQqWlQnYa8FSKKePuYTf5MWnxb5SDAzCa60b3JBRS5g9b+Dq7b1y/RCrA==", "dev": true }, "promise": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/promise/-/promise-8.0.2.tgz", - "integrity": "sha512-EIyzM39FpVOMbqgzEHhxdrEhtOSDOtjMZQ0M6iVfCE+kWNgCkAyOdnuCWqfmflylftfadU6FkiMgHZA2kUzwRw==", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/promise/-/promise-8.1.0.tgz", + "integrity": "sha512-W04AqnILOL/sPRXziNicCjSNRruLAuIHEOVBazepu0545DDNGYHz7ar9ZgZ1fMU8/MA4mVxp5rkBWRi6OXIy3Q==", "dev": true, "requires": { "asap": "~2.0.6" } }, - "whatwg-fetch": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.0.0.tgz", - "integrity": "sha512-9GSJUgz1D4MfyKU7KRqwOjXCXTqWdFNvEr7eUBYchQiVc744mqK/MzXPNR2WsPkmkOa4ywfg8C2n8h+13Bey1Q==", + "regenerator-runtime": { + "version": "0.13.7", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz", + "integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==", "dev": true } } @@ -16388,77 +15805,142 @@ } }, "react-dev-utils": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/react-dev-utils/-/react-dev-utils-8.0.0.tgz", - "integrity": "sha512-TK8cj7eghvxfe7bfBluLGpI/upo4EXC+G74hYmPucAG8C2XcbT+vKnlWPwLnABb75Zk+mR6D556Da+yvDjljrw==", + "version": "10.2.1", + "resolved": "https://registry.npmjs.org/react-dev-utils/-/react-dev-utils-10.2.1.tgz", + "integrity": "sha512-XxTbgJnYZmxuPtY3y/UV0D8/65NKkmaia4rXzViknVnZeVlklSh8u6TnaEYPfAi/Gh1TP4mEOXHI6jQOPbeakQ==", "dev": true, "requires": { - "@babel/code-frame": "7.0.0", - "address": "1.0.3", - "browserslist": "4.4.1", + "@babel/code-frame": "7.8.3", + "address": "1.1.2", + "browserslist": "4.10.0", "chalk": "2.4.2", - "cross-spawn": "6.0.5", + "cross-spawn": "7.0.1", "detect-port-alt": "1.1.6", - "escape-string-regexp": "1.0.5", - "filesize": "3.6.1", - "find-up": "3.0.0", - "fork-ts-checker-webpack-plugin": "1.0.0-alpha.6", + "escape-string-regexp": "2.0.0", + "filesize": "6.0.1", + "find-up": "4.1.0", + "fork-ts-checker-webpack-plugin": "3.1.1", "global-modules": "2.0.0", "globby": "8.0.2", - "gzip-size": "5.0.0", + "gzip-size": "5.1.1", "immer": "1.10.0", - "inquirer": "6.2.1", - "is-root": "2.0.0", + "inquirer": "7.0.4", + "is-root": "2.1.0", "loader-utils": "1.2.3", - "opn": "5.4.0", - "pkg-up": "2.0.0", - "react-error-overlay": "^5.1.4", + "open": "^7.0.2", + "pkg-up": "3.1.0", + "react-error-overlay": "^6.0.7", "recursive-readdir": "2.2.2", - "shell-quote": "1.6.1", - "sockjs-client": "1.3.0", - "strip-ansi": "5.0.0", + "shell-quote": "1.7.2", + "strip-ansi": "6.0.0", "text-table": "0.2.0" }, "dependencies": { "@babel/code-frame": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.0.0.tgz", - "integrity": "sha512-OfC2uemaknXr87bdLUkWog7nYuliM9Ij5HUcajsVcMCpQrcLmtxRbVFTIqmcSkSeYRBFBRxs2FiUqFJDLdiebA==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.8.3.tgz", + "integrity": "sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g==", + "dev": true, + "requires": { + "@babel/highlight": "^7.8.3" + } + }, + "ansi-escapes": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.1.tgz", + "integrity": "sha512-JWF7ocqNrp8u9oqpgV+wH5ftbt+cfvv+PTjOvKLT3AdYly/LmORARfEVT1iyjwN+4MqE5UmVKoAdIBqeoCHgLA==", "dev": true, "requires": { - "@babel/highlight": "^7.0.0" + "type-fest": "^0.11.0" } }, "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", "dev": true }, "browserslist": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.4.1.tgz", - "integrity": "sha512-pEBxEXg7JwaakBXjATYw/D1YZh4QUSCX/Mnd/wnqSRPPSi1U39iDhDoKGoBUcraKdxDlrYqJxSI5nNvD+dWP2A==", + "version": "4.10.0", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.10.0.tgz", + "integrity": "sha512-TpfK0TDgv71dzuTsEAlQiHeWQ/tiPqgNZVdv046fvNtBZrjbv2O3TsWCDU0AWGJJKCF/KsjNdLzR9hXOsh/CfA==", + "dev": true, + "requires": { + "caniuse-lite": "^1.0.30001035", + "electron-to-chromium": "^1.3.378", + "node-releases": "^1.1.52", + "pkg-up": "^3.1.0" + } + }, + "cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "dev": true, + "requires": { + "restore-cursor": "^3.1.0" + } + }, + "cli-width": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.1.tgz", + "integrity": "sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw==", + "dev": true + }, + "cross-spawn": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.1.tgz", + "integrity": "sha512-u7v4o84SwFpD32Z8IIcPZ6z1/ie24O6RU3RbtL5Y316l3KuHVPx9ItBgWQ6VlfAFnRnTtMUrsQ9MUUTuEZjogg==", "dev": true, "requires": { - "caniuse-lite": "^1.0.30000929", - "electron-to-chromium": "^1.3.103", - "node-releases": "^1.1.3" + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" } }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, "emojis-list": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz", "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=", "dev": true }, - "figures": { + "escape-string-regexp": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", - "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "dev": true + }, + "figures": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", + "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", "dev": true, "requires": { "escape-string-regexp": "^1.0.5" + }, + "dependencies": { + "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 + } + } + }, + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" } }, "globby": { @@ -16483,30 +15965,47 @@ "dev": true }, "inquirer": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.2.1.tgz", - "integrity": "sha512-088kl3DRT2dLU5riVMKKr1DlImd6X7smDhpXUCkJDCKvTEJeRiXh0G132HG9u5a+6Ylw9plFRY7RuTnwohYSpg==", + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.0.4.tgz", + "integrity": "sha512-Bu5Td5+j11sCkqfqmUTiwv+tWisMtP0L7Q8WrqA2C/BbBhy1YTdFrvjjlrKq8oagA/tLQBski2Gcx/Sqyi2qSQ==", "dev": true, "requires": { - "ansi-escapes": "^3.0.0", - "chalk": "^2.0.0", - "cli-cursor": "^2.1.0", + "ansi-escapes": "^4.2.1", + "chalk": "^2.4.2", + "cli-cursor": "^3.1.0", "cli-width": "^2.0.0", - "external-editor": "^3.0.0", - "figures": "^2.0.0", - "lodash": "^4.17.10", - "mute-stream": "0.0.7", + "external-editor": "^3.0.3", + "figures": "^3.0.0", + "lodash": "^4.17.15", + "mute-stream": "0.0.8", "run-async": "^2.2.0", - "rxjs": "^6.1.0", - "string-width": "^2.1.0", - "strip-ansi": "^5.0.0", + "rxjs": "^6.5.3", + "string-width": "^4.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" + } + } } }, "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=", + "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==", "dev": true }, "json5": { @@ -16529,60 +16028,115 @@ "json5": "^1.0.1" } }, - "shell-quote": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.6.1.tgz", - "integrity": "sha1-9HgZSczkAmlxJ0MOo7PFR29IF2c=", + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "dev": true, "requires": { - "array-filter": "~0.0.0", - "array-map": "~0.0.0", - "array-reduce": "~0.0.0", - "jsonify": "~0.0.0" + "p-locate": "^4.1.0" } }, - "slash": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", - "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=", + "mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", "dev": true }, - "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", "dev": true, "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - }, - "dependencies": { - "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" - } - } + "mimic-fn": "^2.1.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==", + "dev": true, + "requires": { + "p-limit": "^2.2.0" + } + }, + "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==", + "dev": true + }, + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true + }, + "restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "dev": true, + "requires": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + } + }, + "shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true + }, + "slash": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", + "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=", + "dev": true + }, + "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==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" } }, "strip-ansi": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.0.0.tgz", - "integrity": "sha512-Uu7gQyZI7J7gn5qLn1Np3G9vcYGTVqB+lFTytnDJv83dd8T22aGH451P3jueT2/QemInJDfxHB5Tde5OzgG1Ow==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", "dev": true, "requires": { - "ansi-regex": "^4.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 - } + "ansi-regex": "^5.0.0" + } + }, + "type-fest": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.11.0.tgz", + "integrity": "sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ==", + "dev": true + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "requires": { + "isexe": "^2.0.0" } } } @@ -16593,14 +16147,14 @@ "integrity": "sha512-XIBgwIfpGAknm7tXe/YNbx4ieIR7IyFI3KNfSQk4UjHVy97UHe/nB7iJj8R/dDsI+I/ZzPR4HJ39Gh5tI4nhxw==" }, "react-dom": { - "version": "16.8.6", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.8.6.tgz", - "integrity": "sha512-1nL7PIq9LTL3fthPqwkvr2zY7phIPjYrT0jp4HjyEQrEROnw4dG41VVwi/wfoCneoleqrNX7iAD+pXebJZwrwA==", + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.13.1.tgz", + "integrity": "sha512-81PIMmVLnCNLO/fFOQxdQkvEq/+Hfpv24XNJfpyZhTRfO0QcmQIF/PgCa1zCOj2w1hrn12MFLyaJ/G0+Mxtfag==", "requires": { "loose-envify": "^1.1.0", "object-assign": "^4.1.1", "prop-types": "^15.6.2", - "scheduler": "^0.13.6" + "scheduler": "^0.19.1" } }, "react-draft-wysiwyg": { @@ -16615,19 +16169,10 @@ "prop-types": "^15.7.2" } }, - "react-draggable": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/react-draggable/-/react-draggable-3.2.1.tgz", - "integrity": "sha512-r+3Bs9InID2lyIEbR8UIRVtpn4jgu1ArFEZgIy8vibJjijLSdNLX7rH9U68BBVD4RD9v44RXbaK4EHLyKXzNQw==", - "requires": { - "classnames": "^2.2.5", - "prop-types": "^15.6.0" - } - }, "react-error-overlay": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-5.1.6.tgz", - "integrity": "sha512-X1Y+0jR47ImDVr54Ab6V9eGk0Hnu7fVWGeHQSOXHf/C2pF9c6uy3gef8QUeuUiWlNb0i08InPSE5a/KJzNzw1Q==", + "version": "6.0.7", + "resolved": "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-6.0.7.tgz", + "integrity": "sha512-TAv1KJFh3RhqxNvhzxj6LeT5NWklP6rDr2a0jaTfsZ5wSZWHOGeqQyejUp3xxLfPt2UpyJEcVQB/zyPcmonNFA==", "dev": true }, "react-event-listener": { @@ -16713,17 +16258,6 @@ "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" }, - "react-lazy-load": { - "version": "3.1.13", - "resolved": "https://registry.npmjs.org/react-lazy-load/-/react-lazy-load-3.1.13.tgz", - "integrity": "sha512-eAVNUn3vhNj79Iv04NOCwy/sCLyqDEhL3j9aJKV7VJuRBDg6rCiB+BIWHuG7VXJGCgb//6nX/soR8PTyWRhFvQ==", - "requires": { - "eventlistener": "0.0.1", - "lodash.debounce": "^4.0.0", - "lodash.throttle": "^4.0.0", - "prop-types": "^15.5.8" - } - }, "react-lifecycles-compat": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz", @@ -16781,11 +16315,6 @@ "react-tween-state": "^0.1.5" } }, - "react-numeric-input": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/react-numeric-input/-/react-numeric-input-2.2.3.tgz", - "integrity": "sha1-S/WRjD6v7YUagN8euZLZQQArtVI=" - }, "react-outside-click-handler": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/react-outside-click-handler/-/react-outside-click-handler-1.3.0.tgz", @@ -16808,711 +16337,146 @@ }, "react-recaptcha-v3": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/react-recaptcha-v3/-/react-recaptcha-v3-2.0.1.tgz", - "integrity": "sha512-ZQ+auotgu+E/6YAbPqk53sf9xgcp8TFvVVfL4bVR7PXj98nQmdaONugdLJEA7g1iTZ4yQqC4mZbcVUGZmwb25Q==" - }, - "react-rectangle": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/react-rectangle/-/react-rectangle-1.3.3.tgz", - "integrity": "sha1-xEaUzczEzbwpWxxp47O8sHU3vGs=", - "requires": { - "lodash.isarray": "^4.0.0", - "lodash.isfinite": "^3.2.1", - "lodash.isnan": "^3.0.2", - "lodash.isstring": "^4.0.1" - } - }, - "react-redux": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-6.0.1.tgz", - "integrity": "sha512-T52I52Kxhbqy/6TEfBv85rQSDz6+Y28V/pf52vDWs1YRXG19mcFOGfHnY2HsNFHyhP+ST34Aih98fvt6tqwVcQ==", - "requires": { - "@babel/runtime": "^7.3.1", - "hoist-non-react-statics": "^3.3.0", - "invariant": "^2.2.4", - "loose-envify": "^1.4.0", - "prop-types": "^15.7.2", - "react-is": "^16.8.2" - } - }, - "react-router": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/react-router/-/react-router-3.2.1.tgz", - "integrity": "sha512-SXkhC0nr3G0ltzVU07IN8jYl0bB6FsrDIqlLC9dK3SITXqyTJyM7yhXlUqs89w3Nqi5OkXsfRUeHX+P874HQrg==", - "requires": { - "create-react-class": "^15.5.1", - "history": "^3.0.0", - "hoist-non-react-statics": "^2.3.1", - "invariant": "^2.2.1", - "loose-envify": "^1.2.0", - "prop-types": "^15.5.6", - "warning": "^3.0.0" - }, - "dependencies": { - "hoist-non-react-statics": { - "version": "2.5.5", - "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-2.5.5.tgz", - "integrity": "sha512-rqcy4pJo55FTTLWt+bU8ukscqHeE/e9KWvsOW2b/a3afxQZhwkQdT1rPPCJ0rYXdj4vNcasY8zHTH+jF/qStxw==" - }, - "warning": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/warning/-/warning-3.0.0.tgz", - "integrity": "sha1-MuU3fLVy3kqwR1O9+IIcAe1gW3w=", - "requires": { - "loose-envify": "^1.0.0" - } - } - } - }, - "react-router-redux": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/react-router-redux/-/react-router-redux-4.0.8.tgz", - "integrity": "sha1-InQDWWtRUeGCN32rg1tdRfD4BU4=" - }, - "react-scripts": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/react-scripts/-/react-scripts-2.1.8.tgz", - "integrity": "sha512-mDC8fYWCyuB9VROti8OCPdHE79UEchVVZmuS/yaIs47VkvZpgZqUvzghYBswZRchqnW0aARNY8xXrzoFRhhK7A==", - "dev": true, - "requires": { - "@babel/core": "7.2.2", - "@svgr/webpack": "4.1.0", - "babel-core": "7.0.0-bridge.0", - "babel-eslint": "9.0.0", - "babel-jest": "23.6.0", - "babel-loader": "8.0.5", - "babel-plugin-named-asset-import": "^0.3.1", - "babel-preset-react-app": "^7.0.2", - "bfj": "6.1.1", - "case-sensitive-paths-webpack-plugin": "2.2.0", - "css-loader": "1.0.0", - "dotenv": "6.0.0", - "dotenv-expand": "4.2.0", - "eslint": "5.12.0", - "eslint-config-react-app": "^3.0.8", - "eslint-loader": "2.1.1", - "eslint-plugin-flowtype": "2.50.1", - "eslint-plugin-import": "2.14.0", - "eslint-plugin-jsx-a11y": "6.1.2", - "eslint-plugin-react": "7.12.4", - "file-loader": "2.0.0", - "fs-extra": "7.0.1", - "fsevents": "1.2.4", - "html-webpack-plugin": "4.0.0-alpha.2", - "identity-obj-proxy": "3.0.0", - "jest": "23.6.0", - "jest-pnp-resolver": "1.0.2", - "jest-resolve": "23.6.0", - "jest-watch-typeahead": "^0.2.1", - "mini-css-extract-plugin": "0.5.0", - "optimize-css-assets-webpack-plugin": "5.0.1", - "pnp-webpack-plugin": "1.2.1", - "postcss-flexbugs-fixes": "4.1.0", - "postcss-loader": "3.0.0", - "postcss-preset-env": "6.5.0", - "postcss-safe-parser": "4.0.1", - "react-app-polyfill": "^0.2.2", - "react-dev-utils": "^8.0.0", - "resolve": "1.10.0", - "sass-loader": "7.1.0", - "style-loader": "0.23.1", - "terser-webpack-plugin": "1.2.2", - "url-loader": "1.1.2", - "webpack": "4.28.3", - "webpack-dev-server": "3.1.14", - "webpack-manifest-plugin": "2.0.4", - "workbox-webpack-plugin": "3.6.3" - }, - "dependencies": { - "fsevents": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.4.tgz", - "integrity": "sha512-z8H8/diyk76B7q5wg+Ud0+CqzcAF3mBBI/bA5ne5zrRUUIvNkJY//D3BqyH571KuAC4Nr7Rw7CjWX4r0y9DvNg==", - "dev": true, - "optional": true, - "requires": { - "nan": "^2.9.2", - "node-pre-gyp": "^0.10.0" - }, - "dependencies": { - "abbrev": { - "version": "1.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "ansi-regex": { - "version": "2.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "aproba": { - "version": "1.2.0", - "bundled": true, - "dev": true, - "optional": true - }, - "are-we-there-yet": { - "version": "1.1.4", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "delegates": "^1.0.0", - "readable-stream": "^2.0.6" - } - }, - "balanced-match": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "brace-expansion": { - "version": "1.1.11", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "chownr": { - "version": "1.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "code-point-at": { - "version": "1.1.0", - "bundled": true, - "dev": true, - "optional": true - }, - "concat-map": { - "version": "0.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "console-control-strings": { - "version": "1.1.0", - "bundled": true, - "dev": true, - "optional": true - }, - "core-util-is": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "debug": { - "version": "2.6.9", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "ms": "2.0.0" - } - }, - "deep-extend": { - "version": "0.5.1", - "bundled": true, - "dev": true, - "optional": true - }, - "delegates": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "detect-libc": { - "version": "1.0.3", - "bundled": true, - "dev": true, - "optional": true - }, - "fs-minipass": { - "version": "1.2.5", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "minipass": "^2.2.1" - } - }, - "fs.realpath": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "gauge": { - "version": "2.7.4", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "aproba": "^1.0.3", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.0", - "object-assign": "^4.1.0", - "signal-exit": "^3.0.0", - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wide-align": "^1.1.0" - } - }, - "glob": { - "version": "7.1.2", - "bundled": true, - "dev": true, - "optional": 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" - } - }, - "has-unicode": { - "version": "2.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "iconv-lite": { - "version": "0.4.21", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "safer-buffer": "^2.1.0" - } - }, - "ignore-walk": { - "version": "3.0.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "minimatch": "^3.0.4" - } - }, - "inflight": { - "version": "1.0.6", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.3", - "bundled": true, - "dev": true, - "optional": true - }, - "ini": { - "version": "1.3.5", - "bundled": true, - "dev": true, - "optional": true - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "isarray": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "minimatch": { - "version": "3.0.4", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "0.0.8", - "bundled": true, - "dev": true, - "optional": true - }, - "minipass": { - "version": "2.2.4", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "safe-buffer": "^5.1.1", - "yallist": "^3.0.0" - } - }, - "minizlib": { - "version": "1.1.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "minipass": "^2.2.1" - } - }, - "mkdirp": { - "version": "0.5.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "minimist": "0.0.8" - } - }, - "ms": { - "version": "2.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "needle": { - "version": "2.2.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "debug": "^2.1.2", - "iconv-lite": "^0.4.4", - "sax": "^1.2.4" - } - }, - "node-pre-gyp": { - "version": "0.10.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "detect-libc": "^1.0.2", - "mkdirp": "^0.5.1", - "needle": "^2.2.0", - "nopt": "^4.0.1", - "npm-packlist": "^1.1.6", - "npmlog": "^4.0.2", - "rc": "^1.1.7", - "rimraf": "^2.6.1", - "semver": "^5.3.0", - "tar": "^4" - } - }, - "nopt": { - "version": "4.0.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "abbrev": "1", - "osenv": "^0.1.4" - } - }, - "npm-bundled": { - "version": "1.0.3", - "bundled": true, - "dev": true, - "optional": true - }, - "npm-packlist": { - "version": "1.1.10", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "ignore-walk": "^3.0.1", - "npm-bundled": "^1.0.1" - } - }, - "npmlog": { - "version": "4.1.2", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "are-we-there-yet": "~1.1.2", - "console-control-strings": "~1.1.0", - "gauge": "~2.7.3", - "set-blocking": "~2.0.0" - } - }, - "number-is-nan": { - "version": "1.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "object-assign": { - "version": "4.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "once": { - "version": "1.4.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "wrappy": "1" - } - }, - "os-homedir": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "os-tmpdir": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "osenv": { - "version": "0.1.5", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "os-homedir": "^1.0.0", - "os-tmpdir": "^1.0.0" - } - }, - "path-is-absolute": { - "version": "1.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "process-nextick-args": { - "version": "2.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "rc": { - "version": "1.2.7", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "deep-extend": "^0.5.1", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - }, - "dependencies": { - "minimist": { - "version": "1.2.0", - "bundled": true, - "dev": true, - "optional": true - } - } - }, - "readable-stream": { - "version": "2.3.6", - "bundled": true, - "dev": true, - "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" - } - }, - "rimraf": { - "version": "2.6.2", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "glob": "^7.0.5" - } - }, - "safe-buffer": { - "version": "5.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "safer-buffer": { - "version": "2.1.2", - "bundled": true, - "dev": true, - "optional": true - }, - "sax": { - "version": "1.2.4", - "bundled": true, - "dev": true, - "optional": true - }, - "semver": { - "version": "5.5.0", - "bundled": true, - "dev": true, - "optional": true - }, - "set-blocking": { - "version": "2.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "signal-exit": { - "version": "3.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "string-width": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - }, - "string_decoder": { - "version": "1.1.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "safe-buffer": "~5.1.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "strip-json-comments": { - "version": "2.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "tar": { - "version": "4.4.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "chownr": "^1.0.1", - "fs-minipass": "^1.2.5", - "minipass": "^2.2.4", - "minizlib": "^1.1.0", - "mkdirp": "^0.5.0", - "safe-buffer": "^5.1.1", - "yallist": "^3.0.2" - } - }, - "util-deprecate": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "wide-align": { - "version": "1.1.2", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "string-width": "^1.0.2" - } - }, - "wrappy": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "yallist": { - "version": "3.0.2", - "bundled": true, - "dev": true, - "optional": true - } + "resolved": "https://registry.npmjs.org/react-recaptcha-v3/-/react-recaptcha-v3-2.0.1.tgz", + "integrity": "sha512-ZQ+auotgu+E/6YAbPqk53sf9xgcp8TFvVVfL4bVR7PXj98nQmdaONugdLJEA7g1iTZ4yQqC4mZbcVUGZmwb25Q==" + }, + "react-redux": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-6.0.1.tgz", + "integrity": "sha512-T52I52Kxhbqy/6TEfBv85rQSDz6+Y28V/pf52vDWs1YRXG19mcFOGfHnY2HsNFHyhP+ST34Aih98fvt6tqwVcQ==", + "requires": { + "@babel/runtime": "^7.3.1", + "hoist-non-react-statics": "^3.3.0", + "invariant": "^2.2.4", + "loose-envify": "^1.4.0", + "prop-types": "^15.7.2", + "react-is": "^16.8.2" + } + }, + "react-router": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-3.2.1.tgz", + "integrity": "sha512-SXkhC0nr3G0ltzVU07IN8jYl0bB6FsrDIqlLC9dK3SITXqyTJyM7yhXlUqs89w3Nqi5OkXsfRUeHX+P874HQrg==", + "requires": { + "create-react-class": "^15.5.1", + "history": "^3.0.0", + "hoist-non-react-statics": "^2.3.1", + "invariant": "^2.2.1", + "loose-envify": "^1.2.0", + "prop-types": "^15.5.6", + "warning": "^3.0.0" + }, + "dependencies": { + "hoist-non-react-statics": { + "version": "2.5.5", + "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-2.5.5.tgz", + "integrity": "sha512-rqcy4pJo55FTTLWt+bU8ukscqHeE/e9KWvsOW2b/a3afxQZhwkQdT1rPPCJ0rYXdj4vNcasY8zHTH+jF/qStxw==" + }, + "warning": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/warning/-/warning-3.0.0.tgz", + "integrity": "sha1-MuU3fLVy3kqwR1O9+IIcAe1gW3w=", + "requires": { + "loose-envify": "^1.0.0" } + } + } + }, + "react-scripts": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/react-scripts/-/react-scripts-3.4.3.tgz", + "integrity": "sha512-oSnoWmii/iKdeQiwaO6map1lUaZLmG0xIUyb/HwCVFLT7gNbj8JZ9RmpvMCZ4fB98ZUMRfNmp/ft8uy/xD1RLA==", + "dev": true, + "requires": { + "@babel/core": "7.9.0", + "@svgr/webpack": "4.3.3", + "@typescript-eslint/eslint-plugin": "^2.10.0", + "@typescript-eslint/parser": "^2.10.0", + "babel-eslint": "10.1.0", + "babel-jest": "^24.9.0", + "babel-loader": "8.1.0", + "babel-plugin-named-asset-import": "^0.3.6", + "babel-preset-react-app": "^9.1.2", + "camelcase": "^5.3.1", + "case-sensitive-paths-webpack-plugin": "2.3.0", + "css-loader": "3.4.2", + "dotenv": "8.2.0", + "dotenv-expand": "5.1.0", + "eslint": "^6.6.0", + "eslint-config-react-app": "^5.2.1", + "eslint-loader": "3.0.3", + "eslint-plugin-flowtype": "4.6.0", + "eslint-plugin-import": "2.20.1", + "eslint-plugin-jsx-a11y": "6.2.3", + "eslint-plugin-react": "7.19.0", + "eslint-plugin-react-hooks": "^1.6.1", + "file-loader": "4.3.0", + "fs-extra": "^8.1.0", + "fsevents": "2.1.2", + "html-webpack-plugin": "4.0.0-beta.11", + "identity-obj-proxy": "3.0.0", + "jest": "24.9.0", + "jest-environment-jsdom-fourteen": "1.0.1", + "jest-resolve": "24.9.0", + "jest-watch-typeahead": "0.4.2", + "mini-css-extract-plugin": "0.9.0", + "optimize-css-assets-webpack-plugin": "5.0.3", + "pnp-webpack-plugin": "1.6.4", + "postcss-flexbugs-fixes": "4.1.0", + "postcss-loader": "3.0.0", + "postcss-normalize": "8.0.1", + "postcss-preset-env": "6.7.0", + "postcss-safe-parser": "4.0.1", + "react-app-polyfill": "^1.0.6", + "react-dev-utils": "^10.2.1", + "resolve": "1.15.0", + "resolve-url-loader": "3.1.1", + "sass-loader": "8.0.2", + "semver": "6.3.0", + "style-loader": "0.23.1", + "terser-webpack-plugin": "2.3.8", + "ts-pnp": "1.1.6", + "url-loader": "2.3.0", + "webpack": "4.42.0", + "webpack-dev-server": "3.11.0", + "webpack-manifest-plugin": "2.2.0", + "workbox-webpack-plugin": "4.3.1" + }, + "dependencies": { + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true + }, + "fsevents": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.2.tgz", + "integrity": "sha512-R4wDiBwZ0KzpgOWetKDug1FZcYhqYnUYKtfZYt4mD5SBz76q0KR4Q9o7GIPamsVPGmW3EYPPJ0dOOjvx32ldZA==", + "dev": true, + "optional": true }, "resolve": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.10.0.tgz", - "integrity": "sha512-3sUr9aq5OfSg2S9pNtPA9hL1FVEAjvfOC4leW0SNf/mpnaakz2a9femSd6LqAww2RaFctwyf1lCqnTHuF1rxDg==", + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.15.0.tgz", + "integrity": "sha512-+hTmAldEGE80U2wJJDC1lebb5jWqvTYAfm3YZ1ckk1gBr0MnCqUKlwK1e+anaFljIl+F5tR5IoZcm4ZDA1zMQw==", "dev": true, "requires": { "path-parse": "^1.0.6" } + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true } } }, "react-side-effect": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/react-side-effect/-/react-side-effect-2.1.1.tgz", - "integrity": "sha512-2FoTQzRNTncBVtnzxFOk2mCpcfxQpenBMbk5kSVBg5UcPqV9fRbgY2zhb7GTWWOlpFmAxhClBDlIq8Rsubz1yQ==" - }, - "react-slick": { - "version": "0.24.0", - "resolved": "https://registry.npmjs.org/react-slick/-/react-slick-0.24.0.tgz", - "integrity": "sha512-Pvo0B74ohumQdYOf0qP+pdQpj9iUbAav7+2qiF3uTc5XeQp/Y/cnIeDBM2tB3txthfSe05jKIqLMJTS6qVvt5g==", - "requires": { - "classnames": "^2.2.5", - "enquire.js": "^2.1.6", - "json2mq": "^0.2.0", - "lodash.debounce": "^4.0.8", - "resize-observer-polyfill": "^1.5.0" - } - }, - "react-snapshot": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/react-snapshot/-/react-snapshot-1.3.0.tgz", - "integrity": "sha512-4HRhyB4p2e9E1QcJUwT5iyi2MWrDBr5jEWSU7zFYGSdp2vVwPqoi7IurRRDyt4WsfXAGmnlGRKZWJt+rIhzZ8g==", - "requires": { - "connect-history-api-fallback": "^1.3.0", - "express": "^4.15.2", - "glob-to-regexp": "^0.3.0", - "http-proxy-middleware": "^0.17.4", - "jsdom": "^9.4.5", - "mkdirp": "^0.5.1", - "safe-commander": "^2.11.1" - } + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/react-side-effect/-/react-side-effect-2.1.0.tgz", + "integrity": "sha512-IgmcegOSi5SNX+2Snh1vqmF0Vg/CbkycU9XZbOHJlZ6kMzTmi3yc254oB1WCkgA7OQtIAoLmcSFuHTc/tlcqXg==" }, "react-sortable-hoc": { "version": "1.10.1", @@ -17571,11 +16535,39 @@ } }, "react-svg": { - "version": "2.2.18", - "resolved": "https://registry.npmjs.org/react-svg/-/react-svg-2.2.18.tgz", - "integrity": "sha512-Hm+PJYxfZ4FIWyI3xypvyrrt+qbhCaDHKPiYv3Aen57xMjhtESKYQArkGVmn2O7W+lROLCjFfp+NnivULBtxxw==", + "version": "11.2.2", + "resolved": "https://registry.npmjs.org/react-svg/-/react-svg-11.2.2.tgz", + "integrity": "sha512-Q9lAuUgaI8c55OluftgrAyE4GAmIvmqVHJXt1fIzXFHcuIauKqVjhUH/BiizOqjPmY+R27kiTkv9g7AxY7O+wA==", + "requires": { + "@babel/runtime": "^7.12.5", + "@tanem/svg-injector": "^8.2.1", + "prop-types": "^15.7.2" + }, + "dependencies": { + "@babel/runtime": { + "version": "7.12.5", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.5.tgz", + "integrity": "sha512-plcc+hbExy3McchJCEQG3knOsuh3HH+Prx1P6cLIkET/0dLuQDEnrT+s27Axgc9bqfsmNUNHfscgMUdBpC9xfg==", + "requires": { + "regenerator-runtime": "^0.13.4" + } + }, + "regenerator-runtime": { + "version": "0.13.7", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz", + "integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==" + } + } + }, + "react-transition-group": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.1.tgz", + "integrity": "sha512-Djqr7OQ2aPUiYurhPalTrVy9ddmFCCzwhqQmtN+J3+3DzLO209Fdr70QrN8Z3DsglWql6iY1lDWAfpFiBtuKGw==", "requires": { - "svg-injector": "^1.1.3" + "@babel/runtime": "^7.5.5", + "dom-helpers": "^5.0.1", + "loose-envify": "^1.4.0", + "prop-types": "^15.6.2" } }, "react-truncate-markup": { @@ -17638,20 +16630,20 @@ "global-cache": "^1.2.1" } }, - "read-pkg": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-4.0.1.tgz", - "integrity": "sha1-ljYlN48+HE1IyFhytabsfV0JMjc=", + "read": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/read/-/read-1.0.5.tgz", + "integrity": "sha1-AHo9FpR4qnEKSRcn5FPv+5LnYgM=", + "dev": true, "requires": { - "normalize-package-data": "^2.3.2", - "parse-json": "^4.0.0", - "pify": "^3.0.0" + "mute-stream": "~0.0.4" } }, "read-pkg-up": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", + "dev": true, "requires": { "find-up": "^1.0.0", "read-pkg": "^1.0.0" @@ -17661,6 +16653,7 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", + "dev": true, "requires": { "path-exists": "^2.0.0", "pinkie-promise": "^2.0.0" @@ -17670,6 +16663,7 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", + "dev": true, "requires": { "pinkie-promise": "^2.0.0" } @@ -17678,6 +16672,7 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", + "dev": true, "requires": { "load-json-file": "^1.0.0", "normalize-package-data": "^2.3.2", @@ -17700,6 +16695,7 @@ "version": "2.2.1", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", + "dev": true, "requires": { "graceful-fs": "^4.1.11", "micromatch": "^3.1.10", @@ -17710,6 +16706,7 @@ "version": "2.3.7", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, "requires": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -17723,12 +16720,14 @@ "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==" + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": 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==", + "dev": true, "requires": { "safe-buffer": "~5.1.0" } @@ -17757,6 +16756,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz", "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=", + "dev": true, "requires": { "indent-string": "^2.1.0", "strip-indent": "^1.0.1" @@ -17766,6 +16766,7 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz", "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=", + "dev": true, "requires": { "repeating": "^2.0.0" } @@ -17832,9 +16833,9 @@ "integrity": "sha1-dJrO7H8/34tj+SegSAnpDFwLNGA=" }, "regenerate": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", - "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.1.tgz", + "integrity": "sha512-j2+C8+NtXQgEKWk49MMP5P/u2GhnahTtVkRIHr5R5lVRlbKvmQ+oS+A5aLKWp2ma5VkT8sh6v+v4hbH0YHR66A==", "dev": true }, "regenerate-unicode-properties": { @@ -17860,23 +16861,22 @@ "@babel/runtime": "^7.8.4" } }, - "regex-cache": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.4.tgz", - "integrity": "sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ==", - "requires": { - "is-equal-shallow": "^0.1.3" - } - }, "regex-not": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", + "dev": true, "requires": { "extend-shallow": "^3.0.2", "safe-regex": "^1.1.0" } }, + "regex-parser": { + "version": "2.2.10", + "resolved": "https://registry.npmjs.org/regex-parser/-/regex-parser-2.2.10.tgz", + "integrity": "sha512-8t6074A68gHfU8Neftl0Le6KTDwfGAj7IyjPIMSfikI2wJUTHDMaIq42bUsfVnj8mhx0R+45rdUXHGpN164avA==", + "dev": true + }, "regexp.prototype.flags": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.3.0.tgz", @@ -17885,39 +16885,18 @@ "requires": { "define-properties": "^1.1.3", "es-abstract": "^1.17.0-next.1" - }, - "dependencies": { - "es-abstract": { - "version": "1.17.7", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.7.tgz", - "integrity": "sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g==", - "dev": true, - "requires": { - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1", - "is-callable": "^1.2.2", - "is-regex": "^1.1.1", - "object-inspect": "^1.8.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.1", - "string.prototype.trimend": "^1.0.1", - "string.prototype.trimstart": "^1.0.1" - } - } } }, "regexpp": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz", - "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.1.0.tgz", + "integrity": "sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q==", "dev": true }, "regexpu-core": { - "version": "4.7.1", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.7.1.tgz", - "integrity": "sha512-ywH2VUraA44DZQuRKzARmw6S66mr48pQVva4LBeRhcOltJ6hExvWly5ZjFLYo67xbIxb6W1q4bAGtgfEl20zfQ==", + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.7.0.tgz", + "integrity": "sha512-TQ4KXRnIn6tz6tjnrXEkD/sshygKH/j5KzK86X8MkeHyZ8qst/LZ89j3X4/8HEIfHANTFIP/AbXakeRhWIl5YQ==", "dev": true, "requires": { "regenerate": "^1.4.0", @@ -17960,19 +16939,20 @@ "remove-trailing-separator": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", - "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=" + "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", + "dev": true }, "renderkid": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-2.0.4.tgz", - "integrity": "sha512-K2eXrSOJdq+HuKzlcjOlGoOarUu5SDguDEhE7+Ah4zuOWL40j8A/oHvLlLob9PSTNvVnBd+/q0Er1QfpEuem5g==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-2.0.3.tgz", + "integrity": "sha512-z8CLQp7EZBPCwCnncgf9C4XAi3WR0dv+uWu/PjIyhhAb5d6IJ/QZqlHFprHeKT+59//V6BNUsLbvN8+2LarxGA==", "dev": true, "requires": { "css-select": "^1.1.0", "dom-converter": "^0.2", "htmlparser2": "^3.3.0", - "lodash": "^4.17.20", - "strip-ansi": "^3.0.0" + "strip-ansi": "^3.0.0", + "utila": "^0.4.0" }, "dependencies": { "css-select": { @@ -18008,17 +16988,20 @@ "repeat-element": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", - "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==" + "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==", + "dev": true }, "repeat-string": { "version": "1.6.1", "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=" + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", + "dev": true }, "repeating": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", + "dev": true, "requires": { "is-finite": "^1.0.0" } @@ -18027,6 +17010,7 @@ "version": "2.88.2", "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", + "dev": true, "requires": { "aws-sign2": "~0.7.0", "aws4": "^1.8.0", @@ -18073,17 +17057,20 @@ "require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=" + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "dev": true }, "require-main-filename": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", - "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==" + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", + "dev": true }, "requires-port": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=" + "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=", + "dev": true }, "reselect": { "version": "4.0.0", @@ -18096,11 +17083,10 @@ "integrity": "sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg==" }, "resolve": { - "version": "1.19.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.19.0.tgz", - "integrity": "sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg==", + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz", + "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==", "requires": { - "is-core-module": "^2.1.0", "path-parse": "^1.0.6" } }, @@ -18116,17 +17102,98 @@ "resolve-from": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", - "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=" + "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", + "dev": true }, "resolve-url": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", - "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=" + "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", + "dev": true + }, + "resolve-url-loader": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/resolve-url-loader/-/resolve-url-loader-3.1.1.tgz", + "integrity": "sha512-K1N5xUjj7v0l2j/3Sgs5b8CjrrgtC70SmdCuZiJ8tSyb5J+uk3FoeZ4b7yTnH6j7ngI+Bc5bldHJIa8hYdu2gQ==", + "dev": true, + "requires": { + "adjust-sourcemap-loader": "2.0.0", + "camelcase": "5.3.1", + "compose-function": "3.0.3", + "convert-source-map": "1.7.0", + "es6-iterator": "2.0.3", + "loader-utils": "1.2.3", + "postcss": "7.0.21", + "rework": "1.0.1", + "rework-visit": "1.0.0", + "source-map": "0.6.1" + }, + "dependencies": { + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true + }, + "emojis-list": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz", + "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=", + "dev": true + }, + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dev": true, + "requires": { + "minimist": "^1.2.0" + } + }, + "loader-utils": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.2.3.tgz", + "integrity": "sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA==", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^2.0.0", + "json5": "^1.0.1" + } + }, + "postcss": { + "version": "7.0.21", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.21.tgz", + "integrity": "sha512-uIFtJElxJo29QC753JzhidoAhvp/e/Exezkdhfmt8AymWT6/5B7W1WmponYWkHk2eg6sONyTch0A3nkMPun3SQ==", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } }, "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" @@ -18135,7 +17202,44 @@ "ret": { "version": "0.1.15", "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", - "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==" + "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", + "dev": true + }, + "retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", + "integrity": "sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=", + "dev": true + }, + "revalidator": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/revalidator/-/revalidator-0.1.8.tgz", + "integrity": "sha1-/s5hv6DBtSoga9axgZgYS91SOjs=", + "dev": true + }, + "rework": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/rework/-/rework-1.0.1.tgz", + "integrity": "sha1-MIBqhBNCtUUQqkEQhQzUhTQUSqc=", + "dev": true, + "requires": { + "convert-source-map": "^0.3.3", + "css": "^2.0.0" + }, + "dependencies": { + "convert-source-map": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-0.3.5.tgz", + "integrity": "sha1-8dgClQr33SYxof6+BZZVDIarMZA=", + "dev": true + } + } + }, + "rework-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/rework-visit/-/rework-visit-1.0.0.tgz", + "integrity": "sha1-mUWygD8hni96ygCtuLyfZA+ELJo=", + "dev": true }, "rgb-regex": { "version": "1.0.1", @@ -18150,9 +17254,10 @@ "dev": true }, "rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, "requires": { "glob": "^7.1.3" } @@ -18346,10 +17451,9 @@ } }, "rsvp": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-3.6.2.tgz", - "integrity": "sha512-OfWGQTb9vnwRjwtA2QwpG2ICclHC3pgXZO5xt8H2EfgDquO0qVdSb5T88L4qJVAEugbS56pAuV4XZM58UX8ulw==", - "dev": true + "version": "4.8.5", + "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-4.8.5.tgz", + "integrity": "sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA==" }, "run-async": { "version": "2.4.1", @@ -18357,11 +17461,6 @@ "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", "dev": true }, - "run-node": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/run-node/-/run-node-1.0.0.tgz", - "integrity": "sha512-kc120TBlQ3mih1LSzdAJXo4xn/GWS2ec0l3S+syHDXP9uRr0JAT8Qd3mdMuyjqCzeZktgP3try92cEgf9Nks8A==" - }, "run-queue": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/run-queue/-/run-queue-1.0.3.tgz", @@ -18372,9 +17471,10 @@ } }, "rxjs": { - "version": "6.6.3", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.3.tgz", - "integrity": "sha512-trsQc+xYYXZ3urjOiJOuCOa5N3jAZ3eiSpQB5hIT8zGlL2QfnHLJ2r7GMkBGuIausdJN1OneaI6gQlsqNHHmZQ==", + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.0.tgz", + "integrity": "sha512-3HMA8z/Oz61DUHe+SdOiQyzIf4tOx5oQHmMir7IZEu6TMqCLHT4LRcmNaUS0NwOz8VLvmmBduMsoaUvMaIiqzg==", + "dev": true, "requires": { "tslib": "^1.9.0" } @@ -18384,25 +17484,11 @@ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" }, - "safe-commander": { - "version": "2.11.2", - "resolved": "https://registry.npmjs.org/safe-commander/-/safe-commander-2.11.2.tgz", - "integrity": "sha512-kudDdVjDG1fI8PkCxov3BKgk8YP1ak0alJX2+eohN4j/Ym/GW4SM1Kobh9vKs67nyul748vigmBoJtsfWNdR6Q==", - "requires": { - "commander": "~2.11.0" - }, - "dependencies": { - "commander": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.11.0.tgz", - "integrity": "sha512-b0553uYA5YAEGgyYIGYROzKQ7X5RAqedkfjiZxwi0kL1g3bOaBNNZfYkzt/CL0umgD5wc9Jec2FbB98CjkMRvQ==" - } - } - }, "safe-regex": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", + "dev": true, "requires": { "ret": "~0.1.10" } @@ -18413,26 +17499,33 @@ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, "sane": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/sane/-/sane-2.5.2.tgz", - "integrity": "sha1-tNwYYcIbQn6SlQej51HiosuKs/o=", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/sane/-/sane-4.1.0.tgz", + "integrity": "sha512-hhbzAgTIX8O7SHfp2c8/kREfEn4qO/9q8C9beyY6+tvZ87EpoZ3i1RIEvp27YBswnNbY9mWd6paKVmKbAgLfZA==", "dev": true, "requires": { + "@cnakazawa/watch": "^1.0.3", "anymatch": "^2.0.0", - "capture-exit": "^1.2.0", - "exec-sh": "^0.2.0", + "capture-exit": "^2.0.0", + "exec-sh": "^0.3.2", + "execa": "^1.0.0", "fb-watchman": "^2.0.0", - "fsevents": "^1.2.3", "micromatch": "^3.1.4", "minimist": "^1.1.1", - "walker": "~1.0.5", - "watch": "~0.18.0" + "walker": "~1.0.5" } }, + "sanitize.css": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/sanitize.css/-/sanitize.css-10.0.0.tgz", + "integrity": "sha512-vTxrZz4dX5W86M6oVWVdOVe72ZiPs41Oi7Z6Km4W5Turyz28mrXSJhhEBZoRtzJWIv3833WKVwLSDWWkEfupMg==", + "dev": true + }, "sass-graph": { "version": "2.2.6", "resolved": "https://registry.npmjs.org/sass-graph/-/sass-graph-2.2.6.tgz", "integrity": "sha512-MKuEYXFSGuRSi8FZ3A7imN1CeVn9Gpw0/SFJKdL1ejXJneI9a5rwlEZrKejhEFAA3O6yr3eIyl/WuvASvlT36g==", + "dev": true, "requires": { "glob": "^7.0.0", "lodash": "^4.0.0", @@ -18443,12 +17536,14 @@ "camelcase": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", - "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=" + "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=", + "dev": true }, "cliui": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", + "dev": true, "requires": { "string-width": "^1.0.1", "strip-ansi": "^3.0.1", @@ -18458,22 +17553,26 @@ "get-caller-file": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", - "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==" + "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==", + "dev": true }, "require-main-filename": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", - "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=" + "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=", + "dev": true }, "which-module": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz", - "integrity": "sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8=" + "integrity": "sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8=", + "dev": true }, "wrap-ansi": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", + "dev": true, "requires": { "string-width": "^1.0.1", "strip-ansi": "^3.0.1" @@ -18482,12 +17581,14 @@ "y18n": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", - "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=" + "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=", + "dev": true }, "yargs": { "version": "7.1.1", "resolved": "https://registry.npmjs.org/yargs/-/yargs-7.1.1.tgz", "integrity": "sha512-huO4Fr1f9PmiJJdll5kwoS2e4GqzGSsMT3PPMpOwoVkOK8ckqAewMTZyA6LXVQWflleb/Z8oPBEvNsMft0XE+g==", + "dev": true, "requires": { "camelcase": "^3.0.0", "cliui": "^3.2.0", @@ -18508,6 +17609,7 @@ "version": "5.0.0-security.0", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-5.0.0-security.0.tgz", "integrity": "sha512-T69y4Ps64LNesYxeYGYPvfoMTt/7y1XtfpIslUeK4um+9Hu7hlGoRtaDLvdXb7+/tfq4opVa2HRY5xGip022rQ==", + "dev": true, "requires": { "camelcase": "^3.0.0", "object.assign": "^4.1.0" @@ -18516,57 +17618,42 @@ } }, "sass-loader": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-7.1.0.tgz", - "integrity": "sha512-+G+BKGglmZM2GUSfT9TLuEp6tzehHPjAMoRRItOojWIqIGPloVCMhNIQuG639eJ+y033PaGTSjLaTHts8Kw79w==", + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-8.0.2.tgz", + "integrity": "sha512-7o4dbSK8/Ol2KflEmSco4jTjQoV988bM82P9CZdmo9hR3RLnvNc0ufMNdMrB0caq38JQ/FgF4/7RcbcfKzxoFQ==", "dev": true, "requires": { - "clone-deep": "^2.0.1", - "loader-utils": "^1.0.1", - "lodash.tail": "^4.1.1", - "neo-async": "^2.5.0", - "pify": "^3.0.0", - "semver": "^5.5.0" + "clone-deep": "^4.0.1", + "loader-utils": "^1.2.3", + "neo-async": "^2.6.1", + "schema-utils": "^2.6.1", + "semver": "^6.3.0" }, "dependencies": { "clone-deep": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-2.0.2.tgz", - "integrity": "sha512-SZegPTKjCgpQH63E+eN6mVEEPdQBOUzjyJm5Pora4lrwWRFS8I0QAxV/KD6vV/i0WuijHZWQC1fMsPEdxfdVCQ==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", + "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", "dev": true, "requires": { - "for-own": "^1.0.0", "is-plain-object": "^2.0.4", - "kind-of": "^6.0.0", - "shallow-clone": "^1.0.0" + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" } }, - "for-own": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz", - "integrity": "sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs=", - "dev": true, - "requires": { - "for-in": "^1.0.1" - } + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true }, "shallow-clone": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-1.0.0.tgz", - "integrity": "sha512-oeXreoKR/SyNJtRJMAKPDSvd28OqEwG4eR/xc856cRGBII7gX9lvAqDxusPm0846z/w/hWYjI1NpKwJ00NHzRA==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", + "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", "dev": true, "requires": { - "is-extendable": "^0.1.1", - "kind-of": "^5.0.0", - "mixin-object": "^2.0.1" - }, - "dependencies": { - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true - } + "kind-of": "^6.0.2" } } } @@ -18579,32 +17666,51 @@ "sax": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", + "dev": true + }, + "saxes": { + "version": "3.1.11", + "resolved": "https://registry.npmjs.org/saxes/-/saxes-3.1.11.tgz", + "integrity": "sha512-Ydydq3zC+WYDJK1+gRxRapLIED9PWeSuuS41wqyoRmzvhhh9nc+QQrVMKJYzJFULazeGhzSV0QleN2wD3boh2g==", + "dev": true, + "requires": { + "xmlchars": "^2.1.1" + } }, "scheduler": { - "version": "0.13.6", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.13.6.tgz", - "integrity": "sha512-IWnObHt413ucAYKsD9J1QShUKkbKLQQHdxRyw73sw4FN26iWr3DY/H34xGPe4nmL1DwXyWmSWmMrA9TfQbE/XQ==", + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.19.1.tgz", + "integrity": "sha512-n/zwRWRYSUj0/3g/otKDRPMh6qv2SYMWNq85IEa8iZyAv8od9zDYpGSnpBEjNgcMNq6Scbu5KfIPxNF72R/2EA==", "requires": { "loose-envify": "^1.1.0", "object-assign": "^4.1.1" } }, "schema-utils": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", - "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.0.tgz", + "integrity": "sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A==", "dev": true, "requires": { - "ajv": "^6.1.0", - "ajv-errors": "^1.0.0", - "ajv-keywords": "^3.1.0" + "@types/json-schema": "^7.0.4", + "ajv": "^6.12.2", + "ajv-keywords": "^3.4.1" + } + }, + "scroll-into-view-if-needed": { + "version": "2.2.26", + "resolved": "https://registry.npmjs.org/scroll-into-view-if-needed/-/scroll-into-view-if-needed-2.2.26.tgz", + "integrity": "sha512-SQ6AOKfABaSchokAmmaxVnL9IArxEnLEX9j4wAZw+x4iUTb40q7irtHG3z4GtAWz5veVZcCnubXDBRyLVQaohw==", + "requires": { + "compute-scroll-into-view": "^1.0.16" } }, "scss-tokenizer": { "version": "0.2.3", "resolved": "https://registry.npmjs.org/scss-tokenizer/-/scss-tokenizer-0.2.3.tgz", "integrity": "sha1-jrBtualyMzOCTT9VMGQRSYR85dE=", + "dev": true, "requires": { "js-base64": "^2.1.8", "source-map": "^0.4.2" @@ -18614,6 +17720,7 @@ "version": "0.4.4", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", + "dev": true, "requires": { "amdefine": ">=0.0.4" } @@ -18632,12 +17739,12 @@ "dev": true }, "selfsigned": { - "version": "1.10.8", - "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-1.10.8.tgz", - "integrity": "sha512-2P4PtieJeEwVgTU9QEcwIRDQ/mXJLX8/+I3ur+Pg16nS8oNbrGxEso9NyYWy8NAmXiNl4dlAp5MwoNeCWzON4w==", + "version": "1.10.7", + "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-1.10.7.tgz", + "integrity": "sha512-8M3wBCzeWIJnQfl43IKwOmC4H/RAp50S8DF60znzjW5GVqTcSe2vWclt7hmYVPkKPlHWOu5EaWOMZ2Y6W8ZXTA==", "dev": true, "requires": { - "node-forge": "^0.10.0" + "node-forge": "0.9.0" } }, "semver": { @@ -18648,12 +17755,20 @@ "semver-compare": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz", - "integrity": "sha1-De4hahyUGrN+nvsXiPavxf9VN/w=" + "integrity": "sha1-De4hahyUGrN+nvsXiPavxf9VN/w=", + "dev": true + }, + "semver-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/semver-regex/-/semver-regex-2.0.0.tgz", + "integrity": "sha512-mUdIBBvdn0PLOeP3TEkMH7HHeUP3GjsXCwKarjv/kGmUFOYg1VqEemKhoQpWMu6X2I8kHeuVdGibLGkVK+/5Qw==", + "dev": true }, "send": { "version": "0.17.1", "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", + "dev": true, "requires": { "debug": "2.6.9", "depd": "~1.1.2", @@ -18674,6 +17789,7 @@ "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, "requires": { "ms": "2.0.0" }, @@ -18681,22 +17797,27 @@ "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true } } }, "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==" + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", + "dev": true } } }, "serialize-javascript": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-1.9.1.tgz", - "integrity": "sha512-0Vb/54WJ6k5v8sSWN09S0ora+Hnr+cX40r9F170nT+mSkaxltoE/7R3OrIdBSUv1OoiobH1QoWQbCnAO+e8J1A==", - "dev": true + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", + "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", + "dev": true, + "requires": { + "randombytes": "^2.1.0" + } }, "serve-index": { "version": "1.9.1", @@ -18758,6 +17879,7 @@ "version": "1.14.1", "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==", + "dev": true, "requires": { "encodeurl": "~1.0.2", "escape-html": "~1.0.3", @@ -18768,12 +17890,14 @@ "set-blocking": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", + "dev": true }, "set-value": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", + "dev": true, "requires": { "extend-shallow": "^2.0.1", "is-extendable": "^0.1.1", @@ -18785,6 +17909,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, "requires": { "is-extendable": "^0.1.0" } @@ -18799,7 +17924,8 @@ "setprototypeof": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", - "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==" + "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==", + "dev": true }, "sha.js": { "version": "2.4.11", @@ -18839,11 +17965,6 @@ } } }, - "shallow-equal": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/shallow-equal/-/shallow-equal-1.2.1.tgz", - "integrity": "sha512-S4vJDjHHMBaiZuT9NPb616CSmLf618jawtv3sufLl6ivK8WocjAo58cXwbRV1cgqxH0Qbv+iUt6m05eqEa2IRA==" - }, "shallowequal": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/shallowequal/-/shallowequal-1.1.0.tgz", @@ -18873,39 +17994,26 @@ "integrity": "sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==", "dev": true }, + "side-channel": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.2.tgz", + "integrity": "sha512-7rL9YlPHg7Ancea1S96Pa8/QWb4BtXL/TZvS6B8XFetGBeuhAsfmUspK6DokBeZ64+Kj9TCNRD/30pVz1BvQNA==", + "dev": true, + "requires": { + "es-abstract": "^1.17.0-next.1", + "object-inspect": "^1.7.0" + } + }, "signal-exit": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", - "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==" - }, - "simple-git": { - "version": "1.132.0", - "resolved": "https://registry.npmjs.org/simple-git/-/simple-git-1.132.0.tgz", - "integrity": "sha512-xauHm1YqCTom1sC9eOjfq3/9RKiUA9iPnxBbrY2DdL8l4ADMu0jjM5l5lphQP5YWNqAL2aXC/OeuQ76vHtW5fg==", - "requires": { - "debug": "^4.0.1" - }, - "dependencies": { - "debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", - "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==" - } - } + "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==", + "dev": true }, "simple-swizzle": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", "integrity": "sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=", - "dev": true, "requires": { "is-arrayish": "^0.3.1" }, @@ -18913,31 +18021,76 @@ "is-arrayish": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", - "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==", - "dev": true + "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==" } } }, "sisteransi": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-0.1.1.tgz", - "integrity": "sha512-PmGOd02bM9YO5ifxpw36nrNMBTptEtfRl4qUYl9SndkolplkrZZOW7PGHjrZL53QvMVj9nQ+TKqUnRsw4tJa4g==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", "dev": true }, "slash": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", - "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==" + "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", + "dev": true }, "slice-ansi": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-0.0.4.tgz", - "integrity": "sha1-7b+JA/ZvfOL46v1s7tZeJkyDGzU=" + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz", + "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "astral-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", + "dev": true + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "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==", + "dev": true + } + } }, "snapdragon": { "version": "0.8.2", "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", + "dev": true, "requires": { "base": "^0.11.1", "debug": "^2.2.0", @@ -18953,6 +18106,7 @@ "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, "requires": { "ms": "2.0.0" } @@ -18961,6 +18115,7 @@ "version": "0.2.5", "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, "requires": { "is-descriptor": "^0.1.0" } @@ -18969,6 +18124,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, "requires": { "is-extendable": "^0.1.0" } @@ -18976,7 +18132,8 @@ "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true } } }, @@ -18984,6 +18141,7 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", + "dev": true, "requires": { "define-property": "^1.0.0", "isobject": "^3.0.0", @@ -18994,6 +18152,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, "requires": { "is-descriptor": "^1.0.0" } @@ -19002,6 +18161,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, "requires": { "kind-of": "^6.0.0" } @@ -19010,6 +18170,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, "requires": { "kind-of": "^6.0.0" } @@ -19018,6 +18179,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, "requires": { "is-accessor-descriptor": "^1.0.0", "is-data-descriptor": "^1.0.0", @@ -19030,6 +18192,7 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", + "dev": true, "requires": { "kind-of": "^3.2.0" }, @@ -19038,97 +18201,42 @@ "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, "requires": { "is-buffer": "^1.1.5" } } } }, - "socket.io-client": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-2.2.0.tgz", - "integrity": "sha512-56ZrkTDbdTLmBIyfFYesgOxsjcLnwAKoN4CiPyTVkMQj3zTUh0QAx3GbvIvLpFEOvQWu92yyWICxB0u7wkVbYA==", - "requires": { - "backo2": "1.0.2", - "base64-arraybuffer": "0.1.5", - "component-bind": "1.0.0", - "component-emitter": "1.2.1", - "debug": "~3.1.0", - "engine.io-client": "~3.3.1", - "has-binary2": "~1.0.2", - "has-cors": "1.1.0", - "indexof": "0.0.1", - "object-component": "0.0.3", - "parseqs": "0.0.5", - "parseuri": "0.0.5", - "socket.io-parser": "~3.3.0", - "to-array": "0.1.4" - }, - "dependencies": { - "component-emitter": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", - "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=" - }, - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - } - } - }, - "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==", + "sockjs": { + "version": "0.3.20", + "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.20.tgz", + "integrity": "sha512-SpmVOVpdq0DJc0qArhF3E5xsxvaiqGNb73XfgBpK1y3UD5gs8DSo8aCTsuT5pX8rssdc2NDIzANwP9eCAiSdTA==", + "dev": true, "requires": { - "component-emitter": "~1.3.0", - "debug": "~3.1.0", - "isarray": "2.0.1" - }, - "dependencies": { - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "requires": { - "ms": "2.0.0" - } - }, - "isarray": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", - "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=" - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - } + "faye-websocket": "^0.10.0", + "uuid": "^3.4.0", + "websocket-driver": "0.6.5" } }, - "sockjs": { - "version": "0.3.19", - "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.19.tgz", - "integrity": "sha512-V48klKZl8T6MzatbLlzzRNhMepEys9Y4oGFpypBFFn1gLI/QQ9HtLLyWJNbPlwGLelOVOEijUbTTJeLLI59jLw==", + "sockjs-client": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.4.0.tgz", + "integrity": "sha512-5zaLyO8/nri5cua0VtOrFXBPK1jbL4+1cebT/mmKA1E1ZXOvJrII75bPu0l0k843G/+iAbhEqzyKr0w/eCCj7g==", "dev": true, "requires": { - "faye-websocket": "^0.10.0", - "uuid": "^3.0.1" + "debug": "^3.2.5", + "eventsource": "^1.0.7", + "faye-websocket": "~0.11.1", + "inherits": "^2.0.3", + "json3": "^3.3.2", + "url-parse": "^1.4.3" }, "dependencies": { "faye-websocket": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.10.0.tgz", - "integrity": "sha1-TkkvjQTftviQA1B/btvy1QHnxvQ=", + "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==", "dev": true, "requires": { "websocket-driver": ">=0.5.1" @@ -19136,18 +18244,13 @@ } } }, - "sockjs-client": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.3.0.tgz", - "integrity": "sha512-R9jxEzhnnrdxLCNln0xg5uGHqMnkhPSTzUZH2eXcR03S/On9Yvoq2wyUZILRUhZCNVu2PmwWVoyuiPz8th8zbg==", + "sort-keys": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz", + "integrity": "sha1-RBttTTRnmPG05J6JIK37oOVD+a0=", "dev": true, "requires": { - "debug": "^3.2.5", - "eventsource": "^1.0.7", - "faye-websocket": "~0.11.1", - "inherits": "^2.0.3", - "json3": "^3.3.2", - "url-parse": "^1.4.3" + "is-plain-obj": "^1.0.0" } }, "source-list-map": { @@ -19159,12 +18262,14 @@ "source-map": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true }, "source-map-resolve": { "version": "0.5.3", "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", + "dev": true, "requires": { "atob": "^2.1.2", "decode-uri-component": "^0.2.0", @@ -19174,18 +18279,28 @@ } }, "source-map-support": { - "version": "0.4.18", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.18.tgz", - "integrity": "sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA==", + "version": "0.5.19", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", + "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", "dev": true, "requires": { - "source-map": "^0.5.6" + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } } }, "source-map-url": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", - "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=" + "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=", + "dev": true }, "spdx-correct": { "version": "3.1.1", @@ -19211,9 +18326,9 @@ } }, "spdx-license-ids": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.7.tgz", - "integrity": "sha512-U+MTEOO0AiDzxwFvoa4JVnMV6mZlJKk2sBLt90s7G0Gd0Mlknc7kxEn3nuDPNZRta7O2uy8oLcZLVT+4sqNZHQ==" + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz", + "integrity": "sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q==" }, "spdy": { "version": "4.0.2", @@ -19229,19 +18344,13 @@ }, "dependencies": { "debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "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.2" + "ms": "^2.1.1" } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true } } }, @@ -19260,26 +18369,30 @@ }, "dependencies": { "debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "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.2" + "ms": "^2.1.1" } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true } } }, + "split": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/split/-/split-0.3.1.tgz", + "integrity": "sha1-zrzxQr9hu7ZLFBYo5ttIKikUZUw=", + "dev": true, + "requires": { + "through": "2" + } + }, "split-string": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", + "dev": true, "requires": { "extend-shallow": "^3.0.0" } @@ -19287,12 +18400,14 @@ "sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "dev": true }, "sshpk": { "version": "1.16.1", "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", + "dev": true, "requires": { "asn1": "~0.2.3", "assert-plus": "^1.0.0", @@ -19306,12 +18421,13 @@ } }, "ssri": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.1.tgz", - "integrity": "sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA==", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-7.1.0.tgz", + "integrity": "sha512-77/WrDZUWocK0mvA5NTRQyveUf+wsrIc6vyrxpS8tVvYBcX215QbafrJR3KtkpskIzoFLqqNuuYQvxaMjXJ/0g==", "dev": true, "requires": { - "figgy-pudding": "^3.5.1" + "figgy-pudding": "^3.5.1", + "minipass": "^3.1.1" } }, "stable": { @@ -19320,32 +18436,23 @@ "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==", "dev": true }, - "stack-utils": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-1.0.4.tgz", - "integrity": "sha512-IPDJfugEGbfizBwBZRZ3xpccMdRyP5lqsBWXGQWimVjua/ccLCeMOAVjlc1R7LxFjo5sEDhyNIXd8mo/AiDS9w==", - "dev": true, - "requires": { - "escape-string-regexp": "^2.0.0" - }, - "dependencies": { - "escape-string-regexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", - "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", - "dev": true - } - } + "stack-trace": { + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", + "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=", + "dev": true }, - "staged-git-files": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/staged-git-files/-/staged-git-files-1.1.2.tgz", - "integrity": "sha512-0Eyrk6uXW6tg9PYkhi/V/J4zHp33aNyi2hOCmhFLqLTIhbgqWn5jlSzI+IU0VqrZq6+DbHcabQl/WP6P3BG0QA==" + "stack-utils": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-1.0.2.tgz", + "integrity": "sha512-MTX+MeG5U994cazkjd/9KNAapsHnibjMLnfXodlkXw76JEea0UiNzrqidzo1emMwk7w5Qhc9jd4Bn9TBb1MFwA==", + "dev": true }, "static-extend": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", + "dev": true, "requires": { "define-property": "^0.2.5", "object-copy": "^0.1.0" @@ -19355,6 +18462,7 @@ "version": "0.2.5", "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, "requires": { "is-descriptor": "^0.1.0" } @@ -19364,12 +18472,14 @@ "statuses": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", + "dev": true }, "stdout-stream": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/stdout-stream/-/stdout-stream-1.4.1.tgz", "integrity": "sha512-j4emi03KXqJWcIeF8eIXkjMFN1Cmb8gUlDYGeBALLPo5qdyTfA9bOtl8m33lRoC+vFMkP3gl0WsDr6+gzxbbTA==", + "dev": true, "requires": { "readable-stream": "^2.0.1" }, @@ -19378,6 +18488,7 @@ "version": "2.3.7", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, "requires": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -19391,12 +18502,14 @@ "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==" + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": 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==", + "dev": true, "requires": { "safe-buffer": "~5.1.0" } @@ -19518,9 +18631,10 @@ "integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=" }, "string-argv": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.0.2.tgz", - "integrity": "sha1-2sMECGkMIfPDYwo/86BYd73L1zY=" + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.1.tgz", + "integrity": "sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg==", + "dev": true }, "string-convert": { "version": "0.2.1", @@ -19558,38 +18672,52 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dev": true, "requires": { "code-point-at": "^1.0.0", "is-fullwidth-code-point": "^1.0.0", "strip-ansi": "^3.0.0" } }, + "string.prototype.matchall": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.2.tgz", + "integrity": "sha512-N/jp6O5fMf9os0JU3E72Qhf590RSRZU/ungsL/qJUYVTNv7hTG0P/dbPjxINVN9jpscu3nzYwKESU3P3RY5tOg==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.0", + "has-symbols": "^1.0.1", + "internal-slot": "^1.0.2", + "regexp.prototype.flags": "^1.3.0", + "side-channel": "^1.0.2" + } + }, "string.prototype.padend": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/string.prototype.padend/-/string.prototype.padend-3.1.1.tgz", - "integrity": "sha512-eCzTASPnoCr5Ht+Vn1YXgm8SB015hHKgEIMu9Nr9bQmLhRBxKRfmzSj/IQsxDFc8JInJDDFA0qXwK+xxI7wDkg==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string.prototype.padend/-/string.prototype.padend-3.1.0.tgz", + "integrity": "sha512-3aIv8Ffdp8EZj8iLwREGpQaUZiPyrWrpzMBHvkiSW/bK/EGve9np07Vwy7IJ5waydpGXzQZu/F8Oze2/IWkBaA==", "requires": { - "call-bind": "^1.0.0", "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.1" + "es-abstract": "^1.17.0-next.1" } }, "string.prototype.trimend": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.3.tgz", - "integrity": "sha512-ayH0pB+uf0U28CtjlLvL7NaohvR1amUvVZk+y3DYb0Ey2PUV5zPkkKy9+U1ndVEIXO8hNg18eIv9Jntbii+dKw==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.1.tgz", + "integrity": "sha512-LRPxFUaTtpqYsTeNKaFOw3R4bxIzWOnbQ837QfBylo8jIxtcbK/A/sMV7Q+OAV/vWo+7s25pOE10KYSjaSO06g==", "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3" + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5" } }, "string.prototype.trimstart": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.3.tgz", - "integrity": "sha512-oBIBUy5lea5tt0ovtOFiEQaBkoBBkyJhZXzJYrSmDo5IUUqbOPvVezuRs/agBIdZ2p2Eo1FD6bD9USyBLfl3xg==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.1.tgz", + "integrity": "sha512-XxZn+QpvrBI1FOcg6dIpxUPgWCPuNXvMD72aaRaUQv1eD4e/Qy8i/hFTe0BUmD60p/QA6bh1avmuPTfNjqVWRw==", "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3" + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5" } }, "string_decoder": { @@ -19604,6 +18732,7 @@ "version": "3.3.0", "resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz", "integrity": "sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==", + "dev": true, "requires": { "get-own-enumerable-property-symbols": "^3.0.0", "is-obj": "^1.0.1", @@ -19614,6 +18743,7 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, "requires": { "ansi-regex": "^2.0.0" } @@ -19622,6 +18752,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", + "dev": true, "requires": { "is-utf8": "^0.2.0" } @@ -19639,12 +18770,20 @@ "strip-eof": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", - "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=" + "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", + "dev": true + }, + "strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "dev": true }, "strip-indent": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz", "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=", + "dev": true, "requires": { "get-stdin": "^4.0.1" }, @@ -19652,14 +18791,15 @@ "get-stdin": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", - "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=" + "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=", + "dev": true } } }, "strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", "dev": true }, "style-loader": { @@ -19670,6 +18810,19 @@ "requires": { "loader-utils": "^1.1.0", "schema-utils": "^1.0.0" + }, + "dependencies": { + "schema-utils": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", + "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", + "dev": true, + "requires": { + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" + } + } } }, "styled-components": { @@ -19719,17 +18872,6 @@ "postcss-selector-parser": "^3.0.0" }, "dependencies": { - "postcss": { - "version": "7.0.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", - "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", - "dev": true, - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, "postcss-selector-parser": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz", @@ -19740,21 +18882,6 @@ "indexes-of": "^1.0.1", "uniq": "^1.0.1" } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } } } }, @@ -19771,10 +18898,151 @@ "has-flag": "^3.0.0" } }, - "svg-injector": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/svg-injector/-/svg-injector-1.1.3.tgz", - "integrity": "sha1-j7oY10GeX4GOcSxPgtg+41dhDmE=" + "surge": { + "version": "0.21.6", + "resolved": "https://registry.npmjs.org/surge/-/surge-0.21.6.tgz", + "integrity": "sha512-FejQvGH9G1Xt9nWGaQnwX5anKReDJkFUrAh3/UCroJTf/M91hId8JOt1N6Glgh9T2Sz8G4DFaFFHJsoPaI5DBw==", + "dev": true, + "requires": { + "cli-table3": "^0.5.1", + "inquirer": "^6.2.2", + "is-domain": "0.0.1", + "minimist": "1.2.3", + "moniker": "0.1.2", + "netrc": "0.1.4", + "progress": "1.1.8", + "prompt": "~0.2.14", + "read": "1.0.5", + "request": "^2.88.0", + "split": "0.3.1", + "surge-fstream-ignore": "^1.0.6", + "surge-ignore": "0.2.0", + "tarr": "1.1.0", + "url-parse-as-address": "1.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "cli-width": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.1.tgz", + "integrity": "sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw==", + "dev": true + }, + "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" + } + }, + "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" + } + }, + "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 + }, + "minimist": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.3.tgz", + "integrity": "sha512-+bMdgqjMN/Z77a6NlY/I3U5LlRDbnmaAk6lDveAPKwSpcPM4tKAuYsvYF8xjhOPXhOYGe/73vVLVez5PW+jqhw==", + "dev": true + }, + "mute-stream": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", + "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=", + "dev": true + }, + "progress": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/progress/-/progress-1.1.8.tgz", + "integrity": "sha1-4mDHj2Fhzdmw5WzD4Khd4Xx6V74=", + "dev": true + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, + "requires": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + }, + "dependencies": { + "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-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" + }, + "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 + } + } + } + } + }, + "surge-fstream-ignore": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/surge-fstream-ignore/-/surge-fstream-ignore-1.0.6.tgz", + "integrity": "sha512-hNN52cz2fYCAzhlHmWPn4aE3bFbpBt01AkWFLljrtSzFvxlipLAeLuLtQ3t4f0RKoUkjzXWCAFK13WoET2iM1A==", + "dev": true, + "requires": { + "fstream": ">=1.0.12", + "inherits": "2", + "minimatch": "^3.0.0" + } + }, + "surge-ignore": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/surge-ignore/-/surge-ignore-0.2.0.tgz", + "integrity": "sha1-Wn+KIKcRiM+edaLP6OsYLekNrzs=", + "dev": true }, "svg-parser": { "version": "2.0.4", @@ -19811,12 +19079,8 @@ "symbol-tree": { "version": "3.2.4", "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", - "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==" - }, - "synchronous-promise": { - "version": "2.0.15", - "resolved": "https://registry.npmjs.org/synchronous-promise/-/synchronous-promise-2.0.15.tgz", - "integrity": "sha512-k8uzYIkIVwmT+TcglpdN50pS2y1BDcUnBPK9iJeGu0Pl1lOI8pD6wtzgw91Pjpe+RxtTncw32tLxs/R0yNL2Mg==" + "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", + "dev": true }, "table": { "version": "5.4.6", @@ -19885,55 +19149,33 @@ "version": "2.2.2", "resolved": "https://registry.npmjs.org/tar/-/tar-2.2.2.tgz", "integrity": "sha512-FCEhQ/4rE1zYv9rYXJw/msRqsnmlje5jHP6huWeBZ704jUTy02c5AZyWujpMR1ax6mVw9NyJMfuK2CMDWVIfgA==", + "dev": true, "requires": { "block-stream": "*", "fstream": "^1.0.12", "inherits": "2" } }, - "terser": { - "version": "3.17.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-3.17.0.tgz", - "integrity": "sha512-/FQzzPJmCpjAH9Xvk2paiWrFq+5M6aVOf+2KRbwhByISDX/EujxsK+BAvrhb6H+2rtrLCHK9N01wO014vrIwVQ==", + "tarr": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/tarr/-/tarr-1.1.0.tgz", + "integrity": "sha512-tENbQ43IQckay71stp1p1lljRhoEZpZk10FzEZKW2tJcMcnLwV3CfZdxBAERlH6nwnFvnHMS9eJOJl6IzSsG0g==", "dev": true, "requires": { - "commander": "^2.19.0", - "source-map": "~0.6.1", - "source-map-support": "~0.5.10" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "source-map-support": { - "version": "0.5.19", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", - "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", - "dev": true, - "requires": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - } + "block-stream": "*", + "fstream": ">=1.0.12", + "inherits": "2" } }, - "terser-webpack-plugin": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.2.2.tgz", - "integrity": "sha512-1DMkTk286BzmfylAvLXwpJrI7dWa5BnFmscV/2dCr8+c56egFcbaeFAl7+sujAjdmpLam21XRdhA4oifLyiWWg==", + "terser": { + "version": "4.8.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.0.tgz", + "integrity": "sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw==", "dev": true, "requires": { - "cacache": "^11.0.2", - "find-cache-dir": "^2.0.0", - "schema-utils": "^1.0.0", - "serialize-javascript": "^1.4.0", - "source-map": "^0.6.1", - "terser": "^3.16.1", - "webpack-sources": "^1.1.0", - "worker-farm": "^1.5.2" + "commander": "^2.20.0", + "source-map": "~0.6.1", + "source-map-support": "~0.5.12" }, "dependencies": { "source-map": { @@ -19944,121 +19186,183 @@ } } }, - "test-exclude": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-4.2.3.tgz", - "integrity": "sha512-SYbXgY64PT+4GAL2ocI3HwPa4Q4TBKm0cwAVeKOt/Aoc0gSpNRjJX8w0pA1LMKZ3LBmd8pYBqApFNQLII9kavA==", + "terser-webpack-plugin": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-2.3.8.tgz", + "integrity": "sha512-/fKw3R+hWyHfYx7Bv6oPqmk4HGQcrWLtV3X6ggvPuwPNHSnzvVV51z6OaaCOus4YLjutYGOz3pEpbhe6Up2s1w==", "dev": true, "requires": { - "arrify": "^1.0.1", - "micromatch": "^2.3.11", - "object-assign": "^4.1.0", - "read-pkg-up": "^1.0.1", - "require-main-filename": "^1.0.1" + "cacache": "^13.0.1", + "find-cache-dir": "^3.3.1", + "jest-worker": "^25.4.0", + "p-limit": "^2.3.0", + "schema-utils": "^2.6.6", + "serialize-javascript": "^4.0.0", + "source-map": "^0.6.1", + "terser": "^4.6.12", + "webpack-sources": "^1.4.3" }, "dependencies": { - "arr-diff": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", - "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", + "find-cache-dir": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.1.tgz", + "integrity": "sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ==", + "dev": true, + "requires": { + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.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==", "dev": true, "requires": { - "arr-flatten": "^1.0.1" + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" } }, - "array-unique": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", - "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=", + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true }, - "braces": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", - "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", + "jest-worker": { + "version": "25.5.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-25.5.0.tgz", + "integrity": "sha512-/dsSmUkIy5EBGfv/IjjqmFxrNAUpBERfGs1oHROyD7yxjG/w+t0GOJDX8O1k32ySmd7+a5IhnJU2qQFcJ4n1vw==", "dev": true, "requires": { - "expand-range": "^1.8.1", - "preserve": "^0.2.0", - "repeat-element": "^1.1.2" + "merge-stream": "^2.0.0", + "supports-color": "^7.0.0" } }, - "expand-brackets": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", - "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "dev": true, "requires": { - "is-posix-bracket": "^0.1.0" + "p-locate": "^4.1.0" } }, - "extglob": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", - "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", + "make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", "dev": true, "requires": { - "is-extglob": "^1.0.0" + "semver": "^6.0.0" } }, - "is-extglob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", - "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", + "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==", + "dev": true, + "requires": { + "p-limit": "^2.2.0" + } + }, + "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==", "dev": true }, - "is-glob": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", - "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", "dev": true, "requires": { - "is-extglob": "^1.0.0" + "find-up": "^4.0.0" } }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "supports-color": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", + "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", "dev": true, "requires": { - "is-buffer": "^1.1.5" + "has-flag": "^4.0.0" + } + } + } + }, + "test-exclude": { + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-5.2.3.tgz", + "integrity": "sha512-M+oxtseCFO3EDtAaGH7iiej3CBkzXqFMbzqYAACdzKui4eZA+pq3tZEwChvOdNfa7xxy8BfbmgJSIr43cC/+2g==", + "dev": true, + "requires": { + "glob": "^7.1.3", + "minimatch": "^3.0.4", + "read-pkg-up": "^4.0.0", + "require-main-filename": "^2.0.0" + }, + "dependencies": { + "load-json-file": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", + "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "parse-json": "^4.0.0", + "pify": "^3.0.0", + "strip-bom": "^3.0.0" } }, - "micromatch": { - "version": "2.3.11", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", - "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", - "dev": true, - "requires": { - "arr-diff": "^2.0.0", - "array-unique": "^0.2.1", - "braces": "^1.8.2", - "expand-brackets": "^0.1.4", - "extglob": "^0.3.1", - "filename-regex": "^2.0.0", - "is-extglob": "^1.0.0", - "is-glob": "^2.0.1", - "kind-of": "^3.0.2", - "normalize-path": "^2.0.1", - "object.omit": "^2.0.0", - "parse-glob": "^3.0.4", - "regex-cache": "^0.4.2" + "path-type": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", + "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", + "dev": true, + "requires": { + "pify": "^3.0.0" } }, - "normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "read-pkg": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", + "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", + "dev": true, + "requires": { + "load-json-file": "^4.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^3.0.0" + } + }, + "read-pkg-up": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-4.0.0.tgz", + "integrity": "sha512-6etQSH7nJGsK0RbG/2TeDzZFa8shjQ1um+SwQQ5cwKy0dhSXdOncEhb1CPpvQG4h7FyOV6EB6YlV0yJvZQNAkA==", "dev": true, "requires": { - "remove-trailing-separator": "^1.0.1" + "find-up": "^3.0.0", + "read-pkg": "^3.0.0" } }, - "require-main-filename": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", - "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=", + "strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", "dev": true } } @@ -20130,9 +19434,9 @@ "dev": true }, "timers-browserify": { - "version": "2.0.12", - "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.12.tgz", - "integrity": "sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ==", + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.11.tgz", + "integrity": "sha512-60aV6sgJ5YEbzUdn9c8kYGIqOubPoUdqQCul3SBAsRCZ40s6Y5cMcrW4dt3/k/EsbLVJNl9n6Vz3fTc+k2GeKQ==", "dev": true, "requires": { "setimmediate": "^1.0.4" @@ -20150,9 +19454,9 @@ "integrity": "sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q==" }, "tinycolor2": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/tinycolor2/-/tinycolor2-1.4.2.tgz", - "integrity": "sha512-vJhccZPs965sV/L2sU4oRQVAos0pQXwsvTLkWYdqJ+a8Q5kPFzJTuOFwy7UniPli44NKQGAglksjvOcpo95aZA==" + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/tinycolor2/-/tinycolor2-1.4.1.tgz", + "integrity": "sha1-9PrTM0R7wLB9TcjpIJ2POaisd+g=" }, "tmp": { "version": "0.0.33", @@ -20169,11 +19473,6 @@ "integrity": "sha1-I2QN17QtAEM5ERQIIOXPRA5SHdE=", "dev": true }, - "to-array": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/to-array/-/to-array-0.1.4.tgz", - "integrity": "sha1-F+bBH3PdTz10zaek/zI46a2b+JA=" - }, "to-arraybuffer": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", @@ -20203,6 +19502,7 @@ "version": "0.3.0", "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", + "dev": true, "requires": { "kind-of": "^3.0.2" }, @@ -20211,6 +19511,7 @@ "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, "requires": { "is-buffer": "^1.1.5" } @@ -20221,6 +19522,7 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", + "dev": true, "requires": { "define-property": "^2.0.2", "extend-shallow": "^3.0.2", @@ -20232,6 +19534,7 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "dev": true, "requires": { "is-number": "^3.0.0", "repeat-string": "^1.6.1" @@ -20253,71 +19556,54 @@ "toidentifier": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", - "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==" - }, - "topo": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/topo/-/topo-2.0.2.tgz", - "integrity": "sha1-zVYVdSU5BXwNwEkaYhw7xvvh0YI=", - "dev": true, - "requires": { - "hoek": "4.x.x" - } - }, - "toposort": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/toposort/-/toposort-2.0.2.tgz", - "integrity": "sha1-riF2gXXRVZ1IvvNUILL0li8JwzA=" + "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==", + "dev": true }, "tough-cookie": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", + "dev": true, "requires": { "psl": "^1.1.28", "punycode": "^2.1.1" } }, - "tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=" - }, "trim-newlines": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz", - "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=" - }, - "trim-right": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz", - "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=", + "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=", "dev": true }, "true-case-path": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/true-case-path/-/true-case-path-1.0.3.tgz", "integrity": "sha512-m6s2OdQe5wgpFMC+pAJ+q9djG82O2jcHPOI6RNg1yy9rCYR+WD6Nbpl32fDpfC56nirdRy+opFa/Vk7HYhqaew==", + "dev": true, "requires": { "glob": "^7.1.2" } }, - "tryer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/tryer/-/tryer-1.0.1.tgz", - "integrity": "sha512-c3zayb8/kWWpycWYg87P71E1S1ZL6b6IJxfb5fvsUgsf0S2MVGaDhDXXjDMpdCpfWXqptc+4mXwmiy1ypXqRAA==", - "dev": true - }, "ts-pnp": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/ts-pnp/-/ts-pnp-1.2.0.tgz", - "integrity": "sha512-csd+vJOb/gkzvcCHgTGSChYpy5f1/XKNsmvBGO4JXS+z1v2HobugDz4s1IeFXM3wZB44uczs+eazB5Q/ccdhQw==", + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/ts-pnp/-/ts-pnp-1.1.6.tgz", + "integrity": "sha512-CrG5GqAAzMT7144Cl+UIFP7mz/iIhiy+xQ6GGcnjTezhALT02uPMRw7tgDSESgB5MsfKt55+GPWw4ir1kVtMIQ==", "dev": true }, "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.13.0.tgz", + "integrity": "sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q==", + "dev": true + }, + "tsutils": { + "version": "3.17.1", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.17.1.tgz", + "integrity": "sha512-kzeQ5B8H3w60nFY2g8cJIuH7JDpsALXySGtwGJ0p2LSjLgay3NdIpqq5SoOBe46bKDW2iq25irHCr8wjomUS2g==", + "dev": true, + "requires": { + "tslib": "^1.8.1" + } }, "tty-browserify": { "version": "0.0.0", @@ -20329,6 +19615,7 @@ "version": "0.6.0", "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "dev": true, "requires": { "safe-buffer": "^5.0.1" } @@ -20341,20 +19628,35 @@ "tweetnacl": { "version": "0.14.5", "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=" + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", + "dev": true + }, + "type": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", + "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==", + "dev": true }, "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-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "dev": true + }, "type-is": { "version": "1.6.18", "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "dev": true, "requires": { "media-typer": "0.3.0", "mime-types": "~2.1.24" @@ -20372,43 +19674,19 @@ "dev": true }, "ua-parser-js": { - "version": "0.7.23", - "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.23.tgz", - "integrity": "sha512-m4hvMLxgGHXG3O3fQVAyyAQpZzDOvwnhOTjYz5Xmr7r/+LpkNy3vJXdVRWgd1TkAb7NGROZuSy96CrlNVjA7KA==" + "version": "0.7.21", + "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.21.tgz", + "integrity": "sha512-+O8/qh/Qj8CgC6eYBVBykMrNtp5Gebn4dlGD/kKXVkJNDwyrAwSIqwz8CDf+tsAIWVycKcku6gIXJ0qwx/ZXaQ==" }, "uc.micro": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz", "integrity": "sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==" }, - "uglify-js": { - "version": "3.4.10", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.4.10.tgz", - "integrity": "sha512-Y2VsbPVs0FIshJztycsO2SfPk7/KAF/T72qzv9u5EpQ4kB2hQoHlhNQTsNyy6ul7lQtqJN/AoWeS23OzEiEFxw==", - "dev": true, - "requires": { - "commander": "~2.19.0", - "source-map": "~0.6.1" - }, - "dependencies": { - "commander": { - "version": "2.19.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.19.0.tgz", - "integrity": "sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg==", - "dev": true - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, "underscore": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.12.0.tgz", - "integrity": "sha512-21rQzss/XPMjolTiIezSu3JAjgagXKROtNrYFEOWK109qY1Uv2tVjPTZ1ci2HgvQDA16gHYSthQIJfB+XId/rQ==" + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.10.2.tgz", + "integrity": "sha512-N4P+Q/BuyuEKFJ43B9gYuOj4TQUHXX+j2FqguVOpjkssLUUrnJofCcBccJSCoeturDoZU6GorDTHSvUDlSQbTg==" }, "unicode-canonical-property-names-ecmascript": { "version": "1.0.4", @@ -20442,6 +19720,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", + "dev": true, "requires": { "arr-union": "^3.1.0", "get-value": "^2.0.6", @@ -20499,7 +19778,8 @@ "unpipe": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", + "dev": true }, "unquote": { "version": "1.1.1", @@ -20511,6 +19791,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", + "dev": true, "requires": { "has-value": "^0.3.1", "isobject": "^3.0.0" @@ -20520,6 +19801,7 @@ "version": "0.3.1", "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", + "dev": true, "requires": { "get-value": "^2.0.3", "has-values": "^0.1.4", @@ -20530,6 +19812,7 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "dev": true, "requires": { "isarray": "1.0.0" } @@ -20539,25 +19822,22 @@ "has-values": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", - "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=" + "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", + "dev": true } } }, "upath": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", - "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==" - }, - "upper-case": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/upper-case/-/upper-case-1.1.3.tgz", - "integrity": "sha1-9rRQHC7EzdJrp4vnIilh3ndiFZg=", + "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", "dev": true }, "uri-js": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.0.tgz", - "integrity": "sha512-B0yRTzYdUCCn9n+F4+Gh4yIDtMQcaJsmYBDsTSG8g/OejKBodLQ2IHfN3bM7jUsRXndopT7OIXWdYqc1fjmV6g==", + "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" } @@ -20565,7 +19845,8 @@ "urix": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", - "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=" + "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", + "dev": true }, "url": { "version": "0.11.0", @@ -20586,20 +19867,20 @@ } }, "url-loader": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/url-loader/-/url-loader-1.1.2.tgz", - "integrity": "sha512-dXHkKmw8FhPqu8asTc1puBfe3TehOCo2+RmOOev5suNCIYBcT626kxiWg1NBVkwc4rO8BGa7gP70W7VXuqHrjg==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/url-loader/-/url-loader-2.3.0.tgz", + "integrity": "sha512-goSdg8VY+7nPZKUEChZSEtW5gjbS66USIGCeSJ1OVOJ7Yfuh/36YxCwMi5HVEJh6mqUYOoy3NJ0vlOMrWsSHog==", "dev": true, "requires": { - "loader-utils": "^1.1.0", - "mime": "^2.0.3", - "schema-utils": "^1.0.0" + "loader-utils": "^1.2.3", + "mime": "^2.4.4", + "schema-utils": "^2.5.0" }, "dependencies": { "mime": { - "version": "2.4.7", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.7.tgz", - "integrity": "sha512-dhNd1uA2u397uQk3Nv5LM4lm93WYDUXFn3Fu291FJerns4jyTudqhIWe4W04YLy7Uk1tm1Ore04NpjRvQp/NPA==", + "version": "2.4.6", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.6.tgz", + "integrity": "sha512-RZKhC3EmpBchfTGBVb8fb+RL2cWyw/32lshnsETttkBAyAUXSGHxbEJWWRXc751DrIxG1q04b8QwMbAwkRPpUA==", "dev": true } } @@ -20614,24 +19895,31 @@ "requires-port": "^1.0.0" } }, + "url-parse-as-address": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/url-parse-as-address/-/url-parse-as-address-1.0.0.tgz", + "integrity": "sha1-+4CQGIPzOLPL7TU49fqiatr38uc=", + "dev": true + }, "use": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", - "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==" + "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", + "dev": true }, "util": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/util/-/util-0.11.1.tgz", - "integrity": "sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==", + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", + "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", "dev": true, "requires": { - "inherits": "2.0.3" + "inherits": "2.0.1" }, "dependencies": { "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", + "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=", "dev": true } } @@ -20651,27 +19939,6 @@ "es-abstract": "^1.17.2", "has-symbols": "^1.0.1", "object.getownpropertydescriptors": "^2.1.0" - }, - "dependencies": { - "es-abstract": { - "version": "1.17.7", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.7.tgz", - "integrity": "sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g==", - "dev": true, - "requires": { - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1", - "is-callable": "^1.2.2", - "is-regex": "^1.1.1", - "object-inspect": "^1.8.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.1", - "string.prototype.trimend": "^1.0.1", - "string.prototype.trimstart": "^1.0.1" - } - } } }, "utila": { @@ -20680,15 +19947,59 @@ "integrity": "sha1-ihagXURWV6Oupe7MWxKk+lN5dyw=", "dev": true }, + "utile": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/utile/-/utile-0.2.1.tgz", + "integrity": "sha1-kwyI6ZCY1iIINMNWy9mncFItkNc=", + "dev": true, + "requires": { + "async": "~0.2.9", + "deep-equal": "*", + "i": "0.3.x", + "mkdirp": "0.x.x", + "ncp": "0.4.x", + "rimraf": "2.x.x" + }, + "dependencies": { + "async": { + "version": "0.2.10", + "resolved": "https://registry.npmjs.org/async/-/async-0.2.10.tgz", + "integrity": "sha1-trvgsGdLnXGXCMo43owjfLUmw9E=", + "dev": true + }, + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + } + } + }, "utils-merge": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" + "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", + "dev": true }, "uuid": { "version": "3.4.0", "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==" + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "dev": true + }, + "v8-compile-cache": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.1.1.tgz", + "integrity": "sha512-8OQ9CL+VWyt3JStj7HX7/ciTL2V3Rl1Wf5OL+SNTm0yK1KvtReVulksyeRnCANHHuUxHlQig+JJDlUhBt1NQDQ==", + "dev": true + }, + "validate-color": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/validate-color/-/validate-color-2.1.0.tgz", + "integrity": "sha512-/78x9MDsanOisNfa4UxombQkPCE2A/hmFUtgunwGutpAgTRnhKvOhzJ4KeSDunbKEla6T+u0OlHd1hWCLVhSdA==" }, "validate-npm-package-license": { "version": "3.0.4", @@ -20704,10 +20015,16 @@ "resolved": "https://registry.npmjs.org/validator/-/validator-10.11.0.tgz", "integrity": "sha512-X/p3UZerAIsbBfN/IwahhYaBbY68EN/UQBWHtsbXGT5bfrH/p4NQzUCG1kF/rtKaNpnJ7jAu6NGTdSNtyNIXMw==" }, + "vanilla-swipe": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/vanilla-swipe/-/vanilla-swipe-1.2.0.tgz", + "integrity": "sha512-1yNnsfHcl67Y24HGJc/zrC9omRBzzxqvC6D5apOXMqGukuz0Zha1ydKJM7AUL/dB2w7Bd7UsI2Uw7+AE4soDaA==" + }, "vary": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", + "dev": true }, "vendors": { "version": "1.0.4", @@ -20719,6 +20036,7 @@ "version": "1.10.0", "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", + "dev": true, "requires": { "assert-plus": "^1.0.0", "core-util-is": "1.0.2", @@ -20740,6 +20058,25 @@ "browser-process-hrtime": "^1.0.0" } }, + "w3c-xmlserializer": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-1.1.2.tgz", + "integrity": "sha512-p10l/ayESzrBMYWRID6xbuCKh2Fp77+sA0doRuGn4tTIMrrZVeqfpKjXHY+oDh3K4nLdPgNwMTVP6Vp4pvqbNg==", + "dev": true, + "requires": { + "domexception": "^1.0.1", + "webidl-conversions": "^4.0.2", + "xml-name-validator": "^3.0.0" + }, + "dependencies": { + "xml-name-validator": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", + "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==", + "dev": true + } + } + }, "walker": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.7.tgz", @@ -20766,26 +20103,16 @@ "loose-envify": "^1.0.0" } }, - "watch": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/watch/-/watch-0.18.0.tgz", - "integrity": "sha1-KAlUdsbffJDJYxOJkMClQj60uYY=", - "dev": true, - "requires": { - "exec-sh": "^0.2.0", - "minimist": "^1.2.0" - } - }, "watchpack": { - "version": "1.7.5", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.7.5.tgz", - "integrity": "sha512-9P3MWk6SrKjHsGkLT2KHXdQ/9SNkyoJbabxnKOoJepsvJjJG8uYTR3yTPxPQvNDI3w4Nz1xnE0TLHK4RIVe/MQ==", + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.7.4.tgz", + "integrity": "sha512-aWAgTW4MoSJzZPAicljkO1hsi1oKj/RRq/OJQh2PKI2UKL04c2Bs+MBOB+BBABHTXJpf9mCwHN7ANCvYsvY2sg==", "dev": true, "requires": { "chokidar": "^3.4.1", "graceful-fs": "^4.1.2", "neo-async": "^2.5.0", - "watchpack-chokidar2": "^2.0.1" + "watchpack-chokidar2": "^2.0.0" }, "dependencies": { "anymatch": { @@ -20817,9 +20144,9 @@ } }, "chokidar": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.4.3.tgz", - "integrity": "sha512-DtM3g7juCXQxFVSNPNByEC2+NImtBuxQQvWlHunpJIS5Ocr0lG306cC7FCi7cEA0fzmybPUIl4txBIobk1gGOQ==", + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.4.2.tgz", + "integrity": "sha512-IZHaDeBeI+sZJRX7lGcXsdzgvZqKv6sECqsbErJA4mHWfpRrD8B97kSFN4cQz6nGBGiuFia1MKR4d6c1o8Cv7A==", "dev": true, "optional": true, "requires": { @@ -20830,7 +20157,7 @@ "is-binary-path": "~2.1.0", "is-glob": "~4.0.1", "normalize-path": "~3.0.0", - "readdirp": "~3.5.0" + "readdirp": "~3.4.0" } }, "fill-range": { @@ -20878,9 +20205,9 @@ "optional": true }, "readdirp": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.5.0.tgz", - "integrity": "sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==", + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.4.0.tgz", + "integrity": "sha512-0xe001vZBnJEK+uKcj8qOhyAKPzIT+gStxWr3LCB0DwcXR5NZJ3IaC+yGnHCYzB/S7ov3m3EEbZI2zeNvX+hGQ==", "dev": true, "optional": true, "requires": { @@ -20900,9 +20227,9 @@ } }, "watchpack-chokidar2": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/watchpack-chokidar2/-/watchpack-chokidar2-2.0.1.tgz", - "integrity": "sha512-nCFfBIPKr5Sh61s4LPpy1Wtfi0HE8isJ3d2Yb5/Ppw2P2B/3eVSEBjKfN0fmHJSK14+31KwMKmcrzs2GM4P0Ww==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/watchpack-chokidar2/-/watchpack-chokidar2-2.0.0.tgz", + "integrity": "sha512-9TyfOyN/zLUbA288wZ8IsMZ+6cbzvsNyEzSBp6e/zkifi6xxbl8SmQ/CxQq32k8NNqrdVEVUVSEf56L4rQ/ZxA==", "dev": true, "optional": true, "requires": { @@ -20921,46 +20248,80 @@ "webidl-conversions": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", - "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==" + "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==", + "dev": true }, "webpack": { - "version": "4.28.3", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.28.3.tgz", - "integrity": "sha512-vLZN9k5I7Nr/XB1IDG9GbZB4yQd1sPuvufMFgJkx0b31fi2LD97KQIjwjxE7xytdruAYfu5S0FLBLjdxmwGJCg==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.7.11", - "@webassemblyjs/helper-module-context": "1.7.11", - "@webassemblyjs/wasm-edit": "1.7.11", - "@webassemblyjs/wasm-parser": "1.7.11", - "acorn": "^5.6.2", - "acorn-dynamic-import": "^3.0.0", - "ajv": "^6.1.0", - "ajv-keywords": "^3.1.0", - "chrome-trace-event": "^1.0.0", + "version": "4.42.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.42.0.tgz", + "integrity": "sha512-EzJRHvwQyBiYrYqhyjW9AqM90dE4+s1/XtCfn7uWg6cS72zH+2VPFAlsnW0+W0cDi0XRjNKUMoJtpSi50+Ph6w==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.8.5", + "@webassemblyjs/helper-module-context": "1.8.5", + "@webassemblyjs/wasm-edit": "1.8.5", + "@webassemblyjs/wasm-parser": "1.8.5", + "acorn": "^6.2.1", + "ajv": "^6.10.2", + "ajv-keywords": "^3.4.1", + "chrome-trace-event": "^1.0.2", "enhanced-resolve": "^4.1.0", - "eslint-scope": "^4.0.0", + "eslint-scope": "^4.0.3", "json-parse-better-errors": "^1.0.2", - "loader-runner": "^2.3.0", - "loader-utils": "^1.1.0", - "memory-fs": "~0.4.1", - "micromatch": "^3.1.8", - "mkdirp": "~0.5.0", - "neo-async": "^2.5.0", - "node-libs-browser": "^2.0.0", - "schema-utils": "^0.4.4", - "tapable": "^1.1.0", - "terser-webpack-plugin": "^1.1.0", - "watchpack": "^1.5.0", - "webpack-sources": "^1.3.0" + "loader-runner": "^2.4.0", + "loader-utils": "^1.2.3", + "memory-fs": "^0.4.1", + "micromatch": "^3.1.10", + "mkdirp": "^0.5.1", + "neo-async": "^2.6.1", + "node-libs-browser": "^2.2.1", + "schema-utils": "^1.0.0", + "tapable": "^1.1.3", + "terser-webpack-plugin": "^1.4.3", + "watchpack": "^1.6.0", + "webpack-sources": "^1.4.1" }, "dependencies": { "acorn": { - "version": "5.7.4", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.4.tgz", - "integrity": "sha512-1D++VG7BhrtvQpNbBzovKNc1FLGGEE/oGe7b9xJm/RFHMBeUaUGpluV9RLjZa47YFdPcDAenEYuq9pQPcMdLJg==", + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.1.tgz", + "integrity": "sha512-ZVA9k326Nwrj3Cj9jlh3wGFutC2ZornPNARZwsNYqQYgN0EsV2d53w5RN/co65Ohn4sUAUtb1rSUAOD6XN9idA==", "dev": true }, + "cacache": { + "version": "12.0.4", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.4.tgz", + "integrity": "sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ==", + "dev": true, + "requires": { + "bluebird": "^3.5.5", + "chownr": "^1.1.1", + "figgy-pudding": "^3.5.1", + "glob": "^7.1.4", + "graceful-fs": "^4.1.15", + "infer-owner": "^1.0.3", + "lru-cache": "^5.1.1", + "mississippi": "^3.0.0", + "mkdirp": "^0.5.1", + "move-concurrently": "^1.0.1", + "promise-inflight": "^1.0.1", + "rimraf": "^2.6.3", + "ssri": "^6.0.1", + "unique-filename": "^1.1.1", + "y18n": "^4.0.0" + }, + "dependencies": { + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + } + } + }, "eslint-scope": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz", @@ -20971,265 +20332,250 @@ "estraverse": "^4.1.1" } }, + "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==", + "dev": true, + "requires": { + "yallist": "^3.0.2" + } + }, "schema-utils": { - "version": "0.4.7", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-0.4.7.tgz", - "integrity": "sha512-v/iwU6wvwGK8HbU9yi3/nhGzP0yGSuhQMzL6ySiec1FSrZZDkhm4noOSWzrNFo/jEc+SJY6jRTwuwbSXJPDUnQ==", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", + "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", "dev": true, "requires": { "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", "ajv-keywords": "^3.1.0" } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "ssri": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.1.tgz", + "integrity": "sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA==", + "dev": true, + "requires": { + "figgy-pudding": "^3.5.1" + } + }, + "terser-webpack-plugin": { + "version": "1.4.5", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.4.5.tgz", + "integrity": "sha512-04Rfe496lN8EYruwi6oPQkG0vo8C+HT49X687FZnpPF0qMAIHONI6HEXYPKDOE8e5HjXTyKfqRd/agHtH0kOtw==", + "dev": true, + "requires": { + "cacache": "^12.0.2", + "find-cache-dir": "^2.1.0", + "is-wsl": "^1.1.0", + "schema-utils": "^1.0.0", + "serialize-javascript": "^4.0.0", + "source-map": "^0.6.1", + "terser": "^4.1.2", + "webpack-sources": "^1.4.0", + "worker-farm": "^1.7.0" + } + }, + "yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true } } }, "webpack-dev-middleware": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-3.4.0.tgz", - "integrity": "sha512-Q9Iyc0X9dP9bAsYskAVJ/hmIZZQwf/3Sy4xCAZgL5cUkjZmUZLt4l5HpbST/Pdgjn3u6pE7u5OdGd1apgzRujA==", + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-3.7.2.tgz", + "integrity": "sha512-1xC42LxbYoqLNAhV6YzTYacicgMZQTqRd27Sim9wn5hJrX3I5nxYy1SxSd4+gjUFsz1dQFj+yEe6zEVmSkeJjw==", "dev": true, "requires": { - "memory-fs": "~0.4.1", - "mime": "^2.3.1", - "range-parser": "^1.0.3", + "memory-fs": "^0.4.1", + "mime": "^2.4.4", + "mkdirp": "^0.5.1", + "range-parser": "^1.2.1", "webpack-log": "^2.0.0" }, "dependencies": { "mime": { - "version": "2.4.7", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.7.tgz", - "integrity": "sha512-dhNd1uA2u397uQk3Nv5LM4lm93WYDUXFn3Fu291FJerns4jyTudqhIWe4W04YLy7Uk1tm1Ore04NpjRvQp/NPA==", + "version": "2.4.6", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.6.tgz", + "integrity": "sha512-RZKhC3EmpBchfTGBVb8fb+RL2cWyw/32lshnsETttkBAyAUXSGHxbEJWWRXc751DrIxG1q04b8QwMbAwkRPpUA==", "dev": true } } }, "webpack-dev-server": { - "version": "3.1.14", - "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-3.1.14.tgz", - "integrity": "sha512-mGXDgz5SlTxcF3hUpfC8hrQ11yhAttuUQWf1Wmb+6zo3x6rb7b9mIfuQvAPLdfDRCGRGvakBWHdHOa0I9p/EVQ==", + "version": "3.11.0", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-3.11.0.tgz", + "integrity": "sha512-PUxZ+oSTxogFQgkTtFndEtJIPNmml7ExwufBZ9L2/Xyyd5PnOL5UreWe5ZT7IU25DSdykL9p1MLQzmLh2ljSeg==", "dev": true, "requires": { "ansi-html": "0.0.7", "bonjour": "^3.5.0", - "chokidar": "^2.0.0", - "compression": "^1.5.2", - "connect-history-api-fallback": "^1.3.0", - "debug": "^3.1.0", - "del": "^3.0.0", - "express": "^4.16.2", - "html-entities": "^1.2.0", - "http-proxy-middleware": "~0.18.0", + "chokidar": "^2.1.8", + "compression": "^1.7.4", + "connect-history-api-fallback": "^1.6.0", + "debug": "^4.1.1", + "del": "^4.1.1", + "express": "^4.17.1", + "html-entities": "^1.3.1", + "http-proxy-middleware": "0.19.1", "import-local": "^2.0.0", - "internal-ip": "^3.0.1", + "internal-ip": "^4.3.0", "ip": "^1.1.5", - "killable": "^1.0.0", - "loglevel": "^1.4.1", - "opn": "^5.1.0", - "portfinder": "^1.0.9", + "is-absolute-url": "^3.0.3", + "killable": "^1.0.1", + "loglevel": "^1.6.8", + "opn": "^5.5.0", + "p-retry": "^3.0.1", + "portfinder": "^1.0.26", "schema-utils": "^1.0.0", - "selfsigned": "^1.9.1", - "semver": "^5.6.0", - "serve-index": "^1.7.2", - "sockjs": "0.3.19", - "sockjs-client": "1.3.0", - "spdy": "^4.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^5.1.0", + "selfsigned": "^1.10.7", + "semver": "^6.3.0", + "serve-index": "^1.9.1", + "sockjs": "0.3.20", + "sockjs-client": "1.4.0", + "spdy": "^4.0.2", + "strip-ansi": "^3.0.1", + "supports-color": "^6.1.0", "url": "^0.11.0", - "webpack-dev-middleware": "3.4.0", + "webpack-dev-middleware": "^3.7.2", "webpack-log": "^2.0.0", - "yargs": "12.0.2" + "ws": "^6.2.1", + "yargs": "^13.3.2" }, "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - }, - "camelcase": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", - "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", - "dev": true + "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" + } }, - "cliui": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz", - "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==", + "del": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/del/-/del-4.1.1.tgz", + "integrity": "sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ==", "dev": true, "requires": { - "string-width": "^2.1.1", - "strip-ansi": "^4.0.0", - "wrap-ansi": "^2.0.0" + "@types/glob": "^7.1.1", + "globby": "^6.1.0", + "is-path-cwd": "^2.0.0", + "is-path-in-cwd": "^2.0.0", + "p-map": "^2.0.0", + "pify": "^4.0.1", + "rimraf": "^2.6.3" }, "dependencies": { - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", "dev": true, "requires": { - "ansi-regex": "^3.0.0" + "glob": "^7.1.3" } - } - } - }, - "decamelize": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-2.0.0.tgz", - "integrity": "sha512-Ikpp5scV3MSYxY39ymh45ZLEecsTdv/Xj2CaQfI8RLMuwi7XvjX9H/fhraiSuU+C5w5NTDu4ZU72xNiZnurBPg==", - "dev": true, - "requires": { - "xregexp": "4.0.0" - } - }, - "get-caller-file": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", - "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==", - "dev": true + } + } }, "http-proxy-middleware": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-0.18.0.tgz", - "integrity": "sha512-Fs25KVMPAIIcgjMZkVHJoKg9VcXcC1C8yb9JUgeDvVXY0S/zgVIhMb+qVswDIgtJe2DfckMSY2d6TuTEutlk6Q==", + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-0.19.1.tgz", + "integrity": "sha512-yHYTgWMQO8VvwNS22eLLloAkvungsKdKTLO8AJlftYIKNfJr3GK3zK0ZCfzDDGUBttdGc8xFy1mCitvNKQtC3Q==", "dev": true, "requires": { - "http-proxy": "^1.16.2", + "http-proxy": "^1.17.0", "is-glob": "^4.0.0", - "lodash": "^4.17.5", - "micromatch": "^3.1.9" - } - }, - "import-local": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-2.0.0.tgz", - "integrity": "sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ==", - "dev": true, - "requires": { - "pkg-dir": "^3.0.0", - "resolve-cwd": "^2.0.0" + "lodash": "^4.17.11", + "micromatch": "^3.1.10" } }, - "invert-kv": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-2.0.0.tgz", - "integrity": "sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA==", + "is-absolute-url": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-3.0.3.tgz", + "integrity": "sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q==", "dev": true }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "is-path-cwd": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", + "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==", "dev": true }, - "lcid": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz", - "integrity": "sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==", + "is-path-in-cwd": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-2.1.0.tgz", + "integrity": "sha512-rNocXHgipO+rvnP6dk3zI20RpOtrAM/kzbB258Uw5BWr3TpXi861yzjo16Dn4hUox07iw5AyeMLHWsujkjzvRQ==", "dev": true, "requires": { - "invert-kv": "^2.0.0" + "is-path-inside": "^2.1.0" } }, - "os-locale": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-3.1.0.tgz", - "integrity": "sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q==", + "is-path-inside": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-2.1.0.tgz", + "integrity": "sha512-wiyhTzfDWsvwAW53OBWF5zuvaOGlZ6PwYxAbPVDhpm+gM09xKQGjBq/8uYN12aDvMxnAnq3dxTyoSoRNmg5YFg==", "dev": true, "requires": { - "execa": "^1.0.0", - "lcid": "^2.0.0", - "mem": "^4.0.0" + "path-is-inside": "^1.0.2" } }, - "require-main-filename": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", - "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=", + "p-map": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz", + "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==", "dev": true }, - "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "dev": true, - "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - }, - "dependencies": { - "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" - } - } - } + "pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true }, - "wrap-ansi": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", - "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", + "schema-utils": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", + "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", "dev": true, "requires": { - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1" - }, - "dependencies": { - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "dev": true, - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "dev": true, - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - } + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" } }, - "yargs": { - "version": "12.0.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-12.0.2.tgz", - "integrity": "sha512-e7SkEx6N6SIZ5c5H22RTZae61qtn3PYUE8JYbBFlK9sYmh3DMQ6E5ygtaG/2BW0JZi4WGgTR2IV5ChqlqrDGVQ==", + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", "dev": true, "requires": { - "cliui": "^4.0.0", - "decamelize": "^2.0.0", - "find-up": "^3.0.0", - "get-caller-file": "^1.0.1", - "os-locale": "^3.0.0", - "require-directory": "^2.1.1", - "require-main-filename": "^1.0.1", - "set-blocking": "^2.0.0", - "string-width": "^2.0.0", - "which-module": "^2.0.0", - "y18n": "^3.2.1 || ^4.0.0", - "yargs-parser": "^10.1.0" + "has-flag": "^3.0.0" } }, - "yargs-parser": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-10.1.0.tgz", - "integrity": "sha512-VCIyR1wJoEBZUqk5PA+oOBF6ypbwh5aNB3I50guxAL/quggdfs4TtNHQrSazFA3fYZ+tEqfs0zIGlv0c/rgjbQ==", + "ws": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.1.tgz", + "integrity": "sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA==", "dev": true, "requires": { - "camelcase": "^4.1.0" + "async-limiter": "~1.0.0" } } } @@ -21245,14 +20591,28 @@ } }, "webpack-manifest-plugin": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/webpack-manifest-plugin/-/webpack-manifest-plugin-2.0.4.tgz", - "integrity": "sha512-nejhOHexXDBKQOj/5v5IZSfCeTO3x1Dt1RZEcGfBSul891X/eLIcIVH31gwxPDdsi2Z8LKKFGpM4w9+oTBOSCg==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/webpack-manifest-plugin/-/webpack-manifest-plugin-2.2.0.tgz", + "integrity": "sha512-9S6YyKKKh/Oz/eryM1RyLVDVmy3NSPV0JXMRhZ18fJsq+AwGxUY34X54VNwkzYcEmEkDwNxuEOboCZEebJXBAQ==", "dev": true, "requires": { "fs-extra": "^7.0.0", "lodash": ">=3.5 <5", + "object.entries": "^1.1.0", "tapable": "^1.0.0" + }, + "dependencies": { + "fs-extra": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", + "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + } } }, "webpack-sources": { @@ -21274,13 +20634,11 @@ } }, "websocket-driver": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", - "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.6.5.tgz", + "integrity": "sha1-XLJVbOuF9Dc8bYI4qmkchFThOjY=", "dev": true, "requires": { - "http-parser-js": ">=0.5.1", - "safe-buffer": ">=5.1.0", "websocket-extensions": ">=0.1.1" } }, @@ -21294,24 +20652,15 @@ "version": "1.0.5", "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz", "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==", + "dev": true, "requires": { "iconv-lite": "0.4.24" - }, - "dependencies": { - "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" - } - } } }, "whatwg-fetch": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.5.0.tgz", - "integrity": "sha512-jXkLtsR42xhXg7akoDKvKWE40eJeI+2KZqcp2h3NsOrRnDvtWX36KcKl30dy+hxECivdk2BVUHVNrPtoMBUx6A==" + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.1.1.tgz", + "integrity": "sha512-UlBvc5VApYAwNutfXFeuC9Jp3QCMazcqobfNqSK/RghRr3F8b0+i/QELUlEPsHjDHfijio6H5KPJcZwYXhuZsA==" }, "whatwg-mimetype": { "version": "2.3.0", @@ -21319,22 +20668,6 @@ "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==", "dev": true }, - "whatwg-url": { - "version": "4.8.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-4.8.0.tgz", - "integrity": "sha1-0pgaqRSMHgCkHFphMRZqtGg7vMA=", - "requires": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - }, - "dependencies": { - "webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=" - } - } - }, "which": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", @@ -21346,73 +20679,112 @@ "which-module": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=" + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", + "dev": true + }, + "which-pm-runs": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/which-pm-runs/-/which-pm-runs-1.0.0.tgz", + "integrity": "sha1-Zws6+8VS4LVd9rd4DKdGFfI60cs=", + "dev": true }, "wide-align": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", + "dev": true, "requires": { "string-width": "^1.0.2 || 2" } }, + "winston": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/winston/-/winston-0.8.3.tgz", + "integrity": "sha1-ZLar9M0Brcrv1QCTk7HY6L7BnbA=", + "dev": true, + "requires": { + "async": "0.2.x", + "colors": "0.6.x", + "cycle": "1.0.x", + "eyes": "0.1.x", + "isstream": "0.1.x", + "pkginfo": "0.3.x", + "stack-trace": "0.0.x" + }, + "dependencies": { + "async": { + "version": "0.2.10", + "resolved": "https://registry.npmjs.org/async/-/async-0.2.10.tgz", + "integrity": "sha1-trvgsGdLnXGXCMo43owjfLUmw9E=", + "dev": true + }, + "colors": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/colors/-/colors-0.6.2.tgz", + "integrity": "sha1-JCP+ZnisDF2uiFLl0OW+CMmXq8w=", + "dev": true + }, + "pkginfo": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/pkginfo/-/pkginfo-0.3.1.tgz", + "integrity": "sha1-Wyn2qB9wcXFC4J52W76rl7T4HiE=", + "dev": true + } + } + }, "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==" - }, - "wordwrap": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", - "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", "dev": true }, "workbox-background-sync": { - "version": "3.6.3", - "resolved": "https://registry.npmjs.org/workbox-background-sync/-/workbox-background-sync-3.6.3.tgz", - "integrity": "sha512-ypLo0B6dces4gSpaslmDg5wuoUWrHHVJfFWwl1udvSylLdXvnrfhFfriCS42SNEe5lsZtcNZF27W/SMzBlva7Q==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/workbox-background-sync/-/workbox-background-sync-4.3.1.tgz", + "integrity": "sha512-1uFkvU8JXi7L7fCHVBEEnc3asPpiAL33kO495UMcD5+arew9IbKW2rV5lpzhoWcm/qhGB89YfO4PmB/0hQwPRg==", "dev": true, "requires": { - "workbox-core": "^3.6.3" + "workbox-core": "^4.3.1" } }, - "workbox-broadcast-cache-update": { - "version": "3.6.3", - "resolved": "https://registry.npmjs.org/workbox-broadcast-cache-update/-/workbox-broadcast-cache-update-3.6.3.tgz", - "integrity": "sha512-pJl4lbClQcvp0SyTiEw0zLSsVYE1RDlCPtpKnpMjxFtu8lCFTAEuVyzxp9w7GF4/b3P4h5nyQ+q7V9mIR7YzGg==", + "workbox-broadcast-update": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/workbox-broadcast-update/-/workbox-broadcast-update-4.3.1.tgz", + "integrity": "sha512-MTSfgzIljpKLTBPROo4IpKjESD86pPFlZwlvVG32Kb70hW+aob4Jxpblud8EhNb1/L5m43DUM4q7C+W6eQMMbA==", "dev": true, "requires": { - "workbox-core": "^3.6.3" + "workbox-core": "^4.3.1" } }, "workbox-build": { - "version": "3.6.3", - "resolved": "https://registry.npmjs.org/workbox-build/-/workbox-build-3.6.3.tgz", - "integrity": "sha512-w0clZ/pVjL8VXy6GfthefxpEXs0T8uiRuopZSFVQ8ovfbH6c6kUpEh6DcYwm/Y6dyWPiCucdyAZotgjz+nRz8g==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/workbox-build/-/workbox-build-4.3.1.tgz", + "integrity": "sha512-UHdwrN3FrDvicM3AqJS/J07X0KXj67R8Cg0waq1MKEOqzo89ap6zh6LmaLnRAjpB+bDIz+7OlPye9iii9KBnxw==", "dev": true, "requires": { - "babel-runtime": "^6.26.0", - "common-tags": "^1.4.0", + "@babel/runtime": "^7.3.4", + "@hapi/joi": "^15.0.0", + "common-tags": "^1.8.0", "fs-extra": "^4.0.2", - "glob": "^7.1.2", - "joi": "^11.1.1", + "glob": "^7.1.3", "lodash.template": "^4.4.0", - "pretty-bytes": "^4.0.2", - "stringify-object": "^3.2.2", + "pretty-bytes": "^5.1.0", + "stringify-object": "^3.3.0", "strip-comments": "^1.0.2", - "workbox-background-sync": "^3.6.3", - "workbox-broadcast-cache-update": "^3.6.3", - "workbox-cache-expiration": "^3.6.3", - "workbox-cacheable-response": "^3.6.3", - "workbox-core": "^3.6.3", - "workbox-google-analytics": "^3.6.3", - "workbox-navigation-preload": "^3.6.3", - "workbox-precaching": "^3.6.3", - "workbox-range-requests": "^3.6.3", - "workbox-routing": "^3.6.3", - "workbox-strategies": "^3.6.3", - "workbox-streams": "^3.6.3", - "workbox-sw": "^3.6.3" + "workbox-background-sync": "^4.3.1", + "workbox-broadcast-update": "^4.3.1", + "workbox-cacheable-response": "^4.3.1", + "workbox-core": "^4.3.1", + "workbox-expiration": "^4.3.1", + "workbox-google-analytics": "^4.3.1", + "workbox-navigation-preload": "^4.3.1", + "workbox-precaching": "^4.3.1", + "workbox-range-requests": "^4.3.1", + "workbox-routing": "^4.3.1", + "workbox-strategies": "^4.3.1", + "workbox-streams": "^4.3.1", + "workbox-sw": "^4.3.1", + "workbox-window": "^4.3.1" }, "dependencies": { "fs-extra": { @@ -21428,111 +20800,120 @@ } } }, - "workbox-cache-expiration": { - "version": "3.6.3", - "resolved": "https://registry.npmjs.org/workbox-cache-expiration/-/workbox-cache-expiration-3.6.3.tgz", - "integrity": "sha512-+ECNph/6doYx89oopO/UolYdDmQtGUgo8KCgluwBF/RieyA1ZOFKfrSiNjztxOrGJoyBB7raTIOlEEwZ1LaHoA==", - "dev": true, - "requires": { - "workbox-core": "^3.6.3" - } - }, "workbox-cacheable-response": { - "version": "3.6.3", - "resolved": "https://registry.npmjs.org/workbox-cacheable-response/-/workbox-cacheable-response-3.6.3.tgz", - "integrity": "sha512-QpmbGA9SLcA7fklBLm06C4zFg577Dt8u3QgLM0eMnnbaVv3rhm4vbmDpBkyTqvgK/Ly8MBDQzlXDtUCswQwqqg==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/workbox-cacheable-response/-/workbox-cacheable-response-4.3.1.tgz", + "integrity": "sha512-Rp5qlzm6z8IOvnQNkCdO9qrDgDpoPNguovs0H8C+wswLuPgSzSp9p2afb5maUt9R1uTIwOXrVQMmPfPypv+npw==", "dev": true, "requires": { - "workbox-core": "^3.6.3" + "workbox-core": "^4.3.1" } }, "workbox-core": { - "version": "3.6.3", - "resolved": "https://registry.npmjs.org/workbox-core/-/workbox-core-3.6.3.tgz", - "integrity": "sha512-cx9cx0nscPkIWs8Pt98HGrS9/aORuUcSkWjG25GqNWdvD/pSe7/5Oh3BKs0fC+rUshCiyLbxW54q0hA+GqZeSQ==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/workbox-core/-/workbox-core-4.3.1.tgz", + "integrity": "sha512-I3C9jlLmMKPxAC1t0ExCq+QoAMd0vAAHULEgRZ7kieCdUd919n53WC0AfvokHNwqRhGn+tIIj7vcb5duCjs2Kg==", "dev": true }, + "workbox-expiration": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/workbox-expiration/-/workbox-expiration-4.3.1.tgz", + "integrity": "sha512-vsJLhgQsQouv9m0rpbXubT5jw0jMQdjpkum0uT+d9tTwhXcEZks7qLfQ9dGSaufTD2eimxbUOJfWLbNQpIDMPw==", + "dev": true, + "requires": { + "workbox-core": "^4.3.1" + } + }, "workbox-google-analytics": { - "version": "3.6.3", - "resolved": "https://registry.npmjs.org/workbox-google-analytics/-/workbox-google-analytics-3.6.3.tgz", - "integrity": "sha512-RQBUo/6SXtIaQTRFj4RQZ9e1gAl7D8oS5S+Hi173Kk70/BgJjzPwXpC5A249Jv5YfkCOLMQCeF9A27BiD0b0ig==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/workbox-google-analytics/-/workbox-google-analytics-4.3.1.tgz", + "integrity": "sha512-xzCjAoKuOb55CBSwQrbyWBKqp35yg1vw9ohIlU2wTy06ZrYfJ8rKochb1MSGlnoBfXGWss3UPzxR5QL5guIFdg==", "dev": true, "requires": { - "workbox-background-sync": "^3.6.3", - "workbox-core": "^3.6.3", - "workbox-routing": "^3.6.3", - "workbox-strategies": "^3.6.3" + "workbox-background-sync": "^4.3.1", + "workbox-core": "^4.3.1", + "workbox-routing": "^4.3.1", + "workbox-strategies": "^4.3.1" } }, "workbox-navigation-preload": { - "version": "3.6.3", - "resolved": "https://registry.npmjs.org/workbox-navigation-preload/-/workbox-navigation-preload-3.6.3.tgz", - "integrity": "sha512-dd26xTX16DUu0i+MhqZK/jQXgfIitu0yATM4jhRXEmpMqQ4MxEeNvl2CgjDMOHBnCVMax+CFZQWwxMx/X/PqCw==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/workbox-navigation-preload/-/workbox-navigation-preload-4.3.1.tgz", + "integrity": "sha512-K076n3oFHYp16/C+F8CwrRqD25GitA6Rkd6+qAmLmMv1QHPI2jfDwYqrytOfKfYq42bYtW8Pr21ejZX7GvALOw==", "dev": true, "requires": { - "workbox-core": "^3.6.3" + "workbox-core": "^4.3.1" } }, "workbox-precaching": { - "version": "3.6.3", - "resolved": "https://registry.npmjs.org/workbox-precaching/-/workbox-precaching-3.6.3.tgz", - "integrity": "sha512-aBqT66BuMFviPTW6IpccZZHzpA8xzvZU2OM1AdhmSlYDXOJyb1+Z6blVD7z2Q8VNtV1UVwQIdImIX+hH3C3PIw==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/workbox-precaching/-/workbox-precaching-4.3.1.tgz", + "integrity": "sha512-piSg/2csPoIi/vPpp48t1q5JLYjMkmg5gsXBQkh/QYapCdVwwmKlU9mHdmy52KsDGIjVaqEUMFvEzn2LRaigqQ==", "dev": true, "requires": { - "workbox-core": "^3.6.3" + "workbox-core": "^4.3.1" } }, "workbox-range-requests": { - "version": "3.6.3", - "resolved": "https://registry.npmjs.org/workbox-range-requests/-/workbox-range-requests-3.6.3.tgz", - "integrity": "sha512-R+yLWQy7D9aRF9yJ3QzwYnGFnGDhMUij4jVBUVtkl67oaVoP1ymZ81AfCmfZro2kpPRI+vmNMfxxW531cqdx8A==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/workbox-range-requests/-/workbox-range-requests-4.3.1.tgz", + "integrity": "sha512-S+HhL9+iTFypJZ/yQSl/x2Bf5pWnbXdd3j57xnb0V60FW1LVn9LRZkPtneODklzYuFZv7qK6riZ5BNyc0R0jZA==", "dev": true, "requires": { - "workbox-core": "^3.6.3" + "workbox-core": "^4.3.1" } }, "workbox-routing": { - "version": "3.6.3", - "resolved": "https://registry.npmjs.org/workbox-routing/-/workbox-routing-3.6.3.tgz", - "integrity": "sha512-bX20i95OKXXQovXhFOViOK63HYmXvsIwZXKWbSpVeKToxMrp0G/6LZXnhg82ijj/S5yhKNRf9LeGDzaqxzAwMQ==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/workbox-routing/-/workbox-routing-4.3.1.tgz", + "integrity": "sha512-FkbtrODA4Imsi0p7TW9u9MXuQ5P4pVs1sWHK4dJMMChVROsbEltuE79fBoIk/BCztvOJ7yUpErMKa4z3uQLX+g==", "dev": true, "requires": { - "workbox-core": "^3.6.3" + "workbox-core": "^4.3.1" } }, "workbox-strategies": { - "version": "3.6.3", - "resolved": "https://registry.npmjs.org/workbox-strategies/-/workbox-strategies-3.6.3.tgz", - "integrity": "sha512-Pg5eulqeKet2y8j73Yw6xTgLdElktcWExGkzDVCGqfV9JCvnGuEpz5eVsCIK70+k4oJcBCin9qEg3g3CwEIH3g==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/workbox-strategies/-/workbox-strategies-4.3.1.tgz", + "integrity": "sha512-F/+E57BmVG8dX6dCCopBlkDvvhg/zj6VDs0PigYwSN23L8hseSRwljrceU2WzTvk/+BSYICsWmRq5qHS2UYzhw==", "dev": true, "requires": { - "workbox-core": "^3.6.3" + "workbox-core": "^4.3.1" } }, "workbox-streams": { - "version": "3.6.3", - "resolved": "https://registry.npmjs.org/workbox-streams/-/workbox-streams-3.6.3.tgz", - "integrity": "sha512-rqDuS4duj+3aZUYI1LsrD2t9hHOjwPqnUIfrXSOxSVjVn83W2MisDF2Bj+dFUZv4GalL9xqErcFW++9gH+Z27w==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/workbox-streams/-/workbox-streams-4.3.1.tgz", + "integrity": "sha512-4Kisis1f/y0ihf4l3u/+ndMkJkIT4/6UOacU3A4BwZSAC9pQ9vSvJpIi/WFGQRH/uPXvuVjF5c2RfIPQFSS2uA==", "dev": true, "requires": { - "workbox-core": "^3.6.3" + "workbox-core": "^4.3.1" } }, "workbox-sw": { - "version": "3.6.3", - "resolved": "https://registry.npmjs.org/workbox-sw/-/workbox-sw-3.6.3.tgz", - "integrity": "sha512-IQOUi+RLhvYCiv80RP23KBW/NTtIvzvjex28B8NW1jOm+iV4VIu3VXKXTA6er5/wjjuhmtB28qEAUqADLAyOSg==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/workbox-sw/-/workbox-sw-4.3.1.tgz", + "integrity": "sha512-0jXdusCL2uC5gM3yYFT6QMBzKfBr2XTk0g5TPAV4y8IZDyVNDyj1a8uSXy3/XrvkVTmQvLN4O5k3JawGReXr9w==", "dev": true }, "workbox-webpack-plugin": { - "version": "3.6.3", - "resolved": "https://registry.npmjs.org/workbox-webpack-plugin/-/workbox-webpack-plugin-3.6.3.tgz", - "integrity": "sha512-RwmKjc7HFHUFHoOlKoZUq9349u0QN3F8W5tZZU0vc1qsBZDINWXRiIBCAKvo/Njgay5sWz7z4I2adnyTo97qIQ==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/workbox-webpack-plugin/-/workbox-webpack-plugin-4.3.1.tgz", + "integrity": "sha512-gJ9jd8Mb8wHLbRz9ZvGN57IAmknOipD3W4XNE/Lk/4lqs5Htw4WOQgakQy/o/4CoXQlMCYldaqUg+EJ35l9MEQ==", "dev": true, "requires": { - "babel-runtime": "^6.26.0", + "@babel/runtime": "^7.0.0", "json-stable-stringify": "^1.0.1", - "workbox-build": "^3.6.3" + "workbox-build": "^4.3.1" + } + }, + "workbox-window": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/workbox-window/-/workbox-window-4.3.1.tgz", + "integrity": "sha512-C5gWKh6I58w3GeSc0wp2Ne+rqVw8qwcmZnQGpjiek8A2wpbxSJb1FdCoQVO+jDJs35bFgo/WETgl1fqgsxN0Hg==", + "dev": true, + "requires": { + "workbox-core": "^4.3.1" } }, "worker-farm": { @@ -21544,40 +20925,86 @@ "errno": "~0.1.7" } }, + "worker-rpc": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/worker-rpc/-/worker-rpc-0.1.1.tgz", + "integrity": "sha512-P1WjMrUB3qgJNI9jfmpZ/htmBEjFh//6l/5y8SD9hg1Ef5zTTVVoRjTrTEzPrNBQvmhMxkoTsjOXN10GWU7aCg==", + "dev": true, + "requires": { + "microevent.ts": "~0.1.1" + } + }, "wrap-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-3.0.1.tgz", - "integrity": "sha1-KIoE2H7aXChuBg3+jxNc6NAH+Lo=", + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dev": true, "requires": { - "string-width": "^2.1.1", - "strip-ansi": "^4.0.0" + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" }, "dependencies": { "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true }, "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" + "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==", + "dev": true }, "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", + "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", + "dev": true, "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" } }, "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dev": true, "requires": { - "ansi-regex": "^3.0.0" + "ansi-regex": "^5.0.0" } } } @@ -21588,18 +21015,18 @@ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" }, "write": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/write/-/write-0.2.1.tgz", - "integrity": "sha1-X8A4KOJkzqP+kUVUdvejxWbLB1c=", + "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": "2.4.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz", - "integrity": "sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.1.tgz", + "integrity": "sha512-TGHFeZEZMnv+gBFRfjAcxL5bPHrsGKtnb4qsFAws7/vlh+QfwAaySIw4AXP9ZskTTh5GWu3FLuJhsWVdiJPGvg==", "dev": true, "requires": { "graceful-fs": "^4.1.11", @@ -21611,25 +21038,40 @@ "version": "6.1.4", "resolved": "https://registry.npmjs.org/ws/-/ws-6.1.4.tgz", "integrity": "sha512-eqZfL+NE/YQc1/ZynhojeV8q+H050oR8AZ2uIev7RU10svA9ZnJUddHcOUZTJLinZ9yEfdA2kSATS2qZK5fhJA==", + "dev": true, "requires": { "async-limiter": "~1.0.0" } }, - "xml-name-validator": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-2.0.1.tgz", - "integrity": "sha1-TYuPHszTQZqjYgYb7O9RXh5VljU=" + "ws-heartbeat": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/ws-heartbeat/-/ws-heartbeat-1.2.0.tgz", + "integrity": "sha512-HlN5j2LEFU5O3onX/poHEEwOduF4QYPWrY956CYe+nJQP4tU7aAM+8KciNFlZ1wDEX1/ZnLFP3QNMqnTgMmBkw==", + "requires": { + "ws": "7" + }, + "dependencies": { + "ws": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.1.tgz", + "integrity": "sha512-pTsP8UAfhy3sk1lSk/O/s4tjD0CRwvMnzvwr4OKGX7ZvqZtUyx4KIJB5JWbkykPoc55tixMGgTNoh3k4FkNGFQ==" + } + } }, - "xmlhttprequest-ssl": { - "version": "1.5.5", - "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.5.tgz", - "integrity": "sha1-wodrBhaKrcQOV9l+gRkayPQ5iz4=" + "xmlchars": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", + "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", + "dev": true }, "xregexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/xregexp/-/xregexp-4.0.0.tgz", - "integrity": "sha512-PHyM+sQouu7xspQQwELlGwwd05mXUFqwFYfqPO0cC7x4fxyHnnuetmQr6CjJiafIDoH4MogHb9dOoJzR/Y4rFg==", - "dev": true + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/xregexp/-/xregexp-4.3.0.tgz", + "integrity": "sha512-7jXDIFXh5yJ/orPn4SXjuVrWWoi4Cr8jfV1eHv9CixKSbU+jY4mxfrBwAuDvupPNKpMUY+FeIqsVw/JLT9+B8g==", + "dev": true, + "requires": { + "@babel/runtime-corejs3": "^7.8.3" + } }, "xtend": { "version": "4.0.2", @@ -21638,19 +21080,28 @@ "dev": true }, "y18n": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.1.tgz", - "integrity": "sha512-wNcy4NvjMYL8gogWWYAO7ZFWFfHcbdbE57tZO8e4cbpj8tfUcwrwqSl3ad8HxpYWCdXcJUCeKKZS62Av1affwQ==" + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", + "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==", + "dev": true }, "yallist": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=" + "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", + "dev": true + }, + "yaml": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.0.tgz", + "integrity": "sha512-yr2icI4glYaNG+KWONODapy2/jDdMSDnrONSjblABjD9B4Z5LgiircSt8m8sRZFNi08kG9Sm0uSHtEmP3zaEGg==", + "dev": true }, "yargs": { "version": "13.3.2", "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", + "dev": true, "requires": { "cliui": "^5.0.0", "find-up": "^3.0.0", @@ -21667,17 +21118,20 @@ "ansi-regex": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==" + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true }, "is-fullwidth-code-point": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "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", @@ -21688,6 +21142,7 @@ "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" } @@ -21698,6 +21153,7 @@ "version": "13.1.2", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", + "dev": true, "requires": { "camelcase": "^5.0.0", "decamelize": "^1.2.0" @@ -21706,28 +21162,11 @@ "camelcase": { "version": "5.3.1", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true } } }, - "yeast": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/yeast/-/yeast-0.1.2.tgz", - "integrity": "sha1-AI4G2AlDIMNy28L47XagymyKxBk=" - }, - "yup": { - "version": "0.27.0", - "resolved": "https://registry.npmjs.org/yup/-/yup-0.27.0.tgz", - "integrity": "sha512-v1yFnE4+u9za42gG/b/081E7uNW9mUj3qtkmelLbW5YPROZzSH/KUUyJu9Wt8vxFJcT9otL/eZopS0YK1L5yPQ==", - "requires": { - "@babel/runtime": "^7.0.0", - "fn-name": "~2.0.1", - "lodash": "^4.17.11", - "property-expr": "^1.5.0", - "synchronous-promise": "^2.0.6", - "toposort": "^2.0.2" - } - }, "zscroller": { "version": "0.4.8", "resolved": "https://registry.npmjs.org/zscroller/-/zscroller-0.4.8.tgz", diff --git a/web/package.json b/web/package.json index 6af8765405..bfae29c251 100644 --- a/web/package.json +++ b/web/package.json @@ -1,53 +1,58 @@ { "name": "hollaex-kit", - "version": "1.5.15", + "version": "2.0.0", "private": true, "dependencies": { + "@ant-design/compatible": "1.0.5", + "@ant-design/icons": "4.2.2", "@material/button": "0.7.0", - "antd": "3.21.4", + "antd": "4.6.2", "antd-mobile": "2.2.3", "awesome-phonenumber": "2.43.0", "axios": "0.21.1", "babel-polyfill": "6.26.0", "bchaddrjs": "0.3.2", - "bitcoin-address-validation": "0.2.7", "bluebird": "3.5.5", "classnames": "2.2.6", + "color": "3.1.3", "country-data": "0.0.31", "d3-axis": "1.0.12", "d3-scale": "2.2.2", "d3-selection": "1.4.0", - "d3-time": "1.0.11", "draft-js": "0.11.5", "draftjs-to-html": "0.9.1", "emoji-mart": "2.11.1", "flag-icon-css": "3.3.0", - "husky": "1.3.1", + "flat": "5.0.2", + "highcharts": "8.2.2", + "highcharts-react-official": "3.0.0", + "html-to-draftjs": "1.5.0", "jwt-decode": "2.2.0", "keycode": "2.2.0", - "lint-staged": "8.2.1", + "lodash.debounce": "4.0.8", + "lodash.isequal": "4.5.0", + "lodash.merge": "4.6.2", "mathjs": "5.10.3", "mobile-detect": "1.4.2", "moment": "2.24.0", "moment-jalaali": "0.7.2", "moment-timezone": "0.5.21", - "node-sass-chokidar": "1.3.4", "npm-run-all": "4.1.5", "numbro": "1.11.1", "prop-types": "15.7.2", "qrcode.react": "0.9.3", "query-string": "5.1.1", + "rc-color-picker": "1.2.6", "rc-tooltip": "3.7.3", - "react": "16.8.6", - "react-addons-shallow-compare": "15.6.2", + "react": "16.13.1", + "react-alice-carousel": "1.19.3", "react-copy-to-clipboard": "5.0.1", "react-csv": "1.1.1", "react-custom-scrollbars": "4.2.1", "react-dates": "20.1.0", "react-device-detect": "1.6.2", - "react-dom": "16.8.6", + "react-dom": "16.13.1", "react-draft-wysiwyg": "1.14.5", - "react-draggable": "3.2.1", "react-event-listener": "0.6.6", "react-expanding-textarea": "0.2.0", "react-ga": "2.5.7", @@ -56,17 +61,14 @@ "react-localization": "0.1.10", "react-modal": "3.8.1", "react-moment": "0.9.2", - "react-numeric-input": "2.2.3", "react-recaptcha-v3": "2.0.1", - "react-rectangle": "1.3.3", "react-redux": "6.0.1", "react-router": "3.2.1", - "react-router-redux": "4.0.8", - "react-snapshot": "1.3.0", "react-sortable-hoc": "1.10.1", "react-sparklines": "1.7.0", "react-stockcharts": "0.7.8", - "react-svg": "2.2.18", + "react-svg": "11.2.2", + "react-transition-group": "4.4.1", "react-truncate-markup": "3.0.1", "redux": "4.0.1", "redux-form": "8.1.0", @@ -75,23 +77,37 @@ "redux-promise-middleware": "6.1.0", "redux-thunk": "2.3.0", "reselect": "4.0.0", - "socket.io-client": "2.2.0", + "rsvp": "4.8.5", "universal-cookie": "4.0.2", + "validate-color": "2.1.0", "validator": "10.11.0", - "wallet-address-validator": "0.2.4" + "wallet-address-validator": "0.2.4", + "ws-heartbeat": "1.2.0" }, "devDependencies": { - "prettier": "1.16.4", - "react-scripts": "2.1.8" + "cpy-cli": "3.1.1", + "husky": "4.3.0", + "lint-staged": "10.5.1", + "node-sass-chokidar": "1.5.0", + "prettier": "2.1.2", + "react-scripts": "3.4.3", + "rimraf": "3.0.2", + "surge": "0.21.6" }, "scripts": { - "prettier-commit": "lint-staged", - "prettier": "./node_modules/prettier/bin-prettier.js --write \"src/**/*.{js,json,css,scss,md}\"", + "prettify-project": "prettier --write .", + "prettify": "prettier --write", "build-css": "node-sass-chokidar src/ -o src/", "watch-css": "npm run build-css && node-sass-chokidar src/ -o src/ --watch --recursive", + "copy-cname": "cpy CNAME build/", + "remove-build": "rimraf ./build", "start-js": "react-scripts --max_old_space_size=3072 start", - "start": "npm-run-all -p watch-css start-js", + "start": "npm install && npm-run-all -p watch-css start-js", "build": "npm run build-css && react-scripts --max_old_space_size=3072 build", + "pre-build": "npm run remove-build && npm install", + "build:demo": "REACT_APP_SERVER_ENDPOINT=https://api.sandbox.hollaex.com npm run build", + "publish:demo": "surge build", + "check-build": "npm run pre-build && npm run build:demo && npm run copy-cname && npm run publish:demo", "test": "react-scripts test --env=jsdom", "eject": "react-scripts eject" }, @@ -102,18 +118,14 @@ "url": "git+https://github.com/bitholla/hollaex.git" }, "homepage": "https://hollaex.com", - "prettier": { - "tabWidth": 2, - "useTabs": true, - "semi": true, - "singleQuote": true, - "bracketSpacing": true, - "arrowParens": "always" + "husky": { + "hooks": { + "pre-commit": "lint-staged" + } }, "lint-staged": { "*.{js,json,css,scss,md}": [ - "prettier --write", - "git add" + "npm run prettify" ] }, "author": "bitHolla Inc", diff --git a/web/public/assets/HollaEx-dark-theme.jpg b/web/public/assets/HollaEx-dark-theme.jpg deleted file mode 100644 index 86f072c956..0000000000 Binary files a/web/public/assets/HollaEx-dark-theme.jpg and /dev/null differ diff --git a/web/public/assets/acounts/account-icons-05.svg b/web/public/assets/acounts/account-icons-05.svg deleted file mode 100644 index 153fa11ef8..0000000000 --- a/web/public/assets/acounts/account-icons-05.svg +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - diff --git a/web/public/assets/acounts/account-icons-06.svg b/web/public/assets/acounts/account-icons-06.svg deleted file mode 100644 index b630681e69..0000000000 --- a/web/public/assets/acounts/account-icons-06.svg +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - diff --git a/web/public/assets/acounts/account-icons-09.svg b/web/public/assets/acounts/account-icons-09.svg index 0c03fadef0..a2fae6d722 100644 --- a/web/public/assets/acounts/account-icons-09.svg +++ b/web/public/assets/acounts/account-icons-09.svg @@ -3,17 +3,17 @@ - - - - + + + diff --git a/web/public/assets/acounts/account-icons-10.svg b/web/public/assets/acounts/account-icons-10.svg index cbd09743ff..8c2dceb1a7 100644 --- a/web/public/assets/acounts/account-icons-10.svg +++ b/web/public/assets/acounts/account-icons-10.svg @@ -2,7 +2,7 @@ - + diff --git a/web/public/assets/acounts/account-icons-11.svg b/web/public/assets/acounts/account-icons-11.svg index d2cc98c39b..c43b59b74d 100644 --- a/web/public/assets/acounts/account-icons-11.svg +++ b/web/public/assets/acounts/account-icons-11.svg @@ -2,7 +2,7 @@ - + diff --git a/web/public/assets/acounts/account-icons-22.svg b/web/public/assets/acounts/account-icons-22.svg deleted file mode 100644 index 1bfc58463e..0000000000 --- a/web/public/assets/acounts/account-icons-22.svg +++ /dev/null @@ -1,29 +0,0 @@ - - - - - - - - - - - - - - - diff --git a/web/public/assets/acounts/account-icons-25.svg b/web/public/assets/acounts/account-icons-25.svg deleted file mode 100644 index e304c4e910..0000000000 --- a/web/public/assets/acounts/account-icons-25.svg +++ /dev/null @@ -1,21 +0,0 @@ - - - - - - - - - - - - - - - - - diff --git a/web/public/assets/acounts/account-icons-26.svg b/web/public/assets/acounts/account-icons-26.svg deleted file mode 100644 index 91ca89c4f8..0000000000 --- a/web/public/assets/acounts/account-icons-26.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - - - diff --git a/web/public/assets/acounts/account-icons-27.svg b/web/public/assets/acounts/account-icons-27.svg deleted file mode 100644 index 93c4e3ea44..0000000000 --- a/web/public/assets/acounts/account-icons-27.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - - - diff --git a/web/public/assets/audio/cancel_order.wav b/web/public/assets/audio/cancel_order.wav index ff4a271322..ba6e52b789 100644 Binary files a/web/public/assets/audio/cancel_order.wav and b/web/public/assets/audio/cancel_order.wav differ diff --git a/web/public/assets/audio/order-filled.wav b/web/public/assets/audio/order-filled.wav index 3c6ee65563..9a628d433c 100644 Binary files a/web/public/assets/audio/order-filled.wav and b/web/public/assets/audio/order-filled.wav differ diff --git a/web/public/assets/audio/orderbook-limit-order.wav b/web/public/assets/audio/orderbook-limit-order.wav index 7a296ab3f1..7070e0cb20 100644 Binary files a/web/public/assets/audio/orderbook-limit-order.wav and b/web/public/assets/audio/orderbook-limit-order.wav differ diff --git a/web/public/assets/audio/orderbook_field_update.wav b/web/public/assets/audio/orderbook_field_update.wav index b61dd505d4..c50fd8bc17 100644 Binary files a/web/public/assets/audio/orderbook_field_update.wav and b/web/public/assets/audio/orderbook_field_update.wav differ diff --git a/web/public/assets/audio/part-fill.wav b/web/public/assets/audio/part-fill.wav index 89c42e0d03..424186da71 100644 Binary files a/web/public/assets/audio/part-fill.wav and b/web/public/assets/audio/part-fill.wav differ diff --git a/web/public/assets/audio/quick-trade-complete.wav b/web/public/assets/audio/quick-trade-complete.wav index c9531ab269..b23adc55d9 100644 Binary files a/web/public/assets/audio/quick-trade-complete.wav and b/web/public/assets/audio/quick-trade-complete.wav differ diff --git a/web/public/assets/audio/review-quick-trade-order.wav b/web/public/assets/audio/review-quick-trade-order.wav index 227173ae1e..cf4fa79f51 100644 Binary files a/web/public/assets/audio/review-quick-trade-order.wav and b/web/public/assets/audio/review-quick-trade-order.wav differ diff --git a/web/public/assets/icons/2fa-active.svg b/web/public/assets/icons/2fa-active.svg new file mode 100644 index 0000000000..4edc75fcb3 --- /dev/null +++ b/web/public/assets/icons/2fa-active.svg @@ -0,0 +1,15 @@ + + + + + + + + diff --git a/web/public/assets/icons/2fa-deactivated.svg b/web/public/assets/icons/2fa-deactivated.svg new file mode 100644 index 0000000000..16a5996654 --- /dev/null +++ b/web/public/assets/icons/2fa-deactivated.svg @@ -0,0 +1,14 @@ + + + + + + + + diff --git a/web/public/assets/icons/active-trade-dark.svg b/web/public/assets/icons/active-trade-dark.svg deleted file mode 100644 index 00ccf83a74..0000000000 --- a/web/public/assets/icons/active-trade-dark.svg +++ /dev/null @@ -1,39 +0,0 @@ - - - - - - - - - - - - diff --git a/web/public/assets/icons/active-trade-light.svg b/web/public/assets/icons/active-trade-light.svg deleted file mode 100644 index 39f01e08be..0000000000 --- a/web/public/assets/icons/active-trade-light.svg +++ /dev/null @@ -1,39 +0,0 @@ - - - - - - - - - - - - diff --git a/web/public/assets/icons/bch-icon-nav.svg b/web/public/assets/icons/bch-icon-nav.svg deleted file mode 100644 index 995509eac5..0000000000 --- a/web/public/assets/icons/bch-icon-nav.svg +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - - - - diff --git a/web/public/assets/icons/btc-icon-dark-01.svg b/web/public/assets/icons/btc-icon-dark-01.svg deleted file mode 100644 index fe02f68f87..0000000000 --- a/web/public/assets/icons/btc-icon-dark-01.svg +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - - - - - - diff --git a/web/public/assets/icons/compute-play-color.svg b/web/public/assets/icons/compute-play-color.svg deleted file mode 100644 index a49fcdda2b..0000000000 --- a/web/public/assets/icons/compute-play-color.svg +++ /dev/null @@ -1,35 +0,0 @@ - - - - - - - - - - diff --git a/web/public/assets/icons/edit-string.svg b/web/public/assets/icons/edit-string.svg new file mode 100644 index 0000000000..78909c0102 --- /dev/null +++ b/web/public/assets/icons/edit-string.svg @@ -0,0 +1,17 @@ + + + + + + + + + + diff --git a/web/public/assets/icons/eth-icon-dark-01.svg b/web/public/assets/icons/eth-icon-dark-01.svg deleted file mode 100644 index 51115140c8..0000000000 --- a/web/public/assets/icons/eth-icon-dark-01.svg +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - - - - diff --git a/web/public/assets/icons/hex-pattern-icon-05.svg b/web/public/assets/icons/hex-pattern-icon-05.svg new file mode 100644 index 0000000000..4a57edd3f8 --- /dev/null +++ b/web/public/assets/icons/hex-pattern-icon-05.svg @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/web/public/assets/icons/missing-coin-dark.svg b/web/public/assets/icons/missing-coin-dark.svg deleted file mode 100644 index dbdd39ee0e..0000000000 --- a/web/public/assets/icons/missing-coin-dark.svg +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - - - - - diff --git a/web/public/assets/icons/question-mark-color.svg b/web/public/assets/icons/question-mark-color.svg deleted file mode 100644 index b0c78e8277..0000000000 --- a/web/public/assets/icons/question-mark-color.svg +++ /dev/null @@ -1,34 +0,0 @@ - - - - - - - - - - diff --git a/web/public/assets/icons/quick-trade-insufficient-funds.svg b/web/public/assets/icons/quick-trade-insufficient-funds.svg new file mode 100644 index 0000000000..ce0fc96334 --- /dev/null +++ b/web/public/assets/icons/quick-trade-insufficient-funds.svg @@ -0,0 +1,16 @@ + + + + + + + diff --git a/web/public/assets/icons/quick-trade-success-coin-pile.svg b/web/public/assets/icons/quick-trade-success-coin-pile.svg new file mode 100644 index 0000000000..7d344a185a --- /dev/null +++ b/web/public/assets/icons/quick-trade-success-coin-pile.svg @@ -0,0 +1,36 @@ + + + + + diff --git a/web/public/assets/icons/spanner.svg b/web/public/assets/icons/spanner.svg deleted file mode 100644 index 2b9610d372..0000000000 --- a/web/public/assets/icons/spanner.svg +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - diff --git a/web/public/assets/icons/telegram-color.svg b/web/public/assets/icons/telegram-color.svg deleted file mode 100644 index c89f642d2e..0000000000 --- a/web/public/assets/icons/telegram-color.svg +++ /dev/null @@ -1,48 +0,0 @@ - - - - - - - - - - - diff --git a/web/public/assets/icons/trade-history-dark.svg b/web/public/assets/icons/trade-history-dark.svg deleted file mode 100644 index df39f58063..0000000000 --- a/web/public/assets/icons/trade-history-dark.svg +++ /dev/null @@ -1,41 +0,0 @@ - - - - - - - - - - - diff --git a/web/public/assets/icons/trade-history-light.svg b/web/public/assets/icons/trade-history-light.svg deleted file mode 100644 index 71c74c66a9..0000000000 --- a/web/public/assets/icons/trade-history-light.svg +++ /dev/null @@ -1,41 +0,0 @@ - - - - - - - - - - - diff --git a/web/public/assets/icons/upload-graphic-edit.svg b/web/public/assets/icons/upload-graphic-edit.svg new file mode 100644 index 0000000000..2ea53f1091 --- /dev/null +++ b/web/public/assets/icons/upload-graphic-edit.svg @@ -0,0 +1,15 @@ + + + + + + + + diff --git a/web/public/assets/icons/xht-icon-dark.svg b/web/public/assets/icons/xht-icon-dark.svg deleted file mode 100644 index f420f57237..0000000000 --- a/web/public/assets/icons/xht-icon-dark.svg +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - - - diff --git a/web/public/assets/icons/xmr-icon-dark.svg b/web/public/assets/icons/xmr-icon-dark.svg deleted file mode 100644 index 700a533497..0000000000 --- a/web/public/assets/icons/xmr-icon-dark.svg +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - - - - - - - diff --git a/web/public/assets/images/2fa-01.svg b/web/public/assets/images/2fa-01.svg new file mode 100644 index 0000000000..0b372d0edd --- /dev/null +++ b/web/public/assets/images/2fa-01.svg @@ -0,0 +1,20 @@ + + + + + + + + + + diff --git a/web/public/assets/images/762.gif b/web/public/assets/images/762.gif new file mode 100644 index 0000000000..a29b254edc Binary files /dev/null and b/web/public/assets/images/762.gif differ diff --git a/web/public/assets/images/D-W-Success.svg b/web/public/assets/images/D-W-Success.svg deleted file mode 100644 index e9307d6f9f..0000000000 --- a/web/public/assets/images/D-W-Success.svg +++ /dev/null @@ -1,1121 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -? - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/web/public/assets/images/Incoming-bitcoin.svg b/web/public/assets/images/Incoming-bitcoin.svg deleted file mode 100644 index 482e421382..0000000000 --- a/web/public/assets/images/Incoming-bitcoin.svg +++ /dev/null @@ -1,36 +0,0 @@ - - - - - - - - - - - - - - - - - - - - diff --git a/web/public/assets/images/KYC-01.svg b/web/public/assets/images/KYC-01.svg new file mode 100644 index 0000000000..6f30a72f0f --- /dev/null +++ b/web/public/assets/images/KYC-01.svg @@ -0,0 +1,1139 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/web/public/assets/images/Light-theme-candles.svg b/web/public/assets/images/Light-theme-candles.svg new file mode 100644 index 0000000000..3677329ec2 --- /dev/null +++ b/web/public/assets/images/Light-theme-candles.svg @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/web/public/assets/images/account_2-inactive.svg b/web/public/assets/images/account_2-inactive.svg index 7462687f34..7e97eefe36 100644 --- a/web/public/assets/images/account_2-inactive.svg +++ b/web/public/assets/images/account_2-inactive.svg @@ -3,9 +3,9 @@ - diff --git a/web/public/assets/images/add-tab.svg b/web/public/assets/images/add-tab.svg deleted file mode 100644 index 032fdced08..0000000000 --- a/web/public/assets/images/add-tab.svg +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - diff --git a/web/public/assets/images/add-third-party-plugin-black-01.svg b/web/public/assets/images/add-third-party-plugin-black-01.svg new file mode 100644 index 0000000000..26042b6538 --- /dev/null +++ b/web/public/assets/images/add-third-party-plugin-black-01.svg @@ -0,0 +1,20 @@ + + + + + + + + + + + diff --git a/web/public/assets/images/wallet.svg b/web/public/assets/images/admin-user-wallet.svg similarity index 52% rename from web/public/assets/images/wallet.svg rename to web/public/assets/images/admin-user-wallet.svg index ef7ed907f5..2198bef956 100644 --- a/web/public/assets/images/wallet.svg +++ b/web/public/assets/images/admin-user-wallet.svg @@ -1,19 +1,15 @@ - - - - - - - - - - + + + + + + + + + diff --git a/web/public/assets/images/all-seeing-eye-admin-role-blue.png b/web/public/assets/images/all-seeing-eye-admin-role-blue.png new file mode 100644 index 0000000000..94b131dce1 Binary files /dev/null and b/web/public/assets/images/all-seeing-eye-admin-role-blue.png differ diff --git a/web/public/assets/images/annoucement.svg b/web/public/assets/images/annoucement.svg deleted file mode 100644 index ae635bb83a..0000000000 --- a/web/public/assets/images/annoucement.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - - - diff --git a/web/public/assets/images/api-key-active.svg b/web/public/assets/images/api-key-active.svg index 71bb415977..ca6dc5f616 100644 --- a/web/public/assets/images/api-key-active.svg +++ b/web/public/assets/images/api-key-active.svg @@ -3,12 +3,12 @@ - - - - - - - - - - - - - - - - diff --git a/web/public/assets/images/api-key-generate-dark.svg b/web/public/assets/images/api-key-generate-dark.svg deleted file mode 100644 index b19fdb4b55..0000000000 --- a/web/public/assets/images/api-key-generate-dark.svg +++ /dev/null @@ -1,39 +0,0 @@ - - - - - - - - - - - - - - \ No newline at end of file diff --git a/web/public/assets/images/api-key-revoked.svg b/web/public/assets/images/api-key-revoked.svg index cd74e91325..e3e609e7bf 100644 --- a/web/public/assets/images/api-key-revoked.svg +++ b/web/public/assets/images/api-key-revoked.svg @@ -2,7 +2,7 @@ - + - - - -> - - diff --git a/web/public/assets/images/bank-inactive.svg b/web/public/assets/images/bank-inactive.svg deleted file mode 100644 index 99fd47f7e5..0000000000 --- a/web/public/assets/images/bank-inactive.svg +++ /dev/null @@ -1,21 +0,0 @@ - - - - - - - - - - - - - - - diff --git a/web/public/assets/images/bank.svg b/web/public/assets/images/bank.svg deleted file mode 100644 index 728adf0b63..0000000000 --- a/web/public/assets/images/bank.svg +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - - - - - - - - diff --git a/web/public/assets/images/black-leviathan-trader.svg b/web/public/assets/images/black-leviathan-trader.svg deleted file mode 100644 index 98ae25e820..0000000000 --- a/web/public/assets/images/black-leviathan-trader.svg +++ /dev/null @@ -1,36 +0,0 @@ - - - - - - - - - - - diff --git a/web/public/assets/images/cancel-cross-inactive.svg b/web/public/assets/images/cancel-cross-inactive.svg deleted file mode 100644 index 610149375b..0000000000 --- a/web/public/assets/images/cancel-cross-inactive.svg +++ /dev/null @@ -1,24 +0,0 @@ - - - - - - - - - - - - - diff --git a/web/public/assets/images/chat-feature-icon.svg b/web/public/assets/images/chat-feature-icon.svg new file mode 100644 index 0000000000..06fa5d2cad --- /dev/null +++ b/web/public/assets/images/chat-feature-icon.svg @@ -0,0 +1,18 @@ + + + + + + + + + + + + diff --git a/web/public/assets/images/chat-plugin-thumbnail.png b/web/public/assets/images/chat-plugin-thumbnail.png new file mode 100644 index 0000000000..cd353eba03 Binary files /dev/null and b/web/public/assets/images/chat-plugin-thumbnail.png differ diff --git a/web/public/assets/images/chat-preview-image-plugin.png b/web/public/assets/images/chat-preview-image-plugin.png new file mode 100644 index 0000000000..80e0b47924 Binary files /dev/null and b/web/public/assets/images/chat-preview-image-plugin.png differ diff --git a/web/public/assets/images/chat-troll-box-plugins.png b/web/public/assets/images/chat-troll-box-plugins.png new file mode 100644 index 0000000000..f375b7056c Binary files /dev/null and b/web/public/assets/images/chat-troll-box-plugins.png differ diff --git a/web/public/assets/images/check-order-popup-01.svg b/web/public/assets/images/check-order-popup-01.svg index 182eaf578f..4aa94401f6 100644 --- a/web/public/assets/images/check-order-popup-01.svg +++ b/web/public/assets/images/check-order-popup-01.svg @@ -2,7 +2,7 @@ - + - - - - - - - - - - - - - - - - - diff --git a/web/public/assets/images/coin-withdraw-tom.svg b/web/public/assets/images/coin-withdraw-tom.svg deleted file mode 100644 index fd895e8c4d..0000000000 --- a/web/public/assets/images/coin-withdraw-tom.svg +++ /dev/null @@ -1,37 +0,0 @@ - - - - - - - T - - - - - - - - - - - diff --git a/web/public/assets/images/communications-role-seal-02.svg b/web/public/assets/images/communications-role-seal-02.svg new file mode 100644 index 0000000000..7c4149d474 --- /dev/null +++ b/web/public/assets/images/communications-role-seal-02.svg @@ -0,0 +1,176 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/web/public/assets/images/cunning-blue-kraken-trader.svg b/web/public/assets/images/cunning-blue-kraken-trader.svg deleted file mode 100644 index 75b1623810..0000000000 --- a/web/public/assets/images/cunning-blue-kraken-trader.svg +++ /dev/null @@ -1,58 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/web/public/assets/images/customize.svg b/web/public/assets/images/customize.svg new file mode 100644 index 0000000000..38cc906bd4 --- /dev/null +++ b/web/public/assets/images/customize.svg @@ -0,0 +1,30 @@ + + + + + + + + + + + + + diff --git a/web/public/assets/images/dark-Orderbook-scrolling-01.svg b/web/public/assets/images/dark-Orderbook-scrolling-01.svg index f05a20ea04..e85e37a972 100644 --- a/web/public/assets/images/dark-Orderbook-scrolling-01.svg +++ b/web/public/assets/images/dark-Orderbook-scrolling-01.svg @@ -2,7 +2,10 @@ - + .check-st{fill:#010101;} + + diff --git a/web/public/assets/images/default-plugin-preview-image.png b/web/public/assets/images/default-plugin-preview-image.png new file mode 100644 index 0000000000..47af2e833b Binary files /dev/null and b/web/public/assets/images/default-plugin-preview-image.png differ diff --git a/web/public/assets/images/default-plugin-thumbnail.png b/web/public/assets/images/default-plugin-thumbnail.png new file mode 100644 index 0000000000..5dda721dd7 Binary files /dev/null and b/web/public/assets/images/default-plugin-thumbnail.png differ diff --git a/web/public/assets/images/deposit-bitcoin.svg b/web/public/assets/images/deposit-bitcoin.svg deleted file mode 100644 index e5eb8a818e..0000000000 --- a/web/public/assets/images/deposit-bitcoin.svg +++ /dev/null @@ -1,34 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - diff --git a/web/public/assets/images/deposit-history-grey.svg b/web/public/assets/images/deposit-history-grey.svg deleted file mode 100644 index d4b0d49b74..0000000000 --- a/web/public/assets/images/deposit-history-grey.svg +++ /dev/null @@ -1,37 +0,0 @@ - - - - - - - - - - - - - - - - - diff --git a/web/public/assets/images/deposit-tier-section.svg b/web/public/assets/images/deposit-tier-section.svg new file mode 100644 index 0000000000..92d3b2367b --- /dev/null +++ b/web/public/assets/images/deposit-tier-section.svg @@ -0,0 +1,13 @@ + + + + + + + + + diff --git a/web/public/assets/images/doc-inactive.svg b/web/public/assets/images/doc-inactive.svg deleted file mode 100644 index a22f57cd70..0000000000 --- a/web/public/assets/images/doc-inactive.svg +++ /dev/null @@ -1,39 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/web/public/assets/images/doc.svg b/web/public/assets/images/doc.svg deleted file mode 100644 index e00b6095fa..0000000000 --- a/web/public/assets/images/doc.svg +++ /dev/null @@ -1,39 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/web/public/assets/images/dotted-grip-chat-repeat-pattern.svg b/web/public/assets/images/dotted-grip-chat-repeat-pattern.svg deleted file mode 100644 index 62ed6ac31c..0000000000 --- a/web/public/assets/images/dotted-grip-chat-repeat-pattern.svg +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - diff --git a/web/public/assets/images/double-arrow.svg b/web/public/assets/images/double-arrow.svg deleted file mode 100644 index 50d6a0974d..0000000000 --- a/web/public/assets/images/double-arrow.svg +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - diff --git a/web/public/assets/images/down-arrow-home.svg b/web/public/assets/images/down-arrow-home.svg deleted file mode 100644 index 72dab18005..0000000000 --- a/web/public/assets/images/down-arrow-home.svg +++ /dev/null @@ -1,6 +0,0 @@ - - - - - diff --git a/web/public/assets/images/email-inactive.svg b/web/public/assets/images/email-inactive.svg deleted file mode 100644 index 4807f71834..0000000000 --- a/web/public/assets/images/email-inactive.svg +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - diff --git a/web/public/assets/images/email.svg b/web/public/assets/images/email.svg deleted file mode 100644 index 7692a2d4c1..0000000000 --- a/web/public/assets/images/email.svg +++ /dev/null @@ -1,28 +0,0 @@ - - - - - - - - - - - - - - - diff --git a/web/public/assets/images/email_2.svg b/web/public/assets/images/email_2.svg deleted file mode 100644 index 2a55c40548..0000000000 --- a/web/public/assets/images/email_2.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - - - diff --git a/web/public/assets/images/exchange-support-role-01.svg b/web/public/assets/images/exchange-support-role-01.svg new file mode 100644 index 0000000000..839995660a --- /dev/null +++ b/web/public/assets/images/exchange-support-role-01.svg @@ -0,0 +1,736 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/web/public/assets/images/f2fa-pin.svg b/web/public/assets/images/f2fa-pin.svg deleted file mode 100644 index 5c174d8d65..0000000000 --- a/web/public/assets/images/f2fa-pin.svg +++ /dev/null @@ -1,36 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - diff --git a/web/public/assets/images/features-data-icons.svg b/web/public/assets/images/features-data-icons.svg index 539b66f5a3..6854bfb572 100644 --- a/web/public/assets/images/features-data-icons.svg +++ b/web/public/assets/images/features-data-icons.svg @@ -2,7 +2,7 @@ - + - + - - + diff --git a/web/public/assets/images/features-payment-card-icons.svg b/web/public/assets/images/features-payment-card-icons.svg index 76baad0574..bba58390f0 100644 --- a/web/public/assets/images/features-payment-card-icons.svg +++ b/web/public/assets/images/features-payment-card-icons.svg @@ -3,10 +3,10 @@ - - diff --git a/web/public/assets/images/features-pro-trade-icons.svg b/web/public/assets/images/features-pro-trade-icons.svg index fa3bafb600..e4d64e737a 100644 --- a/web/public/assets/images/features-pro-trade-icons.svg +++ b/web/public/assets/images/features-pro-trade-icons.svg @@ -2,7 +2,7 @@ - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/web/public/assets/images/fiat-wallet.svg b/web/public/assets/images/fiat-wallet.svg deleted file mode 100644 index 675da9f1b0..0000000000 --- a/web/public/assets/images/fiat-wallet.svg +++ /dev/null @@ -1,54 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/web/public/assets/images/fin-chat-special.svg b/web/public/assets/images/fin-chat-special.svg deleted file mode 100644 index c015efa94d..0000000000 --- a/web/public/assets/images/fin-chat-special.svg +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - diff --git a/web/public/assets/images/finger-print.svg b/web/public/assets/images/finger-print.svg deleted file mode 100644 index 675c08eb24..0000000000 --- a/web/public/assets/images/finger-print.svg +++ /dev/null @@ -1,43 +0,0 @@ - - - - - - - - - - - - - - - - - - diff --git a/web/public/assets/images/flag.svg b/web/public/assets/images/flag.svg new file mode 100644 index 0000000000..60d9bb154c --- /dev/null +++ b/web/public/assets/images/flag.svg @@ -0,0 +1,12 @@ + + + + + + diff --git a/web/public/assets/images/freeze.svg b/web/public/assets/images/freeze.svg new file mode 100644 index 0000000000..2a4aad8dc9 --- /dev/null +++ b/web/public/assets/images/freeze.svg @@ -0,0 +1,30 @@ + + + + + + diff --git a/web/public/assets/images/gear.svg b/web/public/assets/images/gear.svg deleted file mode 100644 index 1b9ebfac32..0000000000 --- a/web/public/assets/images/gear.svg +++ /dev/null @@ -1,29 +0,0 @@ - - - - - - - - - - - - - - - - diff --git a/web/public/assets/images/general-setup.svg b/web/public/assets/images/general-setup.svg new file mode 100644 index 0000000000..369d9a5d3f --- /dev/null +++ b/web/public/assets/images/general-setup.svg @@ -0,0 +1,352 @@ + + + + + + + + + + + + diff --git a/web/public/assets/images/help-popup-description.png b/web/public/assets/images/help-popup-description.png new file mode 100644 index 0000000000..c48ca9a2c2 Binary files /dev/null and b/web/public/assets/images/help-popup-description.png differ diff --git a/web/public/assets/images/help-popup-footer.png b/web/public/assets/images/help-popup-footer.png new file mode 100644 index 0000000000..65345f3705 Binary files /dev/null and b/web/public/assets/images/help-popup-footer.png differ diff --git a/web/public/assets/images/help.svg b/web/public/assets/images/help.svg deleted file mode 100644 index c137397458..0000000000 --- a/web/public/assets/images/help.svg +++ /dev/null @@ -1,21 +0,0 @@ - - - - - - - - - - - diff --git a/web/public/assets/images/hollaex-icon-01.svg b/web/public/assets/images/hollaex-icon-01.svg new file mode 100644 index 0000000000..bd281e738a --- /dev/null +++ b/web/public/assets/images/hollaex-icon-01.svg @@ -0,0 +1,6 @@ + + + + + diff --git a/web/public/assets/images/home-active.svg b/web/public/assets/images/home-active.svg deleted file mode 100644 index 4aa7732104..0000000000 --- a/web/public/assets/images/home-active.svg +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - diff --git a/web/public/assets/images/home-tab-inactive.svg b/web/public/assets/images/home-tab-inactive.svg deleted file mode 100644 index e6d3309d7c..0000000000 --- a/web/public/assets/images/home-tab-inactive.svg +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - diff --git a/web/public/assets/images/id.svg b/web/public/assets/images/id.svg deleted file mode 100644 index f605a66bf3..0000000000 --- a/web/public/assets/images/id.svg +++ /dev/null @@ -1,32 +0,0 @@ - - - - - - - - - - - - - - - - - - - diff --git a/web/public/assets/images/id_2-inactive.svg b/web/public/assets/images/id_2-inactive.svg deleted file mode 100644 index 189a4d86c0..0000000000 --- a/web/public/assets/images/id_2-inactive.svg +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - - diff --git a/web/public/assets/images/id_2.svg b/web/public/assets/images/id_2.svg deleted file mode 100644 index def71d60bc..0000000000 --- a/web/public/assets/images/id_2.svg +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - - - diff --git a/web/public/assets/images/initialize-quick-trade.svg b/web/public/assets/images/initialize-quick-trade.svg new file mode 100644 index 0000000000..e091630ddb --- /dev/null +++ b/web/public/assets/images/initialize-quick-trade.svg @@ -0,0 +1,43 @@ + + + + + + + + + + + + + + + + + diff --git a/web/public/assets/images/item-options.svg b/web/public/assets/images/item-options.svg index ea31fa7d77..92bed0cbdf 100644 --- a/web/public/assets/images/item-options.svg +++ b/web/public/assets/images/item-options.svg @@ -6,11 +6,11 @@ xml:space="preserve"> - - - diff --git a/web/public/assets/images/kraken-chat-lvl-3.svg b/web/public/assets/images/kraken-chat-lvl-3.svg deleted file mode 100644 index fd698775bb..0000000000 --- a/web/public/assets/images/kraken-chat-lvl-3.svg +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - diff --git a/web/public/assets/images/licence.svg b/web/public/assets/images/licence.svg deleted file mode 100644 index d0b21d5980..0000000000 --- a/web/public/assets/images/licence.svg +++ /dev/null @@ -1,38 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/web/public/assets/images/limit-buy-order-filled-01.svg b/web/public/assets/images/limit-buy-order-filled-01.svg deleted file mode 100644 index d8a81be248..0000000000 --- a/web/public/assets/images/limit-buy-order-filled-01.svg +++ /dev/null @@ -1,24 +0,0 @@ - - - - - - - - - - - - diff --git a/web/public/assets/images/limit-buy-order-icon-01.svg b/web/public/assets/images/limit-buy-order-icon-01.svg deleted file mode 100644 index 435058083c..0000000000 --- a/web/public/assets/images/limit-buy-order-icon-01.svg +++ /dev/null @@ -1,51 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/web/public/assets/images/limit-buy-order-part-filled-01.svg b/web/public/assets/images/limit-buy-order-part-filled-01.svg deleted file mode 100644 index 76c6c708d0..0000000000 --- a/web/public/assets/images/limit-buy-order-part-filled-01.svg +++ /dev/null @@ -1,24 +0,0 @@ - - - - - - - - - - - diff --git a/web/public/assets/images/limit-sell-order-filled-01.svg b/web/public/assets/images/limit-sell-order-filled-01.svg deleted file mode 100644 index ac76ee8d9c..0000000000 --- a/web/public/assets/images/limit-sell-order-filled-01.svg +++ /dev/null @@ -1,24 +0,0 @@ - - - - - - - - - - - - diff --git a/web/public/assets/images/limit-sell-order-icon-01.svg b/web/public/assets/images/limit-sell-order-icon-01.svg deleted file mode 100644 index 9fb10b5a8b..0000000000 --- a/web/public/assets/images/limit-sell-order-icon-01.svg +++ /dev/null @@ -1,51 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/web/public/assets/images/limit-sell-order-part-filled-01.svg b/web/public/assets/images/limit-sell-order-part-filled-01.svg deleted file mode 100644 index da0ecf6f0a..0000000000 --- a/web/public/assets/images/limit-sell-order-part-filled-01.svg +++ /dev/null @@ -1,24 +0,0 @@ - - - - - - - - - - - diff --git a/web/public/assets/images/limits-coin-tiers.svg b/web/public/assets/images/limits-coin-tiers.svg new file mode 100644 index 0000000000..c86ac59bcf --- /dev/null +++ b/web/public/assets/images/limits-coin-tiers.svg @@ -0,0 +1,14 @@ + + + + + diff --git a/web/public/assets/images/limits-pairs-tiers.svg b/web/public/assets/images/limits-pairs-tiers.svg new file mode 100644 index 0000000000..fd0c7053ae --- /dev/null +++ b/web/public/assets/images/limits-pairs-tiers.svg @@ -0,0 +1,27 @@ + + + + + + + + diff --git a/web/public/assets/images/link.svg b/web/public/assets/images/link.svg new file mode 100644 index 0000000000..c99a7b7f9f --- /dev/null +++ b/web/public/assets/images/link.svg @@ -0,0 +1,11 @@ + + + + + diff --git a/web/public/assets/images/liquid.svg b/web/public/assets/images/liquid.svg deleted file mode 100644 index 747471280f..0000000000 --- a/web/public/assets/images/liquid.svg +++ /dev/null @@ -1,31 +0,0 @@ - - - - - - - - - - - - - - - - - - diff --git a/web/public/assets/images/little-red-snapper-trader.svg b/web/public/assets/images/little-red-snapper-trader.svg deleted file mode 100644 index 7ac7207915..0000000000 --- a/web/public/assets/images/little-red-snapper-trader.svg +++ /dev/null @@ -1,43 +0,0 @@ - - - - - - - - - - - - - - diff --git a/web/public/assets/images/logout-arrow-active.svg b/web/public/assets/images/logout-arrow-active.svg deleted file mode 100644 index 57a91a7324..0000000000 --- a/web/public/assets/images/logout-arrow-active.svg +++ /dev/null @@ -1,8 +0,0 @@ - - - - - diff --git a/web/public/assets/images/logout-arrow.svg b/web/public/assets/images/logout-arrow.svg deleted file mode 100644 index b5f3bcdc56..0000000000 --- a/web/public/assets/images/logout-arrow.svg +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - diff --git a/web/public/assets/images/logout-door-active.svg b/web/public/assets/images/logout-door-active.svg deleted file mode 100644 index 0985a3d330..0000000000 --- a/web/public/assets/images/logout-door-active.svg +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - diff --git a/web/public/assets/images/logout-door-inactive.svg b/web/public/assets/images/logout-door-inactive.svg index d47fe4d9a7..05f7cebbd8 100644 --- a/web/public/assets/images/logout-door-inactive.svg +++ b/web/public/assets/images/logout-door-inactive.svg @@ -3,9 +3,9 @@ - diff --git a/web/public/assets/images/maker-tier-section.svg b/web/public/assets/images/maker-tier-section.svg new file mode 100644 index 0000000000..e6d0a9056b --- /dev/null +++ b/web/public/assets/images/maker-tier-section.svg @@ -0,0 +1,39 @@ + + + + + + + + + + + + + + + + + diff --git a/web/public/assets/images/margin.svg b/web/public/assets/images/margin.svg deleted file mode 100644 index c183cdc1ab..0000000000 --- a/web/public/assets/images/margin.svg +++ /dev/null @@ -1,28 +0,0 @@ - - - - - - - - - - - - - - - diff --git a/web/public/assets/images/market-buy-01.svg b/web/public/assets/images/market-buy-01.svg deleted file mode 100644 index 7590587261..0000000000 --- a/web/public/assets/images/market-buy-01.svg +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - - - - diff --git a/web/public/assets/images/market-sell-01.svg b/web/public/assets/images/market-sell-01.svg deleted file mode 100644 index e65f2cae5a..0000000000 --- a/web/public/assets/images/market-sell-01.svg +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - - - - diff --git a/web/public/assets/images/missing-page-go-back-to-dash.svg b/web/public/assets/images/missing-page-go-back-to-dash.svg new file mode 100644 index 0000000000..c31df435d3 --- /dev/null +++ b/web/public/assets/images/missing-page-go-back-to-dash.svg @@ -0,0 +1,57 @@ + + + + + + + + diff --git a/web/public/assets/images/mobile-inactive.svg b/web/public/assets/images/mobile-inactive.svg deleted file mode 100644 index f56ed5e793..0000000000 --- a/web/public/assets/images/mobile-inactive.svg +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - diff --git a/web/public/assets/images/mobile.svg b/web/public/assets/images/mobile.svg deleted file mode 100644 index 6e3de84021..0000000000 --- a/web/public/assets/images/mobile.svg +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - diff --git a/web/public/assets/images/past-wave-annoucement.svg b/web/public/assets/images/past-wave-annoucement.svg deleted file mode 100644 index c48da5a675..0000000000 --- a/web/public/assets/images/past-wave-annoucement.svg +++ /dev/null @@ -1,10 +0,0 @@ - - - - - diff --git a/web/public/assets/images/payment-options.svg b/web/public/assets/images/payment-options.svg deleted file mode 100644 index 6a2b5dda1c..0000000000 --- a/web/public/assets/images/payment-options.svg +++ /dev/null @@ -1,29 +0,0 @@ - - - - - - - - - - - - - - - - diff --git a/web/public/assets/images/plugin-board-page.svg b/web/public/assets/images/plugin-board-page.svg new file mode 100644 index 0000000000..b15c91c0c0 --- /dev/null +++ b/web/public/assets/images/plugin-board-page.svg @@ -0,0 +1,72 @@ + + + + + diff --git a/web/public/assets/images/plugin-removal-white-01.svg b/web/public/assets/images/plugin-removal-white-01.svg new file mode 100644 index 0000000000..17c827aef2 --- /dev/null +++ b/web/public/assets/images/plugin-removal-white-01.svg @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + diff --git a/web/public/assets/images/plugins.svg b/web/public/assets/images/plugins.svg new file mode 100644 index 0000000000..dbe1152626 --- /dev/null +++ b/web/public/assets/images/plugins.svg @@ -0,0 +1,36 @@ + + + + + + + + + + diff --git a/web/public/assets/images/post-inactive.svg b/web/public/assets/images/post-inactive.svg deleted file mode 100644 index 2958c110c4..0000000000 --- a/web/public/assets/images/post-inactive.svg +++ /dev/null @@ -1,17 +0,0 @@ - - - - - - diff --git a/web/public/assets/images/quick-trade-tab-active.svg b/web/public/assets/images/quick-trade-tab-active.svg index fbef22c572..4d77168bf6 100644 --- a/web/public/assets/images/quick-trade-tab-active.svg +++ b/web/public/assets/images/quick-trade-tab-active.svg @@ -3,7 +3,7 @@ - + diff --git a/web/public/assets/images/quick-trade-tab.svg b/web/public/assets/images/quick-trade-tab.svg deleted file mode 100644 index b300af5051..0000000000 --- a/web/public/assets/images/quick-trade-tab.svg +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - diff --git a/web/public/assets/images/reCAPTCHA-card-plugins.png b/web/public/assets/images/reCAPTCHA-card-plugins.png new file mode 100644 index 0000000000..7f63e33990 Binary files /dev/null and b/web/public/assets/images/reCAPTCHA-card-plugins.png differ diff --git a/web/public/assets/images/reCAPTCHA-preview-image-plugin.png b/web/public/assets/images/reCAPTCHA-preview-image-plugin.png new file mode 100644 index 0000000000..4d4f7178d7 Binary files /dev/null and b/web/public/assets/images/reCAPTCHA-preview-image-plugin.png differ diff --git a/web/public/assets/images/recaptcha-plugin-thubnail.png b/web/public/assets/images/recaptcha-plugin-thubnail.png new file mode 100644 index 0000000000..daab68afee Binary files /dev/null and b/web/public/assets/images/recaptcha-plugin-thubnail.png differ diff --git a/web/public/assets/images/resend-email.svg b/web/public/assets/images/resend-email.svg index dc16ab1b9e..770d01b188 100644 --- a/web/public/assets/images/resend-email.svg +++ b/web/public/assets/images/resend-email.svg @@ -2,10 +2,13 @@ - + .resend-email-st{fill:#010101;} + + - - - + + diff --git a/web/public/assets/images/robolla-card-plugins.png b/web/public/assets/images/robolla-card-plugins.png new file mode 100644 index 0000000000..2e1e2f8fd7 Binary files /dev/null and b/web/public/assets/images/robolla-card-plugins.png differ diff --git a/web/public/assets/images/robolla-plugin-thumbnail.png b/web/public/assets/images/robolla-plugin-thumbnail.png new file mode 100644 index 0000000000..356e9c979e Binary files /dev/null and b/web/public/assets/images/robolla-plugin-thumbnail.png differ diff --git a/web/public/assets/images/robolla-preview-image-plugin.png b/web/public/assets/images/robolla-preview-image-plugin.png new file mode 100644 index 0000000000..44e540f38f Binary files /dev/null and b/web/public/assets/images/robolla-preview-image-plugin.png differ diff --git a/web/public/assets/images/roles.svg b/web/public/assets/images/roles.svg new file mode 100644 index 0000000000..14e19d3c0c --- /dev/null +++ b/web/public/assets/images/roles.svg @@ -0,0 +1,51 @@ + + + + + + + + diff --git a/web/public/assets/images/security.svg b/web/public/assets/images/security.svg deleted file mode 100644 index 85648b8bbb..0000000000 --- a/web/public/assets/images/security.svg +++ /dev/null @@ -1,29 +0,0 @@ - - - - - - - - - - - - - - - - diff --git a/web/public/assets/images/session-timed-out.svg b/web/public/assets/images/session-timed-out.svg index 533cc5adc5..0bdfa193bd 100644 --- a/web/public/assets/images/session-timed-out.svg +++ b/web/public/assets/images/session-timed-out.svg @@ -3,13 +3,13 @@ - - + diff --git a/web/public/assets/images/set-admin-email.svg b/web/public/assets/images/set-admin-email.svg new file mode 100644 index 0000000000..39552cb315 --- /dev/null +++ b/web/public/assets/images/set-admin-email.svg @@ -0,0 +1,85 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/web/public/assets/images/set-admin-network-keys.svg b/web/public/assets/images/set-admin-network-keys.svg new file mode 100644 index 0000000000..3fa28d41ff --- /dev/null +++ b/web/public/assets/images/set-admin-network-keys.svg @@ -0,0 +1,84 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/web/public/assets/images/set-admin-password.svg b/web/public/assets/images/set-admin-password.svg new file mode 100644 index 0000000000..f91b67c25d --- /dev/null +++ b/web/public/assets/images/set-admin-password.svg @@ -0,0 +1,93 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/web/public/assets/images/set-admin-retype-password.svg b/web/public/assets/images/set-admin-retype-password.svg new file mode 100644 index 0000000000..b6e64a9039 --- /dev/null +++ b/web/public/assets/images/set-admin-retype-password.svg @@ -0,0 +1,78 @@ + + + + + + + + + + + + + + + + + + + diff --git a/web/public/assets/images/setup-price-discovery.svg b/web/public/assets/images/setup-price-discovery.svg new file mode 100644 index 0000000000..a6c1191ae6 --- /dev/null +++ b/web/public/assets/images/setup-price-discovery.svg @@ -0,0 +1,36 @@ + + + + + + + + + + + + + diff --git a/web/public/assets/images/setup-section-backoffice.svg b/web/public/assets/images/setup-section-backoffice.svg new file mode 100644 index 0000000000..3b13f1645b --- /dev/null +++ b/web/public/assets/images/setup-section-backoffice.svg @@ -0,0 +1,97 @@ + + + + + + + + + + + + + + + + + + + diff --git a/web/public/assets/images/setup-section-crypto-wallet.svg b/web/public/assets/images/setup-section-crypto-wallet.svg new file mode 100644 index 0000000000..6a5e16c08d --- /dev/null +++ b/web/public/assets/images/setup-section-crypto-wallet.svg @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + diff --git a/web/public/assets/images/setup-section-liquidity.svg b/web/public/assets/images/setup-section-liquidity.svg new file mode 100644 index 0000000000..b83ffd28d3 --- /dev/null +++ b/web/public/assets/images/setup-section-liquidity.svg @@ -0,0 +1,25 @@ + + + + + + + + diff --git a/web/public/assets/images/setup-section-pro-trading-01.svg b/web/public/assets/images/setup-section-pro-trading-01.svg new file mode 100644 index 0000000000..7567cfe91e --- /dev/null +++ b/web/public/assets/images/setup-section-pro-trading-01.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + diff --git a/web/public/assets/images/setup-section-quick-trade.svg b/web/public/assets/images/setup-section-quick-trade.svg new file mode 100644 index 0000000000..d3e09cb692 --- /dev/null +++ b/web/public/assets/images/setup-section-quick-trade.svg @@ -0,0 +1,172 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/web/public/assets/images/spanner.svg b/web/public/assets/images/spanner.svg deleted file mode 100644 index f8fdbecc1f..0000000000 --- a/web/public/assets/images/spanner.svg +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - diff --git a/web/public/assets/images/success-check-box.svg b/web/public/assets/images/success-check-box.svg index ed4fd38bf6..932489a8c8 100644 --- a/web/public/assets/images/success-check-box.svg +++ b/web/public/assets/images/success-check-box.svg @@ -3,14 +3,14 @@ - - + diff --git a/web/public/assets/images/supervisor.svg b/web/public/assets/images/supervisor.svg new file mode 100644 index 0000000000..56b345f6ea --- /dev/null +++ b/web/public/assets/images/supervisor.svg @@ -0,0 +1,50 @@ + + + + + diff --git a/web/public/assets/images/tab-history.svg b/web/public/assets/images/tab-history.svg index e80edff93e..fb2bd17ac7 100644 --- a/web/public/assets/images/tab-history.svg +++ b/web/public/assets/images/tab-history.svg @@ -2,8 +2,11 @@ + - diff --git a/web/public/assets/images/tab-minus.svg b/web/public/assets/images/tab-minus.svg deleted file mode 100644 index db6c54b279..0000000000 --- a/web/public/assets/images/tab-minus.svg +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - diff --git a/web/public/assets/images/taker-tier-section.svg b/web/public/assets/images/taker-tier-section.svg new file mode 100644 index 0000000000..e29d2ac98a --- /dev/null +++ b/web/public/assets/images/taker-tier-section.svg @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + diff --git a/web/public/assets/images/tiers.svg b/web/public/assets/images/tiers.svg new file mode 100644 index 0000000000..83bcef672f --- /dev/null +++ b/web/public/assets/images/tiers.svg @@ -0,0 +1,37 @@ + + + + + + + + + + + diff --git a/web/public/assets/images/timezone-worldmap.svg b/web/public/assets/images/timezone-worldmap.svg new file mode 100644 index 0000000000..2ecd12a10d --- /dev/null +++ b/web/public/assets/images/timezone-worldmap.svg @@ -0,0 +1,580 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/web/public/assets/images/tiny-pink-shrimp-trader.svg b/web/public/assets/images/tiny-pink-shrimp-trader.svg deleted file mode 100644 index 2abf53ca26..0000000000 --- a/web/public/assets/images/tiny-pink-shrimp-trader.svg +++ /dev/null @@ -1,35 +0,0 @@ - - - - - - - - - - diff --git a/web/public/assets/images/trade-history-grey.svg b/web/public/assets/images/trade-history-grey.svg deleted file mode 100644 index d7758b7ab6..0000000000 --- a/web/public/assets/images/trade-history-grey.svg +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - - - diff --git a/web/public/assets/images/trade-inactive.svg b/web/public/assets/images/trade-inactive.svg deleted file mode 100644 index ccd44754cb..0000000000 --- a/web/public/assets/images/trade-inactive.svg +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - diff --git a/web/public/assets/images/trade-success.svg b/web/public/assets/images/trade-success.svg deleted file mode 100644 index 1aed3146ef..0000000000 --- a/web/public/assets/images/trade-success.svg +++ /dev/null @@ -1,32 +0,0 @@ - - - - - - - - - - - - - - - - diff --git a/web/public/assets/images/update-quick-trade.svg b/web/public/assets/images/update-quick-trade.svg deleted file mode 100644 index fc421f111b..0000000000 --- a/web/public/assets/images/update-quick-trade.svg +++ /dev/null @@ -1,32 +0,0 @@ - - - - - - - - - - - - - - - - diff --git a/web/public/assets/images/user-info-details-page.svg b/web/public/assets/images/user-info-details-page.svg new file mode 100644 index 0000000000..44547b7763 --- /dev/null +++ b/web/public/assets/images/user-info-details-page.svg @@ -0,0 +1,17 @@ + + + + + + + + + diff --git a/web/public/assets/images/users.svg b/web/public/assets/images/users.svg new file mode 100644 index 0000000000..190305da9d --- /dev/null +++ b/web/public/assets/images/users.svg @@ -0,0 +1,33 @@ + + + + + + + + + + diff --git a/web/public/assets/images/verification-resent.svg b/web/public/assets/images/verification-resent.svg deleted file mode 100644 index 2067719b5c..0000000000 --- a/web/public/assets/images/verification-resent.svg +++ /dev/null @@ -1,38 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - diff --git a/web/public/assets/images/volume-pending-dark.svg b/web/public/assets/images/volume-pending-dark.svg deleted file mode 100644 index 4318ef0c90..0000000000 --- a/web/public/assets/images/volume-pending-dark.svg +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/web/public/assets/images/volume-pending-icon.svg b/web/public/assets/images/volume-pending-icon.svg index ae9cce1730..800f2fc931 100644 --- a/web/public/assets/images/volume-pending-icon.svg +++ b/web/public/assets/images/volume-pending-icon.svg @@ -2,10 +2,10 @@ - - + - diff --git a/web/public/assets/images/wallet-active.svg b/web/public/assets/images/wallet-active.svg deleted file mode 100644 index 43d51ec0bd..0000000000 --- a/web/public/assets/images/wallet-active.svg +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - - - - diff --git a/web/public/assets/images/wallet-inactive.svg b/web/public/assets/images/wallet-inactive.svg deleted file mode 100644 index ab88ac1377..0000000000 --- a/web/public/assets/images/wallet-inactive.svg +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - - - - - diff --git a/web/public/assets/images/wallet-only-btc-icon.svg b/web/public/assets/images/wallet-only-btc-icon.svg new file mode 100644 index 0000000000..a945dc741a --- /dev/null +++ b/web/public/assets/images/wallet-only-btc-icon.svg @@ -0,0 +1,21 @@ + + + + + + + + + + + + diff --git a/web/public/assets/images/whale-chat-lvl-4.svg b/web/public/assets/images/whale-chat-lvl-4.svg deleted file mode 100644 index 704cb27a29..0000000000 --- a/web/public/assets/images/whale-chat-lvl-4.svg +++ /dev/null @@ -1,17 +0,0 @@ - - - - - - diff --git a/web/public/assets/images/withdraw-history-grey.svg b/web/public/assets/images/withdraw-history-grey.svg deleted file mode 100644 index 43d4f00784..0000000000 --- a/web/public/assets/images/withdraw-history-grey.svg +++ /dev/null @@ -1,37 +0,0 @@ - - - - - - - - - - - - - - - - - diff --git a/web/public/assets/images/withdraw-mail-confirmation.svg b/web/public/assets/images/withdraw-mail-confirmation.svg index c95f34c424..90d7dabd59 100644 --- a/web/public/assets/images/withdraw-mail-confirmation.svg +++ b/web/public/assets/images/withdraw-mail-confirmation.svg @@ -2,6 +2,9 @@ + diff --git a/web/public/assets/images/withdraw-tier-section.svg b/web/public/assets/images/withdraw-tier-section.svg new file mode 100644 index 0000000000..822b26ec0a --- /dev/null +++ b/web/public/assets/images/withdraw-tier-section.svg @@ -0,0 +1,13 @@ + + + + + + + + + diff --git a/web/public/assets/logo_black.svg b/web/public/assets/logo_black.svg deleted file mode 100644 index 782a6275c4..0000000000 --- a/web/public/assets/logo_black.svg +++ /dev/null @@ -1,39 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/web/public/assets/logo_grey.svg b/web/public/assets/logo_grey.svg deleted file mode 100644 index b587facd67..0000000000 --- a/web/public/assets/logo_grey.svg +++ /dev/null @@ -1,43 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/web/public/assets/pattern-grey.jpg b/web/public/assets/pattern-grey.jpg deleted file mode 100644 index 81be3252d5..0000000000 Binary files a/web/public/assets/pattern-grey.jpg and /dev/null differ diff --git a/web/public/assets/plugins/plugin-liquidity.png b/web/public/assets/plugins/plugin-liquidity.png deleted file mode 100644 index 41176d6294..0000000000 Binary files a/web/public/assets/plugins/plugin-liquidity.png and /dev/null differ diff --git a/web/public/assets/plugins/plugin-shufti.png b/web/public/assets/plugins/plugin-shufti.png deleted file mode 100644 index 3499449a10..0000000000 Binary files a/web/public/assets/plugins/plugin-shufti.png and /dev/null differ diff --git a/web/public/assets/summary/kraken.png b/web/public/assets/summary/kraken.png deleted file mode 100644 index 5ef1f1fde8..0000000000 Binary files a/web/public/assets/summary/kraken.png and /dev/null differ diff --git a/web/public/assets/summary/leviathan.png b/web/public/assets/summary/leviathan.png deleted file mode 100644 index 174d946445..0000000000 Binary files a/web/public/assets/summary/leviathan.png and /dev/null differ diff --git a/web/public/assets/summary/leviathan_dark.png b/web/public/assets/summary/leviathan_dark.png deleted file mode 100644 index add4c8120b..0000000000 Binary files a/web/public/assets/summary/leviathan_dark.png and /dev/null differ diff --git a/web/public/assets/summary/shrimp.png b/web/public/assets/summary/shrimp.png deleted file mode 100644 index 519c4dcd99..0000000000 Binary files a/web/public/assets/summary/shrimp.png and /dev/null differ diff --git a/web/public/assets/summary/snapper.png b/web/public/assets/summary/snapper.png deleted file mode 100644 index bf7f866484..0000000000 Binary files a/web/public/assets/summary/snapper.png and /dev/null differ diff --git a/web/public/css/chart.css b/web/public/css/chart.css index 16801ed46e..cbe43d4425 100644 --- a/web/public/css/chart.css +++ b/web/public/css/chart.css @@ -1,6 +1,6 @@ -.theme-dark .layout__area--top div { - background-color: var(--dark-app-background-color) !important; +.layout__area--top div { + background-color: var(--base_background) !important; } .screen-container { diff --git a/web/public/favicon.ico b/web/public/favicon.ico new file mode 100644 index 0000000000..18e346d5ef Binary files /dev/null and b/web/public/favicon.ico differ diff --git a/web/src/_common.scss b/web/src/_common.scss index 0132bdd80c..e83d879da1 100644 --- a/web/src/_common.scss +++ b/web/src/_common.scss @@ -96,12 +96,6 @@ table th { color: $link !important; } -.dark-theme { - .blue-link { - color: $dark-link !important; - } -} - .arrow { border: solid grey; border-width: 0 3px 3px 0; @@ -119,19 +113,173 @@ table th { transform: rotate(135deg); -webkit-transform: rotate(135deg); } + + &.up { + transform: rotate(-135deg) translate(-1px, 0); + -webkit-transform: rotate(-135deg) translate(-1px, 0); + } + + &.down { + transform: rotate(45deg); + -webkit-transform: rotate(45deg); + } + + &.small { + height: 1rem; + width: 1rem; + } } .caps { text-transform: uppercase; } +.caps-first { + text-transform: capitalize; +} + .d-inline { display: inline; } -.d-inline-block{ +.d-inline-block { display: inline-block; } -.content-center{ - justify-content:center !important; -} \ No newline at end of file +.content-center { + justify-content: center !important; +} + +.bold { + font-weight: bold; +} + +.justify-content-end { + justify-content: flex-end; +} + +.justify-content-start { + justify-content: flex-start; +} + +.justify-content-between { + justify-content: space-between; +} + +.align-center { + align-items: center; +} + +.align-start { + align-items: flex-start; +} + +.underline-text { + text-decoration: underline; +} + +.disabled-link { + pointer-events: none; +} + +.object-fit-contain { + object-fit: contain; +} + +.background-contain { + -webkit-background-size: contain; + background-size: contain; +} + +.custom-select-style { + .ant-select-item-option-selected:not(.ant-select-item-option-disabled), + .ant-select-item-option-active:not(.ant-select-item-option-disabled) { + color: $colors-main-black; + background-color: $app-sidebar-background; + } + + .ant-select-item, + .ant-select-item-option { + color: $colors-black; + } + + .ant-select-item-option-disabled { + color: $colors-deactivate-color1; + } + + &.ant-select-dropdown { + background-color: $app-background-color; + } +} + +.custom-select-input-style { + &.no-border { + .ant-select-selector { + border: none !important; + } + } + + .ant-select-selector { + border-radius: 0.35rem !important; + border-color: $colors-main-border !important; + background-color: transparent !important; + color: $colors-main-black !important; + height: 20px !important; + font-weight: 400 !important; + font-size: 0.9rem !important; + } + + .ant-select-selection-item { + line-height: 20px !important; + text-transform: capitalize; + } + + .ant-select-selection-search-input { + height: 20px !important; + } + + .anticon { + color: $colors-main-black !important; + } + + &.appbar { + &.ant-select { + margin: 0 0.4rem !important; + max-width: 100px !important; + min-width: 70px; + } + + .ant-select-selector { + border-color: $base_top-bar-navigation_text-inactive !important; + color: $base_top-bar-navigation_text-inactive !important; + } + .anticon { + color: $base_top-bar-navigation_text-inactive !important; + } + } + + &.elevated { + z-index: 1; + } + + &.order-entry { + &.ant-select { + width: 100% !important; + } + } + + .ant-select-arrow { + z-index: -1; + } +} + +.border { + border-color: $colors-border !important; +} + +.border-main { + border-color: $colors-main-border !important; +} + +.border-pale { + border-color: $colors-super-pale-black !important; +} diff --git a/web/src/_customVariables.css b/web/src/_customVariables.css index 933a91a2fb..5435a463cb 100644 --- a/web/src/_customVariables.css +++ b/web/src/_customVariables.css @@ -1,334 +1,163 @@ :root { - --colors-main-black: #212121; - --colors-white: white; - --colors-black: #000000; - --colors-wave-phase-completed: #808000; - --colors-deactivate: #797779; - --colors-deactivate-color1: #cccbcb; - --colors-deactivate-color2: #777677; - --colors-deactivate-color3: #f2f2f3; - --colors-deactivate-color4: #f1f2f2; - --colors-notifications-red: #ed1c24; - --colors-notification-inactive-red: #e26171; - --colors-notifications-blue: #0000ff; - --colors-notifications-green: #00a651; - --color-currency-eur--main: #00a651; - --color-currency-eur--secondary: #52c2b8; - --color-currency-btc--main: #f15a29; - --color-currency-btc--secondary: #f7941e; - --colors-currencies-eur: #00a651; - --colors-currencies-btc: #f7941e; - --dark-app-bar-add-tab-menu-background: #202020; - --dark-app-bar-tab-active-menu-list-background: #333333; - --app-bar-menu-list-color: #808080; - --app-bar-icon-inactive: #808080; - --app-bar--quicktrade-active-color: #fff100; - --app-bar--quicktrade-inactive-color: #ceac20; - --app-bar-pairs-up: green; - --app-bar-pairs-down: #ed1c24; - --dark-app-bar-pairs-up: #00A69C; - --dark-app-bar-pairs-down: #EE4036; + /*_________________________________*/ - --app-background-color: #ffffff; - --app-light-background: #F2F2F3; - --app-sidebar-background: white; - --auth-container-background: #ffffff; - --quick-trade-background: #ebf3f1; - --quick-trade-container: #ffffff; - --app-modal-background: #ddddddbf; - --app-bar-background-color: #000000; - --app-line-divider: #212121; - --box-fields: #f0f1f1; - --buy: #6496AA; - --sell: #000000; - --color-sell-btc-light: #000000; - --link: #0000ff; - --trade-fields: #cccbcb; - --trade-fields-border: #212121; - --trade-fill-indicator: #000000; - --trade-fill-indicator-text: #878787; - --buy-bids-text: #000000; - --sell-bids-text: #ffffff; - --app-logo-color: #ffffff; - --sidebar-border--color: #797779; - --border-color: #777677; - --border-main: #212121; - --form-color-underline-focus: #212121; - --form-color-underline: #cccbcb; - --form-color-placeholder: #cccbcb; - --form-arrow: #212121; - --form-label: #777677; - --form-text-disabled: #797779; - --colors-terms-background: #f7f7f7; - --tab-active: #212121; - --tab-inactive: #777677; - --sidebar-color: #777677; - --sidebar-color-active: #212121; - --info-panel-background: #f5f5f5; - --info-panel-text: #777677; - --icon-hover: #212121; - --icon-unhover: #777677; - --trade-tabs-inactive-color: #808080; - --footer-background-color: #000000; - --chat-message-background-even: #f0f1f1; - --chat-message-background-odd: #e6e6e6; - --chat-message-color: #4f4f4f; - --chat-box-border: #f0f1f1; - --history-color-buy: #d1d4dc; - --history-color-sell: #000000; - --colors-username-set-dark: #ff4bb6; - --coin-eur: #06773d; - --coin-eur-text: #ffffff; - --coin-usd: #01592e; - --coin-usd-text: #ffffff; - --coin-jpy: #e0dfc7; - --coin-jpy-text: #000000; - --coin-gbp: #482e6e; - --coin-gbp-text: #ffffff; - --coin-chf: #ed1c24; - --coin-chf-text: #ffffff; - --coin-cad: #d7ce58; - --coin-cad-text: #000000; - --coin-aud: #19441f; - --coin-aud-text: #ffffff; - --coin-nzd: #b3498c; - --coin-nzd-text: #ffffff; - --coin-zar: #d8d3a0; - --coin-zar-text: #000000; - --coin-hkd: #f48f9b; - --coin-hkd-text: #000000; - --coin-krw: #f9ee02; - --coin-krw-text: #000000; - --coin-cny: #ec008c; - --coin-cny-text: #ffffff; - --coin-sgd: #720f15; - --coin-sgd-text: #ffffff; - --coin-btc: #f7941d; - --coin-btc-text: #000000; - --coin-eth: #3e4ea1; - --coin-eth-text: #ffffff; - --coin-ltc: #bcbec0; - --coin-ltc-text: #000000; - --coin-bch: #8dc541; - --coin-bch-text: #000000; - --coin-xrp: #414042; - --coin-xrp-text: #ffffff; - --coin-xht: #000000; - --coin-xht-text: #ffffff; - --coin-eos: #58595b; - --coin-eos-text: #ffffff; - --coin-bnb: #f1ba2a; - --coin-bnb-text: #000000; - --coin-link: #1b75bc; - --coin-link-text: #ffffff; - --coin-trx: #a22d25; - --coin-trx-text: #ffffff; - --coin-ada: #3667b2; - --coin-ada-text: #ffffff; - --coin-matic: #2aaae2; - --coin-matic-text: #ffffff; - --coin-neo: #bcbec0; - --coin-neo-text: #000000; - --coin-etc: #009444; - --coin-etc-text: #000000; - --coin-xlm: #808285; - --coin-xlm-text: #ffffff; - --coin-xmr: #f15a29; - --coin-xmr-text: #ffffff; - --coin-zec: #fbb040; - --coin-zec-text: #000000; - --coin-one: #939598; - --coin-one-text: #ffffff; - --coin-pax: #163526; - --coin-pax-text: #ffffff; - --coin-usdc: #4d7d91; - --coin-usdc-text: #ffffff; - --coin-usdt: #2bb673; - --coin-usdt-text: #ffffff; - --coin-vet: #454c7d; - --coin-vet-text: #ffffff; - --coin-btt: #c49a6c; - --coin-btt-text: #ffffff; - --coin-qtum: #96daf7; - --coin-qtum-text: #000000; - --coin-algo: #594a42; - --coin-algo-text: #ffffff; - --coin-rvn: #662d91; - --coin-rvn-text: #ffffff; - --coin-iota: #603913; - --coin-iota-text: #ffffff; - --coin-dash: #417ec1; - --coin-dash-text: #ffffff; - --coin-bsv: #a09032; - --coin-bsv-text: #ffffff; - --coin-ont: #00a79d; - --coin-ont-text: #ffffff; - --coin-atom: #796184; - --coin-atom-text: #ffffff; - --coin-celr: #726658; - --coin-celr-text: #ffffff; - --coin-omg: #8e7fbb; - --coin-omg-text: #ffffff; - --coin-hot: #8b5e3c; - --coin-hot-text: #ffffff; - --coin-tusd: #002868; - --coin-tusd-text: #ffffff; - --coin-dai: #f3c27a; - --coin-dai-text: #000000; + /*COLOR MANAGEMENT*/ - --dark-app-background-color: #202020; - --dark-app-light-background: #2b2b2b; - --dark-app-sidebar-background: #333333; - --dark-auth-container-background: #333333; - --dark-quick-trade-background: #202020; - --dark-quick-trade-container: #333333; - --dark-app-modal-background: #231f2080; - --dark-app-bar-background-color: #0f1114; - --dark-app-line-divider: #535353; - --dark-box-fields: #353841; - --dark-buy: #00A69C; - --dark-sell: #EE4036; - --dark-color-sell-btc-light: #EE4036; - --dark-link: #0066B4; - --dark-trade-fields: #191919; - --dark-trade-fields-border: #2B2B2B; - --dark-trade-fill-indicator: #444162; - --dark-buy-bids-text: #000000; - --dark-sell-asks-text: #ffffff; - --dark-app-logo-color: #ffffff; - --dark-border-main: #535353; - --dark-inactive-color: #2e2f37; - --dark-icon-color: #ffffff; - --dark-font-main-text-color: #ffffff; - --dark-font-sub-text-color: #808080; - --dark-font-sub-text-1-color: #808080; - --dark-button-active: #0066B4; - --dark-button-text: #ffffff; - --dark-button-disabled: #333333; - --dark-button-text-disabled: #535353; - --dark-form-color-underline-focus: #ffffff; - --dark-form-color-underline: #535353; - --dark-form-placeholder: #808080; - --dark-form-arrow: #535353; - --dark-form-label: #ffffff; - --dark-form-text-disabled: #2e2f37; - --dark-form-text: #808080; - --dark-colors-terms-background: #191919; - --dark-tab-active: #ffffff; - --dark-tab-inactive: #808080; - --dark-sidebar-color: #808080; - --dark-sidebar-color-active: #ffffff; - --dark-info-panel-background: #353841; - --dar-info-panel-text: #808080; - --dark-icon-hover: #ffffff; - --dark-icon-unhover: #808080; - --dark-tab-notification: #0066B4; - --dark-disabled-main: #2e2f37; - --dark-disabled-secondary: #2e2f37; - --dark-trade-row-highlight: #535353; - --dark-accordion-arrow-active: #ffffff; - --dark-accordion-arrow-inactive: #808080; - --dark-footer-background-color: #0f1114; - --dark-chat-message-background-even: #202020; - --dark-chat-message-background-odd: #333333; - --dark-chat-message-color: #98CCB2; - --dark-chat-box-border: #2B2B2B; - --dark-coin-eur: #06773d; - --dark-coin-eur-text: #ffffff; - --dark-coin-usd: #01592e; - --dark-coin-usd-text: #ffffff; - --dark-coin-jpy: #e0dfc7; - --dark-coin-jpy-text: #000000; - --dark-coin-gbp: #482e6e; - --dark-coin-gbp-text: #ffffff; - --dark-coin-chf: #ed1c24; - --dark-coin-chf-text: #ffffff; - --dark-coin-cad: #d7ce58; - --dark-coin-cad-text: #000000; - --dark-coin-aud: #19441f; - --dark-coin-aud-text: #ffffff; - --dark-coin-nzd: #b3498c; - --dark-coin-nzd-text: #ffffff; - --dark-coin-zar: #d8d3a0; - --dark-coin-zar-text: #000000; - --dark-coin-hkd: #f48f9b; - --dark-coin-hkd-text: #000000; - --dark-coin-krw: #f9ee02; - --dark-coin-krw-text: #000000; - --dark-coin-cny: #ec008c; - --dark-coin-cny-text: #ffffff; - --dark-coin-sgd: #720f15; - --dark-coin-sgd-text: #ffffff; - --dark-coin-btc: #f7941d; - --dark-coin-btc-text: #000000; - --dark-coin-eth: #3e4ea1; - --dark-coin-eth-text: #ffffff; - --dark-coin-ltc: #bcbec0; - --dark-coin-ltc-text: #000000; - --dark-coin-bch: #8dc541; - --dark-coin-bch-text: #000000; - --dark-coin-xrp: #414042; - --dark-coin-xrp-text: #ffffff; - --dark-coin-xht: #000000; - --dark-coin-xht-text:#ffffff; - --dark-coin-eos: #58595b; - --dark-coin-eos-text: #ffffff; - --dark-coin-bnb: #f1ba2a; - --dark-coin-bnb-text: #000000; - --dark-coin-link: #1b75bc; - --dark-coin-link-text: #ffffff; - --dark-coin-trx: #a22d25; - --dark-coin-trx-text: #ffffff; - --dark-coin-ada: #3667b2; - --dark-coin-ada-text: #ffffff; - --dark-coin-matic: #2aaae2; - --dark-coin-matic-text: #ffffff; - --dark-coin-neo: #bcbec0; - --dark-coin-neo-text: #000000; - --dark-coin-etc: #009444; - --dark-coin-etc-text: #000000; - --dark-coin-xlm: #808285; - --dark-coin-xlm-text: #ffffff; - --dark-coin-xmr: #f15a29; - --dark-coin-xmr-text: #ffffff; - --dark-coin-zec: #fbb040; - --dark-coin-zec-text: #000000; - --dark-coin-one: #939598; - --dark-coin-one-text: #ffffff; - --dark-coin-pax: #163526; - --dark-coin-pax-text: #ffffff; - --dark-coin-usdc: #4d7d91; - --dark-coin-usdc-text: #ffffff; - --dark-coin-usdt: #2bb673; - --dark-coin-usdt-text: #ffffff; - --dark-coin-vet: #454c7d; - --dark-coin-vet-text: #ffffff; - --dark-coin-btt: #c49a6c; - --dark-coin-btt-text: #ffffff; - --dark-coin-qtum: #96daf7; - --dark-coin-qtum-text: #000000; - --dark-coin-algo: #594a42; - --dark-coin-algo-text: #ffffff; - --dark-coin-rvn: #662d91; - --dark-coin-rvn-text: #ffffff; - --dark-coin-iota: #603913; - --dark-coin-iota-text: #ffffff; - --dark-coin-dash: #417ec1; - --dark-coin-dash-text: #ffffff; - --dark-coin-bsv: #a09032; - --dark-coin-bsv-text: #ffffff; - --dark-coin-ont: #00a79d; - --dark-coin-ont-text: #ffffff; - --dark-coin-atom: #796184; - --dark-coin-atom-text: #ffffff; - --dark-coin-celr: #726658; - --dark-coin-celr-text: #ffffff; - --dark-coin-omg: #8e7fbb; - --dark-coin-omg-text: #ffffff; - --dark-coin-hot: #8b5e3c; - --dark-coin-hot-text: #ffffff; - --dark-coin-tusd: #002868; - --dark-coin-tusd-text: #ffffff; - --dark-coin-dai: #f3c27a; - --dark-coin-dai-text: #000000; -} \ No newline at end of file + /*_________________________________*/ + + --base_background: #ffffff; + --base_top-bar-navigation: #000000; + --base_secondary-navigation-bar: #f2f2f3; + --base_wallet-sidebar-and-popup: #ffffff; + --base_footer: #000000; + + --labels_important-active-labels-text-graphics: #000000; + --labels_secondary-inactive-label-text-graphics: #808080; + --calculated_important-border: #000000b3; + --calculated_secondary-border: #00000054; + --calculated_footer_border: #ffffff26; + --calculated_super-pale_label-text-graphics: #00000026; + --labels_fields: #f0f1f1; + --labels_inactive-button: #535353; + + --trading_selling-related-elements: #ee4036; + --trading_buying-related-elements: #00a69c; + + --specials_buttons-links-and-highlights: #0066b4; + --specials_chat-messages: #98ccb2; + --specials_my-username-in-chat: #ffff00; + --specials_checks-okay-done: #008000; + --specials_pending-waiting-caution: #f6921e; + --specials_notifications-alerts-warnings: #ed1c24; + + /*_________________________________*/ + + /*Calculated colors*/ + + /*_________________________________*/ + + --calculated_market-card_gradient_background: #ffffff; + --calculated_trading_selling-sparkline-fill: #ee40364d; + --calculated_trading_buying-sparkline-fill: #00a69c4d; + --calculated_trading_selling-orderbook-bar: #ee40361f; + --calculated_trading_buying-orderbook-bar: #00a69c1f; + --calculated_trading_buying-related-text: #000000; + --calculated_trading_selling-related-text: #ffffff; + --calculated_base_modal-overlay: #ffffffbf; + --calculated_specials_highlight-box: #0066b41a; + --calculated_base_top-bar-navigation_text: #ffffff; + --calculated_base_top-bar-navigation_text-inactive: #ffffffb3; + --calculated_base_footer_text: #ffffff; + --calculated_trad-view_watermark: #0000001a; + --calculated_trad-view_axis: #00000080; + --calculated_trad-view_text: #000000cc; + --calculated_specials_notifications-alerts-inactive: #ed1c24bf; + --calculated_specials_notifications-alerts-text: #ffffff; + --calculated_specials_notifications-pending-text: #ffffff; + --calculated_specials_notifications-success-text: #ffffff; + + /*_________________________________*/ + + /*_____Remaining_____*/ + --dark-accordion-arrow-active: #ffffff; + + /*______coins______*/ + --coin-eur: #06773d; + --coin-eur-text: #ffffff; + --coin-usd: #01592e; + --coin-usd-text: #ffffff; + --coin-jpy: #e0dfc7; + --coin-jpy-text: #000000; + --coin-gbp: #482e6e; + --coin-gbp-text: #ffffff; + --coin-chf: #ed1c24; + --coin-chf-text: #ffffff; + --coin-cad: #d7ce58; + --coin-cad-text: #000000; + --coin-aud: #19441f; + --coin-aud-text: #ffffff; + --coin-nzd: #b3498c; + --coin-nzd-text: #ffffff; + --coin-zar: #d8d3a0; + --coin-zar-text: #000000; + --coin-hkd: #f48f9b; + --coin-hkd-text: #000000; + --coin-krw: #f9ee02; + --coin-krw-text: #000000; + --coin-cny: #ec008c; + --coin-cny-text: #ffffff; + --coin-sgd: #720f15; + --coin-sgd-text: #ffffff; + --coin-btc: #f7941d; + --coin-btc-text: #000000; + --coin-eth: #3e4ea1; + --coin-eth-text: #ffffff; + --coin-ltc: #bcbec0; + --coin-ltc-text: #000000; + --coin-bch: #8dc541; + --coin-bch-text: #000000; + --coin-xrp: #414042; + --coin-xrp-text: #ffffff; + --coin-xht: #000000; + --coin-xht-text: #ffffff; + --coin-eos: #58595b; + --coin-eos-text: #ffffff; + --coin-bnb: #f1ba2a; + --coin-bnb-text: #000000; + --coin-link: #1b75bc; + --coin-link-text: #ffffff; + --coin-trx: #a22d25; + --coin-trx-text: #ffffff; + --coin-ada: #3667b2; + --coin-ada-text: #ffffff; + --coin-matic: #2aaae2; + --coin-matic-text: #ffffff; + --coin-neo: #bcbec0; + --coin-neo-text: #000000; + --coin-etc: #009444; + --coin-etc-text: #000000; + --coin-xlm: #808285; + --coin-xlm-text: #ffffff; + --coin-xmr: #f15a29; + --coin-xmr-text: #ffffff; + --coin-zec: #fbb040; + --coin-zec-text: #000000; + --coin-one: #939598; + --coin-one-text: #ffffff; + --coin-pax: #163526; + --coin-pax-text: #ffffff; + --coin-usdc: #4d7d91; + --coin-usdc-text: #ffffff; + --coin-usdt: #2bb673; + --coin-usdt-text: #ffffff; + --coin-vet: #454c7d; + --coin-vet-text: #ffffff; + --coin-btt: #c49a6c; + --coin-btt-text: #ffffff; + --coin-qtum: #96daf7; + --coin-qtum-text: #000000; + --coin-algo: #594a42; + --coin-algo-text: #ffffff; + --coin-rvn: #662d91; + --coin-rvn-text: #ffffff; + --coin-iota: #603913; + --coin-iota-text: #ffffff; + --coin-dash: #417ec1; + --coin-dash-text: #ffffff; + --coin-bsv: #a09032; + --coin-bsv-text: #ffffff; + --coin-ont: #00a79d; + --coin-ont-text: #ffffff; + --coin-atom: #796184; + --coin-atom-text: #ffffff; + --coin-celr: #726658; + --coin-celr-text: #ffffff; + --coin-omg: #8e7fbb; + --coin-omg-text: #ffffff; + --coin-hot: #8b5e3c; + --coin-hot-text: #ffffff; + --coin-tusd: #002868; + --coin-tusd-text: #ffffff; + --coin-dai: #f3c27a; + --coin-dai-text: #000000; +} diff --git a/web/src/_mixins.scss b/web/src/_mixins.scss index cb15dec1b4..9d3c05b9aa 100644 --- a/web/src/_mixins.scss +++ b/web/src/_mixins.scss @@ -14,7 +14,13 @@ position: $pos; } -@mixin css-triangle($color, $direction, $size: 6px, $position: absolute, $round: false) { +@mixin css-triangle( + $color, + $direction, + $size: 6px, + $position: absolute, + $round: false +) { @include pseudo($pos: $position); width: 0; height: 0; diff --git a/web/src/_variables.scss b/web/src/_variables.scss index 3d29c885c7..46d4e8d382 100644 --- a/web/src/_variables.scss +++ b/web/src/_variables.scss @@ -6,180 +6,137 @@ $bp-md: 991px; $bp-lg: 1199px; // common colors -$colors-main-black: var(--colors-main-black); -$colors-white: var(--colors-white); -$colors-black: var(--colors-black); -$colors-wave-phase-completed: var(--colors-wave-phase-completed); +$colors-main-black: var(--labels_important-active-labels-text-graphics); +$colors-black: var(--labels_secondary-inactive-label-text-graphics); +$colors-border: var(--calculated_secondary-border); +$colors-main-border: var(--calculated_important-border); +$footer-border-color: var(--calculated_footer_border); +$colors-super-pale-black: var(--calculated_super-pale_label-text-graphics); +$colors-wave-phase-completed: var(--specials_checks-okay-done); + // common colors for deactivate and disabled look -$colors-deactivate: var(--colors-deactivate); -$colors-deactivate-color1: var(--colors-deactivate-color1); -$colors-deactivate-color2: var(--colors-deactivate-color2); -$colors-deactivate-color3: var( --colors-deactivate-color3); -$colors-deactivate-color4: var( --colors-deactivate-color4); - -$colors-notifications-red: var(--colors-notifications-red); -$colors-notification-inactive-red: var(--colors-notification-inactive-red); -$colors-notifications-blue: var(--colors-notifications-blue); // for Hollaex -$colors-notifications-green: var(--colors-notifications-green); -$error-color: $colors-notifications-red; - -$color-currency-eur--main: var(--color-currency-eur--main); -$color-currency-eur--secondary: var(--color-currency-eur--secondary); -$color-currency-btc--main: var(--color-currency-btc--main); -$color-currency-btc--secondary: var(--color-currency-btc--secondary); - -$colors-currencies-eur: $color-currency-eur--main; -$colors-currencies-btc: $color-currency-btc--secondary; -// $colors-orderbook-red-light: #ed1c24; -$colors-currencies-bch: var(--colors-currencies-bch); -$colors-currencies-eth: var(--colors-currencies-eth); -$colors-currencies-ltc: var(--colors-currencies-ltc); -$colors-currencies-xrp: var(--colors-currencies-xrp); -$colors-terms-background: var(--colors-terms-background); // for Hollaex -$dark-colors-terms-background: var(--dark-colors-terms-background); // for Hollaex +$colors-deactivate: var(--labels_secondary-inactive-label-text-graphics); +$colors-deactivate-color1: var(--labels_inactive-button); +$colors-deactivate-color2: var(--labels_secondary-inactive-label-text-graphics); +$colors-deactivate-color4: var(--labels_inactive-button); + +//common colors for notifications and errors +$colors-notifications-red: var(--specials_notifications-alerts-warnings); +$colors-notification-inactive-red: var( + --calculated_specials_notifications-alerts-inactive +); +$colors-notification-alert-text: var( + --calculated_specials_notifications-alerts-text +); +$colors-notifications-blue: var(--specials_buttons-links-and-highlights); +$colors-notifications-green: var(--specials_checks-okay-done); +$colors-notification-pending-text: var( + --calculated_specials_notifications-pending-text +); +$colors-notification-green-text: var( + --calculated_specials_notifications-success-text +); +$colors-notification-pending: var(--specials_pending-waiting-caution); +$specials_highlight-box: var(--calculated_specials_highlight-box); +$chat-own-message--color: var(--specials_my-username-in-chat); +$favourite-star: var(--specials_my-username-in-chat); + +//common colors for terms +$colors-terms-background: $specials_highlight-box; + +// theme colors +$app-background-color: var(--base_background); +$app-light-background: var(--base_secondary-navigation-bar); +$app-sidebar-background: var(--base_wallet-sidebar-and-popup); +$auth-container-background: var(--base_wallet-sidebar-and-popup); +$market-card_gradient_background: var( + --calculated_market-card_gradient_background +); // common colors for app bar -$dark-app-bar-add-tab-menu-background: var(--dark-app-bar-add-tab-menu-background); -$dark-app-bar-tab-active-menu-list-background: var(--dark-app-bar-tab-active-menu-list-background); -$app-bar-menu-list-color: var(--app-bar-menu-list-color); -$app-bar-icon-inactive: var(--app-bar-icon-inactive); -$app-bar--quicktrade-active-color: var(--app-bar--quicktrade-active-color); -$app-bar--quicktrade-inactive-color: var(--app-bar--quicktrade-inactive-color); -$app-bar-pairs-up: var(--app-bar-pairs-up); -$app-bar-pairs-down: var(--app-bar-pairs-down); -$dark-app-bar-pairs-up: var(--dark-app-bar-pairs-up); -$dark-app-bar-pairs-down: var(--dark-app-bar-pairs-down); -// $app-menu-bar-border--color: #CCCBCA; - -// colors for white theme -$app-background-color: var(--app-background-color); -$app-light-background: var(--app-light-background); -$app-sidebar-background: var(--app-sidebar-background); -$auth-container-background: var(--auth-container-background); -$quick-trade-background: var(--quick-trade-background); -$quick-trade-container: var(--quick-trade-container); -$app-modal-background: var(--app-modal-background); -$app-bar-background-color: var(--app-bar-background-color); -$app-line-divider: var(--app-line-divider); -$box-fields: var(--box-fields); -$buy: var(--buy); // for Hollaex -$sell: var(--sell); // for Hollaex -$color-sell-btc-light: var(--color-sell-btc-light); // for Hollaex -// $color-buy-btc-light: $colors-black; // for Hollaex -$link: var(--link); -$trade-fields: var(--trade-fields); -$trade-fields-border: var(--trade-fields-border); -$trade-fill-indicator: var(--trade-fill-indicator); // for Hollaex -$trade-fill-indicator-text: var(--trade-fill-indicator-text); // for Hollaex -$buy-bids-text: var(--buy-bids-text); // for Hollaex -$sell-bids-text: var(--sell-bids-text); -$app-logo-color: var(--app-logo-color); -$sidebar-border--color: var(--sidebar-border--color); -$border-color: var(--border-color); -$border-main: var(--border-main); -// white form field colors -$form-color-underline-focus: var(--form-color-underline-focus); -$form-color-underline: var(--form-color-underline); -$form-color-placeholder: var(--form-color-placeholder); -$form-arrow: var(--form-arrow); -$form-label: var(--form-label); -$form-text-disabled: var(--form-text-disabled); -// White theme tabs -$tab-active: var(--tab-active); -$tab-inactive: var(--tab-inactive); -$sidebar-color: var(--sidebar-color); -$sidebar-color-active: var(--sidebar-color-active); -$info-panel-background: var(--info-panel-background); -$info-panel-text: var(--info-panel-text); -$icon-hover: var(--icon-hover); -$icon-unhover: var(--icon-unhover); -$trade-tabs-inactive-color: var(--trade-tabs-inactive-color); -// $bitcoin-color-main: $colors-currencies-btc; -// White theme footer -$footer-background-color: var(--footer-background-color); -// white chat color -$chat-message-background-even: var(--chat-message-background-even); -$chat-message-background-odd: var(--chat-message-background-odd); -$chat-message-color: var(--chat-message-color); -$chat-box-border: var(--chat-box-border); +$dark-app-bar-add-tab-menu-background: $app-background-color; +$app-bar-menu-list-color: var(--labels_secondary-inactive-label-text-graphics); +$app-bar-icon-inactive: var(--calculated_base_top-bar-navigation_text-inactive); + +// Quick trade +$quick-trade-background: $app-background-color; +$quick-trade-container: var(--base_wallet-sidebar-and-popup); + +$app-modal-background: var(--calculated_base_modal-overlay); +$app-bar-background-color: var(--base_top-bar-navigation); + +$app-line-divider: $colors-main-border; +$box-fields: var(--labels_fields); + +$buy: var(--trading_buying-related-elements); +$sell: var(--trading_selling-related-elements); + +$link: var(--specials_buttons-links-and-highlights); + +$trade-fields: var(--labels_fields); +$trade-fields-border: $colors-border; +$trade-fill-indicator: $specials_highlight-box; +$trade-fill-indicator-text: var( + --labels_secondary-inactive-label-text-graphics +); + +$sparkline-fill: var(--calculated_trading_buying-sparkline-fill); +$negative-sparkline-fill: var(--calculated_trading_selling-sparkline-fill); +$selling-orderbook-bar: var(--calculated_trading_selling-orderbook-bar); +$buying-orderbook-bar: var(--calculated_trading_buying-orderbook-bar); +$buy-bids-text: var(--calculated_trading_buying-related-text); +$sell-bids-text: var(--calculated_trading_selling-related-text); +$base_top-bar-navigation_text: var(--calculated_base_top-bar-navigation_text); +$base_top-bar-navigation_text-inactive: var( + --calculated_base_top-bar-navigation_text-inactive +); +$base_footer_text: var(--calculated_base_footer_text); + +// form field colors +$form-color-underline-focus: var( + --labels_important-active-labels-text-graphics +); +$form-color-underline: var(--labels_secondary-inactive-label-text-graphics); +$form-color-placeholder: var(--labels_secondary-inactive-label-text-graphics); +$form-arrow: var(--labels_important-active-labels-text-graphics); +$form-label: var(--labels_important-active-labels-text-graphics); + +// theme tabs +$tab-active: var(--labels_important-active-labels-text-graphics); +$tab-inactive: var(--labels_secondary-inactive-label-text-graphics); +$sidebar-color: var(--labels_secondary-inactive-label-text-graphics); +$sidebar-color-active: var(--labels_important-active-labels-text-graphics); +$info-panel-background: var(--labels_fields); +$info-panel-text: var(--labels_secondary-inactive-label-text-graphics); +$icon-hover: var(--labels_important-active-labels-text-graphics); +$icon-unhover: var(--labels_secondary-inactive-label-text-graphics); +$trade-tabs-inactive-color: var( + --labels_secondary-inactive-label-text-graphics +); + +// theme footer +$footer-background-color: var(--base_footer); + +// chat color +$chat-message-background-even: var(--base_background); +$chat-message-background-odd: var(--base_secondary-navigation-bar); +$chat-message-color: var(--specials_chat-messages); +$chat-box-border: $colors-main-border; // this is for transaction history- ToDo: need to customize for common theme -$history-color-buy: var(--history-color-buy); -$history-color-sell: var(--history-color-sell); - -// colors for dark theme -$colors-username-set-dark: var(--colors-username-set-dark); - -$dark-app-background-color: var(--dark-app-background-color); -$dark-app-light-background: var(--dark-app-light-background); -$dark-app-sidebar-background: var(--dark-app-sidebar-background); -$dark-auth-container-background: var(--dark-auth-container-background); -$dark-quick-trade-background: var(--dark-quick-trade-background); -$dark-quick-trade-container: var(--dark-quick-trade-container); -$dark-app-modal-background: var(--dark-app-modal-background); -$dark-app-bar-background-color: var(--dark-app-bar-background-color); -$dark-app-line-divider: var(--dark-app-line-divider); -// $dark-app-link-highlight: #ed507b; -$dark-box-fields: var(--dark-box-fields); -$dark-buy: var(--dark-buy); -$dark-sell: var(--dark-sell); -$dark-color-sell-btc-light: var(--dark-color-sell-btc-light); -$dark-link: var(--dark-link); -$dark-trade-fields: var(--dark-trade-fields); -$dark-trade-fields-border: var(--dark-trade-fields-border); -$dark-trade-fill-indicator: var(--dark-trade-fill-indicator); -$dark-buy-bids-text: var(--dark-buy-bids-text); -$dark-sell-asks-text: var(--dark-sell-asks-text); -$dark-app-logo-color: var(--dark-app-logo-color); -// dark-border-button -$dark-border-main: var(--dark-border-main); -$dark-inactive-color: var(--dark-inactive-color); -$dark-icon-color: var(--dark-icon-color); -$dark-font-main-text-color: var(--dark-font-main-text-color); -$dark-font-sub-text-color: var(--dark-font-sub-text-color); -$dark-font-sub-text-1-color: var(--dark-font-sub-text-1-color); -$dark-button-active: var(--dark-button-active); -$dark-button-text: var(--dark-button-text); -$dark-button-disabled: var(--dark-button-disabled); -$dark-button-text-disabled: var(--dark-button-text-disabled); -// dark-form-fields -$dark-form-color-underline-focus: var(--dark-form-color-underline-focus); -$dark-form-color-underline: var(--dark-form-color-underline); -$dark-form-placeholder: var(--dark-form-placeholder); -$dark-form-arrow: var(--dark-form-arrow); -$dark-form-label: var(--dark-form-label); -$dark-form-text-disabled: var(--dark-form-text-disabled); -$dark-form-text: var(--dark-form-text); -// dark-tabs -$dark-tab-active: var(--dark-tab-active); -$dark-tab-inactive: var(--dark-tab-inactive); -$dark-sidebar-color: var(--dark-sidebar-color); -$dark-sidebar-color-active: var(--dark-sidebar-color-active); -$dark-info-panel-background: var(--dark-info-panel-background); -$dar-info-panel-text: var(--dar-info-panel-text); -$dark-icon-hover: var(--dark-icon-hover); -$dark-icon-unhover: var(--dark-icon-unhover); -$dark-tab-notification: var(--dark-tab-notification); // need to check this -$dark-disabled-main: var(--dark-disabled-main); -$dark-disabled-secondary: var(--dark-disabled-secondary); -$dark-trade-row-highlight: var(--dark-trade-row-highlight); +$history-color-buy: var(--trading_buying-related-elements); +$history-color-sell: var(--trading_selling-related-elements); + +// remaining dark colors +$dark-app-background-color: var(--base_background); +$dark-app-line-divider: $colors-super-pale-black; +$dark-border-main: $colors-main-border; +$dark-inactive-color: var(--labels_secondary-inactive-label-text-graphics); +$dark-font-sub-text-color: var(--labels_secondary-inactive-label-text-graphics); +$dark-font-sub-text-1-color: var( + --labels_secondary-inactive-label-text-graphics +); $dark-accordion-arrow-active: var(--dark-accordion-arrow-active); -$dark-accordion-arrow-inactive: var(--dark-accordion-arrow-inactive); -// $dark-trade-text-highlight: #838383; - -// dark theme footer -$dark-footer-background-color: var(--dark-footer-background-color); -// colors for chat -$dark-chat-message-background-even: var(--dark-chat-message-background-even); -$dark-chat-message-background-odd: var(--dark-chat-message-background-odd); -$dark-chat-message-color: var(--dark-chat-message-color); -$dark-chat-box-border: var(--dark-chat-box-border); - -// main title icons fill(quick trade, deposit, withdrawal) -$dark-main-title-icon-color-1: $dark-app-bar-background-color; -$dark-main-title-icon-color-2: $dark-icon-color; -$dark-main-title-icon-color-3: $dark-icon-color; - // coins for white theme // fiat coins @@ -239,7 +196,7 @@ $coin-xrp: var(--coin-xrp); $coin-xrp-1: var(--coin-xrp); $coin-xrp-text: var(--coin-xrp-text); $coin-xht: var(--coin-xht); -$coin-xht-1:var(--coin-xht); +$coin-xht-1: var(--coin-xht); $coin-xht-text: var(--coin-xht-text); $coin-eos: var(--coin-eos); $coin-eos-1: var(--coin-eos); @@ -332,157 +289,6 @@ $coin-dai: var(--coin-dai); $coin-dai-1: var(--coin-dai); $coin-dai-text: var(--coin-dai-text); -// coins for dark theme -// fiat coins -$dark-coin-eur: var(--dark-coin-eur); -$dark-coin-eur-1: var(--dark-coin-eur); -$dark-coin-eur-text: var(--dark-coin-eur-text); -$dark-coin-usd: var(--dark-coin-usd); -$dark-coin-usd-1: var(--dark-coin-usd); -$dark-coin-usd-text: var(--dark-coin-usd-text); -$dark-coin-jpy: var(--dark-coin-jpy); -$dark-coin-jpy-1: var(--dark-coin-jpy); -$dark-coin-jpy-text: var(--dark-coin-jpy-text); -$dark-coin-gbp: var(--dark-coin-gbp); -$dark-coin-gbp-1: var(--dark-coin-gbp); -$dark-coin-gbp-text: var(--dark-coin-gbp-text); -$dark-coin-chf: var(--dark-coin-chf); -$dark-coin-chf-1: var(--dark-coin-chf); -$dark-coin-chf-text: var(--dark-coin-chf-text); -$dark-coin-cad: var(--dark-coin-cad); -$dark-coin-cad-1: var(--dark-coin-cad); -$dark-coin-cad-text: var(--dark-coin-cad-text); -$dark-coin-aud: var(--dark-coin-aud); -$dark-coin-aud-1: var(--dark-coin-aud); -$dark-coin-aud-text: var(--dark-coin-aud-text); -$dark-coin-nzd: var(--dark-coin-nzd); -$dark-coin-nzd-1: var(--dark-coin-nzd); -$dark-coin-nzd-text: var(--dark-coin-nzd-text); -$dark-coin-zar: var(--dark-coin-zar); -$dark-coin-zar-1: var(--dark-coin-zar); -$dark-coin-zar-text: var(--dark-coin-zar-text); -$dark-coin-hkd: var(--dark-coin-hkd); -$dark-coin-hkd-1: var(--dark-coin-hkd); -$dark-coin-hkd-text: var(--dark-coin-hkd-text); -$dark-coin-krw: var(--dark-coin-krw); -$dark-coin-krw-1: var(--dark-coin-krw); -$dark-coin-krw-text: var(--dark-coin-krw-text); -$dark-coin-cny: var(--dark-coin-cny); -$dark-coin-cny-1: var(--dark-coin-cny); -$dark-coin-cny-text: var(--dark-coin-cny-text); -$dark-coin-sgd: var(--dark-coin-sgd); -$dark-coin-sgd-1: var(--dark-coin-sgd); -$dark-coin-sgd-text: var(--dark-coin-sgd-text); -// crypto coins -$dark-coin-btc: var(--dark-coin-btc); -$dark-coin-btc-1: var(--dark-coin-btc); -$dark-coin-btc-text: var(--dark-coin-btc-text); -$dark-coin-eth: var(--dark-coin-eth); -$dark-coin-eth-1: var(--dark-coin-eth); -$dark-coin-eth-text: var(--dark-coin-eth-text); -$dark-coin-ltc: var(--dark-coin-ltc); -$dark-coin-ltc-1: var(--dark-coin-ltc); -$dark-coin-ltc-text: var(--dark-coin-ltc-text); -$dark-coin-bch: var(--dark-coin-bch); -$dark-coin-bch-1: var(--dark-coin-bch); -$dark-coin-bch-text: var(--dark-coin-bch-text); -$dark-coin-xrp: var(--dark-coin-xrp); -$dark-coin-xrp-1: var(--dark-coin-xrp); -$dark-coin-xrp-text: var(--dark-coin-xrp-text); -$dark-coin-xht: var(--dark-coin-xht); -$dark-coin-xht-1:var(--dark-coin-xht); -$dark-coin-xht-text:var(--dark-coin-xht-text); -$dark-coin-eos: var(--dark-coin-eos); -$dark-coin-eos-1: var(--dark-coin-eos); -$dark-coin-eos-text: var(--dark-coin-eos-text); -$dark-coin-bnb: var(--dark-coin-bnb); -$dark-coin-bnb-1: var(--dark-coin-bnb); -$dark-coin-bnb-text: var(--dark-coin-bnb-text); -$dark-coin-link: var(--dark-coin-link); -$dark-coin-link-1: var(--dark-coin-link); -$dark-coin-link-text: var(--dark-coin-link-text); -$dark-coin-trx: var(--dark-coin-trx); -$dark-coin-trx-1: var(--dark-coin-trx); -$dark-coin-trx-text: var(--dark-coin-trx-text); -$dark-coin-ada: var(--dark-coin-ada); -$dark-coin-ada-1: var(--dark-coin-ada); -$dark-coin-ada-text: var(--dark-coin-ada-text); -$dark-coin-matic: var(--dark-coin-matic); -$dark-coin-matic-1: var(--dark-coin-matic); -$dark-coin-matic-text: var(--dark-coin-matic-text); -$dark-coin-neo: var(--dark-coin-neo); -$dark-coin-neo-1: var(--dark-coin-neo); -$dark-coin-neo-text: var(--dark-coin-neo-text); -$dark-coin-etc: var(--dark-coin-etc); -$dark-coin-etc-1: var(--dark-coin-etc); -$dark-coin-etc-text: var(--dark-coin-etc-text); -$dark-coin-xlm: var(--dark-coin-xlm); -$dark-coin-xlm-1: var(--dark-coin-xlm); -$dark-coin-xlm-text: var(--dark-coin-xlm-text); -$dark-coin-xmr: var(--dark-coin-xmr); -$dark-coin-xmr-1: var(--dark-coin-xmr); -$dark-coin-xmr-text: var(--dark-coin-xmr-text); -$dark-coin-zec: var(--dark-coin-zec); -$dark-coin-zec-1: var(--dark-coin-zec); -$dark-coin-zec-text: var(--dark-coin-zec-text); -$dark-coin-one: var(--dark-coin-one); -$dark-coin-one-1: var(--dark-coin-one); -$dark-coin-one-text: var(--dark-coin-one-text); -$dark-coin-pax: var(--dark-coin-pax); -$dark-coin-pax-1: var(--dark-coin-pax); -$dark-coin-pax-text: var(--dark-coin-pax-text); -$dark-coin-usdc: var(--dark-coin-usdc); -$dark-coin-usdc-1: var(--dark-coin-usdc); -$dark-coin-usdc-text: var(--dark-coin-usdc-text); -$dark-coin-usdt: var(--dark-coin-usdt); -$dark-coin-usdt-1: var(--dark-coin-usdt); -$dark-coin-usdt-text: var(--dark-coin-usdt-text); -$dark-coin-vet: var(--dark-coin-vet); -$dark-coin-vet-1: var(--dark-coin-vet); -$dark-coin-vet-text: var(--dark-coin-vet-text); -$dark-coin-btt: var(--dark-coin-btt); -$dark-coin-btt-1: var(--dark-coin-btt); -$dark-coin-btt-text: var(--dark-coin-btt-text); -$dark-coin-qtum: var(--dark-coin-qtum); -$dark-coin-qtum-1: var(--dark-coin-qtum); -$dark-coin-qtum-text: var(--dark-coin-qtum-text); -$dark-coin-algo: var(--dark-coin-algo); -$dark-coin-algo-1: var(--dark-coin-algo); -$dark-coin-algo-text: var(--dark-coin-algo-text); -$dark-coin-rvn: var(--dark-coin-rvn); -$dark-coin-rvn-1: var(--dark-coin-rvn); -$dark-coin-rvn-text: var(--dark-coin-rvn-text); -$dark-coin-iota: var(--dark-coin-iota); -$dark-coin-iota-1: var(--dark-coin-iota); -$dark-coin-iota-text: var(--dark-coin-iota-text); -$dark-coin-dash: var(--dark-coin-dash); -$dark-coin-dash-1: var(--dark-coin-dash); -$dark-coin-dash-text: var(--dark-coin-dash-text); -$dark-coin-bsv: var(--dark-coin-bsv); -$dark-coin-bsv-1: var(--dark-coin-bsv); -$dark-coin-bsv-text: var(--dark-coin-bsv-text); -$dark-coin-ont: var(--dark-coin-ont); -$dark-coin-ont-1: var(--dark-coin-ont); -$dark-coin-ont-text: var(--dark-coin-ont-text); -$dark-coin-atom: var(--dark-coin-atom); -$dark-coin-atom-1: var(--dark-coin-atom); -$dark-coin-atom-text: var(--dark-coin-atom-text); -$dark-coin-celr: var(--dark-coin-celr); -$dark-coin-celr-1: var(--dark-coin-celr); -$dark-coin-celr-text: var(--dark-coin-celr-text); -$dark-coin-omg: var(--dark-coin-omg); -$dark-coin-omg-1: var(--dark-coin-omg); -$dark-coin-omg-text: var(--dark-coin-omg-text); -$dark-coin-hot: var(--dark-coin-hot); -$dark-coin-hot-1: var(--dark-coin-hot); -$dark-coin-hot-text: var(--dark-coin-hot-text); -$dark-coin-tusd: var(--dark-coin-tusd); -$dark-coin-tusd-1: var(--dark-coin-tusd); -$dark-coin-tusd-text: var(--dark-coin-tusd-text); -$dark-coin-dai: var(--dark-coin-dai); -$dark-coin-dai-1: var(--dark-coin-dai); -$dark-coin-dai-text: var(--dark-coin-dai-text); - $content-display-width: 100rem; $app-content-display-width: 75rem; $content-display-vertical-margin: 1rem; @@ -508,11 +314,6 @@ $raleway-medium--font-family: 'Raleway Medium'; $raleway-light--font-family: 'Raleway Light'; $title--font-family: $raleway-extrabold--font-family; -$backgound-pattern: '/assets/pattern-grey.jpg'; -$background-image: '/assets/background.png'; -$background-image-dark: '/assets/HollaEx-dark-theme.jpg'; -$dark-background-image: '/assets/dark-background.jpg'; - // DIALOG $dialog-min-width: 25rem; $dialog-min-height: 30rem; @@ -539,8 +340,6 @@ $sidebar-borderbottom-color: $colors-deactivate-color2; $sidebar-borderbottom-color-active: $colors-deactivate-color2; $sidebar-borderbottom-height: 4px; -$btc-color: $colors-currencies-btc; - $currency-color: inherit; // TAB CONTROLLER @@ -550,16 +349,24 @@ $tab-text-padding: 0 8px 8px; $tab-selected-line-height: 4px; // MOBILE +$market-selector--height: 3rem; $navigation_bar-mobile--height: 4rem; -$navigation_bar-mobile--background: $colors-main-black; -$dark-navigation_bar-mobile--background: white; +$navigation_bar-mobile--background: $app-bar-background-color; $bottom_bar--height: 6rem; $bottom-bar--background: $navigation_bar-mobile--background; -$dark-bottom-bar--background: $dark-navigation_bar-mobile--background; -$max-content-height-mobile: calc(100vh - #{$navigation_bar-mobile--height + $bottom-bar--height}); -$max-content-height-double-bar-mobile: calc(100vh - #{$navigation_bar-mobile--height * 2 + $bottom-bar--height}); -$max-content-height-home-mobile: calc(100vh - #{$navigation_bar-mobile--height}); -$max-content-height-dialog-mobile: calc(100vh - #{$navigation_bar-mobile--height * 2}); +$max-content-height-mobile: calc( + 100vh - #{$navigation_bar-mobile--height + $bottom-bar--height} +); +$max-content-height-double-bar-mobile: calc( + 100vh - #{$navigation_bar-mobile--height * 2 + $bottom-bar--height + + $market-selector--height} +); +$max-content-height-home-mobile: calc( + 100vh - #{$navigation_bar-mobile--height} +); +$max-content-height-dialog-mobile: calc( + 100vh - #{$navigation_bar-mobile--height * 2} +); $max-content-width-mobile: 100vw; $table-header-column--font-size: 1rem; $regular--font-size: 1.2rem; @@ -573,5 +380,7 @@ $input--height: 4.5rem; $max-content-height: calc(100vh - #{$navigation_bar-height}); $max-content-secondary-height: calc(100vh - #{$navigation_bar-height * 2}); $max-content-height-lg: calc(100vh - #{$navigation_bar-height-lg}); -$max-content-secondary-height-lg: calc(100vh - #{$navigation_bar-height-lg * 2}); +$max-content-secondary-height-lg: calc( + 100vh - #{$navigation_bar-height-lg * 2} +); $max-width-content: 50rem; diff --git a/web/src/actions/appActions.js b/web/src/actions/appActions.js index 2d8db19fa4..aab7e0f036 100644 --- a/web/src/actions/appActions.js +++ b/web/src/actions/appActions.js @@ -1,5 +1,5 @@ import { setLanguage as storeLanguageInBrowser } from '../utils/string'; -import { DEFAULT_LANGUAGE, LANGUAGE_KEY , WS_URL} from '../config/constants'; +import { DEFAULT_LANGUAGE, LANGUAGE_KEY } from '../config/constants'; import axios from 'axios'; export const SET_NOTIFICATION = 'SET_NOTIFICATION'; @@ -27,7 +27,7 @@ export const NOTIFICATIONS = { INVITE_FRIENDS: 'INVITE_FRIENDS', STAKE_TOKEN: 'STAKE_TOKEN', DEPOSIT_INFO: 'DEPOSIT_INFO', - XHT_SUCCESS_ACCESS: 'XHT_SUCCESS_ACCESS' + XHT_SUCCESS_ACCESS: 'XHT_SUCCESS_ACCESS', }; export const CONTACT_FORM = 'CONTACT_FORM'; export const HELPFUL_RESOURCES_FORM = 'HELPFUL_RESOURCES_FORM'; @@ -49,23 +49,25 @@ export const SET_CURRENCIES = 'SET_CURRENCIES'; export const SET_CONFIG = 'SET_CONFIG'; export const REQUEST_XHT_ACCESS = 'REQUEST_XHT_ACCESS'; export const SET_INFO = 'SET_INFO'; -export const SET_VALID_BASE_CURRENCY = 'SET_VALID_BASE_CURRENCY'; export const SET_WAVE_AUCTION = 'SET_WAVE_AUCTION'; export const SET_PLUGINS_REQUEST = 'SET_PLUGINS_REQUEST'; export const SET_PLUGINS_SUCCESS = 'SET_PLUGINS_SUCCESS'; export const SET_PLUGINS_FAILURE = 'SET_PLUGINS_FAILURE'; +export const SET_CONFIG_LEVEL = 'SET_CONFIG_LEVEL'; +export const ADD_TO_FAVOURITES = 'ADD_TO_FAVOURITES'; +export const REMOVE_FROM_FAVOURITES = 'REMOVE_FROM_FAVOURITES'; export const USER_TYPES = { USER_TYPE_NORMAL: 'normal', USER_TYPE_ADMIN: 'admin', - USER_TYPE_HAP: 'hap' + USER_TYPE_HAP: 'hap', }; export const MESSAGE_TYPES = { MESSAGE_TYPE_NORMAL: 'normal', MESSAGE_TYPE_REPLY: 'reply', MESSAGE_TYPE_ANNOUNCEMENT: 'announcement', - MESSAGE_TYPE_IMAGE: 'image' + MESSAGE_TYPE_IMAGE: 'image', }; export const setNotification = (type = '', data = {}, show = true) => ({ @@ -74,38 +76,38 @@ export const setNotification = (type = '', data = {}, show = true) => ({ type, data, show, - timestamp: Date.now() - } + timestamp: Date.now(), + }, }); export const closeNotification = () => ({ type: CLOSE_NOTIFICATION, - payload: {} + payload: {}, }); export const closeAllNotification = () => ({ type: CLOSE_ALL_NOTIFICATION, - payload: {} + payload: {}, }); export const setSnackNotification = (data = {}) => ({ type: SET_SNACK_NOTIFICATION, - payload: data + payload: data, }); export const closeSnackNotification = () => ({ type: CLOSE_SNACK_NOTIFICATION, - payload: {} + payload: {}, }); export const setSnackDialog = (data = {}) => ({ type: SET_SNACK_DIALOG, - payload: data + payload: data, }); export const closeSnackDialog = (id) => ({ type: CLOSE_SNACK_DIALOG, - payload: { dialogId: id } + payload: { dialogId: id }, }); export const openContactForm = (data = { helpdesk: '' }) => { @@ -123,8 +125,8 @@ export const setLanguage = (value = DEFAULT_LANGUAGE) => { return { type: CHANGE_LANGUAGE, payload: { - language - } + language, + }, }; }; @@ -144,47 +146,47 @@ export const sendSupportMail = (values = {}) => { return axios({ headers: { - 'Content-Type': 'multipart/form-data' + 'Content-Type': 'multipart/form-data', }, data: formData, url: '/support', - method: 'POST' + method: 'POST', }); }; export const setAnnouncements = (announcements) => ({ type: SET_ANNOUNCEMENT, payload: { - announcements - } + announcements, + }, }); export const setChatUnreadMessages = (chatUnreadMessages = 0) => ({ type: SET_UNREAD, payload: { - chatUnreadMessages - } + chatUnreadMessages, + }, }); export const changeTheme = (theme = '') => ({ type: CHANGE_THEME, payload: { - theme - } + theme, + }, }); export const setPairs = (pairs) => ({ type: SET_PAIRS, payload: { - pairs - } + pairs, + }, }); export const changePair = (pair) => ({ type: CHANGE_PAIR, payload: { - pair - } + pair, + }, }); export const getTickers = () => { @@ -192,7 +194,7 @@ export const getTickers = () => { axios.get('/ticker/all').then((res) => { dispatch({ type: SET_TICKERS, - payload: res.data + payload: res.data, }); }); }; @@ -200,54 +202,49 @@ export const getTickers = () => { export const setTickers = (data) => ({ type: SET_TICKER_FROM_TRADE, - payload: data + payload: data, }); export const setOrderLimits = (data) => ({ type: SET_ORDER_LIMITS, - payload: data + payload: data, }); export const setCurrencies = (coins) => ({ type: SET_CURRENCIES, payload: { - coins - } + coins, + }, }); export const setConfig = (constants = {}) => { - let config_level = []; let enabledPlugins = []; + let features = {}; if (constants) { - for (let i = 1; i <= parseInt(constants.user_level_number, 10); i++) { - config_level = [...config_level, i]; - } if (constants.plugins && constants.plugins.enabled) { enabledPlugins = constants.plugins.enabled.split(','); } } + if (constants) { + if (constants.features) { + features = constants.features; + } + } return { type: SET_CONFIG, payload: { constants, - config_level, - enabledPlugins - } + enabledPlugins, + features, + }, }; }; export const setInfo = (info) => ({ type: SET_INFO, payload: { - info - } -}); - -export const setValidBaseCurrency = (isValidBase) => ({ - type: SET_VALID_BASE_CURRENCY, - payload: { - isValidBase - } + info, + }, }); export const openFeesStructureandLimits = (data = {}) => @@ -259,28 +256,30 @@ export const openRiskPortfolioOrderWarning = (data = {}) => export const logoutconfirm = (data = {}) => setNotification(LOGOUT_CONFORMATION, data, true); +export const requestInitial = () => axios.get('/kit'); +export const requestConstant = () => axios.get('/constants'); +export const requestAdminData = () => axios.get('/admin/kit'); + export const getExchangeInfo = () => { return (dispatch) => { - axios.get('/constant').then((res) => { + axios.get('/kit').then((res) => { if (res && res.data) { - if (res.data.constants) { - dispatch(setConfig(res.data.constants)); - if (res.data.constants.defaults) { - const themeColor = localStorage.getItem('theme'); - const language = localStorage.getItem(LANGUAGE_KEY); - if (!themeColor && res.data.constants.defaults.theme) { - dispatch(changeTheme(res.data.constants.defaults.theme)); - localStorage.setItem('theme', res.data.constants.defaults.theme); - } - if (!language && res.data.constants.defaults.language) { - dispatch(setLanguage(res.data.constants.defaults.language)); - } + dispatch(setConfig(res.data)); + if (res.data.defaults) { + const themeColor = localStorage.getItem('theme'); + const language = localStorage.getItem(LANGUAGE_KEY); + if (!themeColor && res.data.defaults.theme) { + dispatch(changeTheme(res.data.defaults.theme)); + localStorage.setItem('theme', res.data.defaults.theme); + } + if (!language && res.data.defaults.language) { + dispatch(setLanguage(res.data.defaults.language)); } } if (res.data.info) { dispatch({ type: SET_INFO, - payload: { info: { ...res.data.info, status: res.data.status } } + payload: { info: { ...res.data.info } }, }); } } @@ -294,38 +293,63 @@ export const getWaveAuction = () => { if (res && res.data && res.data.data) { dispatch({ type: SET_WAVE_AUCTION, - payload: { data: res.data.data } + payload: { data: res.data.data }, }); } }); }; }; -export const getAnnouncement = () => dispatch => { - return axios({ - url: `${WS_URL}/plugins/announcements`, - method: 'GET' - }).then((res) => { - if (res.data && res.data.data) { - dispatch({ type: SET_APP_ANNOUNCEMENT, payload: { announcements: res.data.data } }); - } - }) - .catch((err) => {}); +export const getAnnouncement = () => (dispatch) => { + return axios + .get('/plugins/announcement') + .then((res) => { + if (res.data && res.data.data) { + dispatch({ + type: SET_APP_ANNOUNCEMENT, + payload: { announcements: res.data.data }, + }); + } + }) + .catch((err) => {}); }; -export const requestAvailPlugins = () => dispatch => { +export const requestAvailPlugins = () => (dispatch) => { dispatch({ type: SET_PLUGINS_REQUEST }); - return axios({ - url: `${WS_URL}/plugins`, - method: 'GET' - }).then((res) => { - if (res.data) { - let available = res.data.available ? [...res.data.available] : []; - let enabled = res.data.enabled.filter((val) => !available.includes(val)); - dispatch({ type: SET_PLUGINS_SUCCESS, payload: [...available, ...enabled] }); - } - }).catch(err => { - dispatch({ type: SET_PLUGINS_FAILURE }); - }); + return axios + .get('/plugins') + .then((res) => { + if (res.data) { + let available = res.data.available ? [...res.data.available] : []; + let enabled = res.data.enabled.filter( + (val) => !available.includes(val) + ); + dispatch({ + type: SET_PLUGINS_SUCCESS, + payload: [...available, ...enabled], + }); + } + }) + .catch((err) => { + dispatch({ type: SET_PLUGINS_FAILURE }); + }); }; +export const requestTiers = () => (dispatch) => { + return axios + .get('/tiers') + .then((res) => { + dispatch({ type: SET_CONFIG_LEVEL, payload: res.data }); + }) + .catch((err) => {}); +}; + +export const addToFavourites = (payload) => ({ + type: ADD_TO_FAVOURITES, + payload, +}); + +export const removeFromFavourites = (payload) => ({ + type: REMOVE_FROM_FAVOURITES, + payload, +}); diff --git a/web/src/actions/assetActions.js b/web/src/actions/assetActions.js new file mode 100644 index 0000000000..f08bc08f3a --- /dev/null +++ b/web/src/actions/assetActions.js @@ -0,0 +1,68 @@ +import axios from 'axios'; +import { BASE_CURRENCY, DEFAULT_COIN_DATA } from 'config/constants'; +import { + calculateBalancePrice, + calculateOraclePrice, + calculatePricePercentage, + formatToCurrency, + donutFormatPercentage, +} from 'utils/currency'; + +export const SET_PRICES_AND_ASSET = 'SET_PRICES_AND_ASSET'; + +export const setPricesAndAsset = (balance, coins) => { + return (dispatch) => { + getPrices({ coins }).then((prices) => { + const totalAsset = calculateBalancePrice(balance, prices, coins); + + dispatch({ + type: SET_PRICES_AND_ASSET, + payload: { + oraclePrices: prices, + totalAsset, + chartData: generateChartData(balance, prices, coins, totalAsset), + }, + }); + }); + }; +}; + +const ENDPOINTS = { + GET_PRICE: '/oracle/prices', +}; + +export const getPrices = async ({ + amount = 1, + quote = BASE_CURRENCY, + coins = {}, +}) => { + const assets = Object.keys(coins).join(); + const { data: prices = {} } = await axios.get(ENDPOINTS.GET_PRICE, { + params: { amount, quote, assets }, + }); + return prices; +}; + +export const generateChartData = (balance, prices, coins, totalAsset) => { + const data = []; + + Object.keys(coins).forEach((currency) => { + const { symbol, min } = coins[currency] || DEFAULT_COIN_DATA; + const currencyBalance = calculateOraclePrice( + balance[`${symbol}_balance`], + prices[symbol] + ); + const balancePercent = calculatePricePercentage( + currencyBalance, + totalAsset + ); + data.push({ + ...coins[currency], + balance: balancePercent, + balanceFormat: formatToCurrency(currencyBalance, min), + balancePercentage: donutFormatPercentage(balancePercent), + }); + }); + + return data; +}; diff --git a/web/src/actions/authAction.js b/web/src/actions/authAction.js index 446445e451..9ba009d017 100644 --- a/web/src/actions/authAction.js +++ b/web/src/actions/authAction.js @@ -19,13 +19,13 @@ export function checkVerificationCode(data) { .then((response) => { dispatch({ type: 'CHECK_VERIFICATION_CODE_FULFILLED', - payload: response.data + payload: response.data, }); }) .catch((error) => { dispatch({ type: 'CHECK_VERIFICATION_CODE_REJECTED', - payload: error.response.data + payload: error.response.data, }); }); }; @@ -39,13 +39,13 @@ export function verifyVerificationCode(data) { .then((response) => { dispatch({ type: 'VERIFY_VERIFICATION_CODE_FULFILLED', - payload: response.data + payload: response.data, }); }) .catch((error) => { dispatch({ type: 'VERIFY_VERIFICATION_CODE_REJECTED', - payload: error.response.data + payload: error.response.data, }); }); }; @@ -53,19 +53,19 @@ export function verifyVerificationCode(data) { export const performLogin = (values) => axios.post('/login', values).then((res) => { - storeLoginResult(res.data.token); + storeLoginResult(res.data.token); return res; }); -export const storeLoginResult = token => { +export const storeLoginResult = (token) => { if (token) { setTokenInApp(token, true); store.dispatch({ type: 'VERIFY_TOKEN_FULFILLED', - payload: token + payload: token, }); } -} +}; export const performSignup = (values) => axios.post('/signup', values); @@ -88,16 +88,16 @@ export function verifyToken(token) { dispatch({ type: 'VERIFY_TOKEN_PENDING' }); axios({ method: 'GET', - url: '/verify_token', + url: '/verify-token', headers: { - Authorization: `Bearer ${token}` - } + Authorization: `Bearer ${token}`, + }, }) .then((response) => { setTokenInApp(token); dispatch({ type: 'VERIFY_TOKEN_FULFILLED', - payload: token + payload: token, }); }) .catch((error) => { @@ -106,7 +106,7 @@ export function verifyToken(token) { : 'Invalid token'; logout(message)(dispatch); dispatch({ - type: 'VERIFY_TOKEN_REJECTED' + type: 'VERIFY_TOKEN_REJECTED', }); cleatTokenInApp(browserHistory, '/login'); }); @@ -117,8 +117,8 @@ export const logout = (message = '') => (dispatch) => { dispatch({ type: 'LOGOUT', payload: { - message - } + message, + }, }); cleatTokenInApp(browserHistory, message ? '/login' : '/'); }; @@ -126,15 +126,15 @@ export const logout = (message = '') => (dispatch) => { export const setLogoutMessage = (message = '') => ({ type: 'SET_LOGOUT_MESSAGE', payload: { - message - } + message, + }, }); export function loadToken() { let token = getToken(); return { type: 'LOAD_TOKEN', - payload: token + payload: token, }; } @@ -147,3 +147,10 @@ export const requestResetPassword = (values) => { }; export const resetPassword = (data) => axios.post('/reset-password', data); + +export const storeAdminKey = (data) => + axios.put('/admin/network-credentials', data); + +export const adminSignup = (data) => axios.post('/admin/signup', data); + +export const adminLogIn = (data) => axios.post('/login ', data); diff --git a/web/src/actions/chartAction.js b/web/src/actions/chartAction.js index 77318f90e5..473604babf 100644 --- a/web/src/actions/chartAction.js +++ b/web/src/actions/chartAction.js @@ -1,7 +1,7 @@ import axios from 'axios'; import math from 'mathjs'; - -import { getDecimals } from '../utils/utils' +import moment from 'moment'; +import { getDecimals } from '../utils/utils'; export const getChartConfig = () => { // return axios({ @@ -13,11 +13,11 @@ export const getChartConfig = () => { supports_group_request: false, supports_marks: false, supports_search: true, - supports_timescale_marks: false + supports_timescale_marks: false, }; return new Promise((resolve) => { resolve(config); - }) + }); }; export const getChartSymbol = (symbol, tickSize, api_name = '') => { @@ -41,15 +41,41 @@ export const getChartSymbol = (symbol, tickSize, api_name = '') => { session: '24x7', regular_session: '24x7', pricescale, + minmov: 1, volume_precision: 4, - has_empty_bars: true + has_empty_bars: true, }); - }) + }); }; -export const getChartHistory = (symbol, resolution, from, to, firstDataRequest) => { +export const getChartHistory = ( + symbol, + resolution, + from, + to, + firstDataRequest +) => { return axios({ url: `/chart?symbol=${symbol}&resolution=${resolution}&from=${from}&to=${to}`, - method: 'GET' + method: 'GET', }); -}; \ No newline at end of file +}; + +export const getSparklines = async () => { + const from = moment().subtract('1', 'month').format('X'); + const to = moment().format('X'); + + const { data = {} } = await axios({ + url: `/charts?resolution=D&from=${from}&to=${to}`, + method: 'GET', + }); + + const chartData = {}; + Object.entries(data).forEach(([pairKey, pairData = []]) => { + chartData[pairKey] = {}; + chartData[pairKey]['close'] = pairData.map(({ close }) => close); + chartData[pairKey]['open'] = (pairData[0] && pairData[0]['open']) || 0; + }); + + return chartData; +}; diff --git a/web/src/actions/operatorActions.js b/web/src/actions/operatorActions.js new file mode 100644 index 0000000000..baaadb6f79 --- /dev/null +++ b/web/src/actions/operatorActions.js @@ -0,0 +1,66 @@ +import axios from 'axios'; +import { requestAuthenticated } from 'utils'; + +export const updateConfigs = async (configs) => { + const { valid_languages, defaults, ...restConfigs } = configs; + const versionedConfigs = await pushVersions(restConfigs); + + const constants = { + kit: { + valid_languages, + defaults, + ...versionedConfigs, + }, + }; + + const options = { + method: 'PUT', + body: JSON.stringify(constants), + }; + + return requestAuthenticated('/admin/kit', options); +}; + +export const getKitData = async () => { + const { data } = await axios.get('/kit'); + return data; +}; + +export const getVersions = async () => { + const { + data: { meta = {} }, + } = await axios.get('/kit'); + return meta.versions ? meta.versions : {}; +}; + +export const publish = async (configs = {}) => { + const { icons = {} } = configs; + const { dark: { EXCHANGE_LOGO: logo_image } = {} } = icons; + + await updateConfigs({ + ...configs, + ...(logo_image ? { logo_image } : {}), + }); + console.info('Published Successfully'); +}; + +export const pushVersions = async (configs) => { + const versions = await getVersions(); + const uniqid = Date.now(); + Object.keys(configs).forEach((key) => { + versions[key] = `${key}-${uniqid}`; + }); + return { ...configs, meta: { versions } }; +}; + +export const upload = (formData) => { + const options = { + headers: { + 'Content-Type': 'multipart/form-data', + }, + data: formData, + method: 'POST', + }; + + return axios('/admin/upload', options); +}; diff --git a/web/src/actions/orderAction.js b/web/src/actions/orderAction.js index 2af2b02184..f11b7c25f8 100644 --- a/web/src/actions/orderAction.js +++ b/web/src/actions/orderAction.js @@ -1,5 +1,5 @@ import axios from 'axios'; -import { ICONS } from '../config/constants'; +import ICONS from 'config/icons'; import STRINGS from '../config/localizedStrings'; import { playBackgroundAudioNotification } from '../utils/utils'; @@ -7,67 +7,68 @@ import { playBackgroundAudioNotification } from '../utils/utils'; export function setUserOrders(orders) { return { type: 'SET_USER_ORDERS', - payload: orders + payload: orders, }; } export function addOrder(order) { return { type: 'ADD_ORDER', - payload: { order } + payload: { order }, }; } export function updateOrder(order) { return { type: 'UPDATE_ORDER', - payload: { order } + payload: { order }, }; } -export function removeOrder(ids) { +export function removeOrder(ids = {}) { return { type: 'REMOVE_ORDER', - payload: { ids: ids.map((item) => item.id) } + payload: { ids: [ids.id] }, }; } export const submitOrder = (order) => axios.post('/order', order); export const cancelOrder = (orderId, settings) => (dispatch) => { - axios.delete(`/user/orders/${orderId}`) + axios + .delete(`/order?order_id=${orderId}`) .then((data) => { dispatch({ type: 'CANCEL_ORDER', - payload: data + payload: data, }); playBackgroundAudioNotification('cancel_order', settings); dispatch({ type: 'SET_SNACK_NOTIFICATION', payload: { - icon: ICONS.CLOSE_CROSS, - content: STRINGS.CANCEL_SUCCESS_TEXT - } + icon: ICONS['CLOSE_CROSS'], + content: STRINGS['CANCEL_SUCCESS_TEXT'], + }, }); }) - .catch((err) => { - }) + .catch((err) => {}); }; -export const cancelAllOrders = (symbol = '', settings) => dispatch => { - axios.delete(`/user/orders?symbol=${symbol}`) +export const cancelAllOrders = (symbol = '', settings) => (dispatch) => { + axios + .delete(`/order/all?symbol=${symbol}`) .then((data) => { dispatch({ type: 'CANCEL_ALL_ORDERS', - payload: data + payload: data, }); playBackgroundAudioNotification('cancel_order', settings); dispatch({ type: 'SET_SNACK_NOTIFICATION', payload: { - icon: ICONS.CLOSE_CROSS, - content: STRINGS.CANCEL_SUCCESS_TEXT - } + icon: ICONS['CLOSE_CROSS'], + content: STRINGS['CANCEL_SUCCESS_TEXT'], + }, }); }) - .catch((err) => {}) + .catch((err) => {}); }; diff --git a/web/src/actions/orderbookAction.js b/web/src/actions/orderbookAction.js index 9aa5bca8f5..b94cb0b5ff 100644 --- a/web/src/actions/orderbookAction.js +++ b/web/src/actions/orderbookAction.js @@ -1,9 +1,10 @@ import axios from 'axios'; -import { playBackgroundAudioNotification } from '../utils/utils'; +import { playBackgroundAudioNotification } from '../utils/utils'; const QUICK_TRADE = 'QUICK_TRADE'; const TRADE_QUOTE_REQUEST = 'TRADE_QUOTE_REQUEST'; const TRADE_QUOTE_PERFORM = 'TRADE_QUOTE_PERFORM'; +const SET_ORDERBOOK_DEPTH = 'CHANGE_ORDERBOOK_DEPTH'; export const ORDERBOOK_CONSTANTS = { QUICK_TRADE_CANCEL: `${QUICK_TRADE}_CANCEL`, @@ -16,41 +17,49 @@ export const ORDERBOOK_CONSTANTS = { TRADE_QUOTE_REQUEST_REJECTED: `${TRADE_QUOTE_REQUEST}_REJECTED`, TRADE_QUOTE_PERFORM_PENDING: `${TRADE_QUOTE_PERFORM}_PENDING`, TRADE_QUOTE_PERFORM_FULFILLED: `${TRADE_QUOTE_PERFORM}_FULFILLED`, - TRADE_QUOTE_PERFORM_REJECTED: `${TRADE_QUOTE_PERFORM}_REJECTED` + TRADE_QUOTE_PERFORM_REJECTED: `${TRADE_QUOTE_PERFORM}_REJECTED`, + SET_ORDERBOOK_DEPTH, +}; + +export const setOrderbookDepth = (depth) => { + return { + type: SET_ORDERBOOK_DEPTH, + payload: depth, + }; }; export function getOrderbook() { return { type: 'GET_ORDERBOOK', - payload: axios.get('/orderbooks') + payload: axios.get('/orderbooks'), }; } export function setOrderbook(orderbook) { return { type: 'SET_ORDERBOOK', - payload: orderbook // set only for btc at the moment + payload: orderbook, // set only for btc at the moment }; } export function setOrderbooks(orderbooks) { return { type: 'SET_ORDERBOOKS_DATA', - payload: orderbooks + payload: orderbooks, }; } export function setTrades(trades) { return { type: 'SET_TRADES_DATA', - payload: trades + payload: trades, }; } export function getTrades() { return { type: 'GET_TRADES', - payload: axios.get('/trade') + payload: axios.get('/trade'), }; } @@ -59,42 +68,43 @@ export function addTrades(symbol, trades) { type: 'ADD_TRADES', payload: { symbol, - trades - } + trades, + }, }; } export const changeSymbol = (symbol) => ({ type: 'CHANGE_SYMBOL', payload: { - symbol - } + symbol, + }, }); export const requestQuickTrade = (data = {}) => { if (!data.size) { return { - type: ORDERBOOK_CONSTANTS.QUICK_TRADE_CANCEL + type: ORDERBOOK_CONSTANTS.QUICK_TRADE_CANCEL, }; } return (dispatch) => { dispatch({ - type: ORDERBOOK_CONSTANTS.QUICK_TRADE_PENDING + type: ORDERBOOK_CONSTANTS.QUICK_TRADE_PENDING, }); axios .post('/quick-trade', data) .then((body) => { dispatch({ type: ORDERBOOK_CONSTANTS.QUICK_TRADE_FULFILLED, - payload: body.data + payload: body.data, }); }) .catch((err) => { dispatch({ type: ORDERBOOK_CONSTANTS.QUICK_TRADE_REJECTED, - payload: err.response && err.response.data - ? err.response.data.message - : err.message + payload: + err.response && err.response.data + ? err.response.data.message + : err.message, }); }); }; @@ -103,19 +113,19 @@ export const requestQuickTrade = (data = {}) => { export const requestQuote = (data = {}) => { if (!data.size) { return { - type: ORDERBOOK_CONSTANTS.TRADE_QUOTE_REQUEST_CANCEL + type: ORDERBOOK_CONSTANTS.TRADE_QUOTE_REQUEST_CANCEL, }; } return (dispatch) => { dispatch({ - type: ORDERBOOK_CONSTANTS.TRADE_QUOTE_REQUEST_PENDING + type: ORDERBOOK_CONSTANTS.TRADE_QUOTE_REQUEST_PENDING, }); axios .post('/order/quote', data) .then((body) => { dispatch({ type: ORDERBOOK_CONSTANTS.TRADE_QUOTE_REQUEST_FULFILLED, - payload: body.data + payload: body.data, }); }) .catch((err) => { @@ -126,8 +136,8 @@ export const requestQuote = (data = {}) => { message: err.response && err.response.data ? err.response.data.message - : err.message - } + : err.message, + }, }); }); }; @@ -136,21 +146,21 @@ export const requestQuote = (data = {}) => { export const executeQuote = (token, settings) => { return (dispatch) => { dispatch({ - type: ORDERBOOK_CONSTANTS.TRADE_QUOTE_PERFORM_PENDING + type: ORDERBOOK_CONSTANTS.TRADE_QUOTE_PERFORM_PENDING, }); axios .post(`/order/quote/${token}`, {}) .then((body) => { dispatch({ type: ORDERBOOK_CONSTANTS.TRADE_QUOTE_PERFORM_FULFILLED, - payload: body.data + payload: body.data, }); playBackgroundAudioNotification('quick_trade_complete', settings); }) .catch((err) => { dispatch({ type: ORDERBOOK_CONSTANTS.TRADE_QUOTE_PERFORM_REJECTED, - payload: err.response ? err.response.data.message : err.message + payload: err.response ? err.response.data.message : err.message, }); }); }; @@ -159,6 +169,6 @@ export const executeQuote = (token, settings) => { export const setPairsData = (pairs) => ({ type: 'SET_PAIRS_DATA', payload: { - pairs - } + pairs, + }, }); diff --git a/web/src/actions/userAction.js b/web/src/actions/userAction.js index 8b87a9061f..bb9e8ff63d 100644 --- a/web/src/actions/userAction.js +++ b/web/src/actions/userAction.js @@ -1,49 +1,48 @@ import axios from 'axios'; -import { WS_URL } from '../config/constants'; export function getMe() { return { type: 'GET_ME', - payload: axios.get('/user') + payload: axios.get('/user'), }; } export function setMe(user) { return { type: 'SET_ME', - payload: user + payload: user, }; } export const setUserData = (data) => ({ type: 'SET_USER_DATA', - payload: data + payload: data, }); export function setBalance(balance) { return { type: 'SET_BALANCE', - payload: balance + payload: balance, }; } export function processWithdraw(data) { return (dispatch) => { dispatch({ - type: 'PROCESS_WITHDRAW_PENDING' + type: 'PROCESS_WITHDRAW_PENDING', }); axios .post('/withdraw', data) .then((res) => { dispatch({ type: 'PROCESS_WITHDRAW_FULFILLED', - payload: res + payload: res, }); }) .catch((err) => { dispatch({ type: 'PROCESS_WITHDRAW_REJECTED', - payload: err.response + payload: err.response, }); }); }; @@ -65,7 +64,7 @@ export const updateUser = (values) => { address: values.address, city: values.city, country: values.country, - postal_code: values.postal_code + postal_code: values.postal_code, }; } @@ -74,7 +73,7 @@ export const updateUser = (values) => { // type: values.nationality === 'IR' ? 'id' : 'passport', number: values.id_number, issued_date: values.id_issued_date, - expiration_date: values.id_expiration_date + expiration_date: values.id_expiration_date, }; } @@ -82,18 +81,14 @@ export const updateUser = (values) => { userValues.settings = values.settings; } - return axios({ - data: userValues, - url: `${WS_URL}/plugins/kyc/user`, - method: 'PUT' - }); + return axios.put('/plugins/kyc/user', userValues); }; export const updateUserSettings = (values) => { return axios({ data: values, url: '/user/settings', - method: 'PUT' + method: 'PUT', }); }; @@ -106,44 +101,44 @@ export const updateDocuments = (values) => { return axios({ headers: { - 'Content-Type': 'multipart/form-data' + 'Content-Type': 'multipart/form-data', }, data: formData, - url: `${WS_URL}/plugins/kyc/user/upload`, - method: 'POST' + url: '/plugins/kyc/user/upload', + method: 'POST', }); }; -export const otpActivate = (values) => axios.post('/user/activateOTP', values); -export const otpRevoke = (values) => axios.post('/user/deactivateOTP', values); +export const otpActivate = (values) => axios.post('/user/activate-otp', values); +export const otpRevoke = (values) => axios.post('/user/deactivate-otp', values); export const resetPassword = (values) => axios.post('/user/change-password', values); export const otpSetActivated = (active = true) => active ? { - type: 'ACTIVATE_OTP' + type: 'ACTIVATE_OTP', } : { - type: 'REVOKE_OTP' + type: 'REVOKE_OTP', }; export function userIdentity(data) { return (dispatch) => { dispatch({ - type: 'USER_IDENTITY_PENDING' + type: 'USER_IDENTITY_PENDING', }); axios .put('/user', data) .then((res) => { dispatch({ type: 'USER_IDENTITY_FULFILLED', - payload: res + payload: res, }); }) .catch((err) => { dispatch({ type: 'USER_IDENTITY_REJECTED', - payload: err.response + payload: err.response, }); }); }; @@ -156,24 +151,24 @@ export function uploadFile(data) { return (dispatch) => { dispatch({ - type: 'UPLOAD_FILE_PENDING' + type: 'UPLOAD_FILE_PENDING', }); axios({ headers: { 'Content-Type': 'multipart/form-data' }, data: formData, url: '/user/verification', - method: 'POST' + method: 'POST', }) .then((res) => { dispatch({ type: 'UPLOAD_FILE_FULFILLED', - payload: res + payload: res, }); }) .catch((err) => { dispatch({ type: 'UPLOAD_FILE_REJECTED', - payload: err.response + payload: err.response, }); }); }; @@ -182,13 +177,13 @@ export function uploadFile(data) { export function userDeposits() { return { type: 'USER_DEPOSITS', - payload: axios.get('/user/deposits') + payload: axios.get('/user/deposits'), }; } export function userWithdrawals() { return { type: 'USER_WITHDRAWALS', - payload: axios.get('/user/withdrawals') + payload: axios.get('/user/withdrawals'), }; } @@ -196,17 +191,17 @@ export function otpRequest() { return (dispatch) => { dispatch({ type: 'REQUEST_OTP_PENDING' }); axios - .get('/user/requestOTP') + .get('/user/request-otp') .then((body) => { dispatch({ type: 'REQUEST_OTP_FULFILLED', - payload: body.data + payload: body.data, }); }) .catch((err) => { dispatch({ type: 'REQUEST_OTP_REJECTED', - payload: err.response.data + payload: err.response.data, }); }); }; @@ -214,34 +209,34 @@ export function otpRequest() { export function deactivateOTP() { return { type: 'DEACTIVATE_OTP', - payload: axios.get('/deactivateOTP') + payload: axios.get('/deactivateOTP'), }; } export const requestTokens = () => { return { type: 'REQUEST_TOKENS', - payload: axios.get('/user/tokens') + payload: axios.get('/user/tokens'), }; }; -export const generateToken = (values) => axios.post(`/user/tokens`, values); +export const generateToken = (values) => axios.post(`/user/token`, values); export const tokenGenerated = (token) => ({ type: 'TOKEN_GENERATED', payload: { - token - } + token, + }, }); export const revokeToken = (id, otp_code = '') => - axios.delete(`/user/tokens`, { - data: { token_id: id, otp_code: otp_code } + axios.delete(`/user/token`, { + data: { token_id: id, otp_code: otp_code }, }); export const tokenRevoked = (token) => ({ type: 'TOKEN_REVOKED', payload: { - token - } + token, + }, }); export const setUsername = (values) => axios.post('/user/username', values); @@ -249,8 +244,8 @@ export const setUsernameStore = (username) => ({ type: 'SET_USERNAME', payload: { username_set: true, - username - } + username, + }, }); // export const requestLimits = () => ({ @@ -265,16 +260,16 @@ export const setUsernameStore = (username) => ({ export const createAddress = (addressType = '') => ({ type: 'CREATE_ADDRESS', - payload: axios.post(`/user/address/${addressType}`, {}) + payload: axios.get(`/user/create-address?crypto=${addressType}`), }); export const cleanCreateAddress = () => ({ - type: 'CLEAN_CREATE_ADDRESS' + type: 'CLEAN_CREATE_ADDRESS', }); export const getTradeVolume = () => ({ type: 'GET_TRADE_VOLUME', - payload: axios.get(`/user/stats`) + payload: axios.get(`/user/stats`), }); export function getUserReferralCount() { @@ -284,20 +279,19 @@ export function getUserReferralCount() { .then((res) => { dispatch({ type: 'REFERRAL_COUNT_FULFILLED', - payload: res.data + payload: res.data, }); }) .catch((err) => { dispatch({ type: 'REFERRAL_COUNT_REJECTED', - payload: err.response + payload: err.response, }); }); }; } export const getUserLogins = ({ limit = 50, page = 1, ...rest }) => { - return (dispatch) => { axios .get('/user/logins') @@ -307,8 +301,8 @@ export const getUserLogins = ({ limit = 50, page = 1, ...rest }) => { payload: { ...body.data, page, - isRemaining: body.data.count > page * limit - } + isRemaining: body.data.count > page * limit, + }, }); // if (body.data.count > page * limit) { // dispatch(getUserDeposits({ limit, page: page + 1 })); @@ -316,8 +310,8 @@ export const getUserLogins = ({ limit = 50, page = 1, ...rest }) => { }) .catch((err) => { dispatch({ - type:'USER_DEPOSITS_REJECTED', - payload: err.response + type: 'USER_DEPOSITS_REJECTED', + payload: err.response, }); }); }; diff --git a/web/src/actions/verificationActions.js b/web/src/actions/verificationActions.js index 20231e0c39..59ac09c93b 100644 --- a/web/src/actions/verificationActions.js +++ b/web/src/actions/verificationActions.js @@ -1,30 +1,22 @@ import axios from 'axios'; import querystring from 'query-string'; -import { WS_URL } from '../config/constants'; const VERIFICATION_ENDPOINTS = { - VERIFY_SMS_CODE: `${WS_URL}/plugins/sms/verify`, - VERIFY_BANK: `${WS_URL}/plugins/bank/user`, - GET_USER: '/user' + VERIFY_SMS_CODE: '/plugins/sms/verify', + VERIFY_BANK: '/plugins/bank/user', + GET_USER: '/user', }; export const getUserData = () => axios.get(VERIFICATION_ENDPOINTS.GET_USER); export const requestSmsCode = (phoneNumber = '') => { const qs = querystring.stringify({ phone: phoneNumber }); - return axios({ - url: `${VERIFICATION_ENDPOINTS.VERIFY_SMS_CODE}?${qs}`, - method: 'GET' - }); + return axios.get(`${VERIFICATION_ENDPOINTS.VERIFY_SMS_CODE}?${qs}`); }; export const verifySmsCode = ({ code = '', phone = '' }) => { const body = { code, phone }; - return axios({ - data: body, - url: VERIFICATION_ENDPOINTS.VERIFY_SMS_CODE, - method: 'POST' - }); + return axios.post(VERIFICATION_ENDPOINTS.VERIFY_SMS_CODE, body); }; export const verifyBankData = (values) => { @@ -32,9 +24,5 @@ export const verifyBankData = (values) => { bank_name: values.bank_name, account_number: values.account_number, }; - return axios({ - data: body, - url: VERIFICATION_ENDPOINTS.VERIFY_BANK, - method: 'POST' - }); + return axios.post(VERIFICATION_ENDPOINTS.VERIFY_BANK, body); }; diff --git a/web/src/actions/walletActions.js b/web/src/actions/walletActions.js index 5f27ae6e7a..5698ae3708 100644 --- a/web/src/actions/walletActions.js +++ b/web/src/actions/walletActions.js @@ -21,7 +21,8 @@ export const ACTION_KEYS = { DEPOSIT_VERIFICATION_REJECTED: 'DEPOSIT_VERIFICATION_REJECTED', WITHDRAWAL_CANCEL_PENDING: 'WITHDRAWAL_CANCEL_PENDING', WITHDRAWAL_CANCEL_FULFILLED: 'WITHDRAWAL_CANCEL_FULFILLED', - WITHDRAWAL_CANCEL_REJECTED: 'WITHDRAWAL_CANCEL_REJECTED' + WITHDRAWAL_CANCEL_REJECTED: 'WITHDRAWAL_CANCEL_REJECTED', + DEPOSIT_STATUS_SUCCESS: 'DEPOSIT_STATUS_SUCCESS', }; const ENDPOINTS = { @@ -31,9 +32,9 @@ const ENDPOINTS = { DEPOSIT_BANK: '/user/deposit/bank', WITHDRAW_BANK: '/user/withdraw/bank', WITHDRAW: (currency) => `/user/request-withdrawal`, - WITHDRAW_FEE: (currency) => `/user/withdraw/${currency}/fee`, - CANCEL_WITHDRAWAL: '/user/withdrawals', - CONFIRM_WITHDRAWAL: '/user/confirm-withdrawal' + WITHDRAW_FEE: (currency) => `/user/withdrawal?currency=${currency}`, + CANCEL_WITHDRAWAL: '/user/withdrawal', + CONFIRM_WITHDRAWAL: '/user/confirm-withdrawal', }; export const performWithdraw = (currency, values) => { @@ -48,14 +49,14 @@ export const requestWithdrawFee = (currency = 'btc') => { .then((body) => { dispatch({ type: ACTION_KEYS.USER_WITHDRAWALS_BTC_FEE_FULFILLED, - payload: body.data + payload: body.data, }); }) .catch((err) => { const payload = err.response.data || { message: err.message }; dispatch({ type: ACTION_KEYS.USER_WITHDRAWALS_BTC_FEE_REJECTED, - payload + payload, }); }); }; @@ -65,18 +66,20 @@ export const withdrawalCancel = (transactionId) => { return (dispatch) => { dispatch({ type: ACTION_KEYS.WITHDRAWAL_CANCEL_PENDING }); axios - .delete(ENDPOINTS.CANCEL_WITHDRAWAL, {data: { transaction_id: parseInt(transactionId.transactionId, 10)}} ) + .delete(ENDPOINTS.CANCEL_WITHDRAWAL, { + data: { id: parseInt(transactionId.transactionId, 10) }, + }) .then((body) => { dispatch({ type: ACTION_KEYS.WITHDRAWAL_CANCEL_FULFILLED, - payload: body.data + payload: body.data, }); }) .catch((err) => { const payload = err.response.data || { message: err.message }; dispatch({ type: ACTION_KEYS.WITHDRAWAL_CANCEL_REJECTED, - payload + payload, }); }); }; @@ -85,20 +88,68 @@ export const withdrawalCancel = (transactionId) => { export const addUserTrades = (trades) => ({ type: ACTION_KEYS.ADD_USER_TRADES, payload: { - trades - } + trades, + }, }); -export const getUserTrades = ({ +export const getUserTrades = ({ symbol, limit = 50, page = 1, ...rest }) => { + let dataParams = { page, limit }; + if (symbol) { + dataParams.symbol = symbol; + } + const query = querystring.stringify(dataParams); + + return (dispatch) => { + dispatch({ type: ACTION_KEYS.USER_TRADES_PENDING, payload: { page } }); + axios + .get(`${ENDPOINTS.TRADES}?${query}`) + .then((body) => { + dispatch({ + type: ACTION_KEYS.USER_TRADES_FULFILLED, + payload: { + ...body.data, + page, + isRemaining: body.data.count > page * limit, + }, + }); + // if (body.data.count > page * limit) { + // dispatch(getUserTrades({ symbol, limit, page: page + 1 })); + // } + }) + .catch((err) => { + dispatch({ + type: ACTION_KEYS.USER_TRADES_REJECTED, + payload: err.response, + }); + }); + }; +}; + +export const getUserOrders = ({ symbol, limit = 50, page = 1, + start_date, + end_date, + open, ...rest }) => { let dataParams = { page, limit }; if (symbol) { dataParams.symbol = symbol; } + + if (start_date) { + dataParams.start_date = start_date; + } + + if (end_date) { + dataParams.end_date = end_date; + } + + if (open !== undefined) { + dataParams.open = open; + } const query = querystring.stringify(dataParams); return (dispatch) => { @@ -111,8 +162,8 @@ export const getUserTrades = ({ payload: { ...body.data, page, - isRemaining: body.data.count > page * limit - } + isRemaining: body.data.count > page * limit, + }, }); // if (body.data.count > page * limit) { // dispatch(getUserTrades({ symbol, limit, page: page + 1 })); @@ -121,7 +172,7 @@ export const getUserTrades = ({ .catch((err) => { dispatch({ type: ACTION_KEYS.USER_TRADES_REJECTED, - payload: err.response + payload: err.response, }); }); }; @@ -129,13 +180,13 @@ export const getUserTrades = ({ export const downloadUserTrades = (key) => { const query = querystring.stringify({ - format: 'csv' + format: 'csv', }); let path = ENDPOINTS.TRADES; if (key === 'deposit') { path = ENDPOINTS.DEPOSITS; } else if (key === 'withdrawal') { - path = ENDPOINTS.WITHDRAWALS + path = ENDPOINTS.WITHDRAWALS; } return (dispatch) => { @@ -143,9 +194,11 @@ export const downloadUserTrades = (key) => { .get(`${path}?${query}`) .then((res) => { const url = window.URL.createObjectURL(new Blob([res.data])); - const link = document.createElement('a'); link.href = url; + const link = document.createElement('a'); + link.href = url; link.setAttribute('download', `user_${key}.csv`); - document.body.appendChild(link); link.click(); + document.body.appendChild(link); + link.click(); }) .catch((err) => { // dispatch({ @@ -156,10 +209,18 @@ export const downloadUserTrades = (key) => { }; }; -export const getUserDeposits = ({ limit = 50, page = 1, ...rest }) => { +export const getUserDeposits = ({ + limit = 50, + page = 1, + status, + currency, + ...rest +}) => { const query = querystring.stringify({ page, - limit + limit, + ...(status ? { status } : {}), + ...(currency ? { currency } : {}), }); return (dispatch) => { @@ -172,8 +233,8 @@ export const getUserDeposits = ({ limit = 50, page = 1, ...rest }) => { payload: { ...body.data, page, - isRemaining: body.data.count > page * limit - } + isRemaining: body.data.count > page * limit, + }, }); // if (body.data.count > page * limit) { // dispatch(getUserDeposits({ limit, page: page + 1 })); @@ -182,16 +243,24 @@ export const getUserDeposits = ({ limit = 50, page = 1, ...rest }) => { .catch((err) => { dispatch({ type: ACTION_KEYS.USER_DEPOSITS_REJECTED, - payload: err.response + payload: err.response, }); }); }; }; -export const getUserWithdrawals = ({ limit = 50, page = 1, ...rest }) => { +export const getUserWithdrawals = ({ + limit = 50, + page = 1, + status, + currency, + ...rest +}) => { const query = querystring.stringify({ page, - limit + limit, + ...(status ? { status } : {}), + ...(currency ? { currency } : {}), }); return (dispatch) => { @@ -204,8 +273,8 @@ export const getUserWithdrawals = ({ limit = 50, page = 1, ...rest }) => { payload: { ...body.data, page, - isRemaining: body.data.count > page * limit - } + isRemaining: body.data.count > page * limit, + }, }); // if (body.data.count > page * limit) { // dispatch(getUserWithdrawals({ limit, page: page + 1 })); @@ -214,7 +283,7 @@ export const getUserWithdrawals = ({ limit = 50, page = 1, ...rest }) => { .catch((err) => { dispatch({ type: ACTION_KEYS.USER_WITHDRAWALS_REJECTED, - payload: err.response + payload: err.response, }); }); }; @@ -223,3 +292,14 @@ export const getUserWithdrawals = ({ limit = 50, page = 1, ...rest }) => { export const performConfirmWithdrawal = (token) => { return axios.post(ENDPOINTS.CONFIRM_WITHDRAWAL, { token }); }; + +export const searchUserDeposits = (params) => { + const query = querystring.stringify(params); + return axios.get(`${ENDPOINTS.DEPOSITS}?${query}`); +}; + +export const setDeposit = (deposit) => { + return (dispatch) => { + dispatch({ type: ACTION_KEYS.DEPOSIT_STATUS_SUCCESS, payload: deposit }); + }; +}; diff --git a/web/src/components/Accordion/AccordionSection.js b/web/src/components/Accordion/AccordionSection.js index 2e32c8113c..5cda3c8bea 100644 --- a/web/src/components/Accordion/AccordionSection.js +++ b/web/src/components/Accordion/AccordionSection.js @@ -1,11 +1,13 @@ import React from 'react'; import classnames from 'classnames'; -import ReactSvg from 'react-svg'; +import Image from 'components/Image'; +import { EditWrapper } from 'components'; import { ActionNotification } from '../'; const AccordionSection = ({ accordionClassName = '', index, + stringId, title, titleClassName = '', titleInformation, @@ -17,7 +19,8 @@ const AccordionSection = ({ notification, subtitle = '', showActionText = false, - icon = '' + icon = '', + iconId, }) => { const onClick = () => { if (!disabled) { @@ -25,14 +28,11 @@ const AccordionSection = ({ } }; const headerProps = { - className: classnames( - 'accordion_section_title d-flex', - { - 'accordion_section--open': isOpen, - 'justify-content-between': !icon, - pointer: !disabled && allowClose - } - ) + className: classnames('accordion_section_title d-flex', { + 'accordion_section--open': isOpen, + 'justify-content-between': !icon, + pointer: !disabled && allowClose, + }), }; if (allowClose) { @@ -42,44 +42,53 @@ const AccordionSection = ({ return (
    - {
    - - {icon && } + { +
    - {title}{' '} - {subtitle && ( - - {subtitle} + + + + + + {title}{' '} + {subtitle && ( + + {subtitle} + + )} - )} + - - {titleInformation} - {notification && ( - - )} -
    } + {titleInformation} + {notification && ( + + )} +
    + } {isOpen &&
    {content}
    }
    ); diff --git a/web/src/components/Accordion/_Accordion.scss b/web/src/components/Accordion/_Accordion.scss index ff2f71f081..9e1734d951 100644 --- a/web/src/components/Accordion/_Accordion.scss +++ b/web/src/components/Accordion/_Accordion.scss @@ -18,80 +18,79 @@ $main-text--color: $colors-deactivate-color2; .accordion_section { .accordion_section_title { font-size: 1.75rem; - } - .accordion_section_content{ - font-size: $font-size-mobile-txt !important; - } } + .accordion_section_content { + font-size: $font-size-mobile-txt !important; + } + } - .action_notification-svg { - svg { - width: 1.75rem !important; - height: 1.75rem !important; - } + .action_notification-svg { + svg { + width: 1.75rem !important; + height: 1.75rem !important; } + } - .accordion_section_content { - overflow-x: auto; + .accordion_section_content { + overflow-x: auto; + font-size: 1.2rem; + .information_section { font-size: 1.2rem; - .information_section { - font-size: 1.2rem; - } - .field-wrapper { - font-size: 1.2rem; - } - table { - tbody { - .table-row { - font-size: 1.25rem; + } + .field-wrapper { + font-size: 1.2rem; + } + table { + tbody { + .table-row { + font-size: 1.25rem; - .td-levelball { - .td-levelball-content { - width: 2.5rem; - height: 2.5rem; - } + .td-levelball { + .td-levelball-content { + width: 2.5rem; + height: 2.5rem; } } - td:not(:first-child) { - padding: 1.5rem 0.25rem; - } + } + td:not(:first-child) { + padding: 1.5rem 0.25rem; } } } } - .direction_ltr { - .accordion_wrapper .accordion_section { - .accordion_section_content_text { - &.with_arrow:after { - border: solid $trade-tabs-inactive-color !important; - border-width: 1px 0 0 1px !important; - display: inline-block !important; - padding: 3px !important; - transform: rotate(131deg)!important; - content: ''; - margin-right: -0.6rem; - position: absolute; - right: -$accordion_arrow-size; - top: calc(50% - 0.3rem); - } + } + .direction_ltr { + .accordion_wrapper .accordion_section { + .accordion_section_content_text { + &.with_arrow:after { + border: solid $trade-tabs-inactive-color !important; + border-width: 1px 0 0 1px !important; + display: inline-block !important; + padding: 3px !important; + transform: rotate(131deg) !important; + content: ''; + margin-right: -0.6rem; + position: absolute; + right: -$accordion_arrow-size; + top: calc(50% - 0.3rem); } - .accordion_section_title { - &.accordion_section--open .accordion_section_content_text:after { - transform: rotate(-135deg)!important; - right: -1.1rem; - top: calc(50% - 0.38rem); - } + } + .accordion_section_title { + &.accordion_section--open .accordion_section_content_text:after { + transform: rotate(-135deg) !important; + right: -1.1rem; + top: calc(50% - 0.38rem); } - - - &.disabled { - .accordion_section_content_text:after { - border-left-color: $colors-deactivate-color2; - } + } + + &.disabled { + .accordion_section_content_text:after { + border-left-color: $colors-deactivate-color2; } } - } + } } +} .accordion_wrapper .accordion_section { border-top: $accordion-border; font-size: $title--font-size; @@ -111,14 +110,14 @@ $main-text--color: $colors-deactivate-color2; svg path { fill: transparent; stroke: $sidebar-color; - } + } } &.accordion_section--open { .accordion_section_content { margin-bottom: $accordion_content-margin-bottom; } - + .accordion_section_content_text { color: $colors-main-black; &.with_arrow:after { @@ -130,7 +129,7 @@ $main-text--color: $colors-deactivate-color2; svg path { fill: $sidebar-color-active; stroke: $sidebar-color-active; - } + } } .wallet_section-title-amount { color: $colors-main-black !important; @@ -173,7 +172,7 @@ $main-text--color: $colors-deactivate-color2; border-width: 2px 0 0 2px !important; display: inline-block !important; padding: 3px !important; - transform: rotate(131deg)!important; + transform: rotate(131deg) !important; content: ''; margin-right: -0.6rem; position: absolute; @@ -183,11 +182,10 @@ $main-text--color: $colors-deactivate-color2; } .accordion_section_title { &.accordion_section--open .accordion_section_content_text:after { - transform: rotate(-135deg)!important; + transform: rotate(-135deg) !important; } } - &.disabled { .accordion_section_content_text:after { border-left-color: $colors-deactivate-color2; @@ -200,11 +198,11 @@ $main-text--color: $colors-deactivate-color2; .accordion_wrapper .accordion_section { .accordion_section_content_text { &.with_arrow:after { - border: solid $trade-tabs-inactive-color ; + border: solid $trade-tabs-inactive-color; border-width: 2px 0 0 2px !important; display: inline-block !important; padding: 3px !important; - transform: rotate(-50deg)!important; + transform: rotate(-50deg) !important; content: ''; left: -$accordion_arrow-size; top: calc(50% - 0.3rem); @@ -212,7 +210,7 @@ $main-text--color: $colors-deactivate-color2; } .accordion_section_title { &.accordion_section--open .accordion_section_content_text:after { - transform: rotate(-135deg)!important; + transform: rotate(-135deg) !important; top: calc(50% - 0.4rem); } .sidebar_hub-section-icon { @@ -222,92 +220,7 @@ $main-text--color: $colors-deactivate-color2; &.disabled { .accordion_section_content_text:after { - border-top-color: $colors-deactivate-color2; - } - } - } -} - -.dark-theme { - .accordion_wrapper .accordion_section { - border-top-color: $dark-app-line-divider; - .accordion_section_content { - color: $dark-font-sub-text-color; - } - .accordion_section_content_text { - color: $dark-font-sub-text-color; - - .accordion_section_content_text-subtitle { - color: $dark-button-active; - } - &.with_arrow:after { - border-left-color: $dark-font-sub-text-color !important; - border-top-color: $dark-font-sub-text-color !important; - } - } - .accordion_section_title { - .sidebar_hub-section-icon { - svg path { - fill: transparent; - stroke: $dark-icon-unhover; - } - } - &.accordion_section--open { - .accordion_section_content_text { - color: $dark-font-main-text-color !important; - &.with_arrow:after { - border-left-color:$dark-font-main-text-color !important; - border-top-color:$dark-font-main-text-color !important; - } - } - .sidebar_hub-section-icon { - svg path { - fill: $dark-font-main-text-color; - stroke: $dark-font-main-text-color; - } - } - .wallet_section-title-amount{ - color: $dark-font-main-text-color !important; - } - } - } - - &.disabled { - color: $dark-disabled-main; - } - - &:last-child { - border-bottom-color: $dark-app-line-divider; - } - } - - .direction_ltr { - .accordion_wrapper .accordion_section { - .accordion_section_content_text { - &.with_arrow:after { - @include css-triangle($dark-accordion-arrow-active, 'right', $accordion_arrow-size); - } - } - - &.disabled { - .accordion_section_content_text:after { - border-left-color: $dark-accordion-arrow-inactive; - } - } - } - } - .direction_rtl { - .accordion_wrapper .accordion_section { - .accordion_section_content_text { - &.with_arrow:after { - @include css-triangle($dark-accordion-arrow-active, 'left', $accordion_arrow-size); - } - } - - &.disabled { - .accordion_section_content_text:after { - border-top-color: $dark-accordion-arrow-inactive; - } + border-top-color: $colors-border; } } } diff --git a/web/src/components/Accordion/index.js b/web/src/components/Accordion/index.js index db3a682110..a7682fbfeb 100644 --- a/web/src/components/Accordion/index.js +++ b/web/src/components/Accordion/index.js @@ -6,24 +6,24 @@ import AccordionSection from './AccordionSection'; class Accordion extends Component { state = { openSections: [], - ready: false + ready: false, }; componentWillMount() { if (this.props.sections.length > 0) { this.initialize(this.props.sections); } - if(window.location.pathname ==='/account/settings/username') { - this.openSection(0, true) + if (window.location.pathname === '/account/settings/username') { + this.openSection(0, true); } } - componentWillReceiveProps(nextProps) { + UNSAFE_componentWillReceiveProps(nextProps) { if (!this.state.ready && nextProps.sections.length > 0) { this.initialize(nextProps.sections); } - if(window.location.pathname ==='/account/settings/username') { - this.openSection(0, true) + if (window.location.pathname === '/account/settings/username') { + this.openSection(0, true); } } @@ -118,7 +118,7 @@ class Accordion extends Component { Accordion.defaultProps = { allowMultiOpen: false, wrapperId: '', - doScroll: true + doScroll: true, }; export default Accordion; diff --git a/web/src/components/ActionNotification/_ActionNotification.scss b/web/src/components/ActionNotification/_ActionNotification.scss index f45f44f681..25a051756f 100644 --- a/web/src/components/ActionNotification/_ActionNotification.scss +++ b/web/src/components/ActionNotification/_ActionNotification.scss @@ -62,7 +62,7 @@ } } .cancel-cross-2 { - fill:none; + fill: none; stroke: $link; } .icon-clip-1, @@ -75,7 +75,7 @@ .trans-history-1, .trans-history-2, .trans-history-3, - .cancel-cross-1 { + .cancel-cross-1 { fill: $link; } .trans-history-4, @@ -172,47 +172,8 @@ } } -.dark-theme { - .action_notification-wrapper { - .notification-info { - color: $dark-link; - } - .notification-loading { - color: $dark-font-sub-text-color; - } - .icon-clip-1, - .icon-plus-1, - .icon-edit-1, - .icon-help-1, - .icon-copy-1, - .icon-tamer-01, - .arrow-1, - .trans-history-1, - .trans-history-2, - .trans-history-3, - .cancel-cross-1 { - fill: $dark-link; - } - .cancel-cross-2, - .cancel-cross-3, - .trans-history-4 { - stroke: $dark-link; - } - .connect-loading { - fill: $dark-font-sub-text-color !important; - } - } -} - -.layout-mobile { - .dark-theme { - .action_notification-text { - color: $dark-link; - } - } +.layout-mobile { .action_notification-text { color: $link; } - - -} \ No newline at end of file +} diff --git a/web/src/components/ActionNotification/index.js b/web/src/components/ActionNotification/index.js index 2cc6b00fd2..937dd3a2c6 100644 --- a/web/src/components/ActionNotification/index.js +++ b/web/src/components/ActionNotification/index.js @@ -1,6 +1,6 @@ import React from 'react'; import classnames from 'classnames'; -import ReactSVG from 'react-svg'; +import Image from 'components/Image'; import { isMobile } from 'react-device-detect'; const getClassNames = (status) => { @@ -21,10 +21,11 @@ const getClassNames = (status) => { }; const ActionNotification = ({ - useSvg, text, + stringId, status, onClick, + iconId, iconPath, className, reverseImage, @@ -35,53 +36,61 @@ const ActionNotification = ({ rotateIfLtr, rotateIfRtl, showActionText, - disable = false -}) => ( -
    {} : onClick} - > - {(showActionText || !isMobile) && ( -
    - {text} -
    - )} - {iconPath && - (useSvg ? ( - - ) : ( - {text} - ))} -
    -); + disable = false, +}) => { + // This is to prevent action when edit string or upload icons are clicked + const onActionClick = ({ target: { dataset = {} } }) => { + const { stringId, iconId } = dataset; + + if (!disable && !stringId && !iconId && onClick) { + return onClick(); + } + }; + + return ( +
    + {(showActionText || !isMobile) && ( +
    + {text} +
    + )} + {text} +
    + ); +}; ActionNotification.defaultProps = { - useSvg: false, text: '', status: 'information', iconPath: '', @@ -92,6 +101,6 @@ ActionNotification.defaultProps = { showPointer: true, rotate: false, rotateIfRtl: false, - rotateIfLtr: false + rotateIfLtr: false, }; export default ActionNotification; diff --git a/web/src/components/AdminForm/Editor.js b/web/src/components/AdminForm/Editor.js index edc85bacb3..81d3fceff3 100644 --- a/web/src/components/AdminForm/Editor.js +++ b/web/src/components/AdminForm/Editor.js @@ -5,37 +5,37 @@ import draftToHtml from 'draftjs-to-html'; import 'react-draft-wysiwyg/dist/react-draft-wysiwyg.css'; const TextEditor = ({ - input, - label, - placeholder, - meta: { touched, error, warning }, - disabled = false + input, + label, + placeholder, + meta: { touched, error, warning }, + disabled = false, }) => { - const [editorState, setEditorState] = useState(EditorState.createEmpty()); - useEffect(() => { - setEditorState(EditorState.createEmpty()); - }, []); - const onEditorStateChange = edState => { - const currentState = convertToRaw(edState.getCurrentContent()); - input.onChange(draftToHtml(currentState)); - setEditorState(edState); - }; - return ( -
    - {label && } -
    - - {touched && - ((error && {error}) || - (warning && {warning}))} -
    -
    - ); -} + const [editorState, setEditorState] = useState(EditorState.createEmpty()); + useEffect(() => { + setEditorState(EditorState.createEmpty()); + }, []); + const onEditorStateChange = (edState) => { + const currentState = convertToRaw(edState.getCurrentContent()); + input.onChange(draftToHtml(currentState)); + setEditorState(edState); + }; + return ( +
    + {label && } +
    + + {touched && + ((error && {error}) || + (warning && {warning}))} +
    +
    + ); +}; export default TextEditor; diff --git a/web/src/components/AdminForm/FileField.js b/web/src/components/AdminForm/FileField.js index c150feb315..bd0972c796 100644 --- a/web/src/components/AdminForm/FileField.js +++ b/web/src/components/AdminForm/FileField.js @@ -1,15 +1,17 @@ import React, { Component } from 'react'; -import { Upload, Button, Icon } from 'antd'; +import { UploadOutlined } from '@ant-design/icons'; + +import { Upload, Button } from 'antd'; const INITIAL_STATE = { fileList: [], - file: undefined + file: undefined, }; export class FileField extends Component { state = INITIAL_STATE; - componentWillReceiveProps(nextProps) { + UNSAFE_componentWillReceiveProps(nextProps) { if (!nextProps.input.value && this.props.input.value) { this.clearList(); } @@ -25,7 +27,7 @@ export class FileField extends Component { error, warning, input: { onChange }, - label + label, } = this.props; const props = { className: 'upload-wrapper', @@ -42,11 +44,11 @@ export class FileField extends Component { beforeUpload: (file) => { this.setState({ fileList: [file], - file + file, }); return false; }, - fileList: this.state.fileList + fileList: this.state.fileList, }; return ( @@ -54,7 +56,7 @@ export class FileField extends Component { {label && } {touched && diff --git a/web/src/components/AdminForm/captchaField.js b/web/src/components/AdminForm/captchaField.js index a87ad0d0cd..07c26e8d3e 100644 --- a/web/src/components/AdminForm/captchaField.js +++ b/web/src/components/AdminForm/captchaField.js @@ -2,20 +2,22 @@ import React, { Component } from 'react'; import classnames from 'classnames'; import { ReCaptcha } from 'react-recaptcha-v3'; import { connect } from 'react-redux'; - -import { CAPTCHA_SITEKEY, DEFAULT_CAPTCHA_SITEKEY, CAPTCHA_TIMEOUT } from '../../config/constants'; +import withConfig from 'components/ConfigProvider/withConfig'; +import { CAPTCHA_SITEKEY, DEFAULT_CAPTCHA_SITEKEY } from 'config/constants'; class CaptchaField extends Component { state = { - active: false, - ready: false + active: true, + ready: false, }; + componentDidMount() { - setTimeout(() => { - this.setState({ active: true }); - }, CAPTCHA_TIMEOUT); + this.expiryTime = setInterval(() => { + this.captcha.execute(); + }, 120000); } - componentWillReceiveProps(nextProps) { + + UNSAFE_componentWillReceiveProps(nextProps) { if ( nextProps.input.value === '' && nextProps.input.value !== this.props.input.value @@ -28,10 +30,6 @@ class CaptchaField extends Component { this.captcha = el; }; - onLoadCallback = () => { - this.setState({ ready: true }); - }; - onVerifyCallback = (data) => { this.props.input.onChange(data); }; @@ -41,18 +39,36 @@ class CaptchaField extends Component { this.captcha.execute(); }; + componentWillUnmount() { + if (this.expiryTime) { + clearInterval(this.expiryTime); + } + } + render() { - const { constants: { captcha = {} } } = this.props; + const { + language, + constants: { captcha = {} }, + defaults: { language: DEFAULT_LANGUAGE }, + } = this.props; const { ready, active } = this.state; + return ( active && ( -
    +
    ) @@ -61,7 +77,7 @@ class CaptchaField extends Component { } const mapStateToProps = (state) => ({ - constants: state.app.constants + constants: state.app.constants, }); -export default connect(mapStateToProps)(CaptchaField); +export default connect(mapStateToProps)(withConfig(CaptchaField)); diff --git a/web/src/components/AdminForm/fields.js b/web/src/components/AdminForm/fields.js index 3fdfe0002b..87d4a7a8fc 100644 --- a/web/src/components/AdminForm/fields.js +++ b/web/src/components/AdminForm/fields.js @@ -3,6 +3,7 @@ import { InputNumber, Input, DatePicker, Select, Checkbox } from 'antd'; import moment from 'moment'; import TextArea from 'antd/lib/input/TextArea'; import classname from 'classnames'; +import { CloseCircleOutlined } from '@ant-design/icons'; import './index.css'; const dateFormat = 'YYYY/MM/DD'; @@ -13,20 +14,27 @@ export const renderInputField = ({ type, meta: { touched, error, warning }, prefix, - placeholder, - className, - disabled = false + placeholder, + className, + disabled = false, + isClosable = false, + closeCallback = () => {}, }) => ( -
    +
    {label && }
    - +
    + + {isClosable ? ( + + ) : null} +
    {touched && ((error && {error}) || (warning && {warning}))} @@ -41,25 +49,25 @@ export const renderTextAreaField = ({ meta: { touched, error, warning }, prefix, placeholder, - disabled = false + disabled = false, }) => ( -
    - {label && } -
    -