1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
|
/*
This file is part of GNU Taler
(C) 2022 Taler Systems S.A.
GNU Taler is free software; you can redistribute it and/or modify it under the
terms of the GNU General Public License as published by the Free Software
Foundation; either version 3, or (at your option) any later version.
GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY
WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
A PARTICULAR PURPOSE. See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License along with
GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>
*/
// This file demonstrates how to use the single-file embedded wallet.
// Load the embedded wallet
const embedded = require("./dist/taler-wallet-embedded.cjs");
// Some bookkeeping to correlate requests to responses.
const requestMap = {};
let requestCounter = 1;
// Install __native_onMessage in the global namespace.
// The __native_onMessage handles messages from the host,
// i.e. it handles wallet-core requests from the host application (UI etc.).
embedded.installNativeWalletListener();
// The host application must the __native_sendMessage callback
// to allow wallet-core to respond.
globalThis.__native_sendMessage = (msgStr) => {
const message = JSON.parse(msgStr);
if (message.type === "notification") {
console.log("got notification:", JSON.stringify(message.payload));
return;
}
if (message.type === "response") {
console.log("got response", JSON.parse(msgStr));
const msgId = message.id;
requestMap[msgId](message);
delete requestMap[msgId];
return;
}
throw Error("not reached");
};
async function makeRequest(operation, payload = {}) {
return new Promise((resolve, reject) => {
const reqId = `req-${requestCounter++}`;
requestMap[reqId] = (x) => resolve(x);
__native_onMessage(
JSON.stringify({
operation,
args: payload,
id: reqId,
}),
);
});
}
async function testMain() {
const resp = await makeRequest("init");
console.log("response from init", JSON.stringify(resp));
}
testMain();
|