aboutsummaryrefslogtreecommitdiff
path: root/extension/background/messaging.ts
diff options
context:
space:
mode:
authorFlorian Dold <florian.dold@gmail.com>2016-01-06 15:39:22 +0100
committerFlorian Dold <florian.dold@gmail.com>2016-01-06 15:39:22 +0100
commitabf15268acafe588191fffb7ca6ddb963244bb0f (patch)
tree0f582386d09eccd550c414e62337a7f630b2ddb1 /extension/background/messaging.ts
parent2f8aa00595ab40292019ca739041296c84703899 (diff)
Refactor wallet into logic and extension interface.
Diffstat (limited to 'extension/background/messaging.ts')
-rw-r--r--extension/background/messaging.ts101
1 files changed, 69 insertions, 32 deletions
diff --git a/extension/background/messaging.ts b/extension/background/messaging.ts
index 6d444f95d..8cde06262 100644
--- a/extension/background/messaging.ts
+++ b/extension/background/messaging.ts
@@ -25,45 +25,82 @@
"use strict";
-// FIXME: none of these handlers should pass on the sendResponse.
-
-let handlers = {
- ["balances"]: function(db, detail, sendResponse) {
- getBalances(db).then(sendResponse);
- return true;
- },
- ["dump-db"]: function(db, detail, sendResponse) {
- exportDb(db).then(sendResponse);
- return true;
- },
- ["reset"]: function(db, detail, sendResponse) {
- let tx = db.transaction(db.objectStoreNames, 'readwrite');
- for (let i = 0; i < db.objectStoreNames.length; i++) {
- tx.objectStore(db.objectStoreNames[i]).clear();
+function makeHandlers(wallet) {
+ return {
+ ["balances"]: function(db, detail, sendResponse) {
+ wallet.getBalances().then(sendResponse);
+ return true;
+ },
+ ["dump-db"]: function(db, detail, sendResponse) {
+ exportDb(db).then(sendResponse);
+ return true;
+ },
+ ["reset"]: function(db, detail, sendResponse) {
+ let tx = db.transaction(db.objectStoreNames, 'readwrite');
+ for (let i = 0; i < db.objectStoreNames.length; i++) {
+ tx.objectStore(db.objectStoreNames[i]).clear();
+ }
+ indexedDB.deleteDatabase(DB_NAME);
+ chrome.browserAction.setBadgeText({text: ""});
+ console.log("reset done");
+ // Response is synchronous
+ return false;
+ },
+ ["confirm-reserve"]: function(db, detail, sendResponse) {
+ // TODO: make it a checkable
+ let req: ConfirmReserveRequest = {
+ field_amount: detail.field_amount,
+ field_mint: detail.field_mint,
+ field_reserve_pub: detail.field_reserve_pub,
+ post_url: detail.post_url,
+ mint: detail.mint,
+ amount_str: detail.amount_str
+ };
+ wallet.confirmReserve(req)
+ .then((resp) => {
+ if (resp.success) {
+ resp.backlink = chrome.extension.getURL("pages/reserve-success.html");
+ }
+ sendResponse(resp);
+ });
+ return true;
+ },
+ ["confirm-pay"]: function(db, detail, sendResponse) {
+ wallet.confirmPay(detail.offer, detail.merchantPageUrl)
+ .then(() => {
+ sendResponse({success: true})
+ })
+ .catch((e) => {
+ sendResponse({error: e.message});
+ });
+ return true;
+ },
+ ["execute-payment"]: function(db, detail, sendResponse) {
+ wallet.doPayment(detail.H_contract)
+ .then((r) => {
+ sendResponse({
+ success: true,
+ payUrl: r.payUrl,
+ payReq: r.payReq
+ });
+ })
+ .catch((e) => {
+ sendResponse({success: false, error: e.message});
+ });
+ // async sendResponse
+ return true;
}
- indexedDB.deleteDatabase(DB_NAME);
- chrome.browserAction.setBadgeText({text: ""});
- console.log("reset done");
- // Response is synchronous
- return false;
- },
- ["confirm-reserve"]: function(db, detail, sendResponse) {
- return confirmReserveHandler(db, detail, sendResponse);
- },
- ["confirm-pay"]: function(db, detail, sendResponse) {
- return confirmPayHandler(db, detail, sendResponse);
- },
- ["execute-payment"]: function(db, detail, sendResponse) {
- return doPaymentHandler(db, detail, sendResponse);
- }
-};
+ };
+}
function wxMain() {
chrome.browserAction.setBadgeText({text: ""});
openTalerDb().then((db) => {
- updateBadge(db);
+ let wallet = new Wallet(db, undefined, undefined);
+ let handlers = makeHandlers(wallet);
+ wallet.updateBadge();
chrome.runtime.onMessage.addListener(
function(req, sender, onresponse) {
if (req.type in handlers) {