1// Based on GPLv3 code from deltachat-android
2// https://github.com/deltachat/deltachat-android/blob/master/res/raw/webxdc.js
3
4window.webxdc = (() => {
5 let setUpdateListenerPromise = null
6 var update_listener = () => {};
7 var last_serial = 0;
8
9 window.__webxdcUpdate = () => {
10 var updates = JSON.parse(InternalJSApi.getStatusUpdates(last_serial));
11 updates.forEach((update) => {
12 update_listener(update);
13 last_serial = update.serial;
14 });
15 if (setUpdateListenerPromise) {
16 setUpdateListenerPromise();
17 setUpdateListenerPromise = null;
18 }
19 };
20
21 return {
22 selfAddr: InternalJSApi.selfAddr(),
23
24 selfName: InternalJSApi.selfName(),
25
26 setUpdateListener: (cb, serial) => {
27 last_serial = typeof serial === "undefined" ? 0 : parseInt(serial);
28 update_listener = cb;
29 var promise = new Promise((res, _rej) => {
30 setUpdateListenerPromise = res;
31 });
32 window.__webxdcUpdate();
33 return promise;
34 },
35
36 sendUpdate: (payload, descr) => {
37 InternalJSApi.sendStatusUpdate(JSON.stringify(payload), descr);
38 },
39 };
40})();