make wallet independent of chrome/WX api

This commit is contained in:
Florian Dold 2016-01-06 15:58:18 +01:00
parent abf15268ac
commit 5bb1c95ec5
4 changed files with 99 additions and 77 deletions

View File

@ -28,7 +28,8 @@ interface HttpResponse {
}
function httpReq(method: string,
class BrowserHttpLib {
req(method: string,
url: string|uri.URI,
options?: any): Promise<HttpResponse> {
let urlString: string;
@ -59,19 +60,19 @@ function httpReq(method: string,
}
function httpGet(url: string|uri.URI) {
return httpReq("get", url);
get(url: string|uri.URI) {
return this.req("get", url);
}
function httpPostJson(url: string|uri.URI, body) {
return httpReq("post", url, {req: JSON.stringify(body)});
postJson(url: string|uri.URI, body) {
return this.req("post", url, {req: JSON.stringify(body)});
}
function httpPostForm(url: string|uri.URI, form) {
return httpReq("post", url, {req: form});
postForm(url: string|uri.URI, form) {
return this.req("post", url, {req: form});
}
}

View File

@ -59,7 +59,8 @@ function makeHandlers(wallet) {
wallet.confirmReserve(req)
.then((resp) => {
if (resp.success) {
resp.backlink = chrome.extension.getURL("pages/reserve-success.html");
resp.backlink = chrome.extension.getURL(
"pages/reserve-success.html");
}
sendResponse(resp);
});
@ -93,12 +94,24 @@ function makeHandlers(wallet) {
};
}
class ChromeBadge {
setText(s: string) {
chrome.browserAction.setBadgeText({text: s});
}
setColor(c: string) {
chrome.browserAction.setBadgeBackgroundColor({color: c});
}
}
function wxMain() {
chrome.browserAction.setBadgeText({text: ""});
openTalerDb().then((db) => {
let wallet = new Wallet(db, undefined, undefined);
let http = new BrowserHttpLib();
let badge = new ChromeBadge();
let wallet = new Wallet(db, http, badge);
let handlers = makeHandlers(wallet);
wallet.updateBadge();
chrome.runtime.onMessage.addListener(

View File

@ -20,7 +20,6 @@
* @author Florian Dold
*/
/// <reference path="../decl/urijs/URIjs.d.ts" />
/// <reference path="../decl/chrome/chrome.d.ts" />
"use strict";
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
@ -264,7 +263,7 @@ class Wallet {
form.append(req.field_mint, req.mint);
// TODO: set bank-specified fields.
let mintBaseUrl = canonicalizeBaseUrl(req.mint);
return httpPostForm(req.post_url, form)
return this.http.postForm(req.post_url, form)
.then((hresp) => {
let resp = {
status: hresp.status,
@ -351,7 +350,7 @@ class Wallet {
wd.reserve_sig = pc.withdrawSig;
wd.coin_ev = pc.coinEv;
let reqUrl = URI("reserve/withdraw").absoluteTo(r.mint_base_url);
return httpPostJson(reqUrl, wd);
return this.http.postJson(reqUrl, wd);
})
.then(resp => {
if (resp.status != 200) {
@ -381,8 +380,8 @@ class Wallet {
return n;
}
function doBadge(n) {
chrome.browserAction.setBadgeText({ text: "" + n });
chrome.browserAction.setBadgeBackgroundColor({ color: "#0F0" });
this.badge.setText(n.toString());
this.badge.setColor("#0F0");
}
Query(this.db)
.iter("coins")
@ -447,7 +446,7 @@ class Wallet {
.then((reserve) => {
let reqUrl = URI("reserve/status").absoluteTo(mint.baseUrl);
reqUrl.query({ 'reserve_pub': reservePubStr });
return httpGet(reqUrl).then(resp => {
return this.http.get(reqUrl).then(resp => {
if (resp.status != 200) {
throw Error();
}
@ -470,7 +469,7 @@ class Wallet {
*/
updateMintFromUrl(baseUrl) {
let reqUrl = URI("keys").absoluteTo(baseUrl);
return httpGet(reqUrl).then((resp) => {
return this.http.get(reqUrl).then((resp) => {
if (resp.status != 200) {
throw Error("/keys request failed");
}

View File

@ -23,7 +23,6 @@
/// <reference path="../decl/urijs/URIjs.d.ts" />
/// <reference path="../decl/chrome/chrome.d.ts" />
"use strict";
@Checkable.Class
@ -196,12 +195,22 @@ function canonicalizeBaseUrl(url) {
return x.href()
}
interface HttpRequestLibrary {
interface HttpRequestLibrary {
req(method: string,
url: string|uri.URI,
options?: any): Promise<HttpResponse>;
get(url: string|uri.URI): Promise<HttpResponse>;
postJson(url: string|uri.URI, body): Promise<HttpResponse>;
postForm(url: string|uri.URI, form): Promise<HttpResponse>;
}
interface Badge {
setText(s: string): void;
setColor(c: string): void;
}
@ -435,7 +444,7 @@ class Wallet {
// TODO: set bank-specified fields.
let mintBaseUrl = canonicalizeBaseUrl(req.mint);
return httpPostForm(req.post_url, form)
return this.http.postForm(req.post_url, form)
.then((hresp) => {
let resp: ConfirmReserveResponse = {
status: hresp.status,
@ -537,7 +546,7 @@ class Wallet {
wd.reserve_sig = pc.withdrawSig;
wd.coin_ev = pc.coinEv;
let reqUrl = URI("reserve/withdraw").absoluteTo(r.mint_base_url);
return httpPostJson(reqUrl, wd);
return this.http.postJson(reqUrl, wd);
})
.then(resp => {
if (resp.status != 200) {
@ -572,8 +581,8 @@ class Wallet {
}
function doBadge(n) {
chrome.browserAction.setBadgeText({text: "" + n});
chrome.browserAction.setBadgeBackgroundColor({color: "#0F0"});
this.badge.setText(n.toString());
this.badge.setColor("#0F0");
}
Query(this.db)
@ -647,7 +656,7 @@ class Wallet {
.then((reserve) => {
let reqUrl = URI("reserve/status").absoluteTo(mint.baseUrl);
reqUrl.query({'reserve_pub': reservePubStr});
return httpGet(reqUrl).then(resp => {
return this.http.get(reqUrl).then(resp => {
if (resp.status != 200) {
throw Error();
}
@ -671,7 +680,7 @@ class Wallet {
*/
updateMintFromUrl(baseUrl) {
let reqUrl = URI("keys").absoluteTo(baseUrl);
return httpGet(reqUrl).then((resp) => {
return this.http.get(reqUrl).then((resp) => {
if (resp.status != 200) {
throw Error("/keys request failed");
}