diff --git a/.eslintrc b/.eslintrc index 570f3de..51ee0fa 100644 --- a/.eslintrc +++ b/.eslintrc @@ -20,6 +20,7 @@ rules: no-restricted-syntax: 0 guard-for-in: 0 import/no-extraneous-dependencies: 0 + import/no-dynamic-require: 0 no-use-before-define: 0 no-param-reassign: 0 no-plusplus: 0 diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md new file mode 100644 index 0000000..09827eb --- /dev/null +++ b/CODE_OF_CONDUCT.md @@ -0,0 +1,76 @@ +# Contributor Covenant Code of Conduct + +## Our Pledge + +In the interest of fostering an open and welcoming environment, we as +contributors and maintainers pledge to making participation in our project and +our community a harassment-free experience for everyone, regardless of age, body +size, disability, ethnicity, sex characteristics, gender identity and expression, +level of experience, education, socio-economic status, nationality, personal +appearance, race, religion, or sexual identity and orientation. + +## Our Standards + +Examples of behavior that contributes to creating a positive environment +include: + +* Using welcoming and inclusive language +* Being respectful of differing viewpoints and experiences +* Gracefully accepting constructive criticism +* Focusing on what is best for the community +* Showing empathy towards other community members + +Examples of unacceptable behavior by participants include: + +* The use of sexualized language or imagery and unwelcome sexual attention or + advances +* Trolling, insulting/derogatory comments, and personal or political attacks +* Public or private harassment +* Publishing others' private information, such as a physical or electronic + address, without explicit permission +* Other conduct which could reasonably be considered inappropriate in a + professional setting + +## Our Responsibilities + +Project maintainers are responsible for clarifying the standards of acceptable +behavior and are expected to take appropriate and fair corrective action in +response to any instances of unacceptable behavior. + +Project maintainers have the right and responsibility to remove, edit, or +reject comments, commits, code, wiki edits, issues, and other contributions +that are not aligned to this Code of Conduct, or to ban temporarily or +permanently any contributor for other behaviors that they deem inappropriate, +threatening, offensive, or harmful. + +## Scope + +This Code of Conduct applies both within project spaces and in public spaces +when an individual is representing the project or its community. Examples of +representing a project or community include using an official project e-mail +address, posting via an official social media account, or acting as an appointed +representative at an online or offline event. Representation of a project may be +further defined and clarified by project maintainers. + +## Enforcement + +Instances of abusive, harassing, or otherwise unacceptable behavior may be +reported by contacting the project team at . All +complaints will be reviewed and investigated and will result in a response that +is deemed necessary and appropriate to the circumstances. The project team is +obligated to maintain confidentiality with regard to the reporter of an incident. +Further details of specific enforcement policies may be posted separately. + +Project maintainers who do not follow or enforce the Code of Conduct in good +faith may face temporary or permanent repercussions as determined by other +members of the project's leadership. + +## Attribution + +This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, +available at https://www.contributor-covenant.org/version/1/4/code-of-conduct.html + +[homepage]: https://www.contributor-covenant.org + +For answers to common questions about this code of conduct, see +https://www.contributor-covenant.org/faq diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 0000000..1fba325 --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,81 @@ +# Contributing to Info Server + +We only accept pull request that is assigned an accepted issue. By +participating in this project, you agree to abide by the [code of +conduct](./CODE_OF_CONDUCT.md "code of conduct"). + +## Submitting a Pull Request +1. Fork this repository +2. Create a feature branch based of `develop` branch +3. Implement your feature or bug fix +4. Add, commit, and push your changes +5. Submit a pull request + +### Considerations + +- If needed, update documentation or behaviors +- If possible, avoid installing dependencies and if so use an exact + version `x.y.z` instead of using semantic version +- As much as possible, squash commits before filing a PR + +# Development +## Dependency + +Before setting up Info server, remember to start a ganache RPC client and deploy the [DigixDAO smart contracts](https://github.com/dao-contracts). + +Aside from setting up this server, remember to start this server before +[dao-server](https://github.com/DigixGlobal/dao-server "dao-server") +and all its dependencies since Info server sends requests to `dao-server`. + +## Code Structure +* `dbWrapper/` + + Wrapper functions to read/write to MongoDB + +* `dijixWrapper/` + + Wrapper functions to fetch documents from IPFS + +* `cacheWrapper/` + + Wrapper functions to read/write to cache + +* `routes/` + + API endpoints for DigixDAO. These are sub-divided into `proposals`, `transactions` and `kyc`, and the rest are placed in `index.js` + +* `scripts/` + + This is where most of the business logic has been implemented + + * `watchedFunctions.js` + + Includes the list of the functions from DigixDAO smart contracts that are being watched by Info-server. This also includes broadcasting of GraphQL subscriptions. + + * `blocks.js` + + Info-server queries to check if any new blocks have been mined. If yes, it fetches all transactions from those blocks, filters them to only the transactions that are of interest (`watchedFunctionsList` in `helpers/constants.js`) and add these transactions to the database. `blocks.js` includes the logic to watch for new blocks. + + * `transactions.js` + + This includes the logic for filtering from transactions in new blocks. This also calls the respective functions from `proposals.js`, `addresses.js` and `dao.js`, depending on the state transition brought about by that specific transaction. + + * `proposals.js` + + Includes the logic to implement transition of a DigixDAO project between states. + + * `addresses.js` + + Includes the logic to update any information related to a DigixDAO participant/moderator, or their stakes/votes. + + * `dao.js` + + Includes the logic to update the generic state of DigixDAO, which covers configuration values, DigixDAO timeline, total DGDs staked in the contracts and so on. + + * `notifier.js` + + This script contains the logic to communicate with DigixDAO's [DAO Server](https://github.com/dao-server), which also includes the HMAC logic. + +* `types/` + + The code in this directory contains the GraphQL schemas, types and resolvers. These are then used in the `graphql.js` file, that includes the queries, mutations and subscriptions. diff --git a/LICENSE.md b/LICENSE.md new file mode 100644 index 0000000..2a860fe --- /dev/null +++ b/LICENSE.md @@ -0,0 +1,31 @@ +# LICENSE + +The code in this repository is licensed under the [BSD-3 Clause](https://opensource.org/licenses/BSD-3-Clause). + +Copyright (c) 2019, DIGIXGLOBAL PRIVATE LIMITED +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +* Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + +* Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +* Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/README.md b/README.md index 81cf691..fe7537d 100644 --- a/README.md +++ b/README.md @@ -1,189 +1,50 @@ -### Outline of server structure: [link](OUTLINE.md) +# Info Server +Info-server is a NodeJS server responsible for maintaining an off-chain replica of the DigixDAO storage contracts. Essentially, it watches for newly mined Ethereum blocks and updates its own database. -### SETUP INSTRUCTIONS -Please refer [HERE](https://gist.github.com/roynalnaruto/52f2be795f256ed7b0f156666108f8fc). The Info-server runs together with [DigixDAO contracts](https://github.com/DigixGlobal/dao-contracts/tree/dev-info-server) and [Dao-server](https://github.com/DigixGlobal/dao-server/tree/dev) +### Setup +##### Prerequisites +* [MongoDB](https://docs.mongodb.com/manual/tutorial/install-mongodb-on-ubuntu/#install-mongodb-community-edition-using-deb-packages) +* [Ganache](https://github.com/trufflesuite/ganache-cli) (Ethereum RPC client for development/testing) +* [DigixDAO Contracts](https://github.com/DigixGlobal/dao-contracts) -### Setup: -* Install MongoDB: https://docs.mongodb.com/manual/administration/install-on-linux/ -* Make sure `mongod` is running: +##### Run info-server +* Get the source ``` -sudo service mongod start +$ git clone https://github.com/DigixGlobal/info-server.git +$ git checkout develop ``` -* Install pm2: +* Install dependencies ``` -npm install pm2@latest -g +$ npm install ``` -* Install node dependencies: +* Run MongoDB ``` -npm i -``` -* [Development] start the server in development: -``` -npm run dev -``` - * The local server is at `localhost:3001`. Test going to http://localhost:3001/daoInfo -* [Staging] start the staging server (on port 3002) -``` -npm run staging +$ sudo service mongod start ``` +* Run info-server -##### Details -Note that the `dev` can be replaced by `staging` for the staging environment -* Forcefully drop database and restart Info-server -``` -$ npm run dev:force -``` -* Re-sync all transactions from the blockchain, and then process them -``` -$ npm run dev:resync -``` -* Don't re-sync transactions, only process transactions all over again -``` -$ npm run dev:reprocess -``` + Info-server can be started with multiple configurations, that are included in the `development.config.js` file. A few `npm` scripts have been added in the `package.json` file, also listed below: + * Forcefully drop database and restart info-server with a fresh instance. This also starts watching blocks from the `START_BLOCK` config value. + ``` + $ npm run dev:force + ``` + * Re-sync all transactions from the blockchain, and then process them. This does not drop the database. + ``` + $ npm run dev:resync + ``` + * Only re-process the transactions that already exist in the database. You may want to choose this option if you have modified certain logic in the `scripts/` directory, but do not want to re-sync all transactions from the blockchain + ``` + $ npm run dev:reprocess + ``` -### Endpoints -##### Dao details -* `/daoInfo` -``` -{ - result: { - "currentQuarter": 1, - "startOfQuarter": , // in seconds - "startOfMainphase": , - "startOfNextQuarter": , - "totalLockedDgds": 1234e9, // = 1234 DGD - "totalModeratorLockedDgds": 234e9 // 234 DGD - } -} -``` -##### Address details -* `/address/:address` -``` -{ - result: { - "address": "0x6ed6e4bc5341d8d53bca4ee5df6f0e1970f49918", - "isUser": true, // whether this address is a user. In ther words, whether this address has locked DGDs at least once - "lockedDgdStake": 123e9, // 123 DGDStake - "lockedDgd": 200e9, // locked 200 DGD - "reputationPoint": 12e9, // 12 Reputation Points - "quarterPoint": 8e9, // 8 Quarter Points - "isParticipant": true, - "isModerator": true, - "lastParticipatedQuarter": 1 - } -} -``` +### DigixDAO Architecture +![DigixDAO Architecture](docs/digixdao-architecture.png) -##### Proposals -* Get count of proposals in different stages: `/proposals/count` -``` -{ - "result": { - "idea": 2, - "draft": 1, - "proposal": 2, - "ongoing": 1, - "review": 1, - "archived": 1 - } -} -``` -* Get proposal details: `/proposals/details/:id` -``` -{ - result: { - "proposalId": "0xwef23fwef", - "stage": "idea", - "proposer": "0x1234we..", - "endorser": "0x231423..", - "isDigix": false, - "timeCreated": , - "finalVersionIpfsDoc": "Qm23f..", - "proposalVersions": [ - { - "docIpfsHash": "Qm..", - "created": , - "milestoneFundings": [1e18, 2e18], - finalReward: [1e18], - moreDocs: ["Qm..", "Qm..",..], - totalFunding: 4e18 - }, - ... - ] - "draftVoting": { - "startTime": , - "votingDeadline": , - "totalVoterStake": 123e9, // 123 DGD, - "totalVoterCount": 12 - "currentResult": 0.61, // 61% - "quorum": 140e9, // 140 DGD - "quota": 0.60, // 60% - "claimed": false, - "passed": false, - "funded": false, - }, - "votingRounds": [ - { // voting round 0 - "startTime": , - "commitDeadline": , - "revealDeadline": , - "totalVoterStake": 123e9, // 123 DGD, - "totalVoterCount": 12 - "currentResult": 0.61, // 61% - "quorum": 140e9, // 140 DGD - "quota": 0.60, // 60% - "claimed": false, - "passed": false, - "funded": false, - }, - .... - ] - "currentMilestone": 1, - "currentMilestoneStart": , - "currentVotingRound": -1, // -1 = draftVoting, 0 = first Voting - "votingStage": "draftVoting", // draftVoting/commit/reveal/none - "claimableFunding": 1e18, // 1 ETH - "prl": "ok", // ok/paused/stopped - } -} -``` +### Contributing +Refer [CONTRIBUTING.md](./CONTRIBUTING.md) for the process for submitting pull requests to us. -* List proposals in a certain stage: `/proposals/:stage` :stage = idea/draft/... -``` -{ - result: [ - { - "proposalId": "0xwef23fwef", - "proposer": "0x1234we..", - .... - }, - { - "proposalId": "0xwef23fwef", - "proposer": "0x1234we..", - .... - }, - ... - ] -} -``` +### [License](./LICENSE.md) +Copyright DIGIXGLOBAL PRIVATE LIMITED. -* List all proposals: `/proposals/all` -``` -{ - result: [ - { - "proposalId": "0xwef23fwef", - "proposer": "0x1234we..", - .... - }, - { - "proposalId": "0xwef23fwef", - "proposer": "0x1234we..", - .... - }, - ... - ] -} -``` +The code in this repository is licensed under the [BSD-3 Clause](https://opensource.org/licenses/BSD-3-Clause) BSD-3-clause, 2017. diff --git a/app.js b/app.js index a9c4f44..8c6a059 100644 --- a/app.js +++ b/app.js @@ -13,6 +13,7 @@ const { const mongoUtil = require('./dbWrapper/mongoUtil'); const dijixUtil = require('./dijixWrapper/dijixUtil'); const web3Util = require('./web3Wrapper/web3Util'); +const cacheUtil = require('./cacheWrapper/cacheUtil'); const { initContracts, @@ -105,6 +106,7 @@ const init = async () => { console.log('INFOLOG: init'); await initDB(); await initIpfs(); + cacheUtil.init(); app.use('/', routes); diff --git a/cacheWrapper/cacheUtil.js b/cacheWrapper/cacheUtil.js new file mode 100644 index 0000000..67fb970 --- /dev/null +++ b/cacheWrapper/cacheUtil.js @@ -0,0 +1,32 @@ +const NodeCache = require('node-cache'); + +const _cache = {}; + +const init = (options = {}) => { + _cache.cache = new NodeCache(options); +}; + +const store = (key, value) => { + _cache.cache.set(key, value); +}; + +const fetchMany = (keys) => { + const values = _cache.cache.mget(keys); + return values; +}; + +const fetch = (key) => { + try { + const value = _cache.cache.get(key, true); + return value; + } catch (err) { + console.log(err); + } +}; + +module.exports = { + init, + store, + fetch, + fetchMany, +}; diff --git a/dbWrapper/addresses.js b/dbWrapper/addresses.js index 0201ce6..d75f3c9 100644 --- a/dbWrapper/addresses.js +++ b/dbWrapper/addresses.js @@ -16,6 +16,12 @@ const updateAddress = async (address, update, moreOptions = {}) => { .updateOne({ address }, update, moreOptions); }; +const updateAddresses = async (filter, update, moreOptions = {}) => { + await mongoUtil.getDB() + .collection(collections.ADDRESSES) + .updateMany(filter, update, moreOptions); +}; + const getAddressDetails = async (address) => { const addressDetails = await mongoUtil.getDB() .collection(collections.ADDRESSES) @@ -46,6 +52,7 @@ const getAllAddresses = async (filter) => { module.exports = { updateAddress, + updateAddresses, insertAddress, getAddressDetails, getAllAddresses, diff --git a/dbWrapper/mongoUtil.js b/dbWrapper/mongoUtil.js index a790d2f..06b7813 100644 --- a/dbWrapper/mongoUtil.js +++ b/dbWrapper/mongoUtil.js @@ -6,7 +6,7 @@ const { collections, } = require('../helpers/constants'); -const keystore = require('../keystore/kyc-admin.json'); +const keystore = require(process.env.KYC_ADMIN_KEYSTORE_PATH); let _db; diff --git a/development.config.js b/development.config.js index 0d6417d..49c5bba 100644 --- a/development.config.js +++ b/development.config.js @@ -17,6 +17,7 @@ module.exports = { CRON_WATCH_BLOCKS_FREQUENCY: 5, WEB3_HTTP_PROVIDER: 'http://localhost:8545', DAO_SERVER_URL: 'http://localhost:3005', + PRICEFEED_SERVER: 'https://datafeed.digix.global', SERVER_SECRET: 'this-is-a-secret-between-dao-and-info-server', RATE_LIMIT_WINDOW_MS: 60 * 1000, RATE_LIMIT_PER_WINDOW: 10, @@ -28,6 +29,7 @@ module.exports = { RESYNC: process.env.RESYNC, REPROCESS_ONLY: process.env.REPROCESS_ONLY, SYNC_REPORT_FREQUENCY: 10, + KYC_ADMIN_KEYSTORE_PATH: '../keystore/kyc-admin.json', KYC_ADMIN_PASSWORD: 'digixdao', FORUM_ADMIN_ADDRESS: '0x52a9d38687a0c2d5e1645f91733ffab3bbd29b06', DGD_CONTRACT: '0x36376d6e66f20a2f5377a91a5e6ce37b53dda0d8', diff --git a/dijixWrapper/proposals.js b/dijixWrapper/proposals.js index b45f90a..8494bfe 100644 --- a/dijixWrapper/proposals.js +++ b/dijixWrapper/proposals.js @@ -5,6 +5,16 @@ const fetchProposalVersion = async (ipfsHash) => { return dijixObject; }; +const fetchMultiple = async (hashes) => { + const docs = []; + for (const hash of hashes) { + const doc = await dijixUtil.getDijix().failSafeFetch(hash); + docs.push(doc); + } + return docs; +}; + module.exports = { fetchProposalVersion, + fetchMultiple, }; diff --git a/docs/digixdao-architecture.png b/docs/digixdao-architecture.png new file mode 100644 index 0000000..fb743c2 Binary files /dev/null and b/docs/digixdao-architecture.png differ diff --git a/graphql.js b/graphql.js index c9e85f0..5078578 100644 --- a/graphql.js +++ b/graphql.js @@ -2,14 +2,22 @@ const ethJsUtil = require('ethereumjs-util'); const { withFilter, AuthenticationError } = require('apollo-server'); const { ApolloServer, gql } = require('apollo-server-express'); -const { proposalToType } = require('./helpers/utils'); +const { actionableStatus } = require('./helpers/constants'); +const { proposalToType, getCurrentActionableStatus } = require('./helpers/utils'); const { getAddressDetails } = require('./dbWrapper/addresses'); const { getDaoInfo } = require('./dbWrapper/dao'); const { pubsub } = require('./pubsub'); -const { getProposal, getSpecialProposal } = require('./dbWrapper/proposals'); +const { + getProposal, + getSpecialProposal, + getSpecialProposals, + getProposals, +} = require('./dbWrapper/proposals'); + +const { proposalStages } = require('./helpers/constants'); const { typeDef: scalarType, resolvers: scalarResolvers } = require('./types/scalar.js'); const { typeDef: userType, resolvers: userResolvers } = require('./types/user.js'); @@ -26,6 +34,9 @@ const queryType = gql` # Get the current user's information. fetchDao: Dao! + + # Find proposals in specific stage + fetchProposals(stage: String!, onlyActionable: Boolean): [Proposal] } `; @@ -68,25 +79,59 @@ const resolvers = { return proposal ? proposalToType(proposal) : null; }, fetchCurrentUser: (_obj, _args, context, _info) => { + if (!context.currentUser) { + throw new Error('Not Authenticated'); + } + return context.currentUser; }, fetchDao: (_obj, _args, _context, _info) => { return getDaoInfo(); }, + fetchProposals: async (_obj, args, context, _info) => { + const { stage, onlyActionable } = args; + const filter = (stage === 'all') ? {} : { stage: stage.toUpperCase() }; + const proposals = await getProposals(filter); + const specialProposals = (stage.toUpperCase() === proposalStages.PROPOSAL || stage === 'all') ? await getSpecialProposals() : []; + + const allProposals = specialProposals.concat(proposals).map(proposal => ({ + ...proposal, + actionableStatus: getCurrentActionableStatus(proposal, context.currentUser), + })); + return onlyActionable ? allProposals.filter(proposal => proposal.actionableStatus !== actionableStatus.NONE) : allProposals; + }, }, Mutation: {}, Subscription: { userUpdated: { subscribe: withFilter( - () => pubsub.asyncIterator('userUpdated'), + (_obj, _args, context, _info) => { + if (!context.currentUser) { + throw new Error('Not Authenticated'); + } + + return pubsub.asyncIterator('userUpdated'); + }, filterByCurrentAddress(payload => payload.userUpdated.address), ), }, proposalSubmitted: { - subscribe: () => pubsub.asyncIterator('proposalSubmitted'), + subscribe: (_obj, _args, context, _info) => { + if (!context.currentUser) { + throw new Error('Not Authenticated'); + } + + return pubsub.asyncIterator('proposalSubmitted'); + }, }, proposalUpdated: { - subscribe: () => pubsub.asyncIterator('proposalUpdated'), + subscribe: (_obj, _args, context, _info) => { + if (!context.currentUser) { + throw new Error('Not Authenticated'); + } + + return pubsub.asyncIterator('proposalUpdated'); + }, }, daoUpdated: { subscribe: () => pubsub.asyncIterator('daoUpdated'), @@ -124,7 +169,7 @@ const signatureAuthorization = (params) => { throw new AuthenticationError('Invalid address or signature'); } else { - throw new AuthenticationError('Missing address or signature'); + return {}; } }; diff --git a/helpers/constants.js b/helpers/constants.js index 7573d7f..df7df46 100644 --- a/helpers/constants.js +++ b/helpers/constants.js @@ -115,25 +115,37 @@ const readProposalVersionIndices = { }; const readProposalPRLActions = { - 1: 'stopped', - 2: 'paused', - 3: 'ok', + 1: 'STOPPED', + 2: 'PAUSED', + 3: 'ACTIVE', + NEW: 'ACTIVE', + PAUSED: 'PAUSED', }; const proposalStages = { - IDEA: 'idea', - DRAFT: 'draft', - PROPOSAL: 'proposal', - ONGOING: 'ongoing', - REVIEW: 'review', - ARCHIVED: 'archived', + IDEA: 'IDEA', + DRAFT: 'DRAFT', + PROPOSAL: 'PROPOSAL', + ONGOING: 'ONGOING', + REVIEW: 'REVIEW', + ARCHIVED: 'ARCHIVED', }; const proposalVotingStages = { - DRAFT: 'draftVoting', - COMMIT: 'commit', - REVEAL: 'reveal', - NONE: 'none', + DRAFT: 'DRAFT', + COMMIT: 'COMMIT', + REVEAL: 'REVEAL', + NONE: 'NONE', +}; + +const actionableStatus = { + NONE: 'NONE', + AWAITING_ENDORSEMENT: 'AWAITING_ENDORSEMENT', + MODERATOR_VOTING: 'MODERATOR_VOTING', + COMMIT_PHASE: 'COMMIT_PHASE', + REVEAL_PHASE: 'REVEAL_PHASE', + CLAIM_FUNDING: 'CLAIM_FUNDING', + CLAIM_VOTING: 'CLAIM_VOTING', }; const collections = { @@ -174,6 +186,7 @@ const watchedFunctionNames = { ENDORSE_PROPOSAL: 'endorseProposal', MODIFY_PROPOSAL: 'modifyProposal', FINALIZE_PROPOSAL: 'finalizeProposal', + ADD_PROPOSAL_DOC: 'addProposalDoc', DRAFT_VOTE: 'voteOnDraft', CLAIM_DRAFT_VOTING: 'claimDraftVotingResult', COMMIT_VOTE: 'commitVoteOnProposal', @@ -208,6 +221,7 @@ const watchedFunctionsList = [ watchedFunctionNames.ENDORSE_PROPOSAL, watchedFunctionNames.MODIFY_PROPOSAL, watchedFunctionNames.FINALIZE_PROPOSAL, + watchedFunctionNames.ADD_PROPOSAL_DOC, watchedFunctionNames.DRAFT_VOTE, watchedFunctionNames.CLAIM_DRAFT_VOTING, watchedFunctionNames.COMMIT_VOTE, @@ -292,6 +306,36 @@ const daoConfigsKeys = { CONFIG_PREPROPOSAL_COLLATERAL: 'config_preproposal_collateral', }; +const gasLimits = { + // participation + LOCK_DGD: 1000000, + UNLOCK_DGD: 1000000, + CONFIRM_CONTINUE_PARTICIPATION: 1000000, + CLAIM_REWARDS: 400000, + // voting + MODERATOR_VOTE: 300000, + COMMIT_VOTE: 150000, + REVEAL_VOTE: 300000, + COMMIT_VOTE_SPECIAL: 200000, + REVEAL_VOTE_SPECIAL: 250000, + // claim voting + CLAIM_DRAFT_VOTING: 8000000, + CLAIM_VOTING: 8000000, + CLAIM_SPECIAL_VOTING: 8000000, + // proposal + CREATE_PROPOSAL: 1000000, + ENDORSE_PROPOSAL: 400000, + EDIT_PROPOSAL: 1000000, + FINALIZE_PROPOSAL: 400000, + CLAIM_FUNDING: 400000, + FINISH_MILESTONE: 400000, + ADD_PROPOSAL_DOC: 300000, + CHANGE_FUNDINGS: 500000, + ABORT_PROPOSAL: 400000, + // default value + DEFAULT_GAS: 2000000, +}; + module.exports = { readProposalIndices, readSpecialProposalIndices, @@ -309,4 +353,6 @@ module.exports = { dijixDefaultFields, daoServerEndpoints, daoServerEventTypes, + gasLimits, + actionableStatus, }; diff --git a/helpers/contracts.js b/helpers/contracts.js index 5a0b4d2..1c0d05a 100644 --- a/helpers/contracts.js +++ b/helpers/contracts.js @@ -1,7 +1,6 @@ const ContractResolver = require('@digix/dao-contracts/build/contracts/ContractResolver.json'); const Dao = require('@digix/dao-contracts/build/contracts/Dao.json'); const DaoCalculatorService = require('@digix/dao-contracts/build/contracts/DaoCalculatorService.json'); -const DaoConfigsStorage = require('@digix/dao-contracts/build/contracts/DaoConfigsStorage.json'); const DaoFundingManager = require('@digix/dao-contracts/build/contracts/DaoFundingManager.json'); const DaoIdentity = require('@digix/dao-contracts/build/contracts/DaoIdentity.json'); const DaoIdentityStorage = require('@digix/dao-contracts/build/contracts/DaoIdentityStorage.json'); @@ -15,7 +14,12 @@ const DaoSpecialVotingClaims = require('@digix/dao-contracts/build/contracts/Dao const DaoStakeLocking = require('@digix/dao-contracts/build/contracts/DaoStakeLocking.json'); const DaoStakeStorage = require('@digix/dao-contracts/build/contracts/DaoStakeStorage.json'); const DaoStorage = require('@digix/dao-contracts/build/contracts/DaoStorage.json'); -const DaoUpgradeStorage = require('@digix/dao-contracts/build/contracts/DaoUpgradeStorage.json'); + +// Replace with DaoUpgradeStorage in mainnet deployment +// Replace with DaoConfigsStorage in mainnet deployment +const DaoUpgradeStorage = require('@digix/dao-contracts/build/contracts/MockDaoUpgradeStorage.json'); +const DaoConfigsStorage = require('@digix/dao-contracts/build/contracts/MockDaoConfigsStorage.json'); + const DaoVoting = require('@digix/dao-contracts/build/contracts/DaoVoting.json'); const DaoVotingClaims = require('@digix/dao-contracts/build/contracts/DaoVotingClaims.json'); const DaoWhitelisting = require('@digix/dao-contracts/build/contracts/DaoWhitelisting.json'); diff --git a/helpers/utils.js b/helpers/utils.js index 56794eb..ba6fdec 100644 --- a/helpers/utils.js +++ b/helpers/utils.js @@ -1,9 +1,17 @@ const BigNumber = require('bignumber.js'); const crypto = require('crypto'); +const { + getCurrentTimestamp, +} = require('@digix/helpers/lib/helpers'); + const { denominators, dijixDefaultFields, + gasLimits, + actionableStatus, + proposalStages, + proposalVotingStages, } = require('./constants'); const getServerSignatures = function (req) { @@ -254,6 +262,7 @@ const deserializeDaoInfo = function (daoInfo) { if (daoInfo === null) return daoInfo; daoInfo.totalLockedDgds = ofOne(daoInfo.totalLockedDgds, denominators.DGD); daoInfo.totalModeratorLockedDgds = ofOne(daoInfo.totalModeratorLockedDgds, denominators.DGD); + daoInfo.remainingFunds = ofOne(daoInfo.remainingFunds, denominators.ETH); return daoInfo; }; @@ -307,6 +316,133 @@ const getDefaultDijixFields = function () { }; }; +const _getAdditionalDocObj = function (doc) { + if (doc === null || doc === undefined) return doc; + const doc2 = { + ...doc.data.attestation.moreDocs, + created: Math.floor(doc.created / 1000), + }; + return doc2; +}; + +const getAdditionalDocs = function (docs) { + const additionalDocs = []; + for (const doc of docs) { + additionalDocs.push(_getAdditionalDocObj(doc)); + } + return additionalDocs; +}; + +const getTxConfigs = function () { + return { + gas: { + // participation + LOCK_DGD: gasLimits.LOCK_DGD, + UNLOCK_DGD: gasLimits.UNLOCK_DGD, + CONFIRM_CONTINUE_PARTICIPATION: gasLimits.CONFIRM_CONTINUE_PARTICIPATION, + CLAIM_REWARDS: gasLimits.CLAIM_REWARDS, + // voting + MODERATOR_VOTE: gasLimits.MODERATOR_VOTE, + COMMIT_VOTE: gasLimits.COMMIT_VOTE, + REVEAL_VOTE: gasLimits.REVEAL_VOTE, + COMMIT_VOTE_SPECIAL: gasLimits.COMMIT_VOTE_SPECIAL, + REVEAL_VOTE_SPECIAL: gasLimits.REVEAL_VOTE_SPECIAL, + // claim voting + CLAIM_DRAFT_VOTING: gasLimits.CLAIM_DRAFT_VOTING, + CLAIM_VOTING: gasLimits.CLAIM_VOTING, + CLAIM_SPECIAL_VOTING: gasLimits.CLAIM_SPECIAL_VOTING, + // proposal + CREATE_PROPOSAL: gasLimits.CREATE_PROPOSAL, + ENDORSE_PROPOSAL: gasLimits.ENDORSE_PROPOSAL, + EDIT_PROPOSAL: gasLimits.EDIT_PROPOSAL, + FINALIZE_PROPOSAL: gasLimits.FINALIZE_PROPOSAL, + CLAIM_FUNDING: gasLimits.CLAIM_FUNDING, + FINISH_MILESTONE: gasLimits.FINISH_MILESTONE, + ADD_PROPOSAL_DOC: gasLimits.ADD_PROPOSAL_DOC, + CHANGE_FUNDINGS: gasLimits.CHANGE_FUNDINGS, + ABORT_PROPOSAL: gasLimits.ABORT_PROPOSAL, + // default value + DEFAULT: gasLimits.DEFAULT_GAS, + }, + }; +}; + +const getCurrentActionableStatus = function (proposal, user) { + if (!proposal || !user) return actionableStatus.NONE; + + const currentTime = getCurrentTimestamp(); + if ( + proposal.stage === proposalStages.IDEA + && user.isModerator + ) { + return actionableStatus.AWAITING_ENDORSEMENT; + } + if ( + proposal.votingStage === proposalVotingStages.DRAFT + && currentTime > proposal.draftVoting.startTime + && currentTime < proposal.draftVoting.votingDeadline + && user.isModerator + ) { + return actionableStatus.MODERATOR_VOTING; + } + if ( + proposal.votingStage === proposalVotingStages.DRAFT + && currentTime > proposal.draftVoting.votingDeadline + && user.address === proposal.proposer + ) { + return actionableStatus.CLAIM_VOTING; + } + if ( + proposal.votingStage === proposalVotingStages.COMMIT + && currentTime > proposal.votingRounds[proposal.currentVotingRound].startTime + && currentTime < proposal.votingRounds[proposal.currentVotingRound].commitDeadline + && (user.isModerator || user.isParticipant) + ) { + return actionableStatus.COMMIT_PHASE; + } + if ( + proposal.votingStage === proposalVotingStages.COMMIT + && currentTime > proposal.votingRounds[proposal.currentVotingRound].commitDeadline + && currentTime < proposal.votingRounds[proposal.currentVotingRound].revealDeadline + && (user.isModerator || user.isParticipant) + ) { + return actionableStatus.REVEAL_PHASE; + } + if ( + proposal.votingStage === proposalVotingStages.COMMIT + && currentTime > proposal.votingRounds[proposal.currentVotingRound].revealDeadline + && user.address === proposal.proposer + ) { + return actionableStatus.CLAIM_VOTING; + } + if ( + proposal.stage === proposalStages.ONGOING + && proposal.claimableFunding !== null + && proposal.claimableFunding !== undefined + && proposal.claimableFunding !== '0' + && user.address === proposal.proposer + ) { + return actionableStatus.CLAIM_FUNDING; + } + if ( + proposal.isActive + && currentTime > proposal.votingRounds[0].startTime + && currentTime < proposal.votingRounds[0].commitDeadline + && (user.isModerator || user.isParticipant) + ) { + return actionableStatus.COMMIT_PHASE; + } + if ( + proposal.isActive + && currentTime > proposal.votingRounds[0].commitDeadline + && currentTime < proposal.votingRounds[0].revealDeadline + && (user.isModerator || user.isParticipant) + ) { + return actionableStatus.REVEAL_PHASE; + } + return actionableStatus.NONE; +}; + module.exports = { sumArray, sumArrayBN, @@ -332,4 +468,7 @@ module.exports = { getUpdatedFundings, getServerSignatures, getDefaultDijixFields, + getAdditionalDocs, + getTxConfigs, + getCurrentActionableStatus, }; diff --git a/package-lock.json b/package-lock.json index bce9672..e9628ac 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5,17 +5,17 @@ "requires": true, "dependencies": { "@apollographql/apollo-tools": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/@apollographql/apollo-tools/-/apollo-tools-0.3.5.tgz", - "integrity": "sha512-5ySiiNT2EIwxGKWyoAOnibCPUXvbxKOVxiPMK4uIXmvF+qbGNleQWP+vekciiAmCCESPmGd5szscRwDm4G/NNg==", + "version": "0.3.7", + "resolved": "https://registry.npmjs.org/@apollographql/apollo-tools/-/apollo-tools-0.3.7.tgz", + "integrity": "sha512-+ertvzAwzkYmuUtT8zH3Zi6jPdyxZwOgnYaZHY7iLnMVJDhQKWlkyjLMF8wyzlPiEdDImVUMm5lOIBZo7LkGlg==", "requires": { - "apollo-env": "0.4.0" + "apollo-env": "0.5.1" } }, "@apollographql/graphql-playground-html": { - "version": "1.6.6", - "resolved": "https://registry.npmjs.org/@apollographql/graphql-playground-html/-/graphql-playground-html-1.6.6.tgz", - "integrity": "sha512-lqK94b+caNtmKFs5oUVXlSpN3sm5IXZ+KfhMxOtr0LR2SqErzkoJilitjDvJ1WbjHlxLI7WtCjRmOLdOGJqtMQ==" + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/@apollographql/graphql-playground-html/-/graphql-playground-html-1.6.18.tgz", + "integrity": "sha512-7HGC1hQ0Aj93z2kv8h4RBtYClkiccj+F2Juh1m74Pky7D9tJDsQ4eBlaNNn0jMxGAL6EuaGwBN46EA9JtBMRog==" }, "@babel/code-frame": { "version": "7.0.0", @@ -107,21 +107,12 @@ "ganache-cli": "6.4.1", "openzeppelin-solidity": "1.12.0", "truffle": "4.1.15", - "web3-utils": "1.0.0-beta.48" + "web3-utils": "1.0.0-beta.55" }, "dependencies": { "@babel/runtime": { - "version": "7.3.4", - "bundled": true, - "requires": { - "regenerator-runtime": "0.12.1" - }, - "dependencies": { - "regenerator-runtime": { - "version": "0.12.1", - "bundled": true - } - } + "version": "", + "bundled": true }, "@digix/bitcore-mnemonic": { "version": "1.5.2", @@ -156,7 +147,7 @@ "tar.gz": "1.0.7", "toml": "2.3.6", "tomlify-j0.4": "1.0.4", - "truffle-config": "1.1.6", + "truffle-config": "1.1.12", "truffle-resolver": "3.0.1" } }, @@ -171,7 +162,7 @@ "elliptic": "3.1.0", "ethereumjs-tx": "1.3.7", "ethereumjs-util": "5.2.0", - "rlp": "2.2.2", + "rlp": "2.2.3", "scrypt-async": "1.3.1", "tweetnacl": "0.13.2", "web3": "0.20.2" @@ -186,7 +177,7 @@ "bundled": true, "requires": { "base64-js": "1.3.0", - "ieee754": "1.1.12", + "ieee754": "1.1.13", "isarray": "1.0.0" } }, @@ -307,7 +298,7 @@ "debug": "3.2.6", "graphlib": "2.1.7", "solc": "0.4.25", - "truffle-config": "1.1.6", + "truffle-config": "1.1.12", "truffle-contract-sources": "0.0.2", "truffle-error": "0.0.3", "truffle-expect": "0.0.4" @@ -341,11 +332,11 @@ "version": "4.11.4", "bundled": true, "requires": { - "@types/node": "10.14.1" + "@types/node": "10.14.7" } }, "@types/node": { - "version": "10.14.1", + "version": "10.14.7", "bundled": true }, "abstract-leveldown": { @@ -981,7 +972,7 @@ "babel-plugin-transform-regenerator": "6.26.0", "browserslist": "3.2.8", "invariant": "2.2.4", - "semver": "5.6.0" + "semver": "5.7.0" } }, "babel-register": { @@ -1292,8 +1283,8 @@ "version": "3.2.8", "bundled": true, "requires": { - "caniuse-lite": "1.0.30000950", - "electron-to-chromium": "1.3.116" + "caniuse-lite": "1.0.30000971", + "electron-to-chromium": "1.3.137" } }, "bs58": { @@ -1308,7 +1299,7 @@ "bundled": true, "requires": { "base64-js": "1.3.0", - "ieee754": "1.1.12" + "ieee754": "1.1.13" } }, "buffer-alloc": { @@ -1375,7 +1366,7 @@ "bundled": true }, "caniuse-lite": { - "version": "1.0.30000950", + "version": "1.0.30000971", "bundled": true }, "canvas": { @@ -1907,7 +1898,7 @@ "bundled": true }, "electron-to-chromium": { - "version": "1.3.116", + "version": "1.3.137", "bundled": true }, "elliptic": { @@ -2016,7 +2007,6 @@ "imurmurhash": "0.1.4", "inquirer": "3.3.0", "is-resolvable": "1.1.0", - "js-yaml": "3.12.2", "json-stable-stringify-without-jsonify": "1.0.1", "levn": "0.3.0", "lodash": "4.17.11", @@ -2029,7 +2019,7 @@ "progress": "2.0.3", "regexpp": "1.1.0", "require-uncached": "1.0.3", - "semver": "5.6.0", + "semver": "5.7.0", "strip-ansi": "4.0.0", "strip-json-comments": "2.0.1", "table": "4.0.2", @@ -2370,7 +2360,7 @@ "version": "1.4.2", "bundled": true, "requires": { - "ethereumjs-abi": "0.6.6", + "ethereumjs-abi": "git+https://github.com/ethereumjs/ethereumjs-abi.git#8431eab7b3384e65e8126a4602520b78031666fb", "ethereumjs-util": "5.2.0" } }, @@ -2379,7 +2369,7 @@ "bundled": true }, "ethereumjs-abi": { - "version": "0.6.6", + "version": "git+https://github.com/ethereumjs/ethereumjs-abi.git#8431eab7b3384e65e8126a4602520b78031666fb", "bundled": true, "requires": { "bn.js": "4.11.8", @@ -2388,13 +2378,14 @@ "dependencies": { "ethereumjs-util": { "version": "6.1.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-6.1.0.tgz", + "integrity": "sha512-URESKMFbDeJxnAxPppnk2fN6Y3BIatn9fwn76Lm8bQlt+s52TpG8dN9M66MLPuRAiAOIqL3dfwqWJf0sd0fL0Q==", "requires": { "bn.js": "4.11.8", "create-hash": "1.2.0", "ethjs-util": "0.1.6", "keccak": "1.4.0", - "rlp": "2.2.2", + "rlp": "2.2.3", "safe-buffer": "5.1.2", "secp256k1": "3.6.2" } @@ -2406,7 +2397,7 @@ "bundled": true, "requires": { "ethereumjs-util": "5.2.0", - "rlp": "2.2.2", + "rlp": "2.2.3", "safe-buffer": "5.1.2" } }, @@ -2451,7 +2442,7 @@ "create-hash": "1.2.0", "ethjs-util": "0.1.6", "keccak": "1.4.0", - "rlp": "2.2.2", + "rlp": "2.2.3", "safe-buffer": "5.1.2", "secp256k1": "3.6.2" } @@ -2492,7 +2483,7 @@ "create-hash": "1.2.0", "ethjs-util": "0.1.6", "keccak": "1.4.0", - "rlp": "2.2.2", + "rlp": "2.2.3", "safe-buffer": "5.1.2", "secp256k1": "3.6.2" } @@ -2507,7 +2498,7 @@ "create-hash": "1.2.0", "ethjs-util": "0.1.6", "keccak": "1.4.0", - "rlp": "2.2.2", + "rlp": "2.2.3", "safe-buffer": "5.1.2", "secp256k1": "3.6.2" } @@ -2518,7 +2509,7 @@ "version": "4.0.0-beta.1", "bundled": true, "requires": { - "@types/node": "10.14.1", + "@types/node": "10.14.7", "aes-js": "3.0.0", "bn.js": "4.11.8", "elliptic": "6.3.3", @@ -3459,7 +3450,7 @@ } }, "ieee754": { - "version": "1.1.12", + "version": "1.1.13", "bundled": true }, "ignore": { @@ -3836,14 +3827,6 @@ "version": "3.0.2", "bundled": true }, - "js-yaml": { - "version": "3.12.2", - "bundled": true, - "requires": { - "argparse": "1.0.10", - "esprima": "4.0.1" - } - }, "jsbn": { "version": "0.1.1", "bundled": true @@ -4300,7 +4283,7 @@ "levelup": "1.3.9", "memdown": "1.4.1", "readable-stream": "2.3.6", - "rlp": "2.2.2", + "rlp": "2.2.3", "semaphore": "1.1.0" }, "dependencies": { @@ -4637,7 +4620,7 @@ "requires": { "hosted-git-info": "2.7.1", "resolve": "1.10.0", - "semver": "5.6.0", + "semver": "5.7.0", "validate-npm-package-license": "3.0.4" } }, @@ -5013,8 +4996,7 @@ "bundled": true, "requires": { "loose-envify": "1.4.0", - "object-assign": "4.1.1", - "react-is": "16.8.4" + "object-assign": "4.1.1" } }, "protocol-buffers-schema": { @@ -5129,10 +5111,6 @@ "unpipe": "1.0.0" } }, - "react-is": { - "version": "16.8.4", - "bundled": true - }, "read-pkg": { "version": "1.1.0", "bundled": true, @@ -5307,7 +5285,7 @@ } }, "rlp": { - "version": "2.2.2", + "version": "2.2.3", "bundled": true, "requires": { "bn.js": "4.11.8", @@ -5446,7 +5424,7 @@ "bundled": true }, "semver": { - "version": "5.6.0", + "version": "5.7.0", "bundled": true }, "send": { @@ -5596,7 +5574,7 @@ "fs-extra": "0.30.0", "memorystream": "0.3.1", "require-from-string": "1.2.1", - "semver": "5.6.0", + "semver": "5.7.0", "yargs": "4.8.1" } }, @@ -6031,7 +6009,7 @@ } }, "truffle-config": { - "version": "1.1.6", + "version": "1.1.12", "bundled": true, "requires": { "configstore": "4.0.0", @@ -6039,19 +6017,21 @@ "lodash": "4.17.11", "original-require": "1.0.1", "truffle-error": "0.0.4", - "truffle-provider": "0.1.5" + "truffle-provider": "0.1.9" }, "dependencies": { "find-up": { "version": "2.1.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", "requires": { "locate-path": "2.0.0" } }, "truffle-error": { "version": "0.0.4", - "bundled": true + "resolved": "https://registry.npmjs.org/truffle-error/-/truffle-error-0.0.4.tgz", + "integrity": "sha512-hER0TNR4alBIhUp7SNrZRRiZtM/MBx+xBdM9qXP0tC3YASFmhNAxPuOyB8JDHFRNbDx12K7nvaqmyYGsI5c8BQ==" } } }, @@ -6106,22 +6086,41 @@ "version": "0.0.4", "bundled": true }, + "truffle-interface-adapter": { + "version": "0.1.2", + "bundled": true, + "requires": { + "bn.js": "4.11.8", + "web3": "1.0.0-beta.37" + } + }, "truffle-provider": { - "version": "0.1.5", + "version": "0.1.9", "bundled": true, "requires": { "truffle-error": "0.0.4", + "truffle-interface-adapter": "0.1.5", "web3": "1.0.0-beta.37" }, "dependencies": { "truffle-error": { "version": "0.0.4", - "bundled": true + "resolved": "https://registry.npmjs.org/truffle-error/-/truffle-error-0.0.4.tgz", + "integrity": "sha512-hER0TNR4alBIhUp7SNrZRRiZtM/MBx+xBdM9qXP0tC3YASFmhNAxPuOyB8JDHFRNbDx12K7nvaqmyYGsI5c8BQ==" + }, + "truffle-interface-adapter": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/truffle-interface-adapter/-/truffle-interface-adapter-0.1.5.tgz", + "integrity": "sha512-TbKD7oUdz/0GqeR4PStNoad4uwKkHtZMUQQH+Xyy5acVZxBCJ7uTGwYVaOvtxeAITaX5zxeyhjlU8IKyrnd4QA==", + "requires": { + "bn.js": "4.11.8", + "web3": "1.0.0-beta.37" + } } } }, "truffle-provisioner": { - "version": "0.1.2", + "version": "0.1.4", "bundled": true }, "truffle-resolver": { @@ -6131,7 +6130,7 @@ "async": "2.6.1", "truffle-contract": "2.0.5", "truffle-expect": "0.0.3", - "truffle-provisioner": "0.1.2" + "truffle-provisioner": "0.1.4" }, "dependencies": { "truffle-expect": { @@ -6769,29 +6768,43 @@ } }, "web3-utils": { - "version": "1.0.0-beta.48", + "version": "1.0.0-beta.55", "bundled": true, "requires": { - "@babel/runtime": "7.3.4", + "@babel/runtime": "7.4.5", "@types/bn.js": "4.11.4", - "@types/node": "10.14.1", + "@types/node": "10.14.7", "bn.js": "4.11.8", "eth-lib": "0.2.8", "ethjs-unit": "0.1.6", "lodash": "4.17.11", "number-to-bn": "1.7.0", - "randomhex": "0.1.5", + "randombytes": "2.1.0", "utf8": "2.1.1" }, "dependencies": { + "@babel/runtime": { + "version": "7.4.5", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.4.5.tgz", + "integrity": "sha512-TuI4qpWZP6lGOGIuGWtp9sPluqYICmbk8T/1vpSysqJxRPkudh/ofFWyqdcMsDf2s7KvDL4/YHgKyvcS3g9CJQ==", + "requires": { + "regenerator-runtime": "0.13.2" + } + }, "eth-lib": { "version": "0.2.8", - "bundled": true, + "resolved": "https://registry.npmjs.org/eth-lib/-/eth-lib-0.2.8.tgz", + "integrity": "sha512-ArJ7x1WcWOlSpzdoTBX8vkwlkSQ85CjjifSZtV4co64vWxSV8geWfPI9x4SVYu3DSxnX4yWFVTtGL+j9DUFLNw==", "requires": { "bn.js": "4.11.8", "elliptic": "6.4.1", "xhr-request-promise": "0.1.2" } + }, + "regenerator-runtime": { + "version": "0.13.2", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.2.tgz", + "integrity": "sha512-S/TQAZJO+D3m9xeN1WTI8dLKBBiRgXBlTJvbWjCThHWZj9EvHK70Ff50/tYj2J/fvBY6JtFVwRuazHN2E7M9BA==" } } }, @@ -7001,7 +7014,7 @@ "awaiting": "3.0.0", "babel-plugin-transform-runtime": "6.23.0", "babel-runtime": "6.26.0", - "commander": "2.19.0", + "commander": "2.20.0", "get-installed-path": "3.0.3", "ipfs-api": "14.3.7", "isomorphic-fetch": "2.2.1" @@ -7019,7 +7032,7 @@ "elliptic": "3.1.0", "ethereumjs-tx": "1.3.7", "ethereumjs-util": "5.2.0", - "rlp": "2.2.2", + "rlp": "2.2.3", "scrypt-async": "1.3.1", "tweetnacl": "0.13.2", "web3": "0.20.2" @@ -7079,7 +7092,7 @@ "awaiting": "3.0.0", "ethereumjs-testrpc": "3.9.2", "openzeppelin-solidity": "1.8.0", - "solc": "0.4.25" + "solc": "0.4.26" } }, "@digix/multi-hash": { @@ -7140,7 +7153,7 @@ "requires": { "continuation-local-storage": "3.2.1", "log-driver": "1.2.7", - "semver": "5.6.0", + "semver": "5.7.0", "shimmer": "1.2.1", "uuid": "3.3.2" } @@ -7161,7 +7174,7 @@ "requires": { "continuation-local-storage": "3.2.1", "log-driver": "1.2.7", - "semver": "5.6.0", + "semver": "5.7.0", "shimmer": "1.2.1", "uuid": "3.3.2" } @@ -7169,9 +7182,9 @@ } }, "@pm2/agent": { - "version": "0.5.23", - "resolved": "https://registry.npmjs.org/@pm2/agent/-/agent-0.5.23.tgz", - "integrity": "sha512-mviwkRt51y3wY161uxiqXc0wyHTjgo+sIkJ/Mh6m400dYAnAGQ12LFlK56EbnQRwPfPog0q6txqncbFpn4L5zA==", + "version": "0.5.25", + "resolved": "https://registry.npmjs.org/@pm2/agent/-/agent-0.5.25.tgz", + "integrity": "sha512-MeIPvxcWq2VTCDedF0jnLrvt4OIWWMTnXPsCLmPWp2oWG2OR3d6gLsrXCN1NO7Oo39LBjZbS5ckOaiBpJuqM9w==", "requires": { "async": "2.6.2", "chalk": "2.4.2", @@ -7181,7 +7194,8 @@ "nssocket": "0.6.0", "pm2-axon": "3.3.0", "pm2-axon-rpc": "0.5.1", - "semver": "5.6.0", + "proxy-agent": "3.1.0", + "semver": "5.7.0", "ws": "5.2.2" }, "dependencies": { @@ -7222,14 +7236,14 @@ } }, "@pm2/agent-node": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/@pm2/agent-node/-/agent-node-1.1.8.tgz", - "integrity": "sha512-R5X6P+eZM9wVxix5HzJnoAo0F0JCnu9kJcPfscCKx+gVFw69VjmvXxTHGejYNMokrkIGQ+BIJQ2+/uGnLFvi3w==", + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/@pm2/agent-node/-/agent-node-1.1.9.tgz", + "integrity": "sha512-DEtMFWr7B6uYl/8pxH3+q6hk+D1eavfeojDmkdk68w0s7CHb7pPDffkaRgRVPnl85Yw4i66IHYzLVb8NGy09lw==", "requires": { "debug": "3.2.6", "eventemitter2": "5.0.1", - "proxy-agent": "3.0.3", - "ws": "6.2.0" + "proxy-agent": "3.1.0", + "ws": "6.2.1" }, "dependencies": { "debug": { @@ -7248,18 +7262,18 @@ } }, "@pm2/io": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/@pm2/io/-/io-4.1.2.tgz", - "integrity": "sha512-AS4eIjcBGac+hxq2c1Rb9jaXIn3VBv998vhACi6yD9RLb9+jUZ4Ezs6FsIg2i4rfMoiBn3b9DewjCfLGqhYB4g==", + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/@pm2/io/-/io-4.2.1.tgz", + "integrity": "sha512-WoOqkWzXyH7ftpFFVVUT3YPosmvvVLfPMWTHY53HxVWEM8cALX63aAZLXneB4r76nK5bAaV5VEDE6fHpbDuQCw==", "requires": { "@opencensus/core": "0.0.9", "@opencensus/propagation-b3": "0.0.8", - "@pm2/agent-node": "1.1.8", + "@pm2/agent-node": "1.1.9", "async": "2.6.2", "debug": "3.1.0", "event-loop-inspector": "1.2.2", "eventemitter2": "5.0.1", - "require-in-the-middle": "3.0.0", + "require-in-the-middle": "4.0.0", "semver": "5.5.0", "shimmer": "1.2.1", "signal-exit": "3.0.2", @@ -7282,9 +7296,9 @@ } }, "@pm2/js-api": { - "version": "0.5.53", - "resolved": "https://registry.npmjs.org/@pm2/js-api/-/js-api-0.5.53.tgz", - "integrity": "sha512-ddlBUhB2tP6wQRygICdz/W/2XRA4fL0ituw8jBheS0QdVM4tVD2hmELl3ABVx63+AMOOydvGSIflNku1IxKFvw==", + "version": "0.5.57", + "resolved": "https://registry.npmjs.org/@pm2/js-api/-/js-api-0.5.57.tgz", + "integrity": "sha512-sfD7+yWo2YHvnNWz+cYSHEI7p8O/bqsAtRylDxJSfhTljcUTH+nOvBAqrZoKEhkimcXoDPvFVEPgj2j2l7Jr6Q==", "requires": { "async": "2.6.2", "axios": "0.16.2", @@ -7369,7 +7383,7 @@ "resolved": "https://registry.npmjs.org/@types/accepts/-/accepts-1.3.5.tgz", "integrity": "sha512-jOdnI/3qTpHABjM5cx1Hc0sKsPoYCp+DP/GJRGtDlPd7fiV9oXGGIcjW/ZOxLIvjGz8MA+uMZI9metHlgqbgwQ==", "requires": { - "@types/node": "11.11.3" + "@types/node": "12.0.2" } }, "@types/body-parser": { @@ -7378,7 +7392,7 @@ "integrity": "sha512-a2+YeUjPkztKJu5aIF2yArYFQQp8d51wZ7DavSHjFuY1mqVgidGyzEQ41JIVNy82fXj8yPgy2vJmfIywgESW6w==", "requires": { "@types/connect": "3.4.32", - "@types/node": "11.11.3" + "@types/node": "12.0.2" } }, "@types/connect": { @@ -7386,13 +7400,13 @@ "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.32.tgz", "integrity": "sha512-4r8qa0quOvh7lGD0pre62CAb1oni1OO6ecJLGCezTmhQ8Fz50Arx9RUszryR8KlgK6avuSXvviL6yWyViQABOg==", "requires": { - "@types/node": "11.11.3" + "@types/node": "12.0.2" } }, "@types/cors": { - "version": "2.8.4", - "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.4.tgz", - "integrity": "sha512-ipZjBVsm2tF/n8qFGOuGBkUij9X9ZswVi9G3bx/6dz7POpVa6gVHcj1wsX/LVEn9MMF41fxK/PnZPPoTD1UFPw==", + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.5.tgz", + "integrity": "sha512-GmK8AKu8i+s+EChK/uZ5IbrXPcPaQKWaNSGevDT/7o3gFObwSUQwqb1jMqxuo+YPvj0ckGzINI+EO7EHcmJjKg==", "requires": { "@types/express": "4.16.1" } @@ -7408,16 +7422,16 @@ "integrity": "sha512-V0clmJow23WeyblmACoxbHBu2JKlE5TiIme6Lem14FnPW9gsttyHtk6wq7njcdIWH1njAaFgR8gW09lgY98gQg==", "requires": { "@types/body-parser": "1.17.0", - "@types/express-serve-static-core": "4.16.2", + "@types/express-serve-static-core": "4.16.5", "@types/serve-static": "1.13.2" } }, "@types/express-serve-static-core": { - "version": "4.16.2", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.16.2.tgz", - "integrity": "sha512-qgc8tjnDrc789rAQed8NoiFLV5VGcItA4yWNFphqGU0RcuuQngD00g3LHhWIK3HQ2XeDgVCmlNPDlqi3fWBHnQ==", + "version": "4.16.5", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.16.5.tgz", + "integrity": "sha512-T8oej2B9TVALoCK4epWXRNWaFaqDyOaEQ3ntph+tSw5QoKnZfxgCXefIm3+nGp2XCRrkX4X7U5CSTMnwKJcOjQ==", "requires": { - "@types/node": "11.11.3", + "@types/node": "12.0.2", "@types/range-parser": "1.2.3" } }, @@ -7432,9 +7446,9 @@ "integrity": "sha512-FwI9gX75FgVBJ7ywgnq/P7tw+/o1GUbtP0KzbtusLigAOgIgNISRK0ZPl4qertvXSIE8YbsVJueQ90cDt9YYyw==" }, "@types/node": { - "version": "11.11.3", - "resolved": "https://registry.npmjs.org/@types/node/-/node-11.11.3.tgz", - "integrity": "sha512-wp6IOGu1lxsfnrD+5mX6qwSwWuqsdkKKxTN4aQc4wByHAKZJf9/D4KXPQ1POUjEbnCP5LMggB0OEFNY9OTsMqg==" + "version": "12.0.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-12.0.2.tgz", + "integrity": "sha512-5tabW/i+9mhrfEOUcLDu2xBPsHJ+X5Orqy9FKpale3SjDA17j5AEpYq5vfy3oAeAHGcvANRCO3NV3d2D6q3NiA==" }, "@types/range-parser": { "version": "1.2.3", @@ -7446,7 +7460,7 @@ "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.13.2.tgz", "integrity": "sha512-/BZ4QRLpH/bNYgZgwhKEh+5AsboDBcUdlBYgzoLX0fpj3Y2gp6EApyOlM3bK53wQS/OE1SrdSYBAbux2D1528Q==", "requires": { - "@types/express-serve-static-core": "4.16.2", + "@types/express-serve-static-core": "4.16.5", "@types/mime": "2.0.1" } }, @@ -7456,7 +7470,7 @@ "integrity": "sha512-EzH8k1gyZ4xih/MaZTXwT2xOkPiIMSrhQ9b8wrlX88L0T02eYsddatQlwVFlEPyEqV0ChpdpNnE51QPH6NVT4Q==", "requires": { "@types/events": "3.0.0", - "@types/node": "11.11.3" + "@types/node": "12.0.2" } }, "abbrev": { @@ -7498,12 +7512,12 @@ } }, "accepts": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.5.tgz", - "integrity": "sha1-63d99gEXI6OxTopywIBcjoZ0a9I=", + "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.22", - "negotiator": "0.6.1" + "mime-types": "2.1.24", + "negotiator": "0.6.2" } }, "acorn": { @@ -7633,83 +7647,95 @@ } }, "apollo-cache-control": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/apollo-cache-control/-/apollo-cache-control-0.5.2.tgz", - "integrity": "sha512-uehXDUrd3Qim+nzxqqN7XT1YTbNSyumW3/FY5BxbKZTI8d4oPG4eyVQKqaggooSjswKQnOoIQVes3+qg9tGAkw==", + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/apollo-cache-control/-/apollo-cache-control-0.6.0.tgz", + "integrity": "sha512-66aCF6MHe0/FdD3knphwTv6CCIdb1ZxrMsiRpxP474qqyYVe2jAwBu6aJBn4emffZHZ7i6gp9dY6cPHThjnbKA==", "requires": { - "apollo-server-env": "2.2.0", - "graphql-extensions": "0.5.4" - }, - "dependencies": { - "graphql-extensions": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/graphql-extensions/-/graphql-extensions-0.5.4.tgz", - "integrity": "sha512-qLThJGVMqcItE7GDf/xX/E40m/aeqFheEKiR5bfra4q5eHxQKGjnIc20P9CVqjOn9I0FkEiU9ypOobfmIf7t6g==", - "requires": { - "@apollographql/apollo-tools": "0.3.5" - } - } + "apollo-server-env": "2.3.0", + "graphql-extensions": "0.6.0" } }, "apollo-datasource": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/apollo-datasource/-/apollo-datasource-0.3.1.tgz", - "integrity": "sha512-qdEUeonc9pPZvYwXK36h2NZoT7Pddmy0HYOzdV0ON5pcG1YtNmUyyYi83Q60V5wTWjuaCjyJ9hOY6wr0BMvQuA==", + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/apollo-datasource/-/apollo-datasource-0.4.0.tgz", + "integrity": "sha512-6QkgnLYwQrW0qv+yXIf617DojJbGmza2XJXUlgnzrGGhxzfAynzEjaLyYkc8rYS1m82vjrl9EOmLHTcnVkvZAQ==", "requires": { - "apollo-server-caching": "0.3.1", - "apollo-server-env": "2.2.0" + "apollo-server-caching": "0.4.0", + "apollo-server-env": "2.3.0" } }, "apollo-engine-reporting": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/apollo-engine-reporting/-/apollo-engine-reporting-1.0.7.tgz", - "integrity": "sha512-mFsXvd+1/o5jSa9tI2RoXYGcvCLcwwcfLwchjSTxqUd4ViB8RbqYKynzEZ+Omji7PBRM0azioBm43f7PSsQPqA==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/apollo-engine-reporting/-/apollo-engine-reporting-1.1.0.tgz", + "integrity": "sha512-Dj0BwgcluHL0QVUaquhAoYoLX9Z4DRP/n2REcIwO8d2iy52r+1wN5QqZLx97dEFh7CjhNjTWeysJzc8XMWKa1Q==", "requires": { - "apollo-engine-reporting-protobuf": "0.2.1", - "apollo-graphql": "0.1.3", - "apollo-server-core": "2.4.8", - "apollo-server-env": "2.2.0", + "apollo-engine-reporting-protobuf": "0.3.0", + "apollo-graphql": "0.2.1-register.1", + "apollo-server-core": "2.5.0", + "apollo-server-env": "2.3.0", "async-retry": "1.2.3", - "graphql-extensions": "0.5.7" + "graphql-extensions": "0.6.0" } }, "apollo-engine-reporting-protobuf": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/apollo-engine-reporting-protobuf/-/apollo-engine-reporting-protobuf-0.2.1.tgz", - "integrity": "sha512-5pYR84uWeylRS2OJowtkTczT3bWTwOErWtfnkRKccUi/wZ/AZJBP+D5HKNzM7xoFcz9XvrJyS+wBTz1oBi0Jiw==", + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/apollo-engine-reporting-protobuf/-/apollo-engine-reporting-protobuf-0.3.0.tgz", + "integrity": "sha512-PYowpx/E+TJT/8nKpp3JmJuKh3x1SZcxDF6Cquj0soV205TUpFFCZQMi91i5ACiEp2AkYvM/GDBIrw+rfIwzTg==", "requires": { "protobufjs": "6.8.8" } }, "apollo-env": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/apollo-env/-/apollo-env-0.4.0.tgz", - "integrity": "sha512-TZpk59RTbXd8cEqwmI0KHFoRrgBRplvPAP4bbRrX4uDSxXvoiY0Y6tQYUlJ35zi398Hob45mXfrZxeRDzoFMkQ==", + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/apollo-env/-/apollo-env-0.5.1.tgz", + "integrity": "sha512-fndST2xojgSdH02k5hxk1cbqA9Ti8RX4YzzBoAB4oIe1Puhq7+YlhXGXfXB5Y4XN0al8dLg+5nAkyjNAR2qZTw==", "requires": { - "core-js": "3.0.0-beta.13", - "node-fetch": "2.3.0", + "core-js": "3.1.2", + "node-fetch": "2.6.0", "sha.js": "2.4.11" }, "dependencies": { "core-js": { - "version": "3.0.0-beta.13", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.0.0-beta.13.tgz", - "integrity": "sha512-16Q43c/3LT9NyePUJKL8nRIQgYWjcBhjJSMWg96PVSxoS0PeE0NHitPI3opBrs9MGGHjte1KoEVr9W63YKlTXQ==" + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.1.2.tgz", + "integrity": "sha512-3poRGjbu56leCtZCZCzCgQ7GcKOflDFnjWIepaPFUsM0IXUBrne10sl3aa2Bkcz3+FjRdIxBe9dAMhIJmEnQNA==" }, "node-fetch": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.3.0.tgz", - "integrity": "sha512-MOd8pV3fxENbryESLgVIeaGKrdl+uaYhCSSVkjeOb/31/njTpcis5aWfdqgNlHIrKOLRbMnfPINPOML2CIFeXA==" + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.0.tgz", + "integrity": "sha512-8dG4H5ujfvFiqDmVu9fQ5bOHUC15JMjMY/Zumv26oOvvVJjM67KF8koCWIabKQ1GJIa9r2mMZscBq/TbdOcmNA==" } } }, "apollo-graphql": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/apollo-graphql/-/apollo-graphql-0.1.3.tgz", - "integrity": "sha512-bYgDh71jFfHKO9ioGlxnnoSYgpNp6LRl+/QHTx6tktQEN0Z+AdpkOKFNCHO/pRU/4vSqV5wuIhxhnCecxJQrMA==", + "version": "0.2.1-register.1", + "resolved": "https://registry.npmjs.org/apollo-graphql/-/apollo-graphql-0.2.1-register.1.tgz", + "integrity": "sha512-Z2LOuvYomC9CN9K+mpFVcVQu6Ml5PIJlV+YOkGzFq73xeqWg1InxHqI3eEdCEhxTJq6H8rlWT8ATrMS+4sIhqw==", "requires": { - "apollo-env": "0.4.0", + "apollo-env": "0.4.1-register.1", "lodash.sortby": "4.7.0" + }, + "dependencies": { + "apollo-env": { + "version": "0.4.1-register.1", + "resolved": "https://registry.npmjs.org/apollo-env/-/apollo-env-0.4.1-register.1.tgz", + "integrity": "sha512-fg1US7YZ6yW1N0tFq8g4HpCR3eJZmI+rIiHDiknYN9D1MTjvwYdmXYhi7VaPvQ21hV5nMRvfBUMqYXjP+6FsGQ==", + "requires": { + "core-js": "3.0.0-beta.13", + "node-fetch": "2.6.0", + "sha.js": "2.4.11" + } + }, + "core-js": { + "version": "3.0.0-beta.13", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.0.0-beta.13.tgz", + "integrity": "sha512-16Q43c/3LT9NyePUJKL8nRIQgYWjcBhjJSMWg96PVSxoS0PeE0NHitPI3opBrs9MGGHjte1KoEVr9W63YKlTXQ==" + }, + "node-fetch": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.0.tgz", + "integrity": "sha512-8dG4H5ujfvFiqDmVu9fQ5bOHUC15JMjMY/Zumv26oOvvVJjM67KF8koCWIabKQ1GJIa9r2mMZscBq/TbdOcmNA==" + } } }, "apollo-link": { @@ -7717,28 +7743,28 @@ "resolved": "https://registry.npmjs.org/apollo-link/-/apollo-link-1.2.11.tgz", "integrity": "sha512-PQvRCg13VduLy3X/0L79M6uOpTh5iHdxnxYuo8yL7sJlWybKRJwsv4IcRBJpMFbChOOaHY7Og9wgPo6DLKDKDA==", "requires": { - "apollo-utilities": "1.2.1", - "ts-invariant": "0.3.2", + "apollo-utilities": "1.3.0", + "ts-invariant": "0.3.3", "tslib": "1.9.3", "zen-observable-ts": "0.8.18" } }, "apollo-server": { - "version": "2.4.8", - "resolved": "https://registry.npmjs.org/apollo-server/-/apollo-server-2.4.8.tgz", - "integrity": "sha512-IU6RekO2dqrDdC+5hU6aeVvGg/2t/f01inBMjDhAn1a7hoITUXEh8Sa57TgmYEZ5uAtDuWW7cdiZN2j0cMI3/w==", - "requires": { - "apollo-server-core": "2.4.8", - "apollo-server-express": "2.4.8", - "express": "4.16.4", - "graphql-subscriptions": "1.0.0", + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/apollo-server/-/apollo-server-2.5.0.tgz", + "integrity": "sha512-85A3iAnXVP5QiXc0xvAJRyGsoxov06+8AzttKqehR4Q50UC1Is62xY5WZk58oW7fm+awpqh+sXB2F2E6tObSmg==", + "requires": { + "apollo-server-core": "2.5.0", + "apollo-server-express": "2.5.0", + "express": "4.17.0", + "graphql-subscriptions": "1.1.0", "graphql-tools": "4.0.4" } }, "apollo-server-caching": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/apollo-server-caching/-/apollo-server-caching-0.3.1.tgz", - "integrity": "sha512-mfxzikYXbB/OoEms77AGYwRh7FF3Oim5v5XWAL+VL49FrkbZt5lopVa4bABi7Mz8Nt3Htl9EBJN8765s/yh8IA==", + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/apollo-server-caching/-/apollo-server-caching-0.4.0.tgz", + "integrity": "sha512-GTOZdbLhrSOKYNWMYgaqX5cVNSMT0bGUTZKV8/tYlyYmsB6ey7l6iId3Q7UpHS6F6OR2lstz5XaKZ+T3fDfPzQ==", "requires": { "lru-cache": "5.1.1" }, @@ -7759,110 +7785,100 @@ } }, "apollo-server-core": { - "version": "2.4.8", - "resolved": "https://registry.npmjs.org/apollo-server-core/-/apollo-server-core-2.4.8.tgz", - "integrity": "sha512-N+5UOzHhMOnHizEiArJtNvEe/cGhSHQyTn5tlU4RJ36FDBJ/WlYZfPbGDMLISSUCJ6t+aP8GLL4Mnudt9d2PDQ==", + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/apollo-server-core/-/apollo-server-core-2.5.0.tgz", + "integrity": "sha512-7hyQ/Rt0hC38bUfxMQmLNHDBIGEBykFWo9EO0W+3o/cno/SqBKd1KKichrABVv+v+SCvZAUutX6gYS5l3G+ULQ==", "requires": { - "@apollographql/apollo-tools": "0.3.5", - "@apollographql/graphql-playground-html": "1.6.6", + "@apollographql/apollo-tools": "0.3.7", + "@apollographql/graphql-playground-html": "1.6.18", "@types/ws": "6.0.1", - "apollo-cache-control": "0.5.2", - "apollo-datasource": "0.3.1", - "apollo-engine-reporting": "1.0.7", - "apollo-server-caching": "0.3.1", - "apollo-server-env": "2.2.0", - "apollo-server-errors": "2.2.1", - "apollo-server-plugin-base": "0.3.7", - "apollo-tracing": "0.5.2", + "apollo-cache-control": "0.6.0", + "apollo-datasource": "0.4.0", + "apollo-engine-reporting": "1.1.0", + "apollo-server-caching": "0.4.0", + "apollo-server-env": "2.3.0", + "apollo-server-errors": "2.3.0", + "apollo-server-plugin-base": "0.4.0", + "apollo-tracing": "0.6.0", "fast-json-stable-stringify": "2.0.0", - "graphql-extensions": "0.5.7", - "graphql-subscriptions": "1.0.0", + "graphql-extensions": "0.6.0", + "graphql-subscriptions": "1.1.0", "graphql-tag": "2.10.1", "graphql-tools": "4.0.4", - "graphql-upload": "8.0.4", + "graphql-upload": "8.0.6", "sha.js": "2.4.11", "subscriptions-transport-ws": "0.9.16", - "ws": "6.2.0" + "ws": "6.2.1" } }, "apollo-server-env": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/apollo-server-env/-/apollo-server-env-2.2.0.tgz", - "integrity": "sha512-wjJiI5nQWPBpNmpiLP389Ezpstp71szS6DHAeTgYLb/ulCw3CTuuA+0/E1bsThVWiQaDeHZE0sE3yI8q2zrYiA==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/apollo-server-env/-/apollo-server-env-2.3.0.tgz", + "integrity": "sha512-WIwlkCM/gir0CkoYWPMTCH8uGCCKB/aM074U1bKayvkFOBVO2VgG5x2kgsfkyF05IMQq2/GOTsKhNY7RnUEhTA==", "requires": { - "node-fetch": "2.3.0", + "node-fetch": "2.6.0", "util.promisify": "1.0.0" }, "dependencies": { "node-fetch": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.3.0.tgz", - "integrity": "sha512-MOd8pV3fxENbryESLgVIeaGKrdl+uaYhCSSVkjeOb/31/njTpcis5aWfdqgNlHIrKOLRbMnfPINPOML2CIFeXA==" + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.0.tgz", + "integrity": "sha512-8dG4H5ujfvFiqDmVu9fQ5bOHUC15JMjMY/Zumv26oOvvVJjM67KF8koCWIabKQ1GJIa9r2mMZscBq/TbdOcmNA==" } } }, "apollo-server-errors": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/apollo-server-errors/-/apollo-server-errors-2.2.1.tgz", - "integrity": "sha512-wY/YE3iJVMYC+WYIf8QODBjIP4jhI+oc7kiYo9mrz7LdYPKAgxr/he+NteGcqn/0Ea9K5/ZFTGJDbEstSMeP8g==" + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/apollo-server-errors/-/apollo-server-errors-2.3.0.tgz", + "integrity": "sha512-rUvzwMo2ZQgzzPh2kcJyfbRSfVKRMhfIlhY7BzUfM4x6ZT0aijlgsf714Ll3Mbf5Fxii32kD0A/DmKsTecpccw==" }, "apollo-server-express": { - "version": "2.4.8", - "resolved": "https://registry.npmjs.org/apollo-server-express/-/apollo-server-express-2.4.8.tgz", - "integrity": "sha512-i60l32mfVe33jnKDPNYgUKUKu4Al0xEm2HLOSMgtJ9Wbpe/MbOx5X8M5F27fnHYdM+G5XfAErsakAyRGnQJ48Q==", + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/apollo-server-express/-/apollo-server-express-2.5.0.tgz", + "integrity": "sha512-2gd3VWIqji2jyDYMTTqKzVU4/znjEjugtLUmPgVl5SoBvJSMTsO7VgJv+roBubZGDK8jXXUEXr2a33RtIeHe4g==", "requires": { - "@apollographql/graphql-playground-html": "1.6.6", + "@apollographql/graphql-playground-html": "1.6.18", "@types/accepts": "1.3.5", "@types/body-parser": "1.17.0", - "@types/cors": "2.8.4", + "@types/cors": "2.8.5", "@types/express": "4.16.1", - "accepts": "1.3.5", - "apollo-server-core": "2.4.8", - "body-parser": "1.18.3", + "accepts": "1.3.7", + "apollo-server-core": "2.5.0", + "body-parser": "1.19.0", "cors": "2.8.5", - "graphql-subscriptions": "1.0.0", + "graphql-subscriptions": "1.1.0", "graphql-tools": "4.0.4", - "type-is": "1.6.16" + "type-is": "1.6.18" } }, "apollo-server-plugin-base": { - "version": "0.3.7", - "resolved": "https://registry.npmjs.org/apollo-server-plugin-base/-/apollo-server-plugin-base-0.3.7.tgz", - "integrity": "sha512-hW1jaLKf9qNOxMTwRq2CSqz3eqXsZuEiCc8/mmEtOciiVBq1GMtxFf19oIYM9HQuPvQU2RWpns1VrYN59L3vbg==" + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/apollo-server-plugin-base/-/apollo-server-plugin-base-0.4.0.tgz", + "integrity": "sha512-iD7ARNtwnvHGd1EMPK0CuodM8d8hgDvFwTfIDzJY04QIQ6/KrBFaWhnCXJsy+HMb47GovwBbq67IK6eb2WJgBg==" }, "apollo-tracing": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/apollo-tracing/-/apollo-tracing-0.5.2.tgz", - "integrity": "sha512-2FdwRvPIq9uuF6OzONroXep6VBGqzHOkP6LlcFQe7SdwxfRP+SD/ycHNSC1acVg2b8d+am9Kzqg2vV54UpOIKA==", + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/apollo-tracing/-/apollo-tracing-0.6.0.tgz", + "integrity": "sha512-OpYPHVBgcQ/HT2WLXJQWwhilzR1rrl01tZeMU2N7yinsp/oyKngF5aUSMtuvX1k/T3abilQo+w10oAQlBCGdPA==", "requires": { - "apollo-server-env": "2.2.0", - "graphql-extensions": "0.5.4" - }, - "dependencies": { - "graphql-extensions": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/graphql-extensions/-/graphql-extensions-0.5.4.tgz", - "integrity": "sha512-qLThJGVMqcItE7GDf/xX/E40m/aeqFheEKiR5bfra4q5eHxQKGjnIc20P9CVqjOn9I0FkEiU9ypOobfmIf7t6g==", - "requires": { - "@apollographql/apollo-tools": "0.3.5" - } - } + "apollo-server-env": "2.3.0", + "graphql-extensions": "0.6.0" } }, "apollo-utilities": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/apollo-utilities/-/apollo-utilities-1.2.1.tgz", - "integrity": "sha512-Zv8Udp9XTSFiN8oyXOjf6PMHepD4yxxReLsl6dPUy5Ths7jti3nmlBzZUOxuTWRwZn0MoclqL7RQ5UEJN8MAxg==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/apollo-utilities/-/apollo-utilities-1.3.0.tgz", + "integrity": "sha512-wQjV+FdWcTWmWUFlChG5rS0vHKy5OsXC6XlV9STRstQq6VbXANwHy6DHnTEQAfLXWAbNcPgBu+nBUpR3dFhwrA==", "requires": { "fast-json-stable-stringify": "2.0.0", - "ts-invariant": "0.2.1", + "ts-invariant": "0.4.2", "tslib": "1.9.3" }, "dependencies": { "ts-invariant": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/ts-invariant/-/ts-invariant-0.2.1.tgz", - "integrity": "sha512-Z/JSxzVmhTo50I+LKagEISFJW3pvPCqsMWLamCTX8Kr3N5aMrnGOqcflbe5hLUzwjvgPfnLzQtHZv0yWQ+FIHg==", + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/ts-invariant/-/ts-invariant-0.4.2.tgz", + "integrity": "sha512-PTAAn8lJPEdRBJJEs4ig6MVZWfO12yrFzV7YaPslmyhG7+4MA279y4BXT3f72gXeVl0mC1aAWq2rMX4eKTWU/Q==", "requires": { "tslib": "1.9.3" } @@ -7891,7 +7907,7 @@ "dev": true, "requires": { "ast-types-flow": "0.0.7", - "commander": "2.19.0" + "commander": "2.20.0" } }, "arr-diff": { @@ -7958,9 +7974,9 @@ "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=" }, "ast-types": { - "version": "0.12.2", - "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.12.2.tgz", - "integrity": "sha512-8c83xDLJM/dLDyXNLiR6afRRm4dPKN6KAnKqytRK3DBJul9lA+atxdQkNDkSVPdTqea5HiRq3lnnOIZ0MBpvdg==" + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.13.1.tgz", + "integrity": "sha512-b+EeK0WlzrSmpMw5jktWvQGxblpWnvMrV+vOp69RLjzGiHwWV0vgq75DPKtUjppKni3yWwSW8WLGV3Ch/XIWcQ==" }, "ast-types-flow": { "version": "0.0.7", @@ -7983,9 +7999,9 @@ } }, "async-each": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.2.tgz", - "integrity": "sha512-6xrbvN0MOBKSJDdonmSSz2OwFSgxRaVtBDes26mj9KIGtDo+g9xosFRSC+i1gQh2oAN/tQ62AI/pGZGQjVOiRg==" + "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-eventemitter": { "version": "github:ahultgren/async-eventemitter#fa06e39e56786ba541c180061dbf2c0a5bbf951c", @@ -8003,7 +8019,7 @@ "resolved": "https://registry.npmjs.org/async-listener/-/async-listener-0.6.10.tgz", "integrity": "sha512-gpuo6xOyF4D5DE5WvyqZdPA3NGhiT6Qf07l7DCB0wwDEsLvDIbCr6j9S5aj5Ch96dLace5tXVzWBZkxU/c5ohw==", "requires": { - "semver": "5.6.0", + "semver": "5.7.0", "shimmer": "1.2.1" } }, @@ -8563,7 +8579,7 @@ "babel-plugin-transform-regenerator": "6.26.0", "browserslist": "3.2.8", "invariant": "2.2.4", - "semver": "5.6.0" + "semver": "5.7.0" } }, "babel-register": { @@ -8573,7 +8589,7 @@ "requires": { "babel-core": "6.26.3", "babel-runtime": "6.26.0", - "core-js": "2.6.5", + "core-js": "2.6.8", "home-or-tmp": "2.0.0", "lodash": "4.17.11", "mkdirp": "0.5.1", @@ -8585,7 +8601,7 @@ "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", "requires": { - "core-js": "2.6.5", + "core-js": "2.6.8", "regenerator-runtime": "0.11.1" } }, @@ -8666,7 +8682,7 @@ "requires": { "cache-base": "1.0.1", "class-utils": "0.3.6", - "component-emitter": "1.2.1", + "component-emitter": "1.3.0", "define-property": "1.0.0", "isobject": "3.0.1", "mixin-deep": "1.3.1", @@ -8754,9 +8770,9 @@ "version": "git+https://github.com/frozeman/bignumber.js-nolookahead.git#57692b3ecfc98bbdd6b3a516cb2353652ea49934" }, "binary-extensions": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.0.tgz", - "integrity": "sha512-EgmjVLMn22z7eGGv3kcnHwSnJXmFHjISTY9E/S5lIcTD3Oxw05QTcBLNkJFzcb3cNueUdF/IN4U+d78V0zO8Hw==" + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", + "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==" }, "bindings": { "version": "1.5.0", @@ -8843,51 +8859,20 @@ "integrity": "sha1-vIUVVUMPI8n3ZQp172TGqUw0GMw=" }, "body-parser": { - "version": "1.18.3", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.3.tgz", - "integrity": "sha1-WykhmP/dVTs6DyDe0FkrlWlVyLQ=", + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", + "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", "requires": { - "bytes": "3.0.0", + "bytes": "3.1.0", "content-type": "1.0.4", "debug": "2.6.9", "depd": "1.1.2", - "http-errors": "1.6.3", - "iconv-lite": "0.4.23", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", "on-finished": "2.3.0", - "qs": "6.5.2", - "raw-body": "2.3.3", - "type-is": "1.6.16" - }, - "dependencies": { - "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.5.0" - } - }, - "iconv-lite": { - "version": "0.4.23", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz", - "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==", - "requires": { - "safer-buffer": "2.1.2" - } - }, - "qs": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", - "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" - }, - "setprototypeof": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", - "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==" - } + "qs": "6.7.0", + "raw-body": "2.4.0", + "type-is": "1.6.18" } }, "boxen": { @@ -9023,8 +9008,8 @@ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-3.2.8.tgz", "integrity": "sha512-WHVocJYavUwVgVViC0ORikPHQquXwVh939TaelZ4WDqpWgTX/FsGhl/+P4qBUAGcRvtOgDgC+xftNWWp2RUTAQ==", "requires": { - "caniuse-lite": "1.0.30000950", - "electron-to-chromium": "1.3.116" + "caniuse-lite": "1.0.30000971", + "electron-to-chromium": "1.3.137" } }, "bs58": { @@ -9056,7 +9041,7 @@ "integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=", "requires": { "base64-js": "1.3.0", - "ieee754": "1.1.12", + "ieee754": "1.1.13", "isarray": "1.0.0" } }, @@ -9105,17 +9090,17 @@ "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=" }, "busboy": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/busboy/-/busboy-0.3.0.tgz", - "integrity": "sha512-e+kzZRAbbvJPLjQz2z+zAyr78BSi9IFeBTyLwF76g78Q2zRt/RZ1NtS3MS17v2yLqYfLz69zHdC+1L4ja8PwqQ==", + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/busboy/-/busboy-0.3.1.tgz", + "integrity": "sha512-y7tTxhGKXcyBxRKAni+awqx8uqaJKrSFSNFSeRG5CsWNdmy2BIK+6VGWEW7TZnIO/533mtMEA4rOevQV815YJw==", "requires": { "dicer": "0.3.0" } }, "bytes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", - "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=" + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", + "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==" }, "cache-base": { "version": "1.0.1", @@ -9123,7 +9108,7 @@ "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", "requires": { "collection-visit": "1.0.0", - "component-emitter": "1.2.1", + "component-emitter": "1.3.0", "get-value": "2.0.6", "has-value": "1.0.0", "isobject": "3.0.1", @@ -9134,9 +9119,9 @@ } }, "callsites": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.0.0.tgz", - "integrity": "sha512-tWnkwu9YEq2uzlBDI4RcLn8jrFvF9AOi8PxDNU3hZZjJcjkcRAq3vCI+vZcg1SuxISDYe86k9VZFwAxDiJGoAw==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", "dev": true }, "camelcase": { @@ -9145,16 +9130,16 @@ "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=" }, "caniuse-lite": { - "version": "1.0.30000950", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000950.tgz", - "integrity": "sha512-Cs+4U9T0okW2ftBsCIHuEYXXkki7mjXmjCh4c6PzYShk04qDEr76/iC7KwhLoWoY65wcra1XOsRD+S7BptEb5A==" + "version": "1.0.30000971", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000971.tgz", + "integrity": "sha512-TQFYFhRS0O5rdsmSbF1Wn+16latXYsQJat66f7S7lizXW1PVpWJeZw9wqqVLIjuxDRz7s7xRUj13QCfd8hKn6g==" }, "canvas": { "version": "1.6.13", "resolved": "https://registry.npmjs.org/canvas/-/canvas-1.6.13.tgz", "integrity": "sha512-XAfzfEOHZ3JIPjEV+WSI6PpISgUta3dgmndWbsajotz+0TQOX/jDpp2kawjRERatOGv9sMMzk5auB3GKEKA6hg==", "requires": { - "nan": "2.13.1" + "nan": "2.14.0" } }, "capture-stack-trace": { @@ -9199,18 +9184,18 @@ } }, "chokidar": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.2.tgz", - "integrity": "sha512-IwXUx0FXc5ibYmPC2XeEj5mpXoV66sR+t3jqu2NS2GYwCktt3KF1/Qqjws/NkegajBA4RbZ5+DDwlOiJsxDHEg==", + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.6.tgz", + "integrity": "sha512-V2jUo67OKkc6ySiRpJrjlpJKl9kDuG+Xb8VgsGzb+aEouhgS1D0weyPU4lEzdAcsCAvrih2J2BqyXqHWvVLw5g==", "requires": { "anymatch": "2.0.0", - "async-each": "1.0.2", + "async-each": "1.0.3", "braces": "2.3.2", - "fsevents": "1.2.7", + "fsevents": "1.2.9", "glob-parent": "3.1.0", "inherits": "2.0.3", "is-binary-path": "1.0.1", - "is-glob": "4.0.0", + "is-glob": "4.0.1", "normalize-path": "3.0.0", "path-is-absolute": "1.0.1", "readdirp": "2.2.1", @@ -9229,7 +9214,7 @@ "requires": { "class-is": "1.1.0", "multibase": "0.6.0", - "multicodec": "0.5.0", + "multicodec": "0.5.1", "multihashes": "0.4.14" } }, @@ -9360,22 +9345,22 @@ "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" }, "combined-stream": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.7.tgz", - "integrity": "sha512-brWl9y6vOB1xYPZcpZde3N9zDByXTosAeMDo4p1wzo6UMOX4vumB+TP1RZ76sfE6Md68Q0NJSrE/gbezd4Ul+w==", + "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.19.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.19.0.tgz", - "integrity": "sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg==" + "version": "2.20.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.0.tgz", + "integrity": "sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ==" }, "component-emitter": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", - "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=" + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", + "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==" }, "concat-map": { "version": "0.0.1", @@ -9413,9 +9398,12 @@ "dev": true }, "content-disposition": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", - "integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ=" + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", + "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", + "requires": { + "safe-buffer": "5.1.2" + } }, "content-type": { "version": "1.0.4", @@ -9440,9 +9428,9 @@ } }, "cookie": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", - "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=" + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", + "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==" }, "cookie-signature": { "version": "1.0.6", @@ -9460,9 +9448,9 @@ "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=" }, "core-js": { - "version": "2.6.5", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.5.tgz", - "integrity": "sha512-klh/kDpwX8hryYL14M9w/xei6vrv6sE8gTHDG7/T/+SEovB/G4ejwcfE/CBzO6Edsu+OETZMZ3wcX/EjUkrl5A==" + "version": "2.6.8", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.8.tgz", + "integrity": "sha512-RWlREFU74TEkdXzyl1bka66O3kYp8jeTXrvJZDzVVMH8AiHUSOFpL1yfhQJ+wHocAm1m+4971W1PPzfLuCv1vg==" }, "core-util-is": { "version": "1.0.2", @@ -9519,11 +9507,11 @@ } }, "cron": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/cron/-/cron-1.7.0.tgz", - "integrity": "sha512-I7S7ES2KZtKPfBTGJ5Brc6X23apE71fgYU/PC5ayh8R6VhECpqvTLe/LTkwAEN3ERFzNKXlWzh/PkwsGg3vkDQ==", + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/cron/-/cron-1.7.1.tgz", + "integrity": "sha512-gmMB/pJcqUVs/NklR1sCGlNYM7TizEw+1gebz20BMc/8bTm/r7QUp3ZPSPlG8Z5XRlvb7qhjEjq/+bdIfUCL2A==", "requires": { - "moment-timezone": "0.5.23" + "moment-timezone": "0.5.25" } }, "cross-spawn": { @@ -9557,9 +9545,9 @@ "integrity": "sha1-lQL18BVKLVoioCPnn3HMk2+m728=" }, "damerau-levenshtein": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.4.tgz", - "integrity": "sha1-AxkcQyy27qFou3fzpV/9zLiXhRQ=", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.5.tgz", + "integrity": "sha512-CBCRqFnpu715iPmw1KrdOrzRqbdFwQTwAWyyyYS42+iAgHCuXZ+/TdMgQkUENPomxEz9z1BEzuQU2Xw0kUuAgA==", "dev": true }, "dashdash": { @@ -9571,17 +9559,17 @@ } }, "data-uri-to-buffer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-2.0.0.tgz", - "integrity": "sha512-YbKCNLPPP4inc0E5If4OaalBc7gpaM2MRv77Pv2VThVComLKfbGYtJcdDCViDyp1Wd4SebhHLz94vp91zbK6bw==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-2.0.1.tgz", + "integrity": "sha512-OkVVLrerfAKZlW2ZZ3Ve2y65jgiWqBKsTfUIAFbn8nVbPcCZg6l6gikKlEYv0kXcmzqGm6mFq/Jf2vriuEkv8A==", "requires": { - "@types/node": "8.10.44" + "@types/node": "8.10.48" }, "dependencies": { "@types/node": { - "version": "8.10.44", - "resolved": "https://registry.npmjs.org/@types/node/-/node-8.10.44.tgz", - "integrity": "sha512-HY3SK7egERHGUfY8p6ztXIEQWcIPHouYhCGcLAPQin7gE2G/fALFz+epnMwcxKUS6aKqTVoAFdi+t1llQd3xcw==" + "version": "8.10.48", + "resolved": "https://registry.npmjs.org/@types/node/-/node-8.10.48.tgz", + "integrity": "sha512-c35YEBTkL4rzXY2ucpSKy+UYHjUBIIkuJbWYbsGIrKLEWU5dgJMmLkkIb3qeC3O3Tpb1ZQCwecscvJTDjDjkRw==" } } }, @@ -9651,7 +9639,7 @@ "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", "requires": { - "object-keys": "1.1.0" + "object-keys": "1.1.1" } }, "define-property": { @@ -9701,7 +9689,7 @@ "resolved": "https://registry.npmjs.org/degenerator/-/degenerator-1.0.4.tgz", "integrity": "sha1-/PSQo37OJmRk2cxDGrmMWBnO0JU=", "requires": { - "ast-types": "0.12.2", + "ast-types": "0.13.1", "escodegen": "1.11.1", "esprima": "3.1.3" } @@ -9835,9 +9823,9 @@ "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" }, "electron-to-chromium": { - "version": "1.3.116", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.116.tgz", - "integrity": "sha512-NKwKAXzur5vFCZYBHpdWjTMO8QptNLNP80nItkSIgUOapPAo9Uia+RvkCaZJtO7fhQaVElSvBPWEc2ku6cKsPA==" + "version": "1.3.137", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.137.tgz", + "integrity": "sha512-kGi32g42a8vS/WnYE7ELJyejRT7hbr3UeOOu0WeuYuQ29gCpg9Lrf6RdcTQVXSt/v0bjCfnlb/EWOOsiKpTmkw==" }, "elliptic": { "version": "6.4.1", @@ -9919,7 +9907,7 @@ "has": "1.0.3", "is-callable": "1.1.4", "is-regex": "1.0.4", - "object-keys": "1.1.0" + "object-keys": "1.1.1" } }, "es-to-primitive": { @@ -9981,9 +9969,9 @@ } }, "eslint": { - "version": "5.15.3", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-5.15.3.tgz", - "integrity": "sha512-vMGi0PjCHSokZxE0NLp2VneGw5sio7SSiDNgIUn2tC0XkWJRNOIoHIg3CliLVfXnJsiHxGAYrkw0PieAu8+KYQ==", + "version": "5.16.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-5.16.0.tgz", + "integrity": "sha512-S3Rz11i7c8AA5JPv7xAH+dOyq/Cu/VXHiHXBPOU1k/JAM5dXqQPt3qcrhpHSorXmrpu2g0gkIBVXAqCpzfoZIg==", "dev": true, "requires": { "@babel/code-frame": "7.0.0", @@ -10000,13 +9988,13 @@ "esutils": "2.0.2", "file-entry-cache": "5.0.1", "functional-red-black-tree": "1.0.1", - "glob": "7.1.3", - "globals": "11.11.0", + "glob": "7.1.4", + "globals": "11.12.0", "ignore": "4.0.6", "import-fresh": "3.0.0", "imurmurhash": "0.1.4", - "inquirer": "6.2.2", - "js-yaml": "3.12.2", + "inquirer": "6.3.1", + "js-yaml": "3.13.1", "json-stable-stringify-without-jsonify": "1.0.1", "levn": "0.3.0", "lodash": "4.17.11", @@ -10017,10 +10005,10 @@ "path-is-inside": "1.0.2", "progress": "2.0.3", "regexpp": "2.0.1", - "semver": "5.6.0", + "semver": "5.7.0", "strip-ansi": "4.0.0", "strip-json-comments": "2.0.1", - "table": "5.2.3", + "table": "5.4.0", "text-table": "0.2.0" }, "dependencies": { @@ -10058,7 +10046,7 @@ "requires": { "nice-try": "1.0.5", "path-key": "2.0.1", - "semver": "5.6.0", + "semver": "5.7.0", "shebang-command": "1.2.0", "which": "1.3.1" } @@ -10073,9 +10061,9 @@ } }, "globals": { - "version": "11.11.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.11.0.tgz", - "integrity": "sha512-WHq43gS+6ufNOEqlrDBxVEbb8ntfXrfAUU2ZOpCxrBdGKW3gyv8mCxAfIBD0DroPKGrJ2eSsXsLtY9MPntsyTw==", + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", "dev": true }, "ms": { @@ -10133,13 +10121,13 @@ "dev": true, "requires": { "debug": "2.6.9", - "resolve": "1.10.0" + "resolve": "1.10.1" } }, "eslint-module-utils": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.3.0.tgz", - "integrity": "sha512-lmDJgeOOjk8hObTysjqH7wyMi+nsHwwvfBykwfhjR1LNdd7C2uFJBvx4OpWYpXOw4df1yE1cDEVd1yLHitk34w==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.4.0.tgz", + "integrity": "sha512-14tltLm38Eu3zS+mt0KvILC3q8jyIAH518MlG+HO0p+yK885Lb1UHTY/UgR91eOyGdmxAPb+OLoW4znqIT6Ndw==", "dev": true, "requires": { "debug": "2.6.9", @@ -10147,21 +10135,22 @@ } }, "eslint-plugin-import": { - "version": "2.16.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.16.0.tgz", - "integrity": "sha512-z6oqWlf1x5GkHIFgrSvtmudnqM6Q60KM4KvpWi5ubonMjycLjndvd5+8VAZIsTlHC03djdgJuyKG6XO577px6A==", + "version": "2.17.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.17.2.tgz", + "integrity": "sha512-m+cSVxM7oLsIpmwNn2WXTJoReOF9f/CtLMo7qOVmKd1KntBy0hEcuNZ3erTmWjx+DxRO0Zcrm5KwAvI9wHcV5g==", "dev": true, "requires": { + "array-includes": "3.0.3", "contains-path": "0.1.0", "debug": "2.6.9", "doctrine": "1.5.0", "eslint-import-resolver-node": "0.3.2", - "eslint-module-utils": "2.3.0", + "eslint-module-utils": "2.4.0", "has": "1.0.3", "lodash": "4.17.11", "minimatch": "3.0.4", "read-pkg-up": "2.0.0", - "resolve": "1.10.0" + "resolve": "1.10.1" }, "dependencies": { "doctrine": { @@ -10243,25 +10232,25 @@ "array-includes": "3.0.3", "ast-types-flow": "0.0.7", "axobject-query": "2.0.2", - "damerau-levenshtein": "1.0.4", + "damerau-levenshtein": "1.0.5", "emoji-regex": "7.0.3", "has": "1.0.3", - "jsx-ast-utils": "2.0.1" + "jsx-ast-utils": "2.1.0" } }, "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.13.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.13.0.tgz", + "integrity": "sha512-uA5LrHylu8lW/eAH3bEQe9YdzpPaFd9yAJTwTi/i/BKTD7j6aQMKVAdGM/ML72zD6womuSK7EiGtMKuK06lWjQ==", "dev": true, "requires": { "array-includes": "3.0.3", "doctrine": "2.1.0", "has": "1.0.3", - "jsx-ast-utils": "2.0.1", + "jsx-ast-utils": "2.1.0", "object.fromentries": "2.0.0", "prop-types": "15.7.2", - "resolve": "1.10.0" + "resolve": "1.10.1" }, "dependencies": { "doctrine": { @@ -10381,7 +10370,7 @@ "resolved": "https://registry.npmjs.org/eth-sig-util/-/eth-sig-util-1.4.2.tgz", "integrity": "sha1-jZWCAsftuq6Dlwf7pvCf8ydgYhA=", "requires": { - "ethereumjs-abi": "git+https://github.com/ethereumjs/ethereumjs-abi.git#d8d7fc9cc1fd781186c25676af100d1ec727013e", + "ethereumjs-abi": "git+https://github.com/ethereumjs/ethereumjs-abi.git#8431eab7b3384e65e8126a4602520b78031666fb", "ethereumjs-util": "5.2.0" } }, @@ -10391,7 +10380,7 @@ "integrity": "sha1-L9w1dvIykDNYl26znaeDIT/5Uj8=" }, "ethereumjs-abi": { - "version": "git+https://github.com/ethereumjs/ethereumjs-abi.git#d8d7fc9cc1fd781186c25676af100d1ec727013e", + "version": "git+https://github.com/ethereumjs/ethereumjs-abi.git#8431eab7b3384e65e8126a4602520b78031666fb", "requires": { "bn.js": "4.11.8", "ethereumjs-util": "6.1.0" @@ -10406,9 +10395,9 @@ "create-hash": "1.2.0", "ethjs-util": "0.1.6", "keccak": "1.4.0", - "rlp": "2.2.2", + "rlp": "2.2.3", "safe-buffer": "5.1.2", - "secp256k1": "3.6.2" + "secp256k1": "3.7.0" } } } @@ -10419,7 +10408,7 @@ "integrity": "sha512-bgDojnXGjhMwo6eXQC0bY6UK2liSFUSMwwylOmQvZbSl/D7NXQ3+vrGO46ZeOgjGfxXmgIeVNDIiHw7fNZM4VA==", "requires": { "ethereumjs-util": "5.2.0", - "rlp": "2.2.2", + "rlp": "2.2.3", "safe-buffer": "5.1.2" } }, @@ -10470,9 +10459,9 @@ "create-hash": "1.2.0", "ethjs-util": "0.1.6", "keccak": "1.4.0", - "rlp": "2.2.2", + "rlp": "2.2.3", "safe-buffer": "5.1.2", - "secp256k1": "3.6.2" + "secp256k1": "3.7.0" } }, "ethereumjs-vm": { @@ -10514,9 +10503,9 @@ "create-hash": "1.2.0", "ethjs-util": "0.1.6", "keccak": "1.4.0", - "rlp": "2.2.2", + "rlp": "2.2.3", "safe-buffer": "5.1.2", - "secp256k1": "3.6.2" + "secp256k1": "3.7.0" } } } @@ -10530,9 +10519,9 @@ "create-hash": "1.2.0", "ethjs-util": "0.1.6", "keccak": "1.4.0", - "rlp": "2.2.2", + "rlp": "2.2.3", "safe-buffer": "5.1.2", - "secp256k1": "3.6.2" + "secp256k1": "3.7.0" } } } @@ -10562,9 +10551,9 @@ "create-hash": "1.2.0", "ethjs-util": "0.1.6", "keccak": "1.4.0", - "rlp": "2.2.2", + "rlp": "2.2.3", "safe-buffer": "5.1.2", - "secp256k1": "3.6.2" + "secp256k1": "3.7.0" } }, "utf8": { @@ -10616,9 +10605,9 @@ "integrity": "sha1-YZegldX7a1folC9v1+qtY6CclFI=" }, "eventemitter3": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-3.1.0.tgz", - "integrity": "sha512-ivIvhpq/Y0uSjcHDcOIccjmYjGLcP09MFGE7ysAwkAvkXfpZlC985pH2/ui64DKazbTW/4kN3yqozUxlXzI6cA==" + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-3.1.2.tgz", + "integrity": "sha512-tvtQIeLVHjDkJYnzf2dgVMxfuSGJeM/7UCG17TT4EumTfNtF+0nebF/4zWOIkCreAbtNqhGEboB6BWrwqNaw4Q==" }, "events": { "version": "3.0.0", @@ -10689,63 +10678,46 @@ } }, "express": { - "version": "4.16.4", - "resolved": "https://registry.npmjs.org/express/-/express-4.16.4.tgz", - "integrity": "sha512-j12Uuyb4FMrd/qQAm6uCHAkPtO8FDTRJZBDd5D2KOL2eLaz1yUNdUB/NOIyq0iU4q4cFarsUCrnFDPBcnksuOg==", + "version": "4.17.0", + "resolved": "https://registry.npmjs.org/express/-/express-4.17.0.tgz", + "integrity": "sha512-1Z7/t3Z5ZnBG252gKUPyItc4xdeaA0X934ca2ewckAsVsw9EG71i++ZHZPYnus8g/s5Bty8IMpSVEuRkmwwPRQ==", "requires": { - "accepts": "1.3.5", + "accepts": "1.3.7", "array-flatten": "1.1.1", - "body-parser": "1.18.3", - "content-disposition": "0.5.2", + "body-parser": "1.19.0", + "content-disposition": "0.5.3", "content-type": "1.0.4", - "cookie": "0.3.1", + "cookie": "0.4.0", "cookie-signature": "1.0.6", "debug": "2.6.9", "depd": "1.1.2", "encodeurl": "1.0.2", "escape-html": "1.0.3", "etag": "1.8.1", - "finalhandler": "1.1.1", + "finalhandler": "1.1.2", "fresh": "0.5.2", "merge-descriptors": "1.0.1", "methods": "1.1.2", "on-finished": "2.3.0", - "parseurl": "1.3.2", + "parseurl": "1.3.3", "path-to-regexp": "0.1.7", - "proxy-addr": "2.0.4", - "qs": "6.5.2", - "range-parser": "1.2.0", + "proxy-addr": "2.0.5", + "qs": "6.7.0", + "range-parser": "1.2.1", "safe-buffer": "5.1.2", - "send": "0.16.2", - "serve-static": "1.13.2", - "setprototypeof": "1.1.0", - "statuses": "1.4.0", - "type-is": "1.6.16", + "send": "0.17.1", + "serve-static": "1.14.1", + "setprototypeof": "1.1.1", + "statuses": "1.5.0", + "type-is": "1.6.18", "utils-merge": "1.0.1", "vary": "1.1.2" - }, - "dependencies": { - "qs": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", - "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" - }, - "setprototypeof": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", - "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==" - }, - "statuses": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", - "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==" - } } }, "express-rate-limit": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/express-rate-limit/-/express-rate-limit-3.4.0.tgz", - "integrity": "sha512-SktWQGHhTQfIOZykiVIaoqmHCptqq177fEbumVytWsMpEqe+g78IFrfzivJTimoCdMZ5+vYJ5/a/w1darXMv+A==", + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/express-rate-limit/-/express-rate-limit-3.5.3.tgz", + "integrity": "sha512-V6YEfLt5oNYKIJPBJQeE1xTM6JeeP/e4YXZGPgheo1nF4vtWHUFHmcNsOPxDa9VtIB1zOZ1j1DKScewVetw8Ow==", "requires": { "defaults": "1.0.3" } @@ -10935,24 +10907,17 @@ } }, "finalhandler": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.1.tgz", - "integrity": "sha512-Y1GUDo39ez4aHAw7MysnUD5JzYX+WaIj8I57kO3aEPT1fFRL4sr7mjei97FgnwhAyyzRYmQZaTHb2+9uZ1dPtg==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", + "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", "requires": { "debug": "2.6.9", "encodeurl": "1.0.2", "escape-html": "1.0.3", "on-finished": "2.3.0", - "parseurl": "1.3.2", - "statuses": "1.4.0", + "parseurl": "1.3.3", + "statuses": "1.5.0", "unpipe": "1.0.0" - }, - "dependencies": { - "statuses": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", - "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==" - } } }, "find-up": { @@ -11033,8 +10998,8 @@ "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", "requires": { "asynckit": "0.4.0", - "combined-stream": "1.0.7", - "mime-types": "2.1.22" + "combined-stream": "1.0.8", + "mime-types": "2.1.24" } }, "forwarded": { @@ -11056,9 +11021,9 @@ "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" }, "fs-capacitor": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fs-capacitor/-/fs-capacitor-2.0.1.tgz", - "integrity": "sha512-kyV2oaG1/pu9NPosfGACmBym6okgzyg6hEtA5LSUq0dGpGLe278MVfMwVnSHDA/OBcTCHkPNqWL9eIwbPN6dDg==" + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/fs-capacitor/-/fs-capacitor-2.0.4.tgz", + "integrity": "sha512-8S4f4WsCryNw2mJJchi46YgB6CR5Ze+4L1h8ewl9tEpL4SJ3ZO+c/bS4BWhB8bK+O3TMqhuZarTitd0S0eh2pA==" }, "fs-constants": { "version": "1.0.0", @@ -11083,13 +11048,13 @@ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" }, "fsevents": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.7.tgz", - "integrity": "sha512-Pxm6sI2MeBD7RdD12RYsqaP0nMiwx8eZBXCa6z2L+mRHm2DYrOYwihmhjpkdjUHwQhslWQjRpEgNq4XvBmaAuw==", + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.9.tgz", + "integrity": "sha512-oeyj2H3EjjonWcFjD5NvZNE9Rqe4UW+nQBU2HNeKw0koVLEFIhtyETyAakeAM3de7Z/SW5kcA+fZUait9EApnw==", "optional": true, "requires": { - "nan": "2.13.1", - "node-pre-gyp": "0.10.3" + "nan": "2.14.0", + "node-pre-gyp": "0.12.0" }, "dependencies": { "abbrev": { @@ -11150,11 +11115,11 @@ "optional": true }, "debug": { - "version": "2.6.9", + "version": "4.1.1", "bundled": true, "optional": true, "requires": { - "ms": "2.0.0" + "ms": "2.1.1" } }, "deep-extend": { @@ -11299,34 +11264,34 @@ } }, "ms": { - "version": "2.0.0", + "version": "2.1.1", "bundled": true, "optional": true }, "needle": { - "version": "2.2.4", + "version": "2.3.0", "bundled": true, "optional": true, "requires": { - "debug": "2.6.9", + "debug": "4.1.1", "iconv-lite": "0.4.24", "sax": "1.2.4" } }, "node-pre-gyp": { - "version": "0.10.3", + "version": "0.12.0", "bundled": true, "optional": true, "requires": { "detect-libc": "1.0.3", "mkdirp": "0.5.1", - "needle": "2.2.4", + "needle": "2.3.0", "nopt": "4.0.1", - "npm-packlist": "1.2.0", + "npm-packlist": "1.4.1", "npmlog": "4.1.2", "rc": "1.2.8", "rimraf": "2.6.3", - "semver": "5.6.0", + "semver": "5.7.0", "tar": "4.4.8" } }, @@ -11340,17 +11305,17 @@ } }, "npm-bundled": { - "version": "1.0.5", + "version": "1.0.6", "bundled": true, "optional": true }, "npm-packlist": { - "version": "1.2.0", + "version": "1.4.1", "bundled": true, "optional": true, "requires": { "ignore-walk": "3.0.1", - "npm-bundled": "1.0.5" + "npm-bundled": "1.0.6" } }, "npmlog": { @@ -11464,7 +11429,7 @@ "optional": true }, "semver": { - "version": "5.6.0", + "version": "5.7.0", "bundled": true, "optional": true }, @@ -11609,12 +11574,12 @@ "resolved": "https://registry.npmjs.org/get-uri/-/get-uri-2.0.3.tgz", "integrity": "sha512-x5j6Ks7FOgLD/GlvjKwgu7wdmMR55iuRHhn8hj/+gA+eSbxQvZ+AEomq+3MgVEZj1vpi738QahGbCCSIDtXtkw==", "requires": { - "data-uri-to-buffer": "2.0.0", + "data-uri-to-buffer": "2.0.1", "debug": "4.1.1", "extend": "3.0.2", "file-uri-to-path": "1.0.0", "ftp": "0.3.10", - "readable-stream": "3.2.0" + "readable-stream": "3.3.0" }, "dependencies": { "debug": { @@ -11631,9 +11596,9 @@ "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" }, "readable-stream": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.2.0.tgz", - "integrity": "sha512-RV20kLjdmpZuTF1INEb9IA3L68Nmi+Ri7ppZqo78wj//Pn62fCoJyV9zalccNzDD/OuJpMG4f+pfMl8+L6QdGw==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.3.0.tgz", + "integrity": "sha512-EsI+s3k3XsW+fU8fQACLN59ky34AZ14LoeVZpYwmZvldCFo0r0gnelwF2TcMjLor/BTL5aDJVBMkss0dthToPw==", "requires": { "inherits": "2.0.3", "string_decoder": "1.1.1", @@ -11665,15 +11630,10 @@ "resolved": "https://registry.npmjs.org/git-sha1/-/git-sha1-0.1.2.tgz", "integrity": "sha1-WZrBkrcYdYJeE6RF86bgURjC90U=" }, - "gkt": { - "version": "https://tgz.pm2.io/gkt-1.0.0.tgz", - "integrity": "sha512-zr6QQnzLt3Ja0t0XI8gws2kn7zV2p0l/D3kreNvS6hFZhVU5g+uY/30l42jbgt0XGcNBEmBDGJR71J692V92tA==", - "optional": true - }, "glob": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", - "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", + "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==", "requires": { "fs.realpath": "1.0.0", "inflight": "1.0.6", @@ -11775,25 +11735,25 @@ "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==" }, "graphql": { - "version": "14.1.1", - "resolved": "https://registry.npmjs.org/graphql/-/graphql-14.1.1.tgz", - "integrity": "sha512-C5zDzLqvfPAgTtP8AUPIt9keDabrdRAqSWjj2OPRKrKxI9Fb65I36s1uCs1UUBFnSWTdO7hyHi7z1ZbwKMKF6Q==", + "version": "14.3.1", + "resolved": "https://registry.npmjs.org/graphql/-/graphql-14.3.1.tgz", + "integrity": "sha512-FZm7kAa3FqKdXy8YSSpAoTtyDFMIYSpCDOr+3EqlI1bxmtHu+Vv/I2vrSeT1sBOEnEniX3uo4wFhFdS/8XN6gA==", "requires": { "iterall": "1.2.2" } }, "graphql-extensions": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/graphql-extensions/-/graphql-extensions-0.5.7.tgz", - "integrity": "sha512-HrU6APE1PiehZ46scMB3S5DezSeCATd8v+e4mmg2bqszMyCFkmAnmK6hR1b5VjHxhzt5/FX21x1WsXfqF4FwdQ==", + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/graphql-extensions/-/graphql-extensions-0.6.0.tgz", + "integrity": "sha512-SshzmbD68fHXRv2q3St29olMOxHDLQ5e9TOh+Tz2BYxinrfhjFaPNcEefiK/vF295wW827Y58bdO11Xmhf8J+Q==", "requires": { - "@apollographql/apollo-tools": "0.3.5" + "@apollographql/apollo-tools": "0.3.7" } }, "graphql-subscriptions": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/graphql-subscriptions/-/graphql-subscriptions-1.0.0.tgz", - "integrity": "sha512-+ytmryoHF1LVf58NKEaNPRUzYyXplm120ntxfPcgOBC7TnK7Tv/4VRHeh4FAR9iL+O1bqhZs4nkibxQ+OA5cDQ==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/graphql-subscriptions/-/graphql-subscriptions-1.1.0.tgz", + "integrity": "sha512-6WzlBFC0lWmXJbIVE8OgFgXIP4RJi3OQgTPa0DVMsDXdpRDjTsM1K9wfl5HSYX7R87QAGlvcv2Y4BIZa/ItonA==", "requires": { "iterall": "1.2.2" } @@ -11809,19 +11769,19 @@ "integrity": "sha512-chF12etTIGVVGy3fCTJ1ivJX2KB7OSG4c6UOJQuqOHCmBQwTyNgCDuejZKvpYxNZiEx7bwIjrodDgDe9RIkjlw==", "requires": { "apollo-link": "1.2.11", - "apollo-utilities": "1.2.1", + "apollo-utilities": "1.3.0", "deprecated-decorator": "0.1.6", "iterall": "1.2.2", "uuid": "3.3.2" } }, "graphql-upload": { - "version": "8.0.4", - "resolved": "https://registry.npmjs.org/graphql-upload/-/graphql-upload-8.0.4.tgz", - "integrity": "sha512-jsTfVYXJ5mU6BXiiJ20CUCAcf41ICCQJ2ltwQFUuaFKiY4JhlG99uZZp5S3hbpQ/oA1kS7hz4pRtsnxPCa7Yfg==", + "version": "8.0.6", + "resolved": "https://registry.npmjs.org/graphql-upload/-/graphql-upload-8.0.6.tgz", + "integrity": "sha512-cBRALMOvGBm2AD6M61b1QbSmKfCLXvgV+Z3wXT2JS1EQwGWQ1g5/sby4J/cpwAaGnq5P2eGp+N3HQI9cSn9Jfg==", "requires": { - "busboy": "0.3.0", - "fs-capacitor": "2.0.1", + "busboy": "0.3.1", + "fs-capacitor": "2.0.4", "http-errors": "1.7.2", "object-path": "0.11.4" } @@ -11920,7 +11880,7 @@ "requires": { "coinstring": "2.3.0", "safe-buffer": "5.1.2", - "secp256k1": "3.6.2" + "secp256k1": "3.7.0" } }, "hmac-drbg": { @@ -12029,9 +11989,9 @@ } }, "ieee754": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.12.tgz", - "integrity": "sha512-GguP+DRY+pJ3soyIiGPTvdiVXjZ+DbXOxGpXn3eMvNW4x4irjqXm4wHKscC+TfxSJ0yw/S1F24tqdMNsMZTiLA==" + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", + "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==" }, "ignore": { "version": "4.0.6", @@ -12055,7 +12015,7 @@ "integrity": "sha512-pOnA9tfM3Uwics+SaBLCNyZZZbK+4PTu0OPZtLlMIrv17EdBoC15S9Kn8ckJ9TZTyKb3ywNE5y1yeDxxGA7nTQ==", "dev": true, "requires": { - "parent-module": "1.0.0", + "parent-module": "1.0.1", "resolve-from": "4.0.0" }, "dependencies": { @@ -12097,9 +12057,9 @@ "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==" }, "inquirer": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.2.2.tgz", - "integrity": "sha512-Z2rREiXA6cHRR9KBOarR3WuLlFzlIfAEIiB45ll5SSadMg7WqOh1MKEjjndfuH5ewXdixWCxqnVfGOQzPeiztA==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.3.1.tgz", + "integrity": "sha512-MmL624rfkFt4TG9y/Jvmt8vdmOo836U7Y0Hxr2aFk3RelZEGX4Igk0KabWrcaaZaTv9uzglOqWh1Vly+FAWAXA==", "dev": true, "requires": { "ansi-escapes": "3.2.0", @@ -12111,7 +12071,7 @@ "lodash": "4.17.11", "mute-stream": "0.0.7", "run-async": "2.3.0", - "rxjs": "6.4.0", + "rxjs": "6.5.2", "string-width": "2.1.1", "strip-ansi": "5.2.0", "through": "2.3.8" @@ -12228,9 +12188,9 @@ "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=" }, "ipaddr.js": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.8.0.tgz", - "integrity": "sha1-6qM9bd16zo9/b+DJygRA5wZzix4=" + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.0.tgz", + "integrity": "sha512-M4Sjn6N/+O6/IXSJseKqHoFc+5FdGJ22sXqnjTpdZweHK64MzEPAyQZyEU3R/KRv2GLoa7nNtg/C2Ev6m7z+eA==" }, "ipfs-api": { "version": "14.3.7", @@ -12243,7 +12203,7 @@ "concat-stream": "1.6.2", "detect-node": "2.0.4", "flatmap": "0.0.3", - "glob": "7.1.3", + "glob": "7.1.4", "glob-escape": "0.0.2", "ipfs-block": "0.6.1", "ipfs-unixfs": "0.1.16", @@ -12260,7 +12220,7 @@ "peer-info": "0.11.6", "promisify-es6": "1.0.3", "pump": "1.0.3", - "qs": "6.6.0", + "qs": "6.7.0", "readable-stream": "2.3.6", "stream-http": "2.8.3", "streamifier": "0.1.1", @@ -12297,7 +12257,7 @@ "multihashes": "0.4.14", "multihashing-async": "0.4.8", "protons": "1.0.1", - "pull-stream": "3.6.9", + "pull-stream": "3.6.11", "pull-traverse": "1.0.3", "stable": "0.1.8" } @@ -12330,7 +12290,7 @@ "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", "requires": { - "binary-extensions": "1.13.0" + "binary-extensions": "1.13.1" } }, "is-buffer": { @@ -12428,9 +12388,9 @@ "integrity": "sha1-Es+5i2W1fdPRk6MSH19uL0N2ArU=" }, "is-glob": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.0.tgz", - "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=", + "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" } @@ -12610,9 +12570,9 @@ "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=" }, "js-yaml": { - "version": "3.12.2", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.12.2.tgz", - "integrity": "sha512-QHn/Lh/7HhZ/Twc7vJYQTkjuCa0kaCcDcjK5Zlk2rvnUpy7DxMJ23+Jc2dcyvltwQVg1nygAVlB2oRDFHoRS5Q==", + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", + "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", "dev": true, "requires": { "argparse": "1.0.10", @@ -12722,9 +12682,9 @@ } }, "jsx-ast-utils": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-2.0.1.tgz", - "integrity": "sha1-6AGxs5mF4g//yHtA43SAgOLcrH8=", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-2.1.0.tgz", + "integrity": "sha512-yDGDG2DS4JcqhA6blsuYbtsT09xL8AoLuUR2Gb5exrw7UEM19sBcOTq+YBBhrNbl0PUC4R4LnFu+dHg2HKeVvA==", "dev": true, "requires": { "array-includes": "3.0.3" @@ -12737,7 +12697,7 @@ "requires": { "bindings": "1.5.0", "inherits": "2.0.3", - "nan": "2.13.1", + "nan": "2.14.0", "safe-buffer": "5.1.2" } }, @@ -12931,7 +12891,7 @@ "multihashing-async": "0.5.2", "nodeify": "1.0.1", "safe-buffer": "5.1.2", - "secp256k1": "3.6.2" + "secp256k1": "3.7.0" }, "dependencies": { "js-sha3": { @@ -13188,7 +13148,7 @@ "levelup": "1.3.9", "memdown": "1.4.1", "readable-stream": "2.3.6", - "rlp": "2.2.2", + "rlp": "2.2.3", "semaphore": "1.1.0" }, "dependencies": { @@ -13225,21 +13185,21 @@ } }, "mime": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz", - "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==" + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" }, "mime-db": { - "version": "1.38.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.38.0.tgz", - "integrity": "sha512-bqVioMFFzc2awcdJZIzR3HjZFX20QhilVS7hytkKrv7xFAn8bM1gzc/FOX2awLISvWe0PV8ptFKcon+wZ5qYkg==" + "version": "1.40.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.40.0.tgz", + "integrity": "sha512-jYdeOMPy9vnxEqFRRo6ZvTZ8d9oPb+k18PKoYNYUe2stVEBPPwsln/qWzdbmaIvnhZ9v2P+CuecK+fpUfsV2mA==" }, "mime-types": { - "version": "2.1.22", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.22.tgz", - "integrity": "sha512-aGl6TZGnhm/li6F7yx82bJiBZwgiEa4Hf6CNr8YO+r5UHr53tSTYZb102zyU50DOWWKeOv0uQLRL0/9EiKWCog==", + "version": "2.1.24", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.24.tgz", + "integrity": "sha512-WaFHS3MCl5fapm3oLxU4eYDw77IQM2ACcxQ9RIxfaC3ooc6PFuBMGZZsYpvoXS5D5QTWPieo1jjLdAm3TBP3cQ==", "requires": { - "mime-db": "1.38.0" + "mime-db": "1.40.0" } }, "mimic-fn": { @@ -13324,31 +13284,31 @@ "integrity": "sha512-bV7f+6l2QigeBBZSM/6yTNq4P2fNpSWj/0e7jQcy87A8e7o2nAfP/34/2ky5Vw4B9S446EtIhodAzkFCcR4dQg==" }, "moment-timezone": { - "version": "0.5.23", - "resolved": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.23.tgz", - "integrity": "sha512-WHFH85DkCfiNMDX5D3X7hpNH3/PUhjTGcD0U1SgfBGZxJ3qUmJh5FdvaFjcClxOvB3rzdfj4oRffbI38jEnC1w==", + "version": "0.5.25", + "resolved": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.25.tgz", + "integrity": "sha512-DgEaTyN/z0HFaVcVbSyVCUU6HeFdnNC3vE4c9cgu2dgMTvjBUBdBzWfasTBmAW45u5OIMeCJtU8yNjM22DHucw==", "requires": { "moment": "2.24.0" } }, "mongodb": { - "version": "3.1.13", - "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-3.1.13.tgz", - "integrity": "sha512-sz2dhvBZQWf3LRNDhbd30KHVzdjZx9IKC0L+kSZ/gzYquCF5zPOgGqRz6sSCqYZtKP2ekB4nfLxhGtzGHnIKxA==", + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-3.2.6.tgz", + "integrity": "sha512-qnHc4tjEkHKemuzBq9R7ycYnhFE0Dlpt6+n6suoZp2DcDdqviQ+teloJU24fsOw/PLmr75yGk4mRx/YabjDQEQ==", "requires": { - "mongodb-core": "3.1.11", + "mongodb-core": "3.2.6", "safe-buffer": "5.1.2" } }, "mongodb-core": { - "version": "3.1.11", - "resolved": "https://registry.npmjs.org/mongodb-core/-/mongodb-core-3.1.11.tgz", - "integrity": "sha512-rD2US2s5qk/ckbiiGFHeu+yKYDXdJ1G87F6CG3YdaZpzdOm5zpoAZd/EKbPmFO6cQZ+XVXBXBJ660sSI0gc6qg==", + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/mongodb-core/-/mongodb-core-3.2.6.tgz", + "integrity": "sha512-i+XRVjur9D0ywGF7cFebOUnALnbvMHajdNhhl3TQuopW6QDE655G8CpPeERbqSqfa3rOKEUo08lENDIiBIuAvQ==", "requires": { "bson": "1.1.1", "require_optional": "1.0.1", "safe-buffer": "5.1.2", - "saslprep": "1.0.2" + "saslprep": "1.0.3" } }, "morgan": { @@ -13400,9 +13360,9 @@ } }, "multicodec": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/multicodec/-/multicodec-0.5.0.tgz", - "integrity": "sha512-lKsJeT4cKeSq0rVEWhO3oSBgDN4sMY1sNZKlvl68g/ZAahjPS1KIVyF4IqhuYmCdtOyKs4Q4hQ6M0C3iqRnuqQ==", + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/multicodec/-/multicodec-0.5.1.tgz", + "integrity": "sha512-Q5glyZLdXVbbBxvRYHLQHpu8ydVf1422Z+v9fU47v2JCkiue7n+JcFS7uRv0cQW8hbVtgdtIDgYWPWaIKEXuXA==", "requires": { "varint": "5.0.0" } @@ -13450,9 +13410,9 @@ "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==" }, "nan": { - "version": "2.13.1", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.13.1.tgz", - "integrity": "sha512-I6YB/YEuDeUZMmhscXKxGgZlFnhsn5y0hgOZBadkzfTRrZBtJDZeg6eQf7PYMIEclwmorTKK8GztsyOUSVBREA==" + "version": "2.14.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.0.tgz", + "integrity": "sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg==" }, "nanomatch": { "version": "1.2.13", @@ -13490,19 +13450,34 @@ } }, "needle": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/needle/-/needle-2.2.4.tgz", - "integrity": "sha512-HyoqEb4wr/rsoaIDfTH2aVL9nWtQqba2/HvMv+++m8u0dz808MaagKILxtfeSN7QU7nvbQ79zk3vYOJp9zsNEA==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/needle/-/needle-2.4.0.tgz", + "integrity": "sha512-4Hnwzr3mi5L97hMYeNl8wRW/Onhy4nUKR/lVemJ8gJedxxUyBLm9kkrDColJvoSfwi0jCNhD+xCdOtiGDQiRZg==", "requires": { - "debug": "2.6.9", + "debug": "3.2.6", "iconv-lite": "0.4.24", "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" + } + }, + "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==" + } } }, "negotiator": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz", - "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=" + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", + "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==" }, "netmask": { "version": "1.0.6", @@ -13515,6 +13490,15 @@ "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", "dev": true }, + "node-cache": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/node-cache/-/node-cache-4.2.0.tgz", + "integrity": "sha512-obRu6/f7S024ysheAjoYFEEBqqDWv4LOMNJEuO8vMeEw2AT4z+NCzO4hlc2lhI4vATzbCQv6kke9FVdx0RbCOw==", + "requires": { + "clone": "2.1.2", + "lodash": "4.17.11" + } + }, "node-cron": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/node-cron/-/node-cron-2.0.3.tgz", @@ -13553,16 +13537,16 @@ } }, "nodemon": { - "version": "1.18.10", - "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-1.18.10.tgz", - "integrity": "sha512-we51yBb1TfEvZamFchRgcfLbVYgg0xlGbyXmOtbBzDwxwgewYS/YbZ5tnlnsH51+AoSTTsT3A2E/FloUbtH8cQ==", + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-1.19.0.tgz", + "integrity": "sha512-NHKpb/Je0Urmwi3QPDHlYuFY9m1vaVfTsRZG5X73rY46xPj0JpNe8WhUGQdkDXQDOxrBNIU3JrcflE9Y44EcuA==", "requires": { - "chokidar": "2.1.2", + "chokidar": "2.1.6", "debug": "3.2.6", "ignore-by-default": "1.0.1", "minimatch": "3.0.4", "pstree.remy": "1.1.6", - "semver": "5.6.0", + "semver": "5.7.0", "supports-color": "5.5.0", "touch": "3.1.0", "undefsafe": "2.0.2", @@ -13606,8 +13590,8 @@ "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", "requires": { "hosted-git-info": "2.7.1", - "resolve": "1.10.0", - "semver": "5.6.0", + "resolve": "1.10.1", + "semver": "5.7.0", "validate-npm-package-license": "3.0.4" } }, @@ -13705,9 +13689,9 @@ "integrity": "sha512-GJzfBZ6DgDAmnuaM3104jR4s1Myxr3Y3zfIyN4z3UdqN69oSRacNK8UhnobDdC+7J2AHCjGwxQubNJfE70SXXQ==" }, "object-keys": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.0.tgz", - "integrity": "sha512-6OO5X1+2tYkNyNEx6TsCxEqFfRWaqx6EtMiSbGrw8Ob8v9Ne+Hl8rBAgLBZn5wjEz3s/s6U1WXFUFOcxxAwUpg==" + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" }, "object-path": { "version": "0.11.4", @@ -13731,7 +13715,7 @@ "define-properties": "1.1.3", "function-bind": "1.1.1", "has-symbols": "1.0.0", - "object-keys": "1.1.0" + "object-keys": "1.1.1" } }, "object.entries": { @@ -13912,7 +13896,7 @@ "http-proxy-agent": "2.1.0", "https-proxy-agent": "2.2.1", "pac-resolver": "3.0.0", - "raw-body": "2.3.3", + "raw-body": "2.4.0", "socks-proxy-agent": "4.0.2" }, "dependencies": { @@ -13949,9 +13933,9 @@ "integrity": "sha1-iGmgQBJTZhxMTKPabCEh7VVfXu0=", "requires": { "got": "6.7.1", - "registry-auth-token": "3.3.2", + "registry-auth-token": "3.4.0", "registry-url": "3.1.0", - "semver": "5.6.0" + "semver": "5.7.0" } }, "pako": { @@ -13960,12 +13944,12 @@ "integrity": "sha1-8/dSL073gjSNqBYbrZ7P1Rv4OnU=" }, "parent-module": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.0.tgz", - "integrity": "sha512-8Mf5juOMmiE4FcmzYc4IaiS9L3+9paz2KOiXzkRviCP6aDmN49Hz6EMWz0lGNp9pX80GvvAuLADtyGfW/Em3TA==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", "dev": true, "requires": { - "callsites": "3.0.0" + "callsites": "3.1.0" } }, "parse-headers": { @@ -13991,9 +13975,9 @@ "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=" }, "parseurl": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz", - "integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M=" + "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", @@ -14168,40 +14152,38 @@ } }, "pm2": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/pm2/-/pm2-3.4.0.tgz", - "integrity": "sha512-BLK3zwrCmfE9I9XEvrGweK+/IEkhVlGENc1fgOH0fJHZc1vneC3v6dUmxz32pmsi9aB4DnrYIeZi46RHd6rO3Q==", + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/pm2/-/pm2-3.5.1.tgz", + "integrity": "sha512-pDPBetbI48JDynxmtSPNSKRDk/LRbhsHrJ/WSCKVD1TUNnb6XNMe6GzO7DCNijJBvdaQ+u1WxNudxqExlXdhEw==", "requires": { - "@pm2/agent": "0.5.23", - "@pm2/io": "4.1.2", - "@pm2/js-api": "0.5.53", + "@pm2/agent": "0.5.25", + "@pm2/io": "4.2.1", + "@pm2/js-api": "0.5.57", "async": "2.6.2", "blessed": "0.1.81", "chalk": "2.4.2", - "chokidar": "2.1.2", + "chokidar": "2.1.6", "cli-table-redemption": "1.0.1", "commander": "2.15.1", - "cron": "1.7.0", + "cron": "1.7.1", "date-fns": "1.30.1", "debug": "3.2.6", "eventemitter2": "5.0.1", "fclone": "1.0.11", - "gkt": "https://tgz.pm2.io/gkt-1.0.0.tgz", "mkdirp": "0.5.1", "moment": "2.24.0", - "needle": "2.2.4", - "nssocket": "0.6.0", + "needle": "2.4.0", "pidusage": "2.0.17", "pm2-axon": "3.3.0", "pm2-axon-rpc": "0.5.1", "pm2-deploy": "0.4.0", "pm2-multimeter": "0.1.2", "promptly": "2.2.0", - "semver": "5.6.0", + "semver": "5.7.0", "shelljs": "0.8.3", - "source-map-support": "0.5.11", + "source-map-support": "0.5.12", "sprintf-js": "1.1.1", - "v8-compile-cache": "2.0.2", + "v8-compile-cache": "2.0.3", "vizion": "2.0.2", "yamljs": "0.3.0" }, @@ -14248,9 +14230,9 @@ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" }, "source-map-support": { - "version": "0.5.11", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.11.tgz", - "integrity": "sha512-//sajEx/fGL3iw6fltKMdPvy8kL3kJ2O3iuYlRoT3k9Kb4BjOoZ+BZzaNHeuaruSt+Kf3Zk9tnfAQg9/AJqUVQ==", + "version": "0.5.12", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.12.tgz", + "integrity": "sha512-4h2Pbvyy15EE02G+JOZpUCmqWJuqrs+sEkzewTm++BPi7Hvn/HwcqLAcNxYAyI0x13CpPPn+kMjl+hplXMHITQ==", "requires": { "buffer-from": "1.1.1", "source-map": "0.6.1" @@ -14414,7 +14396,7 @@ "requires": { "loose-envify": "1.4.0", "object-assign": "4.1.1", - "react-is": "16.8.4" + "react-is": "16.8.6" }, "dependencies": { "object-assign": { @@ -14441,14 +14423,14 @@ "@protobufjs/pool": "1.1.0", "@protobufjs/utf8": "1.1.0", "@types/long": "4.0.0", - "@types/node": "10.14.1", + "@types/node": "10.14.7", "long": "4.0.0" }, "dependencies": { "@types/node": { - "version": "10.14.1", - "resolved": "https://registry.npmjs.org/@types/node/-/node-10.14.1.tgz", - "integrity": "sha512-Rymt08vh1GaW4vYB6QP61/5m/CFLGnFZP++bJpWbiNxceNa6RBipDmb413jvtSf/R1gg5a/jQVl2jY4XVRscEA==" + "version": "10.14.7", + "resolved": "https://registry.npmjs.org/@types/node/-/node-10.14.7.tgz", + "integrity": "sha512-on4MmIDgHXiuJDELPk1NFaKVUxxCFr37tm8E9yN6rAiF5Pzp/9bBfBHkoexqRiY+hk/Z04EJU9kKEb59YqJ82A==" } } }, @@ -14469,18 +14451,18 @@ } }, "proxy-addr": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.4.tgz", - "integrity": "sha512-5erio2h9jp5CHGwcybmxmVqHmnCBZeewlfJ0pex+UW7Qny7OOZXTtH56TGNyBizkgiOwhJtMKrVzDTeKcySZwA==", + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.5.tgz", + "integrity": "sha512-t/7RxHXPH6cJtP0pRG6smSr9QJidhB+3kXu0KgXnbGYMgzEnUxRQ4/LDdfOwZEMyIh3/xHb8PX3t+lfL9z+YVQ==", "requires": { "forwarded": "0.1.2", - "ipaddr.js": "1.8.0" + "ipaddr.js": "1.9.0" } }, "proxy-agent": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/proxy-agent/-/proxy-agent-3.0.3.tgz", - "integrity": "sha512-PXVVVuH9tiQuxQltFJVSnXWuDtNr+8aNBP6XVDDCDiUuDN8eRCm+ii4/mFWmXWEA0w8jjJSlePa4LXlM4jIzNA==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/proxy-agent/-/proxy-agent-3.1.0.tgz", + "integrity": "sha512-IkbZL4ClW3wwBL/ABFD2zJ8iP84CY0uKMvBPk/OceQe/cEjrxzN1pMHsLwhbzUoRhG9QbSxYC+Z7LBkTiBNvrA==", "requires": { "agent-base": "4.2.1", "debug": "3.2.6", @@ -14533,9 +14515,9 @@ "integrity": "sha512-NdF35+QsqD7EgNEI5mkI/X+UwaxVEbQaz9f4IooEmMUv6ZPmlTQYGjBPJGgrlzNdjSvIy4MWMg6Q6vCgBO2K+w==" }, "pull-stream": { - "version": "3.6.9", - "resolved": "https://registry.npmjs.org/pull-stream/-/pull-stream-3.6.9.tgz", - "integrity": "sha512-hJn4POeBrkttshdNl0AoSCVjMVSuBwuHocMerUdoZ2+oIUzrWHFTwJMlbHND7OiKLVgvz6TFj8ZUVywUMXccbw==" + "version": "3.6.11", + "resolved": "https://registry.npmjs.org/pull-stream/-/pull-stream-3.6.11.tgz", + "integrity": "sha512-43brwtqO0OSltctKbW1mgzzKH4TNE8egkW+Y4BFzlDWiG2Ayl7VKr4SeuoKacfgPfUWcSwcPlHsf40BEqNR32A==" }, "pull-traverse": { "version": "1.0.3", @@ -14557,9 +14539,9 @@ "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" }, "qs": { - "version": "6.6.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.6.0.tgz", - "integrity": "sha512-KIJqT9jQJDQx5h5uAVPimw6yVg2SekOKu959OCtktD3FjzbpvaPr8i4zzg07DOMz+igA4W/aNM7OV8H37pFYfA==" + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", + "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==" }, "randombytes": { "version": "2.1.0", @@ -14570,45 +14552,19 @@ } }, "range-parser": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", - "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=" + "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.3", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.3.tgz", - "integrity": "sha512-9esiElv1BrZoI3rCDuOuKCBRbuApGGaDPQfjSflGxdy4oyzqghxu6klEkkVIvBje+FF0BX9coEv8KqW6X/7njw==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", + "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", "requires": { - "bytes": "3.0.0", - "http-errors": "1.6.3", - "iconv-lite": "0.4.23", + "bytes": "3.1.0", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", "unpipe": "1.0.0" - }, - "dependencies": { - "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.5.0" - } - }, - "iconv-lite": { - "version": "0.4.23", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz", - "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==", - "requires": { - "safer-buffer": "2.1.2" - } - }, - "setprototypeof": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", - "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==" - } } }, "rc": { @@ -14623,9 +14579,9 @@ } }, "react-is": { - "version": "16.8.4", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.8.4.tgz", - "integrity": "sha512-PVadd+WaUDOAciICm/J1waJaSvgq+4rHE/K70j0PFqKhkTBsPv/82UGQJNXAngz1fOQLLxI6z1sEDmJDQhCTAA==", + "version": "16.8.6", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.8.6.tgz", + "integrity": "sha512-aUk3bHfZ2bRSVFFbbeVS4i+lNPZr3/WM5jT2J5omUVV1zzcs1nAaf3l51ctA5FFvCRbhrH0bdAsRRQddFJZPtA==", "dev": true }, "read": { @@ -14684,7 +14640,7 @@ "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", "requires": { - "resolve": "1.10.0" + "resolve": "1.10.1" } }, "regenerate": { @@ -14733,9 +14689,9 @@ } }, "registry-auth-token": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-3.3.2.tgz", - "integrity": "sha512-JL39c60XlzCVgNrO+qq68FoNb56w/m7JYvGR2jT5iR1xBrUA3Mfx5Twk5rqTThPmQKMWydGmq8oFtDlxfrmxnQ==", + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-3.4.0.tgz", + "integrity": "sha512-4LM6Fw8eBQdwMYcES4yTnn2TqIasbXuwDx3um+QRs7S55aMKCBKBxvPXl2RiUjHwuJLTyYfxSpmfSAjQpcuP+A==", "requires": { "rc": "1.2.8", "safe-buffer": "5.1.2" @@ -14793,7 +14749,7 @@ "aws-sign2": "0.7.0", "aws4": "1.8.0", "caseless": "0.12.0", - "combined-stream": "1.0.7", + "combined-stream": "1.0.8", "extend": "3.0.2", "forever-agent": "0.6.1", "form-data": "2.3.3", @@ -14802,7 +14758,7 @@ "is-typedarray": "1.0.0", "isstream": "0.1.2", "json-stringify-safe": "5.0.1", - "mime-types": "2.1.22", + "mime-types": "2.1.24", "oauth-sign": "0.9.0", "performance-now": "2.1.0", "qs": "6.5.2", @@ -14830,12 +14786,28 @@ "integrity": "sha1-UpyczvJzgK3+yaL5ZbZJu+5jZBg=" }, "require-in-the-middle": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/require-in-the-middle/-/require-in-the-middle-3.0.0.tgz", - "integrity": "sha512-rBQkxxboJbUNRMMf5Yi00TeljqBJf6GKJZZAA1M8sElWOZR60sM7UFDAMl7NbHQT2RLzg5mSoUiKU1ZR9+TeTQ==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/require-in-the-middle/-/require-in-the-middle-4.0.0.tgz", + "integrity": "sha512-GX12iFhCUzzNuIqvei0dTLUbBEjZ420KTY/MmDxe2GQKPDGyH/wgfGMWFABpnM/M6sLwC3IaSg8A95U6gIb+HQ==", "requires": { + "debug": "4.1.1", "module-details-from-path": "1.0.3", - "resolve": "1.10.0" + "resolve": "1.10.1" + }, + "dependencies": { + "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" + } + }, + "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==" + } } }, "require-main-filename": { @@ -14849,13 +14821,13 @@ "integrity": "sha512-qhM/y57enGWHAe3v/NcwML6a3/vfESLe/sGM2dII+gEO0BpKRUkWZow/tyloNqJyN6kXSl3RyyM8Ll5D/sJP8g==", "requires": { "resolve-from": "2.0.0", - "semver": "5.6.0" + "semver": "5.7.0" } }, "resolve": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.10.0.tgz", - "integrity": "sha512-3sUr9aq5OfSg2S9pNtPA9hL1FVEAjvfOC4leW0SNf/mpnaakz2a9femSd6LqAww2RaFctwyf1lCqnTHuF1rxDg==", + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.10.1.tgz", + "integrity": "sha512-KuIe4mf++td/eFb6wkaPbMDnP6kObCaEtIDuHOUED6MNUo4K670KZUHuuvYPZDxNF0WVLw49n06M2m2dXphEzA==", "requires": { "path-parse": "1.0.6" } @@ -14912,7 +14884,7 @@ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", "requires": { - "glob": "7.1.3" + "glob": "7.1.4" } }, "ripemd160": { @@ -14925,9 +14897,9 @@ } }, "rlp": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/rlp/-/rlp-2.2.2.tgz", - "integrity": "sha512-Ng2kJEN731Sfv4ZAY2i0ytPMc0BbJKBsVNl0QZY8LxOWSwd+1xpg+fpSRfaMn0heHU447s6Kgy8qfHZR0XTyVw==", + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/rlp/-/rlp-2.2.3.tgz", + "integrity": "sha512-l6YVrI7+d2vpW6D6rS05x2Xrmq8oW7v3pieZOJKBEdjuTF4Kz/iwk55Zyh1Zaz+KOB2kC8+2jZlp2u9L4tTzCQ==", "requires": { "bn.js": "4.11.8", "safe-buffer": "5.1.2" @@ -14973,9 +14945,9 @@ "integrity": "sha512-4VlvkRUuCJvr2J6Y0ImW7NvTCriMi7ErOAqWk1y69vAdoNIzCF3yPmgeNzx+RQTLEDFq5sHfscn1MwHxP9hNfA==" }, "rxjs": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.4.0.tgz", - "integrity": "sha512-Z9Yfa11F6B9Sg/BK9MnqnQ+aQYicPLtilXBp2yUtDt2JRCE0h26d33EnfO3ZxoNxG0T92OUucP3Ct7cpfkdFfw==", + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.5.2.tgz", + "integrity": "sha512-HUb7j3kvb7p7eCUHE3FqjoDsC1xfZQ4AHFWfTKSpZ+sAhhz5X1WX0ZuUqWbzB2QhSLp3DoLUG+hMdEDKqWo2Zg==", "dev": true, "requires": { "tslib": "1.9.3" @@ -15013,9 +14985,9 @@ "integrity": "sha1-eDDkV5e1kzKH8fmyj4cZB0ViYvI=" }, "saslprep": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/saslprep/-/saslprep-1.0.2.tgz", - "integrity": "sha512-4cDsYuAjXssUSjxHKRe4DTZC0agDwsCqcMqtJAQPzC74nJ7LfAJflAtC1Zed5hMzEQKj82d3tuzqdGNRsLJ4Gw==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/saslprep/-/saslprep-1.0.3.tgz", + "integrity": "sha512-/MY/PEMbk2SuY5sScONwhUDsV2p77Znkb/q3nSVstq/yQzYJOH/Azh29p9oJLsl3LnQwSvZDKagDGBsBwSooag==", "optional": true, "requires": { "sparse-bitfield": "3.0.3" @@ -15041,7 +15013,7 @@ "integrity": "sha1-BOAUpWgrU/pQwtXM4WfXGcBthw0=", "optional": true, "requires": { - "nan": "2.13.1" + "nan": "2.14.0" } }, "scrypt-async": { @@ -15067,9 +15039,9 @@ } }, "secp256k1": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/secp256k1/-/secp256k1-3.6.2.tgz", - "integrity": "sha512-90nYt7yb0LmI4A2jJs1grglkTAXrBwxYAjP9bpeKjvJKOjG2fOeH/YI/lchDMIvjrOasd5QXwvV2jwN168xNng==", + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/secp256k1/-/secp256k1-3.7.0.tgz", + "integrity": "sha512-YlUIghD6ilkMkzmFJpIdVjiamv2S8lNZ9YMwm1XII9JC0NcR5qQiv2DOp/G37sExBtaMStzba4VDJtvBXEbmMQ==", "requires": { "bindings": "1.5.0", "bip66": "1.1.5", @@ -15077,7 +15049,7 @@ "create-hash": "1.2.0", "drbg.js": "1.0.1", "elliptic": "6.4.1", - "nan": "2.13.1", + "nan": "2.14.0", "safe-buffer": "5.1.2" } }, @@ -15087,22 +15059,22 @@ "integrity": "sha512-O4OZEaNtkMd/K0i6js9SL+gqy0ZCBMgUvlSqHKi4IBdjhe7wB8pwztUk1BbZ1fmrvpwFrPbHzqd2w5pTcJH6LA==" }, "semver": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz", - "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==" + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz", + "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==" }, "semver-diff": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-2.1.0.tgz", "integrity": "sha1-S7uEN8jTfksM8aaP1ybsbWRdbTY=", "requires": { - "semver": "5.6.0" + "semver": "5.7.0" } }, "send": { - "version": "0.16.2", - "resolved": "https://registry.npmjs.org/send/-/send-0.16.2.tgz", - "integrity": "sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==", + "version": "0.17.1", + "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", + "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", "requires": { "debug": "2.6.9", "depd": "1.1.2", @@ -15111,46 +15083,30 @@ "escape-html": "1.0.3", "etag": "1.8.1", "fresh": "0.5.2", - "http-errors": "1.6.3", - "mime": "1.4.1", - "ms": "2.0.0", + "http-errors": "1.7.2", + "mime": "1.6.0", + "ms": "2.1.1", "on-finished": "2.3.0", - "range-parser": "1.2.0", - "statuses": "1.4.0" + "range-parser": "1.2.1", + "statuses": "1.5.0" }, "dependencies": { - "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" - } - }, - "setprototypeof": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", - "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==" - }, - "statuses": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", - "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==" + "ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" } } }, "serve-static": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.2.tgz", - "integrity": "sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==", + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", + "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==", "requires": { "encodeurl": "1.0.2", "escape-html": "1.0.3", - "parseurl": "1.3.2", - "send": "0.16.2" + "parseurl": "1.3.3", + "send": "0.17.1" } }, "set-blocking": { @@ -15216,7 +15172,7 @@ "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.3.tgz", "integrity": "sha512-fc0BKlAWiLpwZljmOvAOTE/gXawtCoNrP5oaY7KIaQbbyHeQVg01pSEuEGvGh3HEdBU4baCD7wQBwADmM/7f7A==", "requires": { - "glob": "7.1.3", + "glob": "7.1.4", "interpret": "1.2.0", "rechoir": "0.6.2" } @@ -15393,14 +15349,14 @@ } }, "solc": { - "version": "0.4.25", - "resolved": "https://registry.npmjs.org/solc/-/solc-0.4.25.tgz", - "integrity": "sha512-jU1YygRVy6zatgXrLY2rRm7HW1d7a8CkkEgNJwvH2VLpWhMFsMdWcJn6kUqZwcSz/Vm+w89dy7Z/aB5p6AFTrg==", + "version": "0.4.26", + "resolved": "https://registry.npmjs.org/solc/-/solc-0.4.26.tgz", + "integrity": "sha512-o+c6FpkiHd+HPjmjEVpQgH7fqZ14tJpXhho+/bQXlXbliLIS/xjXb42Vxh+qQY1WCSTMQ0+a5vR9vi0MfhU6mA==", "requires": { "fs-extra": "0.30.0", "memorystream": "0.3.1", "require-from-string": "1.2.1", - "semver": "5.6.0", + "semver": "5.7.0", "yargs": "4.8.1" } }, @@ -15449,7 +15405,7 @@ "integrity": "sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q==", "requires": { "spdx-expression-parse": "3.0.0", - "spdx-license-ids": "3.0.3" + "spdx-license-ids": "3.0.4" } }, "spdx-exceptions": { @@ -15463,13 +15419,13 @@ "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==", "requires": { "spdx-exceptions": "2.2.0", - "spdx-license-ids": "3.0.3" + "spdx-license-ids": "3.0.4" } }, "spdx-license-ids": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.3.tgz", - "integrity": "sha512-uBIcIl3Ih6Phe3XHK1NqboJLdGfwr1UN3k6wSD1dZpmPsIkb8AGNbZYJ1fOBk834+Gxy8rpfDxrS6XLEMZMY2g==" + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.4.tgz", + "integrity": "sha512-7j8LYJLeY/Yb6ACbQ7F76qy5jHkp0U6jgBfJsk97bwWlVUnUWsAgpyaCvo17h0/RQGnQ036tVDomiwoI4pDkQA==" }, "split-string": { "version": "3.1.0", @@ -15634,7 +15590,7 @@ "integrity": "sha512-pQdoU7nC+EpStXnCfh/+ho0zE0Z+ma+i7xvj7bkXKb1dvYHSZxgRPaU6spRP+Bjzow67c/rRDoix5RT0uU9omw==", "requires": { "backo2": "1.0.2", - "eventemitter3": "3.1.0", + "eventemitter3": "3.1.2", "iterall": "1.2.2", "symbol-observable": "1.2.0", "ws": "5.2.2" @@ -15661,9 +15617,9 @@ "integrity": "sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ==" }, "table": { - "version": "5.2.3", - "resolved": "https://registry.npmjs.org/table/-/table-5.2.3.tgz", - "integrity": "sha512-N2RsDAMvDLvYwFcwbPyF3VmVSSkuF+G1e+8inhBLtHpvwXGw4QRPEZhihQNeEN0i1up6/f6ObCJXNdlRG3YVyQ==", + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/table/-/table-5.4.0.tgz", + "integrity": "sha512-nHFDrxmbrkU7JAFKqKbDJXfzrX2UBsWmrieXFTGxiI5e4ncg3VqsZeI4EzNmX0ncp4XNGVeoxIWJXfCIXwrsvw==", "dev": true, "requires": { "ajv": "6.10.0", @@ -15715,12 +15671,12 @@ "defined": "1.0.0", "for-each": "0.3.3", "function-bind": "1.1.1", - "glob": "7.1.3", + "glob": "7.1.4", "has": "1.0.3", "inherits": "2.0.3", "minimist": "1.2.0", "object-inspect": "1.6.0", - "resolve": "1.10.0", + "resolve": "1.10.1", "resumer": "0.0.0", "string.prototype.trim": "1.1.2", "through": "2.3.8" @@ -15875,9 +15831,9 @@ "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=" }, "ts-invariant": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/ts-invariant/-/ts-invariant-0.3.2.tgz", - "integrity": "sha512-QsY8BCaRnHiB5T6iE4DPlJMAKEG3gzMiUco9FEt1jUXQf0XP6zi0idT0i0rMTu8A326JqNSDsmlkA9dRSh1TRg==", + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/ts-invariant/-/ts-invariant-0.3.3.tgz", + "integrity": "sha512-UReOKsrJFGC9tUblgSRWo+BsVNbEd77Cl6WiV/XpMlkifXwNIJbknViCucHvVZkXSC/mcWeRnIGdY7uprcwvdQ==", "requires": { "tslib": "1.9.3" } @@ -15914,12 +15870,12 @@ } }, "type-is": { - "version": "1.6.16", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.16.tgz", - "integrity": "sha512-HRkVv/5qY2G6I8iab9cI7v1bOIdhm94dVjQCPFElW9W+3GeDOSHmy2EBYe4VTApuzolPcmgFTN3ftVJRKR2J9Q==", + "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.22" + "mime-types": "2.1.24" } }, "typedarray": { @@ -16142,9 +16098,9 @@ "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==" }, "v8-compile-cache": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.0.2.tgz", - "integrity": "sha512-1wFuMUIM16MDJRCrpbpuEPTUGmM5QMUg0cr3KFwra2XgOgFcPGDQHDh3CszSCD2Zewc/dh/pamNEW8CbfDebUw==" + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.0.3.tgz", + "integrity": "sha512-CNmdbwQMBjwr9Gsmohvm0pbL954tJrNzf6gWL3K+QMQf00PF7ERGrEiLgjuU3mKreLC2MeGhUsNV9ybTbLgd3w==" }, "validate-npm-package-license": { "version": "3.0.4", @@ -16232,7 +16188,7 @@ "readable-stream": "2.3.6", "request": "2.88.0", "semaphore": "1.1.0", - "solc": "0.4.25", + "solc": "0.4.26", "tape": "4.10.1", "xhr": "2.5.0", "xtend": "4.0.1" @@ -16349,9 +16305,9 @@ } }, "ws": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.0.tgz", - "integrity": "sha512-deZYUNlt2O4buFCa3t5bKLf8A7FPP/TVjwOeVNpw818Ma5nk4MLXls2eoEGS39o8119QIYxTrTDoPQ5B/gTD6w==", + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.1.tgz", + "integrity": "sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA==", "requires": { "async-limiter": "1.0.0" } @@ -16416,7 +16372,7 @@ "integrity": "sha512-C/FsVVhht4iPQYXOInoxUM/1ELSf9EsgKH34FofQOp6hwCPrW4vG4w5++TED3xRUo8gD7l0P1J1dLlDYzODsTQ==", "requires": { "argparse": "1.0.10", - "glob": "7.1.3" + "glob": "7.1.4" } }, "yargs": { @@ -16450,9 +16406,9 @@ } }, "zen-observable": { - "version": "0.8.13", - "resolved": "https://registry.npmjs.org/zen-observable/-/zen-observable-0.8.13.tgz", - "integrity": "sha512-fa+6aDUVvavYsefZw0zaZ/v3ckEtMgCFi30sn91SEZea4y/6jQp05E3omjkX91zV6RVdn15fqnFZ6RKjRGbp2g==" + "version": "0.8.14", + "resolved": "https://registry.npmjs.org/zen-observable/-/zen-observable-0.8.14.tgz", + "integrity": "sha512-kQz39uonEjEESwh+qCi83kcC3rZJGh4mrZW7xjkSQYXkq//JZHTtKo+6yuVloTgMtzsIWOJrjIrKvk/dqm0L5g==" }, "zen-observable-ts": { "version": "0.8.18", @@ -16460,7 +16416,7 @@ "integrity": "sha512-q7d05s75Rn1j39U5Oapg3HI2wzriVwERVo4N7uFGpIYuHB9ff02P/E92P9B8T7QVC93jCMHpbXH7X0eVR5LA7A==", "requires": { "tslib": "1.9.3", - "zen-observable": "0.8.13" + "zen-observable": "0.8.14" } } } diff --git a/package.json b/package.json index 4828357..848fe8f 100644 --- a/package.json +++ b/package.json @@ -4,15 +4,15 @@ "description": "", "main": "index.js", "scripts": { - "dev": "rm -f out.log && pm2 start development.config.js", - "dev:watch": "rm -f out.log && pm2 start development.config.js && tail -f out.log", - "dev:force": "rm -f out.log && FORCE_REFRESH_DB=true pm2 start development.config.js && tail -f out.log", - "dev:resync": "rm -f out.log && RESYNC=true pm2 start development.config.js && tail -f out.log", - "dev:reprocess": "rm -f out.log && REPROCESS_ONLY=true pm2 start development.config.js && tail -f out.log", - "staging": "pm2 start staging.config.js", - "staging:force": "FORCE_REFRESH_DB=true pm2 start staging.config.js", - "staging:resync": "RESYNC=true pm2 start staging.config.js", - "staging:reprocess": "REPROCESS_ONLY=true pm2 start staging.config.js", + "dev": "rm -f out.log && ./node_modules/.bin/pm2 start development.config.js", + "dev:watch": "rm -f out.log && ./node_modules/.bin/pm2 start development.config.js && tail -f out.log", + "dev:force": "rm -f out.log && FORCE_REFRESH_DB=true ./node_modules/.bin/pm2 start development.config.js && tail -f out.log", + "dev:resync": "rm -f out.log && RESYNC=true ./node_modules/.bin/pm2 start development.config.js && tail -f out.log", + "dev:reprocess": "rm -f out.log && REPROCESS_ONLY=true ./node_modules/.bin/pm2 start development.config.js && tail -f out.log", + "staging": "FORCE_REFRESH_DB=false RESYNC=false ./node_modules/.bin/pm2 start staging.config.js", + "staging:force": "FORCE_REFRESH_DB=true ./node_modules/.bin/pm2 start staging.config.js", + "staging:resync": "FORCE_REFRESH_DB=false RESYNC=true ./node_modules/.bin/pm2 start staging.config.js", + "staging:reprocess": "REPROCESS_ONLY=true ./node_modules/.bin/pm2 start staging.config.js", "test": "echo \"Error: no test specified\" && exit 1", "db": "mongod --dbpath db --port 12702", "eslint": "eslint", @@ -23,7 +23,7 @@ "author": "", "license": "ISC", "dependencies": { - "@digix/dao-contracts": "^0.0.7", + "@digix/dao-contracts": "file:../dao-contracts", "@digix/dijix": "0.0.16", "@digix/helpers": "^1.0.1", "@digix/lite-dgx-contract": "1.0.1", @@ -49,6 +49,7 @@ "mongodb": "^3.1.8", "morgan": "^1.9.0", "node-cron": "^2.0.1", + "node-cache": "^4.2.0", "nodemon": "^1.18.4", "pm2": "^3.2.2", "postmark": "^1.6.1", diff --git a/routes/index.js b/routes/index.js index 2f3b89d..da08509 100644 --- a/routes/index.js +++ b/routes/index.js @@ -23,10 +23,17 @@ const { deserializeDaoConfigs, deserializeAddress, readConfig, + ofOne, + getTxConfigs, } = require('../helpers/utils'); +const { + fetchMany, +} = require('../cacheWrapper/cacheUtil'); + const { counters, + denominators, } = require('../helpers/constants'); const router = express.Router(); @@ -42,6 +49,11 @@ router.get('/daoInfo', async (req, res) => { return res.json({ result: info }); }); +router.get('/priceInfo', async (req, res) => { + const priceInfo = fetchMany(['ethusd']); + return res.json({ result: priceInfo }); +}); + router.get('/daoConfigs', async (req, res) => { const daoConfigs = deserializeDaoConfigs(await getDaoConfigs()); return res.json({ @@ -49,6 +61,12 @@ router.get('/daoConfigs', async (req, res) => { }); }); +router.get('/txConfigs', (req, res) => { + return res.json({ + result: getTxConfigs(), + }); +}); + router.get('/address/:address', async (req, res) => { const details = deserializeAddress(await getAddressDetails(req.params.address.toLowerCase())); return res.json({ result: details || 'notFound' }); @@ -66,8 +84,8 @@ router.get('/points', async (req, res) => { const filteredDetails = {}; details.forEach(function (d) { filteredDetails[d.address] = { - reputation: d.reputationPoint, - quarterPoints: d.quarterPoint, + reputation: ofOne(d.reputationPoint, denominators.REPUTATION_POINT), + quarterPoints: ofOne(d.quarterPoint, denominators.QUARTER_POINT), }; }); return res.json({ result: filteredDetails }); diff --git a/routes/proposals.js b/routes/proposals.js index 8ea77ef..debbfd0 100644 --- a/routes/proposals.js +++ b/routes/proposals.js @@ -34,7 +34,7 @@ router.get('/count', async (req, res) => { if (!result[proposal.stage]) result[proposal.stage] = 0; result[proposal.stage] += 1; } - result[proposalStages.PROPOSAL] += specialProposalsCount; + result[proposalStages.PROPOSAL] = result[proposalStages.PROPOSAL] ? result[proposalStages.PROPOSAL] + specialProposalsCount : specialProposalsCount; return res.json({ result }); }); @@ -45,11 +45,11 @@ router.get('/details/:id', async (req, res) => { }); router.get('/:stage', async (req, res) => { - const filter = (req.params.stage === 'all') ? {} : { stage: req.params.stage }; + const filter = (req.params.stage === 'all') ? {} : { stage: req.params.stage.toUpperCase() }; const proposals = await getProposals(filter); let specialProposals = []; if ( - req.params.stage === proposalStages.PROPOSAL + req.params.stage.toUpperCase() === proposalStages.PROPOSAL || req.params.stage === 'all' ) { specialProposals = await getSpecialProposals(); diff --git a/scripts/blocks.js b/scripts/blocks.js index 06ce774..cc58986 100644 --- a/scripts/blocks.js +++ b/scripts/blocks.js @@ -26,11 +26,16 @@ const { notifyDaoServer, } = require('./notifier'); +const { + updatePrices, +} = require('./prices'); + const { counters, daoServerEndpoints, } = require('../helpers/constants'); + const syncAndProcessToLatestBlock = async (lastProcessedBlock = null) => { console.log('INFOLOG: syncAndProcessToLatestBlock'); await setIsSyncing(true); @@ -84,6 +89,7 @@ const watchNewBlocks = async () => { if (latestBlock > lastSeenBlock) { console.log('INFOLOG: [seen] new blocks = [', lastSeenBlock + 1, ', ', latestBlock, ']'); if (!isUpdatingLatestTxns) _updateLatestTxns(lastSeenBlock, latestBlock); + updatePrices(); } }; diff --git a/scripts/dao.js b/scripts/dao.js index d4c69c1..a5a95d1 100644 --- a/scripts/dao.js +++ b/scripts/dao.js @@ -8,6 +8,10 @@ const { getDaoInfo, } = require('../dbWrapper/dao'); +const { + updateAddresses, +} = require('../dbWrapper/addresses'); + const { getContracts, } = require('../helpers/contracts'); @@ -16,6 +20,10 @@ const { daoConfigsIndices, } = require('../helpers/constants'); +const { + getWeb3, +} = require('../web3Wrapper/web3Util'); + const initDao = async () => { const daoInfo = await getContracts().daoInformation.readDaoInfo.call(); const totalLockedDgds = await getContracts() @@ -26,8 +34,46 @@ const initDao = async () => { .daoStakeStorage .totalModeratorLockedDGDStake .call(); + const fundsInDao = await getWeb3().eth.getBalance(getContracts().daoFundingManager.address); + // don't need to wait for this to be completed + + await updateDao({ + $set: { + currentQuarter: daoInfo[0].toNumber(), + startOfQuarter: daoInfo[1].toNumber(), + startOfMainphase: daoInfo[2].toNumber(), + startOfNextQuarter: daoInfo[3].toNumber(), + totalLockedDgds: totalLockedDgds.toNumber(), + totalModeratorLockedDgds: totalModeratorLockedDgds.toNumber(), + isGlobalRewardsSet: daoInfo[5], + nModerators: daoInfo[6].toNumber(), + nParticipants: daoInfo[7].toNumber(), + remainingFunds: fundsInDao.toNumber(), + }, + }, { upsert: true }); +}; + +const initDaoAtNewQuarter = async () => { + const daoInfo = await getContracts().daoInformation.readDaoInfo.call(); + const totalLockedDgds = await getContracts() + .daoStakeStorage + .totalLockedDGDStake + .call(); + const totalModeratorLockedDgds = await getContracts() + .daoStakeStorage + .totalModeratorLockedDGDStake + .call(); + const fundsInDao = await getWeb3().eth.getBalance(getContracts().daoFundingManager.address); // don't need to wait for this to be completed + // set everybody to be not participants and not moderators + await updateAddresses({ isParticipant: true }, { + $set: { + isParticipant: false, + isModerator: false, + }, + }); + await updateDao({ $set: { currentQuarter: daoInfo[0].toNumber(), @@ -39,6 +85,7 @@ const initDao = async () => { isGlobalRewardsSet: daoInfo[5], nModerators: daoInfo[6].toNumber(), nParticipants: daoInfo[7].toNumber(), + remainingFunds: fundsInDao.toNumber(), }, }, { upsert: true }); }; @@ -60,6 +107,7 @@ const refreshDaoConfigs = async () => { // which is already handled in the `addresses.js` const refreshDao = async () => { const daoInfo = await getContracts().daoInformation.readDaoInfo.call(); + const fundsInDao = await getWeb3().eth.getBalance(getContracts().daoFundingManager.address); // don't need to wait for this to be completed await updateDao({ $set: { @@ -70,6 +118,7 @@ const refreshDao = async () => { isGlobalRewardsSet: daoInfo[5], nModerators: daoInfo[6].toNumber(), nParticipants: daoInfo[7].toNumber(), + remainingFunds: fundsInDao.toNumber(), }, }); }; @@ -87,6 +136,7 @@ const refreshDaoTemp = async () => { nParticipants: 0, totalLockedDgds: 0, totalModeratorLockedDgds: 0, + remainingFunds: 0, }, }); }; @@ -124,5 +174,6 @@ module.exports = { refreshDaoConfigs, isDaoStarted, initDaoBeforeStart, + initDaoAtNewQuarter, getStartOfFirstQuarter, }; diff --git a/scripts/kyc.js b/scripts/kyc.js index 118bcbd..ce428dd 100644 --- a/scripts/kyc.js +++ b/scripts/kyc.js @@ -28,7 +28,7 @@ const { notifyDaoServer, } = require('./notifier'); -const keystore = require('../keystore/kyc-admin.json'); +const keystore = require(process.env.KYC_ADMIN_KEYSTORE_PATH); const _getCallData = (entry) => { return getContracts() diff --git a/scripts/manage/update/update-address.js b/scripts/manage/update/update-address.js new file mode 100644 index 0000000..e4ca850 --- /dev/null +++ b/scripts/manage/update/update-address.js @@ -0,0 +1,61 @@ +const Web3 = require('web3'); + +const { + initMongoClient, +} = require('../helpers'); + +const { + collections, +} = require('../../../helpers/constants'); + +const { + initContracts, + getContracts, +} = require('../../../helpers/contracts'); + +const getAddressObject = (userInfo) => { + return { + isParticipant: userInfo[0], + isModerator: userInfo[1], + isDigix: userInfo[2], + redeemedBadge: userInfo[3], + lastParticipatedQuarter: userInfo[4].toNumber(), + lastQuarterThatReputationWasUpdated: userInfo[5].toNumber(), + lockedDgdStake: userInfo[6].toString(), + lockedDgd: userInfo[7].toString(), + reputationPoint: userInfo[8].toString(), + quarterPoint: userInfo[9].toString(), + claimableDgx: userInfo[10].toString(), + moderatorQuarterPoint: userInfo[11].toString(), + }; +}; + +const updateAddress = async () => { + const mongoClient = await initMongoClient('mongodb://localhost:27017/digixdao', 'digixdao'); + + const provider = process.env.WEB3_HTTP_PROVIDER; + const web3 = new Web3(new Web3.providers.HttpProvider(provider)); + const networkId = await web3.version.network; + await initContracts(web3, networkId); + + const address = process.env.USER_ADDRESS; + + const addressDetails = await mongoClient + .collection(collections.ADDRESSES) + .findOne({ address }); + + if (addressDetails) { + const userInfo = await getContracts().daoInformation.readUserInfo.call(address); + + await mongoClient.collection(collections.ADDRESSES) + .updateOne({ address }, { + $set: { + ...getAddressObject(userInfo), + }, + }, { upsert: true }); + } + + console.log('done'); +}; + +updateAddress(); diff --git a/scripts/prices.js b/scripts/prices.js new file mode 100644 index 0000000..733f4e6 --- /dev/null +++ b/scripts/prices.js @@ -0,0 +1,29 @@ +const request = require('request'); + +const { + store, +} = require('../cacheWrapper/cacheUtil'); + +const updatePrices = async () => { + const options = { + baseUrl: process.env.PRICEFEED_SERVER, + url: '/tick/ethusd', + method: 'GET', + strictSSL: true, + headers: { + 'content-type': 'application/json', + }, + }; + + request(options, async function (err, response, body) { + if (err) { + console.log(err); + } + body = JSON.parse(body); + if (body && body.data && body.data.price) store('ethusd', body.data.price); + }); +}; + +module.exports = { + updatePrices, +}; diff --git a/scripts/proposals.js b/scripts/proposals.js index 8bd10ff..11ab3c7 100644 --- a/scripts/proposals.js +++ b/scripts/proposals.js @@ -16,6 +16,7 @@ const { getUpdatedFundings, getDefaultDijixFields, bNArrayToString, + getAdditionalDocs, } = require('../helpers/utils'); const { @@ -51,6 +52,7 @@ const { const { fetchProposalVersion, + fetchMultiple, } = require('../dijixWrapper/proposals'); const { @@ -87,7 +89,7 @@ const refreshProposalNew = async (res) => { proposal.stage = proposalStages.IDEA; proposal.timeCreated = proposalDetails[readProposalIndices.timeCreated].toNumber(); proposal.finalVersionIpfsDoc = proposalDetails[readProposalIndices.finalVersionIpfsDoc]; - proposal.prl = proposalDetails[readProposalIndices.prl]; + proposal.prl = readProposalPRLActions.NEW; proposal.isDigix = proposalDetails[readProposalIndices.isDigix]; proposal.claimableFunding = 0; proposal.currentMilestone = -1; @@ -157,7 +159,7 @@ const refreshProposalDetails = async (res) => { proposal.endorser = proposalDetails[readProposalIndices.endorser]; proposal.timeCreated = proposalDetails[readProposalIndices.timeCreated].toNumber(); proposal.finalVersionIpfsDoc = proposalDetails[readProposalIndices.finalVersionIpfsDoc]; - proposal.prl = proposalDetails[readProposalIndices.prl]; + proposal.prl = proposalDetails[readProposalIndices.prl] ? readProposalPRLActions.PAUSED : readProposalPRLActions.NEW; proposal.isDigix = proposalDetails[readProposalIndices.isDigix]; const nVersions = proposalDetails[readProposalIndices.nVersions]; @@ -168,16 +170,12 @@ const refreshProposalDetails = async (res) => { console.log('version id : ', v); const proposalVersion = await getContracts().daoStorage.readProposalVersion.call(res._proposalId, currentVersion); const ipfsDoc = await fetchProposalVersion('Qm'.concat(decodeHash(proposalVersion[readProposalVersionIndices.docIpfsHash]).slice(2))); - let proposalDocs = []; - if (proposalVersion === proposal.finalVersionIpfsDoc) { - proposalDocs = await getContracts().daoStorage.readProposalDocs.call(res._proposalId); - } proposal.proposalVersions.push({ docIpfsHash: proposalVersion[readProposalVersionIndices.docIpfsHash], created: proposalVersion[readProposalVersionIndices.created].toNumber(), milestoneFundings: (currentVersion === latestVersion) ? res._milestonesFundings : bNArrayToString(proposalVersion[readProposalVersionIndices.milestoneFundings]), finalReward: (currentVersion === latestVersion) ? res._finalReward.toString() : proposalVersion[readProposalVersionIndices.finalReward].toString(), - moreDocs: proposalDocs, + moreDocs: [], totalFunding: (new BigNumber(res._finalReward)).plus(sumArrayString(res._milestonesFundings)).toString(), dijixObject: ipfsDoc.data ? { ...ipfsDoc.data.attestation, @@ -196,6 +194,27 @@ const refreshProposalDetails = async (res) => { return Promise.resolve(proposal); }; +// TO BE TESTED +const refreshProposalAddMoreDocs = async (res) => { + const proposal = await getProposal(res._proposalId); + + const v = proposal.proposalVersions.length - 1; + let proposalMoreDocs = await getContracts().daoStorage.readProposalDocs.call(res._proposalId); + proposalMoreDocs = proposalMoreDocs.map((item) => { + return 'Qm'.concat(decodeHash(item).slice(2)); + }); + + proposal.proposalVersions[v].moreDocs = getAdditionalDocs(await fetchMultiple(proposalMoreDocs)); + + await updateProposal(res._proposalId, { + $set: { + proposalVersions: proposal.proposalVersions, + }, + }); + + return Promise.resolve(proposal); +}; + // DONE const refreshProposalEndorseProposal = async (res) => { const proposal = await getProposal(res._proposalId); @@ -714,6 +733,7 @@ const refreshProposalSpecialNew = async (res) => { proposal.timeCreated = readProposal[readSpecialProposalIndices.timeCreated].toNumber(); proposal.isActive = false; proposal.isSpecial = true; + proposal.prl = readProposalPRLActions.NEW; proposal.stage = proposalStages.PROPOSAL; proposal.uintConfigs = {}; proposal.addressConfigs = {}; @@ -861,7 +881,10 @@ const refreshProposalRevealVoteOnSpecial = async (res) => { console.log('reveal vote for special proposal'); - return getSpecialProposal(res._proposalId); + return Promise.all([ + getSpecialProposal(res._proposalId), + getAddressDetails(res._from), + ]); }; // TO BE TESTED @@ -908,6 +931,7 @@ module.exports = { refreshProposalDetails, refreshProposalEndorseProposal, refreshProposalFinalizeProposal, + refreshProposalAddMoreDocs, refreshProposalDraftVote, refreshProposalDraftVotingClaim, refreshProposalCommitVote, diff --git a/scripts/watchedFunctions.js b/scripts/watchedFunctions.js index 1678718..4301857 100644 --- a/scripts/watchedFunctions.js +++ b/scripts/watchedFunctions.js @@ -5,6 +5,7 @@ const { refreshProposalDetails, refreshProposalEndorseProposal, refreshProposalFinalizeProposal, + refreshProposalAddMoreDocs, refreshProposalDraftVote, refreshProposalDraftVotingClaim, refreshProposalCommitVote, @@ -29,8 +30,8 @@ const { } = require('./addresses'); const { - initDao, initDaoBeforeStart, + initDaoAtNewQuarter, } = require('./dao'); const tapPromise = t => f => (...args) => f(...args).then((result) => { @@ -82,7 +83,7 @@ const multiBroadcast = (splitter, broadcasts) => tapPromise((result) => { const watchedFunctionsMap = { setStartOfFirstQuarter: initDaoBeforeStart, - calculateGlobalRewardsBeforeNewQuarter: initDao, + calculateGlobalRewardsBeforeNewQuarter: initDaoAtNewQuarter, lockDGD: multiBroadcast( ([daoInfo, user]) => [daoInfo, user], @@ -108,6 +109,7 @@ const watchedFunctionsMap = { modifyProposal: broadcastUpdatedProposal(refreshProposalDetails), endorseProposal: broadcastUpdatedProposal(refreshProposalEndorseProposal), finalizeProposal: broadcastUpdatedProposal(refreshProposalFinalizeProposal), + addProposalDoc: broadcastUpdatedProposal(refreshProposalAddMoreDocs), voteOnDraft: multiBroadcast( ([proposal, user]) => [proposal, user], [broadcastUpdatedProposal, broadcastUpdatedUser], @@ -129,7 +131,10 @@ const watchedFunctionsMap = { createSpecialProposal: broadcastUpdatedProposal(refreshProposalSpecialNew), startSpecialProposalVoting: broadcastUpdatedProposal(refreshProposalSpecial), commitVoteOnSpecialProposal: broadcastUpdatedProposal(refreshProposalCommitVoteOnSpecial), - revealVoteOnSpecialProposal: broadcastUpdatedProposal(refreshProposalRevealVoteOnSpecial), + revealVoteOnSpecialProposal: multiBroadcast( + ([proposal, user]) => [proposal, user], + [broadcastUpdatedProposal, broadcastUpdatedUser], + )(refreshProposalRevealVoteOnSpecial), claimSpecialProposalVotingResult: broadcastUpdatedProposal(refreshProposalSpecialVotingClaim), }; diff --git a/staging.config.js b/staging.config.js index 7723302..d473f2f 100644 --- a/staging.config.js +++ b/staging.config.js @@ -21,12 +21,13 @@ module.exports = { RESYNC: process.env.RESYNC, REPROCESS_ONLY: process.env.REPROCESS_ONLY, SYNC_REPORT_FREQUENCY: 10, - WEB3_HTTP_PROVIDER: 'https://kovan.digixdev.com', + WEB3_HTTP_PROVIDER: 'https://kovan.infura.io/v3/0bc82d401f644369afdbed5b5590fe28', IPFS_ENDPOINT: 'https://ipfs-api.digix.global', HTTP_ENDPOINT: 'https://ipfs.digix.global/ipfs', IPFS_TIMEOUT: 60000, CRON_PROCESS_KYC_FREQUENCY: 5, CRON_WATCH_BLOCKS_FREQUENCY: 5, + KYC_ADMIN_KEYSTORE_PATH: process.env.KYC_ADMIN_KEYSTORE_PATH, KYC_ADMIN_PASSWORD: 'digixdao-kovan', FORUM_ADMIN_ADDRESS: '0x369d674039d64519af688f4c6f9608552207bdab', DGD_CONTRACT: '0x3bbba4b50468ead87cfc90a31c2768b7bf4d26e1', diff --git a/types/proposal.js b/types/proposal.js index f0febf0..cd810f3 100644 --- a/types/proposal.js +++ b/types/proposal.js @@ -1,9 +1,105 @@ const { gql } = require('apollo-server-express'); -const { ofOne } = require('../helpers/utils'); -const { denominators } = require('../helpers/constants'); +const { + ofOne, + getCurrentActionableStatus, +} = require('../helpers/utils'); + +const { + denominators, + actionableStatus, +} = require('../helpers/constants'); const typeDef = gql` + enum ProposalPrlEnum { + # If PRL stops proposal + STOPPED + + # If PRL pauses proposal + PAUSED + + # If no action has been taken + # the proposal is active + ACTIVE + } + + enum ProposalStageEnum { + # Idea phase + IDEA + + # Draft phase + DRAFT + + # Proposal phase + PROPOSAL + + # Ongoing phase + ONGOING + + # Review phase + REVIEW + + # Archived phase + # After a proposal is completed all rounds + # Or if it failed voting in any round + # Or the proposer closed the proposal + # Or the founder closed the proposal after deadline + ARCHIVED + } + + enum ProposalVotingStageEnum { + # Draft Voting stage + DRAFT + + # Commit voting stage + COMMIT + + # Reveal voting stage + REVEAL + + # No voting stage going on + NONE + } + + enum ActionableStatusEnum { + # No actionable status + # Or there is no user context + NONE + + # Proposal awaits endorsement + # is displayed to the moderators + AWAITING_ENDORSEMENT + + # Proposal is in moderator voting phase + # is displayed to the moderators + MODERATOR_VOTING + + # Proposal is in commit voting phase + # is displayed to every participant + COMMIT_PHASE + + # Proposal is in reveal vote phase + # is displayed to every participant + REVEAL_PHASE + + # Funds can be claimed for this proposal + # is displayed only to the proposer of this proposal + CLAIM_FUNDING + + # Voting result can be claimed for this proposal + # is displayed only to the proposer of this proposal + CLAIM_VOTING + } + + # Proposal actionable status for a proposal + type ProposalActionableObject { + # Proposal ID + proposalId: String + + # Action that can be done by the current user + actionableStatus: String + } + # Voting rounds for proposal voting type Milestone { # Index ID @@ -28,6 +124,14 @@ const typeDef = gql` updated: BigNumber } + type ProposalDoc { + # IPFS hashes for doc + docs: [String] + + # Date the document is created + created: Timestamp + } + # Milestone fundings type MilestoneFunding { # Index ID @@ -126,8 +230,8 @@ const typeDef = gql` # Expected reward on the completion of the proposal finalReward: BigNumber - # More docs(?) - moreDocs: [String] + # More docs associated with the proposal + moreDocs: [ProposalDoc] # Version total funding totalFunding: BigNumber @@ -225,7 +329,7 @@ const typeDef = gql` endorser: EthAddress # The current stage of the proposal - stage: String + stage: ProposalStageEnum # A flag to indicate the proposal is by the Digix isDigix: Boolean @@ -273,13 +377,13 @@ const typeDef = gql` finalVersionIpfsDoc: String # See 'Proposal.isPrl' - prl: Boolean + prl: ProposalPrlEnum # Proposal's claimable funding claimableFunding: BigNumber # Current voting stage - votingStage: String + votingStage: ProposalVotingStageEnum # For special proposals, the title of the proposal title: String @@ -292,6 +396,9 @@ const typeDef = gql` # Special proposal config changes uintConfigs: UintConfig + + # Any actionable status + actionableStatus: ActionableStatusEnum } `; @@ -346,6 +453,12 @@ const resolvers = { claimableFunding(proposal) { return eth(proposal.claimableFunding); }, + actionableStatus(proposal, _args, context, _info) { + if (!context.currentUser) { + return actionableStatus.NONE; + } + return (proposal.actionableStatus || getCurrentActionableStatus(proposal, context.currentUser)); + }, proposalVersions(proposal) { return (proposal.proposalVersions || []).map((version, index) => ({ id: `${proposal.proposalId}/VERSION-${index}`, @@ -353,7 +466,6 @@ const resolvers = { })); }, }, - }; module.exports = { resolvers, typeDef }; diff --git a/types/user.js b/types/user.js index a789781..f9a1700 100644 --- a/types/user.js +++ b/types/user.js @@ -21,7 +21,7 @@ const typeDef = gql` lockedDgd: BigNumber # User's current reputation points - reputationPoint: BigNumber! + reputationPoint: BigNumber # User's current quarterly points quarterPoint: BigNumber diff --git a/web3Wrapper/web3Util.js b/web3Wrapper/web3Util.js index e926c56..1f1249e 100644 --- a/web3Wrapper/web3Util.js +++ b/web3Wrapper/web3Util.js @@ -1,6 +1,7 @@ const Web3 = require('web3'); const Wallet = require('ethereumjs-wallet'); -const keystore = require('../keystore/kyc-admin.json'); + +const keystore = require(process.env.KYC_ADMIN_KEYSTORE_PATH); let _web3; let _bufferPK;