From 403fb095132cc9b9d56fbdfdbd1735b7c73d7085 Mon Sep 17 00:00:00 2001 From: Sonya Mann Date: Tue, 12 Mar 2019 09:38:35 -0700 Subject: [PATCH 01/11] change non-attributed contributions language (#316) * non-attributed contributions copy --- .../client/components/ContributionModal/index.tsx | 14 +++++++------- .../components/Proposal/CampaignBlock/index.tsx | 4 ++-- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/frontend/client/components/ContributionModal/index.tsx b/frontend/client/components/ContributionModal/index.tsx index f3448a20..6c769fe0 100644 --- a/frontend/client/components/ContributionModal/index.tsx +++ b/frontend/client/components/ContributionModal/index.tsx @@ -89,19 +89,19 @@ export default class ContributionModal extends React.Component { - You are about to contribute anonymously. Your contribution will show up - without attribution, and even if you're logged in, will not appear anywhere + Your contribution will show up + without attribution. Even if you're logged in, the contribution will not appear anywhere on your account after you close this modal.

- In the case of a refund, your contribution will be treated as a donation to - the Zcash Foundation instead. + ZF Grants is unable to offer refunds for non-attributed contributions. If refunds for this campaign are issued, your contribution will be treated as a donation to + the Zcash Foundation.

- If you would like to have your contribution attached to an account, you can + If you would like to have your contribution attached to an account and remain eligible for refunds, you can close this modal, make sure you're logged in, and don't check the - "Contribute anonymously" checkbox. + "Contribute without attribution" checkbox. } /> diff --git a/frontend/client/components/Proposal/CampaignBlock/index.tsx b/frontend/client/components/Proposal/CampaignBlock/index.tsx index 7b32ba81..0721bcb0 100644 --- a/frontend/client/components/Proposal/CampaignBlock/index.tsx +++ b/frontend/client/components/Proposal/CampaignBlock/index.tsx @@ -191,8 +191,8 @@ export class ProposalCampaignBlock extends React.Component { {amountToRaise && !!authUser && ( - Contribute anonymously - + Contribute without attribution + From e98f266100eb2d7ba9752780e8513f5b1d0e5584 Mon Sep 17 00:00:00 2001 From: Sonya Mann Date: Tue, 12 Mar 2019 09:44:16 -0700 Subject: [PATCH 02/11] add CoC (#328) --- .../client/static/markdown/CODE_OF_CONDUCT.md | 80 ++++++++++++++++--- 1 file changed, 69 insertions(+), 11 deletions(-) diff --git a/frontend/client/static/markdown/CODE_OF_CONDUCT.md b/frontend/client/static/markdown/CODE_OF_CONDUCT.md index 380558f0..7dfaf42e 100644 --- a/frontend/client/static/markdown/CODE_OF_CONDUCT.md +++ b/frontend/client/static/markdown/CODE_OF_CONDUCT.md @@ -1,21 +1,79 @@ -# Code of Conduct +# Community Guidelines -### Lorem Ipsum +Commenters on ZF Grants should strive to be kind, respectful, and interesting. Ideally, your presence in the community should improve the experience for everyone. -Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. + -### Duis Aute Irure +## [Rules](#rules) -Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. +We are committed to making participation in this forum a harassment-free experience for everyone, regardless of a person's... -Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. +* Level of experience. +* Gender identity and expression. +* Sexual orientation. +* Disability. +* Personal appearance. +* Body size. +* Race. +* Ethnicity. +* Age. +* Religion. +* Nationality. -### Ullamco Laboris Reprehenderit +Examples of **unacceptable** behavior include: -Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. +* Using sexualized language or imagery. +* Personal attacks. +* Trolling and insulting or derogatory comments. +* Public or private harassment. +* Publishing another person's private information, such as physical or electronic addresses, without explicit permission (AKA doxxing). +* Other unethical or unprofessional conduct, at the discretion of the ZF Grants admins. -### Fugiat + -Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. +## [Moderation](#moderation) -**Effective:** Oct 25, 2018 +ZF Grants has the right and responsibility to remove, edit, or reject posts, comments and other contributions that are not aligned with these Community Guidelines, or to suspend or ban any ZF Grants user for other behaviors that they deem inappropriate, threatening, offensive, or harmful. + +By adopting these Community Guidelines, the admins of ZF Grants commit themselves to fairly and consistently applying these principles to every aspect of managing discussions on the platform. + + + +## [Reporting](#reporting) + +Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by flagging the post or comment in question, or by emailing contact@zfnd.org. + +All complaints will be reviewed, investigated, and will result in a response that is deemed necessary and appropriate for the circumstances. **ZF Grants is obligated to maintain confidentiality with regard to the reporter of an incident.** + +_The guidelines listed in the sections above were adapted from the [rules of the Zcash Community Forum](https://forum.zcashcommunity.com/faq), which came from the [Zcash core contributor code of conduct](https://github.com/zcash/zcash/blob/master/code_of_conduct.md), which is itself based on [version 1.3.0 of the Contributor Covenant](https://www.contributor-covenant.org/version/1/3/0/code-of-conduct.html)._ + + + +## [Etiquette](#etiquette) + +Please do not: + +* Post topics unrelated to Zcash. +* Solicit domain sales (even if related to Zcash). +* Bump comments sections without something new to add. +* Derail topics. +* Post links to phishing sites. +* Post spam. +* Create topics or replies for the sole purpose of causing unrest. +* Repost or comment excessively. +* Create and use multiple accounts as sockpuppets. +* Post solicitations for or about services considered illegal in the United States. +* Post links to internet gambling operations. + * It's a crime for internet gambling operations to accept bets from United States persons, and the Justice Department takes the position that people who post advertisements or promotions for online gambling may be aiding and abetting those activities. + + + +## [Copyright](#stealing) + +You may not post anything digital that belongs to someone else without permission. You may not post descriptions of, links to, or methods for stealing someone’s intellectual property (software, video, audio, images), or for breaking any other law. + + + +## [Legal](#tos) + +To use ZF Grants, you must agree to abide by our [Terms of Service](/tos). The data that constitutes your ZF Grants account and its activities is covered by our [Privacy Policy](/privacy). From c291d41d4e696a147aef205e03277675f15df9b1 Mon Sep 17 00:00:00 2001 From: AMStrix Date: Tue, 12 Mar 2019 12:08:16 -0500 Subject: [PATCH 03/11] Admin financials (#310) * admin: financials basics * BE: allow missing emailSettings on user settings EP * admin: add webpack import loader for ant-design-pro (for styles loading) * BE: admin financials reporting * admin: financials page * admin financials - convert contribution and payout total summations to sql * Handle some kinda failure case. * admin: remove "accounting" card from financials --- admin/src/Routes.tsx | 2 + admin/src/components/Financials/index.less | 56 +++++++++ admin/src/components/Financials/index.tsx | 138 +++++++++++++++++++++ admin/src/components/Template/index.tsx | 6 + admin/src/store.ts | 41 ++++++ admin/webpack.config.js | 10 ++ backend/grant/admin/views.py | 98 ++++++++++++++- backend/grant/user/views.py | 2 +- 8 files changed, 351 insertions(+), 2 deletions(-) create mode 100644 admin/src/components/Financials/index.less create mode 100644 admin/src/components/Financials/index.tsx diff --git a/admin/src/Routes.tsx b/admin/src/Routes.tsx index 5026b646..24a2cbcd 100644 --- a/admin/src/Routes.tsx +++ b/admin/src/Routes.tsx @@ -19,6 +19,7 @@ import RFPDetail from 'components/RFPDetail'; import Contributions from 'components/Contributions'; import ContributionForm from 'components/ContributionForm'; import ContributionDetail from 'components/ContributionDetail'; +import Financials from 'components/Financials'; import Moderation from 'components/Moderation'; import Settings from 'components/Settings'; @@ -54,6 +55,7 @@ class Routes extends React.Component { + } /> diff --git a/admin/src/components/Financials/index.less b/admin/src/components/Financials/index.less new file mode 100644 index 00000000..a72948cd --- /dev/null +++ b/admin/src/components/Financials/index.less @@ -0,0 +1,56 @@ +.Financials { + &-zcash { + font-size: 0.8rem; + vertical-align: text-top; + display: inline-block; + padding-top: 0.15rem; + } + + &-bottomLine { + & > div { + display: flex; + justify-content: space-between; + + &.is-net { + margin-top: 0.5rem; + border-top: 1px solid rgba(0, 0, 0, 0.65); + padding-top: 0.5rem; + } + + & .Info { + font-size: 0.9rem; + } + + & > div + div { + font-family: 'Courier New', Courier, monospace; + min-width: 250px; + } + + small { + display: inline-block; + padding-right: 0.1rem; + } + } + font-size: 1.2rem; + } + + h1 { + font-size: 1.5rem; + } + + .ant-card { + margin-bottom: 16px; + } + + .antd-pro-charts-pie-total { + .pie-sub-title { + margin: 0; + } + } + + .antd-pro-charts-pie-legend { + li { + margin-bottom: 0; + } + } +} diff --git a/admin/src/components/Financials/index.tsx b/admin/src/components/Financials/index.tsx new file mode 100644 index 00000000..e085475e --- /dev/null +++ b/admin/src/components/Financials/index.tsx @@ -0,0 +1,138 @@ +import React from 'react'; +import { Spin, Card, Row, Col } from 'antd'; +import { Charts } from 'ant-design-pro'; +import { view } from 'react-easy-state'; +import store from '../../store'; +import Info from 'components/Info'; +import './index.less'; + +class Financials extends React.Component { + componentDidMount() { + store.fetchFinancials(); + } + + render() { + const { contributions, grants, payouts } = store.financials; + if (!store.financialsFetched) { + return ; + } + + return ( +
+ + + + ( + + )} + data={[ + { x: 'funded', y: parseFloat(contributions.funded) }, + { x: 'funding', y: parseFloat(contributions.funding) }, + { x: 'refunding', y: parseFloat(contributions.refunding) }, + { x: 'refunded', y: parseFloat(contributions.refunded) }, + { x: 'staking', y: parseFloat(contributions.staking) }, + ]} + valueFormat={val => } + height={180} + /> + + + +

+ Matching and bounty obligations for active and completed + proposals. +

+ matching - total matching amount pleged +
+ bounties - total bounty amount pledged +
+ + } + > + Grants + + } + > + ( + + )} + data={[ + { x: 'bounties', y: parseFloat(grants.bounty) }, + { x: 'matching', y: parseFloat(grants.matching) }, + ]} + valueFormat={val => } + height={180} + /> +
+ + +

Milestone payouts.

