@xelis/sdk 0.10.11 → 0.11.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/daemon/websocket.js +6 -60
- package/dist/cjs/react/daemon.js +15 -73
- package/dist/cjs/rpc/websocket.js +109 -204
- package/dist/cjs/wallet/websocket.js +6 -24
- package/dist/cjs/xswd/relayer/app.js +8 -3
- package/dist/cjs/xswd/relayer/index.css +136 -10
- package/dist/cjs/xswd/websocket.js +3 -3
- package/dist/esm/daemon/websocket.js +6 -60
- package/dist/esm/react/daemon.js +15 -73
- package/dist/esm/rpc/websocket.js +108 -203
- package/dist/esm/wallet/websocket.js +6 -24
- package/dist/esm/xswd/relayer/app.js +8 -3
- package/dist/esm/xswd/relayer/index.css +136 -10
- package/dist/esm/xswd/websocket.js +3 -3
- package/dist/types/daemon/websocket.d.ts +25 -21
- package/dist/types/react/daemon.d.ts +2 -2
- package/dist/types/rpc/websocket.d.ts +14 -22
- package/dist/types/wallet/websocket.d.ts +14 -10
- package/dist/types/xswd/websocket.d.ts +1 -1
- package/package.json +1 -1
|
@@ -34,248 +34,121 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
|
34
34
|
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
35
35
|
}
|
|
36
36
|
};
|
|
37
|
+
import to from "await-to-js";
|
|
38
|
+
import { parseJSON } from "./parse_json/parse_json.js";
|
|
37
39
|
import WebSocket from 'isomorphic-ws';
|
|
38
|
-
import { to } from 'await-to-js';
|
|
39
|
-
import { parseJSON } from './parse_json/parse_json.js';
|
|
40
40
|
var WSRPC = /** @class */ (function () {
|
|
41
|
-
function WSRPC(options) {
|
|
42
|
-
this.connectionTries = 0;
|
|
43
|
-
this.methodIdIncrement = 0;
|
|
44
|
-
this.endpoint = "";
|
|
45
|
-
this.timeout = 15000; // default to 15s
|
|
46
|
-
this.events = new Map();
|
|
47
|
-
this.unsubscribeSuspense = 1000;
|
|
48
|
-
this.maxConnectionTries = 3;
|
|
49
|
-
this.reconnectOnConnectionLoss = true;
|
|
50
|
-
this.options = options;
|
|
51
|
-
}
|
|
52
|
-
WSRPC.prototype.connect = function (endpoint) {
|
|
41
|
+
function WSRPC(endpoint, options) {
|
|
53
42
|
var _this = this;
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
}
|
|
43
|
+
this.socket = new WebSocket(endpoint, options);
|
|
44
|
+
this.methodIdIncrement = 0;
|
|
45
|
+
this.callTimeout = 3000;
|
|
58
46
|
this.events = new Map();
|
|
59
|
-
this.
|
|
60
|
-
|
|
61
|
-
_this.socket = new WebSocket(endpoint, _this.options);
|
|
62
|
-
_this.endpoint = endpoint;
|
|
63
|
-
_this.socket.addEventListener("open", function (event) {
|
|
64
|
-
resolve(event);
|
|
65
|
-
});
|
|
66
|
-
_this.socket.addEventListener("close", function (event) {
|
|
67
|
-
if (_this.reconnectOnConnectionLoss && !event.wasClean) {
|
|
68
|
-
_this.tryReconnect();
|
|
69
|
-
reject(new Error("Unhandled close. Reconnecting..."));
|
|
70
|
-
}
|
|
71
|
-
else {
|
|
72
|
-
reject(event);
|
|
73
|
-
}
|
|
74
|
-
});
|
|
75
|
-
_this.socket.addEventListener("error", function (err) {
|
|
76
|
-
reject(err);
|
|
77
|
-
});
|
|
78
|
-
});
|
|
79
|
-
};
|
|
80
|
-
WSRPC.prototype.tryReconnect = function () {
|
|
81
|
-
var _this = this;
|
|
82
|
-
this.connectionTries++;
|
|
83
|
-
if (this.connectionTries > this.maxConnectionTries) {
|
|
84
|
-
return;
|
|
85
|
-
}
|
|
86
|
-
this.socket = new WebSocket(this.endpoint, this.options);
|
|
87
|
-
this.socket.addEventListener("open", function () {
|
|
88
|
-
_this.connectionTries = 0;
|
|
47
|
+
this.socket.addEventListener("close", function () {
|
|
48
|
+
_this.events = new Map();
|
|
89
49
|
});
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
});
|
|
93
|
-
};
|
|
94
|
-
WSRPC.prototype.close = function () {
|
|
95
|
-
if (!this.socket)
|
|
96
|
-
return;
|
|
97
|
-
this.socket.close();
|
|
98
|
-
};
|
|
99
|
-
WSRPC.prototype.clearEvent = function (event) {
|
|
100
|
-
var _this = this;
|
|
101
|
-
var eventData = this.events.get(event);
|
|
102
|
-
if (eventData) {
|
|
103
|
-
eventData.listeners.forEach(function (listener) {
|
|
104
|
-
_this.socket && _this.socket.removeEventListener("message", listener);
|
|
105
|
-
});
|
|
106
|
-
this.events["delete"](event);
|
|
107
|
-
}
|
|
108
|
-
};
|
|
109
|
-
WSRPC.prototype.closeAllListens = function (event) {
|
|
50
|
+
}
|
|
51
|
+
WSRPC.prototype.closeListener = function (event, listener) {
|
|
110
52
|
return __awaiter(this, void 0, void 0, function () {
|
|
111
|
-
var
|
|
112
|
-
return __generator(this, function (
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
this.
|
|
122
|
-
|
|
123
|
-
|
|
53
|
+
var eventData;
|
|
54
|
+
return __generator(this, function (_a) {
|
|
55
|
+
eventData = this.events.get(event);
|
|
56
|
+
if (eventData) {
|
|
57
|
+
if (eventData.listeners.length > 1) {
|
|
58
|
+
eventData.listeners = eventData.listeners.filter(function (l) { return l !== listener; });
|
|
59
|
+
this.events.set(event, eventData);
|
|
60
|
+
}
|
|
61
|
+
else {
|
|
62
|
+
this.events["delete"](event);
|
|
63
|
+
this.socket.removeEventListener("message", eventData.onMessage);
|
|
64
|
+
this.dataCall("unsubscribe", { notify: event });
|
|
65
|
+
}
|
|
124
66
|
}
|
|
67
|
+
return [2 /*return*/];
|
|
125
68
|
});
|
|
126
69
|
});
|
|
127
70
|
};
|
|
128
|
-
WSRPC.prototype.
|
|
71
|
+
WSRPC.prototype.listen = function (event, listener) {
|
|
129
72
|
return __awaiter(this, void 0, void 0, function () {
|
|
130
|
-
var
|
|
73
|
+
var eventData, idRefObject_1, onMessage;
|
|
131
74
|
var _this = this;
|
|
132
|
-
return __generator(this, function (
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
75
|
+
return __generator(this, function (_a) {
|
|
76
|
+
eventData = this.events.get(event);
|
|
77
|
+
if (eventData) {
|
|
78
|
+
eventData.listeners.push(listener);
|
|
79
|
+
this.events.set(event, eventData);
|
|
80
|
+
}
|
|
81
|
+
else {
|
|
82
|
+
idRefObject_1 = {};
|
|
83
|
+
this.dataCall("subscribe", { notify: event }, idRefObject_1)["catch"](function (err) {
|
|
84
|
+
listener(undefined, err);
|
|
85
|
+
});
|
|
86
|
+
onMessage = function (msgEvent) {
|
|
87
|
+
var eventData = _this.events.get(event);
|
|
88
|
+
if (eventData && typeof msgEvent.data === "string") {
|
|
89
|
+
try {
|
|
90
|
+
var data_1 = parseJSON(msgEvent.data);
|
|
91
|
+
if (data_1.id === idRefObject_1.id) {
|
|
92
|
+
eventData.listeners.forEach(function (listener) {
|
|
93
|
+
if (data_1.error) {
|
|
94
|
+
listener(undefined, new Error(data_1.error.message));
|
|
143
95
|
}
|
|
144
96
|
else {
|
|
145
|
-
|
|
97
|
+
listener(data_1.result, undefined);
|
|
146
98
|
}
|
|
147
|
-
}
|
|
148
|
-
}
|
|
149
|
-
catch (_a) {
|
|
150
|
-
// can't parse json -- do nothing
|
|
99
|
+
});
|
|
151
100
|
}
|
|
152
101
|
}
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
if (!eventData) return [3 /*break*/, 1];
|
|
156
|
-
if (eventData.unsubscribeTimeoutId) {
|
|
157
|
-
// clear timeout to unsubscribe
|
|
158
|
-
// because we got a new registered event and want to cancel the pending unsubscribe grace period
|
|
159
|
-
clearTimeout(eventData.unsubscribeTimeoutId);
|
|
160
|
-
}
|
|
161
|
-
eventData.listeners.push(onMessage);
|
|
162
|
-
return [3 /*break*/, 3];
|
|
163
|
-
case 1:
|
|
164
|
-
// important if multiple listenEvent are called without await at least we store listener before getting id
|
|
165
|
-
// avoid trying to subscribe the same event multiple times
|
|
166
|
-
this.events.set(event, { listeners: [onMessage] });
|
|
167
|
-
idRefObject = {};
|
|
168
|
-
return [4 /*yield*/, to(this.dataCall("subscribe", { notify: event }, idRefObject))];
|
|
169
|
-
case 2:
|
|
170
|
-
_a = _b.sent(), err = _a[0], _ = _a[1];
|
|
171
|
-
if (err) {
|
|
172
|
-
this.clearEvent(event);
|
|
173
|
-
return [2 /*return*/, Promise.reject(err)];
|
|
174
|
-
}
|
|
175
|
-
eventData_1 = this.events.get(event);
|
|
176
|
-
if (eventData_1)
|
|
177
|
-
eventData_1.id = idRefObject.id;
|
|
178
|
-
_b.label = 3;
|
|
179
|
-
case 3:
|
|
180
|
-
this.socket && this.socket.addEventListener("message", onMessage);
|
|
181
|
-
closeListen = function () {
|
|
182
|
-
var eventData = _this.events.get(event);
|
|
183
|
-
if (eventData) {
|
|
184
|
-
var listeners = eventData.listeners;
|
|
185
|
-
for (var i = 0; i < listeners.length; i++) {
|
|
186
|
-
if (listeners[i] === onMessage) {
|
|
187
|
-
listeners.splice(i, 1);
|
|
188
|
-
break;
|
|
189
|
-
}
|
|
190
|
-
}
|
|
191
|
-
// no more listener so we unsubscribe from daemon websocket if socket still open
|
|
192
|
-
if (listeners.length === 0) {
|
|
193
|
-
// we use a grace period to unsubscribe (mostly because of react useEffect and avoid unecessary subscribe)
|
|
194
|
-
eventData.unsubscribeTimeoutId = setTimeout(function () { return __awaiter(_this, void 0, void 0, function () {
|
|
195
|
-
return __generator(this, function (_a) {
|
|
196
|
-
if (this.socket && this.socket.readyState === WebSocket.OPEN) {
|
|
197
|
-
this.dataCall("unsubscribe", { notify: event });
|
|
198
|
-
}
|
|
199
|
-
this.events["delete"](event);
|
|
200
|
-
return [2 /*return*/];
|
|
201
|
-
});
|
|
202
|
-
}); }, _this.unsubscribeSuspense);
|
|
203
|
-
}
|
|
102
|
+
catch (_a) {
|
|
103
|
+
// can't parse json -- do nothing
|
|
204
104
|
}
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
105
|
+
}
|
|
106
|
+
};
|
|
107
|
+
this.socket.addEventListener("message", onMessage);
|
|
108
|
+
this.events.set(event, { onMessage: onMessage, listeners: [listener] });
|
|
209
109
|
}
|
|
110
|
+
return [2 /*return*/];
|
|
210
111
|
});
|
|
211
112
|
});
|
|
212
113
|
};
|
|
213
|
-
WSRPC.prototype.batchCall = function (requests) {
|
|
214
|
-
var _this = this;
|
|
215
|
-
return new Promise(function (resolve, reject) { return __awaiter(_this, void 0, void 0, function () {
|
|
216
|
-
var id, data, _a, err, res, items;
|
|
217
|
-
return __generator(this, function (_b) {
|
|
218
|
-
switch (_b.label) {
|
|
219
|
-
case 0:
|
|
220
|
-
id = this.methodIdIncrement++;
|
|
221
|
-
requests.forEach(function (request) {
|
|
222
|
-
request.id = id;
|
|
223
|
-
request.jsonrpc = "2.0";
|
|
224
|
-
});
|
|
225
|
-
data = JSON.stringify(requests);
|
|
226
|
-
return [4 /*yield*/, to(this.rawCall(id, data))];
|
|
227
|
-
case 1:
|
|
228
|
-
_a = _b.sent(), err = _a[0], res = _a[1];
|
|
229
|
-
if (err)
|
|
230
|
-
return [2 /*return*/, reject(err)];
|
|
231
|
-
items = [];
|
|
232
|
-
res.forEach(function (v) {
|
|
233
|
-
if (v.error) {
|
|
234
|
-
items.push(new Error(v.error.message));
|
|
235
|
-
}
|
|
236
|
-
else {
|
|
237
|
-
items.push(v.result);
|
|
238
|
-
}
|
|
239
|
-
});
|
|
240
|
-
return [2 /*return*/, resolve(items)];
|
|
241
|
-
}
|
|
242
|
-
});
|
|
243
|
-
}); });
|
|
244
|
-
};
|
|
245
114
|
WSRPC.prototype.rawCall = function (id, body) {
|
|
246
115
|
var _this = this;
|
|
247
116
|
return new Promise(function (resolve, reject) {
|
|
248
|
-
if (!_this.socket)
|
|
249
|
-
return reject(new Error("Socket is not initialized."));
|
|
250
117
|
if (_this.socket.readyState !== WebSocket.OPEN)
|
|
251
118
|
return reject(new Error("Can't send msg. Socket is not opened."));
|
|
252
119
|
var timeoutId = null;
|
|
253
120
|
var onMessage = function (msgEvent) {
|
|
254
121
|
if (typeof msgEvent.data === "string") {
|
|
255
|
-
var
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
122
|
+
var data_2 = parseJSON(msgEvent.data);
|
|
123
|
+
var evaluate_data = function () {
|
|
124
|
+
clearTimeout(timeoutId);
|
|
125
|
+
_this.socket.removeEventListener("message", onMessage);
|
|
126
|
+
if (data_2.error && data_2.error.message) {
|
|
127
|
+
reject(new Error(data_2.error.message));
|
|
128
|
+
return;
|
|
129
|
+
}
|
|
130
|
+
return resolve(data_2);
|
|
131
|
+
};
|
|
132
|
+
// this is for batch call we match the id with first item id
|
|
133
|
+
if (Array.isArray(data_2) && data_2.length > 0 && data_2[0].id === id) {
|
|
134
|
+
return evaluate_data();
|
|
262
135
|
}
|
|
263
|
-
|
|
264
|
-
|
|
136
|
+
// the msg id is matching so we can evaluate the data
|
|
137
|
+
if (data_2.id === id) {
|
|
138
|
+
return evaluate_data();
|
|
265
139
|
}
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
return
|
|
140
|
+
// special XSWD case - sending first call will return null id
|
|
141
|
+
if (data_2.id === null && id === 0) {
|
|
142
|
+
return evaluate_data();
|
|
269
143
|
}
|
|
270
|
-
reject(new Error("invalid data"));
|
|
271
144
|
}
|
|
272
145
|
};
|
|
273
146
|
_this.socket.addEventListener("message", onMessage);
|
|
274
|
-
if (_this.
|
|
147
|
+
if (_this.callTimeout > 0) {
|
|
275
148
|
timeoutId = setTimeout(function () {
|
|
276
149
|
_this.socket && _this.socket.removeEventListener("message", onMessage);
|
|
277
150
|
reject(new Error("timeout"));
|
|
278
|
-
}, _this.
|
|
151
|
+
}, _this.callTimeout);
|
|
279
152
|
}
|
|
280
153
|
if (_this.socket.readyState === WebSocket.OPEN) {
|
|
281
154
|
_this.socket.send(body);
|
|
@@ -309,6 +182,38 @@ var WSRPC = /** @class */ (function () {
|
|
|
309
182
|
});
|
|
310
183
|
}); });
|
|
311
184
|
};
|
|
185
|
+
WSRPC.prototype.batchCall = function (requests) {
|
|
186
|
+
var _this = this;
|
|
187
|
+
return new Promise(function (resolve, reject) { return __awaiter(_this, void 0, void 0, function () {
|
|
188
|
+
var id, data, _a, err, res, items;
|
|
189
|
+
return __generator(this, function (_b) {
|
|
190
|
+
switch (_b.label) {
|
|
191
|
+
case 0:
|
|
192
|
+
id = this.methodIdIncrement++;
|
|
193
|
+
requests.forEach(function (request) {
|
|
194
|
+
request.id = id;
|
|
195
|
+
request.jsonrpc = "2.0";
|
|
196
|
+
});
|
|
197
|
+
data = JSON.stringify(requests);
|
|
198
|
+
return [4 /*yield*/, to(this.rawCall(id, data))];
|
|
199
|
+
case 1:
|
|
200
|
+
_a = _b.sent(), err = _a[0], res = _a[1];
|
|
201
|
+
if (err)
|
|
202
|
+
return [2 /*return*/, reject(err)];
|
|
203
|
+
items = [];
|
|
204
|
+
res.forEach(function (v) {
|
|
205
|
+
if (v.error) {
|
|
206
|
+
items.push(new Error(v.error.message));
|
|
207
|
+
}
|
|
208
|
+
else {
|
|
209
|
+
items.push(v.result);
|
|
210
|
+
}
|
|
211
|
+
});
|
|
212
|
+
return [2 /*return*/, resolve(items)];
|
|
213
|
+
}
|
|
214
|
+
});
|
|
215
|
+
}); });
|
|
216
|
+
};
|
|
312
217
|
return WSRPC;
|
|
313
218
|
}());
|
|
314
219
|
export { WSRPC };
|
|
@@ -24,29 +24,11 @@ var WalletMethods = /** @class */ (function () {
|
|
|
24
24
|
WalletMethods.prototype.dataCall = function (method, params) {
|
|
25
25
|
return this.ws.dataCall(this.prefix + method, params);
|
|
26
26
|
};
|
|
27
|
-
WalletMethods.prototype.
|
|
28
|
-
|
|
27
|
+
WalletMethods.prototype.closeListener = function (event, listener) {
|
|
28
|
+
this.ws.closeListener(event, listener);
|
|
29
29
|
};
|
|
30
|
-
WalletMethods.prototype.
|
|
31
|
-
|
|
32
|
-
};
|
|
33
|
-
WalletMethods.prototype.onNewTransaction = function (onData) {
|
|
34
|
-
return this.ws.listenEvent(this.prefix + RPCEvent.NewTransaction, onData);
|
|
35
|
-
};
|
|
36
|
-
WalletMethods.prototype.onBalanceChanged = function (onData) {
|
|
37
|
-
return this.ws.listenEvent(this.prefix + RPCEvent.BalanceChanged, onData);
|
|
38
|
-
};
|
|
39
|
-
WalletMethods.prototype.onRescan = function (onData) {
|
|
40
|
-
return this.ws.listenEvent(this.prefix + RPCEvent.Rescan, onData);
|
|
41
|
-
};
|
|
42
|
-
WalletMethods.prototype.onHistorySynced = function (onData) {
|
|
43
|
-
return this.ws.listenEvent(this.prefix + RPCEvent.HistorySynced, onData);
|
|
44
|
-
};
|
|
45
|
-
WalletMethods.prototype.onOnline = function (onData) {
|
|
46
|
-
return this.ws.listenEvent(this.prefix + RPCEvent.Online, onData);
|
|
47
|
-
};
|
|
48
|
-
WalletMethods.prototype.onOffline = function (onData) {
|
|
49
|
-
return this.ws.listenEvent(this.prefix + RPCEvent.Offline, onData);
|
|
30
|
+
WalletMethods.prototype.listen = function (event, listener) {
|
|
31
|
+
this.ws.listen(this.prefix + event, listener);
|
|
50
32
|
};
|
|
51
33
|
WalletMethods.prototype.getVersion = function () {
|
|
52
34
|
return this.dataCall(RPCMethod.GetVersion);
|
|
@@ -174,8 +156,8 @@ var WalletMethods = /** @class */ (function () {
|
|
|
174
156
|
export { WalletMethods };
|
|
175
157
|
var WS = /** @class */ (function (_super) {
|
|
176
158
|
__extends(WS, _super);
|
|
177
|
-
function WS(username, password) {
|
|
178
|
-
var _this = _super.call(this, { auth: "".concat(username, ":").concat(password) }) || this;
|
|
159
|
+
function WS(endpoint, username, password) {
|
|
160
|
+
var _this = _super.call(this, endpoint, { auth: "".concat(username, ":").concat(password) }) || this;
|
|
179
161
|
_this.methods = new WalletMethods(_this);
|
|
180
162
|
return _this;
|
|
181
163
|
}
|
|
@@ -15,7 +15,7 @@ var App = /** @class */ (function () {
|
|
|
15
15
|
this.errElement.classList.add("xelis-xswd-relayer-error");
|
|
16
16
|
this.qrCodeElement = document.createElement("div");
|
|
17
17
|
this.qrCodeElement.classList.add("xelis-xswd-relayer-qrcode");
|
|
18
|
-
this.qrCodeElement.innerHTML = "\n <div>XSWD Relayer</div>\n <canvas></canvas>\n ";
|
|
18
|
+
this.qrCodeElement.innerHTML = "\n <div class=\"xelis-xswd-relayer-scan-logo\">\n <svg fill=\"currentColor\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M4,4h6v6H4V4M20,4v6H14V4h6M14,15h2V13H14V11h2v2h2V11h2v2H18v2h2v3H18v2H16V18H13v2H11V16h3V15m2,0v3h2V15H16M4,20V14h6v6H4M6,6V8H8V6H6M16,6V8h2V6H16M6,16v2H8V16H6M4,11H6v2H4V11m5,0h4v4H11V13H9V11m2-5h2v4H11V6M2,2V6H0V2A2,2,0,0,1,2,0H6V2H2M22,0a2,2,0,0,1,2,2V6H22V2H18V0h4M2,18v4H6v2H2a2,2,0,0,1-2-2V18H2m20,4V18h2v4a2,2,0,0,1-2,2H18V22Z\"/>\n </svg>\n </div>\n <div class=\"xelis-xswd-relayer-logo-wrap\">\n <div class=\"xelis-xswd-relayer-logo\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 778 743\" fill=\"currentColor\">\n <path fillRule=\"evenodd\" clipRule=\"evenodd\" d=\"M388.909 742.872L777.817 353.964L424.056 0.202599L478.809 132.737L700.036 353.964L388.909 665.091L77.7817 353.964L299.507 129.121L353.964 0L0 353.964L388.909 742.872Z\" />\n <path d=\"M388.909 665.091L353.964 0L299.507 129.121L388.909 665.091Z\" />\n <path d=\"M424.056 0.202599L388.909 665.091L478.809 132.737L424.056 0.202599Z\" />\n </svg>\n </div>\n </div>\n <div class=\"xelis-xswd-relayer-title\">XSWD Relayer</div>\n <canvas></canvas>\n ";
|
|
19
19
|
this.element.addEventListener("click", function (e) {
|
|
20
20
|
// close the app if clicking outside
|
|
21
21
|
if (_this.element.isEqualNode(e.target)) {
|
|
@@ -32,7 +32,7 @@ var App = /** @class */ (function () {
|
|
|
32
32
|
};
|
|
33
33
|
App.prototype.setError = function (msg) {
|
|
34
34
|
this.clear();
|
|
35
|
-
this.errElement.innerHTML = "error: ".concat(msg);
|
|
35
|
+
this.errElement.innerHTML = "\n <div class=\"xelis-xswd-relayer-error-text\">error: ".concat(msg, "</div>\n ");
|
|
36
36
|
this.contentElement.appendChild(this.errElement);
|
|
37
37
|
};
|
|
38
38
|
App.prototype.setLoading = function () {
|
|
@@ -48,7 +48,12 @@ var App = /** @class */ (function () {
|
|
|
48
48
|
relayer: this.relayer.props.url,
|
|
49
49
|
encryption_mode: this.relayer.props.encryption_mode
|
|
50
50
|
});
|
|
51
|
-
QRCode.toCanvas(canvas, qrCodeData
|
|
51
|
+
QRCode.toCanvas(canvas, qrCodeData, {
|
|
52
|
+
color: {
|
|
53
|
+
dark: "#fff",
|
|
54
|
+
light: "#000" // background
|
|
55
|
+
}
|
|
56
|
+
});
|
|
52
57
|
this.contentElement.appendChild(this.qrCodeElement);
|
|
53
58
|
};
|
|
54
59
|
return App;
|
|
@@ -1,11 +1,21 @@
|
|
|
1
1
|
.xelis-xswd-relayer {
|
|
2
|
+
font-family: system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", "Liberation Sans", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
|
|
2
3
|
position: fixed;
|
|
3
4
|
top: 0;
|
|
4
5
|
left: 0;
|
|
5
6
|
bottom: 0;
|
|
6
7
|
right: 0;
|
|
7
|
-
background-color: rgba(0, 0, 0, 0.
|
|
8
|
-
backdrop-filter: blur(
|
|
8
|
+
background-color: rgba(0, 0, 0, 0.8);
|
|
9
|
+
backdrop-filter: blur(30px);
|
|
10
|
+
opacity: 0;
|
|
11
|
+
animation: xelis-xswd-relayer-appear .25s forwards;
|
|
12
|
+
user-select: none;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
@keyframes xelis-xswd-relayer-appear {
|
|
16
|
+
100% {
|
|
17
|
+
opacity: 1;
|
|
18
|
+
}
|
|
9
19
|
}
|
|
10
20
|
|
|
11
21
|
.xelis-xswd-relayer-content {
|
|
@@ -13,16 +23,51 @@
|
|
|
13
23
|
top: 50%;
|
|
14
24
|
left: 50%;
|
|
15
25
|
translate: -50% -50%;
|
|
16
|
-
background-color: aquamarine;
|
|
17
|
-
filter: drop-shadow(0px 0px 25px black);
|
|
18
26
|
}
|
|
19
27
|
|
|
20
|
-
.xelis-xswd-relayer-error {
|
|
28
|
+
.xelis-xswd-relayer-error {
|
|
29
|
+
background-color: #02ffcf;
|
|
30
|
+
padding: 15px;
|
|
31
|
+
border-radius: 10px;
|
|
32
|
+
animation: xelis-xswd-relayer-error-appear .5s forwards;
|
|
33
|
+
opacity: 0;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
@keyframes xelis-xswd-relayer-error-appear {
|
|
37
|
+
25% {
|
|
38
|
+
translate: -4px 0;
|
|
39
|
+
rotate: -3deg;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
50% {
|
|
43
|
+
translate: 4px 0;
|
|
44
|
+
rotate: 3deg;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
75% {
|
|
48
|
+
translate: -4px 0;
|
|
49
|
+
rotate: -3deg;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
100% {
|
|
53
|
+
opacity: 1;
|
|
54
|
+
translate: 0 0;
|
|
55
|
+
rotate: 0;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
|
|
60
|
+
.xelis-xswd-relayer-error-text {
|
|
61
|
+
background-color: rgba(31, 31, 31, 1);
|
|
62
|
+
border-radius: 5px;
|
|
63
|
+
padding: 5px 10px;
|
|
64
|
+
color: rgb(255, 63, 63);
|
|
65
|
+
}
|
|
21
66
|
|
|
22
67
|
.xelis-xswd-relayer-loading {
|
|
23
|
-
width:
|
|
24
|
-
height:
|
|
25
|
-
color:
|
|
68
|
+
width: 75px;
|
|
69
|
+
height: 75px;
|
|
70
|
+
color: #02ffcf;
|
|
26
71
|
animation: xelis-xswd-relayer-loading-animation .75s infinite;
|
|
27
72
|
}
|
|
28
73
|
|
|
@@ -32,6 +77,87 @@
|
|
|
32
77
|
}
|
|
33
78
|
}
|
|
34
79
|
|
|
35
|
-
.xelis-xswd-relayer-qrcode {
|
|
80
|
+
.xelis-xswd-relayer-qrcode {
|
|
81
|
+
background-color: rgba(2, 255, 207, 1);
|
|
82
|
+
padding: 30px 30px 50px 30px;
|
|
83
|
+
border-radius: 15px;
|
|
84
|
+
animation: xelis-xswd-relayer-qrcode-appear .25s forwards, xelis-xswd-relayer-qrcode-animation 2s infinite alternate;
|
|
85
|
+
translate: 0 -100%;
|
|
86
|
+
opacity: 0;
|
|
87
|
+
position: relative;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
@keyframes xelis-xswd-relayer-qrcode-appear {
|
|
91
|
+
100% {
|
|
92
|
+
translate: 0 0;
|
|
93
|
+
opacity: 1;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
@keyframes xelis-xswd-relayer-qrcode-animation {
|
|
98
|
+
0% {
|
|
99
|
+
background-color: rgba(2, 255, 207, 0.3);
|
|
100
|
+
filter: drop-shadow(0px 0px 100px rgba(2, 255, 209, 0.1));
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
100% {
|
|
104
|
+
background-color: rgba(2, 255, 207, 1);
|
|
105
|
+
filter: drop-shadow(0px 0px 200px rgba(2, 255, 209, 0.1));
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
.xelis-xswd-relayer-scan-logo {
|
|
110
|
+
position: absolute;
|
|
111
|
+
bottom: -30px;
|
|
112
|
+
left: 50%;
|
|
113
|
+
translate: -50% 0;
|
|
114
|
+
width: 25px;
|
|
115
|
+
height: 25px;
|
|
116
|
+
color: white;
|
|
117
|
+
background-color: black;
|
|
118
|
+
padding: 20px;
|
|
119
|
+
border-radius: 100%;
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
.xelis-xswd-relayer-logo-wrap {
|
|
123
|
+
position: absolute;
|
|
124
|
+
width: 100%;
|
|
125
|
+
height: 100%;
|
|
126
|
+
overflow: hidden;
|
|
127
|
+
top: 0;
|
|
128
|
+
left: 0;
|
|
129
|
+
border-radius: 15px;
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
.xelis-xswd-relayer-logo {
|
|
133
|
+
position: absolute;
|
|
134
|
+
width: 100%;
|
|
135
|
+
height: 100%;
|
|
136
|
+
top: 25%;
|
|
137
|
+
left: 5%;
|
|
138
|
+
scale: 1.8;
|
|
139
|
+
z-index: -1;
|
|
140
|
+
animation: xelis-xswd-relayer-logo-animation 2s infinite alternate;
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
@keyframes xelis-xswd-relayer-logo-animation {
|
|
144
|
+
0% {
|
|
145
|
+
color: rgba(0, 206, 168, 0);
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
100% {
|
|
149
|
+
color: rgba(0, 206, 168, 0.8);
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
|
|
154
|
+
.xelis-xswd-relayer-title {
|
|
155
|
+
font-size: 25px;
|
|
156
|
+
font-weight: bold;
|
|
157
|
+
margin-bottom: 10px;
|
|
158
|
+
color: black;
|
|
159
|
+
}
|
|
36
160
|
|
|
37
|
-
.xelis-xswd-relayer-qrcode canvas {
|
|
161
|
+
.xelis-xswd-relayer-qrcode canvas {
|
|
162
|
+
border-radius: 10px;
|
|
163
|
+
}
|
|
@@ -18,9 +18,9 @@ import { DaemonMethods } from '../daemon/websocket.js';
|
|
|
18
18
|
import { WalletMethods } from '../wallet/websocket.js';
|
|
19
19
|
var WS = /** @class */ (function (_super) {
|
|
20
20
|
__extends(WS, _super);
|
|
21
|
-
function WS() {
|
|
22
|
-
var _this = _super.call(this) || this;
|
|
23
|
-
_this.
|
|
21
|
+
function WS(endpoint) {
|
|
22
|
+
var _this = _super.call(this, endpoint) || this;
|
|
23
|
+
_this.callTimeout = 0; // xswd needs user input for confirmation - timeout should not be used
|
|
24
24
|
_this.daemon = new DaemonMethods(_this, "node.");
|
|
25
25
|
_this.wallet = new WalletMethods(_this, "wallet.");
|
|
26
26
|
return _this;
|