diff options
-rw-r--r-- | content_scripts/notify.js | 351 | ||||
-rw-r--r-- | content_scripts/notify.ts | 367 | ||||
-rw-r--r-- | lib/wallet/wxMessaging.ts | 32 | ||||
-rw-r--r-- | manifest.json | 2 |
4 files changed, 400 insertions, 352 deletions
diff --git a/content_scripts/notify.js b/content_scripts/notify.js index 2df089719..68c64f40a 100644 --- a/content_scripts/notify.js +++ b/content_scripts/notify.js @@ -35,188 +35,209 @@ var TalerNotify; return url; } var handlers = []; - var port = chrome.runtime.connect(); - port.onDisconnect.addListener(function () { - console.log("chrome runtime disconnected"); - for (var _i = 0, handlers_1 = handlers; _i < handlers_1.length; _i++) { - var handler = handlers_1[_i]; - document.removeEventListener(handler.type, handler.listener); - } - }); - var $ = function (x) { return document.getElementById(x); }; - function addHandler(type, listener) { - document.addEventListener(type, listener); - handlers.push({ type: type, listener: listener }); - } - addHandler("taler-query-id", function (e) { - var evt = new CustomEvent("taler-id", { - detail: { - id: chrome.runtime.id - } - }); - document.dispatchEvent(evt); - }); - addHandler("taler-probe", function (e) { - var evt = new CustomEvent("taler-wallet-present", { - detail: { - walletProtocolVersion: PROTOCOL_VERSION - } + var connected = false; + // Hack to know when the extension is unloaded + var port; + var connect = function (dh) { + port = chrome.runtime.connect(); + port.onDisconnect.addListener(dh); + chrome.runtime.sendMessage({ type: "ping" }, function () { + console.log("registering handlers"); + connected = true; + registerHandlers(); }); - document.dispatchEvent(evt); - console.log("handshake done"); - }); - addHandler("taler-create-reserve", function (e) { - console.log("taler-create-reserve with " + JSON.stringify(e.detail)); - var params = { - amount: JSON.stringify(e.detail.amount), - callback_url: URI(e.detail.callback_url) - .absoluteTo(document.location.href), - bank_url: document.location.href, - }; - var uri = URI(chrome.extension.getURL("pages/confirm-create-reserve.html")); - document.location.href = uri.query(params).href(); - }); - addHandler("taler-confirm-reserve", function (e) { - console.log("taler-confirm-reserve with " + JSON.stringify(e.detail)); - var msg = { - type: "confirm-reserve", - detail: { - reservePub: e.detail.reserve_pub + }; + var disconectHandler = function () { + if (connected) { + console.log("chrome runtime disconnected, removing handlers"); + for (var _i = 0, handlers_1 = handlers; _i < handlers_1.length; _i++) { + var handler = handlers_1[_i]; + document.removeEventListener(handler.type, handler.listener); } - }; - chrome.runtime.sendMessage(msg, function (resp) { - console.log("confirm reserve done"); - }); - }); - // XXX: remove in a bit, just here for compatibility ... - addHandler("taler-contract", function (e) { - // XXX: the merchant should just give us the parsed data ... - var offer = JSON.parse(e.detail); - if (!offer.contract) { - console.error("contract field missing"); - return; } - var msg = { - type: "check-repurchase", - detail: { - contract: offer.contract - }, - }; - chrome.runtime.sendMessage(msg, function (resp) { - if (resp.error) { - console.error("wallet backend error", resp); - return; - } - if (resp.isRepurchase) { - console.log("doing repurchase"); - console.assert(resp.existingFulfillmentUrl); - console.assert(resp.existingContractHash); - window.location.href = subst(resp.existingFulfillmentUrl, resp.existingContractHash); - } - else { - var uri = URI(chrome.extension.getURL("pages/confirm-contract.html")); - var params = { - offer: JSON.stringify(offer), - merchantPageUrl: document.location.href, - }; - document.location.href = uri.query(params).href(); - } - }); - }); - addHandler("taler-confirm-contract", function (e) { - if (!e.detail.contract_wrapper) { - console.error("contract wrapper missing"); - return; + else { + // We got disconnected before the extension was ready, reconnect ... + window.setTimeout(function () { + connect(disconectHandler); + }, 200); } - var offer = e.detail.contract_wrapper; - if (!offer.contract) { - console.error("contract field missing"); - return; + }; + connect(disconectHandler); + function registerHandlers() { + var $ = function (x) { return document.getElementById(x); }; + function addHandler(type, listener) { + document.addEventListener(type, listener); + handlers.push({ type: type, listener: listener }); } - var msg = { - type: "check-repurchase", - detail: { - contract: offer.contract - }, - }; - chrome.runtime.sendMessage(msg, function (resp) { - if (resp.error) { - console.error("wallet backend error", resp); + addHandler("taler-query-id", function (e) { + var evt = new CustomEvent("taler-id", { + detail: { + id: chrome.runtime.id + } + }); + document.dispatchEvent(evt); + }); + addHandler("taler-probe", function (e) { + var evt = new CustomEvent("taler-wallet-present", { + detail: { + walletProtocolVersion: PROTOCOL_VERSION + } + }); + document.dispatchEvent(evt); + }); + addHandler("taler-create-reserve", function (e) { + console.log("taler-create-reserve with " + JSON.stringify(e.detail)); + var params = { + amount: JSON.stringify(e.detail.amount), + callback_url: URI(e.detail.callback_url) + .absoluteTo(document.location.href), + bank_url: document.location.href, + }; + var uri = URI(chrome.extension.getURL("pages/confirm-create-reserve.html")); + document.location.href = uri.query(params).href(); + }); + addHandler("taler-confirm-reserve", function (e) { + console.log("taler-confirm-reserve with " + JSON.stringify(e.detail)); + var msg = { + type: "confirm-reserve", + detail: { + reservePub: e.detail.reserve_pub + } + }; + chrome.runtime.sendMessage(msg, function (resp) { + console.log("confirm reserve done"); + }); + }); + // XXX: remove in a bit, just here for compatibility ... + addHandler("taler-contract", function (e) { + // XXX: the merchant should just give us the parsed data ... + var offer = JSON.parse(e.detail); + if (!offer.contract) { + console.error("contract field missing"); return; } - if (resp.isRepurchase) { - console.log("doing repurchase"); - console.assert(resp.existingFulfillmentUrl); - console.assert(resp.existingContractHash); - window.location.href = subst(resp.existingFulfillmentUrl, resp.existingContractHash); - } - else { - var uri = URI(chrome.extension.getURL("pages/confirm-contract.html")); - var params = { - offer: JSON.stringify(offer), - merchantPageUrl: document.location.href, - }; - var target = uri.query(params).href(); - if (e.detail.replace_navigation === true) { - document.location.replace(target); + var msg = { + type: "check-repurchase", + detail: { + contract: offer.contract + }, + }; + chrome.runtime.sendMessage(msg, function (resp) { + if (resp.error) { + console.error("wallet backend error", resp); + return; + } + if (resp.isRepurchase) { + console.log("doing repurchase"); + console.assert(resp.existingFulfillmentUrl); + console.assert(resp.existingContractHash); + window.location.href = subst(resp.existingFulfillmentUrl, resp.existingContractHash); } else { - document.location.href = target; + var uri = URI(chrome.extension.getURL("pages/confirm-contract.html")); + var params = { + offer: JSON.stringify(offer), + merchantPageUrl: document.location.href, + }; + document.location.href = uri.query(params).href(); } - } + }); }); - }); - addHandler('taler-execute-payment', function (e) { - console.log("got taler-execute-payment in content page"); - if (!e.detail.pay_url) { - console.log("field 'pay_url' missing in taler-execute-payment event"); - return; - } - var payUrl = e.detail.pay_url; - var msg = { - type: "execute-payment", - detail: { - H_contract: e.detail.H_contract, - }, - }; - chrome.runtime.sendMessage(msg, function (resp) { - console.log("got resp"); - console.dir(resp); - if (!resp.success) { - console.log("got event detial:"); - console.dir(e.detail); - if (e.detail.offering_url) { - console.log("offering url", e.detail.offering_url); - window.location.href = e.detail.offering_url; + addHandler("taler-confirm-contract", function (e) { + if (!e.detail.contract_wrapper) { + console.error("contract wrapper missing"); + return; + } + var offer = e.detail.contract_wrapper; + if (!offer.contract) { + console.error("contract field missing"); + return; + } + var msg = { + type: "check-repurchase", + detail: { + contract: offer.contract + }, + }; + chrome.runtime.sendMessage(msg, function (resp) { + if (resp.error) { + console.error("wallet backend error", resp); + return; + } + if (resp.isRepurchase) { + console.log("doing repurchase"); + console.assert(resp.existingFulfillmentUrl); + console.assert(resp.existingContractHash); + window.location.href = subst(resp.existingFulfillmentUrl, resp.existingContractHash); } else { - console.error("execute-payment failed"); + var uri = URI(chrome.extension.getURL("pages/confirm-contract.html")); + var params = { + offer: JSON.stringify(offer), + merchantPageUrl: document.location.href, + }; + var target = uri.query(params).href(); + if (e.detail.replace_navigation === true) { + document.location.replace(target); + } + else { + document.location.href = target; + } } + }); + }); + addHandler('taler-execute-payment', function (e) { + console.log("got taler-execute-payment in content page"); + if (!e.detail.pay_url) { + console.log("field 'pay_url' missing in taler-execute-payment event"); return; } - var contract = resp.contract; - if (!contract) { - throw Error("contract missing"); - } - console.log("Making request to ", payUrl); - var r = new XMLHttpRequest(); - r.open('post', payUrl); - r.send(JSON.stringify(resp.payReq)); - r.onload = function () { - switch (r.status) { - case 200: - console.log("going to", contract.fulfillment_url); - // TODO: Is this the right thing? Does the reload - // TODO: override setting location.href? - window.location.href = subst(contract.fulfillment_url, e.detail.H_contract); - window.location.reload(true); - break; - default: - console.log("Unexpected status code for $pay_url:", r.status); - break; - } + var payUrl = e.detail.pay_url; + var msg = { + type: "execute-payment", + detail: { + H_contract: e.detail.H_contract, + }, }; + chrome.runtime.sendMessage(msg, function (resp) { + console.log("got resp"); + console.dir(resp); + if (!resp.success) { + console.log("got event detial:"); + console.dir(e.detail); + if (e.detail.offering_url) { + console.log("offering url", e.detail.offering_url); + window.location.href = e.detail.offering_url; + } + else { + console.error("execute-payment failed"); + } + return; + } + var contract = resp.contract; + if (!contract) { + throw Error("contract missing"); + } + console.log("Making request to ", payUrl); + var r = new XMLHttpRequest(); + r.open('post', payUrl); + r.send(JSON.stringify(resp.payReq)); + r.onload = function () { + switch (r.status) { + case 200: + console.log("going to", contract.fulfillment_url); + // TODO: Is this the right thing? Does the reload + // TODO: override setting location.href? + window.location.href = subst(contract.fulfillment_url, e.detail.H_contract); + window.location.reload(true); + break; + default: + console.log("Unexpected status code for $pay_url:", r.status); + break; + } + }; + }); }); - }); + } })(TalerNotify || (TalerNotify = {})); //# sourceMappingURL=notify.js.map
\ No newline at end of file diff --git a/content_scripts/notify.ts b/content_scripts/notify.ts index 92c9eee1e..f400b4279 100644 --- a/content_scripts/notify.ts +++ b/content_scripts/notify.ts @@ -45,208 +45,231 @@ namespace TalerNotify { let handlers = []; - let port = chrome.runtime.connect(); - port.onDisconnect.addListener(() => { - console.log("chrome runtime disconnected"); - for (let handler of handlers) { - document.removeEventListener(handler.type, handler.listener); + let connected = false; + + // Hack to know when the extension is unloaded + let port; + + let connect = (dh) => { + port = chrome.runtime.connect(); + port.onDisconnect.addListener(dh); + chrome.runtime.sendMessage({type: "ping"}, () => { + console.log("registering handlers"); + connected = true; + registerHandlers(); + }); + }; + + var disconectHandler = () => { + if (connected) { + console.log("chrome runtime disconnected, removing handlers"); + for (let handler of handlers) { + document.removeEventListener(handler.type, handler.listener); + } + } else { + // We got disconnected before the extension was ready, reconnect ... + window.setTimeout(() => { + connect(disconectHandler); + }, 200); } - }); + }; - let $ = (x) => document.getElementById(x); + connect(disconectHandler); - function addHandler(type, listener) { - document.addEventListener(type, listener); - handlers.push({type, listener}); - } + function registerHandlers() { + let $ = (x) => document.getElementById(x); + function addHandler(type, listener) { + document.addEventListener(type, listener); + handlers.push({type, listener}); + } - addHandler("taler-query-id", function(e) { - let evt = new CustomEvent("taler-id", { - detail: { - id: chrome.runtime.id - } + addHandler("taler-query-id", function(e) { + let evt = new CustomEvent("taler-id", { + detail: { + id: chrome.runtime.id + } + }); + document.dispatchEvent(evt); }); - document.dispatchEvent(evt); - }); - addHandler("taler-probe", function(e) { - let evt = new CustomEvent("taler-wallet-present", { - detail: { - walletProtocolVersion: PROTOCOL_VERSION - } - }); - document.dispatchEvent(evt); - console.log("handshake done"); - }); - - addHandler("taler-create-reserve", function(e: CustomEvent) { - console.log("taler-create-reserve with " + JSON.stringify(e.detail)); - let params = { - amount: JSON.stringify(e.detail.amount), - callback_url: URI(e.detail.callback_url) - .absoluteTo(document.location.href), - bank_url: document.location.href, - }; - let uri = URI(chrome.extension.getURL("pages/confirm-create-reserve.html")); - document.location.href = uri.query(params).href(); - }); - - addHandler("taler-confirm-reserve", function(e: CustomEvent) { - console.log("taler-confirm-reserve with " + JSON.stringify(e.detail)); - let msg = { - type: "confirm-reserve", - detail: { - reservePub: e.detail.reserve_pub - } - }; - chrome.runtime.sendMessage(msg, (resp) => { - console.log("confirm reserve done"); + addHandler("taler-probe", function(e) { + let evt = new CustomEvent("taler-wallet-present", { + detail: { + walletProtocolVersion: PROTOCOL_VERSION + } + }); + document.dispatchEvent(evt); }); - }); + addHandler("taler-create-reserve", function(e: CustomEvent) { + console.log("taler-create-reserve with " + JSON.stringify(e.detail)); + let params = { + amount: JSON.stringify(e.detail.amount), + callback_url: URI(e.detail.callback_url) + .absoluteTo(document.location.href), + bank_url: document.location.href, + }; + let uri = URI(chrome.extension.getURL("pages/confirm-create-reserve.html")); + document.location.href = uri.query(params).href(); + }); - // XXX: remove in a bit, just here for compatibility ... - addHandler("taler-contract", function(e: CustomEvent) { - // XXX: the merchant should just give us the parsed data ... - let offer = JSON.parse(e.detail); + addHandler("taler-confirm-reserve", function(e: CustomEvent) { + console.log("taler-confirm-reserve with " + JSON.stringify(e.detail)); + let msg = { + type: "confirm-reserve", + detail: { + reservePub: e.detail.reserve_pub + } + }; + chrome.runtime.sendMessage(msg, (resp) => { + console.log("confirm reserve done"); + }); + }); - if (!offer.contract) { - console.error("contract field missing"); - return; - } - let msg = { - type: "check-repurchase", - detail: { - contract: offer.contract - }, - }; + // XXX: remove in a bit, just here for compatibility ... + addHandler("taler-contract", function(e: CustomEvent) { + // XXX: the merchant should just give us the parsed data ... + let offer = JSON.parse(e.detail); - chrome.runtime.sendMessage(msg, (resp) => { - if (resp.error) { - console.error("wallet backend error", resp); + if (!offer.contract) { + console.error("contract field missing"); return; } - if (resp.isRepurchase) { - console.log("doing repurchase"); - console.assert(resp.existingFulfillmentUrl); - console.assert(resp.existingContractHash); - window.location.href = subst(resp.existingFulfillmentUrl, - resp.existingContractHash); - - } else { - let uri = URI(chrome.extension.getURL("pages/confirm-contract.html")); - let params = { - offer: JSON.stringify(offer), - merchantPageUrl: document.location.href, - }; - document.location.href = uri.query(params).href(); - } - }); - }); + let msg = { + type: "check-repurchase", + detail: { + contract: offer.contract + }, + }; + + chrome.runtime.sendMessage(msg, (resp) => { + if (resp.error) { + console.error("wallet backend error", resp); + return; + } + if (resp.isRepurchase) { + console.log("doing repurchase"); + console.assert(resp.existingFulfillmentUrl); + console.assert(resp.existingContractHash); + window.location.href = subst(resp.existingFulfillmentUrl, + resp.existingContractHash); - addHandler("taler-confirm-contract", function(e: CustomEvent) { - if (!e.detail.contract_wrapper) { - console.error("contract wrapper missing"); - return; - } + } else { + let uri = URI(chrome.extension.getURL("pages/confirm-contract.html")); + let params = { + offer: JSON.stringify(offer), + merchantPageUrl: document.location.href, + }; + document.location.href = uri.query(params).href(); + } + }); + }); - let offer = e.detail.contract_wrapper; - if (!offer.contract) { - console.error("contract field missing"); - return; - } + addHandler("taler-confirm-contract", function(e: CustomEvent) { + if (!e.detail.contract_wrapper) { + console.error("contract wrapper missing"); + return; + } - let msg = { - type: "check-repurchase", - detail: { - contract: offer.contract - }, - }; + let offer = e.detail.contract_wrapper; - chrome.runtime.sendMessage(msg, (resp) => { - if (resp.error) { - console.error("wallet backend error", resp); + if (!offer.contract) { + console.error("contract field missing"); return; } - if (resp.isRepurchase) { - console.log("doing repurchase"); - console.assert(resp.existingFulfillmentUrl); - console.assert(resp.existingContractHash); - window.location.href = subst(resp.existingFulfillmentUrl, - resp.existingContractHash); - - } else { - let uri = URI(chrome.extension.getURL("pages/confirm-contract.html")); - let params = { - offer: JSON.stringify(offer), - merchantPageUrl: document.location.href, - }; - let target = uri.query(params).href(); - if (e.detail.replace_navigation === true) { - document.location.replace(target); + + let msg = { + type: "check-repurchase", + detail: { + contract: offer.contract + }, + }; + + chrome.runtime.sendMessage(msg, (resp) => { + if (resp.error) { + console.error("wallet backend error", resp); + return; + } + if (resp.isRepurchase) { + console.log("doing repurchase"); + console.assert(resp.existingFulfillmentUrl); + console.assert(resp.existingContractHash); + window.location.href = subst(resp.existingFulfillmentUrl, + resp.existingContractHash); + } else { - document.location.href = target; + let uri = URI(chrome.extension.getURL("pages/confirm-contract.html")); + let params = { + offer: JSON.stringify(offer), + merchantPageUrl: document.location.href, + }; + let target = uri.query(params).href(); + if (e.detail.replace_navigation === true) { + document.location.replace(target); + } else { + document.location.href = target; + } } - } + }); }); - }); - addHandler('taler-execute-payment', function(e: CustomEvent) { - console.log("got taler-execute-payment in content page"); - if (!e.detail.pay_url) { - console.log("field 'pay_url' missing in taler-execute-payment event"); - return; - } - let payUrl = e.detail.pay_url; - let msg = { - type: "execute-payment", - detail: { - H_contract: e.detail.H_contract, - }, - }; - chrome.runtime.sendMessage(msg, (resp) => { - console.log("got resp"); - console.dir(resp); - if (!resp.success) { - console.log("got event detial:"); - console.dir(e.detail); - if (e.detail.offering_url) { - console.log("offering url", e.detail.offering_url); - window.location.href = e.detail.offering_url; - } else { - console.error("execute-payment failed"); - } + addHandler('taler-execute-payment', function(e: CustomEvent) { + console.log("got taler-execute-payment in content page"); + if (!e.detail.pay_url) { + console.log("field 'pay_url' missing in taler-execute-payment event"); return; } - let contract = resp.contract; - if (!contract) { - throw Error("contract missing"); - } - - console.log("Making request to ", payUrl); - let r = new XMLHttpRequest(); - r.open('post', payUrl); - r.send(JSON.stringify(resp.payReq)); - r.onload = () => { - switch (r.status) { - case 200: - console.log("going to", contract.fulfillment_url); - // TODO: Is this the right thing? Does the reload - // TODO: override setting location.href? - window.location.href = subst(contract.fulfillment_url, - e.detail.H_contract); - window.location.reload(true); - break; - default: - console.log("Unexpected status code for $pay_url:", r.status); - break; - } + let payUrl = e.detail.pay_url; + let msg = { + type: "execute-payment", + detail: { + H_contract: e.detail.H_contract, + }, }; + chrome.runtime.sendMessage(msg, (resp) => { + console.log("got resp"); + console.dir(resp); + if (!resp.success) { + console.log("got event detial:"); + console.dir(e.detail); + if (e.detail.offering_url) { + console.log("offering url", e.detail.offering_url); + window.location.href = e.detail.offering_url; + } else { + console.error("execute-payment failed"); + } + return; + } + let contract = resp.contract; + if (!contract) { + throw Error("contract missing"); + } + + console.log("Making request to ", payUrl); + let r = new XMLHttpRequest(); + r.open('post', payUrl); + r.send(JSON.stringify(resp.payReq)); + r.onload = () => { + switch (r.status) { + case 200: + console.log("going to", contract.fulfillment_url); + // TODO: Is this the right thing? Does the reload + // TODO: override setting location.href? + window.location.href = subst(contract.fulfillment_url, + e.detail.H_contract); + window.location.reload(true); + break; + default: + console.log("Unexpected status code for $pay_url:", r.status); + break; + } + }; + }); }); - }); + } }
\ No newline at end of file diff --git a/lib/wallet/wxMessaging.ts b/lib/wallet/wxMessaging.ts index daa9ec197..64b16de8d 100644 --- a/lib/wallet/wxMessaging.ts +++ b/lib/wallet/wxMessaging.ts @@ -23,6 +23,7 @@ import {AmountJson} from "./types"; import Port = chrome.runtime.Port; import {Notifier} from "./types"; import {Contract} from "./types"; +import MessageSender = chrome.runtime.MessageSender; "use strict"; @@ -35,18 +36,21 @@ import {Contract} from "./types"; */ -type Handler = (detail: any) => Promise<any>; +type Handler = (detail: any, sender: MessageSender) => Promise<any>; function makeHandlers(db: IDBDatabase, wallet: Wallet): {[msg: string]: Handler} { return { - ["balances"]: function(detail) { + ["balances"]: function(detail, sender) { return wallet.getBalances(); }, - ["dump-db"]: function(detail) { + ["dump-db"]: function(detail, sender) { return exportDb(db); }, - ["reset"]: function(detail) { + ["ping"]: function(detail, sender) { + return Promise.resolve({}); + }, + ["reset"]: function(detail, sender) { if (db) { let tx = db.transaction(db.objectStoreNames, 'readwrite'); for (let i = 0; i < db.objectStoreNames.length; i++) { @@ -60,7 +64,7 @@ function makeHandlers(db: IDBDatabase, // Response is synchronous return Promise.resolve({}); }, - ["create-reserve"]: function(detail) { + ["create-reserve"]: function(detail, sender) { const d = { exchange: detail.exchange, amount: detail.amount, @@ -68,7 +72,7 @@ function makeHandlers(db: IDBDatabase, const req = CreateReserveRequest.checked(d); return wallet.createReserve(req); }, - ["confirm-reserve"]: function(detail) { + ["confirm-reserve"]: function(detail, sender) { // TODO: make it a checkable const d = { reservePub: detail.reservePub @@ -76,7 +80,7 @@ function makeHandlers(db: IDBDatabase, const req = ConfirmReserveRequest.checked(d); return wallet.confirmReserve(req); }, - ["confirm-pay"]: function(detail) { + ["confirm-pay"]: function(detail, sender) { let offer; try { offer = Offer.checked(detail.offer); @@ -95,7 +99,7 @@ function makeHandlers(db: IDBDatabase, return wallet.confirmPay(offer); }, - ["execute-payment"]: function(detail) { + ["execute-payment"]: function(detail, sender) { return wallet.executePayment(detail.H_contract); }, ["exchange-info"]: function(detail) { @@ -104,18 +108,18 @@ function makeHandlers(db: IDBDatabase, } return wallet.updateExchangeFromUrl(detail.baseUrl); }, - ["reserve-creation-info"]: function(detail) { + ["reserve-creation-info"]: function(detail, sender) { if (!detail.baseUrl || typeof detail.baseUrl !== "string") { return Promise.resolve({error: "bad url"}); } let amount = AmountJson.checked(detail.amount); return wallet.getReserveCreationInfo(detail.baseUrl, amount); }, - ["check-repurchase"]: function(detail) { + ["check-repurchase"]: function(detail, sender) { let contract = Contract.checked(detail.contract); return wallet.checkRepurchase(contract); }, - ["get-history"]: function(detail) { + ["get-history"]: function(detail, sender) { // TODO: limit history length return wallet.getHistory(); }, @@ -134,12 +138,12 @@ class ChromeBadge implements Badge { } -function dispatch(handlers, req, sendResponse) { +function dispatch(handlers, req, sender, sendResponse) { if (req.type in handlers) { Promise .resolve() .then(() => { - const p = handlers[req.type](req.detail); + const p = handlers[req.type](req.detail, sender); return p.then((r) => { sendResponse(r); @@ -224,7 +228,7 @@ export function wxMain() { let handlers = makeHandlers(db, wallet); chrome.runtime.onMessage.addListener((req, sender, sendResponse) => { try { - return dispatch(handlers, req, sendResponse) + return dispatch(handlers, req, sender, sendResponse) } catch (e) { console.log(`exception during wallet handler (dispatch)`); console.log("request", req); diff --git a/manifest.json b/manifest.json index b83a68533..bd3ee2221 100644 --- a/manifest.json +++ b/manifest.json @@ -2,7 +2,7 @@ "description": "Privacy preserving and transparent payments", "manifest_version": 2, "name": "GNU Taler Wallet (git)", - "version": "0.5.15", + "version": "0.5.17", "applications": { "gecko": { |