aboutsummaryrefslogtreecommitdiff
path: root/extension/lib/wallet
diff options
context:
space:
mode:
Diffstat (limited to 'extension/lib/wallet')
-rw-r--r--extension/lib/wallet/wallet.ts123
-rw-r--r--extension/lib/wallet/wxmessaging.js7
-rw-r--r--extension/lib/wallet/wxmessaging.ts21
3 files changed, 76 insertions, 75 deletions
diff --git a/extension/lib/wallet/wallet.ts b/extension/lib/wallet/wallet.ts
index 30a45d0b7..f8a322d58 100644
--- a/extension/lib/wallet/wallet.ts
+++ b/extension/lib/wallet/wallet.ts
@@ -89,7 +89,6 @@ class CoinPaySig {
interface ConfirmPayRequest {
- merchantPageUrl: string;
offer: Offer;
}
@@ -107,8 +106,6 @@ interface Offer {
contract: Contract;
sig: string;
H_contract: string;
- pay_url: string;
- exec_url: string;
}
interface Contract {
@@ -140,7 +137,6 @@ interface CoinPaySig_interface {
interface Transaction {
contractHash: string;
contract: any;
- payUrl: string;
payReq: any;
}
@@ -153,8 +149,8 @@ interface Reserve {
interface PaymentResponse {
- payUrl: string;
payReq: any;
+ contract: Contract;
}
@@ -370,7 +366,6 @@ export class Wallet {
executePay(offer: Offer,
payCoinInfo: PayCoinInfo,
- merchantBaseUrl: string,
chosenMint: string): Promise<void> {
let payReq = {};
payReq["H_wire"] = offer.contract.H_wire;
@@ -380,15 +375,12 @@ export class Wallet {
payReq["mint"] = URI(chosenMint).href();
payReq["coins"] = payCoinInfo.map((x) => x.sig);
payReq["timestamp"] = offer.contract.timestamp;
- let payUrl = URI(offer.pay_url).absoluteTo(merchantBaseUrl);
let t: Transaction = {
contractHash: offer.H_contract,
contract: offer.contract,
- payUrl: payUrl.href(),
- payReq: payReq
+ payReq: payReq,
};
-
let historyEntry = {
type: "pay",
timestamp: (new Date).getTime(),
@@ -406,7 +398,7 @@ export class Wallet {
.finish();
}
- confirmPay(offer: Offer, merchantPageUrl: string): Promise<any> {
+ confirmPay(offer: Offer): Promise<any> {
return Promise.resolve().then(() => {
return this.getPossibleMintCoins(offer.contract.amount,
offer.contract.max_fee,
@@ -417,7 +409,7 @@ export class Wallet {
}
let mintUrl = Object.keys(mcs)[0];
let ds = Wallet.signDeposit(offer, mcs[mintUrl]);
- return this.executePay(offer, ds, merchantPageUrl, mintUrl);
+ return this.executePay(offer, ds, mintUrl);
});
}
@@ -430,15 +422,14 @@ export class Wallet {
throw Error("contract not found");
}
let resp: PaymentResponse = {
- payUrl: t.payUrl,
- payReq: t.payReq
+ payReq: t.payReq,
+ contract: t.contract,
};
return resp;
});
});
}
-
initReserve(reserveRecord) {
this.updateMintFromUrl(reserveRecord.mint_base_url)
.then((mint) =>
@@ -478,55 +469,55 @@ export class Wallet {
}
return this.http.postForm(req.post_url, form)
- .then((hresp) => {
- // TODO: look at response status code and handle errors appropriately
- let json = JSON.parse(hresp.responseText);
- if (!json) {
- return {
- success: false
- };
- }
- let resp: ConfirmReserveResponse = {
- success: undefined,
- backlink: json.redirect_url,
- };
- let reserveRecord = {
- reserve_pub: reservePub.toCrock(),
- reserve_priv: reservePriv.toCrock(),
- mint_base_url: mintBaseUrl,
- created: now,
- last_query: null,
- current_amount: null,
- // XXX: set to actual amount
- requested_amount: null
- };
-
- if (hresp.status != 200) {
- resp.success = false;
- return resp;
- }
-
- let historyEntry = {
- type: "create-reserve",
- timestamp: now,
- detail: {
- requestedAmount,
- reservePub: reserveRecord.reserve_pub,
- }
- };
-
- resp.success = true;
-
- return Query(this.db)
- .put("reserves", reserveRecord)
- .put("history", historyEntry)
- .finish()
- .then(() => {
- // Do this in the background
- this.initReserve(reserveRecord);
- return resp;
- });
- });
+ .then((hresp) => {
+ // TODO: look at response status code and handle errors appropriately
+ let json = JSON.parse(hresp.responseText);
+ if (!json) {
+ return {
+ success: false
+ };
+ }
+ let resp: ConfirmReserveResponse = {
+ success: undefined,
+ backlink: json.redirect_url,
+ };
+ let reserveRecord = {
+ reserve_pub: reservePub.toCrock(),
+ reserve_priv: reservePriv.toCrock(),
+ mint_base_url: mintBaseUrl,
+ created: now,
+ last_query: null,
+ current_amount: null,
+ // XXX: set to actual amount
+ requested_amount: null
+ };
+
+ if (hresp.status != 200) {
+ resp.success = false;
+ return resp;
+ }
+
+ let historyEntry = {
+ type: "create-reserve",
+ timestamp: now,
+ detail: {
+ requestedAmount,
+ reservePub: reserveRecord.reserve_pub,
+ }
+ };
+
+ resp.success = true;
+
+ return Query(this.db)
+ .put("reserves", reserveRecord)
+ .put("history", historyEntry)
+ .finish()
+ .then(() => {
+ // Do this in the background
+ this.initReserve(reserveRecord);
+ return resp;
+ });
+ });
}
@@ -652,6 +643,7 @@ export class Wallet {
});
}
+
withdraw(denom, reserve): Promise<void> {
return this.withdrawPrepare(denom, reserve)
.then((pc) => this.withdrawExecute(pc))
@@ -741,6 +733,7 @@ export class Wallet {
});
}
+
/**
* Update or add mint DB entry by fetching the /keys information.
* Optionally link the reserve entry to the new or existing
@@ -782,11 +775,13 @@ export class Wallet {
.reduce(collectBalances, {});
}
+
getHistory() {
function collect(x, acc) {
acc.push(x);
return acc;
}
+
return Query(this.db)
.iter("history", {indexName: "timestamp"})
.reduce(collect, [])
diff --git a/extension/lib/wallet/wxmessaging.js b/extension/lib/wallet/wxmessaging.js
index f54e0b35d..ad49ca03a 100644
--- a/extension/lib/wallet/wxmessaging.js
+++ b/extension/lib/wallet/wxmessaging.js
@@ -81,8 +81,8 @@ System.register(["./wallet", "./db", "./http"], function(exports_1) {
.then(function (r) {
sendResponse({
success: true,
- payUrl: r.payUrl,
- payReq: r.payReq
+ payReq: r.payReq,
+ contract: r.contract,
});
})
.catch(function (e) {
@@ -105,6 +105,9 @@ System.register(["./wallet", "./db", "./http"], function(exports_1) {
});
return true;
},
+ _a["error-fatal"] = function (db, detail, sendResponse) {
+ console.log("fatal error from page", detail.url);
+ },
_a
);
var _a;
diff --git a/extension/lib/wallet/wxmessaging.ts b/extension/lib/wallet/wxmessaging.ts
index eb9f165db..0ec07dfe1 100644
--- a/extension/lib/wallet/wxmessaging.ts
+++ b/extension/lib/wallet/wxmessaging.ts
@@ -98,8 +98,8 @@ function makeHandlers(wallet) {
.then((r) => {
sendResponse({
success: true,
- payUrl: r.payUrl,
- payReq: r.payReq
+ payReq: r.payReq,
+ contract: r.contract,
});
})
.catch((e) => {
@@ -113,14 +113,17 @@ function makeHandlers(wallet) {
["get-history"]: function(db, detail, sendResponse) {
// TODO: limit history length
wallet.getHistory()
- .then((h) => {
- sendResponse(h);
- })
- .catch((e) => {
- console.error("exception during 'get-history'");
- console.error(e.stack);
- });
+ .then((h) => {
+ sendResponse(h);
+ })
+ .catch((e) => {
+ console.error("exception during 'get-history'");
+ console.error(e.stack);
+ });
return true;
+ },
+ ["error-fatal"]: function(db, detail, sendResponse) {
+ console.log("fatal error from page", detail.url);
}
};
}