make wallet independent of chrome/WX api
This commit is contained in:
parent
abf15268ac
commit
5bb1c95ec5
@ -28,50 +28,51 @@ interface HttpResponse {
|
||||
}
|
||||
|
||||
|
||||
function httpReq(method: string,
|
||||
url: string|uri.URI,
|
||||
options?: any): Promise<HttpResponse> {
|
||||
let urlString: string;
|
||||
if (url instanceof URI) {
|
||||
urlString = url.href();
|
||||
} else if (typeof url === "string") {
|
||||
urlString = url;
|
||||
class BrowserHttpLib {
|
||||
req(method: string,
|
||||
url: string|uri.URI,
|
||||
options?: any): Promise<HttpResponse> {
|
||||
let urlString: string;
|
||||
if (url instanceof URI) {
|
||||
urlString = url.href();
|
||||
} else if (typeof url === "string") {
|
||||
urlString = url;
|
||||
}
|
||||
|
||||
return new Promise((resolve, reject) => {
|
||||
let myRequest = new XMLHttpRequest();
|
||||
myRequest.open(method, urlString);
|
||||
if (options && options.req) {
|
||||
myRequest.send(options.req);
|
||||
} else {
|
||||
myRequest.send();
|
||||
}
|
||||
myRequest.addEventListener("readystatechange", (e) => {
|
||||
if (myRequest.readyState == XMLHttpRequest.DONE) {
|
||||
let resp = {
|
||||
status: myRequest.status,
|
||||
responseText: myRequest.responseText
|
||||
};
|
||||
resolve(resp);
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
return new Promise((resolve, reject) => {
|
||||
let myRequest = new XMLHttpRequest();
|
||||
myRequest.open(method, urlString);
|
||||
if (options && options.req) {
|
||||
myRequest.send(options.req);
|
||||
} else {
|
||||
myRequest.send();
|
||||
}
|
||||
myRequest.addEventListener("readystatechange", (e) => {
|
||||
if (myRequest.readyState == XMLHttpRequest.DONE) {
|
||||
let resp = {
|
||||
status: myRequest.status,
|
||||
responseText: myRequest.responseText
|
||||
};
|
||||
resolve(resp);
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
get(url: string|uri.URI) {
|
||||
return this.req("get", url);
|
||||
}
|
||||
|
||||
|
||||
|
||||
function httpGet(url: string|uri.URI) {
|
||||
return httpReq("get", url);
|
||||
}
|
||||
postJson(url: string|uri.URI, body) {
|
||||
return this.req("post", url, {req: JSON.stringify(body)});
|
||||
}
|
||||
|
||||
|
||||
function httpPostJson(url: string|uri.URI, body) {
|
||||
return httpReq("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});
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
@ -57,48 +57,61 @@ function makeHandlers(wallet) {
|
||||
amount_str: detail.amount_str
|
||||
};
|
||||
wallet.confirmReserve(req)
|
||||
.then((resp) => {
|
||||
if (resp.success) {
|
||||
resp.backlink = chrome.extension.getURL("pages/reserve-success.html");
|
||||
}
|
||||
sendResponse(resp);
|
||||
});
|
||||
.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});
|
||||
});
|
||||
.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});
|
||||
});
|
||||
.then((r) => {
|
||||
sendResponse({
|
||||
success: true,
|
||||
payUrl: r.payUrl,
|
||||
payReq: r.payReq
|
||||
});
|
||||
})
|
||||
.catch((e) => {
|
||||
sendResponse({success: false, error: e.message});
|
||||
});
|
||||
// async sendResponse
|
||||
return true;
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
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(
|
||||
|
@ -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");
|
||||
}
|
||||
|
@ -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");
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user