aboutsummaryrefslogtreecommitdiff
path: root/extension/pages/confirm-create-reserve.js
diff options
context:
space:
mode:
Diffstat (limited to 'extension/pages/confirm-create-reserve.js')
-rw-r--r--extension/pages/confirm-create-reserve.js201
1 files changed, 154 insertions, 47 deletions
diff --git a/extension/pages/confirm-create-reserve.js b/extension/pages/confirm-create-reserve.js
index 3ac757249..124abdf22 100644
--- a/extension/pages/confirm-create-reserve.js
+++ b/extension/pages/confirm-create-reserve.js
@@ -13,69 +13,176 @@
You should have received a copy of the GNU General Public License along with
TALER; see the file COPYING. If not, If not, see <http://www.gnu.org/licenses/>
*/
-System.register(["../lib/web-common", "../lib/wallet/wallet"], function(exports_1, context_1) {
+System.register(["../lib/wallet/helpers", "../lib/wallet/types"], function(exports_1, context_1) {
"use strict";
var __moduleName = context_1 && context_1.id;
- var web_common_1, wallet_1;
+ var helpers_1, types_1;
+ var DelayTimer, Controller;
function main() {
- function updateAmount() {
- var showAmount = document.getElementById("show-amount");
- console.log("Query is " + JSON.stringify(query));
- var amount = wallet_1.AmountJson.checked(JSON.parse(query.amount));
- showAmount.textContent = web_common_1.amountToPretty(amount);
- }
var url = URI(document.location.href);
var query = URI.parseQuery(url.query());
- updateAmount();
- document.getElementById("confirm").addEventListener("click", function (e) {
- var d = {
- mint: document.getElementById('mint-url').value,
- amount: JSON.parse(query.amount)
- };
- if (!d.mint) {
- // FIXME: indicate error instead!
- throw Error("mint missing");
- }
- if (!d.amount) {
- // FIXME: indicate error instead!
- throw Error("amount missing");
- }
- var cb = function (rawResp) {
- if (!rawResp) {
- throw Error("empty response");
- }
- if (!rawResp.error) {
- var resp = wallet_1.CreateReserveResponse.checked(rawResp);
- var q = {
- mint: resp.mint,
- reserve_pub: resp.reservePub,
- amount: query.amount,
- };
- var url_1 = URI(query.callback_url).addQuery(q);
- if (!url_1.is("absolute")) {
- throw Error("callback url is not absolute");
+ var amount = types_1.AmountJson.checked(JSON.parse(query.amount));
+ var callback_url = query.callback_url;
+ var MintSelection = {
+ controller: function () { return new Controller(); },
+ view: function (ctrl) {
+ var controls = [];
+ var mx = function () {
+ var args = [];
+ for (var _i = 0; _i < arguments.length; _i++) {
+ args[_i - 0] = arguments[_i];
}
- document.location.href = url_1.href();
+ return controls.push(m.apply(void 0, args));
+ };
+ mx("p", (_a = ["The bank wants to create a reserve over ", "."], _a.raw = ["The bank wants to create a reserve over ", "."], i18n(_a, helpers_1.amountToPretty(amount))));
+ mx("input.url", {
+ type: "text",
+ spellcheck: false,
+ oninput: m.withAttr("value", ctrl.onUrlChanged.bind(ctrl)),
+ });
+ if (ctrl.isValidMint) {
+ mx("button", {
+ onclick: function () { return ctrl.confirmReserve(ctrl.url, amount, callback_url); }
+ }, "Confirm mint selection");
}
- else {
- document.body.innerHTML =
- "Oops, something went wrong. It looks like the bank could not\n transfer funds to the mint. Please go back to your bank's website\n to check what happened.";
+ if (ctrl.errorString) {
+ mx("p", ctrl.errorString);
}
- };
- chrome.runtime.sendMessage({ type: 'create-reserve', detail: d }, cb);
- });
+ return m("div", controls);
+ var _a;
+ }
+ };
+ m.mount(document.getElementById("mint-selection"), MintSelection);
}
exports_1("main", main);
return {
setters:[
- function (web_common_1_1) {
- web_common_1 = web_common_1_1;
+ function (helpers_1_1) {
+ helpers_1 = helpers_1_1;
},
- function (wallet_1_1) {
- wallet_1 = wallet_1_1;
+ function (types_1_1) {
+ types_1 = types_1_1;
}],
execute: function() {
"use strict";
+ /**
+ * Execute something after a delay, with the possibility
+ * to reset the delay.
+ */
+ DelayTimer = (function () {
+ function DelayTimer(ms, f) {
+ this.timerId = null;
+ this.f = f;
+ this.ms = ms;
+ }
+ DelayTimer.prototype.bump = function () {
+ var _this = this;
+ if (this.timerId !== null) {
+ window.clearTimeout(this.timerId);
+ }
+ var handler = function () {
+ _this.f();
+ };
+ this.timerId = window.setTimeout(handler, this.ms);
+ };
+ return DelayTimer;
+ }());
+ Controller = (function () {
+ function Controller() {
+ var _this = this;
+ this.url = null;
+ this.errorString = null;
+ this.isValidMint = false;
+ this.update();
+ this.timer = new DelayTimer(800, function () { return _this.update(); });
+ }
+ Controller.prototype.update = function () {
+ var _this = this;
+ var doUpdate = function () {
+ if (!_this.url) {
+ _this.errorString = (_a = ["Please enter a URL"], _a.raw = ["Please enter a URL"], i18n(_a));
+ return;
+ }
+ _this.errorString = null;
+ var parsedUrl = URI(_this.url);
+ if (parsedUrl.is("relative")) {
+ _this.errorString = (_b = ["The URL you've entered is not valid (must be absolute)"], _b.raw = ["The URL you've entered is not valid (must be absolute)"], i18n(_b));
+ return;
+ }
+ var keysUrl = URI("/keys").absoluteTo(helpers_1.canonicalizeBaseUrl(_this.url));
+ console.log("requesting keys from '" + keysUrl + "'");
+ _this.request = new XMLHttpRequest();
+ _this.request.onreadystatechange = function () {
+ if (_this.request.readyState == XMLHttpRequest.DONE) {
+ switch (_this.request.status) {
+ case 200:
+ _this.isValidMint = true;
+ break;
+ case 0:
+ _this.errorString = "unknown request error";
+ break;
+ default:
+ _this.errorString = "request failed with status " + _this.request.status;
+ break;
+ }
+ m.redraw();
+ }
+ };
+ _this.request.open("get", keysUrl.href());
+ _this.request.send();
+ var _a, _b;
+ };
+ doUpdate();
+ m.redraw();
+ console.log("got update");
+ };
+ Controller.prototype.reset = function () {
+ this.isValidMint = false;
+ this.errorString = null;
+ if (this.request) {
+ this.request.abort();
+ this.request = null;
+ }
+ m.redraw();
+ };
+ Controller.prototype.confirmReserve = function (mint, amount, callback_url) {
+ var _this = this;
+ var d = { mint: mint, amount: amount };
+ var cb = function (rawResp) {
+ if (!rawResp) {
+ throw Error("empty response");
+ }
+ if (!rawResp.error) {
+ var resp = types_1.CreateReserveResponse.checked(rawResp);
+ var q = {
+ mint: resp.mint,
+ reserve_pub: resp.reservePub,
+ amount_value: amount.value,
+ amount_fraction: amount.fraction,
+ amount_currency: amount.currency,
+ };
+ var url = URI(callback_url).addQuery(q);
+ if (!url.is("absolute")) {
+ throw Error("callback url is not absolute");
+ }
+ console.log("going to", url.href());
+ document.location.href = url.href();
+ }
+ else {
+ _this.reset();
+ _this.errorString = ("Oops, something went wrong." +
+ ("The wallet responded with error status (" + rawResp.error + ")."));
+ }
+ };
+ chrome.runtime.sendMessage({ type: 'create-reserve', detail: d }, cb);
+ };
+ Controller.prototype.onUrlChanged = function (url) {
+ this.reset();
+ this.url = url;
+ this.timer.bump();
+ };
+ return Controller;
+ }());
}
}
});