aboutsummaryrefslogtreecommitdiff
path: root/extension/lib
diff options
context:
space:
mode:
Diffstat (limited to 'extension/lib')
-rw-r--r--extension/lib/wallet/wallet.ts75
1 files changed, 48 insertions, 27 deletions
diff --git a/extension/lib/wallet/wallet.ts b/extension/lib/wallet/wallet.ts
index ab4c88da7..30a45d0b7 100644
--- a/extension/lib/wallet/wallet.ts
+++ b/extension/lib/wallet/wallet.ts
@@ -438,6 +438,29 @@ export class Wallet {
});
}
+
+ initReserve(reserveRecord) {
+ this.updateMintFromUrl(reserveRecord.mint_base_url)
+ .then((mint) =>
+ this.updateReserve(reserveRecord.reserve_pub, mint)
+ .then((reserve) => this.depleteReserve(reserve,
+ mint)))
+ .then(() => {
+ let depleted = {
+ type: "depleted-reserve",
+ timestamp: (new Date).getTime(),
+ detail: {
+ reservePub: reserveRecord.reserve_pub,
+ }
+ };
+ return Query(this.db).put("history", depleted).finish();
+ })
+ .catch((e) => {
+ console.error("Failed to deplete reserve", e.stack);
+ });
+ }
+
+
confirmReserve(req: ConfirmReserveRequest): Promise<ConfirmReserveResponse> {
let reservePriv = EddsaPrivateKey.create();
let reservePub = reservePriv.getPublicKey();
@@ -500,19 +523,13 @@ export class Wallet {
.finish()
.then(() => {
// Do this in the background
- this.updateMintFromUrl(reserveRecord.mint_base_url)
- .then((mint) =>
- this.updateReserve(reservePub, mint)
- .then((reserve) => this.depleteReserve(reserve,
- mint)))
- .catch((e) => {
- console.error("Failed to deplete reserve", e.stack);
- });
+ this.initReserve(reserveRecord);
return resp;
});
});
}
+
withdrawPrepare(denom: Denomination,
reserve: Reserve): Promise<PreCoin> {
let reservePriv = new EddsaPrivateKey();
@@ -616,6 +633,7 @@ export class Wallet {
.then(doBadge.bind(this));
}
+
storeCoin(coin: Coin): Promise<void> {
let historyEntry = {
type: "withdraw",
@@ -644,7 +662,7 @@ export class Wallet {
/**
* Withdraw coins from a reserve until it is empty.
*/
- depleteReserve(reserve, mint): void {
+ depleteReserve(reserve, mint): Promise<void> {
let denoms = copy(mint.keys.denoms);
let remaining = new Amount(reserve.current_amount);
denoms.sort(rankDenom);
@@ -667,31 +685,34 @@ export class Wallet {
}
}
- // Do the request one by one.
- let next = () => {
- if (workList.length == 0) {
- return;
- }
- let d = workList.pop();
- this.withdraw(d, reserve)
- .then(() => next())
- .catch((e) => {
- console.log("Failed to withdraw coin", e.stack);
- });
- };
+ return new Promise<void>((resolve, reject) => {
+ // Do the request one by one.
+ let next = () => {
+ if (workList.length == 0) {
+ resolve();
+ }
+ let d = workList.pop();
+ this.withdraw(d, reserve)
+ .then(() => next())
+ .catch((e) => {
+ console.log("Failed to withdraw coin", e.stack);
+ reject();
+ });
+ };
- // Asynchronous recursion
- next();
+ // Asynchronous recursion
+ next();
+ });
}
- updateReserve(reservePub: EddsaPublicKey,
+
+ updateReserve(reservePub: string,
mint): Promise<Reserve> {
- let reservePubStr = reservePub.toCrock();
return Query(this.db)
- .get("reserves", reservePubStr)
+ .get("reserves", reservePub)
.then((reserve) => {
let reqUrl = URI("reserve/status").absoluteTo(mint.baseUrl);
- reqUrl.query({'reserve_pub': reservePubStr});
+ reqUrl.query({'reserve_pub': reservePub});
return this.http.get(reqUrl).then(resp => {
if (resp.status != 200) {
throw Error();