+ due - payouts currently accepted but not paid +
+ future - payouts that are not yet paid, but expected to be + requested in the future +
+ paid - total milestone payouts marked as paid, regardless of + proposal status +
+ + } + > + Payouts + + } + > + ( + + )} + data={[ + { x: 'due', y: parseFloat(payouts.due) }, + { x: 'future', y: parseFloat(payouts.future) }, + { x: 'paid', y: parseFloat(payouts.paid) }, + ]} + valueFormat={val => } + height={180} + /> +
+ +
+
+ ); + } +} + +export default view(Financials); diff --git a/admin/src/components/Template/index.tsx b/admin/src/components/Template/index.tsx index 70f840ce..4954f3a2 100644 --- a/admin/src/components/Template/index.tsx +++ b/admin/src/components/Template/index.tsx @@ -63,6 +63,12 @@ class Template extends React.Component { Contributions + + + + Financials + + diff --git a/admin/src/store.ts b/admin/src/store.ts index b562f7f9..e8d6da98 100644 --- a/admin/src/store.ts +++ b/admin/src/store.ts @@ -74,6 +74,11 @@ async function fetchStats() { return data; } +async function fetchFinancials() { + const { data } = await api.get('/admin/financials'); + return data; +} + async function fetchUsers(params: Partial) { const { data } = await api.get('/admin/users', { params }); return data; @@ -219,6 +224,31 @@ const app = store({ contributionRefundableCount: 0, }, + financialsFetched: false, + financialsFetching: false, + financials: { + grants: { + total: '0', + matching: '0', + bounty: '0', + }, + contributions: { + total: '0', + gross: '0', + staking: '0', + funding: '0', + funded: '0', + refunding: '0', + refunded: '0', + }, + payouts: { + total: '0', + due: '0', + paid: '0', + future: '0', + }, + }, + users: { page: createDefaultPageData('EMAIL:DESC'), }, @@ -346,6 +376,17 @@ const app = store({ app.statsFetching = false; }, + async fetchFinancials() { + app.financialsFetching = true; + try { + app.financials = await fetchFinancials(); + app.financialsFetched = true; + } catch (e) { + handleApiError(e); + } + app.financialsFetching = false; + }, + // Users async fetchUsers() { diff --git a/admin/webpack.config.js b/admin/webpack.config.js index 27f3d354..4e0cfc30 100644 --- a/admin/webpack.config.js +++ b/admin/webpack.config.js @@ -41,6 +41,16 @@ module.exports = { '@babel/plugin-proposal-object-rest-spread', '@babel/plugin-proposal-class-properties', ['import', { libraryName: 'antd', style: true }], + [ + 'import', + { + libraryName: 'ant-design-pro', + libraryDirectory: 'lib', + style: true, + camel2DashComponentName: false, + }, + 'antdproimport', + ], ], presets: ['@babel/react', ['@babel/env', { useBuiltIns: 'entry' }]], }, diff --git a/backend/grant/admin/views.py b/backend/grant/admin/views.py index 91ae8aa9..7443b1a5 100644 --- a/backend/grant/admin/views.py +++ b/backend/grant/admin/views.py @@ -4,7 +4,7 @@ from functools import reduce from flask import Blueprint, request from marshmallow import fields, validate -from sqlalchemy import func, or_ +from sqlalchemy import func, or_, text import grant.utils.admin as admin import grant.utils.auth as auth @@ -712,3 +712,99 @@ def edit_comment(comment_id, hidden, reported): db.session.commit() return admin_comment_schema.dump(comment) + + +# Financials + +@blueprint.route("/financials", methods=["GET"]) +@admin.admin_auth_required +def financials(): + + nfmt = '999999.99999999' # smallest unit of ZEC + + def sql_pc(where: str): + return f"SELECT SUM(TO_NUMBER(amount, '{nfmt}')) FROM proposal_contribution WHERE {where}" + + def sql_pc_p(where: str): + return f''' + SELECT SUM(TO_NUMBER(amount, '{nfmt}')) + FROM proposal_contribution as pc + INNER JOIN proposal as p ON pc.proposal_id = p.id + WHERE {where} + ''' + + def sql_ms(where: str): + return f''' + SELECT SUM(TO_NUMBER(ms.payout_percent, '999')/100 * TO_NUMBER(p.target, '999999.99999999')) + FROM milestone as ms + INNER JOIN proposal as p ON ms.proposal_id = p.id + WHERE {where} + ''' + + def ex(sql: str): + res = db.engine.execute(text(sql)) + return [row[0] if row[0] else Decimal(0) for row in res][0].normalize() + + contributions = { + 'total': str(ex(sql_pc("status = 'CONFIRMED' AND staking = FALSE"))), + 'staking': str(ex(sql_pc("status = 'CONFIRMED' AND staking = TRUE"))), + 'funding': str(ex(sql_pc_p("pc.status = 'CONFIRMED' AND pc.staking = FALSE AND p.stage = 'FUNDING_REQUIRED'"))), + 'funded': str(ex(sql_pc_p("pc.status = 'CONFIRMED' AND pc.staking = FALSE AND p.stage in ('WIP', 'COMPLETED')"))), + 'refunding': str(ex(sql_pc_p( + "pc.status = 'CONFIRMED' AND pc.staking = FALSE AND pc.refund_tx_id IS NULL AND p.stage IN ('CANCELED', 'FAILED')" + ))), + 'refunded': str(ex(sql_pc_p( + "pc.status = 'CONFIRMED' AND pc.staking = FALSE AND pc.refund_tx_id IS NOT NULL AND p.stage IN ('CANCELED', 'FAILED')" + ))), + 'gross': str(ex(sql_pc_p("pc.status = 'CONFIRMED' AND pc.refund_tx_id IS NULL"))), + } + + po_due = ex(sql_ms("ms.stage = 'ACCEPTED'")) # payments accepted but not yet marked as paid + po_paid = ex(sql_ms("ms.stage = 'PAID'")) # will catch paid ms from all proposals regardless of status/stage + # expected payments + po_future = ex(sql_ms("ms.stage IN ('IDLE', 'REJECTED', 'REQUESTED') AND p.stage IN ('WIP', 'COMPLETED')")) + po_total = po_due + po_paid + po_future + + payouts = { + 'total': str(po_total), + 'due': str(po_due), + 'paid': str(po_paid), + 'future': str(po_future), + } + + grants = { + 'total': '0', + 'matching': '0', + 'bounty': '0', + } + + def add_str_dec(a: str, b: str): + return str(Decimal(a) + Decimal(b)) + + proposals = Proposal.query.all() + + for p in proposals: + # CANCELED proposals excluded, though they could have had milestones paid out with grant funds + if p.stage in [ProposalStage.WIP, ProposalStage.COMPLETED]: + # matching + matching = Decimal(p.contributed) * Decimal(p.contribution_matching) + remaining = Decimal(p.target) - Decimal(p.contributed) + if matching > remaining: + matching = remaining + + # bounty + bounty = Decimal(p.contribution_bounty) + remaining = Decimal(p.target) - (matching + Decimal(p.contributed)) + if bounty > remaining: + bounty = remaining + + grants['matching'] = add_str_dec(grants['matching'], matching) + grants['bounty'] = add_str_dec(grants['bounty'], bounty) + grants['total'] = add_str_dec(grants['total'], matching + bounty) + + return { + 'grants': grants, + 'contributions': contributions, + 'payouts': payouts, + 'net': str(Decimal(contributions['gross']) - Decimal(payouts['paid'])) + } diff --git a/backend/grant/user/views.py b/backend/grant/user/views.py index 4dc0407d..9d510471 100644 --- a/backend/grant/user/views.py +++ b/backend/grant/user/views.py @@ -342,7 +342,7 @@ def get_user_settings(user_id): @auth.requires_same_user_auth # TODO guard all (shape, validity) @body({ - "emailSubscriptions": fields.Dict(required=True), + "emailSubscriptions": fields.Dict(required=False, missing=None), "refundAddress": fields.Str(required=False, missing=None) }) def set_user_settings(user_id, email_subscriptions, refund_address): From c6ad668d712f59a815034ee464e2938030c6fd31 Mon Sep 17 00:00:00 2001 From: William O'Beirne Date: Tue, 12 Mar 2019 13:10:56 -0400 Subject: [PATCH 04/11] Better contribution error displays (#314) * Handle blockchain_get failures better. * tsc --- backend/grant/app.py | 4 +++ backend/grant/proposal/models.py | 5 +++- .../components/ContributionModal/index.tsx | 14 ++++++++-- .../client/components/CreateFlow/Final.tsx | 26 ++++++++++++++++--- .../components/Profile/ProfilePending.tsx | 3 ++- 5 files changed, 45 insertions(+), 7 deletions(-) diff --git a/backend/grant/app.py b/backend/grant/app.py index 6c1953ec..d347aae2 100644 --- a/backend/grant/app.py +++ b/backend/grant/app.py @@ -48,6 +48,10 @@ def create_app(config_objects=["grant.settings"]): return jsonify({"message": error_message}), err.code, headers else: return jsonify({"message": error_message}), err.code + + @app.errorhandler(Exception) + def handle_exception(err): + return jsonify({"message": "Something went wrong"}), 500 for conf in config_objects: app.config.from_object(conf) diff --git a/backend/grant/proposal/models.py b/backend/grant/proposal/models.py index de2d984c..22a44834 100644 --- a/backend/grant/proposal/models.py +++ b/backend/grant/proposal/models.py @@ -286,7 +286,10 @@ class Proposal(db.Model): raise ValidationException("Proposal must have a {}".format(field)) # Check with node that the address is kosher - res = blockchain_get('/validate/address', {'address': self.payout_address}) + try: + res = blockchain_get('/validate/address', {'address': self.payout_address}) + except: + raise ValidationException("Could not validate your payout address due to an internal server error, please try again later") if not res['valid']: raise ValidationException("Payout address is not a valid Zcash address") diff --git a/frontend/client/components/ContributionModal/index.tsx b/frontend/client/components/ContributionModal/index.tsx index 6c769fe0..9a8a903f 100644 --- a/frontend/client/components/ContributionModal/index.tsx +++ b/frontend/client/components/ContributionModal/index.tsx @@ -66,11 +66,12 @@ export default class ContributionModal extends React.Component { if (contribution !== this.props.contribution) { this.setState({ contribution: contribution || null }); } - // When the modal is closed, clear out the contribution and anonymous check + // When the modal is closed, clear out the contribution, error, and anonymous check if (this.props.isVisible && !isVisible) { this.setState({ contribution: null, hasConfirmedAnonymous: false, + error: null, }); } } @@ -133,7 +134,16 @@ export default class ContributionModal extends React.Component { if (error) { okText = 'Done'; onOk = handleClose; - content = error; + content = ( + + ); } else { okText = 'I’ve sent it'; onOk = this.confirmSend; diff --git a/frontend/client/components/CreateFlow/Final.tsx b/frontend/client/components/CreateFlow/Final.tsx index e5adadc4..81d5eaa0 100644 --- a/frontend/client/components/CreateFlow/Final.tsx +++ b/frontend/client/components/CreateFlow/Final.tsx @@ -2,6 +2,7 @@ import React from 'react'; import { connect } from 'react-redux'; import { Icon } from 'antd'; import { Link } from 'react-router-dom'; +import Result from 'ant-design-pro/lib/Result'; import Loader from 'components/Loader'; import { createActions } from 'modules/create'; import { AppState } from 'store/reducers'; @@ -28,6 +29,7 @@ type Props = OwnProps & StateProps & DispatchProps; const STATE = { contribution: null as null | ContributionWithAddresses, + contributionError: null as null | Error, }; type State = typeof STATE; @@ -49,7 +51,7 @@ class CreateFinal extends React.Component { render() { const { submittedProposal, submitError, goBack } = this.props; - const { contribution } = this.state; + const { contribution, contributionError } = this.state; const ready = submittedProposal && (submittedProposal.isStaked || contribution); const staked = submittedProposal && submittedProposal.isStaked; @@ -120,6 +122,20 @@ class CreateFinal extends React.Component { )} ); + } else if (contributionError) { + content = ( + + We were unable to get your staking contribution started. You can finish + staking from your profile, please try + again from there soon. + + } + /> + ); } else { content = ; } @@ -136,8 +152,12 @@ class CreateFinal extends React.Component { private getStakingContribution = async () => { const { submittedProposal } = this.props; if (submittedProposal) { - const res = await getProposalStakingContribution(submittedProposal.proposalId); - this.setState({ contribution: res.data }); + try { + const res = await getProposalStakingContribution(submittedProposal.proposalId); + this.setState({ contribution: res.data }); + } catch (err) { + this.setState({ contributionError: err }); + } } }; } diff --git a/frontend/client/components/Profile/ProfilePending.tsx b/frontend/client/components/Profile/ProfilePending.tsx index ba0c120f..4332ebfa 100644 --- a/frontend/client/components/Profile/ProfilePending.tsx +++ b/frontend/client/components/Profile/ProfilePending.tsx @@ -194,7 +194,8 @@ class ProfilePending extends React.Component { this.setState({ isLoadingStake: false }); }); } catch (err) { - message.error(err.message, 3); + console.error(err); + message.error('Failed to get staking contribution, try again later', 3); this.setState({ isLoadingStake: false }); } }; From 671e65e145e6ff42ac58fbd2b063632c52692d72 Mon Sep 17 00:00:00 2001 From: William O'Beirne Date: Tue, 12 Mar 2019 15:14:30 -0400 Subject: [PATCH 05/11] Upgrade react-mde to 7.0.4 (#331) --- frontend/package.json | 2 +- frontend/yarn.lock | 1108 ++--------------------------------------- 2 files changed, 40 insertions(+), 1070 deletions(-) diff --git a/frontend/package.json b/frontend/package.json index 512f49f1..90231faf 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -129,7 +129,7 @@ "react-helmet": "^5.2.0", "react-hot-loader": "^4.3.8", "react-i18next": "^8.3.5", - "react-mde": "7.0.3", + "react-mde": "7.0.4", "react-redux": "^5.0.7", "react-router": "4.4.0-beta.6", "react-router-dom": "4.4.0-beta.6", diff --git a/frontend/yarn.lock b/frontend/yarn.lock index 1aef15a7..5c2f5ad3 100644 --- a/frontend/yarn.lock +++ b/frontend/yarn.lock @@ -2178,18 +2178,11 @@ version "4.2.1" resolved "https://registry.yarnpkg.com/@xtuc/long/-/long-4.2.1.tgz#5c85d662f76fa1d34575766c5dcd6615abcd30d8" -JSONStream@^1.3.3: - version "1.3.4" - resolved "https://registry.yarnpkg.com/JSONStream/-/JSONStream-1.3.4.tgz#615bb2adb0cd34c8f4c447b5f6512fa1d8f16a2e" - dependencies: - jsonparse "^1.2.0" - through ">=2.2.7 <3" - abab@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.0.tgz#aba0ab4c5eee2d4c79d3487d85450fb2376ebb0f" -abbrev@1, abbrev@~1.1.1: +abbrev@1: version "1.1.1" resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" @@ -2250,24 +2243,6 @@ address@1.0.3, address@^1.0.1: version "1.0.3" resolved "https://registry.yarnpkg.com/address/-/address-1.0.3.tgz#b5f50631f8d6cec8bd20c963963afb55e06cbce9" -agent-base@4, agent-base@~4.2.0: - version "4.2.1" - resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-4.2.1.tgz#d89e5999f797875674c07d87f260fc41e83e8ca9" - dependencies: - es6-promisify "^5.0.0" - -agent-base@^4.1.0: - version "4.1.2" - resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-4.1.2.tgz#80fa6cde440f4dcf9af2617cf246099b5d99f0c8" - dependencies: - es6-promisify "^5.0.0" - -agentkeepalive@^3.4.1: - version "3.5.1" - resolved "https://registry.yarnpkg.com/agentkeepalive/-/agentkeepalive-3.5.1.tgz#4eba75cf2ad258fc09efd506cdb8d8c2971d35a4" - dependencies: - humanize-ms "^1.2.1" - "airbnb-js-shims@^1 || ^2": version "2.1.1" resolved "https://registry.yarnpkg.com/airbnb-js-shims/-/airbnb-js-shims-2.1.1.tgz#a509611480db7e6d9db62fe2acfaeb473b6842ac" @@ -2375,14 +2350,6 @@ ansi-styles@^3.2.0, ansi-styles@^3.2.1: dependencies: color-convert "^1.9.0" -ansicolors@~0.3.2: - version "0.3.2" - resolved "https://registry.yarnpkg.com/ansicolors/-/ansicolors-0.3.2.tgz#665597de86a9ffe3aa9bfbe6cae5c6ea426b4979" - -ansistyles@~0.1.3: - version "0.1.3" - resolved "https://registry.yarnpkg.com/ansistyles/-/ansistyles-0.1.3.tgz#5de60415bda071bb37127854c864f41b23254539" - ant-design-palettes@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/ant-design-palettes/-/ant-design-palettes-1.1.3.tgz#84119b1a4d86363adc52a38d587e65336a0a27dd" @@ -2494,18 +2461,10 @@ app-root-dir@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/app-root-dir/-/app-root-dir-1.0.2.tgz#38187ec2dea7577fff033ffcb12172692ff6e118" -aproba@^1.0.3, aproba@^1.1.1, aproba@^1.1.2, aproba@~1.2.0: +aproba@^1.0.3, aproba@^1.1.1: version "1.2.0" resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" -"aproba@^1.1.2 || 2": - version "2.0.0" - resolved "https://registry.yarnpkg.com/aproba/-/aproba-2.0.0.tgz#52520b8ae5b569215b354efc0caa3fe1e45a8adc" - -archy@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/archy/-/archy-1.0.0.tgz#f9c8c13757cc1dd7bc379ac77b2c62a5c2868c40" - are-we-there-yet@~1.1.2: version "1.1.5" resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz#4b35c2944f062a8bfcda66410760350fe9ddfc21" @@ -2614,7 +2573,7 @@ arrify@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" -asap@^2.0.0, asap@~2.0.3: +asap@~2.0.3: version "2.0.6" resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" @@ -3068,16 +3027,6 @@ bignumber.js@^2.1.0: version "2.4.0" resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-2.4.0.tgz#838a992da9f9d737e0f4b2db0be62bb09dd0c5e8" -bin-links@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/bin-links/-/bin-links-1.1.2.tgz#fb74bd54bae6b7befc6c6221f25322ac830d9757" - dependencies: - bluebird "^3.5.0" - cmd-shim "^2.0.2" - gentle-fs "^2.0.0" - graceful-fs "^4.1.11" - write-file-atomic "^2.3.0" - binary-extensions@^1.0.0: version "1.12.0" resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.12.0.tgz#c2d780f53d45bba8317a8902d4ceeaf3a6385b14" @@ -3106,7 +3055,7 @@ block-stream@*: dependencies: inherits "~2.0.0" -bluebird@^3.5.0, bluebird@^3.5.1, bluebird@~3.5.1: +bluebird@^3.5.1: version "3.5.1" resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.1.tgz#d9551f9de98f1fcda1e683d17ee91a0602ee2eb9" @@ -3171,18 +3120,6 @@ boolbase@^1.0.0, boolbase@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" -boom@4.x.x: - version "4.3.1" - resolved "https://registry.yarnpkg.com/boom/-/boom-4.3.1.tgz#4f8a3005cb4a7e3889f749030fd25b96e01d2e31" - dependencies: - hoek "4.x.x" - -boom@5.x.x: - version "5.2.0" - resolved "https://registry.yarnpkg.com/boom/-/boom-5.2.0.tgz#5dd9da6ee3a5f302077436290cb717d3f4a54e02" - dependencies: - hoek "4.x.x" - bowser@^1.7.3: version "1.9.4" resolved "https://registry.yarnpkg.com/bowser/-/bowser-1.9.4.tgz#890c58a2813a9d3243704334fa81b96a5c150c9a" @@ -3358,18 +3295,6 @@ builtin-status-codes@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8" -builtins@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/builtins/-/builtins-1.0.3.tgz#cb94faeb61c8696451db36534e1422f94f0aee88" - -byline@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/byline/-/byline-5.0.0.tgz#741c5216468eadc457b03410118ad77de8c1ddb1" - -byte-size@^4.0.3: - version "4.0.3" - resolved "https://registry.yarnpkg.com/byte-size/-/byte-size-4.0.3.tgz#b7c095efc68eadf82985fccd9a2df43a74fa2ccd" - bytes@3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" @@ -3392,25 +3317,6 @@ cacache@^10.0.4: unique-filename "^1.1.0" y18n "^4.0.0" -cacache@^11.0.1, cacache@^11.0.2, cacache@^11.1.0: - version "11.2.0" - resolved "https://registry.yarnpkg.com/cacache/-/cacache-11.2.0.tgz#617bdc0b02844af56310e411c0878941d5739965" - dependencies: - bluebird "^3.5.1" - chownr "^1.0.1" - figgy-pudding "^3.1.0" - glob "^7.1.2" - graceful-fs "^4.1.11" - lru-cache "^4.1.3" - mississippi "^3.0.0" - mkdirp "^0.5.1" - move-concurrently "^1.0.1" - promise-inflight "^1.0.1" - rimraf "^2.6.2" - ssri "^6.0.0" - unique-filename "^1.1.0" - y18n "^4.0.0" - cache-base@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" @@ -3434,10 +3340,6 @@ cache-loader@^1.2.2: neo-async "^2.5.0" schema-utils "^0.4.2" -call-limit@~1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/call-limit/-/call-limit-1.1.0.tgz#6fd61b03f3da42a2cd0ec2b60f02bd0e71991fea" - call-me-maybe@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/call-me-maybe/-/call-me-maybe-1.0.1.tgz#26d208ea89e37b5cbde60250a15f031c16a4d66b" @@ -3584,10 +3486,6 @@ chownr@^1.0.1, chownr@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.1.tgz#54726b8b8fff4df053c42187e801fb4412df1494" -chownr@~1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.0.1.tgz#e2a75042a9551908bebd25b8523d5f9769d79181" - chrome-trace-event@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.0.tgz#45a91bd2c20c9411f0963b5aaeb9a1b95e09cc48" @@ -3598,12 +3496,6 @@ ci-info@^1.3.0, ci-info@^1.5.0: version "1.6.0" resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-1.6.0.tgz#2ca20dbb9ceb32d4524a683303313f0304b1e497" -cidr-regex@^2.0.8: - version "2.0.9" - resolved "https://registry.yarnpkg.com/cidr-regex/-/cidr-regex-2.0.9.tgz#9c17bb2b18e15af07f7d0c3b994b961d687ed1c9" - dependencies: - ip-regex "^2.1.0" - cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: version "1.0.4" resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de" @@ -3634,13 +3526,6 @@ cli-boxes@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-1.0.0.tgz#4fa917c3e59c94a004cd61f8ee509da651687143" -cli-columns@^3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/cli-columns/-/cli-columns-3.1.2.tgz#6732d972979efc2ae444a1f08e08fa139c96a18e" - dependencies: - string-width "^2.0.0" - strip-ansi "^3.0.1" - cli-cursor@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-1.0.2.tgz#64da3f7d56a54412e59794bd62dc35295e8f2987" @@ -3657,15 +3542,6 @@ cli-spinners@^0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-0.1.2.tgz#bb764d88e185fb9e1e6a2a1f19772318f605e31c" -cli-table3@^0.5.0: - version "0.5.1" - resolved "https://registry.yarnpkg.com/cli-table3/-/cli-table3-0.5.1.tgz#0252372d94dfc40dbd8df06005f48f31f656f202" - dependencies: - object-assign "^4.1.0" - string-width "^2.1.1" - optionalDependencies: - colors "^1.1.2" - cli-truncate@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-0.2.1.tgz#9f15cfbb0705005369216c626ac7d05ab90dd574" @@ -3719,10 +3595,6 @@ clone-stats@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/clone-stats/-/clone-stats-1.0.0.tgz#b3782dff8bb5474e18b9b6bf0fdfe782f8777680" -clone@^1.0.2: - version "1.0.4" - resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" - clone@^2.1.1, clone@^2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/clone/-/clone-2.1.2.tgz#1b7f4b9f591f1e8f83670401600345a02887435f" @@ -3735,13 +3607,6 @@ cloneable-readable@^1.0.0: process-nextick-args "^2.0.0" readable-stream "^2.3.5" -cmd-shim@^2.0.2, cmd-shim@~2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/cmd-shim/-/cmd-shim-2.0.2.tgz#6fcbda99483a8fd15d7d30a196ca69d688a2efdb" - dependencies: - graceful-fs "^4.1.2" - mkdirp "~0.5.0" - co@^4.6.0: version "4.6.0" resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" @@ -3791,10 +3656,6 @@ colornames@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/colornames/-/colornames-1.1.1.tgz#f8889030685c7c4ff9e2a559f5077eb76a816f96" -colors@^1.1.2: - version "1.3.1" - resolved "https://registry.yarnpkg.com/colors/-/colors-1.3.1.tgz#4accdb89cf2cabc7f982771925e9468784f32f3d" - colors@^1.2.1, colors@^1.3.2: version "1.3.2" resolved "https://registry.yarnpkg.com/colors/-/colors-1.3.2.tgz#2df8ff573dfbf255af562f8ce7181d6b971a359b" @@ -3810,13 +3671,6 @@ colorspace@1.1.x: color "3.0.x" text-hex "1.0.x" -columnify@~1.5.4: - version "1.5.4" - resolved "https://registry.yarnpkg.com/columnify/-/columnify-1.5.4.tgz#4737ddf1c7b69a8a7c340570782e947eec8e78bb" - dependencies: - strip-ansi "^3.0.0" - wcwidth "^1.0.0" - combined-stream@1.0.6, combined-stream@~1.0.6: version "1.0.6" resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.6.tgz#723e7df6e801ac5613113a7e445a9b69cb632818" @@ -3898,21 +3752,6 @@ concat-stream@1.6.2, concat-stream@^1.5.0: readable-stream "^2.2.2" typedarray "^0.0.6" -concat-stream@^1.5.2: - version "1.6.0" - resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.0.tgz#0aac662fd52be78964d5532f694784e70110acf7" - dependencies: - inherits "^2.0.3" - readable-stream "^2.2.2" - typedarray "^0.0.6" - -config-chain@~1.1.11: - version "1.1.11" - resolved "https://registry.yarnpkg.com/config-chain/-/config-chain-1.1.11.tgz#aba09747dfbe4c3e70e766a6e41586e1859fc6f2" - dependencies: - ini "^1.3.4" - proto-list "~1.2.1" - configstore@^3.0.0: version "3.1.2" resolved "https://registry.yarnpkg.com/configstore/-/configstore-3.1.2.tgz#c6f25defaeef26df12dd33414b001fe81a543f8f" @@ -3941,7 +3780,7 @@ console-browserify@^1.1.0: dependencies: date-now "^0.1.4" -console-control-strings@^1.0.0, console-control-strings@^1.1.0, console-control-strings@~1.1.0: +console-control-strings@^1.0.0, console-control-strings@~1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" @@ -4153,12 +3992,6 @@ crypt@~0.0.1: version "0.0.2" resolved "https://registry.yarnpkg.com/crypt/-/crypt-0.0.2.tgz#88d7ff7ec0dfb86f713dc87bbb42d044d3e6c41b" -cryptiles@3.x.x: - version "3.1.2" - resolved "https://registry.yarnpkg.com/cryptiles/-/cryptiles-3.1.2.tgz#a89fbb220f5ce25ec56e8c4aa8a4fd7b5b0d29fe" - dependencies: - boom "5.x.x" - crypto-browserify@^3.11.0: version "3.12.0" resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.12.0.tgz#396cf9f3137f03e4b8e532c58f698254e00f80ec" @@ -4466,12 +4299,6 @@ debug@2.6.9, debug@^2.1.2, debug@^2.2.0, debug@^2.3.3, debug@^2.6.0, debug@^2.6. dependencies: ms "2.0.0" -debug@3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" - dependencies: - ms "2.0.0" - debug@^3.1.0, debug@^3.2.5: version "3.2.6" resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b" @@ -4485,10 +4312,6 @@ debug@^4.1.0, debug@^4.1.1: dependencies: ms "^2.1.1" -debuglog@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/debuglog/-/debuglog-1.0.1.tgz#aa24ffb9ac3df9a2351837cfb2d279360cd78492" - decamelize@^1.0.0, decamelize@^1.1.1, decamelize@^1.1.2: version "1.2.0" resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" @@ -4531,12 +4354,6 @@ default-gateway@^4.0.1: execa "^1.0.0" ip-regex "^2.1.0" -defaults@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/defaults/-/defaults-1.0.3.tgz#c656051e9817d9ff08ed881477f3fe4019f3ef7d" - dependencies: - clone "^1.0.2" - define-properties@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.2.tgz#83a73f2fea569898fb737193c8f873caf6d45c94" @@ -4611,18 +4428,10 @@ detect-indent@^4.0.0: dependencies: repeating "^2.0.0" -detect-indent@~5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-5.0.0.tgz#3871cc0a6a002e8c3e5b3cf7f336264675f06b9d" - detect-libc@^1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" -detect-newline@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-2.1.0.tgz#f41f1c10be4b00e87b5f13da680759f2c5bfd3e2" - detect-node@^2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/detect-node/-/detect-node-2.0.4.tgz#014ee8f8f669c5c58023da64b8179c083a28c46c" @@ -4642,13 +4451,6 @@ detect-port@^1.2.3: address "^1.0.1" debug "^2.6.0" -dezalgo@^1.0.0, dezalgo@~1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/dezalgo/-/dezalgo-1.0.3.tgz#7f742de066fc748bc8db820569dddce49bf0d456" - dependencies: - asap "^2.0.0" - wrappy "1" - diagnostics@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/diagnostics/-/diagnostics-1.1.1.tgz#cab6ac33df70c9d9a727490ae43ac995a769b22a" @@ -4832,10 +4634,6 @@ ecc-jsbn@~0.1.1: dependencies: jsbn "~0.1.0" -editor@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/editor/-/editor-1.0.0.tgz#60c7f87bd62bcc6a894fa8ccd6afb7823a24f742" - ee-first@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" @@ -4932,10 +4730,6 @@ env-variable@0.0.x: version "0.0.4" resolved "https://registry.yarnpkg.com/env-variable/-/env-variable-0.0.4.tgz#0d6280cf507d84242befe35a512b5ae4be77c54e" -err-code@^1.0.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/err-code/-/err-code-1.1.2.tgz#06e0116d3028f6aef4806849eb0ea6a748ae6960" - errno@^0.1.1, errno@~0.1.7: version "0.1.7" resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.7.tgz#4684d71779ad39af177e3f007996f7c67c852618" @@ -4990,12 +4784,6 @@ es6-promise@^4.0.3: version "4.1.1" resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.1.1.tgz#8811e90915d9a0dba36274f0b242dbda78f9c92a" -es6-promisify@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/es6-promisify/-/es6-promisify-5.0.0.tgz#5109d62f3e56ea967c4b63505aef08291c8a5203" - dependencies: - es6-promise "^4.0.3" - es6-shim@^0.35.3: version "0.35.3" resolved "https://registry.yarnpkg.com/es6-shim/-/es6-shim-0.35.3.tgz#9bfb7363feffff87a6cdb6cd93e405ec3c4b6f26" @@ -5418,10 +5206,6 @@ fecha@^2.3.3, fecha@~2.3.3: version "2.3.3" resolved "https://registry.yarnpkg.com/fecha/-/fecha-2.3.3.tgz#948e74157df1a32fd1b12c3a3c3cdcb6ec9d96cd" -figgy-pudding@^3.0.0, figgy-pudding@^3.1.0, figgy-pudding@^3.2.0: - version "3.4.1" - resolved "https://registry.yarnpkg.com/figgy-pudding/-/figgy-pudding-3.4.1.tgz#af66da1991fa2f94ff7f33b545a38ea4b3869696" - figures@^1.7.0: version "1.7.0" resolved "https://registry.yarnpkg.com/figures/-/figures-1.7.0.tgz#cbe1e3affcf1cd44b80cadfed28dc793a9701d2e" @@ -5533,10 +5317,6 @@ find-file-up@^1.0.2: dependencies: resolve-dir "^1.0.0" -find-npm-prefix@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/find-npm-prefix/-/find-npm-prefix-1.0.2.tgz#8d8ce2c78b3b4b9e66c8acc6a37c231eb841cfdf" - find-parent-dir@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/find-parent-dir/-/find-parent-dir-0.3.0.tgz#33c44b429ab2b2f0646299c5f9f718f376ff8d54" @@ -5676,13 +5456,6 @@ fresh@0.5.2: version "0.5.2" resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" -from2@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/from2/-/from2-1.3.0.tgz#88413baaa5f9a597cfde9221d86986cd3c061dfd" - dependencies: - inherits "~2.0.1" - readable-stream "~1.1.10" - from2@^2.1.0: version "2.3.0" resolved "https://registry.yarnpkg.com/from2/-/from2-2.3.0.tgz#8bfb5502bde4a4d36cfdeea007fcca21d7e382af" @@ -5720,15 +5493,7 @@ fs-minipass@^1.2.5: dependencies: minipass "^2.2.1" -fs-vacuum@^1.2.10, fs-vacuum@~1.2.10: - version "1.2.10" - resolved "https://registry.yarnpkg.com/fs-vacuum/-/fs-vacuum-1.2.10.tgz#b7629bec07a4031a2548fdf99f5ecf1cc8b31e36" - dependencies: - graceful-fs "^4.1.2" - path-is-inside "^1.0.1" - rimraf "^2.5.2" - -fs-write-stream-atomic@^1.0.8, fs-write-stream-atomic@~1.0.10: +fs-write-stream-atomic@^1.0.8: version "1.0.10" resolved "https://registry.yarnpkg.com/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz#b47df53493ef911df75731e70a9ded0189db40c9" dependencies: @@ -5796,23 +5561,6 @@ generate-page-webpack-plugin@^1.1.0: version "1.1.1" resolved "https://registry.yarnpkg.com/generate-page-webpack-plugin/-/generate-page-webpack-plugin-1.1.1.tgz#82208fb599f45d70940cbd6327a7a46e77c5ee2c" -genfun@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/genfun/-/genfun-4.0.1.tgz#ed10041f2e4a7f1b0a38466d17a5c3e27df1dfc1" - -gentle-fs@^2.0.0, gentle-fs@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/gentle-fs/-/gentle-fs-2.0.1.tgz#585cfd612bfc5cd52471fdb42537f016a5ce3687" - dependencies: - aproba "^1.1.2" - fs-vacuum "^1.2.10" - graceful-fs "^4.1.11" - iferr "^0.1.5" - mkdirp "^0.5.1" - path-is-inside "^1.0.2" - read-cmd-shim "^1.0.1" - slide "^1.1.6" - get-caller-file@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.2.tgz#f702e63127e7e231c160a80c1554acb70d5047e5" @@ -6021,7 +5769,7 @@ graceful-fs@^4.1.11, graceful-fs@^4.1.2: version "4.1.15" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.15.tgz#ffb703e1066e8a0eeaa4c8b80ba9253eeefbfb00" -graceful-fs@^4.1.6, graceful-fs@^4.1.9, graceful-fs@~4.1.11: +graceful-fs@^4.1.6, graceful-fs@^4.1.9: version "4.1.11" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658" @@ -6133,7 +5881,7 @@ has-symbols@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.0.tgz#ba1a8f1af2a0fc39650f5c850367704122063b44" -has-unicode@^2.0.0, has-unicode@~2.0.1: +has-unicode@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" @@ -6210,15 +5958,6 @@ hasha@^2.2.0: is-stream "^1.0.1" pinkie-promise "^2.0.0" -hawk@~6.0.2: - version "6.0.2" - resolved "https://registry.yarnpkg.com/hawk/-/hawk-6.0.2.tgz#af4d914eb065f9b5ce4d9d11c1cb2126eecc3038" - dependencies: - boom "4.x.x" - cryptiles "3.x.x" - hoek "4.x.x" - sntp "2.x.x" - he@1.2.x: version "1.2.0" resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" @@ -6252,10 +5991,6 @@ hmac-drbg@^1.0.0: minimalistic-assert "^1.0.0" minimalistic-crypto-utils "^1.0.1" -hoek@4.x.x: - version "4.2.0" - resolved "https://registry.yarnpkg.com/hoek/-/hoek-4.2.0.tgz#72d9d0754f7fe25ca2d01ad8f8f9a9449a89526d" - hoist-non-react-statics@1.x.x, hoist-non-react-statics@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-1.2.0.tgz#aa448cf0986d55cc40773b17174b7dd066cb7cfb" @@ -6294,10 +6029,6 @@ hosted-git-info@^2.1.4: version "2.5.0" resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.5.0.tgz#6d60e34b3abbc8313062c3b798ef8d901a07af3c" -hosted-git-info@^2.6.0, hosted-git-info@^2.7.1: - version "2.7.1" - resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.7.1.tgz#97f236977bd6e125408930ff6de3eec6281ec047" - hpack.js@^2.1.6: version "2.1.6" resolved "https://registry.yarnpkg.com/hpack.js/-/hpack.js-2.1.6.tgz#87774c0949e513f42e84575b3c45681fade2a0b2" @@ -6356,10 +6087,6 @@ htmlparser2@^3.9.1: inherits "^2.0.1" readable-stream "^2.0.2" -http-cache-semantics@^3.8.1: - version "3.8.1" - resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-3.8.1.tgz#39b0e16add9b605bf0a9ef3d9daaf4843b4cacd2" - http-deceiver@^1.2.7: version "1.2.7" resolved "https://registry.yarnpkg.com/http-deceiver/-/http-deceiver-1.2.7.tgz#fa7168944ab9a519d337cb0bec7284dc3e723d87" @@ -6386,13 +6113,6 @@ http-parser-js@>=0.4.0: version "0.4.13" resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.4.13.tgz#3bd6d6fde6e3172c9334c3b33b6c193d80fe1137" -http-proxy-agent@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-2.1.0.tgz#e4821beef5b2142a2026bd73926fe537631c5405" - dependencies: - agent-base "4" - debug "3.1.0" - http-proxy-middleware@^0.18.0: version "0.18.0" resolved "https://registry.yarnpkg.com/http-proxy-middleware/-/http-proxy-middleware-0.18.0.tgz#0987e6bb5a5606e5a69168d8f967a87f15dd8aab" @@ -6432,13 +6152,6 @@ https-browserify@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73" -https-proxy-agent@^2.2.0, https-proxy-agent@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-2.2.1.tgz#51552970fa04d723e04c56d04178c3f92592bbc0" - dependencies: - agent-base "^4.1.0" - debug "^3.1.0" - https-proxy@0.0.2: version "0.0.2" resolved "https://registry.yarnpkg.com/https-proxy/-/https-proxy-0.0.2.tgz#9e7d542f1ce8d37c06e1f940a8a9a227bb48ddf0" @@ -6446,12 +6159,6 @@ https-proxy@0.0.2: http-proxy "^1.8.1" optimist "^0.6.1" -humanize-ms@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/humanize-ms/-/humanize-ms-1.2.1.tgz#c46e3159a293f6b896da29316d8b6fe8bb79bbed" - dependencies: - ms "^2.0.0" - husky@^1.0.0-rc.8: version "1.0.0-rc.13" resolved "https://registry.yarnpkg.com/husky/-/husky-1.0.0-rc.13.tgz#49c3cc210bfeac24d4ad272f770b7505c9091828" @@ -6526,10 +6233,6 @@ iferr@^0.1.5: version "0.1.5" resolved "https://registry.yarnpkg.com/iferr/-/iferr-0.1.5.tgz#c60eed69e6d8fdb6b3104a1fcbca1c192dc5b501" -iferr@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/iferr/-/iferr-1.0.2.tgz#e9fde49a9da06dc4a4194c6c9ed6d08305037a6d" - ignore-by-default@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/ignore-by-default/-/ignore-by-default-1.0.1.tgz#48ca6d72f6c6a3af00a9ad4ae6876be3889e2b09" @@ -6612,7 +6315,7 @@ indexof@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/indexof/-/indexof-0.0.1.tgz#82dc336d232b9062179d05ab3293a66059fd435d" -inflight@^1.0.4, inflight@~1.0.6: +inflight@^1.0.4: version "1.0.6" resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" dependencies: @@ -6627,23 +6330,10 @@ inherits@2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.1.tgz#b17d08d326b4423e568eff719f91b0b1cbdf69f1" -ini@^1.3.4, ini@^1.3.5, ini@~1.3.0: +ini@^1.3.4, ini@~1.3.0: version "1.3.5" resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" -init-package-json@^1.10.3: - version "1.10.3" - resolved "https://registry.yarnpkg.com/init-package-json/-/init-package-json-1.10.3.tgz#45ffe2f610a8ca134f2bd1db5637b235070f6cbe" - dependencies: - glob "^7.1.1" - npm-package-arg "^4.0.0 || ^5.0.0 || ^6.0.0" - promzard "^0.3.0" - read "~1.0.1" - read-package-json "1 || 2" - semver "2.x || 3.x || 4 || 5" - validate-npm-package-license "^3.0.1" - validate-npm-package-name "^3.0.0" - inline-style-prefixer@^3.0.6: version "3.0.8" resolved "https://registry.yarnpkg.com/inline-style-prefixer/-/inline-style-prefixer-3.0.8.tgz#8551b8e5b4d573244e66a34b04f7d32076a2b534" @@ -6759,7 +6449,7 @@ ip-regex@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-2.1.0.tgz#fa78bf5d2e6913c911ce9f819ee5146bb6d844e9" -ip@^1.1.0, ip@^1.1.4, ip@^1.1.5: +ip@^1.1.0, ip@^1.1.5: version "1.1.5" resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.5.tgz#bdded70114290828c0a039e72ef25f5aaec4354a" @@ -6824,12 +6514,6 @@ is-ci@^1.1.0: dependencies: ci-info "^1.3.0" -is-cidr@^2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/is-cidr/-/is-cidr-2.0.6.tgz#4b01c9693d8e18399dacd18a4f3d60ea5871ac60" - dependencies: - cidr-regex "^2.0.8" - is-data-descriptor@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" @@ -7240,7 +6924,7 @@ jsesc@~0.5.0: version "0.5.0" resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" -json-parse-better-errors@^1.0.0, json-parse-better-errors@^1.0.1, json-parse-better-errors@^1.0.2: +json-parse-better-errors@^1.0.1, json-parse-better-errors@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" @@ -7314,10 +6998,6 @@ jsonify@~0.0.0: version "0.0.0" resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73" -jsonparse@^1.2.0: - version "1.3.1" - resolved "https://registry.yarnpkg.com/jsonparse/-/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280" - jsontoxml@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/jsontoxml/-/jsontoxml-1.0.1.tgz#07fff7f6bfbfa1097d779aec7f041b5046075e70" @@ -7399,10 +7079,6 @@ lazy-cache@^1.0.3: version "1.0.4" resolved "https://registry.yarnpkg.com/lazy-cache/-/lazy-cache-1.0.4.tgz#a1d78fc3a50474cb80845d3b3b6e1da49a446e8e" -lazy-property@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/lazy-property/-/lazy-property-1.0.0.tgz#84ddc4b370679ba8bd4cdcfa4c06b43d57111147" - lcid@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/lcid/-/lcid-1.0.0.tgz#308accafa0bc483a3867b4b6f2b9506251d1b835" @@ -7450,45 +7126,6 @@ levn@~0.3.0: prelude-ls "~1.1.2" type-check "~0.3.2" -libcipm@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/libcipm/-/libcipm-2.0.2.tgz#4f38c2b37acf2ec156936cef1cbf74636568fc7b" - dependencies: - bin-links "^1.1.2" - bluebird "^3.5.1" - find-npm-prefix "^1.0.2" - graceful-fs "^4.1.11" - lock-verify "^2.0.2" - mkdirp "^0.5.1" - npm-lifecycle "^2.0.3" - npm-logical-tree "^1.2.1" - npm-package-arg "^6.1.0" - pacote "^8.1.6" - protoduck "^5.0.0" - read-package-json "^2.0.13" - rimraf "^2.6.2" - worker-farm "^1.6.0" - -libnpmhook@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/libnpmhook/-/libnpmhook-4.0.1.tgz#63641654de772cbeb96a88527a7fd5456ec3c2d7" - dependencies: - figgy-pudding "^3.1.0" - npm-registry-fetch "^3.0.0" - -libnpx@^10.2.0: - version "10.2.0" - resolved "https://registry.yarnpkg.com/libnpx/-/libnpx-10.2.0.tgz#1bf4a1c9f36081f64935eb014041da10855e3102" - dependencies: - dotenv "^5.0.1" - npm-package-arg "^6.0.0" - rimraf "^2.6.2" - safe-buffer "^5.1.0" - update-notifier "^2.3.0" - which "^1.3.0" - y18n "^4.0.0" - yargs "^11.0.0" - lint-staged@^7.2.2: version "7.2.2" resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-7.2.2.tgz#0983d55d497f19f36d11ff2c8242b2f56cc2dd05" @@ -7612,19 +7249,6 @@ locate-path@^3.0.0: p-locate "^3.0.0" path-exists "^3.0.0" -lock-verify@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/lock-verify/-/lock-verify-2.0.2.tgz#148e4f85974915c9e3c34d694b7de9ecb18ee7a8" - dependencies: - npm-package-arg "^5.1.2 || 6" - semver "^5.4.1" - -lockfile@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/lockfile/-/lockfile-1.0.4.tgz#07f819d25ae48f87e538e6578b6964a4981a5609" - dependencies: - signal-exit "^3.0.2" - lodash-decorators@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/lodash-decorators/-/lodash-decorators-6.0.0.tgz#4e0639ba639d738e5f4993acf54bf292cc95d851" @@ -7635,25 +7259,10 @@ lodash-es@^4.17.5, lodash-es@^4.2.1: version "4.17.10" resolved "https://registry.yarnpkg.com/lodash-es/-/lodash-es-4.17.10.tgz#62cd7104cdf5dd87f235a837f0ede0e8e5117e05" -lodash._baseuniq@~4.6.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/lodash._baseuniq/-/lodash._baseuniq-4.6.0.tgz#0ebb44e456814af7905c6212fa2c9b2d51b841e8" - dependencies: - lodash._createset "~4.0.0" - lodash._root "~3.0.0" - -lodash._createset@~4.0.0: - version "4.0.3" - resolved "https://registry.yarnpkg.com/lodash._createset/-/lodash._createset-4.0.3.tgz#0f4659fbb09d75194fa9e2b88a6644d363c9fe26" - lodash._getnative@^3.0.0: version "3.9.1" resolved "https://registry.yarnpkg.com/lodash._getnative/-/lodash._getnative-3.9.1.tgz#570bc7dede46d61cdcde687d65d3eecbaa3aaff5" -lodash._root@~3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/lodash._root/-/lodash._root-3.0.1.tgz#fba1c4524c19ee9a5f8136b4609f017cf4ded692" - lodash.assign@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/lodash.assign/-/lodash.assign-4.2.0.tgz#0d99f3ccd7a6d261d19bdaeb9245005d285808e7" @@ -7662,7 +7271,7 @@ lodash.camelcase@^4.3.0: version "4.3.0" resolved "https://registry.yarnpkg.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6" -lodash.clonedeep@^4.3.2, lodash.clonedeep@~4.5.0: +lodash.clonedeep@^4.3.2: version "4.5.0" resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef" @@ -7734,18 +7343,6 @@ lodash.throttle@^4.0.0, lodash.throttle@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/lodash.throttle/-/lodash.throttle-4.1.1.tgz#c23e91b710242ac70c37f1e1cda9274cc39bf2f4" -lodash.union@~4.6.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/lodash.union/-/lodash.union-4.6.0.tgz#48bb5088409f16f1821666641c44dd1aaae3cd88" - -lodash.uniq@~4.5.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" - -lodash.without@~4.4.0: - version "4.4.0" - resolved "https://registry.yarnpkg.com/lodash.without/-/lodash.without-4.4.0.tgz#3cd4574a00b67bae373a94b748772640507b7aac" - lodash@4.17.11, "lodash@>=3.5 <5", lodash@^4.13.1, lodash@^4.15.0, lodash@^4.17.11, lodash@^4.3.0: version "4.17.11" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.11.tgz#b39ea6229ef607ecd89e2c8df12536891cac9b8d" @@ -7833,7 +7430,7 @@ lru-cache@^4.0.1: pseudomap "^1.0.2" yallist "^2.1.2" -lru-cache@^4.1.1, lru-cache@^4.1.2, lru-cache@^4.1.3: +lru-cache@^4.1.1: version "4.1.3" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.3.tgz#a1175cf3496dfc8436c156c334b4955992bce69c" dependencies: @@ -7850,38 +7447,6 @@ make-dir@^1.0.0: dependencies: pify "^3.0.0" -"make-fetch-happen@^2.5.0 || 3 || 4", make-fetch-happen@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-4.0.1.tgz#141497cb878f243ba93136c83d8aba12c216c083" - dependencies: - agentkeepalive "^3.4.1" - cacache "^11.0.1" - http-cache-semantics "^3.8.1" - http-proxy-agent "^2.1.0" - https-proxy-agent "^2.2.1" - lru-cache "^4.1.2" - mississippi "^3.0.0" - node-fetch-npm "^2.0.2" - promise-retry "^1.1.1" - socks-proxy-agent "^4.0.0" - ssri "^6.0.0" - -make-fetch-happen@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-3.0.0.tgz#7b661d2372fc4710ab5cc8e1fa3c290eea69a961" - dependencies: - agentkeepalive "^3.4.1" - cacache "^10.0.4" - http-cache-semantics "^3.8.1" - http-proxy-agent "^2.1.0" - https-proxy-agent "^2.2.0" - lru-cache "^4.1.2" - mississippi "^3.0.0" - node-fetch-npm "^2.0.2" - promise-retry "^1.1.1" - socks-proxy-agent "^3.0.1" - ssri "^5.2.4" - mamacro@^0.0.3: version "0.0.3" resolved "https://registry.yarnpkg.com/mamacro/-/mamacro-0.0.3.tgz#ad2c9576197c9f1abf308d0787865bd975a3f3e4" @@ -7940,10 +7505,6 @@ mdn-data@~1.1.0: version "1.1.4" resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-1.1.4.tgz#50b5d4ffc4575276573c4eedb8780812a8419f01" -meant@~1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/meant/-/meant-1.0.1.tgz#66044fea2f23230ec806fb515efea29c44d2115d" - media-typer@0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" @@ -8164,14 +7725,14 @@ minimist@~0.0.1: version "0.0.10" resolved "http://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz#de3f98543dbf96082be48ad1a0c7cda836301dcf" -minipass@^2.2.1, minipass@^2.3.3, minipass@^2.3.4: +minipass@^2.2.1, minipass@^2.3.4: version "2.3.5" resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.3.5.tgz#cacebe492022497f656b0f0f51e2682a9ed2d848" dependencies: safe-buffer "^5.1.2" yallist "^3.0.0" -minizlib@^1.1.0, minizlib@^1.1.1: +minizlib@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.1.1.tgz#6734acc045a46e61d596a43bb9d9cd326e19cc42" dependencies: @@ -8192,21 +7753,6 @@ mississippi@^2.0.0: stream-each "^1.1.0" through2 "^2.0.0" -mississippi@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/mississippi/-/mississippi-3.0.0.tgz#ea0a3291f97e0b5e8776b363d5f0a12d94c67022" - dependencies: - concat-stream "^1.5.0" - duplexify "^3.4.2" - end-of-stream "^1.1.0" - flush-write-stream "^1.0.0" - from2 "^2.1.0" - parallel-transform "^1.1.0" - pump "^3.0.0" - pumpify "^1.3.3" - stream-each "^1.1.0" - through2 "^2.0.0" - mixin-deep@^1.2.0: version "1.3.1" resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.1.tgz#a49e7268dce1a0d9698e45326c5626df3543d0fe" @@ -8246,7 +7792,7 @@ ms@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" -ms@2.1.1, ms@^2.0.0, ms@^2.1.1: +ms@2.1.1, ms@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a" @@ -8274,7 +7820,7 @@ mutationobserver-shim@^0.3.2: version "0.3.2" resolved "https://registry.yarnpkg.com/mutationobserver-shim/-/mutationobserver-shim-0.3.2.tgz#f4d5dae7a4971a2207914fb5a90ebd514b65acca" -mute-stream@0.0.7, mute-stream@~0.0.4: +mute-stream@0.0.7: version "0.0.7" resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab" @@ -8334,14 +7880,6 @@ node-dir@^0.1.10: dependencies: minimatch "^3.0.2" -node-fetch-npm@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/node-fetch-npm/-/node-fetch-npm-2.0.2.tgz#7258c9046182dca345b4208eda918daf33697ff7" - dependencies: - encoding "^0.1.11" - json-parse-better-errors "^1.0.0" - safe-buffer "^5.1.1" - node-fetch@^1.0.1: version "1.7.3" resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-1.7.3.tgz#980f6f72d85211a5347c6b2bc18c5b84c3eb47ef" @@ -8468,7 +8006,7 @@ nodemon@^1.18.4: dependencies: abbrev "1" -nopt@^4.0.1, nopt@~4.0.1: +nopt@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.1.tgz#d0d4685afd5415193c8c7505602d0d17cd64474d" dependencies: @@ -8481,7 +8019,7 @@ nopt@~1.0.10: dependencies: abbrev "1" -normalize-package-data@^2.0.0, normalize-package-data@^2.3.2, normalize-package-data@^2.3.4, normalize-package-data@^2.4.0, "normalize-package-data@~1.0.1 || ^2.0.0", normalize-package-data@~2.4.0: +normalize-package-data@^2.3.2, normalize-package-data@^2.3.4: version "2.4.0" resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.4.0.tgz#12f95a307d58352075a04907b84ac8be98ac012f" dependencies: @@ -8500,60 +8038,10 @@ normalize-range@^0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942" -npm-audit-report@^1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/npm-audit-report/-/npm-audit-report-1.3.1.tgz#e79ea1fcb5ffaf3031102b389d5222c2b0459632" - dependencies: - cli-table3 "^0.5.0" - console-control-strings "^1.1.0" - npm-bundled@^1.0.1: version "1.0.5" resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.0.5.tgz#3c1732b7ba936b3a10325aef616467c0ccbcc979" -npm-cache-filename@~1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/npm-cache-filename/-/npm-cache-filename-1.0.2.tgz#ded306c5b0bfc870a9e9faf823bc5f283e05ae11" - -npm-install-checks@~3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/npm-install-checks/-/npm-install-checks-3.0.0.tgz#d4aecdfd51a53e3723b7b2f93b2ee28e307bc0d7" - dependencies: - semver "^2.3.0 || 3.x || 4 || 5" - -npm-lifecycle@^2.0.3: - version "2.1.0" - resolved "https://registry.yarnpkg.com/npm-lifecycle/-/npm-lifecycle-2.1.0.tgz#1eda2eedb82db929e3a0c50341ab0aad140ed569" - dependencies: - byline "^5.0.0" - graceful-fs "^4.1.11" - node-gyp "^3.8.0" - resolve-from "^4.0.0" - slide "^1.1.6" - uid-number "0.0.6" - umask "^1.1.0" - which "^1.3.1" - -npm-logical-tree@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/npm-logical-tree/-/npm-logical-tree-1.2.1.tgz#44610141ca24664cad35d1e607176193fd8f5b88" - -"npm-package-arg@^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0", "npm-package-arg@^4.0.0 || ^5.0.0 || ^6.0.0", "npm-package-arg@^5.1.2 || 6", npm-package-arg@^6.0.0, npm-package-arg@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/npm-package-arg/-/npm-package-arg-6.1.0.tgz#15ae1e2758a5027efb4c250554b85a737db7fcc1" - dependencies: - hosted-git-info "^2.6.0" - osenv "^0.1.5" - semver "^5.5.0" - validate-npm-package-name "^3.0.0" - -npm-packlist@^1.1.10, npm-packlist@~1.1.10: - version "1.1.11" - resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-1.1.11.tgz#84e8c683cbe7867d34b1d357d893ce29e28a02de" - dependencies: - ignore-walk "^3.0.1" - npm-bundled "^1.0.1" - npm-packlist@^1.1.6: version "1.1.12" resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-1.1.12.tgz#22bde2ebc12e72ca482abd67afc51eb49377243a" @@ -8567,69 +8055,12 @@ npm-path@^2.0.2: dependencies: which "^1.2.10" -npm-pick-manifest@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/npm-pick-manifest/-/npm-pick-manifest-2.1.0.tgz#dc381bdd670c35d81655e1d5a94aa3dd4d87fce5" - dependencies: - npm-package-arg "^6.0.0" - semver "^5.4.1" - -npm-profile@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/npm-profile/-/npm-profile-3.0.2.tgz#58d568f1b56ef769602fd0aed8c43fa0e0de0f57" - dependencies: - aproba "^1.1.2 || 2" - make-fetch-happen "^2.5.0 || 3 || 4" - -npm-registry-client@^8.5.1: - version "8.6.0" - resolved "https://registry.yarnpkg.com/npm-registry-client/-/npm-registry-client-8.6.0.tgz#7f1529f91450732e89f8518e0f21459deea3e4c4" - dependencies: - concat-stream "^1.5.2" - graceful-fs "^4.1.6" - normalize-package-data "~1.0.1 || ^2.0.0" - npm-package-arg "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0" - once "^1.3.3" - request "^2.74.0" - retry "^0.10.0" - safe-buffer "^5.1.1" - semver "2 >=2.2.1 || 3.x || 4 || 5" - slide "^1.1.3" - ssri "^5.2.4" - optionalDependencies: - npmlog "2 || ^3.1.0 || ^4.0.0" - -npm-registry-fetch@^1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/npm-registry-fetch/-/npm-registry-fetch-1.1.1.tgz#710bc5947d9ee2c549375072dab6d5d17baf2eb2" - dependencies: - bluebird "^3.5.1" - figgy-pudding "^3.0.0" - lru-cache "^4.1.2" - make-fetch-happen "^3.0.0" - npm-package-arg "^6.0.0" - safe-buffer "^5.1.1" - -npm-registry-fetch@^3.0.0: - version "3.2.1" - resolved "https://registry.yarnpkg.com/npm-registry-fetch/-/npm-registry-fetch-3.2.1.tgz#e25f306dbe7f0a1e388f04a51086f09f3dec57af" - dependencies: - bluebird "^3.5.1" - figgy-pudding "^3.2.0" - lru-cache "^4.1.3" - make-fetch-happen "^4.0.1" - npm-package-arg "^6.1.0" - npm-run-path@^2.0.0: version "2.0.2" resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" dependencies: path-key "^2.0.0" -npm-user-validate@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/npm-user-validate/-/npm-user-validate-1.0.0.tgz#8ceca0f5cea04d4e93519ef72d0557a75122e951" - npm-which@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/npm-which/-/npm-which-3.0.1.tgz#9225f26ec3a285c209cae67c3b11a6b4ab7140aa" @@ -8638,120 +8069,7 @@ npm-which@^3.0.1: npm-path "^2.0.2" which "^1.2.10" -npm@^6.1.0: - version "6.4.0" - resolved "https://registry.yarnpkg.com/npm/-/npm-6.4.0.tgz#82a5a8151488d424958339561b4c0fccd33dd3e4" - dependencies: - JSONStream "^1.3.3" - abbrev "~1.1.1" - ansicolors "~0.3.2" - ansistyles "~0.1.3" - aproba "~1.2.0" - archy "~1.0.0" - bin-links "^1.1.2" - bluebird "~3.5.1" - byte-size "^4.0.3" - cacache "^11.1.0" - call-limit "~1.1.0" - chownr "~1.0.1" - cli-columns "^3.1.2" - cli-table3 "^0.5.0" - cmd-shim "~2.0.2" - columnify "~1.5.4" - config-chain "~1.1.11" - detect-indent "~5.0.0" - detect-newline "^2.1.0" - dezalgo "~1.0.3" - editor "~1.0.0" - figgy-pudding "^3.2.0" - find-npm-prefix "^1.0.2" - fs-vacuum "~1.2.10" - fs-write-stream-atomic "~1.0.10" - gentle-fs "^2.0.1" - glob "~7.1.2" - graceful-fs "~4.1.11" - has-unicode "~2.0.1" - hosted-git-info "^2.7.1" - iferr "^1.0.2" - inflight "~1.0.6" - inherits "~2.0.3" - ini "^1.3.5" - init-package-json "^1.10.3" - is-cidr "^2.0.6" - json-parse-better-errors "^1.0.2" - lazy-property "~1.0.0" - libcipm "^2.0.1" - libnpmhook "^4.0.1" - libnpx "^10.2.0" - lock-verify "^2.0.2" - lockfile "^1.0.4" - lodash._baseuniq "~4.6.0" - lodash.clonedeep "~4.5.0" - lodash.union "~4.6.0" - lodash.uniq "~4.5.0" - lodash.without "~4.4.0" - lru-cache "^4.1.3" - meant "~1.0.1" - mississippi "^3.0.0" - mkdirp "~0.5.1" - move-concurrently "^1.0.1" - node-gyp "^3.8.0" - nopt "~4.0.1" - normalize-package-data "~2.4.0" - npm-audit-report "^1.3.1" - npm-cache-filename "~1.0.2" - npm-install-checks "~3.0.0" - npm-lifecycle "^2.0.3" - npm-package-arg "^6.1.0" - npm-packlist "~1.1.10" - npm-pick-manifest "^2.1.0" - npm-profile "^3.0.2" - npm-registry-client "^8.5.1" - npm-registry-fetch "^1.1.0" - npm-user-validate "~1.0.0" - npmlog "~4.1.2" - once "~1.4.0" - opener "~1.4.3" - osenv "^0.1.5" - pacote "^8.1.6" - path-is-inside "~1.0.2" - promise-inflight "~1.0.1" - qrcode-terminal "^0.12.0" - query-string "^6.1.0" - qw "~1.0.1" - read "~1.0.7" - read-cmd-shim "~1.0.1" - read-installed "~4.0.3" - read-package-json "^2.0.13" - read-package-tree "^5.2.1" - readable-stream "^2.3.6" - request "^2.87.0" - retry "^0.12.0" - rimraf "~2.6.2" - safe-buffer "^5.1.2" - semver "^5.5.0" - sha "~2.0.1" - slide "~1.1.6" - sorted-object "~2.0.1" - sorted-union-stream "~2.1.3" - ssri "^6.0.0" - stringify-package "^1.0.0" - tar "^4.4.6" - text-table "~0.2.0" - tiny-relative-date "^1.3.0" - uid-number "0.0.6" - umask "~1.1.0" - unique-filename "~1.1.0" - unpipe "~1.0.0" - update-notifier "^2.5.0" - uuid "^3.3.2" - validate-npm-package-license "^3.0.4" - validate-npm-package-name "~3.0.0" - which "^1.3.1" - worker-farm "^1.6.0" - write-file-atomic "^2.3.0" - -"npmlog@0 || 1 || 2 || 3 || 4", "npmlog@2 || ^3.1.0 || ^4.0.0", npmlog@^4.0.0, npmlog@^4.0.2, npmlog@^4.1.2, npmlog@~4.1.2: +"npmlog@0 || 1 || 2 || 3 || 4", npmlog@^4.0.0, npmlog@^4.0.2, npmlog@^4.1.2: version "4.1.2" resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" dependencies: @@ -8892,7 +8210,7 @@ on-headers@~1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.1.tgz#928f5d0f470d49342651ea6794b0857c100693f7" -once@^1.3.0, once@^1.3.1, once@^1.3.3, once@^1.4.0, once@~1.4.0: +once@^1.3.0, once@^1.3.1, once@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" dependencies: @@ -8916,10 +8234,6 @@ opener@^1.5.1: version "1.5.1" resolved "https://registry.yarnpkg.com/opener/-/opener-1.5.1.tgz#6d2f0e77f1a0af0032aca716c2c1fbb8e7e8abed" -opener@~1.4.3: - version "1.4.3" - resolved "https://registry.yarnpkg.com/opener/-/opener-1.4.3.tgz#5c6da2c5d7e5831e8ffa3964950f8d6674ac90b8" - opn@5.2.0: version "5.2.0" resolved "https://registry.yarnpkg.com/opn/-/opn-5.2.0.tgz#71fdf934d6827d676cecbea1531f95d354641225" @@ -9005,7 +8319,7 @@ os-tmpdir@^1.0.0, os-tmpdir@~1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" -osenv@0, osenv@^0.1.4, osenv@^0.1.5: +osenv@0, osenv@^0.1.4: version "0.1.5" resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.5.tgz#85cdfafaeb28e8677f416e287592b5f3f49ea410" dependencies: @@ -9073,36 +8387,6 @@ package-json@^4.0.0: registry-url "^3.0.3" semver "^5.1.0" -pacote@^8.1.6: - version "8.1.6" - resolved "https://registry.yarnpkg.com/pacote/-/pacote-8.1.6.tgz#8e647564d38156367e7a9dc47a79ca1ab278d46e" - dependencies: - bluebird "^3.5.1" - cacache "^11.0.2" - get-stream "^3.0.0" - glob "^7.1.2" - lru-cache "^4.1.3" - make-fetch-happen "^4.0.1" - minimatch "^3.0.4" - minipass "^2.3.3" - mississippi "^3.0.0" - mkdirp "^0.5.1" - normalize-package-data "^2.4.0" - npm-package-arg "^6.1.0" - npm-packlist "^1.1.10" - npm-pick-manifest "^2.1.0" - osenv "^0.1.5" - promise-inflight "^1.0.1" - promise-retry "^1.1.1" - protoduck "^5.0.0" - rimraf "^2.6.2" - safe-buffer "^5.1.2" - semver "^5.5.0" - ssri "^6.0.0" - tar "^4.4.3" - unique-filename "^1.1.0" - which "^1.3.0" - pako@^1.0.5, pako@~1.0.5: version "1.0.6" resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.6.tgz#0101211baa70c4bca4a0f63f2206e97b7dfaf258" @@ -9235,7 +8519,7 @@ path-is-absolute@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" -path-is-inside@^1.0.1, path-is-inside@^1.0.2, path-is-inside@~1.0.2: +path-is-inside@^1.0.1, path-is-inside@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" @@ -9525,17 +8809,10 @@ progress@^1.1.8: version "1.1.8" resolved "http://registry.npmjs.org/progress/-/progress-1.1.8.tgz#e260c78f6161cdd9b0e56cc3e0a85de17c7a57be" -promise-inflight@^1.0.1, promise-inflight@~1.0.1: +promise-inflight@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" -promise-retry@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/promise-retry/-/promise-retry-1.1.1.tgz#6739e968e3051da20ce6497fb2b50f6911df3d6d" - dependencies: - err-code "^1.0.0" - retry "^0.10.0" - promise.prototype.finally@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/promise.prototype.finally/-/promise.prototype.finally-3.1.0.tgz#66f161b1643636e50e7cf201dc1b84a857f3864e" @@ -9550,12 +8827,6 @@ promise@^7.1.1: dependencies: asap "~2.0.3" -promzard@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/promzard/-/promzard-0.3.0.tgz#26a5d6ee8c7dee4cb12208305acfb93ba382a9ee" - dependencies: - read "1" - prop-types@15.x, prop-types@^15.5.0, prop-types@^15.5.10, prop-types@^15.5.6, prop-types@^15.5.7, prop-types@^15.5.8, prop-types@^15.5.9, prop-types@^15.6.1, prop-types@^15.6.2: version "15.6.2" resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.6.2.tgz#05d5ca77b4453e985d60fc7ff8c859094a497102" @@ -9571,16 +8842,6 @@ prop-types@^15.5.4, prop-types@^15.6.0: loose-envify "^1.3.1" object-assign "^4.1.1" -proto-list@~1.2.1: - version "1.2.4" - resolved "https://registry.yarnpkg.com/proto-list/-/proto-list-1.2.4.tgz#212d5bfe1318306a420f6402b8e26ff39647a849" - -protoduck@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/protoduck/-/protoduck-5.0.0.tgz#752145e6be0ad834cb25716f670a713c860dce70" - dependencies: - genfun "^4.0.1" - proxy-addr@~2.0.3: version "2.0.4" resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.4.tgz#ecfc733bf22ff8c6f407fa275327b9ab67e48b93" @@ -9660,10 +8921,6 @@ qr.js@0.0.0: version "0.0.0" resolved "https://registry.yarnpkg.com/qr.js/-/qr.js-0.0.0.tgz#cace86386f59a0db8050fa90d9b6b0e88a1e364f" -qrcode-terminal@^0.12.0: - version "0.12.0" - resolved "https://registry.yarnpkg.com/qrcode-terminal/-/qrcode-terminal-0.12.0.tgz#bb5b699ef7f9f0505092a3748be4464fe71b5819" - qrcode.react@^0.9.2: version "0.9.2" resolved "https://registry.yarnpkg.com/qrcode.react/-/qrcode.react-0.9.2.tgz#52f9d55db38bc2d75d63b685ca266b7d6286575b" @@ -9684,7 +8941,7 @@ qs@^6.6.0: resolved "https://registry.yarnpkg.com/qs/-/qs-6.6.0.tgz#a99c0f69a8d26bf7ef012f871cdabb0aee4424c2" integrity sha512-KIJqT9jQJDQx5h5uAVPimw6yVg2SekOKu959OCtktD3FjzbpvaPr8i4zzg07DOMz+igA4W/aNM7OV8H37pFYfA== -query-string@6.1.0, query-string@^6.1.0: +query-string@6.1.0: version "6.1.0" resolved "https://registry.yarnpkg.com/query-string/-/query-string-6.1.0.tgz#01e7d69f6a0940dac67a937d6c6325647aa4532a" dependencies: @@ -9703,10 +8960,6 @@ querystringify@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.0.0.tgz#fa3ed6e68eb15159457c89b37bc6472833195755" -qw@~1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/qw/-/qw-1.0.1.tgz#efbfdc740f9ad054304426acb183412cc8b996d4" - raf@^3.4.0: version "3.4.0" resolved "https://registry.yarnpkg.com/raf/-/raf-3.4.0.tgz#a28876881b4bc2ca9117d4138163ddb80f781575" @@ -10394,14 +9647,13 @@ react-lifecycles-compat@^3.0.0, react-lifecycles-compat@^3.0.2, react-lifecycles version "3.0.4" resolved "https://registry.yarnpkg.com/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz#4f1a273afdfc8f3488a8c516bfda78f872352362" -react-mde@7.0.3: - version "7.0.3" - resolved "https://registry.yarnpkg.com/react-mde/-/react-mde-7.0.3.tgz#7653385fcbaa8bbafe4610860fbbea1ae0c0ab1e" - integrity sha512-WVPrvS5MR3LFBXZoeMDWC2DF63Oeew8SBa+ry3ySe+6bT05A2uUot25Oiux4ACwDBDnlqmoezpvFvcS9y6dcHg== +react-mde@7.0.4: + version "7.0.4" + resolved "https://registry.yarnpkg.com/react-mde/-/react-mde-7.0.4.tgz#bb80e848135fac98693ad59429a49cad7f6dc178" + integrity sha512-uph77+5bJvgqpbSSmXMlr3yfs1a0+5XfiLAvQCZv/h3nuGq3KfpPzk6X3GcW1qo7wkggxTQ/0a8a4EE98z4cSA== dependencies: classnames "^2.2.5" insert-text-at-cursor "^0.1.2" - npm "^6.1.0" react-media@^1.8.0: version "1.9.2" @@ -10544,46 +9796,6 @@ read-chunk@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/read-chunk/-/read-chunk-1.0.1.tgz#5f68cab307e663f19993527d9b589cace4661194" -read-cmd-shim@^1.0.1, read-cmd-shim@~1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/read-cmd-shim/-/read-cmd-shim-1.0.1.tgz#2d5d157786a37c055d22077c32c53f8329e91c7b" - dependencies: - graceful-fs "^4.1.2" - -read-installed@~4.0.3: - version "4.0.3" - resolved "https://registry.yarnpkg.com/read-installed/-/read-installed-4.0.3.tgz#ff9b8b67f187d1e4c29b9feb31f6b223acd19067" - dependencies: - debuglog "^1.0.1" - read-package-json "^2.0.0" - readdir-scoped-modules "^1.0.0" - semver "2 || 3 || 4 || 5" - slide "~1.1.3" - util-extend "^1.0.1" - optionalDependencies: - graceful-fs "^4.1.2" - -"read-package-json@1 || 2", read-package-json@^2.0.0, read-package-json@^2.0.13: - version "2.0.13" - resolved "https://registry.yarnpkg.com/read-package-json/-/read-package-json-2.0.13.tgz#2e82ebd9f613baa6d2ebe3aa72cefe3f68e41f4a" - dependencies: - glob "^7.1.1" - json-parse-better-errors "^1.0.1" - normalize-package-data "^2.0.0" - slash "^1.0.0" - optionalDependencies: - graceful-fs "^4.1.2" - -read-package-tree@^5.2.1: - version "5.2.1" - resolved "https://registry.yarnpkg.com/read-package-tree/-/read-package-tree-5.2.1.tgz#6218b187d6fac82289ce4387bbbaf8eef536ad63" - dependencies: - debuglog "^1.0.1" - dezalgo "^1.0.0" - once "^1.3.0" - read-package-json "^2.0.0" - readdir-scoped-modules "^1.0.0" - read-pkg-up@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02" @@ -10607,12 +9819,6 @@ read-pkg@^4.0.1: parse-json "^4.0.0" pify "^3.0.0" -read@1, read@~1.0.1, read@~1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/read/-/read-1.0.7.tgz#b3da19bd052431a97671d44a42634adf710b40c4" - dependencies: - mute-stream "~0.0.4" - "readable-stream@1 || 2", readable-stream@^2.0.2, readable-stream@^2.0.4, readable-stream@^2.0.6, readable-stream@^2.3.5, readable-stream@^2.3.6: version "2.3.6" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf" @@ -10646,24 +9852,6 @@ readable-stream@^3.0.6: string_decoder "^1.1.1" util-deprecate "^1.0.1" -readable-stream@~1.1.10: - version "1.1.14" - resolved "http://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz#7cf4c54ef648e3813084c636dd2079e166c081d9" - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.1" - isarray "0.0.1" - string_decoder "~0.10.x" - -readdir-scoped-modules@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/readdir-scoped-modules/-/readdir-scoped-modules-1.0.2.tgz#9fafa37d286be5d92cbaebdee030dc9b5f406747" - dependencies: - debuglog "^1.0.1" - dezalgo "^1.0.0" - graceful-fs "^4.1.2" - once "^1.3.0" - readdirp@^2.0.0: version "2.2.1" resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.2.1.tgz#0e87622a3325aa33e892285caf8b4e846529a525" @@ -10975,33 +10163,6 @@ request@^2.65.0, request@^2.81.0, request@^2.83.0, request@^2.87.0, request@^2.8 tunnel-agent "^0.6.0" uuid "^3.3.2" -request@^2.74.0: - version "2.83.0" - resolved "https://registry.yarnpkg.com/request/-/request-2.83.0.tgz#ca0b65da02ed62935887808e6f510381034e3356" - dependencies: - aws-sign2 "~0.7.0" - aws4 "^1.6.0" - caseless "~0.12.0" - combined-stream "~1.0.5" - extend "~3.0.1" - forever-agent "~0.6.1" - form-data "~2.3.1" - har-validator "~5.0.3" - hawk "~6.0.2" - http-signature "~1.2.0" - is-typedarray "~1.0.0" - isstream "~0.1.2" - json-stringify-safe "~5.0.1" - mime-types "~2.1.17" - oauth-sign "~0.8.2" - performance-now "^2.1.0" - qs "~6.5.1" - safe-buffer "^5.1.1" - stringstream "~0.0.5" - tough-cookie "~2.3.3" - tunnel-agent "^0.6.0" - uuid "^3.1.0" - require-directory@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" @@ -11060,10 +10221,6 @@ resolve-from@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748" -resolve-from@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" - resolve-pathname@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/resolve-pathname/-/resolve-pathname-2.2.0.tgz#7e9ae21ed815fd63ab189adeee64dc831eefa879" @@ -11108,21 +10265,13 @@ ret@~0.1.10: version "0.1.15" resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" -retry@^0.10.0: - version "0.10.1" - resolved "https://registry.yarnpkg.com/retry/-/retry-0.10.1.tgz#e76388d217992c252750241d3d3956fed98d8ff4" - -retry@^0.12.0: - version "0.12.0" - resolved "https://registry.yarnpkg.com/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b" - right-align@^0.1.1: version "0.1.3" resolved "https://registry.yarnpkg.com/right-align/-/right-align-0.1.3.tgz#61339b722fe6a3515689210d24e14c96148613ef" dependencies: align-text "^0.1.1" -rimraf@2, rimraf@2.6.2, rimraf@^2.2.8, rimraf@^2.5.2, rimraf@^2.5.4, rimraf@^2.6.1, rimraf@^2.6.2, rimraf@~2.6.2: +rimraf@2, rimraf@2.6.2, rimraf@^2.2.8, rimraf@^2.5.4, rimraf@^2.6.1, rimraf@^2.6.2: version "2.6.2" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.2.tgz#2ed8150d24a16ea8651e6d6ef0f47c4158ce7a36" dependencies: @@ -11275,11 +10424,11 @@ semver-diff@^2.0.0: dependencies: semver "^5.0.3" -"semver@2 >=2.2.1 || 3.x || 4 || 5", "semver@2 || 3 || 4 || 5", semver@^5.4.1: +"semver@2 || 3 || 4 || 5", semver@^5.4.1: version "5.4.1" resolved "https://registry.yarnpkg.com/semver/-/semver-5.4.1.tgz#e059c09d8571f0540823733433505d3a2f00b18e" -"semver@2.x || 3.x || 4 || 5", "semver@^2.3.0 || 3.x || 4 || 5", semver@^5.0.1, semver@^5.5.1: +semver@^5.0.1, semver@^5.5.1: version "5.5.1" resolved "https://registry.yarnpkg.com/semver/-/semver-5.5.1.tgz#7dfdd8814bdb7cabc7be0fb1d734cfb66c940477" @@ -11385,13 +10534,6 @@ sha.js@^2.4.0, sha.js@^2.4.8: inherits "^2.0.1" safe-buffer "^5.0.1" -sha@~2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/sha/-/sha-2.0.1.tgz#6030822fbd2c9823949f8f72ed6411ee5cf25aae" - dependencies: - graceful-fs "^4.1.2" - readable-stream "^2.0.2" - shallow-clone@^0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/shallow-clone/-/shallow-clone-0.1.2.tgz#5909e874ba77106d73ac414cfec1ffca87d97060" @@ -11474,18 +10616,6 @@ slice-ansi@0.0.4: version "0.0.4" resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-0.0.4.tgz#edbf8903f66f7ce2f8eafd6ceed65e264c831b35" -slide@^1.1.3, slide@^1.1.6, slide@~1.1.3, slide@~1.1.6: - version "1.1.6" - resolved "https://registry.yarnpkg.com/slide/-/slide-1.1.6.tgz#56eb027d65b4d2dce6cb2e2d32c4d4afc9e1d707" - -smart-buffer@^1.0.13: - version "1.1.15" - resolved "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-1.1.15.tgz#7f114b5b65fab3e2a35aa775bb12f0d1c649bf16" - -smart-buffer@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-4.0.1.tgz#07ea1ca8d4db24eb4cac86537d7d18995221ace3" - snapdragon-node@^2.0.1: version "2.1.1" resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" @@ -11513,12 +10643,6 @@ snapdragon@^0.8.1: source-map-resolve "^0.5.0" use "^3.1.0" -sntp@2.x.x: - version "2.1.0" - resolved "https://registry.yarnpkg.com/sntp/-/sntp-2.1.0.tgz#2c6cec14fedc2222739caf9b5c3d85d1cc5a2cc8" - dependencies: - hoek "4.x.x" - sockjs-client@1.1.4: version "1.1.4" resolved "https://registry.yarnpkg.com/sockjs-client/-/sockjs-client-1.1.4.tgz#5babe386b775e4cf14e7520911452654016c8b12" @@ -11560,34 +10684,6 @@ sockjs@0.3.19: faye-websocket "^0.10.0" uuid "^3.0.1" -socks-proxy-agent@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-3.0.1.tgz#2eae7cf8e2a82d34565761539a7f9718c5617659" - dependencies: - agent-base "^4.1.0" - socks "^1.1.10" - -socks-proxy-agent@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-4.0.1.tgz#5936bf8b707a993079c6f37db2091821bffa6473" - dependencies: - agent-base "~4.2.0" - socks "~2.2.0" - -socks@^1.1.10: - version "1.1.10" - resolved "https://registry.yarnpkg.com/socks/-/socks-1.1.10.tgz#5b8b7fc7c8f341c53ed056e929b7bf4de8ba7b5a" - dependencies: - ip "^1.1.4" - smart-buffer "^1.0.13" - -socks@~2.2.0: - version "2.2.1" - resolved "https://registry.yarnpkg.com/socks/-/socks-2.2.1.tgz#68ad678b3642fbc5d99c64c165bc561eab0215f9" - dependencies: - ip "^1.1.5" - smart-buffer "^4.0.1" - sort-object-keys@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/sort-object-keys/-/sort-object-keys-1.1.2.tgz#d3a6c48dc2ac97e6bc94367696e03f6d09d37952" @@ -11596,17 +10692,6 @@ sort-order@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/sort-order/-/sort-order-1.0.1.tgz#d822b8cdb90ea6a9df968c4bd45987cf548199e6" -sorted-object@~2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/sorted-object/-/sorted-object-2.0.1.tgz#7d631f4bd3a798a24af1dffcfbfe83337a5df5fc" - -sorted-union-stream@~2.1.3: - version "2.1.3" - resolved "https://registry.yarnpkg.com/sorted-union-stream/-/sorted-union-stream-2.1.3.tgz#c7794c7e077880052ff71a8d4a2dbb4a9a638ac7" - dependencies: - from2 "^1.3.0" - stream-iterate "^1.1.0" - source-list-map@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.0.tgz#aaa47403f7b245a92fbc97ea08f250d6087ed085" @@ -11658,30 +10743,12 @@ source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.0, source-map@~0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" -spdx-correct@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.0.0.tgz#05a5b4d7153a195bc92c3c425b69f3b2a9524c82" - dependencies: - spdx-expression-parse "^3.0.0" - spdx-license-ids "^3.0.0" - spdx-correct@~1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-1.0.2.tgz#4b3073d933ff51f3912f03ac5519498a4150db40" dependencies: spdx-license-ids "^1.0.2" -spdx-exceptions@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.1.0.tgz#2c7ae61056c714a5b9b9b2b2af7d311ef5c78fe9" - -spdx-expression-parse@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz#99e119b7a5da00e05491c9fa338b7904823b41d0" - dependencies: - spdx-exceptions "^2.1.0" - spdx-license-ids "^3.0.0" - spdx-expression-parse@~1.0.0: version "1.0.4" resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-1.0.4.tgz#9bdf2f20e1f40ed447fbe273266191fced51626c" @@ -11690,10 +10757,6 @@ spdx-license-ids@^1.0.2: version "1.2.2" resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-1.2.2.tgz#c9df7a3424594ade6bd11900d596696dc06bac57" -spdx-license-ids@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.0.tgz#7a7cd28470cc6d3a1cfe6d66886f6bc430d3ac87" - spdy-transport@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/spdy-transport/-/spdy-transport-3.0.0.tgz#00d4863a6400ad75df93361a1608605e5dcdcf31" @@ -11747,10 +10810,6 @@ ssri@^5.2.4: dependencies: safe-buffer "^5.1.1" -ssri@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/ssri/-/ssri-6.0.0.tgz#fc21bfc90e03275ac3e23d5a42e38b8a1cbc130d" - stable@~0.1.6: version "0.1.8" resolved "https://registry.yarnpkg.com/stable/-/stable-0.1.8.tgz#836eb3c8382fe2936feaf544631017ce7d47a3cf" @@ -11818,13 +10877,6 @@ stream-http@^2.7.2: to-arraybuffer "^1.0.0" xtend "^4.0.0" -stream-iterate@^1.1.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/stream-iterate/-/stream-iterate-1.2.0.tgz#2bd7c77296c1702a46488b8ad41f79865eecd4e1" - dependencies: - readable-stream "^2.1.5" - stream-shift "^1.0.0" - stream-shift@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.0.tgz#d5c752825e5367e786f78e18e445ea223a155952" @@ -11917,10 +10969,6 @@ string_decoder@^1.1.1: dependencies: safe-buffer "~5.1.0" -string_decoder@~0.10.x: - version "0.10.31" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" - string_decoder@~1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" @@ -11935,14 +10983,6 @@ stringify-object@^3.2.2: is-obj "^1.0.1" is-regexp "^1.0.0" -stringify-package@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/stringify-package/-/stringify-package-1.0.0.tgz#e02828089333d7d45cd8c287c30aa9a13375081b" - -stringstream@~0.0.5: - version "0.0.5" - resolved "https://registry.yarnpkg.com/stringstream/-/stringstream-0.0.5.tgz#4e484cd4de5a0bbbee18e46307710a8a81621878" - strip-ansi@3.0.1, strip-ansi@^3.0.0, strip-ansi@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" @@ -12104,18 +11144,6 @@ tar@^4: safe-buffer "^5.1.2" yallist "^3.0.2" -tar@^4.4.3, tar@^4.4.6: - version "4.4.6" - resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.6.tgz#63110f09c00b4e60ac8bcfe1bf3c8660235fbc9b" - dependencies: - chownr "^1.0.1" - fs-minipass "^1.2.5" - minipass "^2.3.3" - minizlib "^1.1.0" - mkdirp "^0.5.0" - safe-buffer "^5.1.2" - yallist "^3.0.2" - term-size@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/term-size/-/term-size-1.2.0.tgz#458b83887f288fc56d6fffbfad262e26638efa69" @@ -12137,7 +11165,7 @@ text-hex@1.0.x: version "1.0.0" resolved "https://registry.yarnpkg.com/text-hex/-/text-hex-1.0.0.tgz#69dc9c1b17446ee79a92bf5b884bb4b9127506f5" -text-table@0.2.0, text-table@~0.2.0: +text-table@0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" @@ -12152,7 +11180,7 @@ through2@^2.0.0, through2@^2.0.3: readable-stream "^2.1.5" xtend "~4.0.1" -"through@>=2.2.7 <3", through@^2.3.6, through@~2.3.4, through@~2.3.6, through@~2.3.8: +through@^2.3.6, through@~2.3.4, through@~2.3.6, through@~2.3.8: version "2.3.8" resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" @@ -12178,10 +11206,6 @@ tiny-invariant@^1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/tiny-invariant/-/tiny-invariant-1.0.3.tgz#91efaaa0269ccb6271f0296aeedb05fc3e067b7a" -tiny-relative-date@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/tiny-relative-date/-/tiny-relative-date-1.3.0.tgz#fa08aad501ed730f31cc043181d995c39a935e07" - tiny-warning@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/tiny-warning/-/tiny-warning-1.0.2.tgz#1dfae771ee1a04396bdfde27a3adcebc6b648b28" @@ -12478,14 +11502,6 @@ uglifyjs-webpack-plugin@1.3.0, uglifyjs-webpack-plugin@^1.2.4: webpack-sources "^1.1.0" worker-farm "^1.5.2" -uid-number@0.0.6: - version "0.0.6" - resolved "https://registry.yarnpkg.com/uid-number/-/uid-number-0.0.6.tgz#0ea10e8035e8eb5b8e4449f06da1c730663baa81" - -umask@^1.1.0, umask@~1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/umask/-/umask-1.1.0.tgz#f29cebf01df517912bb58ff9c4e50fde8e33320d" - undefsafe@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/undefsafe/-/undefsafe-2.0.2.tgz#225f6b9e0337663e0d8e7cfd686fc2836ccace76" @@ -12524,7 +11540,7 @@ union-value@^1.0.0: is-extendable "^0.1.1" set-value "^0.4.3" -unique-filename@^1.1.0, unique-filename@~1.1.0: +unique-filename@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-1.1.0.tgz#d05f2fe4032560871f30e93cbe735eea201514f3" dependencies: @@ -12579,7 +11595,7 @@ upath@^1.0.5: version "1.1.0" resolved "https://registry.yarnpkg.com/upath/-/upath-1.1.0.tgz#35256597e46a581db4793d0ce47fa9aebfc9fabd" -update-notifier@^2.3.0, update-notifier@^2.5.0: +update-notifier@^2.3.0: version "2.5.0" resolved "https://registry.yarnpkg.com/update-notifier/-/update-notifier-2.5.0.tgz#d0744593e13f161e406acb1d9408b72cad08aff6" dependencies: @@ -12660,10 +11676,6 @@ util-deprecate@^1.0.1, util-deprecate@^1.0.2, util-deprecate@~1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" -util-extend@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/util-extend/-/util-extend-1.0.3.tgz#a7c216d267545169637b3b6edc6ca9119e2ff93f" - util.promisify@^1.0.0, util.promisify@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/util.promisify/-/util.promisify-1.0.0.tgz#440f7165a459c9a16dc145eb8e72f35687097030" @@ -12700,19 +11712,6 @@ validate-npm-package-license@^3.0.1: spdx-correct "~1.0.0" spdx-expression-parse "~1.0.0" -validate-npm-package-license@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" - dependencies: - spdx-correct "^3.0.0" - spdx-expression-parse "^3.0.0" - -validate-npm-package-name@^3.0.0, validate-npm-package-name@~3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz#5fa912d81eb7d0c74afc140de7317f0ca7df437e" - dependencies: - builtins "^1.0.3" - value-equal@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/value-equal/-/value-equal-0.4.0.tgz#c5bdd2f54ee093c04839d71ce2e4758a6890abc7" @@ -12809,12 +11808,6 @@ wbuf@^1.1.0, wbuf@^1.7.3: dependencies: minimalistic-assert "^1.0.0" -wcwidth@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/wcwidth/-/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8" - dependencies: - defaults "^1.0.3" - webapp-webpack-plugin@2.3.1: version "2.3.1" resolved "https://registry.yarnpkg.com/webapp-webpack-plugin/-/webapp-webpack-plugin-2.3.1.tgz#c158a9c80f219423e27f2fa4db8ec8e8fbdcb3ef" @@ -13076,7 +12069,7 @@ which-module@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" -which@1, which@^1.2.10, which@^1.2.14, which@^1.2.9, which@^1.3.0, which@^1.3.1: +which@1, which@^1.2.10, which@^1.2.14, which@^1.2.9: version "1.3.1" resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" dependencies: @@ -13135,7 +12128,7 @@ wordwrap@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" -worker-farm@^1.5.2, worker-farm@^1.6.0: +worker-farm@^1.5.2: version "1.6.0" resolved "https://registry.yarnpkg.com/worker-farm/-/worker-farm-1.6.0.tgz#aecc405976fab5a95526180846f0dba288f3a4a0" dependencies: @@ -13265,12 +12258,6 @@ yargs-parser@^8.1.0: dependencies: camelcase "^4.1.0" -yargs-parser@^9.0.2: - version "9.0.2" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-9.0.2.tgz#9ccf6a43460fe4ed40a9bb68f48d43b8a68cc077" - dependencies: - camelcase "^4.1.0" - yargs@12.0.2, yargs@^12.0.1: version "12.0.2" resolved "https://registry.yarnpkg.com/yargs/-/yargs-12.0.2.tgz#fe58234369392af33ecbef53819171eff0f5aadc" @@ -13305,23 +12292,6 @@ yargs@^10.0.3: y18n "^3.2.1" yargs-parser "^8.1.0" -yargs@^11.0.0: - version "11.1.0" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-11.1.0.tgz#90b869934ed6e871115ea2ff58b03f4724ed2d77" - dependencies: - cliui "^4.0.0" - decamelize "^1.1.1" - find-up "^2.1.0" - get-caller-file "^1.0.1" - os-locale "^2.0.0" - require-directory "^2.1.1" - require-main-filename "^1.0.1" - set-blocking "^2.0.0" - string-width "^2.0.0" - which-module "^2.0.0" - y18n "^3.2.1" - yargs-parser "^9.0.2" - yargs@^6.5.0: version "6.6.0" resolved "http://registry.npmjs.org/yargs/-/yargs-6.6.0.tgz#782ec21ef403345f830a808ca3d513af56065208" From d4d9f5b2abe16adec57177b5c36ab548be42a19e Mon Sep 17 00:00:00 2001 From: William O'Beirne Date: Tue, 12 Mar 2019 17:13:04 -0400 Subject: [PATCH 06/11] Use new logo + update meta tags (#332) * Replace logo in header and footer. * Update some meta tags. --- frontend/client/components/BasicHead.tsx | 16 ++++++--- frontend/client/components/Footer/index.tsx | 31 +++++++++++++----- frontend/client/components/Footer/style.less | 8 ++--- frontend/client/components/Header/style.less | 10 +++--- .../client/static/images/logo-name-light.svg | 26 ++++++++++++--- frontend/client/static/images/logo-name.svg | 29 ++++++++++++---- frontend/client/static/images/ogp-logo.png | Bin 19762 -> 29336 bytes frontend/client/static/locales/en/common.json | 3 ++ 8 files changed, 90 insertions(+), 33 deletions(-) diff --git a/frontend/client/components/BasicHead.tsx b/frontend/client/components/BasicHead.tsx index 2e8363e8..50424f19 100644 --- a/frontend/client/components/BasicHead.tsx +++ b/frontend/client/components/BasicHead.tsx @@ -1,6 +1,7 @@ import React from 'react'; import { Helmet } from 'react-helmet'; import { RouteComponentProps, withRouter } from 'react-router'; +import { withNamespaces, WithNamespaces } from 'react-i18next'; import ogpLogo from 'static/images/ogp-logo.png'; import { urlToPublic } from 'utils/helpers'; @@ -8,17 +9,22 @@ interface OwnProps { title: string; } -type Props = OwnProps & RouteComponentProps; +type Props = OwnProps & RouteComponentProps & WithNamespaces; class BasicHead extends React.Component { render() { - const { children, title } = this.props; + const { children, title, t } = this.props; const defaultOgpUrl = process.env.PUBLIC_HOST_URL + this.props.location.pathname; const defaultOgpImage = urlToPublic(ogpLogo); return (
{`ZF Grants - ${title}`} + + { {/* open graph protocol defaults, can be overridden in children */} + @@ -40,8 +47,9 @@ class BasicHead extends React.Component { {/* twitter defaults, can be overridden in children */} - + + @@ -51,4 +59,4 @@ class BasicHead extends React.Component { } } -export default withRouter(BasicHead); +export default withNamespaces()(withRouter(BasicHead)); diff --git a/frontend/client/components/Footer/index.tsx b/frontend/client/components/Footer/index.tsx index 081d59c0..4d265513 100644 --- a/frontend/client/components/Footer/index.tsx +++ b/frontend/client/components/Footer/index.tsx @@ -1,11 +1,12 @@ import React from 'react'; import { Link } from 'react-router-dom'; import { Icon } from 'antd'; +import { withNamespaces, WithNamespaces } from 'react-i18next'; import ZFGrantsLogo from 'static/images/logo-name-light.svg'; import GrantIoLogo from 'static/images/grantio-logo-name.svg'; import './style.less'; -export default () => ( +const Footer: React.SFC = ({ t }) => (
@@ -23,13 +24,13 @@ export default () => ( -

- ZF Grants is an open-source, community driven platform that helps - creators get funding to build a better Zcash. ZF Grants is owned - and operated by the Zcash Foundation. -

+

{t('site.description')}

- + About @@ -47,12 +48,24 @@ export default () => (
); + +export default withNamespaces()(Footer); diff --git a/frontend/client/components/Footer/style.less b/frontend/client/components/Footer/style.less index f312d54e..4f1d79fd 100644 --- a/frontend/client/components/Footer/style.less +++ b/frontend/client/components/Footer/style.less @@ -39,7 +39,7 @@ &-title { margin-bottom: 1.25rem; - opacity: 0.8; + opacity: 0.7; transition: transform 100ms ease, opacity 100ms ease; &:hover, @@ -51,9 +51,9 @@ } &-logo { - height: 6.8rem; - margin-bottom: 0.5rem; - margin-top: -1.25rem; + height: 3.4rem; + margin-bottom: 0.75rem; + margin-top: -0.75rem; } } diff --git a/frontend/client/components/Header/style.less b/frontend/client/components/Header/style.less index 67dcc3d9..84a85343 100644 --- a/frontend/client/components/Header/style.less +++ b/frontend/client/components/Header/style.less @@ -1,5 +1,5 @@ @import '~styles/variables.less'; -@header-height: 68px; +@header-height: 64px; @header-transition: 200ms; @link-padding: 0.7rem; @small-query: ~'(max-width: 820px)'; @@ -44,22 +44,22 @@ transition: transform 100ms ease, opacity 100ms ease; flex-grow: 1; text-align: center; - opacity: 0.8; + opacity: 0.7; &:hover, &:focus { color: inherit; - transform: translateY(-2px) translate(-50%, -50%); opacity: 0.9; } &-logo { - height: 3.6rem; + height: 2rem; width: auto; + transform: translateY(-7%); transition: transform @header-transition ease; .is-transparent & { - transform: scale(1.4) translateY(20%); + transform: scale(1.4) translateY(18%); } } } diff --git a/frontend/client/static/images/logo-name-light.svg b/frontend/client/static/images/logo-name-light.svg index 25f4ed2f..23f34bf5 100644 --- a/frontend/client/static/images/logo-name-light.svg +++ b/frontend/client/static/images/logo-name-light.svg @@ -1,8 +1,24 @@ - - - - - + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/frontend/client/static/images/logo-name.svg b/frontend/client/static/images/logo-name.svg index 0fc5c158..e940c962 100644 --- a/frontend/client/static/images/logo-name.svg +++ b/frontend/client/static/images/logo-name.svg @@ -1,7 +1,24 @@ - - - - - + + + + + + + + + + + + + + + + + + + + + + - + \ No newline at end of file diff --git a/frontend/client/static/images/ogp-logo.png b/frontend/client/static/images/ogp-logo.png index 30d320f4be3f9418d1138caf2ff5500b41430bd3..11342558f00b29e761b27a3d17351153d7f05df3 100644 GIT binary patch literal 29336 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 Date: Tue, 12 Mar 2019 17:25:38 -0400 Subject: [PATCH 07/11] Upgrade sshpk in yarn.lock (#333) --- frontend/yarn.lock | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/frontend/yarn.lock b/frontend/yarn.lock index 5c2f5ad3..f64632e5 100644 --- a/frontend/yarn.lock +++ b/frontend/yarn.lock @@ -10355,9 +10355,10 @@ safe-regex@^1.1.0: dependencies: ret "~0.1.10" -"safer-buffer@>= 2.1.2 < 3": +"safer-buffer@>= 2.1.2 < 3", safer-buffer@^2.0.2: version "2.1.2" resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" + integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== sass-graph@^2.2.4: version "2.2.4" @@ -10791,17 +10792,18 @@ sprintf-js@~1.0.2: resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" sshpk@^1.7.0: - version "1.13.1" - resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.13.1.tgz#512df6da6287144316dc4c18fe1cf1d940739be3" + version "1.16.1" + resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.16.1.tgz#fb661c0bef29b39db40769ee39fa70093d6f6877" + integrity sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg== dependencies: asn1 "~0.2.3" assert-plus "^1.0.0" - dashdash "^1.12.0" - getpass "^0.1.1" - optionalDependencies: bcrypt-pbkdf "^1.0.0" + dashdash "^1.12.0" ecc-jsbn "~0.1.1" + getpass "^0.1.1" jsbn "~0.1.0" + safer-buffer "^2.0.2" tweetnacl "~0.14.0" ssri@^5.2.4: From e160380daa64886fb4de4948dd13317f6e94fc57 Mon Sep 17 00:00:00 2001 From: William O'Beirne Date: Tue, 12 Mar 2019 17:35:15 -0400 Subject: [PATCH 08/11] Prevent showing contribution instructions for canceled / expired proposals (#334) --- backend/grant/proposal/models.py | 13 +++---- backend/grant/proposal/views.py | 14 ++++---- .../Profile/ProfileContribution.tsx | 36 ++++++++++--------- 3 files changed, 34 insertions(+), 29 deletions(-) diff --git a/backend/grant/proposal/models.py b/backend/grant/proposal/models.py index 22a44834..148f68bb 100644 --- a/backend/grant/proposal/models.py +++ b/backend/grant/proposal/models.py @@ -517,12 +517,13 @@ class Proposal(db.Model): 'support_url': make_url('/contact'), }) for c in self.contributions: - send_email(c.user.email_address, 'contribution_proposal_canceled', { - 'contribution': c, - 'proposal': self, - 'refund_address': c.user.settings.refund_address, - 'account_settings_url': make_url('/profile/settings?tab=account') - }) + if c.user: + send_email(c.user.email_address, 'contribution_proposal_canceled', { + 'contribution': c, + 'proposal': self, + 'refund_address': c.user.settings.refund_address, + 'account_settings_url': make_url('/profile/settings?tab=account') + }) @hybrid_property def contributed(self): diff --git a/backend/grant/proposal/views.py b/backend/grant/proposal/views.py index de00e6e3..89839345 100644 --- a/backend/grant/proposal/views.py +++ b/backend/grant/proposal/views.py @@ -461,15 +461,15 @@ def get_proposal_contributions(proposal_id): @blueprint.route("//contributions/", methods=["GET"]) def get_proposal_contribution(proposal_id, contribution_id): proposal = Proposal.query.filter_by(id=proposal_id).first() - if proposal: - contribution = ProposalContribution.query.filter_by(id=contribution_id).first() - if contribution: - return proposal_contribution_schema.dump(contribution) - else: - return {"message": "No contribution matching id"} - else: + if not proposal: return {"message": "No proposal matching id"}, 404 + contribution = ProposalContribution.query.filter_by(id=contribution_id).first() + if not contribution: + return {"message": "No contribution matching id"}, 404 + + return proposal_contribution_schema.dump(contribution) + @blueprint.route("//contributions", methods=["POST"]) # TODO add gaurd (minimum, maximum) diff --git a/frontend/client/components/Profile/ProfileContribution.tsx b/frontend/client/components/Profile/ProfileContribution.tsx index 1fb97adc..5863e792 100644 --- a/frontend/client/components/Profile/ProfileContribution.tsx +++ b/frontend/client/components/Profile/ProfileContribution.tsx @@ -8,6 +8,7 @@ import { formatTxExplorerUrl } from 'utils/formatters'; import { deleteContribution } from 'modules/users/actions'; import { UserContribution } from 'types'; import './ProfileContribution.less'; +import { PROPOSAL_STAGE } from 'api/constants'; interface OwnProps { userId: number; @@ -26,7 +27,10 @@ class ProfileContribution extends React.Component { const { contribution } = this.props; const { proposal } = contribution; const isConfirmed = contribution.status === 'CONFIRMED'; - const isExpired = !isConfirmed && contribution.dateCreated < Date.now() / 1000 - ONE_DAY; + const isExpired = + (!isConfirmed && contribution.dateCreated < Date.now() / 1000 - ONE_DAY) || + (proposal.stage === PROPOSAL_STAGE.CANCELED || + proposal.stage === PROPOSAL_STAGE.FAILED); let tag; let actions: React.ReactNode; @@ -43,15 +47,14 @@ class ProfileContribution extends React.Component { } else if (isExpired) { tag = Expired; // TODO: Link to support - actions = <> - - Delete - - Contact support - ; + actions = ( + <> + + Delete + + Contact support + + ); } else { tag = Pending; actions = ( @@ -76,9 +79,7 @@ class ProfileContribution extends React.Component {
+
-
- {actions} -
+
{actions}
); @@ -89,6 +90,9 @@ class ProfileContribution extends React.Component { }; } -export default connect<{}, DispatchProps, OwnProps, {}>(undefined, { - deleteContribution, -})(ProfileContribution); +export default connect<{}, DispatchProps, OwnProps, {}>( + undefined, + { + deleteContribution, + }, +)(ProfileContribution); From 21217c73b6c891c8d3ee11400b3deb605a08bc4f Mon Sep 17 00:00:00 2001 From: Daniel Ternyak Date: Tue, 12 Mar 2019 16:36:17 -0500 Subject: [PATCH 09/11] Create DISCLOSURE.md (#335) --- DISCLOSURE.md | 119 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 119 insertions(+) create mode 100644 DISCLOSURE.md diff --git a/DISCLOSURE.md b/DISCLOSURE.md new file mode 100644 index 00000000..29e6d296 --- /dev/null +++ b/DISCLOSURE.md @@ -0,0 +1,119 @@ +# Responsible Disclosure Policy + +We greatly appreciate any and all disclosures of bugs and vulnerabilities that are done in a responsible manner. We will engage responsible disclosures according to this policy and put forth our best effort to fix disclosed vulnerabilities as well as reaching out to numerous node operators to deploy fixes in a timely manner. + +## Responsible Disclosure Guidelines + +Non-critical bugs can be repoted by creating an issue on [GitHub](https://github.com/grant-project/zcash-grant-system). Do not disclose critical bug or vulnerability on public forums, message boards, mailing lists, etc. prior to responsibly disclosing to the Zcash Foundation / Grant.io teams and giving sufficient time for the issue to be fixed and deployed. + +## Reporting a Bug or Vulnerability + +When reporting a bug or vulnerability, please provide the following to contact@grant.io and CC contact@zfnd.org. +* A short summary of the potential impact of the issue (if known). +* Details explaining how to reproduce the issue or how an exploit may be formed. +* Your name (optional). If provided, we will provide credit for disclosure. Otherwise, you will be treated anonymously and your privacy will be respected. +* Your email or other means of contacting you. +* A PGP key/fingerprint for us to provide encrypted responses to your disclosure. If this is not provided, we cannot guarantee that you will receive a response prior to a fix being made and deployed. + +## Encrypting the Disclosure + +We highly encourage all disclosures to be encrypted to prevent interception and exploitation by third-parties prior to a fix being developed and deployed. Please encrypt using the PGP public key with fingerprint: `46CD57E95AF395A1499C18A3F01C867EEB456C7A` + +It may be obtained via: +``` +gpg --recv-keys 46CD57E95AF395A1499C18A3F01C867EEB456C7A +``` + +Alternatively, it may be optained by copying the following into a file, and imported it via: + +``` +gpg --import +``` + +Signing example: + +``` +gpg --encrypt --sign --armor -r contact@grant.io +``` + +``` +-----BEGIN PGP PUBLIC KEY BLOCK----- +Version: Keybase OpenPGP v2.1.0 +Comment: https://keybase.io/crypto + +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 +=1KTe +-----END PGP PUBLIC KEY BLOCK----- +``` + + +##### Inspired by [this](https://github.com/Bitcoin-ABC/bitcoin-abc/blob/master/DISCLOSURE_POLICY.md) dislosure policy From 79db2b4001b8d84a20200ed273dad62a4fb7e723 Mon Sep 17 00:00:00 2001 From: William O'Beirne Date: Tue, 12 Mar 2019 18:20:11 -0400 Subject: [PATCH 10/11] Fix contribution confirmation on subsequent contribution (#336) --- .../components/ContributionModal/index.tsx | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/frontend/client/components/ContributionModal/index.tsx b/frontend/client/components/ContributionModal/index.tsx index 9a8a903f..0814ce0a 100644 --- a/frontend/client/components/ContributionModal/index.tsx +++ b/frontend/client/components/ContributionModal/index.tsx @@ -71,6 +71,7 @@ export default class ContributionModal extends React.Component { this.setState({ contribution: null, hasConfirmedAnonymous: false, + hasSent: false, error: null, }); } @@ -93,16 +94,17 @@ export default class ContributionModal extends React.Component { message="This contribution will not be attributed" description={ <> - Your contribution will show up - without attribution. Even if you're logged in, the contribution will not appear anywhere - on your account after you close this modal. + Your contribution will show up without attribution. Even if you're logged + in, the contribution will not appear anywhere on your account after you + close this modal.

- ZF Grants is unable to offer refunds for non-attributed contributions. If refunds for this campaign are issued, your contribution will be treated as a donation to - the Zcash Foundation. + ZF Grants is unable to offer refunds for non-attributed contributions. If + refunds for this campaign are issued, your contribution will be treated as a + donation to the Zcash Foundation.

- If you would like to have your contribution attached to an account and remain eligible for refunds, you can - close this modal, make sure you're logged in, and don't check the - "Contribute without attribution" checkbox. + If you would like to have your contribution attached to an account and + remain eligible for refunds, you can close this modal, make sure you're + logged in, and don't check the "Contribute without attribution" checkbox. } /> From c5979d5635628390211f093e9289a9d5efa343b7 Mon Sep 17 00:00:00 2001 From: Daniel Ternyak Date: Tue, 12 Mar 2019 18:04:32 -0500 Subject: [PATCH 11/11] Various Fixes (#340) * copy; ff * Update PaymentInfo.tsx * Update Final.tsx * Update index.tsx --- .../client/components/ContributionModal/PaymentInfo.tsx | 2 +- frontend/client/components/ContributionModal/index.tsx | 2 ++ frontend/client/components/CreateFlow/Final.tsx | 4 ++-- frontend/client/components/CreateFlow/index.tsx | 8 +++++--- frontend/client/components/Profile/ProfilePending.tsx | 4 ++-- 5 files changed, 12 insertions(+), 8 deletions(-) diff --git a/frontend/client/components/ContributionModal/PaymentInfo.tsx b/frontend/client/components/ContributionModal/PaymentInfo.tsx index b9d6ed0c..783741a4 100644 --- a/frontend/client/components/ContributionModal/PaymentInfo.tsx +++ b/frontend/client/components/ContributionModal/PaymentInfo.tsx @@ -113,7 +113,7 @@ export default class PaymentInfo extends React.Component { } else { text = ` Thank you for contributing! Just send using whichever method works best for - you, and we'll let you know once it's been confirmed. + you, and we'll let you know once it's been processed with 6 confirmations. `; } } diff --git a/frontend/client/components/ContributionModal/index.tsx b/frontend/client/components/ContributionModal/index.tsx index 0814ce0a..4203331a 100644 --- a/frontend/client/components/ContributionModal/index.tsx +++ b/frontend/client/components/ContributionModal/index.tsx @@ -105,6 +105,8 @@ export default class ContributionModal extends React.Component { If you would like to have your contribution attached to an account and remain eligible for refunds, you can close this modal, make sure you're logged in, and don't check the "Contribute without attribution" checkbox. +

+ NOTE: The Zcash Foundation is unable to accept donations of more than $5,000 USD worth of ZEC from anonymous users. } /> diff --git a/frontend/client/components/CreateFlow/Final.tsx b/frontend/client/components/CreateFlow/Final.tsx index 81d5eaa0..fe36a4cd 100644 --- a/frontend/client/components/CreateFlow/Final.tsx +++ b/frontend/client/components/CreateFlow/Final.tsx @@ -102,8 +102,8 @@ class CreateFinal extends React.Component { profile's funded tab.

- Once your payment has been sent and confirmed, you will receive an - email. Visit your{' '} + Once your payment has been sent and processed with 6 confirmations, you + will receive an email. Visit your{' '} profile's pending proposals tab {' '} diff --git a/frontend/client/components/CreateFlow/index.tsx b/frontend/client/components/CreateFlow/index.tsx index 0cf25241..db17670f 100644 --- a/frontend/client/components/CreateFlow/index.tsx +++ b/frontend/client/components/CreateFlow/index.tsx @@ -231,9 +231,11 @@ class CreateFlow extends React.Component { )} - + {process.env.NODE_ENV !== 'production' && ( + + )} )} {isSavingDraft && ( diff --git a/frontend/client/components/Profile/ProfilePending.tsx b/frontend/client/components/Profile/ProfilePending.tsx index 4332ebfa..b27e94f3 100644 --- a/frontend/client/components/Profile/ProfilePending.tsx +++ b/frontend/client/components/Profile/ProfilePending.tsx @@ -143,8 +143,8 @@ class ProfilePending extends React.Component {

Please send the staking contribution of{' '} {stakeContribution && stakeContribution.amount} ZEC using the - instructions below. Once your payment has been sent and confirmed, you - will receive an email. + instructions below. Once your payment has been sent and received 6 + confirmations, you will receive an email.

} />