aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFlorian Dold <florian.dold@gmail.com>2017-08-14 04:16:12 +0200
committerFlorian Dold <florian.dold@gmail.com>2017-08-14 04:16:12 +0200
commitd5bba630a35fff72b11273fb5e62c2208f9e1f5b (patch)
tree3397a580d663161be1ba7c46df368ac10d566cdc
parent419a05e801da688a1d0917a6bf16d468e6362a3d (diff)
downloadwallet-core-d5bba630a35fff72b11273fb5e62c2208f9e1f5b.tar.gz
wallet-core-d5bba630a35fff72b11273fb5e62c2208f9e1f5b.tar.bz2
wallet-core-d5bba630a35fff72b11273fb5e62c2208f9e1f5b.zip
implement returning coins to user's account
-rw-r--r--src/checkable.ts5
-rw-r--r--src/crypto/cryptoApi.ts6
-rw-r--r--src/crypto/cryptoWorker.ts22
-rw-r--r--src/i18n/de.po97
-rw-r--r--src/i18n/en-US.po97
-rw-r--r--src/i18n/fr.po97
-rw-r--r--src/i18n/it.po97
-rw-r--r--src/i18n/strings.ts36
-rw-r--r--src/i18n/taler-wallet-webex.pot97
-rw-r--r--src/query.ts40
-rw-r--r--src/types.ts192
-rw-r--r--src/wallet.ts369
-rw-r--r--src/webex/messages.ts8
-rw-r--r--src/webex/pages/confirm-create-reserve.html30
-rw-r--r--src/webex/pages/popup.tsx44
-rw-r--r--src/webex/pages/return-coins.html19
-rw-r--r--src/webex/pages/return-coins.tsx271
-rw-r--r--src/webex/style/wallet.css16
-rw-r--r--src/webex/wxApi.ts27
-rw-r--r--src/webex/wxBackend.ts17
-rw-r--r--src/wire.ts53
-rw-r--r--tsconfig.json1
-rw-r--r--webpack.config.js5
-rw-r--r--yarn.lock1012
24 files changed, 1832 insertions, 826 deletions
diff --git a/src/checkable.ts b/src/checkable.ts
index 802d8f32d..e6ef99336 100644
--- a/src/checkable.ts
+++ b/src/checkable.ts
@@ -217,12 +217,11 @@ export namespace Checkable {
type: target,
}, ["(root)"]);
if (opts.validate) {
- const instance = new target();
- if (typeof instance.validate !== "function") {
+ if (target.validate !== "function") {
throw Error("invalid Checkable annotion: validate method required");
}
// May throw exception
- instance.validate.call(cv);
+ target.validate(cv);
}
return cv;
};
diff --git a/src/crypto/cryptoApi.ts b/src/crypto/cryptoApi.ts
index 139f8ae88..227c3d346 100644
--- a/src/crypto/cryptoApi.ts
+++ b/src/crypto/cryptoApi.ts
@@ -26,8 +26,8 @@
import {
AmountJson,
CoinRecord,
+ ContractTerms,
DenominationRecord,
- ProposalRecord,
PayCoinInfo,
PaybackRequest,
PreCoinRecord,
@@ -277,9 +277,9 @@ export class CryptoApi {
return this.doRpc<PayCoinInfo>("isValidPaymentSignature", 1, sig, contractHash, merchantPub);
}
- signDeposit(proposal: ProposalRecord,
+ signDeposit(contractTerms: ContractTerms,
cds: CoinWithDenom[]): Promise<PayCoinInfo> {
- return this.doRpc<PayCoinInfo>("signDeposit", 3, proposal, cds);
+ return this.doRpc<PayCoinInfo>("signDeposit", 3, contractTerms, cds);
}
createEddsaKeypair(): Promise<{priv: string, pub: string}> {
diff --git a/src/crypto/cryptoWorker.ts b/src/crypto/cryptoWorker.ts
index 507a080ac..b05d7d184 100644
--- a/src/crypto/cryptoWorker.ts
+++ b/src/crypto/cryptoWorker.ts
@@ -28,8 +28,8 @@ import {
CoinPaySig,
CoinRecord,
CoinStatus,
+ ContractTerms,
DenominationRecord,
- ProposalRecord,
PayCoinInfo,
PaybackRequest,
PreCoinRecord,
@@ -39,6 +39,9 @@ import {
WireFee,
} from "../types";
import {
+ canonicalJson,
+} from "../helpers";
+import {
CoinWithDenom,
} from "../wallet";
@@ -227,16 +230,17 @@ namespace RpcFunctions {
* Generate updated coins (to store in the database)
* and deposit permissions for each given coin.
*/
- export function signDeposit(proposal: ProposalRecord,
+ export function signDeposit(contractTerms: ContractTerms,
cds: CoinWithDenom[]): PayCoinInfo {
const ret: PayCoinInfo = [];
+ const contractTermsHash = hashString(canonicalJson(contractTerms));
const feeList: AmountJson[] = cds.map((x) => x.denom.feeDeposit);
let fees = Amounts.add(Amounts.getZero(feeList[0].currency), ...feeList).amount;
// okay if saturates
- fees = Amounts.sub(fees, proposal.contractTerms.max_fee).amount;
- const total = Amounts.add(fees, proposal.contractTerms.amount).amount;
+ fees = Amounts.sub(fees, contractTerms.max_fee).amount;
+ const total = Amounts.add(fees, contractTerms.amount).amount;
const amountSpent = native.Amount.getZero(cds[0].coin.currentAmount.currency);
const amountRemaining = new native.Amount(total);
@@ -273,11 +277,11 @@ namespace RpcFunctions {
amount_with_fee: coinSpend.toNbo(),
coin_pub: native.EddsaPublicKey.fromCrock(cd.coin.coinPub),
deposit_fee: new native.Amount(cd.denom.feeDeposit).toNbo(),
- h_contract: native.HashCode.fromCrock(proposal.contractTermsHash),
- h_wire: native.HashCode.fromCrock(proposal.contractTerms.H_wire),
- merchant: native.EddsaPublicKey.fromCrock(proposal.contractTerms.merchant_pub),
- refund_deadline: native.AbsoluteTimeNbo.fromTalerString(proposal.contractTerms.refund_deadline),
- timestamp: native.AbsoluteTimeNbo.fromTalerString(proposal.contractTerms.timestamp),
+ h_contract: native.HashCode.fromCrock(contractTermsHash),
+ h_wire: native.HashCode.fromCrock(contractTerms.H_wire),
+ merchant: native.EddsaPublicKey.fromCrock(contractTerms.merchant_pub),
+ refund_deadline: native.AbsoluteTimeNbo.fromTalerString(contractTerms.refund_deadline),
+ timestamp: native.AbsoluteTimeNbo.fromTalerString(contractTerms.timestamp),
});
const coinSig = native.eddsaSign(d.toPurpose(),
diff --git a/src/i18n/de.po b/src/i18n/de.po
index 5bf73c8ab..887dc2c47 100644
--- a/src/i18n/de.po
+++ b/src/i18n/de.po
@@ -56,67 +56,67 @@ msgid ""
"wallet."
msgstr ""
-#: src/webex/pages/confirm-create-reserve.tsx:212
+#: src/webex/pages/confirm-create-reserve.tsx:213
#, fuzzy, c-format
msgid "Withdrawal fees:"
msgstr "Abheben bei %1$s"
-#: src/webex/pages/confirm-create-reserve.tsx:213
+#: src/webex/pages/confirm-create-reserve.tsx:214
#, c-format
msgid "Rounding loss:"
msgstr ""
-#: src/webex/pages/confirm-create-reserve.tsx:214
+#: src/webex/pages/confirm-create-reserve.tsx:215
#, c-format
msgid "Earliest expiration (for deposit): %1$s"
msgstr ""
-#: src/webex/pages/confirm-create-reserve.tsx:219
+#: src/webex/pages/confirm-create-reserve.tsx:220
#, c-format
msgid "# Coins"
msgstr ""
-#: src/webex/pages/confirm-create-reserve.tsx:220
+#: src/webex/pages/confirm-create-reserve.tsx:221
#, c-format
msgid "Value"
msgstr ""
-#: src/webex/pages/confirm-create-reserve.tsx:221
+#: src/webex/pages/confirm-create-reserve.tsx:222
#, fuzzy, c-format
msgid "Withdraw Fee"
msgstr "Abheben bei %1$s"
-#: src/webex/pages/confirm-create-reserve.tsx:222
+#: src/webex/pages/confirm-create-reserve.tsx:223
#, c-format
msgid "Refresh Fee"
msgstr ""
-#: src/webex/pages/confirm-create-reserve.tsx:223
+#: src/webex/pages/confirm-create-reserve.tsx:224
#, c-format
msgid "Deposit Fee"
msgstr ""
-#: src/webex/pages/confirm-create-reserve.tsx:276
+#: src/webex/pages/confirm-create-reserve.tsx:278
#, c-format
msgid "Select"
msgstr ""
-#: src/webex/pages/confirm-create-reserve.tsx:292
+#: src/webex/pages/confirm-create-reserve.tsx:294
#, c-format
msgid "Error: URL may not be relative"
msgstr ""
-#: src/webex/pages/confirm-create-reserve.tsx:360
+#: src/webex/pages/confirm-create-reserve.tsx:362
#, c-format
msgid "The exchange is trusted by the wallet.\n"
msgstr ""
-#: src/webex/pages/confirm-create-reserve.tsx:366
+#: src/webex/pages/confirm-create-reserve.tsx:368
#, c-format
msgid "The exchange is audited by a trusted auditor.\n"
msgstr ""
-#: src/webex/pages/confirm-create-reserve.tsx:372
+#: src/webex/pages/confirm-create-reserve.tsx:374
#, c-format
msgid ""
"Warning: The exchange is neither directly trusted nor audited by a trusted "
@@ -124,7 +124,7 @@ msgid ""
"If you withdraw from this exchange, it will be trusted in the future.\n"
msgstr ""
-#: src/webex/pages/confirm-create-reserve.tsx:381
+#: src/webex/pages/confirm-create-reserve.tsx:383
#, c-format
msgid ""
"Using exchange provider%1$s.\n"
@@ -132,151 +132,166 @@ msgid ""
" %2$s in fees.\n"
msgstr ""
-#: src/webex/pages/confirm-create-reserve.tsx:395
+#: src/webex/pages/confirm-create-reserve.tsx:397
#, c-format
msgid ""
"Waiting for a response from\n"
" %1$s"
msgstr ""
-#: src/webex/pages/confirm-create-reserve.tsx:406
+#: src/webex/pages/confirm-create-reserve.tsx:408
#, c-format
msgid "A problem occured, see below. %1$s"
msgstr ""
-#: src/webex/pages/confirm-create-reserve.tsx:412
+#: src/webex/pages/confirm-create-reserve.tsx:414
#, c-format
msgid ""
"Information about fees will be available when an exchange provider is "
"selected."
msgstr ""
-#: src/webex/pages/confirm-create-reserve.tsx:455
+#: src/webex/pages/confirm-create-reserve.tsx:457
#, c-format
msgid "Accept fees and withdraw"
msgstr ""
-#: src/webex/pages/confirm-create-reserve.tsx:460
+#: src/webex/pages/confirm-create-reserve.tsx:462
#, c-format
msgid "Change Exchange Provider"
msgstr ""
-#: src/webex/pages/confirm-create-reserve.tsx:517
+#: src/webex/pages/confirm-create-reserve.tsx:519
#, c-format
msgid "You are about to withdraw %1$s from your bank account into your wallet."
msgstr ""
-#: src/webex/pages/confirm-create-reserve.tsx:600
+#: src/webex/pages/confirm-create-reserve.tsx:607
#, c-format
msgid ""
"Oops, something went wrong. The wallet responded with error status (%1$s)."
msgstr ""
-#: src/webex/pages/confirm-create-reserve.tsx:611
+#: src/webex/pages/confirm-create-reserve.tsx:616
#, c-format
msgid "Checking URL, please wait ..."
msgstr ""
-#: src/webex/pages/confirm-create-reserve.tsx:625
+#: src/webex/pages/confirm-create-reserve.tsx:630
#, c-format
msgid "Can't parse amount: %1$s"
msgstr ""
-#: src/webex/pages/confirm-create-reserve.tsx:632
+#: src/webex/pages/confirm-create-reserve.tsx:637
#, c-format
msgid "Can't parse wire_types: %1$s"
msgstr ""
#. TODO:generic error reporting function or component.
-#: src/webex/pages/confirm-create-reserve.tsx:652
+#: src/webex/pages/confirm-create-reserve.tsx:663
#, c-format
msgid "Fatal error: \"%1$s\"."
msgstr ""
-#: src/webex/pages/popup.tsx:160
+#: src/webex/pages/popup.tsx:161
#, c-format
msgid "Balance"
msgstr "Saldo"
-#: src/webex/pages/popup.tsx:163
+#: src/webex/pages/popup.tsx:164
#, c-format
msgid "History"
msgstr "Verlauf"
-#: src/webex/pages/popup.tsx:166
+#: src/webex/pages/popup.tsx:167
#, c-format
msgid "Debug"
msgstr "Debug"
-#: src/webex/pages/popup.tsx:242
+#: src/webex/pages/popup.tsx:247
#, c-format
msgid "help"
msgstr ""
-#: src/webex/pages/popup.tsx:247
+#: src/webex/pages/popup.tsx:252
#, fuzzy, c-format
msgid ""
"You have no balance to show. Need some\n"
" %1$s getting started?\n"
msgstr "Sie haben kein Digitalgeld. Wollen Sie %1$s? abheben?"
-#: src/webex/pages/popup.tsx:264
+#: src/webex/pages/popup.tsx:269
#, c-format
msgid "%1$s incoming\n"
msgstr ""
-#: src/webex/pages/popup.tsx:277
+#: src/webex/pages/popup.tsx:282
#, c-format
msgid "%1$s being spent\n"
msgstr ""
-#: src/webex/pages/popup.tsx:303
+#: src/webex/pages/popup.tsx:308
#, c-format
msgid "Error: could not retrieve balance information."
msgstr ""
-#: src/webex/pages/popup.tsx:342
+#: src/webex/pages/popup.tsx:335
+#, c-format
+msgid "Payback"
+msgstr ""
+
+#: src/webex/pages/popup.tsx:336
+#, c-format
+msgid "Return Electronic Cash to Bank Account"
+msgstr ""
+
+#: src/webex/pages/popup.tsx:337
+#, c-format
+msgid "Manage Trusted Auditors and Exchanges"
+msgstr ""
+
+#: src/webex/pages/popup.tsx:349
#, fuzzy, c-format
msgid ""
"Bank requested reserve (%1$s) for\n"
" %2$s.\n"
msgstr "Bank bestätig anlegen der Reserve (%1$s) bei %2$s"
-#: src/webex/pages/popup.tsx:353
+#: src/webex/pages/popup.tsx:360
#, fuzzy, c-format
msgid ""
"Started to withdraw\n"
" %1$s from%2$s(%3$s).\n"
msgstr "Reserve (%1$s) mit %2$s bei %3$s erzeugt"
-#: src/webex/pages/popup.tsx:363
+#: src/webex/pages/popup.tsx:370
#, c-format
msgid "Merchant%1$soffered contract%2$s;\n"
msgstr ""
-#: src/webex/pages/popup.tsx:373
+#: src/webex/pages/popup.tsx:380
#, fuzzy, c-format
msgid "Withdrew%1$sfrom%2$s(%3$s).\n"
msgstr "Reserve (%1$s) mit %2$s bei %3$s erzeugt"
-#: src/webex/pages/popup.tsx:383
+#: src/webex/pages/popup.tsx:390
#, fuzzy, c-format
msgid ""
"Paid%1$sto merchant%2$s.\n"
" (%3$s)\n"
msgstr "Reserve (%1$s) mit %2$s bei %3$s erzeugt"
-#: src/webex/pages/popup.tsx:392
+#: src/webex/pages/popup.tsx:399
#, c-format
msgid "Unknown event (%1$s)"
msgstr ""
-#: src/webex/pages/popup.tsx:435
+#: src/webex/pages/popup.tsx:442
#, c-format
msgid "Error: could not retrieve event history"
msgstr ""
-#: src/webex/pages/popup.tsx:469
+#: src/webex/pages/popup.tsx:476
#, c-format
msgid "Your wallet has no events recorded."
msgstr "Ihre Geldbörse verzeichnet keine Vorkommnisse."
diff --git a/src/i18n/en-US.po b/src/i18n/en-US.po
index e548014e6..ec879f580 100644
--- a/src/i18n/en-US.po
+++ b/src/i18n/en-US.po
@@ -56,67 +56,67 @@ msgid ""
"wallet."
msgstr ""
-#: src/webex/pages/confirm-create-reserve.tsx:212
+#: src/webex/pages/confirm-create-reserve.tsx:213
#, c-format
msgid "Withdrawal fees:"
msgstr ""
-#: src/webex/pages/confirm-create-reserve.tsx:213
+#: src/webex/pages/confirm-create-reserve.tsx:214
#, c-format
msgid "Rounding loss:"
msgstr ""
-#: src/webex/pages/confirm-create-reserve.tsx:214
+#: src/webex/pages/confirm-create-reserve.tsx:215
#, c-format
msgid "Earliest expiration (for deposit): %1$s"
msgstr ""
-#: src/webex/pages/confirm-create-reserve.tsx:219
+#: src/webex/pages/confirm-create-reserve.tsx:220
#, c-format
msgid "# Coins"
msgstr ""
-#: src/webex/pages/confirm-create-reserve.tsx:220
+#: src/webex/pages/confirm-create-reserve.tsx:221
#, c-format
msgid "Value"
msgstr ""
-#: src/webex/pages/confirm-create-reserve.tsx:221
+#: src/webex/pages/confirm-create-reserve.tsx:222
#, c-format
msgid "Withdraw Fee"
msgstr ""
-#: src/webex/pages/confirm-create-reserve.tsx:222
+#: src/webex/pages/confirm-create-reserve.tsx:223
#, c-format
msgid "Refresh Fee"
msgstr ""
-#: src/webex/pages/confirm-create-reserve.tsx:223
+#: src/webex/pages/confirm-create-reserve.tsx:224
#, c-format
msgid "Deposit Fee"
msgstr ""
-#: src/webex/pages/confirm-create-reserve.tsx:276
+#: src/webex/pages/confirm-create-reserve.tsx:278
#, c-format
msgid "Select"
msgstr ""
-#: src/webex/pages/confirm-create-reserve.tsx:292
+#: src/webex/pages/confirm-create-reserve.tsx:294
#, c-format
msgid "Error: URL may not be relative"
msgstr ""
-#: src/webex/pages/confirm-create-reserve.tsx:360
+#: src/webex/pages/confirm-create-reserve.tsx:362
#, c-format
msgid "The exchange is trusted by the wallet.\n"
msgstr ""
-#: src/webex/pages/confirm-create-reserve.tsx:366
+#: src/webex/pages/confirm-create-reserve.tsx:368
#, c-format
msgid "The exchange is audited by a trusted auditor.\n"
msgstr ""
-#: src/webex/pages/confirm-create-reserve.tsx:372
+#: src/webex/pages/confirm-create-reserve.tsx:374
#, c-format
msgid ""
"Warning: The exchange is neither directly trusted nor audited by a trusted "
@@ -124,7 +124,7 @@ msgid ""
"If you withdraw from this exchange, it will be trusted in the future.\n"
msgstr ""
-#: src/webex/pages/confirm-create-reserve.tsx:381
+#: src/webex/pages/confirm-create-reserve.tsx:383
#, c-format
msgid ""
"Using exchange provider%1$s.\n"
@@ -132,151 +132,166 @@ msgid ""
" %2$s in fees.\n"
msgstr ""
-#: src/webex/pages/confirm-create-reserve.tsx:395
+#: src/webex/pages/confirm-create-reserve.tsx:397
#, c-format
msgid ""
"Waiting for a response from\n"
" %1$s"
msgstr ""
-#: src/webex/pages/confirm-create-reserve.tsx:406
+#: src/webex/pages/confirm-create-reserve.tsx:408
#, c-format
msgid "A problem occured, see below. %1$s"
msgstr ""
-#: src/webex/pages/confirm-create-reserve.tsx:412
+#: src/webex/pages/confirm-create-reserve.tsx:414
#, c-format
msgid ""
"Information about fees will be available when an exchange provider is "
"selected."
msgstr ""
-#: src/webex/pages/confirm-create-reserve.tsx:455
+#: src/webex/pages/confirm-create-reserve.tsx:457
#, c-format
msgid "Accept fees and withdraw"
msgstr ""
-#: src/webex/pages/confirm-create-reserve.tsx:460
+#: src/webex/pages/confirm-create-reserve.tsx:462
#, c-format
msgid "Change Exchange Provider"
msgstr ""
-#: src/webex/pages/confirm-create-reserve.tsx:517
+#: src/webex/pages/confirm-create-reserve.tsx:519
#, c-format
msgid "You are about to withdraw %1$s from your bank account into your wallet."
msgstr ""
-#: src/webex/pages/confirm-create-reserve.tsx:600
+#: src/webex/pages/confirm-create-reserve.tsx:607
#, c-format
msgid ""
"Oops, something went wrong. The wallet responded with error status (%1$s)."
msgstr ""
-#: src/webex/pages/confirm-create-reserve.tsx:611
+#: src/webex/pages/confirm-create-reserve.tsx:616
#, c-format
msgid "Checking URL, please wait ..."
msgstr ""
-#: src/webex/pages/confirm-create-reserve.tsx:625
+#: src/webex/pages/confirm-create-reserve.tsx:630
#, c-format
msgid "Can't parse amount: %1$s"
msgstr ""
-#: src/webex/pages/confirm-create-reserve.tsx:632
+#: src/webex/pages/confirm-create-reserve.tsx:637
#, c-format
msgid "Can't parse wire_types: %1$s"
msgstr ""
#. TODO:generic error reporting function or component.
-#: src/webex/pages/confirm-create-reserve.tsx:652
+#: src/webex/pages/confirm-create-reserve.tsx:663
#, c-format
msgid "Fatal error: \"%1$s\"."
msgstr ""
-#: src/webex/pages/popup.tsx:160
+#: src/webex/pages/popup.tsx:161
#, c-format
msgid "Balance"
msgstr ""
-#: src/webex/pages/popup.tsx:163
+#: src/webex/pages/popup.tsx:164
#, c-format
msgid "History"
msgstr ""
-#: src/webex/pages/popup.tsx:166
+#: src/webex/pages/popup.tsx:167
#, c-format
msgid "Debug"
msgstr ""
-#: src/webex/pages/popup.tsx:242
+#: src/webex/pages/popup.tsx:247
#, c-format
msgid "help"
msgstr ""
-#: src/webex/pages/popup.tsx:247
+#: src/webex/pages/popup.tsx:252
#, c-format
msgid ""
"You have no balance to show. Need some\n"
" %1$s getting started?\n"
msgstr ""
-#: src/webex/pages/popup.tsx:264
+#: src/webex/pages/popup.tsx:269
#, c-format
msgid "%1$s incoming\n"
msgstr ""
-#: src/webex/pages/popup.tsx:277
+#: src/webex/pages/popup.tsx:282
#, c-format
msgid "%1$s being spent\n"
msgstr ""
-#: src/webex/pages/popup.tsx:303
+#: src/webex/pages/popup.tsx:308
#, c-format
msgid "Error: could not retrieve balance information."
msgstr ""
-#: src/webex/pages/popup.tsx:342
+#: src/webex/pages/popup.tsx:335
+#, c-format
+msgid "Payback"
+msgstr ""
+
+#: src/webex/pages/popup.tsx:336
+#, c-format
+msgid "Return Electronic Cash to Bank Account"
+msgstr ""
+
+#: src/webex/pages/popup.tsx:337
+#, c-format
+msgid "Manage Trusted Auditors and Exchanges"
+msgstr ""
+
+#: src/webex/pages/popup.tsx:349
#, c-format
msgid ""
"Bank requested reserve (%1$s) for\n"
" %2$s.\n"
msgstr ""
-#: src/webex/pages/popup.tsx:353
+#: src/webex/pages/popup.tsx:360
#, c-format
msgid ""
"Started to withdraw\n"
" %1$s from%2$s(%3$s).\n"
msgstr ""
-#: src/webex/pages/popup.tsx:363
+#: src/webex/pages/popup.tsx:370
#, c-format
msgid "Merchant%1$soffered contract%2$s;\n"
msgstr ""
-#: src/webex/pages/popup.tsx:373
+#: src/webex/pages/popup.tsx:380
#, c-format
msgid "Withdrew%1$sfrom%2$s(%3$s).\n"
msgstr ""
-#: src/webex/pages/popup.tsx:383
+#: src/webex/pages/popup.tsx:390
#, c-format
msgid ""
"Paid%1$sto merchant%2$s.\n"
" (%3$s)\n"
msgstr ""
-#: src/webex/pages/popup.tsx:392
+#: src/webex/pages/popup.tsx:399
#, c-format
msgid "Unknown event (%1$s)"
msgstr ""
-#: src/webex/pages/popup.tsx:435
+#: src/webex/pages/popup.tsx:442
#, c-format
msgid "Error: could not retrieve event history"
msgstr ""
-#: src/webex/pages/popup.tsx:469
+#: src/webex/pages/popup.tsx:476
#, c-format
msgid "Your wallet has no events recorded."
msgstr ""
diff --git a/src/i18n/fr.po b/src/i18n/fr.po
index da860ad8f..705b1cba6 100644
--- a/src/i18n/fr.po
+++ b/src/i18n/fr.po
@@ -56,67 +56,67 @@ msgid ""
"wallet."
msgstr ""
-#: src/webex/pages/confirm-create-reserve.tsx:212
+#: src/webex/pages/confirm-create-reserve.tsx:213
#, c-format
msgid "Withdrawal fees:"
msgstr ""
-#: src/webex/pages/confirm-create-reserve.tsx:213
+#: src/webex/pages/confirm-create-reserve.tsx:214
#, c-format
msgid "Rounding loss:"
msgstr ""
-#: src/webex/pages/confirm-create-reserve.tsx:214
+#: src/webex/pages/confirm-create-reserve.tsx:215
#, c-format
msgid "Earliest expiration (for deposit): %1$s"
msgstr ""
-#: src/webex/pages/confirm-create-reserve.tsx:219
+#: src/webex/pages/confirm-create-reserve.tsx:220
#, c-format
msgid "# Coins"
msgstr ""
-#: src/webex/pages/confirm-create-reserve.tsx:220
+#: src/webex/pages/confirm-create-reserve.tsx:221
#, c-format
msgid "Value"
msgstr ""
-#: src/webex/pages/confirm-create-reserve.tsx:221
+#: src/webex/pages/confirm-create-reserve.tsx:222
#, c-format
msgid "Withdraw Fee"
msgstr ""
-#: src/webex/pages/confirm-create-reserve.tsx:222
+#: src/webex/pages/confirm-create-reserve.tsx:223
#, c-format
msgid "Refresh Fee"
msgstr ""
-#: src/webex/pages/confirm-create-reserve.tsx:223
+#: src/webex/pages/confirm-create-reserve.tsx:224
#, c-format
msgid "Deposit Fee"
msgstr ""
-#: src/webex/pages/confirm-create-reserve.tsx:276
+#: src/webex/pages/confirm-create-reserve.tsx:278
#, c-format
msgid "Select"
msgstr ""
-#: src/webex/pages/confirm-create-reserve.tsx:292
+#: src/webex/pages/confirm-create-reserve.tsx:294
#, c-format
msgid "Error: URL may not be relative"
msgstr ""
-#: src/webex/pages/confirm-create-reserve.tsx:360
+#: src/webex/pages/confirm-create-reserve.tsx:362
#, c-format
msgid "The exchange is trusted by the wallet.\n"
msgstr ""
-#: src/webex/pages/confirm-create-reserve.tsx:366
+#: src/webex/pages/confirm-create-reserve.tsx:368
#, c-format
msgid "The exchange is audited by a trusted auditor.\n"
msgstr ""
-#: src/webex/pages/confirm-create-reserve.tsx:372
+#: src/webex/pages/confirm-create-reserve.tsx:374
#, c-format
msgid ""
"Warning: The exchange is neither directly trusted nor audited by a trusted "
@@ -124,7 +124,7 @@ msgid ""
"If you withdraw from this exchange, it will be trusted in the future.\n"
msgstr ""
-#: src/webex/pages/confirm-create-reserve.tsx:381
+#: src/webex/pages/confirm-create-reserve.tsx:383
#, c-format
msgid ""
"Using exchange provider%1$s.\n"
@@ -132,151 +132,166 @@ msgid ""
" %2$s in fees.\n"
msgstr ""
-#: src/webex/pages/confirm-create-reserve.tsx:395
+#: src/webex/pages/confirm-create-reserve.tsx:397
#, c-format
msgid ""
"Waiting for a response from\n"
" %1$s"
msgstr ""
-#: src/webex/pages/confirm-create-reserve.tsx:406
+#: src/webex/pages/confirm-create-reserve.tsx:408
#, c-format
msgid "A problem occured, see below. %1$s"
msgstr ""
-#: src/webex/pages/confirm-create-reserve.tsx:412
+#: src/webex/pages/confirm-create-reserve.tsx:414
#, c-format
msgid ""
"Information about fees will be available when an exchange provider is "
"selected."
msgstr ""
-#: src/webex/pages/confirm-create-reserve.tsx:455
+#: src/webex/pages/confirm-create-reserve.tsx:457
#, c-format
msgid "Accept fees and withdraw"
msgstr ""
-#: src/webex/pages/confirm-create-reserve.tsx:460
+#: src/webex/pages/confirm-create-reserve.tsx:462
#, c-format
msgid "Change Exchange Provider"
msgstr ""
-#: src/webex/pages/confirm-create-reserve.tsx:517
+#: src/webex/pages/confirm-create-reserve.tsx:519
#, c-format
msgid "You are about to withdraw %1$s from your bank account into your wallet."
msgstr ""
-#: src/webex/pages/confirm-create-reserve.tsx:600
+#: src/webex/pages/confirm-create-reserve.tsx:607
#, c-format
msgid ""
"Oops, something went wrong. The wallet responded with error status (%1$s)."
msgstr ""
-#: src/webex/pages/confirm-create-reserve.tsx:611
+#: src/webex/pages/confirm-create-reserve.tsx:616
#, c-format
msgid "Checking URL, please wait ..."
msgstr ""
-#: src/webex/pages/confirm-create-reserve.tsx:625
+#: src/webex/pages/confirm-create-reserve.tsx:630
#, c-format
msgid "Can't parse amount: %1$s"
msgstr ""
-#: src/webex/pages/confirm-create-reserve.tsx:632
+#: src/webex/pages/confirm-create-reserve.tsx:637
#, c-format
msgid "Can't parse wire_types: %1$s"
msgstr ""
#. TODO:generic error reporting function or component.
-#: src/webex/pages/confirm-create-reserve.tsx:652
+#: src/webex/pages/confirm-create-reserve.tsx:663
#, c-format
msgid "Fatal error: \"%1$s\"."
msgstr ""
-#: src/webex/pages/popup.tsx:160
+#: src/webex/pages/popup.tsx:161
#, c-format
msgid "Balance"
msgstr ""
-#: src/webex/pages/popup.tsx:163
+#: src/webex/pages/popup.tsx:164
#, c-format
msgid "History"
msgstr ""
-#: src/webex/pages/popup.tsx:166
+#: src/webex/pages/popup.tsx:167
#, c-format
msgid "Debug"
msgstr ""
-#: src/webex/pages/popup.tsx:242
+#: src/webex/pages/popup.tsx:247
#, c-format
msgid "help"
msgstr ""
-#: src/webex/pages/popup.tsx:247
+#: src/webex/pages/popup.tsx:252
#, c-format
msgid ""
"You have no balance to show. Need some\n"
" %1$s getting started?\n"
msgstr ""
-#: src/webex/pages/popup.tsx:264
+#: src/webex/pages/popup.tsx:269
#, c-format
msgid "%1$s incoming\n"
msgstr ""
-#: src/webex/pages/popup.tsx:277
+#: src/webex/pages/popup.tsx:282
#, c-format
msgid "%1$s being spent\n"
msgstr ""
-#: src/webex/pages/popup.tsx:303
+#: src/webex/pages/popup.tsx:308
#, c-format
msgid "Error: could not retrieve balance information."
msgstr ""
-#: src/webex/pages/popup.tsx:342
+#: src/webex/pages/popup.tsx:335
+#, c-format
+msgid "Payback"
+msgstr ""
+
+#: src/webex/pages/popup.tsx:336
+#, c-format
+msgid "Return Electronic Cash to Bank Account"
+msgstr ""
+
+#: src/webex/pages/popup.tsx:337
+#, c-format
+msgid "Manage Trusted Auditors and Exchanges"
+msgstr ""
+
+#: src/webex/pages/popup.tsx:349
#, c-format
msgid ""
"Bank requested reserve (%1$s) for\n"
" %2$s.\n"
msgstr ""
-#: src/webex/pages/popup.tsx:353
+#: src/webex/pages/popup.tsx:360
#, c-format
msgid ""
"Started to withdraw\n"
" %1$s from%2$s(%3$s).\n"
msgstr ""
-#: src/webex/pages/popup.tsx:363
+#: src/webex/pages/popup.tsx:370
#, c-format
msgid "Merchant%1$soffered contract%2$s;\n"
msgstr ""
-#: src/webex/pages/popup.tsx:373
+#: src/webex/pages/popup.tsx:380
#, c-format
msgid "Withdrew%1$sfrom%2$s(%3$s).\n"
msgstr ""
-#: src/webex/pages/popup.tsx:383
+#: src/webex/pages/popup.tsx:390
#, c-format
msgid ""
"Paid%1$sto merchant%2$s.\n"
" (%3$s)\n"
msgstr ""
-#: src/webex/pages/popup.tsx:392
+#: src/webex/pages/popup.tsx:399
#, c-format
msgid "Unknown event (%1$s)"
msgstr ""
-#: src/webex/pages/popup.tsx:435
+#: src/webex/pages/popup.tsx:442
#, c-format
msgid "Error: could not retrieve event history"
msgstr ""
-#: src/webex/pages/popup.tsx:469
+#: src/webex/pages/popup.tsx:476
#, c-format
msgid "Your wallet has no events recorded."
msgstr ""
diff --git a/src/i18n/it.po b/src/i18n/it.po
index da860ad8f..705b1cba6 100644
--- a/src/i18n/it.po
+++ b/src/i18n/it.po
@@ -56,67 +56,67 @@ msgid ""
"wallet."
msgstr ""
-#: src/webex/pages/confirm-create-reserve.tsx:212
+#: src/webex/pages/confirm-create-reserve.tsx:213
#, c-format
msgid "Withdrawal fees:"
msgstr ""
-#: src/webex/pages/confirm-create-reserve.tsx:213
+#: src/webex/pages/confirm-create-reserve.tsx:214
#, c-format
msgid "Rounding loss:"
msgstr ""
-#: src/webex/pages/confirm-create-reserve.tsx:214
+#: src/webex/pages/confirm-create-reserve.tsx:215
#, c-format
msgid "Earliest expiration (for deposit): %1$s"
msgstr ""
-#: src/webex/pages/confirm-create-reserve.tsx:219
+#: src/webex/pages/confirm-create-reserve.tsx:220
#, c-format
msgid "# Coins"
msgstr ""
-#: src/webex/pages/confirm-create-reserve.tsx:220
+#: src/webex/pages/confirm-create-reserve.tsx:221
#, c-format
msgid "Value"
msgstr ""
-#: src/webex/pages/confirm-create-reserve.tsx:221
+#: src/webex/pages/confirm-create-reserve.tsx:222
#, c-format
msgid "Withdraw Fee"
msgstr ""
-#: src/webex/pages/confirm-create-reserve.tsx:222
+#: src/webex/pages/confirm-create-reserve.tsx:223
#, c-format
msgid "Refresh Fee"
msgstr ""
-#: src/webex/pages/confirm-create-reserve.tsx:223
+#: src/webex/pages/confirm-create-reserve.tsx:224
#, c-format
msgid "Deposit Fee"
msgstr ""
-#: src/webex/pages/confirm-create-reserve.tsx:276
+#: src/webex/pages/confirm-create-reserve.tsx:278
#, c-format
msgid "Select"
msgstr ""
-#: src/webex/pages/confirm-create-reserve.tsx:292
+#: src/webex/pages/confirm-create-reserve.tsx:294
#, c-format
msgid "Error: URL may not be relative"
msgstr ""
-#: src/webex/pages/confirm-create-reserve.tsx:360
+#: src/webex/pages/confirm-create-reserve.tsx:362
#, c-format
msgid "The exchange is trusted by the wallet.\n"
msgstr ""
-#: src/webex/pages/confirm-create-reserve.tsx:366
+#: src/webex/pages/confirm-create-reserve.tsx:368
#, c-format
msgid "The exchange is audited by a trusted auditor.\n"
msgstr ""
-#: src/webex/pages/confirm-create-reserve.tsx:372
+#: src/webex/pages/confirm-create-reserve.tsx:374
#, c-format
msgid ""
"Warning: The exchange is neither directly trusted nor audited by a trusted "
@@ -124,7 +124,7 @@ msgid ""
"If you withdraw from this exchange, it will be trusted in the future.\n"
msgstr ""
-#: src/webex/pages/confirm-create-reserve.tsx:381
+#: src/webex/pages/confirm-create-reserve.tsx:383
#, c-format
msgid ""
"Using exchange provider%1$s.\n"
@@ -132,151 +132,166 @@ msgid ""
" %2$s in fees.\n"
msgstr ""
-#: src/webex/pages/confirm-create-reserve.tsx:395
+#: src/webex/pages/confirm-create-reserve.tsx:397
#, c-format
msgid ""
"Waiting for a response from\n"
" %1$s"
msgstr ""
-#: src/webex/pages/confirm-create-reserve.tsx:406
+#: src/webex/pages/confirm-create-reserve.tsx:408
#, c-format
msgid "A problem occured, see below. %1$s"
msgstr ""
-#: src/webex/pages/confirm-create-reserve.tsx:412
+#: src/webex/pages/confirm-create-reserve.tsx:414
#, c-format
msgid ""
"Information about fees will be available when an exchange provider is "
"selected."
msgstr ""
-#: src/webex/pages/confirm-create-reserve.tsx:455
+#: src/webex/pages/confirm-create-reserve.tsx:457
#, c-format
msgid "Accept fees and withdraw"
msgstr ""
-#: src/webex/pages/confirm-create-reserve.tsx:460
+#: src/webex/pages/confirm-create-reserve.tsx:462
#, c-format
msgid "Change Exchange Provider"
msgstr ""
-#: src/webex/pages/confirm-create-reserve.tsx:517
+#: src/webex/pages/confirm-create-reserve.tsx:519
#, c-format
msgid "You are about to withdraw %1$s from your bank account into your wallet."
msgstr ""
-#: src/webex/pages/confirm-create-reserve.tsx:600
+#: src/webex/pages/confirm-create-reserve.tsx:607
#, c-format
msgid ""
"Oops, something went wrong. The wallet responded with error status (%1$s)."
msgstr ""
-#: src/webex/pages/confirm-create-reserve.tsx:611
+#: src/webex/pages/confirm-create-reserve.tsx:616
#, c-format
msgid "Checking URL, please wait ..."
msgstr ""
-#: src/webex/pages/confirm-create-reserve.tsx:625
+#: src/webex/pages/confirm-create-reserve.tsx:630
#, c-format
msgid "Can't parse amount: %1$s"
msgstr ""
-#: src/webex/pages/confirm-create-reserve.tsx:632
+#: src/webex/pages/confirm-create-reserve.tsx:637
#, c-format
msgid "Can't parse wire_types: %1$s"
msgstr ""
#. TODO:generic error reporting function or component.
-#: src/webex/pages/confirm-create-reserve.tsx:652
+#: src/webex/pages/confirm-create-reserve.tsx:663
#, c-format
msgid "Fatal error: \"%1$s\"."
msgstr ""
-#: src/webex/pages/popup.tsx:160
+#: src/webex/pages/popup.tsx:161
#, c-format
msgid "Balance"
msgstr ""
-#: src/webex/pages/popup.tsx:163
+#: src/webex/pages/popup.tsx:164
#, c-format
msgid "History"
msgstr ""
-#: src/webex/pages/popup.tsx:166
+#: src/webex/pages/popup.tsx:167
#, c-format
msgid "Debug"
msgstr ""
-#: src/webex/pages/popup.tsx:242
+#: src/webex/pages/popup.tsx:247
#, c-format
msgid "help"
msgstr ""
-#: src/webex/pages/popup.tsx:247
+#: src/webex/pages/popup.tsx:252
#, c-format
msgid ""
"You have no balance to show. Need some\n"
" %1$s getting started?\n"
msgstr ""
-#: src/webex/pages/popup.tsx:264
+#: src/webex/pages/popup.tsx:269
#, c-format
msgid "%1$s incoming\n"
msgstr ""
-#: src/webex/pages/popup.tsx:277
+#: src/webex/pages/popup.tsx:282
#, c-format
msgid "%1$s being spent\n"
msgstr ""
-#: src/webex/pages/popup.tsx:303
+#: src/webex/pages/popup.tsx:308
#, c-format
msgid "Error: could not retrieve balance information."
msgstr ""
-#: src/webex/pages/popup.tsx:342
+#: src/webex/pages/popup.tsx:335
+#, c-format
+msgid "Payback"
+msgstr ""
+
+#: src/webex/pages/popup.tsx:336
+#, c-format
+msgid "Return Electronic Cash to Bank Account"
+msgstr ""
+
+#: src/webex/pages/popup.tsx:337
+#, c-format
+msgid "Manage Trusted Auditors and Exchanges"
+msgstr ""
+
+#: src/webex/pages/popup.tsx:349
#, c-format
msgid ""
"Bank requested reserve (%1$s) for\n"
" %2$s.\n"
msgstr ""
-#: src/webex/pages/popup.tsx:353
+#: src/webex/pages/popup.tsx:360
#, c-format
msgid ""
"Started to withdraw\n"
" %1$s from%2$s(%3$s).\n"
msgstr ""
-#: src/webex/pages/popup.tsx:363
+#: src/webex/pages/popup.tsx:370
#, c-format
msgid "Merchant%1$soffered contract%2$s;\n"
msgstr ""
-#: src/webex/pages/popup.tsx:373
+#: src/webex/pages/popup.tsx:380
#, c-format
msgid "Withdrew%1$sfrom%2$s(%3$s).\n"
msgstr ""
-#: src/webex/pages/popup.tsx:383
+#: src/webex/pages/popup.tsx:390
#, c-format
msgid ""
"Paid%1$sto merchant%2$s.\n"
" (%3$s)\n"
msgstr ""
-#: src/webex/pages/popup.tsx:392
+#: src/webex/pages/popup.tsx:399
#, c-format
msgid "Unknown event (%1$s)"
msgstr ""
-#: src/webex/pages/popup.tsx:435
+#: src/webex/pages/popup.tsx:442
#, c-format
msgid "Error: could not retrieve event history"
msgstr ""
-#: src/webex/pages/popup.tsx:469
+#: src/webex/pages/popup.tsx:476
#, c-format
msgid "Your wallet has no events recorded."
msgstr ""
diff --git a/src/i18n/strings.ts b/src/i18n/strings.ts
index 242fecf5f..aa883403e 100644
--- a/src/i18n/strings.ts
+++ b/src/i18n/strings.ts
@@ -138,6 +138,15 @@ strings['de'] = {
"Error: could not retrieve balance information.": [
""
],
+ "Payback": [
+ ""
+ ],
+ "Return Electronic Cash to Bank Account": [
+ ""
+ ],
+ "Manage Trusted Auditors and Exchanges": [
+ ""
+ ],
"Bank requested reserve (%1$s) for\n %2$s.\n": [
"Bank bestätig anlegen der Reserve (%1$s) bei %2$s"
],
@@ -294,6 +303,15 @@ strings['en-US'] = {
"Error: could not retrieve balance information.": [
""
],
+ "Payback": [
+ ""
+ ],
+ "Return Electronic Cash to Bank Account": [
+ ""
+ ],
+ "Manage Trusted Auditors and Exchanges": [
+ ""
+ ],
"Bank requested reserve (%1$s) for\n %2$s.\n": [
""
],
@@ -450,6 +468,15 @@ strings['fr'] = {
"Error: could not retrieve balance information.": [
""
],
+ "Payback": [
+ ""
+ ],
+ "Return Electronic Cash to Bank Account": [
+ ""
+ ],
+ "Manage Trusted Auditors and Exchanges": [
+ ""
+ ],
"Bank requested reserve (%1$s) for\n %2$s.\n": [
""
],
@@ -606,6 +633,15 @@ strings['it'] = {
"Error: could not retrieve balance information.": [
""
],
+ "Payback": [
+ ""
+ ],
+ "Return Electronic Cash to Bank Account": [
+ ""
+ ],
+ "Manage Trusted Auditors and Exchanges": [
+ ""
+ ],
"Bank requested reserve (%1$s) for\n %2$s.\n": [
""
],
diff --git a/src/i18n/taler-wallet-webex.pot b/src/i18n/taler-wallet-webex.pot
index da860ad8f..705b1cba6 100644
--- a/src/i18n/taler-wallet-webex.pot
+++ b/src/i18n/taler-wallet-webex.pot
@@ -56,67 +56,67 @@ msgid ""
"wallet."
msgstr ""
-#: src/webex/pages/confirm-create-reserve.tsx:212
+#: src/webex/pages/confirm-create-reserve.tsx:213
#, c-format
msgid "Withdrawal fees:"
msgstr ""
-#: src/webex/pages/confirm-create-reserve.tsx:213
+#: src/webex/pages/confirm-create-reserve.tsx:214
#, c-format
msgid "Rounding loss:"
msgstr ""
-#: src/webex/pages/confirm-create-reserve.tsx:214
+#: src/webex/pages/confirm-create-reserve.tsx:215
#, c-format
msgid "Earliest expiration (for deposit): %1$s"
msgstr ""
-#: src/webex/pages/confirm-create-reserve.tsx:219
+#: src/webex/pages/confirm-create-reserve.tsx:220
#, c-format
msgid "# Coins"
msgstr ""
-#: src/webex/pages/confirm-create-reserve.tsx:220
+#: src/webex/pages/confirm-create-reserve.tsx:221
#, c-format
msgid "Value"
msgstr ""
-#: src/webex/pages/confirm-create-reserve.tsx:221
+#: src/webex/pages/confirm-create-reserve.tsx:222
#, c-format
msgid "Withdraw Fee"
msgstr ""
-#: src/webex/pages/confirm-create-reserve.tsx:222
+#: src/webex/pages/confirm-create-reserve.tsx:223
#, c-format
msgid "Refresh Fee"
msgstr ""
-#: src/webex/pages/confirm-create-reserve.tsx:223
+#: src/webex/pages/confirm-create-reserve.tsx:224
#, c-format
msgid "Deposit Fee"
msgstr ""
-#: src/webex/pages/confirm-create-reserve.tsx:276
+#: src/webex/pages/confirm-create-reserve.tsx:278
#, c-format
msgid "Select"
msgstr ""
-#: src/webex/pages/confirm-create-reserve.tsx:292
+#: src/webex/pages/confirm-create-reserve.tsx:294
#, c-format
msgid "Error: URL may not be relative"
msgstr ""
-#: src/webex/pages/confirm-create-reserve.tsx:360
+#: src/webex/pages/confirm-create-reserve.tsx:362
#, c-format
msgid "The exchange is trusted by the wallet.\n"
msgstr ""
-#: src/webex/pages/confirm-create-reserve.tsx:366
+#: src/webex/pages/confirm-create-reserve.tsx:368
#, c-format
msgid "The exchange is audited by a trusted auditor.\n"
msgstr ""
-#: src/webex/pages/confirm-create-reserve.tsx:372
+#: src/webex/pages/confirm-create-reserve.tsx:374
#, c-format
msgid ""
"Warning: The exchange is neither directly trusted nor audited by a trusted "
@@ -124,7 +124,7 @@ msgid ""
"If you withdraw from this exchange, it will be trusted in the future.\n"
msgstr ""
-#: src/webex/pages/confirm-create-reserve.tsx:381
+#: src/webex/pages/confirm-create-reserve.tsx:383
#, c-format
msgid ""
"Using exchange provider%1$s.\n"
@@ -132,151 +132,166 @@ msgid ""
" %2$s in fees.\n"
msgstr ""
-#: src/webex/pages/confirm-create-reserve.tsx:395
+#: src/webex/pages/confirm-create-reserve.tsx:397
#, c-format
msgid ""
"Waiting for a response from\n"
" %1$s"
msgstr ""
-#: src/webex/pages/confirm-create-reserve.tsx:406
+#: src/webex/pages/confirm-create-reserve.tsx:408
#, c-format
msgid "A problem occured, see below. %1$s"
msgstr ""
-#: src/webex/pages/confirm-create-reserve.tsx:412
+#: src/webex/pages/confirm-create-reserve.tsx:414
#, c-format
msgid ""
"Information about fees will be available when an exchange provider is "
"selected."
msgstr ""
-#: src/webex/pages/confirm-create-reserve.tsx:455
+#: src/webex/pages/confirm-create-reserve.tsx:457
#, c-format
msgid "Accept fees and withdraw"
msgstr ""
-#: src/webex/pages/confirm-create-reserve.tsx:460
+#: src/webex/pages/confirm-create-reserve.tsx:462
#, c-format
msgid "Change Exchange Provider"
msgstr ""
-#: src/webex/pages/confirm-create-reserve.tsx:517
+#: src/webex/pages/confirm-create-reserve.tsx:519
#, c-format
msgid "You are about to withdraw %1$s from your bank account into your wallet."
msgstr ""
-#: src/webex/pages/confirm-create-reserve.tsx:600
+#: src/webex/pages/confirm-create-reserve.tsx:607
#, c-format
msgid ""
"Oops, something went wrong. The wallet responded with error status (%1$s)."
msgstr ""
-#: src/webex/pages/confirm-create-reserve.tsx:611
+#: src/webex/pages/confirm-create-reserve.tsx:616
#, c-format
msgid "Checking URL, please wait ..."
msgstr ""
-#: src/webex/pages/confirm-create-reserve.tsx:625
+#: src/webex/pages/confirm-create-reserve.tsx:630
#, c-format
msgid "Can't parse amount: %1$s"
msgstr ""
-#: src/webex/pages/confirm-create-reserve.tsx:632
+#: src/webex/pages/confirm-create-reserve.tsx:637
#, c-format
msgid "Can't parse wire_types: %1$s"
msgstr ""
#. TODO:generic error reporting function or component.
-#: src/webex/pages/confirm-create-reserve.tsx:652
+#: src/webex/pages/confirm-create-reserve.tsx:663
#, c-format
msgid "Fatal error: \"%1$s\"."
msgstr ""
-#: src/webex/pages/popup.tsx:160
+#: src/webex/pages/popup.tsx:161
#, c-format
msgid "Balance"
msgstr ""
-#: src/webex/pages/popup.tsx:163
+#: src/webex/pages/popup.tsx:164
#, c-format
msgid "History"
msgstr ""
-#: src/webex/pages/popup.tsx:166
+#: src/webex/pages/popup.tsx:167
#, c-format
msgid "Debug"
msgstr ""
-#: src/webex/pages/popup.tsx:242
+#: src/webex/pages/popup.tsx:247
#, c-format
msgid "help"
msgstr ""
-#: src/webex/pages/popup.tsx:247
+#: src/webex/pages/popup.tsx:252
#, c-format
msgid ""
"You have no balance to show. Need some\n"
" %1$s getting started?\n"
msgstr ""
-#: src/webex/pages/popup.tsx:264
+#: src/webex/pages/popup.tsx:269
#, c-format
msgid "%1$s incoming\n"
msgstr ""
-#: src/webex/pages/popup.tsx:277
+#: src/webex/pages/popup.tsx:282
#, c-format
msgid "%1$s being spent\n"
msgstr ""
-#: src/webex/pages/popup.tsx:303
+#: src/webex/pages/popup.tsx:308
#, c-format
msgid "Error: could not retrieve balance information."
msgstr ""
-#: src/webex/pages/popup.tsx:342
+#: src/webex/pages/popup.tsx:335
+#, c-format
+msgid "Payback"
+msgstr ""
+
+#: src/webex/pages/popup.tsx:336
+#, c-format
+msgid "Return Electronic Cash to Bank Account"
+msgstr ""
+
+#: src/webex/pages/popup.tsx:337
+#, c-format
+msgid "Manage Trusted Auditors and Exchanges"
+msgstr ""
+
+#: src/webex/pages/popup.tsx:349
#, c-format
msgid ""
"Bank requested reserve (%1$s) for\n"
" %2$s.\n"
msgstr ""
-#: src/webex/pages/popup.tsx:353
+#: src/webex/pages/popup.tsx:360
#, c-format
msgid ""
"Started to withdraw\n"
" %1$s from%2$s(%3$s).\n"
msgstr ""
-#: src/webex/pages/popup.tsx:363
+#: src/webex/pages/popup.tsx:370
#, c-format
msgid "Merchant%1$soffered contract%2$s;\n"
msgstr ""
-#: src/webex/pages/popup.tsx:373
+#: src/webex/pages/popup.tsx:380
#, c-format
msgid "Withdrew%1$sfrom%2$s(%3$s).\n"
msgstr ""
-#: src/webex/pages/popup.tsx:383
+#: src/webex/pages/popup.tsx:390
#, c-format
msgid ""
"Paid%1$sto merchant%2$s.\n"
" (%3$s)\n"
msgstr ""
-#: src/webex/pages/popup.tsx:392
+#: src/webex/pages/popup.tsx:399
#, c-format
msgid "Unknown event (%1$s)"
msgstr ""
-#: src/webex/pages/popup.tsx:435
+#: src/webex/pages/popup.tsx:442
#, c-format
msgid "Error: could not retrieve event history"
msgstr ""
-#: src/webex/pages/popup.tsx:469
+#: src/webex/pages/popup.tsx:476
#, c-format
msgid "Your wallet has no events recorded."
msgstr ""
diff --git a/src/query.ts b/src/query.ts
index 24db4de56..9a6162807 100644
--- a/src/query.ts
+++ b/src/query.ts
@@ -130,7 +130,11 @@ export interface QueryStream<T> {
*/
first(): QueryValue<T>;
- then(onfulfill: any, onreject: any): any;
+ /**
+ * Run the query without returning a result.
+ * Useful for queries with side effects.
+ */
+ run(): Promise<void>;
}
@@ -225,7 +229,7 @@ export const AbortTransaction = Symbol("abort_transaction");
* function.
*/
export function openPromise<T>(): any {
- let resolve: ((value?: T | PromiseLike<T>) => void) | null = null;
+ let resolve: ((x?: any) => void) | null = null;
let reject: ((reason?: any) => void) | null = null;
const promise = new Promise<T>((res, rej) => {
resolve = res;
@@ -239,7 +243,7 @@ export function openPromise<T>(): any {
}
-abstract class QueryStreamBase<T> implements QueryStream<T>, PromiseLike<void> {
+abstract class QueryStreamBase<T> implements QueryStream<T> {
abstract subscribe(f: (isDone: boolean,
value: any,
tx: IDBTransaction) => void): void;
@@ -250,11 +254,6 @@ abstract class QueryStreamBase<T> implements QueryStream<T>, PromiseLike<void> {
return new FirstQueryValue(this);
}
- then<R>(onfulfilled: (value: void) => R | PromiseLike<R>,
- onrejected: (reason: any) => R | PromiseLike<R>): PromiseLike<R> {
- return this.root.then(onfulfilled, onrejected);
- }
-
flatMap<S>(f: (x: T) => S[]): QueryStream<S> {
return new QueryStreamFlatMap<T, S>(this, f);
}
@@ -279,8 +278,7 @@ abstract class QueryStreamBase<T> implements QueryStream<T>, PromiseLike<void> {
keyFn: (obj: T) => I): QueryStream<JoinResult<T, S>> {
this.root.addStoreAccess(store.name, false);
return new QueryStreamKeyJoin<T, S>(this, store.name, keyFn);
- }
-
+ }
filter(f: (x: any) => boolean): QueryStream<T> {
return new QueryStreamFilter(this, f);
}
@@ -318,6 +316,21 @@ abstract class QueryStreamBase<T> implements QueryStream<T>, PromiseLike<void> {
.then(() => this.root.finish())
.then(() => promise);
}
+
+ run(): Promise<void> {
+ const {resolve, promise} = openPromise();
+
+ this.subscribe((isDone, value) => {
+ if (isDone) {
+ resolve();
+ return;
+ }
+ });
+
+ return Promise.resolve()
+ .then(() => this.root.finish())
+ .then(() => promise);
+ }
}
type FilterFn = (e: any) => boolean;
@@ -519,7 +532,7 @@ class IterQueryStream<T> extends QueryStreamBase<T> {
/**
* Root wrapper around an IndexedDB for queries with a fluent interface.
*/
-export class QueryRoot implements PromiseLike<void> {
+export class QueryRoot {
private work: Array<((t: IDBTransaction) => void)> = [];
private stores = new Set();
private kickoffPromise: Promise<void>;
@@ -537,11 +550,6 @@ export class QueryRoot implements PromiseLike<void> {
constructor(public db: IDBDatabase) {
}
- then<R>(onfulfilled: (value: void) => R | PromiseLike<R>,
- onrejected: (reason: any) => R | PromiseLike<R>): PromiseLike<R> {
- return this.finish().then(onfulfilled, onrejected);
- }
-
private checkFinished() {
if (this.finished) {
throw Error("Can't add work to query after it was started");
diff --git a/src/types.ts b/src/types.ts
index 68fde2690..9031b19b7 100644
--- a/src/types.ts
+++ b/src/types.ts
@@ -126,6 +126,12 @@ export interface ReserveRecord {
* withdraw money from it.
*/
hasPayback: boolean;
+
+ /**
+ * Wire information for the bank account that
+ * transfered funds for this reserve.
+ */
+ senderWire?: object;
}
@@ -814,6 +820,61 @@ export enum CoinStatus {
}
+
+/**
+ * State of returning a list of coins
+ * to the customer's bank account.
+ */
+export interface CoinsReturnRecord {
+ /**
+ * Coins that we're returning.
+ */
+ coins: CoinPaySig[];
+
+ /**
+ * Responses to the deposit requests.
+ */
+ responses: any;
+
+ /**
+ * Ephemeral dummy merchant key for
+ * the coins returns operation.
+ */
+ dummyMerchantPub: string;
+
+ /**
+ * Ephemeral dummy merchant key for
+ * the coins returns operation.
+ */
+ dummyMerchantPriv: string;
+
+ /**
+ * Contract terms.
+ */
+ contractTerms: string;
+
+ /**
+ * Hash of contract terms.
+ */
+ contractTermsHash: string;
+
+ /**
+ * Wire info to send the money for the coins to.
+ */
+ wire: object;
+
+ /**
+ * Hash of the wire object.
+ */
+ wireHash: string;
+
+ /**
+ * All coins were deposited.
+ */
+ finished: boolean;
+}
+
+
/**
* CoinRecord as stored in the "coins" data store
* of the wallet database.
@@ -903,14 +964,19 @@ export class ExchangeHandle {
/**
- * Mapping from currency names to detailed balance
- * information for that particular currency.
+ * Mapping from currency/exchange to detailed balance
+ * information.
*/
export interface WalletBalance {
/**
- * Mapping from currency name to defailed balance info.
+ * Mapping from currency name to detailed balance info.
*/
- [currency: string]: WalletBalanceEntry;
+ byExchange: { [exchangeBaseUrl: string]: WalletBalanceEntry };
+
+ /**
+ * Mapping from currency name to detailed balance info.
+ */
+ byCurrency: { [currency: string]: WalletBalanceEntry };
}
@@ -942,8 +1008,8 @@ export interface WalletBalanceEntry {
*/
@Checkable.Class({validate: true})
export class ContractTerms {
- validate() {
- if (this.exchanges.length === 0) {
+ static validate(x: ContractTerms) {
+ if (x.exchanges.length === 0) {
throw Error("no exchanges in contract terms");
}
}
@@ -1361,6 +1427,18 @@ export namespace Amounts {
value: Number.parseInt(res[2]),
};
}
+
+ export function toFloat(a: AmountJson): number {
+ return a.value + (a.fraction / fractionalBase);
+ }
+
+ export function fromFloat(floatVal: number, currency: string) {
+ return {
+ currency,
+ fraction: (floatVal - Math.floor(floatVal)) * fractionalBase,
+ value: Math.floor(floatVal),
+ };
+ }
}
@@ -1457,7 +1535,7 @@ export interface PayReq {
order_id: string;
/**
- * Exchange that the coins are from.
+ * Exchange that the coins are from (base URL).
*/
exchange: string;
}
@@ -1484,3 +1562,103 @@ export interface QueryPaymentFound {
contractTerms: ContractTerms;
payReq: PayReq;
}
+
+/**
+ * Information about all sender wire details known to the wallet,
+ * as well as exchanges that accept these wire types.
+ */
+export interface SenderWireInfos {
+ /**
+ * Mapping from exchange base url to list of accepted
+ * wire types.
+ */
+ exchangeWireTypes: { [exchangeBaseUrl: string]: string[] };
+
+ /**
+ * Sender wire types stored in the wallet.
+ */
+ senderWires: object[];
+}
+
+
+/**
+ * Request to mark a reserve as confirmed.
+ */
+@Checkable.Class()
+export class CreateReserveRequest {
+ /**
+ * The initial amount for the reserve.
+ */
+ @Checkable.Value(AmountJson)
+ amount: AmountJson;
+
+ /**
+ * Exchange URL where the bank should create the reserve.
+ */
+ @Checkable.String
+ exchange: string;
+
+ /**
+ * Wire details for the bank account that sent the funds to the exchange.
+ */
+ @Checkable.Optional(Checkable.Any)
+ senderWire?: object;
+
+ /**
+ * Verify that a value matches the schema of this class and convert it into a
+ * member.
+ */
+ static checked: (obj: any) => CreateReserveRequest;
+}
+
+
+/**
+ * Request to mark a reserve as confirmed.
+ */
+@Checkable.Class()
+export class ConfirmReserveRequest {
+ /**
+ * Public key of then reserve that should be marked
+ * as confirmed.
+ */
+ @Checkable.String
+ reservePub: string;
+
+ /**
+ * Verify that a value matches the schema of this class and convert it into a
+ * member.
+ */
+ static checked: (obj: any) => ConfirmReserveRequest;
+}
+
+
+/**
+ * Wire coins to the user's own bank account.
+ */
+@Checkable.Class()
+export class ReturnCoinsRequest {
+ /**
+ * The amount to wire.
+ */
+ @Checkable.Value(AmountJson)
+ amount: AmountJson;
+
+ /**
+ * The exchange to take the coins from.
+ */
+ @Checkable.String
+ exchange: string;
+
+ /**
+ * Wire details for the bank account of the customer that will
+ * receive the funds.
+ */
+ @Checkable.Any
+ senderWire?: object;
+
+ /**
+ * Verify that a value matches the schema of this class and convert it into a
+ * member.
+ */
+ static checked: (obj: any) => ReturnCoinsRequest;
+}
diff --git a/src/wallet.ts b/src/wallet.ts
index 5de3906dc..68d70b0bb 100644
--- a/src/wallet.ts
+++ b/src/wallet.ts
@@ -49,10 +49,13 @@ import {
Amounts,
Auditor,
CheckPayResult,
+ CoinPaySig,
CoinRecord,
CoinStatus,
ConfirmPayResult,
+ ConfirmReserveRequest,
ContractTerms,
+ CreateReserveRequest,
CreateReserveResponse,
CurrencyRecord,
Denomination,
@@ -73,6 +76,8 @@ import {
RefreshSessionRecord,
ReserveCreationInfo,
ReserveRecord,
+ ReturnCoinsRequest,
+ SenderWireInfos,
WalletBalance,
WalletBalanceEntry,
WireFee,
@@ -236,51 +241,6 @@ class WireDetailJson {
}
-/**
- * Request to mark a reserve as confirmed.
- */
-@Checkable.Class()
-export class CreateReserveRequest {
- /**
- * The initial amount for the reserve.
- */
- @Checkable.Value(AmountJson)
- amount: AmountJson;
-
- /**
- * Exchange URL where the bank should create the reserve.
- */
- @Checkable.String
- exchange: string;
-
- /**
- * Verify that a value matches the schema of this class and convert it into a
- * member.
- */
- static checked: (obj: any) => CreateReserveRequest;
-}
-
-
-/**
- * Request to mark a reserve as confirmed.
- */
-@Checkable.Class()
-export class ConfirmReserveRequest {
- /**
- * Public key of then reserve that should be marked
- * as confirmed.
- */
- @Checkable.String
- reservePub: string;
-
- /**
- * Verify that a value matches the schema of this class and convert it into a
- * member.
- */
- static checked: (obj: any) => ConfirmReserveRequest;
-}
-
-
interface TransactionRecord {
contractTermsHash: string;
contractTerms: ContractTerms;
@@ -330,6 +290,48 @@ export interface ConfigRecord {
/**
+ * Coin that we're depositing ourselves.
+ */
+export interface DepositCoin {
+ coinPaySig: CoinPaySig;
+
+ /**
+ * Undefined if coin not deposited, otherwise signature
+ * from the exchange confirming the deposit.
+ */
+ depositedSig?: string;
+}
+
+export interface CoinsReturnRecord {
+ /**
+ * Hash of the contract for sending coins to our own bank account.
+ */
+ contractTermsHash: string;
+
+ contractTerms: ContractTerms;
+
+ /**
+ * Private key where corresponding
+ * public key is used in the contract terms
+ * as merchant pub.
+ */
+ merchantPriv: string;
+
+ coins: DepositCoin[];
+
+ /**
+ * Exchange base URL to deposit coins at.
+ */
+ exchange: string;
+
+ /**
+ * Our own wire information for the deposit.
+ */
+ wire: any;
+}
+
+
+/**
* Wallet protocol version spoken with the exchange
* and merchant.
*
@@ -343,7 +345,7 @@ export const WALLET_PROTOCOL_VERSION = "0:0:0";
* In the future we might consider adding migration functions for
* each version increment.
*/
-export const WALLET_DB_VERSION = 18;
+export const WALLET_DB_VERSION = 19;
const builtinCurrencies: CurrencyRecord[] = [
{
@@ -421,6 +423,7 @@ export function selectPayCoins(cds: CoinWithDenom[], paymentAmount: AmountJson,
Amounts.add(paymentAmount,
denom.feeDeposit).amount) >= 0;
isBelowFee = Amounts.cmp(accFee, depositFeeLimit) <= 0;
+
if ((coversAmount && isBelowFee) || coversAmountWithFee) {
return cdsResult;
}
@@ -553,6 +556,7 @@ export namespace Stores {
}
export const coins = new CoinsStore();
+ export const coinsReturns = new Store<CoinsReturnRecord>("coinsReturns", {keyPath: "contractTermsHash"});
export const config = new ConfigStore();
export const currencies = new CurrenciesStore();
export const denominations = new DenominationsStore();
@@ -700,6 +704,12 @@ export class Wallet {
this.continueRefreshSession(r);
});
+ this.q()
+ .iter(Stores.coinsReturns)
+ .reduce((r: CoinsReturnRecord) => {
+ this.depositReturnedCoins(r);
+ });
+
// FIXME: optimize via index
this.q()
.iter(Stores.coins)
@@ -712,6 +722,58 @@ export class Wallet {
}
+ private async getCoinsForReturn(exchangeBaseUrl: string, amount: AmountJson): Promise<CoinWithDenom[] | undefined> {
+ const exchange = await this.q().get(Stores.exchanges, exchangeBaseUrl);
+ if (!exchange) {
+ throw Error(`Exchange ${exchangeBaseUrl} not known to the wallet`);
+ }
+
+ const coins: CoinRecord[] = await (
+ this.q()
+ .iterIndex(Stores.coins.exchangeBaseUrlIndex, exchange.baseUrl)
+ .toArray()
+ );
+
+ if (!coins || !coins.length) {
+ return [];
+ }
+
+ // Denomination of the first coin, we assume that all other
+ // coins have the same currency
+ const firstDenom = await this.q().get(Stores.denominations,
+ [
+ exchange.baseUrl,
+ coins[0].denomPub,
+ ]);
+ if (!firstDenom) {
+ throw Error("db inconsistent");
+ }
+ const currency = firstDenom.value.currency;
+
+ const cds: CoinWithDenom[] = [];
+ for (const coin of coins) {
+ const denom = await this.q().get(Stores.denominations,
+ [exchange.baseUrl, coin.denomPub]);
+ if (!denom) {
+ throw Error("db inconsistent");
+ }
+ if (denom.value.currency !== currency) {
+ console.warn(`same pubkey for different currencies at exchange ${exchange.baseUrl}`);
+ continue;
+ }
+ if (coin.suspended) {
+ continue;
+ }
+ if (coin.status !== CoinStatus.Fresh) {
+ continue;
+ }
+ cds.push({coin, denom});
+ }
+
+ return selectPayCoins(cds, amount, amount);
+ }
+
+
/**
* Get exchanges and associated coins that are still spendable,
* but only if the sum the coins' remaining value exceeds the payment amount.
@@ -769,6 +831,7 @@ export class Wallet {
if (!coins || coins.length === 0) {
continue;
}
+
// Denomination of the first coin, we assume that all other
// coins have the same currency
const firstDenom = await this.q().get(Stores.denominations,
@@ -903,7 +966,7 @@ export class Wallet {
*/
async confirmPay(proposalId: number): Promise<ConfirmPayResult> {
console.log("executing confirmPay");
- const proposal = await this.q().get(Stores.proposals, proposalId);
+ const proposal: ProposalRecord|undefined = await this.q().get(Stores.proposals, proposalId);
if (!proposal) {
throw Error(`proposal with id ${proposalId} not found`);
@@ -936,7 +999,7 @@ export class Wallet {
}
const {exchangeUrl, cds} = res;
- const ds = await this.cryptoApi.signDeposit(proposal, cds);
+ const ds = await this.cryptoApi.signDeposit(proposal.contractTerms, cds);
await this.recordConfirmPay(proposal, ds, exchangeUrl);
return "paid";
}
@@ -1138,6 +1201,7 @@ export class Wallet {
requested_amount: req.amount,
reserve_priv: keypair.priv,
reserve_pub: keypair.pub,
+ senderWire: req.senderWire,
};
const historyEntry = {
@@ -1755,22 +1819,26 @@ export class Wallet {
/**
- * Retrieve a mapping from currency name to the amount
- * that is currenctly available for spending in the wallet.
+ * Get detailed balance information, sliced by exchange and by currency.
*/
async getBalances(): Promise<WalletBalance> {
- function ensureEntry(balance: WalletBalance, currency: string) {
- let entry: WalletBalanceEntry|undefined = balance[currency];
- const z = Amounts.getZero(currency);
- if (!entry) {
- balance[currency] = entry = {
- available: z,
- paybackAmount: z,
- pendingIncoming: z,
- pendingPayment: z,
- };
+ /**
+ * Add amount to a balance field, both for
+ * the slicing by exchange and currency.
+ */
+ function addTo(balance: WalletBalance, field: keyof WalletBalanceEntry, amount: AmountJson, exchange: string): void {
+ const z = Amounts.getZero(amount.currency);
+ const balanceIdentity = {available: z, paybackAmount: z, pendingIncoming: z, pendingPayment: z};
+ let entryCurr = balance.byCurrency[amount.currency];
+ if (!entryCurr) {
+ balance.byCurrency[amount.currency] = entryCurr = { ...balanceIdentity };
+ }
+ let entryEx = balance.byExchange[exchange];
+ if (!entryEx) {
+ balance.byExchange[exchange] = entryEx = { ...balanceIdentity };
}
- return entry;
+ entryCurr[field] = Amounts.add(entryCurr[field], amount).amount;
+ entryEx[field] = Amounts.add(entryEx[field], amount).amount;
}
function collectBalances(c: CoinRecord, balance: WalletBalance) {
@@ -1780,9 +1848,8 @@ export class Wallet {
if (!(c.status === CoinStatus.Dirty || c.status === CoinStatus.Fresh)) {
return balance;
}
- const currency = c.currentAmount.currency;
- const entry = ensureEntry(balance, currency);
- entry.available = Amounts.add(entry.available, c.currentAmount).amount;
+ console.log("collecting balance");
+ addTo(balance, "available", c.currentAmount, c.exchangeBaseUrl);
return balance;
}
@@ -1790,15 +1857,13 @@ export class Wallet {
if (!r.confirmed) {
return balance;
}
- const entry = ensureEntry(balance, r.requested_amount.currency);
let amount = r.current_amount;
if (!amount) {
amount = r.requested_amount;
}
amount = Amounts.add(amount, r.precoin_amount).amount;
if (Amounts.cmp(smallestWithdraw[r.exchange_base_url], amount) < 0) {
- entry.pendingIncoming = Amounts.add(entry.pendingIncoming,
- amount).amount;
+ addTo(balance, "pendingIncoming", amount, r.exchange_base_url);
}
return balance;
}
@@ -1807,9 +1872,8 @@ export class Wallet {
if (!r.hasPayback) {
return balance;
}
- const entry = ensureEntry(balance, r.requested_amount.currency);
if (Amounts.cmp(smallestWithdraw[r.exchange_base_url], r.current_amount!) < 0) {
- entry.paybackAmount = Amounts.add(entry.paybackAmount, r.current_amount!).amount;
+ addTo(balance, "paybackAmount", r.current_amount!, r.exchange_base_url);
}
return balance;
}
@@ -1821,9 +1885,7 @@ export class Wallet {
if (r.finished) {
return balance;
}
- const entry = ensureEntry(balance, r.valueWithFee.currency);
- entry.pendingIncoming = Amounts.add(entry.pendingIncoming,
- r.valueOutput).amount;
+ addTo(balance, "pendingIncoming", r.valueOutput, r.exchangeBaseUrl);
return balance;
}
@@ -1832,10 +1894,7 @@ export class Wallet {
if (t.finished) {
return balance;
}
- const entry = ensureEntry(balance, t.contractTerms.amount.currency);
- entry.pendingPayment = Amounts.add(entry.pendingPayment,
- t.contractTerms.amount).amount;
-
+ addTo(balance, "pendingIncoming", t.contractTerms.amount, t.payReq.exchange);
return balance;
}
@@ -1852,7 +1911,10 @@ export class Wallet {
return sw;
}
- const balance = {};
+ const balance = {
+ byExchange: {},
+ byCurrency: {},
+ };
// Mapping from exchange pub to smallest
// possible amount we can withdraw
let smallestWithdraw: {[baseUrl: string]: AmountJson} = {};
@@ -1876,7 +1938,6 @@ export class Wallet {
.reduce(collectPayments, balance);
await tx.finish();
return balance;
-
}
@@ -2347,4 +2408,156 @@ export class Wallet {
stop() {
this.timerGroup.stopCurrentAndFutureTimers();
}
+
+ async getSenderWireInfos(): Promise<SenderWireInfos> {
+ const m: { [url: string]: Set<string> } = {};
+ await this.q().iter(Stores.exchangeWireFees).map((x) => {
+ const s = m[x.exchangeBaseUrl] = m[x.exchangeBaseUrl] || new Set();
+ Object.keys(x.feesForType).map((k) => s.add(k));
+ }).run();
+ console.log(m);
+ const exchangeWireTypes: { [url: string]: string[] } = {};
+ Object.keys(m).map((e) => { exchangeWireTypes[e] = Array.from(m[e]); });
+
+ const senderWiresSet = new Set();
+ await this.q().iter(Stores.reserves).map((x) => {
+ if (x.senderWire) {
+ senderWiresSet.add(JSON.stringify(x.senderWire));
+ }
+ }).run();
+ const senderWires = Array.from(senderWiresSet).map((x) => JSON.parse(x));
+
+ return {
+ exchangeWireTypes,
+ senderWires,
+ };
+ }
+
+ /**
+ * Trigger paying coins back into the user's account.
+ */
+ async returnCoins(req: ReturnCoinsRequest): Promise<void> {
+ console.log("got returnCoins request", req);
+ const wireType = (req.senderWire as any).type;
+ console.log("wireType", wireType);
+ if (!wireType || typeof wireType !== "string") {
+ console.error(`wire type must be a non-empty string, not ${wireType}`);
+ return;
+ }
+ const stampSecNow = Math.floor((new Date()).getTime() / 1000);
+ const exchange = await this.q().get(Stores.exchanges, req.exchange);
+ if (!exchange) {
+ console.error(`Exchange ${req.exchange} not known to the wallet`);
+ return;
+ }
+ const cds = await this.getCoinsForReturn(req.exchange, req.amount);
+ console.log(cds);
+
+ if (!cds) {
+ throw Error("coin return impossible, can't select coins");
+ }
+
+ const { priv, pub } = await this.cryptoApi.createEddsaKeypair();
+
+ const wireHash = await this.cryptoApi.hashString(canonicalJson(req.senderWire));
+
+ const contractTerms: ContractTerms = {
+ H_wire: wireHash,
+ amount: req.amount,
+ auditors: [],
+ wire_method: wireType,
+ pay_deadline: `/Date(${stampSecNow + 60 * 5})/`,
+ locations: [],
+ max_fee: req.amount,
+ merchant: {},
+ merchant_pub: pub,
+ exchanges: [ { master_pub: exchange.masterPublicKey, url: exchange.baseUrl } ],
+ products: [],
+ refund_deadline: `/Date(${stampSecNow + 60 * 5})/`,
+ timestamp: `/Date(${stampSecNow})/`,
+ order_id: "none",
+ pay_url: "",
+ fulfillment_url: "",
+ extra: {},
+ };
+
+ const contractTermsHash = await this.cryptoApi.hashString(canonicalJson(contractTerms));
+
+ const payCoinInfo = await this.cryptoApi.signDeposit(contractTerms, cds);
+
+ console.log("pci", payCoinInfo);
+
+ const coins = payCoinInfo.map((pci) => ({ coinPaySig: pci.sig }));
+
+ const coinsReturnRecord: CoinsReturnRecord = {
+ coins,
+ exchange: exchange.baseUrl,
+ contractTerms,
+ contractTermsHash,
+ merchantPriv: priv,
+ wire: req.senderWire,
+ }
+
+ await this.q()
+ .put(Stores.coinsReturns, coinsReturnRecord)
+ .putAll(Stores.coins, payCoinInfo.map((pci) => pci.updatedCoin))
+ .finish();
+
+ this.depositReturnedCoins(coinsReturnRecord);
+ }
+
+ async depositReturnedCoins(coinsReturnRecord: CoinsReturnRecord): Promise<void> {
+ for (const c of coinsReturnRecord.coins) {
+ if (c.depositedSig) {
+ continue;
+ }
+ const req = {
+ f: c.coinPaySig.f,
+ wire: coinsReturnRecord.wire,
+ H_wire: coinsReturnRecord.contractTerms.H_wire,
+ h_contract_terms: coinsReturnRecord.contractTermsHash,
+ coin_pub: c.coinPaySig.coin_pub,
+ denom_pub: c.coinPaySig.denom_pub,
+ ub_sig: c.coinPaySig.ub_sig,
+ timestamp: coinsReturnRecord.contractTerms.timestamp,
+ wire_transfer_deadline: coinsReturnRecord.contractTerms.pay_deadline,
+ pay_deadline: coinsReturnRecord.contractTerms.pay_deadline,
+ refund_deadline: coinsReturnRecord.contractTerms.refund_deadline,
+ merchant_pub: coinsReturnRecord.contractTerms.merchant_pub,
+ coin_sig: c.coinPaySig.coin_sig,
+ };
+ console.log("req", req);
+ const reqUrl = (new URI("deposit")).absoluteTo(coinsReturnRecord.exchange);
+ const resp = await this.http.postJson(reqUrl.href(), req);
+ if (resp.status !== 200) {
+ console.error("deposit failed due to status code", resp);
+ continue;
+ }
+ const respJson = JSON.parse(resp.responseText);
+ if (respJson.status !== "DEPOSIT_OK") {
+ console.error("deposit failed", resp);
+ continue;
+ }
+
+ if (!respJson.sig) {
+ console.error("invalid 'sig' field", resp);
+ continue;
+ }
+
+ // FIXME: verify signature
+
+ // For every successful deposit, we replace the old record with an updated one
+ const currentCrr = await this.q().get(Stores.coinsReturns, coinsReturnRecord.contractTermsHash);
+ if (!currentCrr) {
+ console.error("database inconsistent");
+ continue;
+ }
+ for (const nc of currentCrr.coins) {
+ if (nc.coinPaySig.coin_pub === c.coinPaySig.coin_pub) {
+ nc.depositedSig = respJson.sig;
+ }
+ }
+ await this.q().put(Stores.coinsReturns, currentCrr);
+ }
+ }
}
diff --git a/src/webex/messages.ts b/src/webex/messages.ts
index bf9ca00b0..d7ecd06a1 100644
--- a/src/webex/messages.ts
+++ b/src/webex/messages.ts
@@ -168,6 +168,14 @@ export interface MessageMap {
request: { };
response: void;
};
+ "get-sender-wire-infos": {
+ request: { };
+ response: void;
+ };
+ "return-coins": {
+ request: { };
+ response: void;
+ };
}
/**
diff --git a/src/webex/pages/confirm-create-reserve.html b/src/webex/pages/confirm-create-reserve.html
index 493a6fb5f..17daf4dde 100644
--- a/src/webex/pages/confirm-create-reserve.html
+++ b/src/webex/pages/confirm-create-reserve.html
@@ -6,40 +6,12 @@
<title>Taler Wallet: Select Taler Provider</title>
<link rel="icon" href="/img/icon.png">
- <link rel="stylesheet" type="text/css" href="../style/wallet.css">
<link rel="stylesheet" type="text/css" href="../style/pure.css">
+ <link rel="stylesheet" type="text/css" href="../style/wallet.css">
<script src="/dist/page-common-bundle.js"></script>
<script src="/dist/confirm-create-reserve-bundle.js"></script>
- <style>
- body {
- font-size: 100%;
- overflow-y: scroll;
- }
- .button-success {
- background: rgb(28, 184, 65); /* this is a green */
- color: white;
- border-radius: 4px;
- text-shadow: 0 1px 1px rgba(0, 0, 0, 0.2);
- }
- .button-secondary {
- background: rgb(66, 184, 221); /* this is a light blue */
- color: white;
- border-radius: 4px;
- text-shadow: 0 1px 1px rgba(0, 0, 0, 0.2);
- }
- a.opener {
- color: black;
- }
- .opener-open::before {
- content: "\25bc"
- }
- .opener-collapsed::before {
- content: "\25b6 "
- }
- </style>
-
</head>
<body>
diff --git a/src/webex/pages/popup.tsx b/src/webex/pages/popup.tsx
index f1f0353ad..7d12d365e 100644
--- a/src/webex/pages/popup.tsx
+++ b/src/webex/pages/popup.tsx
@@ -219,22 +219,26 @@ class WalletBalanceView extends React.Component<any, any> {
this.unmount = true;
}
- updateBalance() {
- chrome.runtime.sendMessage({type: "balances"}, (resp) => {
+ async updateBalance() {
+ let balance: WalletBalance;
+ try {
+ balance = await wxApi.getBalance();
+ } catch (e) {
if (this.unmount) {
return;
}
- if (resp.error) {
- this.gotError = true;
- console.error("could not retrieve balances", resp);
- this.setState({});
- return;
- }
- this.gotError = false;
- console.log("got wallet", resp);
- this.balance = resp;
+ this.gotError = true;
+ console.error("could not retrieve balances", e);
this.setState({});
- });
+ return;
+ }
+ if (this.unmount) {
+ return;
+ }
+ this.gotError = false;
+ console.log("got balance", balance);
+ this.balance = balance;
+ this.setState({});
}
renderEmpty(): JSX.Element {
@@ -308,8 +312,8 @@ class WalletBalanceView extends React.Component<any, any> {
}
console.log(wallet);
let paybackAvailable = false;
- const listing = Object.keys(wallet).map((key) => {
- const entry: WalletBalanceEntry = wallet[key];
+ const listing = Object.keys(wallet.byCurrency).map((key) => {
+ const entry: WalletBalanceEntry = wallet.byCurrency[key];
if (entry.paybackAmount.value !== 0 || entry.paybackAmount.fraction !== 0) {
paybackAvailable = true;
}
@@ -321,14 +325,16 @@ class WalletBalanceView extends React.Component<any, any> {
</p>
);
});
- const link = chrome.extension.getURL("/src/webex/pages/auditors.html");
- const linkElem = <a className="actionLink" href={link} target="_blank">Trusted Auditors and Exchanges</a>;
- const paybackLinkElem = <a className="actionLink" href={link} target="_blank">Trusted Auditors and Exchanges</a>;
+ const makeLink = (page: string, name: string) => {
+ const url = chrome.extension.getURL(`/src/webex/pages/${page}`);
+ return <div><a className="actionLink" href={url} target="_blank">{name}</a></div>;
+ };
return (
<div>
{listing.length > 0 ? listing : this.renderEmpty()}
- {paybackAvailable && paybackLinkElem}
- {linkElem}
+ {paybackAvailable && makeLink("payback", i18n.str`Payback`)}
+ {makeLink("return-coins.html#dissolve", i18n.str`Return Electronic Cash to Bank Account`)}
+ {makeLink("auditors.html", i18n.str`Manage Trusted Auditors and Exchanges`)}
</div>
);
}
diff --git a/src/webex/pages/return-coins.html b/src/webex/pages/return-coins.html
new file mode 100644
index 000000000..c0ab218d2
--- /dev/null
+++ b/src/webex/pages/return-coins.html
@@ -0,0 +1,19 @@
+<!DOCTYPE html>
+<html>
+
+<head>
+ <meta charset="UTF-8">
+ <title>Taler Wallet: Return Coins to Bank Account</title>
+
+ <link rel="stylesheet" type="text/css" href="../style/pure.css">
+ <link rel="stylesheet" type="text/css" href="../style/wallet.css">
+
+ <link rel="icon" href="/img/icon.png">
+
+ <script src="/dist/page-common-bundle.js"></script>
+ <script src="/dist/return-coins-bundle.js"></script>
+
+ <body>
+ <div id="container"></div>
+ </body>
+</html>
diff --git a/src/webex/pages/return-coins.tsx b/src/webex/pages/return-coins.tsx
new file mode 100644
index 000000000..1fdadd2e9
--- /dev/null
+++ b/src/webex/pages/return-coins.tsx
@@ -0,0 +1,271 @@
+/*
+ This file is part of TALER
+ (C) 2017 Inria
+
+ TALER is free software; you can redistribute it and/or modify it under the
+ terms of the GNU General Public License as published by the Free Software
+ Foundation; either version 3, or (at your option) any later version.
+
+ TALER is distributed in the hope that it will be useful, but WITHOUT ANY
+ WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
+ A PARTICULAR PURPOSE. See the GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License along with
+ TALER; see the file COPYING. If not, see <http://www.gnu.org/licenses/>
+ */
+
+/**
+ * View and edit auditors.
+ *
+ * @author Florian Dold
+ */
+
+
+/**
+ * Imports.
+ */
+
+import {
+ AmountJson,
+ Amounts,
+ SenderWireInfos,
+ WalletBalance,
+} from "../../types";
+
+import * as i18n from "../../i18n";
+
+import * as wire from "../../wire";
+
+import {
+ getBalance,
+ getSenderWireInfos,
+ returnCoins,
+} from "../wxApi";
+
+import { renderAmount } from "../renderHtml";
+
+import * as React from "react";
+import * as ReactDOM from "react-dom";
+
+interface ReturnSelectionItemProps extends ReturnSelectionListProps {
+ exchangeUrl: string;
+ senderWireInfos: SenderWireInfos;
+}
+
+interface ReturnSelectionItemState {
+ selectedValue: string;
+ supportedWires: object[];
+ selectedWire: string;
+ currency: string;
+}
+
+class ReturnSelectionItem extends React.Component<ReturnSelectionItemProps, ReturnSelectionItemState> {
+ constructor(props: ReturnSelectionItemProps) {
+ super(props);
+ const exchange = this.props.exchangeUrl;
+ const wireTypes = this.props.senderWireInfos.exchangeWireTypes;
+ const supportedWires = this.props.senderWireInfos.senderWires.filter((x) => {
+ return wireTypes[exchange] && wireTypes[exchange].indexOf((x as any).type) >= 0;
+ });
+ this.state = {
+ currency: props.balance.byExchange[props.exchangeUrl].available.currency,
+ selectedValue: Amounts.toFloat(props.balance.byExchange[props.exchangeUrl].available).toString(),
+ selectedWire: "",
+ supportedWires,
+ };
+ }
+ render(): JSX.Element {
+ const exchange = this.props.exchangeUrl;
+ const byExchange = this.props.balance.byExchange;
+ const wireTypes = this.props.senderWireInfos.exchangeWireTypes;
+ return (
+ <div key={exchange}>
+ <h2>Exchange {exchange}</h2>
+ <p>Available amount: {renderAmount(byExchange[exchange].available)}</p>
+ <p>Supported wire methods: {wireTypes[exchange].length ? wireTypes[exchange].join(", ") : "none"}</p>
+ <p>Wire {""}
+ <input
+ type="text"
+ size={this.state.selectedValue.length || 1}
+ value={this.state.selectedValue}
+ onChange={(evt) => this.setState({selectedValue: evt.target.value})}
+ style={{textAlign: "center"}}
+ /> {this.props.balance.byExchange[exchange].available.currency} {""}
+ to account {""}
+ <select value={this.state.selectedWire} onChange={(evt) => this.setState({selectedWire: evt.target.value})}>
+ <option style={{display: "none"}}>Select account</option>
+ {this.state.supportedWires.map((w, n) =>
+ <option value={n.toString()} key={JSON.stringify(w)}>{n+1}: {wire.summarizeWire(w)}</option>
+ )}
+ </select>.
+ </p>
+ {this.state.selectedWire
+ ? <button className="pure-button button-success" onClick={() => this.select()}>
+ {i18n.str`Wire to bank account`}
+ </button>
+ : null}
+ </div>
+ );
+ }
+
+ select() {
+ let val: number;
+ let selectedWire: number;
+ try {
+ val = Number.parseFloat(this.state.selectedValue);
+ selectedWire = Number.parseInt(this.state.selectedWire);
+ } catch (e) {
+ console.error(e);
+ return;
+ }
+ this.props.selectDetail({
+ amount: Amounts.fromFloat(val, this.state.currency),
+ exchange: this.props.exchangeUrl,
+ senderWire: this.state.supportedWires[selectedWire],
+ });
+ }
+}
+
+interface ReturnSelectionListProps {
+ balance: WalletBalance;
+ senderWireInfos: SenderWireInfos;
+ selectDetail(d: SelectedDetail): void;
+}
+
+class ReturnSelectionList extends React.Component<ReturnSelectionListProps, {}> {
+ render(): JSX.Element {
+ const byExchange = this.props.balance.byExchange;
+ const exchanges = Object.keys(byExchange);
+ if (!exchanges.length) {
+ return <p className="errorbox">Currently no funds available to transfer.</p>;
+ }
+ return (
+ <div>
+ {exchanges.map((e) => <ReturnSelectionItem key={e} exchangeUrl={e} {...this.props} />)}
+ </div>
+ );
+ }
+}
+
+interface SelectedDetail {
+ amount: AmountJson;
+ senderWire: any;
+ exchange: string;
+}
+
+
+interface ReturnConfirmationProps {
+ detail: SelectedDetail;
+ cancel(): void;
+ confirm(): void;
+}
+
+class ReturnConfirmation extends React.Component<ReturnConfirmationProps, {}> {
+ render() {
+ return (
+ <div>
+ <p>Please confirm if you want to transmit <strong>{renderAmount(this.props.detail.amount)}</strong> at {""}
+ {this.props.detail.exchange} to account {""}
+ <strong style={{whiteSpace: "nowrap"}}>{wire.summarizeWire(this.props.detail.senderWire)}</strong>.
+ </p>
+ <button className="pure-button button-success" onClick={() => this.props.confirm()}>
+ {i18n.str`Confirm`}
+ </button>
+ <button className="pure-button" onClick={() => this.props.cancel()}>
+ {i18n.str`Cancel`}
+ </button>
+ </div>
+ );
+ }
+}
+
+interface ReturnCoinsState {
+ balance: WalletBalance | undefined;
+ senderWireInfos: SenderWireInfos | undefined;
+ selectedReturn: SelectedDetail | undefined;
+ /**
+ * Last confirmed detail, so we can show a nice box.
+ */
+ lastConfirmedDetail: SelectedDetail | undefined;
+}
+
+class ReturnCoins extends React.Component<any, ReturnCoinsState> {
+ constructor() {
+ super();
+ const port = chrome.runtime.connect();
+ port.onMessage.addListener((msg: any) => {
+ if (msg.notify) {
+ console.log("got notified");
+ this.update();
+ }
+ });
+ this.update();
+ this.state = {} as any;
+ }
+
+ async update() {
+ const balance = await getBalance();
+ const senderWireInfos = await getSenderWireInfos();
+ console.log("got swi", senderWireInfos);
+ console.log("got bal", balance);
+ this.setState({ balance, senderWireInfos });
+ }
+
+ selectDetail(d: SelectedDetail) {
+ this.setState({selectedReturn: d});
+ }
+
+ async confirm() {
+ const selectedReturn = this.state.selectedReturn;
+ if (!selectedReturn) {
+ return;
+ }
+ await returnCoins(selectedReturn);
+ await this.update();
+ this.setState({selectedReturn: undefined, lastConfirmedDetail: selectedReturn});
+ }
+
+ async cancel() {
+ this.setState({selectedReturn: undefined, lastConfirmedDetail: undefined});
+ }
+
+ render() {
+ const balance = this.state.balance;
+ const senderWireInfos = this.state.senderWireInfos;
+ if (!balance || !senderWireInfos) {
+ return <span>...</span>;
+ }
+ if (this.state.selectedReturn) {
+ return (
+ <div id="main">
+ <ReturnConfirmation
+ detail={this.state.selectedReturn}
+ cancel={() => this.cancel()}
+ confirm={() => this.confirm()}
+ />
+ </div>
+ );
+ }
+ return (
+ <div id="main">
+ <h1>Wire electronic cash back to own bank account</h1>
+ <p>You can send coins back into your own bank account. Note that
+ you're acting as a merchant when doing this, and thus the same fees apply.</p>
+ {this.state.lastConfirmedDetail
+ ? <p className="okaybox">Transfer of {renderAmount(this.state.lastConfirmedDetail.amount)} successfully initiated.</p>
+ : null}
+ <ReturnSelectionList
+ selectDetail={(d) => this.selectDetail(d)}
+ balance={balance}
+ senderWireInfos={senderWireInfos} />
+ </div>
+ );
+ }
+}
+
+
+function main() {
+ ReactDOM.render(<ReturnCoins />, document.getElementById("container")!);
+}
+
+document.addEventListener("DOMContentLoaded", main);
diff --git a/src/webex/style/wallet.css b/src/webex/style/wallet.css
index 5773eb396..61dd611e9 100644
--- a/src/webex/style/wallet.css
+++ b/src/webex/style/wallet.css
@@ -1,3 +1,8 @@
+body {
+ font-size: 100%;
+ overflow-y: scroll;
+}
+
#main {
border: solid 1px black;
border-radius: 10px;
@@ -235,3 +240,14 @@ a.actionLink {
font-weight: bold;
background: #00FA9A;
}
+
+
+a.opener {
+ color: black;
+}
+.opener-open::before {
+ content: "\25bc"
+}
+.opener-collapsed::before {
+ content: "\25b6 "
+}
diff --git a/src/webex/wxApi.ts b/src/webex/wxApi.ts
index 9d8ba4d1d..1371e27e4 100644
--- a/src/webex/wxApi.ts
+++ b/src/webex/wxApi.ts
@@ -31,9 +31,11 @@ import {
DenominationRecord,
ExchangeRecord,
PreCoinRecord,
+ QueryPaymentResult,
ReserveCreationInfo,
ReserveRecord,
- QueryPaymentResult,
+ SenderWireInfos,
+ WalletBalance,
} from "../types";
import { MessageType, MessageMap } from "./messages";
@@ -296,3 +298,26 @@ export function createReserve(args: { amount: AmountJson, exchange: string, send
export function resetDb(): Promise<void> {
return callBackend("reset-db", { });
}
+
+/**
+ * Get balances for all currencies/exchanges.
+ */
+export function getBalance(): Promise<WalletBalance> {
+ return callBackend("balances", { });
+}
+
+
+/**
+ * Get possible sender wire infos for getting money
+ * wired from an exchange.
+ */
+export function getSenderWireInfos(): Promise<SenderWireInfos> {
+ return callBackend("get-sender-wire-infos", { });
+}
+
+/**
+ * Return coins to a bank account.
+ */
+export function returnCoins(args: { amount: AmountJson, exchange: string, senderWire: object }): Promise<void> {
+ return callBackend("return-coins", args);
+}
diff --git a/src/webex/wxBackend.ts b/src/webex/wxBackend.ts
index 261477386..974bcb3c2 100644
--- a/src/webex/wxBackend.ts
+++ b/src/webex/wxBackend.ts
@@ -32,12 +32,13 @@ import {
} from "../query";
import {
AmountJson,
+ ConfirmReserveRequest,
+ CreateReserveRequest,
Notifier,
ProposalRecord,
+ ReturnCoinsRequest,
} from "../types";
import {
- ConfirmReserveRequest,
- CreateReserveRequest,
Stores,
WALLET_DB_VERSION,
Wallet,
@@ -278,6 +279,18 @@ function handleMessage(sender: MessageSender,
}
return needsWallet().paymentSucceeded(contractTermsHash, merchantSig);
}
+ case "get-sender-wire-infos": {
+ return needsWallet().getSenderWireInfos();
+ }
+ case "return-coins": {
+ const d = {
+ amount: detail.amount,
+ exchange: detail.exchange,
+ senderWire: detail.senderWire,
+ };
+ const req = ReturnCoinsRequest.checked(d);
+ return needsWallet().returnCoins(req);
+ }
case "check-upgrade": {
let dbResetRequired = false;
if (!currentWallet) {
diff --git a/src/wire.ts b/src/wire.ts
new file mode 100644
index 000000000..d61e8eab2
--- /dev/null
+++ b/src/wire.ts
@@ -0,0 +1,53 @@
+/*
+ This file is part of TALER
+ (C) 2017 GNUnet e.V.
+
+ TALER is free software; you can redistribute it and/or modify it under the
+ terms of the GNU General Public License as published by the Free Software
+ Foundation; either version 3, or (at your option) any later version.
+
+ TALER is distributed in the hope that it will be useful, but WITHOUT ANY
+ WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
+ A PARTICULAR PURPOSE. See the GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License along with
+ TALER; see the file COPYING. If not, see <http://www.gnu.org/licenses/>
+ */
+
+
+/**
+ * Display and manipulate wire information.
+ *
+ * Right now, all types are hard-coded. In the future, there might be plugins / configurable
+ * methods or support for the "payto://" URI scheme.
+ */
+
+/**
+ * Imports.
+ */
+import * as i18n from "./i18n";
+
+/**
+ * Short summary of the wire information.
+ *
+ * Might abbreviate and return the same summary for different
+ * wire details.
+ */
+export function summarizeWire(w: any): string {
+ if (!w.type) {
+ return i18n.str`Invalid Wire`;
+ }
+ switch (w.type.toLowerCase()) {
+ case "test":
+ if (!w.account_number && w.account_number !== 0) {
+ return i18n.str`Invalid Test Wire Detail`;
+ }
+ if (!w.bank_uri) {
+ return i18n.str`Invalid Test Wire Detail`;
+ }
+ return i18n.str`Test Wire Acct #${w.account_number} on ${w.bank_uri}`;
+ default:
+ return i18n.str`Unknown Wire Detail`;
+ }
+}
+
diff --git a/tsconfig.json b/tsconfig.json
index 349b5969a..b99b28b3e 100644
--- a/tsconfig.json
+++ b/tsconfig.json
@@ -64,6 +64,7 @@
"src/webex/pages/payback.tsx",
"src/webex/pages/popup.tsx",
"src/webex/pages/reset-required.tsx",
+ "src/webex/pages/return-coins.tsx",
"src/webex/pages/show-db.ts",
"src/webex/pages/tree.tsx",
"src/webex/renderHtml.tsx",
diff --git a/webpack.config.js b/webpack.config.js
index 34342748b..d2210b092 100644
--- a/webpack.config.js
+++ b/webpack.config.js
@@ -69,11 +69,12 @@ module.exports = function (env) {
"confirm-create-reserve": "./src/webex/pages/confirm-create-reserve.tsx",
"error": "./src/webex/pages/error.tsx",
"logs": "./src/webex/pages/logs.tsx",
+ "payback": "./src/webex/pages/payback.tsx",
"popup": "./src/webex/pages/popup.tsx",
+ "reset-required": "./src/webex/pages/reset-required.tsx",
+ "return-coins": "./src/webex/pages/return-coins.tsx",
"show-db": "./src/webex/pages/show-db.ts",
"tree": "./src/webex/pages/tree.tsx",
- "payback": "./src/webex/pages/payback.tsx",
- "reset-required": "./src/webex/pages/reset-required.tsx",
},
plugins: [
new webpack.optimize.CommonsChunkPlugin({
diff --git a/yarn.lock b/yarn.lock
index 0769e2830..ae5c9b346 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -7,8 +7,8 @@
resolved "https://registry.yarnpkg.com/@ava/babel-plugin-throws-helper/-/babel-plugin-throws-helper-2.0.0.tgz#2fc1fe3c211a71071a4eca7b8f7af5842cd1ae7c"
"@ava/babel-preset-stage-4@^1.0.0":
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/@ava/babel-preset-stage-4/-/babel-preset-stage-4-1.0.0.tgz#a613b5e152f529305422546b072d47facfb26291"
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/@ava/babel-preset-stage-4/-/babel-preset-stage-4-1.1.0.tgz#ae60be881a0babf7d35f52aba770d1f6194f76bd"
dependencies:
babel-plugin-check-es2015-constants "^6.8.0"
babel-plugin-syntax-trailing-function-commas "^6.20.0"
@@ -38,28 +38,35 @@
esutils "^2.0.2"
"@types/fs-extra@^3.0.0":
- version "3.0.2"
- resolved "https://registry.yarnpkg.com/@types/fs-extra/-/fs-extra-3.0.2.tgz#00cbf48563f377f9ce5cf24237b21b3d9779e055"
+ version "3.0.3"
+ resolved "https://registry.yarnpkg.com/@types/fs-extra/-/fs-extra-3.0.3.tgz#1d66eb670ebf657e57c0fda014df340c19d8aa0c"
+ dependencies:
+ "@types/node" "*"
+
+"@types/glob@*":
+ version "5.0.30"
+ resolved "https://registry.yarnpkg.com/@types/glob/-/glob-5.0.30.tgz#1026409c5625a8689074602808d082b2867b8a51"
dependencies:
+ "@types/minimatch" "*"
"@types/node" "*"
"@types/handlebars@^4.0.31":
- version "4.0.32"
- resolved "https://registry.yarnpkg.com/@types/handlebars/-/handlebars-4.0.32.tgz#637e8d945a9354aab47df7125005490fe9f8e592"
+ version "4.0.35"
+ resolved "https://registry.yarnpkg.com/@types/handlebars/-/handlebars-4.0.35.tgz#409eb97a3ad6970daba4d586cb6afe3f5e082c01"
"@types/highlight.js@^9.1.8":
version "9.1.9"
resolved "https://registry.yarnpkg.com/@types/highlight.js/-/highlight.js-9.1.9.tgz#ed6336955eaf233b75eb7923b9b1f373d045ef01"
"@types/lodash@^4.14.37":
- version "4.14.64"
- resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.64.tgz#979cf3a3d4a368670840bf9b3e448dc33ffe84ee"
+ version "4.14.72"
+ resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.72.tgz#f090cf6eb1fee1647a0efa1ebe18b0b78ed551c6"
"@types/marked@0.0.28":
version "0.0.28"
resolved "https://registry.yarnpkg.com/@types/marked/-/marked-0.0.28.tgz#44ba754e9fa51432583e8eb30a7c4dd249b52faa"
-"@types/minimatch@^2.0.29":
+"@types/minimatch@*", "@types/minimatch@^2.0.29":
version "2.0.29"
resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-2.0.29.tgz#5002e14f75e2d71e564281df0431c8c1b4a2a36a"
@@ -70,28 +77,34 @@
moment "*"
"@types/node@*":
- version "7.0.22"
- resolved "https://registry.yarnpkg.com/@types/node/-/node-7.0.22.tgz#4593f4d828bdd612929478ea40c67b4f403ca255"
+ version "8.0.20"
+ resolved "https://registry.yarnpkg.com/@types/node/-/node-8.0.20.tgz#65c7375255c24b184c215a5d0b63247c32f01c91"
"@types/react-dom@^15.5.0":
- version "15.5.0"
- resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-15.5.0.tgz#7f4fb9613d4051141773242f7b6b5f1a46b34bd9"
+ version "15.5.2"
+ resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-15.5.2.tgz#f7203c75a1728812355f037ea112611d082555e6"
dependencies:
+ "@types/node" "*"
"@types/react" "*"
-"@types/react@*", "@types/react@^15.0.22":
- version "15.0.24"
- resolved "https://registry.yarnpkg.com/@types/react/-/react-15.0.24.tgz#8a75299dc37906df327c18ca918bf97a55e7123b"
+"@types/react@*":
+ version "16.0.2"
+ resolved "https://registry.yarnpkg.com/@types/react/-/react-16.0.2.tgz#0b31a73cdde6272b719e5b05a7df6d1e2654a804"
+
+"@types/react@^15.0.22":
+ version "15.6.1"
+ resolved "https://registry.yarnpkg.com/@types/react/-/react-15.6.1.tgz#497f7228762da4432e335957cb34fe9b40f150ae"
"@types/shelljs@^0.7.0":
- version "0.7.1"
- resolved "https://registry.yarnpkg.com/@types/shelljs/-/shelljs-0.7.1.tgz#30fe144e3bdd37c11c174445bc54190cb7992a45"
+ version "0.7.4"
+ resolved "https://registry.yarnpkg.com/@types/shelljs/-/shelljs-0.7.4.tgz#137b5f31306eaff4de120ffe5b9d74b297809cfc"
dependencies:
+ "@types/glob" "*"
"@types/node" "*"
abbrev@1:
- version "1.0.9"
- resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.0.9.tgz#91b4792588a7738c25f35dd6f63752a2f8776135"
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.0.tgz#d0554c2256636e2f56e7c2e5ad183f859428d81f"
acorn-dynamic-import@^2.0.0:
version "2.0.2"
@@ -104,8 +117,8 @@ acorn@^4.0.3:
resolved "https://registry.yarnpkg.com/acorn/-/acorn-4.0.13.tgz#105495ae5361d697bd195c825192e1ad7f253787"
acorn@^5.0.0:
- version "5.0.3"
- resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.0.3.tgz#c460df08491463f028ccb82eab3730bf01087b3d"
+ version "5.1.1"
+ resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.1.1.tgz#53fe161111f912ab999ee887a90a0bc52822fd75"
ajv-keywords@^1.1.1:
version "1.5.1"
@@ -144,6 +157,10 @@ ansi-regex@^2.0.0:
version "2.1.1"
resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df"
+ansi-regex@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998"
+
ansi-styles@^1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-1.1.0.tgz#eaecbf66cd706882760b2f4691582b8f55d7a7de"
@@ -152,22 +169,22 @@ ansi-styles@^2.2.1:
version "2.2.1"
resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe"
-ansi-styles@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.0.0.tgz#5404e93a544c4fec7f048262977bebfe3155e0c1"
+ansi-styles@^3.0.0, ansi-styles@^3.1.0:
+ version "3.2.0"
+ resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.0.tgz#c159b8d5be0f9e5a6f346dab94f16ce022161b88"
dependencies:
- color-convert "^1.0.0"
+ color-convert "^1.9.0"
ansi-styles@~1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-1.0.0.tgz#cb102df1c56f5123eab8b67cd7b98027a0279178"
anymatch@^1.3.0:
- version "1.3.0"
- resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-1.3.0.tgz#a3e52fa39168c825ff57b0248126ce5a8ff95507"
+ version "1.3.2"
+ resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-1.3.2.tgz#553dcb8f91e3c889845dfdba34c77721b90b9d7a"
dependencies:
- arrify "^1.0.0"
micromatch "^2.1.5"
+ normalize-path "^2.0.0"
append-transform@^0.4.0:
version "0.4.0"
@@ -176,8 +193,8 @@ append-transform@^0.4.0:
default-require-extensions "^1.0.0"
aproba@^1.0.3:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.1.1.tgz#95d3600f07710aa0e9298c726ad5ecf2eacbabab"
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.1.2.tgz#45c6629094de4e96f693ef7eab74ae079c240fc1"
archiver-utils@^1.3.0:
version "1.3.0"
@@ -232,17 +249,25 @@ arr-exclude@^1.0.0:
resolved "https://registry.yarnpkg.com/arr-exclude/-/arr-exclude-1.0.0.tgz#dfc7c2e552a270723ccda04cf3128c8cbfe5c631"
arr-flatten@^1.0.1:
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.0.3.tgz#a274ed85ac08849b6bd7847c4580745dc51adfb1"
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1"
array-differ@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/array-differ/-/array-differ-1.0.0.tgz#eff52e3758249d33be402b8bb8e564bb2b5d4031"
+array-each@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/array-each/-/array-each-1.0.1.tgz#a794af0c05ab1752846ee753a1f211a05ba0c44f"
+
array-find-index@^1.0.1:
version "1.0.2"
resolved "https://registry.yarnpkg.com/array-find-index/-/array-find-index-1.0.2.tgz#df010aa1287e164bbda6f9723b0a96a1ec4187a1"
+array-slice@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/array-slice/-/array-slice-1.0.0.tgz#e73034f00dcc1f40876008fd20feae77bd4b7c2f"
+
array-union@^1.0.1:
version "1.0.2"
resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39"
@@ -262,8 +287,8 @@ arrify@^1.0.0, arrify@^1.0.1:
resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d"
asap@~2.0.3:
- version "2.0.5"
- resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.5.tgz#522765b50c3510490e52d7dcfe085ef9ba96958f"
+ version "2.0.6"
+ resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46"
asn1.js@^4.0.0:
version "4.9.1"
@@ -300,8 +325,8 @@ async@^1.4.0:
resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a"
async@^2.0.0, async@^2.1.2:
- version "2.4.1"
- resolved "https://registry.yarnpkg.com/async/-/async-2.4.1.tgz#62a56b279c98a11d0987096a01cc3eeb8eb7bbd7"
+ version "2.5.0"
+ resolved "https://registry.yarnpkg.com/async/-/async-2.5.0.tgz#843190fd6b7357a0b9e1c956edddd5ec8462b54d"
dependencies:
lodash "^4.14.0"
@@ -314,14 +339,14 @@ auto-bind@^1.1.0:
resolved "https://registry.yarnpkg.com/auto-bind/-/auto-bind-1.1.0.tgz#93b864dc7ee01a326281775d5c75ca0a751e5961"
ava-init@^0.2.0:
- version "0.2.0"
- resolved "https://registry.yarnpkg.com/ava-init/-/ava-init-0.2.0.tgz#9304c8b4c357d66e3dfdae1fbff47b1199d5c55d"
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/ava-init/-/ava-init-0.2.1.tgz#75ac4c8553326290d2866e63b62fa7035684bd58"
dependencies:
arr-exclude "^1.0.0"
- execa "^0.5.0"
+ execa "^0.7.0"
has-yarn "^1.0.0"
read-pkg-up "^2.0.0"
- write-pkg "^2.0.0"
+ write-pkg "^3.1.0"
ava@^0.19.1:
version "0.19.1"
@@ -423,19 +448,19 @@ babel-code-frame@^6.16.0, babel-code-frame@^6.22.0:
js-tokens "^3.0.0"
babel-core@^6.17.0, babel-core@^6.24.1:
- version "6.24.1"
- resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-6.24.1.tgz#8c428564dce1e1f41fb337ec34f4c3b022b5ad83"
+ version "6.25.0"
+ resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-6.25.0.tgz#7dd42b0463c742e9d5296deb3ec67a9322dad729"
dependencies:
babel-code-frame "^6.22.0"
- babel-generator "^6.24.1"
+ babel-generator "^6.25.0"
babel-helpers "^6.24.1"
babel-messages "^6.23.0"
babel-register "^6.24.1"
babel-runtime "^6.22.0"
- babel-template "^6.24.1"
- babel-traverse "^6.24.1"
- babel-types "^6.24.1"
- babylon "^6.11.0"
+ babel-template "^6.25.0"
+ babel-traverse "^6.25.0"
+ babel-types "^6.25.0"
+ babylon "^6.17.2"
convert-source-map "^1.1.0"
debug "^2.1.1"
json5 "^0.5.0"
@@ -446,13 +471,13 @@ babel-core@^6.17.0, babel-core@^6.24.1:
slash "^1.0.0"
source-map "^0.5.0"
-babel-generator@^6.1.0, babel-generator@^6.18.0, babel-generator@^6.24.1:
- version "6.24.1"
- resolved "https://registry.yarnpkg.com/babel-generator/-/babel-generator-6.24.1.tgz#e715f486c58ded25649d888944d52aa07c5d9497"
+babel-generator@^6.1.0, babel-generator@^6.18.0, babel-generator@^6.25.0:
+ version "6.25.0"
+ resolved "https://registry.yarnpkg.com/babel-generator/-/babel-generator-6.25.0.tgz#33a1af70d5f2890aeb465a4a7793c1df6a9ea9fc"
dependencies:
babel-messages "^6.23.0"
babel-runtime "^6.22.0"
- babel-types "^6.24.1"
+ babel-types "^6.25.0"
detect-indent "^4.0.0"
jsesc "^1.3.0"
lodash "^4.2.0"
@@ -661,56 +686,56 @@ babel-register@^6.24.1:
source-map-support "^0.4.2"
babel-runtime@^6.22.0:
- version "6.23.0"
- resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.23.0.tgz#0a9489f144de70efb3ce4300accdb329e2fc543b"
+ version "6.25.0"
+ resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.25.0.tgz#33b98eaa5d482bb01a8d1aa6b437ad2b01aec41c"
dependencies:
core-js "^2.4.0"
regenerator-runtime "^0.10.0"
-babel-template@^6.16.0, babel-template@^6.24.1:
- version "6.24.1"
- resolved "https://registry.yarnpkg.com/babel-template/-/babel-template-6.24.1.tgz#04ae514f1f93b3a2537f2a0f60a5a45fb8308333"
+babel-template@^6.16.0, babel-template@^6.24.1, babel-template@^6.25.0:
+ version "6.25.0"
+ resolved "https://registry.yarnpkg.com/babel-template/-/babel-template-6.25.0.tgz#665241166b7c2aa4c619d71e192969552b10c071"
dependencies:
babel-runtime "^6.22.0"
- babel-traverse "^6.24.1"
- babel-types "^6.24.1"
- babylon "^6.11.0"
+ babel-traverse "^6.25.0"
+ babel-types "^6.25.0"
+ babylon "^6.17.2"
lodash "^4.2.0"
-babel-traverse@^6.18.0, babel-traverse@^6.24.1:
- version "6.24.1"
- resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.24.1.tgz#ab36673fd356f9a0948659e7b338d5feadb31695"
+babel-traverse@^6.18.0, babel-traverse@^6.24.1, babel-traverse@^6.25.0:
+ version "6.25.0"
+ resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.25.0.tgz#2257497e2fcd19b89edc13c4c91381f9512496f1"
dependencies:
babel-code-frame "^6.22.0"
babel-messages "^6.23.0"
babel-runtime "^6.22.0"
- babel-types "^6.24.1"
- babylon "^6.15.0"
+ babel-types "^6.25.0"
+ babylon "^6.17.2"
debug "^2.2.0"
globals "^9.0.0"
invariant "^2.2.0"
lodash "^4.2.0"
-babel-types@^6.18.0, babel-types@^6.24.1:
- version "6.24.1"
- resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.24.1.tgz#a136879dc15b3606bda0d90c1fc74304c2ff0975"
+babel-types@^6.18.0, babel-types@^6.24.1, babel-types@^6.25.0:
+ version "6.25.0"
+ resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.25.0.tgz#70afb248d5660e5d18f811d91c8303b54134a18e"
dependencies:
babel-runtime "^6.22.0"
esutils "^2.0.2"
lodash "^4.2.0"
to-fast-properties "^1.0.1"
-babylon@^6.1.0, babylon@^6.11.0, babylon@^6.13.0, babylon@^6.15.0:
- version "6.17.1"
- resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.17.1.tgz#17f14fddf361b695981fe679385e4f1c01ebd86f"
+babylon@^6.1.0, babylon@^6.17.2, babylon@^6.17.4:
+ version "6.17.4"
+ resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.17.4.tgz#3e8b7402b88d22c3423e137a1577883b15ff869a"
-balanced-match@^0.4.1:
- version "0.4.2"
- resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-0.4.2.tgz#cb3f3e3c732dc0f01ee70b403f302e61d7709838"
+balanced-match@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767"
base64-js@^1.0.2:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.2.0.tgz#a39992d723584811982be5e290bb6a53d86700f1"
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.2.1.tgz#a91947da1f4a516ea38e5b4ec0ec3773675e0886"
bcrypt-pbkdf@^1.0.0:
version "1.0.1"
@@ -727,8 +752,8 @@ big.js@^3.1.3:
resolved "https://registry.yarnpkg.com/big.js/-/big.js-3.1.3.tgz#4cada2193652eb3ca9ec8e55c9015669c9806978"
binary-extensions@^1.0.0:
- version "1.8.0"
- resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.8.0.tgz#48ec8d16df4377eae5fa5884682480af4d95c774"
+ version "1.9.0"
+ resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.9.0.tgz#66506c16ce6f4d6928a5b3cd6a33ca41e941e37b"
bl@^1.0.0:
version "1.2.1"
@@ -747,8 +772,8 @@ bluebird@^3.0.0, bluebird@^3.4.7:
resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.0.tgz#791420d7f551eea2897453a8a77653f96606d67c"
bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.1.1, bn.js@^4.4.0:
- version "4.11.6"
- resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.6.tgz#53344adb14617a13f6e8dd2ce28905d1c0ba3215"
+ version "4.11.8"
+ resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.8.tgz#2cde09eb5ee341f484746bb0309b3253b1b1442f"
boolbase@~1.0.0:
version "1.0.0"
@@ -761,22 +786,22 @@ boom@2.x.x:
hoek "2.x.x"
boxen@^1.0.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/boxen/-/boxen-1.1.0.tgz#b1b69dd522305e807a99deee777dbd6e5167b102"
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/boxen/-/boxen-1.2.1.tgz#0f11e7fe344edb9397977fc13ede7f64d956481d"
dependencies:
ansi-align "^2.0.0"
camelcase "^4.0.0"
- chalk "^1.1.1"
+ chalk "^2.0.1"
cli-boxes "^1.0.0"
string-width "^2.0.0"
- term-size "^0.1.0"
+ term-size "^1.2.0"
widest-line "^1.0.0"
brace-expansion@^1.0.0, brace-expansion@^1.1.7:
- version "1.1.7"
- resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.7.tgz#3effc3c50e000531fb720eaff80f0ae8ef23cf59"
+ version "1.1.8"
+ resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.8.tgz#c07b211c7c952ec1f8efd51a77ef0d1d3990a292"
dependencies:
- balanced-match "^0.4.1"
+ balanced-match "^1.0.0"
concat-map "0.0.1"
braces@^1.8.2:
@@ -850,10 +875,6 @@ buffer-crc32@^0.2.1, buffer-crc32@~0.2.3:
version "0.2.13"
resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242"
-buffer-shims@~1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/buffer-shims/-/buffer-shims-1.0.0.tgz#9978ce317388c649ad8793028c3477ef044a8b51"
-
buffer-xor@^1.0.2:
version "1.0.3"
resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9"
@@ -972,7 +993,15 @@ chalk@^1.0.0, chalk@^1.1.0, chalk@^1.1.1, chalk@^1.1.3:
strip-ansi "^3.0.0"
supports-color "^2.0.0"
-chokidar@^1.4.2, chokidar@^1.4.3:
+chalk@^2.0.1:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.1.0.tgz#ac5becf14fa21b99c6c92ca7a7d7cfd5b17e743e"
+ dependencies:
+ ansi-styles "^3.1.0"
+ escape-string-regexp "^1.0.5"
+ supports-color "^4.0.0"
+
+chokidar@^1.4.2, chokidar@^1.7.0:
version "1.7.0"
resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-1.7.0.tgz#798e689778151c8076b4b360e5edd28cda2bb468"
dependencies:
@@ -992,14 +1021,15 @@ ci-info@^1.0.0:
resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-1.0.0.tgz#dc5285f2b4e251821683681c381c3388f46ec534"
cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3:
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.3.tgz#eeabf194419ce900da3018c207d212f2a6df0a07"
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de"
dependencies:
inherits "^2.0.1"
+ safe-buffer "^5.0.1"
clean-css@4.1.x:
- version "4.1.3"
- resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-4.1.3.tgz#07cfe8980edb20d455ddc23aadcf1e04c6e509ce"
+ version "4.1.7"
+ resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-4.1.7.tgz#b9aea4f85679889cf3eae8b40349ec4ebdfdd032"
dependencies:
source-map "0.5.x"
@@ -1026,10 +1056,10 @@ cli-spinners@^1.0.0:
resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-1.0.0.tgz#ef987ed3d48391ac3dab9180b406a742180d6e6a"
cli-truncate@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-1.0.0.tgz#21eb91f47b3f6560f004db77a769b4668d9c5518"
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-1.1.0.tgz#2b2dfd83c53cfd3572b87fc4d430a808afb04086"
dependencies:
- slice-ansi "0.0.4"
+ slice-ansi "^1.0.0"
string-width "^2.0.0"
cliui@^2.1.0:
@@ -1068,6 +1098,10 @@ clone@^1.0.0, clone@^1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.2.tgz#260b7a99ebb1edfe247538175f783243cb19d149"
+clone@^2.1.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/clone/-/clone-2.1.1.tgz#d217d1e961118e3ac9a4b8bba3285553bf647cdb"
+
cloneable-readable@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/cloneable-readable/-/cloneable-readable-1.0.0.tgz#a6290d413f217a61232f95e458ff38418cfb0117"
@@ -1096,17 +1130,17 @@ code-point-at@^1.0.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77"
-color-convert@^1.0.0:
+color-convert@^1.9.0:
version "1.9.0"
resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.0.tgz#1accf97dd739b983bf994d56fec8f95853641b7a"
dependencies:
color-name "^1.1.1"
color-name@^1.1.1:
- version "1.1.2"
- resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.2.tgz#5c8ab72b64bd2215d617ae9559ebb148475cf98d"
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25"
-colors@^1.0.3, colors@^1.1.2:
+colors@^1.1.2:
version "1.1.2"
resolved "https://registry.yarnpkg.com/colors/-/colors-1.1.2.tgz#168a4701756b6a7f51a12ce0c97bfa28c084ed63"
@@ -1116,11 +1150,9 @@ combined-stream@^1.0.5, combined-stream@~1.0.5:
dependencies:
delayed-stream "~1.0.0"
-commander@2.9.x, commander@~2.9.0:
- version "2.9.0"
- resolved "https://registry.yarnpkg.com/commander/-/commander-2.9.0.tgz#9c99094176e12240cb22d6c5146098400fe0f7d4"
- dependencies:
- graceful-readlink ">= 1.0.0"
+commander@2.11.x, commander@^2.9.0, commander@~2.11.0:
+ version "2.11.0"
+ resolved "https://registry.yarnpkg.com/commander/-/commander-2.11.0.tgz#157152fd1e7a6c8d98a5b715cf376df928004563"
common-path-prefix@^1.0.0:
version "1.0.0"
@@ -1130,7 +1162,7 @@ commondir@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b"
-compress-commons@^1.1.0:
+compress-commons@^1.2.0:
version "1.2.0"
resolved "https://registry.yarnpkg.com/compress-commons/-/compress-commons-1.2.0.tgz#58587092ef20d37cb58baf000112c9278ff73b9f"
dependencies:
@@ -1158,8 +1190,8 @@ concat-with-sourcemaps@^1.0.0:
source-map "^0.5.1"
configstore@^3.0.0:
- version "3.1.0"
- resolved "https://registry.yarnpkg.com/configstore/-/configstore-3.1.0.tgz#45df907073e26dfa1cf4b2d52f5b60545eaa11d1"
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/configstore/-/configstore-3.1.1.tgz#094ee662ab83fad9917678de114faaea8fcdca90"
dependencies:
dot-prop "^4.1.0"
graceful-fs "^4.1.2"
@@ -1202,10 +1234,10 @@ core-js@^1.0.0:
resolved "https://registry.yarnpkg.com/core-js/-/core-js-1.2.7.tgz#652294c14651db28fa93bd2d5ff2983a4f08c636"
core-js@^2.0.0, core-js@^2.4.0:
- version "2.4.1"
- resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.4.1.tgz#4de911e667b0eae9124e34254b53aea6fc618d3e"
+ version "2.5.0"
+ resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.5.0.tgz#569c050918be6486b3837552028ae0466b717086"
-core-util-is@~1.0.0:
+core-util-is@1.0.2, core-util-is@~1.0.0:
version "1.0.2"
resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7"
@@ -1253,20 +1285,29 @@ create-hmac@^1.1.0, create-hmac@^1.1.2, create-hmac@^1.1.4:
safe-buffer "^5.0.1"
sha.js "^2.4.8"
-cross-spawn-async@^2.1.1:
- version "2.2.5"
- resolved "https://registry.yarnpkg.com/cross-spawn-async/-/cross-spawn-async-2.2.5.tgz#845ff0c0834a3ded9d160daca6d390906bb288cc"
+create-react-class@^15.6.0:
+ version "15.6.0"
+ resolved "https://registry.yarnpkg.com/create-react-class/-/create-react-class-15.6.0.tgz#ab448497c26566e1e29413e883207d57cfe7bed4"
dependencies:
- lru-cache "^4.0.0"
- which "^1.2.8"
+ fbjs "^0.8.9"
+ loose-envify "^1.3.1"
+ object-assign "^4.1.1"
-cross-spawn@^4, cross-spawn@^4.0.0:
+cross-spawn@^4:
version "4.0.2"
resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-4.0.2.tgz#7b9247621c23adfdd3856004a823cbe397424d41"
dependencies:
lru-cache "^4.0.1"
which "^1.2.9"
+cross-spawn@^5.0.1:
+ version "5.1.0"
+ resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449"
+ dependencies:
+ lru-cache "^4.0.1"
+ shebang-command "^1.2.0"
+ which "^1.2.9"
+
cryptiles@2.x.x:
version "2.0.5"
resolved "https://registry.yarnpkg.com/cryptiles/-/cryptiles-2.0.5.tgz#3bdfecdc608147c1c67202fa291e7dca59eaa3b8"
@@ -1274,8 +1315,8 @@ cryptiles@2.x.x:
boom "2.x.x"
crypto-browserify@^3.11.0:
- version "3.11.0"
- resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.11.0.tgz#3652a0906ab9b2a7e0c3ce66a408e957a2485522"
+ version "3.11.1"
+ resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.11.1.tgz#948945efc6757a400d6e5e5af47194d10064279f"
dependencies:
browserify-cipher "^1.0.0"
browserify-sign "^4.0.0"
@@ -1341,8 +1382,8 @@ debug-log@^1.0.1:
resolved "https://registry.yarnpkg.com/debug-log/-/debug-log-1.0.1.tgz#2307632d4c04382b8df8a32f70b895046d52745f"
debug@^2.1.1, debug@^2.2.0, debug@^2.6.3:
- version "2.6.7"
- resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.7.tgz#92bad1f6d05bbb6bba22cca88bcd0ec894c2861e"
+ version "2.6.8"
+ resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.8.tgz#e731531ca2ede27d188222427da17821d68ff4fc"
dependencies:
ms "2.0.0"
@@ -1410,8 +1451,8 @@ diff-match-patch@^1.0.0:
resolved "https://registry.yarnpkg.com/diff-match-patch/-/diff-match-patch-1.0.0.tgz#1cc3c83a490d67f95d91e39f6ad1f2e086b63048"
diff@^3.0.0, diff@^3.0.1, diff@^3.2.0:
- version "3.2.0"
- resolved "https://registry.yarnpkg.com/diff/-/diff-3.2.0.tgz#c9ce393a4b7cbd0b058a725c93df299027868ff9"
+ version "3.3.0"
+ resolved "https://registry.yarnpkg.com/diff/-/diff-3.3.0.tgz#056695150d7aa93237ca7e378ac3b1682b7963b9"
diffie-hellman@^5.0.0:
version "5.0.2"
@@ -1434,6 +1475,10 @@ dom-serializer@0:
domelementtype "~1.1.1"
entities "~1.1.1"
+dom-walk@^0.1.0:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/dom-walk/-/dom-walk-0.1.1.tgz#672226dc74c8f799ad35307df936aba11acd6018"
+
domain-browser@^1.1.1:
version "1.1.7"
resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.1.7.tgz#867aa4b093faa05f1de08c06f4d7b21fdf8698bc"
@@ -1466,8 +1511,8 @@ domutils@1.5.1:
domelementtype "1"
dot-prop@^4.1.0:
- version "4.1.1"
- resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-4.1.1.tgz#a8493f0b7b5eeec82525b5c7587fa7de7ca859c1"
+ version "4.2.0"
+ resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-4.2.0.tgz#1f19e0c2e1aa0e32797c49799f2837ac6af69c57"
dependencies:
is-obj "^1.0.0"
@@ -1482,10 +1527,10 @@ duplexer3@^0.1.4:
resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.4.tgz#ee01dd1cac0ed3cbc7fdbea37dc0a8f1ce002ce2"
duplexify@^3.2.0:
- version "3.5.0"
- resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-3.5.0.tgz#1aa773002e1578457e9d9d4a50b0ccaaebcbd604"
+ version "3.5.1"
+ resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-3.5.1.tgz#4e1516be68838bc90a49994f0b39a6e5960befcd"
dependencies:
- end-of-stream "1.0.0"
+ end-of-stream "^1.0.0"
inherits "^2.0.1"
readable-stream "^2.0.0"
stream-shift "^1.0.0"
@@ -1513,8 +1558,8 @@ emojis-list@^2.0.0:
resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-2.1.0.tgz#4daa4d9db00f9819880c79fa457ae5b09a1fd389"
empower-core@^0.6.1:
- version "0.6.1"
- resolved "https://registry.yarnpkg.com/empower-core/-/empower-core-0.6.1.tgz#6c187f502fcef7554d57933396aac655483772b1"
+ version "0.6.2"
+ resolved "https://registry.yarnpkg.com/empower-core/-/empower-core-0.6.2.tgz#5adef566088e31fba80ba0a36df47d7094169144"
dependencies:
call-signature "0.0.2"
core-js "^2.0.0"
@@ -1525,11 +1570,11 @@ encoding@^0.1.11:
dependencies:
iconv-lite "~0.4.13"
-end-of-stream@1.0.0, end-of-stream@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.0.0.tgz#d4596e702734a93e40e9af864319eabd99ff2f0e"
+end-of-stream@^1.0.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.0.tgz#7a90d833efda6cfa6eac0f4949dbb0fad3a63206"
dependencies:
- once "~1.3.0"
+ once "^1.4.0"
end-of-stream@~0.1.5:
version "0.1.5"
@@ -1537,14 +1582,14 @@ end-of-stream@~0.1.5:
dependencies:
once "~1.3.0"
-enhanced-resolve@^3.0.0:
- version "3.1.0"
- resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-3.1.0.tgz#9f4b626f577245edcf4b2ad83d86e17f4f421dec"
+enhanced-resolve@^3.0.0, enhanced-resolve@^3.3.0:
+ version "3.4.1"
+ resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-3.4.1.tgz#0421e339fd71419b3da13d129b3979040230476e"
dependencies:
graceful-fs "^4.1.2"
memory-fs "^0.4.0"
object-assign "^4.0.1"
- tapable "^0.2.5"
+ tapable "^0.2.7"
entities@~1.1.1:
version "1.1.1"
@@ -1570,14 +1615,10 @@ es6-error@^4.0.1, es6-error@^4.0.2:
version "4.0.2"
resolved "https://registry.yarnpkg.com/es6-error/-/es6-error-4.0.2.tgz#eec5c726eacef51b7f6b73c20db6e1b13b069c98"
-escape-string-regexp@^1.0.0, escape-string-regexp@^1.0.4, escape-string-regexp@^1.0.5:
+escape-string-regexp@^1.0.0, escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.4, escape-string-regexp@^1.0.5:
version "1.0.5"
resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
-escape-string-regexp@^1.0.2:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.2.tgz#4dbc2fe674e71949caf3fb2695ce7f2dc1d9a8d1"
-
espower-location-detector@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/espower-location-detector/-/espower-location-detector-1.0.0.tgz#a17b7ecc59d30e179e2bef73fb4137704cb331b5"
@@ -1587,9 +1628,9 @@ espower-location-detector@^1.0.0:
source-map "^0.5.0"
xtend "^4.0.0"
-esprima@^3.1.1:
- version "3.1.3"
- resolved "https://registry.yarnpkg.com/esprima/-/esprima-3.1.3.tgz#fdca51cee6133895e3c88d535ce49dbff62a4633"
+esprima@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.0.tgz#4499eddcd1110e0b218bacf2fa7f7f59f55ca804"
espurify@^1.6.0:
version "1.7.0"
@@ -1615,23 +1656,12 @@ evp_bytestokey@^1.0.0:
dependencies:
create-hash "^1.1.1"
-execa@^0.4.0:
- version "0.4.0"
- resolved "https://registry.yarnpkg.com/execa/-/execa-0.4.0.tgz#4eb6467a36a095fabb2970ff9d5e3fb7bce6ebc3"
- dependencies:
- cross-spawn-async "^2.1.1"
- is-stream "^1.1.0"
- npm-run-path "^1.0.0"
- object-assign "^4.0.1"
- path-key "^1.0.0"
- strip-eof "^1.0.0"
-
-execa@^0.5.0:
- version "0.5.1"
- resolved "https://registry.yarnpkg.com/execa/-/execa-0.5.1.tgz#de3fb85cb8d6e91c85bcbceb164581785cb57b36"
+execa@^0.7.0:
+ version "0.7.0"
+ resolved "https://registry.yarnpkg.com/execa/-/execa-0.7.0.tgz#944becd34cc41ee32a63a9faf27ad5a65fc59777"
dependencies:
- cross-spawn "^4.0.0"
- get-stream "^2.2.0"
+ cross-spawn "^5.0.1"
+ get-stream "^3.0.0"
is-stream "^1.1.0"
npm-run-path "^2.0.0"
p-finally "^1.0.0"
@@ -1650,12 +1680,18 @@ expand-range@^1.8.1:
dependencies:
fill-range "^2.1.0"
-expand-tilde@^1.2.1, expand-tilde@^1.2.2:
+expand-tilde@^1.2.2:
version "1.2.2"
resolved "https://registry.yarnpkg.com/expand-tilde/-/expand-tilde-1.2.2.tgz#0b81eba897e5a3d31d1c3d102f8f01441e559449"
dependencies:
os-homedir "^1.0.1"
+expand-tilde@^2.0.2:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/expand-tilde/-/expand-tilde-2.0.2.tgz#97e801aa052df02454de46b02bf621642cdc8502"
+ dependencies:
+ homedir-polyfill "^1.0.1"
+
extend-shallow@^2.0.1:
version "2.0.1"
resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f"
@@ -1672,9 +1708,9 @@ extglob@^0.3.1:
dependencies:
is-extglob "^1.0.0"
-extsprintf@1.0.2:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.0.2.tgz#e1080e0658e300b06294990cc70e1502235fd550"
+extsprintf@1.3.0, extsprintf@^1.2.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05"
fancy-log@^1.1.0:
version "1.3.0"
@@ -1684,8 +1720,8 @@ fancy-log@^1.1.0:
time-stamp "^1.0.0"
fbjs@^0.8.9:
- version "0.8.12"
- resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-0.8.12.tgz#10b5d92f76d45575fd63a217d4ea02bea2f8ed04"
+ version "0.8.14"
+ resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-0.8.14.tgz#d1dbe2be254c35a91e09f31f9cd50a40b2a0ed1c"
dependencies:
core-js "^1.0.0"
isomorphic-fetch "^2.1.1"
@@ -1734,7 +1770,7 @@ find-up@^1.0.0, find-up@^1.1.2:
path-exists "^2.0.0"
pinkie-promise "^2.0.0"
-find-up@^2.0.0:
+find-up@^2.0.0, find-up@^2.1.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7"
dependencies:
@@ -1750,15 +1786,13 @@ findup-sync@^0.4.2:
resolve-dir "^0.1.0"
fined@^1.0.1:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/fined/-/fined-1.0.2.tgz#5b28424b760d7598960b7ef8480dff8ad3660e97"
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/fined/-/fined-1.1.0.tgz#b37dc844b76a2f5e7081e884f7c0ae344f153476"
dependencies:
- expand-tilde "^1.2.1"
- lodash.assignwith "^4.0.7"
- lodash.isempty "^4.2.1"
- lodash.isplainobject "^4.0.4"
- lodash.isstring "^4.0.1"
- lodash.pick "^4.2.1"
+ expand-tilde "^2.0.2"
+ is-plain-object "^2.0.3"
+ object.defaults "^1.1.0"
+ object.pick "^1.2.0"
parse-filepath "^1.0.1"
first-chunk-stream@^1.0.0:
@@ -1783,6 +1817,12 @@ for-own@^0.1.4:
dependencies:
for-in "^1.0.1"
+for-own@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/for-own/-/for-own-1.0.0.tgz#c63332f415cedc4b04dbfe70cf836494c53cb44b"
+ dependencies:
+ for-in "^1.0.1"
+
foreground-child@^1.3.3, foreground-child@^1.5.3:
version "1.5.6"
resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-1.5.6.tgz#4fd71ad2dfde96789b980a5c0a295937cb2f5ce9"
@@ -1819,11 +1859,11 @@ fs.realpath@^1.0.0:
resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
fsevents@^1.0.0:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.1.1.tgz#f19fd28f43eeaf761680e519a203c4d0b3d31aff"
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.1.2.tgz#3282b713fb3ad80ede0e9fcf4611b5aa6fc033f4"
dependencies:
nan "^2.3.0"
- node-pre-gyp "^0.6.29"
+ node-pre-gyp "^0.6.36"
fstream-ignore@^1.0.5:
version "1.0.5"
@@ -1873,13 +1913,6 @@ get-stdin@^4.0.1:
version "4.0.1"
resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe"
-get-stream@^2.2.0:
- version "2.3.1"
- resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-2.3.1.tgz#5f38f93f346009666ee0150a054167f91bdd95de"
- dependencies:
- object-assign "^4.0.1"
- pinkie-promise "^2.0.0"
-
get-stream@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14"
@@ -2006,9 +2039,16 @@ global-prefix@^0.1.4:
is-windows "^0.2.0"
which "^1.2.12"
+global@^4.3.2:
+ version "4.3.2"
+ resolved "https://registry.yarnpkg.com/global/-/global-4.3.2.tgz#e76989268a6c74c38908b1305b10fc0e394e9d0f"
+ dependencies:
+ min-document "^2.19.0"
+ process "~0.5.1"
+
globals@^9.0.0:
- version "9.17.0"
- resolved "https://registry.yarnpkg.com/globals/-/globals-9.17.0.tgz#0c0ca696d9b9bb694d2e5470bd37777caad50286"
+ version "9.18.0"
+ resolved "https://registry.yarnpkg.com/globals/-/globals-9.18.0.tgz#aa3896b3e69b487f17e31ed2143d69a8e30c2d8a"
globby@^6.0.0:
version "6.1.0"
@@ -2064,10 +2104,6 @@ graceful-fs@~1.2.0:
version "1.2.3"
resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-1.2.3.tgz#15a4806a57547cb2d2dbf27f42e89a8c3451b364"
-"graceful-readlink@>= 1.0.0":
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/graceful-readlink/-/graceful-readlink-1.0.1.tgz#4cafad76bc62f02fa039b2f94e9a3dd3a391a725"
-
gulp-concat@^2.6.0:
version "2.6.1"
resolved "https://registry.yarnpkg.com/gulp-concat/-/gulp-concat-2.6.1.tgz#633d16c95d88504628ad02665663cee5a4793353"
@@ -2144,8 +2180,8 @@ gulp-tar@^1.8.0:
through2 "^2.0.0"
gulp-typescript@^3.0.2:
- version "3.1.6"
- resolved "https://registry.yarnpkg.com/gulp-typescript/-/gulp-typescript-3.1.6.tgz#6c67b84364cf3589a9ad6fdea2e3c0bc525c435e"
+ version "3.2.1"
+ resolved "https://registry.yarnpkg.com/gulp-typescript/-/gulp-typescript-3.2.1.tgz#52cd77e9c6844e3b9a8bddd88e884ceb46a5db79"
dependencies:
gulp-util "~3.0.7"
source-map "~0.5.3"
@@ -2288,10 +2324,11 @@ hash-base@^2.0.0:
inherits "^2.0.1"
hash.js@^1.0.0, hash.js@^1.0.3:
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.0.3.tgz#1332ff00156c0a0ffdd8236013d07b77a0451573"
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.3.tgz#340dedbe6290187151c1ea1d777a3448935df846"
dependencies:
- inherits "^2.0.1"
+ inherits "^2.0.3"
+ minimalistic-assert "^1.0.0"
hawk@~3.1.3:
version "3.1.3"
@@ -2307,8 +2344,8 @@ he@1.1.x:
resolved "https://registry.yarnpkg.com/he/-/he-1.1.1.tgz#93410fd21b009735151f8868c2f271f3427e23fd"
highlight.js@^9.0.0:
- version "9.11.0"
- resolved "https://registry.yarnpkg.com/highlight.js/-/highlight.js-9.11.0.tgz#47f98c7399918700db2caf230ded12cec41a84ae"
+ version "9.12.0"
+ resolved "https://registry.yarnpkg.com/highlight.js/-/highlight.js-9.12.0.tgz#e6d9dbe57cbefe60751f02af336195870c90c01e"
hmac-drbg@^1.0.0:
version "1.0.1"
@@ -2329,23 +2366,23 @@ home-or-tmp@^2.0.0:
os-homedir "^1.0.0"
os-tmpdir "^1.0.1"
-homedir-polyfill@^1.0.0:
+homedir-polyfill@^1.0.0, homedir-polyfill@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/homedir-polyfill/-/homedir-polyfill-1.0.1.tgz#4c2bbc8a758998feebf5ed68580f76d46768b4bc"
dependencies:
parse-passwd "^1.0.0"
hosted-git-info@^2.1.4:
- version "2.4.2"
- resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.4.2.tgz#0076b9f46a270506ddbaaea56496897460612a67"
+ version "2.5.0"
+ resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.5.0.tgz#6d60e34b3abbc8313062c3b798ef8d901a07af3c"
html-minifier@^3.2.3:
- version "3.5.1"
- resolved "https://registry.yarnpkg.com/html-minifier/-/html-minifier-3.5.1.tgz#0fbba015129b4ac9a30b887aec66f39d57cd37a9"
+ version "3.5.3"
+ resolved "https://registry.yarnpkg.com/html-minifier/-/html-minifier-3.5.3.tgz#4a275e3b1a16639abb79b4c11191ff0d0fcf1ab9"
dependencies:
camel-case "3.0.x"
clean-css "4.1.x"
- commander "2.9.x"
+ commander "2.11.x"
he "1.1.x"
ncname "1.0.x"
param-case "2.1.x"
@@ -2353,8 +2390,8 @@ html-minifier@^3.2.3:
uglify-js "3.0.x"
html-webpack-plugin@^2.28.0:
- version "2.28.0"
- resolved "https://registry.yarnpkg.com/html-webpack-plugin/-/html-webpack-plugin-2.28.0.tgz#2e7863b57e5fd48fe263303e2ffc934c3064d009"
+ version "2.30.1"
+ resolved "https://registry.yarnpkg.com/html-webpack-plugin/-/html-webpack-plugin-2.30.1.tgz#7f9c421b7ea91ec460f56527d78df484ee7537d5"
dependencies:
bluebird "^3.4.7"
html-minifier "^3.2.3"
@@ -2385,8 +2422,8 @@ https-browserify@0.0.1:
resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-0.0.1.tgz#3f91365cabe60b77ed0ebba24b454e3e09d95a82"
hullabaloo-config-manager@^1.0.0:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/hullabaloo-config-manager/-/hullabaloo-config-manager-1.0.1.tgz#c72be7ba249a67c99b6ba3eb1f55837fa01acd8f"
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/hullabaloo-config-manager/-/hullabaloo-config-manager-1.1.1.tgz#1d9117813129ad035fd9e8477eaf066911269fe3"
dependencies:
dot-prop "^4.1.0"
es6-error "^4.0.2"
@@ -2399,12 +2436,13 @@ hullabaloo-config-manager@^1.0.0:
lodash.merge "^4.6.0"
md5-hex "^2.0.0"
package-hash "^2.0.0"
- pkg-dir "^1.0.0"
- resolve-from "^2.0.0"
+ pkg-dir "^2.0.0"
+ resolve-from "^3.0.0"
+ safe-buffer "^5.0.1"
iconv-lite@~0.4.13:
- version "0.4.17"
- resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.17.tgz#4fdaa3b38acbc2c031b045d0edcdfe1ecab18c8d"
+ version "0.4.18"
+ resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.18.tgz#23d8656b16aae6742ac29732ea8f0336a4789cf2"
ieee754@^1.1.4:
version "1.1.8"
@@ -2414,6 +2452,10 @@ ignore-by-default@^1.0.0:
version "1.0.1"
resolved "https://registry.yarnpkg.com/ignore-by-default/-/ignore-by-default-1.0.1.tgz#48ca6d72f6c6a3af00a9ad4ae6876be3889e2b09"
+import-lazy@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/import-lazy/-/import-lazy-2.1.0.tgz#05698e3d45c88e8d7e9d92cb0584e77f096f3e43"
+
imurmurhash@^0.1.4:
version "0.1.4"
resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea"
@@ -2425,8 +2467,8 @@ indent-string@^2.1.0:
repeating "^2.0.0"
indent-string@^3.0.0, indent-string@^3.1.0:
- version "3.1.0"
- resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-3.1.0.tgz#08ff4334603388399b329e6b9538dc7a3cf5de7d"
+ version "3.2.0"
+ resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-3.2.0.tgz#4a5fd6d27cc332f37e5419a504dbb837105c9289"
indexof@0.0.1:
version "0.0.1"
@@ -2443,7 +2485,7 @@ inherits@1:
version "1.0.2"
resolved "https://registry.yarnpkg.com/inherits/-/inherits-1.0.2.tgz#ca4309dadee6b54cc0b8d247e8d7c7a0975bdc9b"
-inherits@2, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.0, inherits@~2.0.1:
+inherits@2, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.0, inherits@~2.0.1, inherits@~2.0.3:
version "2.0.3"
resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de"
@@ -2470,8 +2512,8 @@ invert-kv@^1.0.0:
resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6"
irregular-plurals@^1.0.0:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/irregular-plurals/-/irregular-plurals-1.2.0.tgz#38f299834ba8c00c30be9c554e137269752ff3ac"
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/irregular-plurals/-/irregular-plurals-1.3.0.tgz#7af06931bdf74be33dcf585a13e06fccc16caecf"
is-absolute@^0.2.3:
version "0.2.6"
@@ -2507,8 +2549,8 @@ is-ci@^1.0.7:
ci-info "^1.0.0"
is-dotfile@^1.0.0:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/is-dotfile/-/is-dotfile-1.0.2.tgz#2c132383f39199f8edc268ca01b9b007d205cc4d"
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/is-dotfile/-/is-dotfile-1.0.3.tgz#a6a2f32ffd2dfb04f5ca25ecd0f6b83cf798a1e1"
is-equal-shallow@^0.1.3:
version "0.1.3"
@@ -2568,12 +2610,18 @@ is-npm@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/is-npm/-/is-npm-1.0.0.tgz#f2fb63a65e4905b406c86072765a1a4dc793b9f4"
-is-number@^2.0.2, is-number@^2.1.0:
+is-number@^2.1.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/is-number/-/is-number-2.1.0.tgz#01fcbbb393463a548f2f466cce16dece49db908f"
dependencies:
kind-of "^3.0.2"
+is-number@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195"
+ dependencies:
+ kind-of "^3.0.2"
+
is-obj@^1.0.0:
version "1.0.1"
resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f"
@@ -2588,6 +2636,12 @@ is-plain-obj@^1.0.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e"
+is-plain-object@^2.0.3:
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677"
+ dependencies:
+ isobject "^3.0.1"
+
is-posix-bracket@^0.1.0:
version "0.1.1"
resolved "https://registry.yarnpkg.com/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz#3334dc79774368e92f016e6fbc0a88f5cd6e6bc4"
@@ -2660,12 +2714,16 @@ isexe@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10"
-isobject@^2.0.0:
+isobject@^2.0.0, isobject@^2.1.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89"
dependencies:
isarray "1.0.0"
+isobject@^3.0.0, isobject@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df"
+
isomorphic-fetch@^2.1.1:
version "2.2.1"
resolved "https://registry.yarnpkg.com/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz#611ae1acf14f5e81f729507472819fe9733558a9"
@@ -2677,50 +2735,50 @@ isstream@~0.1.2:
version "0.1.2"
resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a"
-istanbul-lib-coverage@^1.1.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-1.1.0.tgz#caca19decaef3525b5d6331d701f3f3b7ad48528"
+istanbul-lib-coverage@^1.1.0, istanbul-lib-coverage@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-1.1.1.tgz#73bfb998885299415c93d38a3e9adf784a77a9da"
istanbul-lib-hook@^1.0.6:
- version "1.0.6"
- resolved "https://registry.yarnpkg.com/istanbul-lib-hook/-/istanbul-lib-hook-1.0.6.tgz#c0866d1e81cf2d5319249510131fc16dee49231f"
+ version "1.0.7"
+ resolved "https://registry.yarnpkg.com/istanbul-lib-hook/-/istanbul-lib-hook-1.0.7.tgz#dd6607f03076578fe7d6f2a630cf143b49bacddc"
dependencies:
append-transform "^0.4.0"
istanbul-lib-instrument@^1.7.1:
- version "1.7.1"
- resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-1.7.1.tgz#169e31bc62c778851a99439dd99c3cc12184d360"
+ version "1.7.4"
+ resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-1.7.4.tgz#e9fd920e4767f3d19edc765e2d6b3f5ccbd0eea8"
dependencies:
babel-generator "^6.18.0"
babel-template "^6.16.0"
babel-traverse "^6.18.0"
babel-types "^6.18.0"
- babylon "^6.13.0"
- istanbul-lib-coverage "^1.1.0"
+ babylon "^6.17.4"
+ istanbul-lib-coverage "^1.1.1"
semver "^5.3.0"
istanbul-lib-report@^1.1.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-1.1.0.tgz#444c4ecca9afa93cf584f56b10f195bf768c0770"
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-1.1.1.tgz#f0e55f56655ffa34222080b7a0cd4760e1405fc9"
dependencies:
- istanbul-lib-coverage "^1.1.0"
+ istanbul-lib-coverage "^1.1.1"
mkdirp "^0.5.1"
path-parse "^1.0.5"
supports-color "^3.1.2"
istanbul-lib-source-maps@^1.2.0:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-1.2.0.tgz#8c7706d497e26feeb6af3e0c28fd5b0669598d0e"
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-1.2.1.tgz#a6fe1acba8ce08eebc638e572e294d267008aa0c"
dependencies:
debug "^2.6.3"
- istanbul-lib-coverage "^1.1.0"
+ istanbul-lib-coverage "^1.1.1"
mkdirp "^0.5.1"
rimraf "^2.6.1"
source-map "^0.5.3"
istanbul-reports@^1.1.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-1.1.0.tgz#1ef3b795889219cfb5fad16365f6ce108d5f8c66"
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-1.1.1.tgz#042be5c89e175bc3f86523caab29c014e77fee4e"
dependencies:
handlebars "^4.0.3"
@@ -2793,22 +2851,16 @@ jest-validate@^19.0.2:
leven "^2.0.0"
pretty-format "^19.0.0"
-jodid25519@^1.0.0:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/jodid25519/-/jodid25519-1.0.2.tgz#06d4912255093419477d425633606e0e90782967"
- dependencies:
- jsbn "~0.1.0"
-
js-tokens@^3.0.0:
- version "3.0.1"
- resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.1.tgz#08e9f132484a2c45a30907e9dc4d5567b7f114d7"
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b"
js-yaml@^3.8.2:
- version "3.8.4"
- resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.8.4.tgz#520b4564f86573ba96662af85a8cafa7b4b5a6f6"
+ version "3.9.1"
+ resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.9.1.tgz#08775cebdfdd359209f0d2acd383c8f86a6904a0"
dependencies:
argparse "^1.0.7"
- esprima "^3.1.1"
+ esprima "^4.0.0"
jsbn@~0.1.0:
version "0.1.1"
@@ -2823,8 +2875,8 @@ jsesc@~0.5.0:
resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d"
json-loader@^0.5.4:
- version "0.5.4"
- resolved "https://registry.yarnpkg.com/json-loader/-/json-loader-0.5.4.tgz#8baa1365a632f58a3c46d20175fc6002c96e37de"
+ version "0.5.7"
+ resolved "https://registry.yarnpkg.com/json-loader/-/json-loader-0.5.7.tgz#dca14a70235ff82f0ac9a3abeb60d337a365185d"
json-schema@0.2.3:
version "0.2.3"
@@ -2845,8 +2897,8 @@ json5@^0.5.0, json5@^0.5.1:
resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821"
jsonfile@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-3.0.0.tgz#92e7c7444e5ffd5fa32e6a9ae8b85034df8347d0"
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-3.0.1.tgz#a5ecc6f65f53f662c4415c7675a0331d0992ec66"
optionalDependencies:
graceful-fs "^4.1.6"
@@ -2855,13 +2907,13 @@ jsonify@~0.0.0:
resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73"
jsprim@^1.2.2:
- version "1.4.0"
- resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.0.tgz#a3b87e40298d8c380552d8cc7628a0bb95a22918"
+ version "1.4.1"
+ resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2"
dependencies:
assert-plus "1.0.0"
- extsprintf "1.0.2"
+ extsprintf "1.3.0"
json-schema "0.2.3"
- verror "1.3.6"
+ verror "1.10.0"
kind-of@^3.0.2:
version "3.2.2"
@@ -2869,6 +2921,12 @@ kind-of@^3.0.2:
dependencies:
is-buffer "^1.1.5"
+kind-of@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57"
+ dependencies:
+ is-buffer "^1.1.5"
+
last-line-stream@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/last-line-stream/-/last-line-stream-1.0.0.tgz#d1b64d69f86ff24af2d04883a2ceee14520a5600"
@@ -2885,10 +2943,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-req@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/lazy-req/-/lazy-req-2.0.0.tgz#c9450a363ecdda2e6f0c70132ad4f37f8f06f2b4"
-
lazystream@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/lazystream/-/lazystream-1.0.0.tgz#f6995fe0f820392f61396be89462407bb77168e4"
@@ -3041,10 +3095,6 @@ lodash._shimkeys@~2.4.1:
dependencies:
lodash._objecttypes "~2.4.1"
-lodash.assignwith@^4.0.7:
- version "4.2.0"
- resolved "https://registry.yarnpkg.com/lodash.assignwith/-/lodash.assignwith-4.2.0.tgz#127a97f02adc41751a954d24b0de17e100e038eb"
-
lodash.clonedeep@^4.5.0:
version "4.5.0"
resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef"
@@ -3098,10 +3148,6 @@ lodash.isarray@^3.0.0:
version "3.0.4"
resolved "https://registry.yarnpkg.com/lodash.isarray/-/lodash.isarray-3.0.4.tgz#79e4eb88c36a8122af86f844aa9bcd851b5fbb55"
-lodash.isempty@^4.2.1:
- version "4.4.0"
- resolved "https://registry.yarnpkg.com/lodash.isempty/-/lodash.isempty-4.4.0.tgz#6f86cbedd8be4ec987be9aaf33c9684db1b31e7e"
-
lodash.isequal@^4.0.0, lodash.isequal@^4.5.0:
version "4.5.0"
resolved "https://registry.yarnpkg.com/lodash.isequal/-/lodash.isequal-4.5.0.tgz#415c4478f2bcc30120c22ce10ed3226f7d3e18e0"
@@ -3144,10 +3190,6 @@ lodash.merge@^4.6.0:
version "4.6.0"
resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.0.tgz#69884ba144ac33fe699737a6086deffadd0f89c5"
-lodash.pick@^4.2.1:
- version "4.4.0"
- resolved "https://registry.yarnpkg.com/lodash.pick/-/lodash.pick-4.4.0.tgz#52f05610fff9ded422611441ed1fc123a03001b3"
-
lodash.restparam@^3.0.0:
version "3.6.1"
resolved "https://registry.yarnpkg.com/lodash.restparam/-/lodash.restparam-3.6.1.tgz#936a4e309ef330a7645ed4145986c85ae5b20805"
@@ -3235,12 +3277,12 @@ lru-cache@2:
version "2.7.3"
resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-2.7.3.tgz#6d4524e8b955f95d4f5b58851ce21dd72fb4e952"
-lru-cache@^4.0.0, lru-cache@^4.0.1:
- version "4.0.2"
- resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.0.2.tgz#1d17679c069cda5d040991a09dbc2c0db377e55e"
+lru-cache@^4.0.1:
+ version "4.1.1"
+ resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.1.tgz#622e32e82488b49279114a4f9ecf45e7cd6bba55"
dependencies:
- pseudomap "^1.0.1"
- yallist "^2.0.0"
+ pseudomap "^1.0.2"
+ yallist "^2.1.2"
make-dir@^1.0.0:
version "1.0.0"
@@ -3309,10 +3351,10 @@ meow@^3.3.0, meow@^3.7.0:
trim-newlines "^1.0.0"
merge-source-map@^1.0.2:
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/merge-source-map/-/merge-source-map-1.0.3.tgz#da1415f2722a5119db07b14c4f973410863a2abf"
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/merge-source-map/-/merge-source-map-1.0.4.tgz#a5de46538dae84d4114cc5ea02b4772a6346701f"
dependencies:
- source-map "^0.5.3"
+ source-map "^0.5.6"
merge-stream@^1.0.0:
version "1.0.1"
@@ -3345,20 +3387,26 @@ miller-rabin@^4.0.0:
bn.js "^4.0.0"
brorand "^1.0.1"
-mime-db@~1.27.0:
- version "1.27.0"
- resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.27.0.tgz#820f572296bbd20ec25ed55e5b5de869e5436eb1"
+mime-db@~1.29.0:
+ version "1.29.0"
+ resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.29.0.tgz#48d26d235589651704ac5916ca06001914266878"
mime-types@^2.1.12, mime-types@~2.1.7:
- version "2.1.15"
- resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.15.tgz#a4ebf5064094569237b8cf70046776d09fc92aed"
+ version "2.1.16"
+ resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.16.tgz#2b858a52e5ecd516db897ac2be87487830698e23"
dependencies:
- mime-db "~1.27.0"
+ mime-db "~1.29.0"
mimic-fn@^1.0.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.1.0.tgz#e667783d92e89dbd342818b5230b9d62a672ad18"
+min-document@^2.19.0:
+ version "2.19.0"
+ resolved "https://registry.yarnpkg.com/min-document/-/min-document-2.19.0.tgz#7bd282e3f5842ed295bb748cdd9f1ffa2c824685"
+ dependencies:
+ dom-walk "^0.1.0"
+
minimalistic-assert@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.0.tgz#702be2dda6b37f4836bcb3f5db56641b64a1d3d3"
@@ -3386,7 +3434,7 @@ minimatch@~0.2.11:
lru-cache "2"
sigmund "~1.0.0"
-minimist@0.0.8, minimist@~0.0.1:
+minimist@0.0.8:
version "0.0.8"
resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d"
@@ -3398,6 +3446,10 @@ minimist@^1.1.0, minimist@^1.1.3, minimist@^1.2.0:
version "1.2.0"
resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284"
+minimist@~0.0.1:
+ version "0.0.10"
+ resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.10.tgz#de3f98543dbf96082be48ad1a0c7cda836301dcf"
+
"mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.0:
version "0.5.1"
resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903"
@@ -3413,8 +3465,8 @@ ms@2.0.0:
resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8"
ms@^0.7.1:
- version "0.7.1"
- resolved "https://registry.yarnpkg.com/ms/-/ms-0.7.1.tgz#9cd13c03adbff25b65effde7ce864ee952017098"
+ version "0.7.3"
+ resolved "https://registry.yarnpkg.com/ms/-/ms-0.7.3.tgz#708155a5e44e33f5fd0fc53e81d0d40a91be1fff"
multimatch@^2.1.0:
version "2.1.0"
@@ -3456,8 +3508,8 @@ no-case@^2.2.0:
lower-case "^1.1.1"
node-fetch@^1.0.1:
- version "1.7.0"
- resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-1.7.0.tgz#3ff6c56544f9b7fb00682338bb55ee6f54a8a0ef"
+ version "1.7.2"
+ resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-1.7.2.tgz#c54e9aac57e432875233525f3c891c4159ffefd7"
dependencies:
encoding "^0.1.11"
is-stream "^1.0.1"
@@ -3490,9 +3542,9 @@ node-libs-browser@^2.0.0:
util "^0.10.3"
vm-browserify "0.0.4"
-node-pre-gyp@^0.6.29:
- version "0.6.34"
- resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.6.34.tgz#94ad1c798a11d7fc67381b50d47f8cc18d9799f7"
+node-pre-gyp@^0.6.36:
+ version "0.6.36"
+ resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.6.36.tgz#db604112cb74e0d477554e9b505b17abddfab786"
dependencies:
mkdirp "^0.5.1"
nopt "^4.0.1"
@@ -3519,8 +3571,8 @@ nopt@^4.0.1:
osenv "^0.1.4"
normalize-package-data@^2.3.2, normalize-package-data@^2.3.4:
- version "2.3.8"
- resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.3.8.tgz#d819eda2a9dedbd1ffa563ea4071d936782295bb"
+ version "2.4.0"
+ resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.4.0.tgz#12f95a307d58352075a04907b84ac8be98ac012f"
dependencies:
hosted-git-info "^2.1.4"
is-builtin-module "^1.0.0"
@@ -3533,12 +3585,6 @@ normalize-path@^2.0.0, normalize-path@^2.0.1:
dependencies:
remove-trailing-separator "^1.0.1"
-npm-run-path@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-1.0.0.tgz#f5c32bf595fe81ae927daec52e82f8b000ac3c8f"
- dependencies:
- path-key "^1.0.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"
@@ -3546,8 +3592,8 @@ npm-run-path@^2.0.0:
path-key "^2.0.0"
npmlog@^4.0.2:
- version "4.1.0"
- resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.0.tgz#dc59bee85f64f00ed424efb2af0783df25d1c0b5"
+ version "4.1.2"
+ resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b"
dependencies:
are-we-there-yet "~1.1.2"
console-control-strings "~1.1.0"
@@ -3604,7 +3650,7 @@ object-assign@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-3.0.0.tgz#9bedd5ca0897949bca47e7ff408062d549f587f2"
-object-assign@^4.0.0, object-assign@^4.0.1, object-assign@^4.1.0:
+object-assign@^4.0.0, object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1:
version "4.1.1"
resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863"
@@ -3612,6 +3658,15 @@ object-keys@~0.4.0:
version "0.4.0"
resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-0.4.0.tgz#28a6aae7428dd2c3a92f3d95f21335dd204e0336"
+object.defaults@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/object.defaults/-/object.defaults-1.1.0.tgz#3a7f868334b407dea06da16d88d5cd29e435fecf"
+ dependencies:
+ array-each "^1.0.1"
+ array-slice "^1.0.0"
+ for-own "^1.0.0"
+ isobject "^3.0.0"
+
object.omit@^2.0.0:
version "2.0.1"
resolved "https://registry.yarnpkg.com/object.omit/-/object.omit-2.0.1.tgz#1a9c744829f39dbb858c76ca3579ae2a54ebd1fa"
@@ -3619,6 +3674,12 @@ object.omit@^2.0.0:
for-own "^0.1.4"
is-extendable "^0.1.1"
+object.pick@^1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.2.0.tgz#b5392bee9782da6d9fb7d6afaf539779f1234c2b"
+ dependencies:
+ isobject "^2.1.0"
+
observable-to-promise@^0.5.0:
version "0.5.0"
resolved "https://registry.yarnpkg.com/observable-to-promise/-/observable-to-promise-0.5.0.tgz#c828f0f0dc47e9f86af8a4977c5d55076ce7a91f"
@@ -3626,7 +3687,7 @@ observable-to-promise@^0.5.0:
is-observable "^0.2.0"
symbol-observable "^1.0.4"
-once@^1.3.0, once@^1.3.3:
+once@^1.3.0, once@^1.3.3, once@^1.4.0:
version "1.4.0"
resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
dependencies:
@@ -3644,7 +3705,7 @@ onetime@^2.0.0:
dependencies:
mimic-fn "^1.0.0"
-optimist@^0.6.1, optimist@~0.6.0:
+optimist@^0.6.1:
version "0.6.1"
resolved "https://registry.yarnpkg.com/optimist/-/optimist-0.6.1.tgz#da3ea74686fa21a19a111c326e90eb15a0196686"
dependencies:
@@ -3816,10 +3877,6 @@ 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-key@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/path-key/-/path-key-1.0.0.tgz#5d53d578019646c0d68800db4e146e6bdc2ac7af"
-
path-key@^2.0.0:
version "2.0.1"
resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40"
@@ -3853,8 +3910,8 @@ path-type@^2.0.0:
pify "^2.0.0"
pbkdf2@^3.0.3:
- version "3.0.12"
- resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.0.12.tgz#be36785c5067ea48d806ff923288c5f750b6b8a2"
+ version "3.0.13"
+ resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.0.13.tgz#c37d295531e786b1da3e3eadc840426accb0ae25"
dependencies:
create-hash "^1.1.2"
create-hmac "^1.1.4"
@@ -3903,6 +3960,12 @@ pkg-dir@^1.0.0:
dependencies:
find-up "^1.0.0"
+pkg-dir@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-2.0.0.tgz#f6d5d1109e19d63edf428e0bd57e12777615334b"
+ dependencies:
+ find-up "^2.1.0"
+
plur@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/plur/-/plur-1.0.0.tgz#db85c6814f5e5e5a3b49efc28d604fec62975156"
@@ -3915,7 +3978,7 @@ plur@^2.0.0:
"po2json@git+https://github.com/mikeedwards/po2json":
version "0.4.5"
- resolved "git+https://github.com/mikeedwards/po2json#64ba134fc294d6ad60de3ea487ddc1f76c489a2b"
+ resolved "git+https://github.com/mikeedwards/po2json#e4ebf5fd2efac1e5b1f75e27973e4cb63ce6bcfa"
dependencies:
gettext-parser "1.1.0"
nomnom "1.8.1"
@@ -3932,8 +3995,8 @@ preserve@^0.2.0:
resolved "https://registry.yarnpkg.com/preserve/-/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b"
pretty-error@^2.0.2:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/pretty-error/-/pretty-error-2.1.0.tgz#87f4e9d706a24c87d6cbee9fabec001fcf8c75d8"
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/pretty-error/-/pretty-error-2.1.1.tgz#5f4f87c8f91e5ae3f3ba87ab4cf5e03b1a17f1a3"
dependencies:
renderkid "^2.0.1"
utila "~0.4"
@@ -3974,17 +4037,21 @@ process@^0.11.0:
version "0.11.10"
resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182"
+process@~0.5.1:
+ version "0.5.2"
+ resolved "https://registry.yarnpkg.com/process/-/process-0.5.2.tgz#1638d8a8e34c2f440a91db95ab9aeb677fc185cf"
+
progress@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.0.tgz#8a1be366bf8fc23db2bd23f10c6fe920b4389d1f"
promise@^7.1.1:
- version "7.1.1"
- resolved "https://registry.yarnpkg.com/promise/-/promise-7.1.1.tgz#489654c692616b8aa55b0724fa809bb7db49c5bf"
+ version "7.3.1"
+ resolved "https://registry.yarnpkg.com/promise/-/promise-7.3.1.tgz#064b72602b18f90f29192b8b1bc418ffd1ebd3bf"
dependencies:
asap "~2.0.3"
-prop-types@^15.5.7, prop-types@~15.5.7:
+prop-types@^15.5.10:
version "15.5.10"
resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.5.10.tgz#2797dfc3126182e3a95e3dfbb2e893ddd7456154"
dependencies:
@@ -3995,7 +4062,7 @@ prr@~0.0.0:
version "0.0.0"
resolved "https://registry.yarnpkg.com/prr/-/prr-0.0.0.tgz#1a84b85908325501411853d0081ee3fa86e2926a"
-pseudomap@^1.0.1:
+pseudomap@^1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3"
@@ -4030,15 +4097,17 @@ querystring@0.2.0:
resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620"
randomatic@^1.1.3:
- version "1.1.6"
- resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-1.1.6.tgz#110dcabff397e9dcff7c0789ccc0a49adf1ec5bb"
+ version "1.1.7"
+ resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-1.1.7.tgz#c7abe9cc8b87c0baa876b19fde83fd464797e38c"
dependencies:
- is-number "^2.0.2"
- kind-of "^3.0.2"
+ is-number "^3.0.0"
+ kind-of "^4.0.0"
randombytes@^2.0.0, randombytes@^2.0.1:
- version "2.0.3"
- resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.0.3.tgz#674c99760901c3c4112771a31e521dc349cc09ec"
+ version "2.0.5"
+ resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.0.5.tgz#dc009a246b8d09a177b4b7a0ae77bc570f4b1b79"
+ dependencies:
+ safe-buffer "^5.1.0"
rc@^1.0.1, rc@^1.1.6, rc@^1.1.7:
version "1.2.1"
@@ -4050,22 +4119,23 @@ rc@^1.0.1, rc@^1.1.6, rc@^1.1.7:
strip-json-comments "~2.0.1"
react-dom@^15.5.4:
- version "15.5.4"
- resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-15.5.4.tgz#ba0c28786fd52ed7e4f2135fe0288d462aef93da"
+ version "15.6.1"
+ resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-15.6.1.tgz#2cb0ed4191038e53c209eb3a79a23e2a4cf99470"
dependencies:
fbjs "^0.8.9"
loose-envify "^1.1.0"
object-assign "^4.1.0"
- prop-types "~15.5.7"
+ prop-types "^15.5.10"
react@^15.5.4:
- version "15.5.4"
- resolved "https://registry.yarnpkg.com/react/-/react-15.5.4.tgz#fa83eb01506ab237cdc1c8c3b1cea8de012bf047"
+ version "15.6.1"
+ resolved "https://registry.yarnpkg.com/react/-/react-15.6.1.tgz#baa8434ec6780bde997cdc380b79cd33b96393df"
dependencies:
+ create-react-class "^15.6.0"
fbjs "^0.8.9"
loose-envify "^1.1.0"
object-assign "^4.1.0"
- prop-types "^15.5.7"
+ prop-types "^15.5.10"
read-pkg-up@^1.0.1:
version "1.0.1"
@@ -4107,15 +4177,15 @@ readable-stream@1.0, "readable-stream@>=1.0.33-1 <1.1.0-0", readable-stream@~1.0
string_decoder "~0.10.x"
readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.4, readable-stream@^2.0.5, readable-stream@^2.0.6, readable-stream@^2.1.4, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.2.6:
- version "2.2.9"
- resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.2.9.tgz#cf78ec6f4a6d1eb43d26488cac97f042e74b7fc8"
+ version "2.3.3"
+ resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.3.tgz#368f2512d79f9d46fdfc71349ae7878bbc1eb95c"
dependencies:
- buffer-shims "~1.0.0"
core-util-is "~1.0.0"
- inherits "~2.0.1"
+ inherits "~2.0.3"
isarray "~1.0.0"
process-nextick-args "~1.0.6"
- string_decoder "~1.0.0"
+ safe-buffer "~5.1.1"
+ string_decoder "~1.0.3"
util-deprecate "~1.0.1"
readable-stream@~1.1.9:
@@ -4206,8 +4276,8 @@ release-zalgo@^1.0.0:
es6-error "^4.0.1"
remove-trailing-separator@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.0.1.tgz#615ebb96af559552d4bf4057c8436d486ab63cc4"
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.0.2.tgz#69b062d978727ad14dc6b56ba4ab772fd8d70511"
renderkid@^2.0.1:
version "2.0.1"
@@ -4297,9 +4367,13 @@ resolve-from@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-2.0.0.tgz#9480ab20e94ffa1d9e80a804c7ea147611966b57"
+resolve-from@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748"
+
resolve@^1.1.6, resolve@^1.1.7, resolve@^1.3.2:
- version "1.3.3"
- resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.3.3.tgz#655907c3469a8680dc2de3a275a8fdd69691f0e5"
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.4.0.tgz#a75be01c53da25d934a98ebd0e4c4a7312f92a86"
dependencies:
path-parse "^1.0.5"
@@ -4329,9 +4403,9 @@ ripemd160@^2.0.0, ripemd160@^2.0.1:
hash-base "^2.0.0"
inherits "^2.0.1"
-safe-buffer@^5.0.1:
- version "5.0.1"
- resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.0.1.tgz#d263ca54696cd8a306b5ca6551e92de57918fbe7"
+safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@~5.1.0, safe-buffer@~5.1.1:
+ version "5.1.1"
+ resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.1.tgz#893312af69b2123def71f57889001671eeb2c853"
semver-diff@^2.0.0:
version "2.1.0"
@@ -4340,8 +4414,8 @@ semver-diff@^2.0.0:
semver "^5.0.3"
"semver@2 || 3 || 4 || 5", semver@^5.0.1, semver@^5.0.3, semver@^5.1.0, semver@^5.3.0:
- version "5.3.0"
- resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f"
+ version "5.4.1"
+ resolved "https://registry.yarnpkg.com/semver/-/semver-5.4.1.tgz#e059c09d8571f0540823733433505d3a2f00b18e"
semver@^4.1.0:
version "4.3.6"
@@ -4369,9 +4443,19 @@ sha.js@^2.4.0, sha.js@^2.4.8:
dependencies:
inherits "^2.0.1"
+shebang-command@^1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea"
+ dependencies:
+ shebang-regex "^1.0.0"
+
+shebang-regex@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3"
+
shelljs@^0.7.0:
- version "0.7.7"
- resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.7.7.tgz#b2f5c77ef97148f4b4f6e22682e10bba8667cff1"
+ version "0.7.8"
+ resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.7.8.tgz#decbcf874b0d1e5fb72e14b164a9683048e9acb3"
dependencies:
glob "^7.0.0"
interpret "^1.0.0"
@@ -4393,9 +4477,11 @@ slash@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55"
-slice-ansi@0.0.4:
- version "0.0.4"
- resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-0.0.4.tgz#edbf8903f66f7ce2f8eafd6ceed65e264c831b35"
+slice-ansi@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-1.0.0.tgz#044f1a49d8842ff307aad6b505ed178bd950134d"
+ dependencies:
+ is-fullwidth-code-point "^2.0.0"
slide@^1.1.5:
version "1.1.6"
@@ -4407,15 +4493,21 @@ sntp@1.x.x:
dependencies:
hoek "2.x.x"
-sort-keys@^1.1.1, sort-keys@^1.1.2:
+sort-keys@^1.1.1:
version "1.1.2"
resolved "https://registry.yarnpkg.com/sort-keys/-/sort-keys-1.1.2.tgz#441b6d4d346798f1b4e49e8920adfba0e543f9ad"
dependencies:
is-plain-obj "^1.0.0"
-source-list-map@^1.1.1:
- version "1.1.2"
- resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-1.1.2.tgz#9889019d1024cce55cdc069498337ef6186a11a1"
+sort-keys@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/sort-keys/-/sort-keys-2.0.0.tgz#658535584861ec97d730d6cf41822e1f56684128"
+ dependencies:
+ is-plain-obj "^1.0.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"
source-map-support@^0.4.0, source-map-support@^0.4.2:
version "0.4.15"
@@ -4467,8 +4559,8 @@ 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.0"
- resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.13.0.tgz#ff2a3e4fd04497555fed97b39a0fd82fafb3a33c"
+ version "1.13.1"
+ resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.13.1.tgz#512df6da6287144316dc4c18fe1cf1d940739be3"
dependencies:
asn1 "~0.2.3"
assert-plus "^1.0.0"
@@ -4477,7 +4569,6 @@ sshpk@^1.7.0:
optionalDependencies:
bcrypt-pbkdf "^1.0.0"
ecc-jsbn "~0.1.1"
- jodid25519 "^1.0.0"
jsbn "~0.1.0"
tweetnacl "~0.14.0"
@@ -4497,8 +4588,8 @@ stream-consume@~0.1.0:
resolved "https://registry.yarnpkg.com/stream-consume/-/stream-consume-0.1.0.tgz#a41ead1a6d6081ceb79f65b061901b6d8f3d1d0f"
stream-http@^2.3.1:
- version "2.7.1"
- resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-2.7.1.tgz#546a51741ad5a6b07e9e31b0b10441a917df528a"
+ version "2.7.2"
+ resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-2.7.2.tgz#40a050ec8dc3b53b33d9909415c02c0bf1abfbad"
dependencies:
builtin-status-codes "^3.0.0"
inherits "^2.0.1"
@@ -4523,21 +4614,21 @@ string-width@^1.0.1, string-width@^1.0.2:
strip-ansi "^3.0.0"
string-width@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.0.0.tgz#635c5436cc72a6e0c387ceca278d4e2eec52687e"
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e"
dependencies:
is-fullwidth-code-point "^2.0.0"
- strip-ansi "^3.0.0"
+ strip-ansi "^4.0.0"
string_decoder@^0.10.25, 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.0.0:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.0.1.tgz#62e200f039955a6810d8df0a33ffc0f013662d98"
+string_decoder@~1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.0.3.tgz#0fc67d7c141825de94282dd536bec6b9bce860ab"
dependencies:
- safe-buffer "^5.0.1"
+ safe-buffer "~5.1.0"
stringify-object@^2.3.0:
version "2.4.0"
@@ -4562,6 +4653,12 @@ strip-ansi@^3.0.0, strip-ansi@^3.0.1:
dependencies:
ansi-regex "^2.0.0"
+strip-ansi@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f"
+ dependencies:
+ ansi-regex "^3.0.0"
+
strip-ansi@~0.1.0:
version "0.1.1"
resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-0.1.1.tgz#39e8a98d044d150660abe4a6808acf70bb7bc991"
@@ -4628,6 +4725,12 @@ supports-color@^3.1.0, supports-color@^3.1.2, supports-color@^3.2.3:
dependencies:
has-flag "^1.0.0"
+supports-color@^4.0.0:
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-4.2.1.tgz#65a4bb2631e90e02420dba5554c375a4754bb836"
+ dependencies:
+ has-flag "^2.0.0"
+
symbol-observable@^0.2.2:
version "0.2.4"
resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-0.2.4.tgz#95a83db26186d6af7e7a18dbd9760a2f86d08f40"
@@ -4636,9 +4739,9 @@ symbol-observable@^1.0.4:
version "1.0.4"
resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.0.4.tgz#29bf615d4aa7121bdd898b22d4b3f9bc4e2aa03d"
-tapable@^0.2.5, tapable@~0.2.5:
- version "0.2.6"
- resolved "https://registry.yarnpkg.com/tapable/-/tapable-0.2.6.tgz#206be8e188860b514425375e6f1ae89bfb01fd8d"
+tapable@^0.2.7, tapable@~0.2.5:
+ version "0.2.8"
+ resolved "https://registry.yarnpkg.com/tapable/-/tapable-0.2.8.tgz#99372a5c999bf2df160afc0d74bed4f47948cd22"
tar-pack@^3.4.0:
version "3.4.0"
@@ -4670,15 +4773,15 @@ tar@^2.2.1:
fstream "^1.0.2"
inherits "2"
-term-size@^0.1.0:
- version "0.1.1"
- resolved "https://registry.yarnpkg.com/term-size/-/term-size-0.1.1.tgz#87360b96396cab5760963714cda0d0cbeecad9ca"
+term-size@^1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/term-size/-/term-size-1.2.0.tgz#458b83887f288fc56d6fffbfad262e26638efa69"
dependencies:
- execa "^0.4.0"
+ execa "^0.7.0"
test-exclude@^4.1.0:
- version "4.1.0"
- resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-4.1.0.tgz#04ca70b7390dd38c98d4a003a173806ca7991c91"
+ version "4.1.1"
+ resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-4.1.1.tgz#4d84964b0966b0087ecc334a2ce002d3d9341e26"
dependencies:
arrify "^1.0.1"
micromatch "^2.3.11"
@@ -4749,9 +4852,10 @@ timed-out@^4.0.0:
resolved "https://registry.yarnpkg.com/timed-out/-/timed-out-4.0.1.tgz#f32eacac5a175bea25d7fab565ab3ed8741ef56f"
timers-browserify@^2.0.2:
- version "2.0.2"
- resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-2.0.2.tgz#ab4883cf597dcd50af211349a00fbca56ac86b86"
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-2.0.3.tgz#41fd0bdc926a5feedc33a17a8e1f7d491925f7fc"
dependencies:
+ global "^4.3.2"
setimmediate "^1.0.4"
to-absolute-glob@^0.1.1:
@@ -4787,35 +4891,38 @@ trim-right@^1.0.1:
resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003"
ts-loader@^2.0.3:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/ts-loader/-/ts-loader-2.1.0.tgz#5a8efcc5c72c06fc49d69bad69c85617c6194f77"
+ version "2.3.2"
+ resolved "https://registry.yarnpkg.com/ts-loader/-/ts-loader-2.3.2.tgz#b71b9f0d0062c791a654d462140718f9f7817665"
dependencies:
- colors "^1.0.3"
+ chalk "^2.0.1"
enhanced-resolve "^3.0.0"
loader-utils "^1.0.2"
semver "^5.0.1"
-tslib@^1.6.0:
+tslib@^1.7.1:
version "1.7.1"
resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.7.1.tgz#bc8004164691923a79fe8378bbeb3da2017538ec"
tslint@^5.3.2:
- version "5.3.2"
- resolved "https://registry.yarnpkg.com/tslint/-/tslint-5.3.2.tgz#e56459fb095a7307f103b84052174f5e3bbef6ed"
+ version "5.6.0"
+ resolved "https://registry.yarnpkg.com/tslint/-/tslint-5.6.0.tgz#088aa6c6026623338650b2900828ab3edf59f6cf"
dependencies:
babel-code-frame "^6.22.0"
colors "^1.1.2"
+ commander "^2.9.0"
diff "^3.2.0"
glob "^7.1.1"
- optimist "~0.6.0"
+ minimatch "^3.0.4"
resolve "^1.3.2"
semver "^5.3.0"
- tslib "^1.6.0"
- tsutils "^2.0.0"
+ tslib "^1.7.1"
+ tsutils "^2.7.1"
-tsutils@^2.0.0:
- version "2.2.0"
- resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-2.2.0.tgz#218614657f21c677e4536b4ba75daf8ebce1b367"
+tsutils@^2.7.1:
+ version "2.8.0"
+ resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-2.8.0.tgz#0160173729b3bf138628dd14a1537e00851d814a"
+ dependencies:
+ tslib "^1.7.1"
tty-browserify@0.0.0:
version "0.0.0"
@@ -4840,8 +4947,8 @@ typedoc-default-themes@^0.5.0:
resolved "https://registry.yarnpkg.com/typedoc-default-themes/-/typedoc-default-themes-0.5.0.tgz#6dc2433e78ed8bea8e887a3acde2f31785bd6227"
typedoc@^0.7.1:
- version "0.7.1"
- resolved "https://registry.yarnpkg.com/typedoc/-/typedoc-0.7.1.tgz#b441bffe246bb3e0e598d9ae474e743594bda769"
+ version "0.7.2"
+ resolved "https://registry.yarnpkg.com/typedoc/-/typedoc-0.7.2.tgz#d9859422b2d7ea604bc4f217e901f82aa1ab2c46"
dependencies:
"@types/fs-extra" "^3.0.0"
"@types/handlebars" "^4.0.31"
@@ -4859,30 +4966,30 @@ typedoc@^0.7.1:
progress "^2.0.0"
shelljs "^0.7.0"
typedoc-default-themes "^0.5.0"
- typescript "2.3.2"
+ typescript "2.3.4"
-typescript@2.3.2:
- version "2.3.2"
- resolved "https://registry.yarnpkg.com/typescript/-/typescript-2.3.2.tgz#f0f045e196f69a72f06b25fd3bd39d01c3ce9984"
+typescript@2.3.4:
+ version "2.3.4"
+ resolved "https://registry.yarnpkg.com/typescript/-/typescript-2.3.4.tgz#3d38321828231e434f287514959c37a82b629f42"
typescript@next:
- version "2.4.0-dev.20170524"
- resolved "https://registry.yarnpkg.com/typescript/-/typescript-2.4.0-dev.20170524.tgz#f818a6ae2237ffa33aae7b8ed728c6b45c7566ce"
+ version "2.5.0-dev.20170808"
+ resolved "https://registry.yarnpkg.com/typescript/-/typescript-2.5.0-dev.20170808.tgz#89e017e404b058414d0b992cedfd2d9865164a75"
ua-parser-js@^0.7.9:
- version "0.7.12"
- resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.12.tgz#04c81a99bdd5dc52263ea29d24c6bf8d4818a4bb"
+ version "0.7.14"
+ resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.14.tgz#110d53fa4c3f326c121292bbeac904d2e03387ca"
uglify-js@3.0.x:
- version "3.0.11"
- resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.0.11.tgz#81f594b9a24dad76e39da92f8f06e5b3bc8c2e11"
+ version "3.0.27"
+ resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.0.27.tgz#a97db8c8ba6b9dba4e2f88d86aa9548fa6320034"
dependencies:
- commander "~2.9.0"
+ commander "~2.11.0"
source-map "~0.5.1"
uglify-js@^2.6, uglify-js@^2.8.22, uglify-js@^2.8.27:
- version "2.8.27"
- resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.8.27.tgz#47787f912b0f242e5b984343be8e35e95f694c9c"
+ version "2.8.29"
+ resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.8.29.tgz#29c5733148057bb4e1f75df35b7a9cb72e6a59dd"
dependencies:
source-map "~0.5.1"
yargs "~3.10.0"
@@ -4935,23 +5042,23 @@ unique-temp-dir@^1.0.0:
uid2 "0.0.3"
universalify@^0.1.0:
- version "0.1.0"
- resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.0.tgz#9eb1c4651debcc670cc94f1a75762332bb967778"
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.1.tgz#fa71badd4437af4c148841e3b3b165f9e9e590b7"
unzip-response@^2.0.1:
version "2.0.1"
resolved "https://registry.yarnpkg.com/unzip-response/-/unzip-response-2.0.1.tgz#d2f0f737d16b0615e72a6935ed04214572d56f97"
update-notifier@^2.1.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/update-notifier/-/update-notifier-2.1.0.tgz#ec0c1e53536b76647a24b77cb83966d9315123d9"
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/update-notifier/-/update-notifier-2.2.0.tgz#1b5837cf90c0736d88627732b661c138f86de72f"
dependencies:
boxen "^1.0.0"
chalk "^1.0.0"
configstore "^3.0.0"
+ import-lazy "^2.1.0"
is-npm "^1.0.0"
latest-version "^3.0.0"
- lazy-req "^2.0.0"
semver-diff "^2.0.0"
xdg-basedir "^3.0.0"
@@ -4960,8 +5067,8 @@ upper-case@^1.1.1:
resolved "https://registry.yarnpkg.com/upper-case/-/upper-case-1.1.3.tgz#f6b4501c2ec4cdd26ba78be7222961de77621598"
urijs@^1.18.10:
- version "1.18.10"
- resolved "https://registry.yarnpkg.com/urijs/-/urijs-1.18.10.tgz#b94463eaba59a1a796036a467bb633c667f221ab"
+ version "1.18.12"
+ resolved "https://registry.yarnpkg.com/urijs/-/urijs-1.18.12.tgz#f04d91e1fabb29c16fc842f9a14ee8ddc3fda64e"
url-parse-lax@^1.0.0:
version "1.0.0"
@@ -4999,8 +5106,8 @@ utila@~0.4:
resolved "https://registry.yarnpkg.com/utila/-/utila-0.4.0.tgz#8a16a05d445657a3aea5eecc5b12a4fa5379772c"
uuid@^3.0.0:
- version "3.0.1"
- resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.0.1.tgz#6544bba2dfda8c1cf17e629a3a305e2bb1fee6c1"
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.1.0.tgz#3dd3d3e790abc24d7b0d3a034ffababe28ebbc04"
v8flags@^2.0.2:
version "2.1.1"
@@ -5019,11 +5126,13 @@ validate-npm-package-license@^3.0.1:
spdx-correct "~1.0.0"
spdx-expression-parse "~1.0.0"
-verror@1.3.6:
- version "1.3.6"
- resolved "https://registry.yarnpkg.com/verror/-/verror-1.3.6.tgz#cff5df12946d297d2baaefaa2689e25be01c005c"
+verror@1.10.0:
+ version "1.10.0"
+ resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400"
dependencies:
- extsprintf "1.0.2"
+ assert-plus "^1.0.0"
+ core-util-is "1.0.2"
+ extsprintf "^1.2.0"
vinyl-fs@^0.3.0:
version "0.3.14"
@@ -5090,14 +5199,13 @@ vinyl@^1.0.0:
replace-ext "0.0.1"
vinyl@^2.0.0:
- version "2.0.2"
- resolved "https://registry.yarnpkg.com/vinyl/-/vinyl-2.0.2.tgz#0a3713d8d4e9221c58f10ca16c0116c9e25eda7c"
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/vinyl/-/vinyl-2.1.0.tgz#021f9c2cf951d6b939943c89eb5ee5add4fd924c"
dependencies:
- clone "^1.0.0"
+ clone "^2.1.1"
clone-buffer "^1.0.0"
clone-stats "^1.0.0"
cloneable-readable "^1.0.0"
- is-stream "^1.1.0"
remove-trailing-separator "^1.0.1"
replace-ext "^1.0.0"
@@ -5112,11 +5220,11 @@ walkdir@^0.0.11:
resolved "https://registry.yarnpkg.com/walkdir/-/walkdir-0.0.11.tgz#a16d025eb931bd03b52f308caed0f40fcebe9532"
watchpack@^1.3.1:
- version "1.3.1"
- resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.3.1.tgz#7d8693907b28ce6013e7f3610aa2a1acf07dad87"
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.4.0.tgz#4a1472bcbb952bd0a9bb4036801f954dfb39faac"
dependencies:
async "^2.1.2"
- chokidar "^1.4.3"
+ chokidar "^1.7.0"
graceful-fs "^4.1.2"
webpack-merge@^4.1.0:
@@ -5125,23 +5233,23 @@ webpack-merge@^4.1.0:
dependencies:
lodash "^4.17.4"
-webpack-sources@^0.2.3:
- version "0.2.3"
- resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-0.2.3.tgz#17c62bfaf13c707f9d02c479e0dcdde8380697fb"
+webpack-sources@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-1.0.1.tgz#c7356436a4d13123be2e2426a05d1dad9cbe65cf"
dependencies:
- source-list-map "^1.1.1"
+ source-list-map "^2.0.0"
source-map "~0.5.3"
webpack@^2.4.1:
- version "2.6.0"
- resolved "https://registry.yarnpkg.com/webpack/-/webpack-2.6.0.tgz#7e650a92816abff5db5f43316b0b8b19b13d76c1"
+ version "2.7.0"
+ resolved "https://registry.yarnpkg.com/webpack/-/webpack-2.7.0.tgz#b2a1226804373ffd3d03ea9c6bd525067034f6b1"
dependencies:
acorn "^5.0.0"
acorn-dynamic-import "^2.0.0"
ajv "^4.7.0"
ajv-keywords "^1.1.1"
async "^2.1.2"
- enhanced-resolve "^3.0.0"
+ enhanced-resolve "^3.3.0"
interpret "^1.0.0"
json-loader "^0.5.4"
json5 "^0.5.1"
@@ -5155,7 +5263,7 @@ webpack@^2.4.1:
tapable "~0.2.5"
uglify-js "^2.8.27"
watchpack "^1.3.1"
- webpack-sources "^0.2.3"
+ webpack-sources "^1.0.1"
yargs "^6.0.0"
whatwg-fetch@>=0.10.0:
@@ -5166,9 +5274,9 @@ which-module@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/which-module/-/which-module-1.0.0.tgz#bba63ca861948994ff307736089e3b96026c2a4f"
-which@^1.2.12, which@^1.2.4, which@^1.2.8, which@^1.2.9:
- version "1.2.14"
- resolved "https://registry.yarnpkg.com/which/-/which-1.2.14.tgz#9a87c4378f03e827cecaf1acdf56c736c01c14e5"
+which@^1.2.12, which@^1.2.4, which@^1.2.9:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/which/-/which-1.3.0.tgz#ff04bdfc010ee547d780bec38e1ac1c2777d253a"
dependencies:
isexe "^2.0.0"
@@ -5223,7 +5331,7 @@ write-file-atomic@^2.0.0:
imurmurhash "^0.1.4"
slide "^1.1.5"
-write-json-file@^2.0.0:
+write-json-file@^2.2.0:
version "2.2.0"
resolved "https://registry.yarnpkg.com/write-json-file/-/write-json-file-2.2.0.tgz#51862506bbb3b619eefab7859f1fd6c6d0530876"
dependencies:
@@ -5234,12 +5342,12 @@ write-json-file@^2.0.0:
sort-keys "^1.1.1"
write-file-atomic "^2.0.0"
-write-pkg@^2.0.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/write-pkg/-/write-pkg-2.1.0.tgz#353aa44c39c48c21440f5c08ce6abd46141c9c08"
+write-pkg@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/write-pkg/-/write-pkg-3.1.0.tgz#030a9994cc9993d25b4e75a9f1a1923607291ce9"
dependencies:
- sort-keys "^1.1.2"
- write-json-file "^2.0.0"
+ sort-keys "^2.0.0"
+ write-json-file "^2.2.0"
xdg-basedir@^3.0.0:
version "3.0.0"
@@ -5267,7 +5375,7 @@ y18n@^3.2.1:
version "3.2.1"
resolved "https://registry.yarnpkg.com/y18n/-/y18n-3.2.1.tgz#6d15fba884c08679c0d77e88e7759e811e07fa41"
-yallist@^2.0.0:
+yallist@^2.1.2:
version "2.1.2"
resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52"
@@ -5335,10 +5443,10 @@ yazl@^2.1.0:
buffer-crc32 "~0.2.3"
zip-stream@^1.1.0:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/zip-stream/-/zip-stream-1.1.1.tgz#5216b48bbb4d2651f64d5c6e6f09eb4a7399d557"
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/zip-stream/-/zip-stream-1.2.0.tgz#a8bc45f4c1b49699c6b90198baacaacdbcd4ba04"
dependencies:
archiver-utils "^1.3.0"
- compress-commons "^1.1.0"
+ compress-commons "^1.2.0"
lodash "^4.8.0"
readable-stream "^2.0.0"