@xelis/sdk 0.6.1 → 0.8.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/create_esm_pkg.js +13 -0
- package/dist/cjs/config.js +38 -0
- package/dist/cjs/daemon/rpc.js +143 -0
- package/dist/cjs/daemon/types.js +74 -0
- package/dist/cjs/daemon/websocket.js +236 -0
- package/dist/cjs/lib/rpc.js +89 -0
- package/dist/cjs/lib/types.js +2 -0
- package/dist/cjs/lib/websocket.js +283 -0
- package/dist/cjs/react/daemon.js +176 -0
- package/dist/cjs/wallet/rpc.js +131 -0
- package/dist/cjs/wallet/types.js +29 -0
- package/dist/cjs/wallet/websocket.js +92 -0
- package/dist/cjs/xswd/types.js +9 -0
- package/dist/cjs/xswd/websocket.js +38 -0
- package/dist/esm/config.js +35 -0
- package/dist/esm/daemon/rpc.js +140 -0
- package/{daemon → dist/esm/daemon}/types.js +13 -3
- package/dist/esm/daemon/websocket.js +233 -0
- package/dist/esm/lib/rpc.js +86 -0
- package/dist/esm/lib/websocket.js +277 -0
- package/dist/esm/package.json +1 -0
- package/dist/esm/react/daemon.js +144 -0
- package/dist/esm/wallet/rpc.js +128 -0
- package/{wallet → dist/esm/wallet}/types.js +1 -0
- package/dist/esm/wallet/websocket.js +89 -0
- package/dist/esm/xswd/websocket.js +35 -0
- package/{daemon → dist/types/daemon}/rpc.d.ts +17 -15
- package/{daemon → dist/types/daemon}/types.d.ts +127 -47
- package/{daemon → dist/types/daemon}/websocket.d.ts +20 -16
- package/{wallet → dist/types/wallet}/rpc.d.ts +9 -5
- package/{wallet → dist/types/wallet}/types.d.ts +26 -0
- package/{wallet → dist/types/wallet}/websocket.d.ts +7 -5
- package/jest.config.js +6 -0
- package/package.json +12 -3
- package/tsconfig.cjs.json +7 -0
- package/tsconfig.esm.json +7 -0
- package/tsconfig.json +17 -0
- package/tsconfig.types.json +8 -0
- package/config.js +0 -25
- package/daemon/rpc.js +0 -113
- package/daemon/websocket.js +0 -159
- package/lib/rpc.js +0 -38
- package/lib/websocket.js +0 -202
- package/react/daemon.js +0 -82
- package/wallet/rpc.js +0 -55
- package/wallet/websocket.js +0 -60
- package/xswd/websocket.js +0 -16
- /package/{lib → dist/esm/lib}/types.js +0 -0
- /package/{xswd → dist/esm/xswd}/types.js +0 -0
- /package/{config.d.ts → dist/types/config.d.ts} +0 -0
- /package/{lib → dist/types/lib}/rpc.d.ts +0 -0
- /package/{lib → dist/types/lib}/types.d.ts +0 -0
- /package/{lib → dist/types/lib}/websocket.d.ts +0 -0
- /package/{react → dist/types/react}/daemon.d.ts +0 -0
- /package/{xswd → dist/types/xswd}/types.d.ts +0 -0
- /package/{xswd → dist/types/xswd}/websocket.d.ts +0 -0
|
@@ -0,0 +1,277 @@
|
|
|
1
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
2
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
3
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
4
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
5
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
6
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
7
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
|
+
});
|
|
9
|
+
};
|
|
10
|
+
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
11
|
+
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
|
|
12
|
+
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
13
|
+
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
14
|
+
function step(op) {
|
|
15
|
+
if (f) throw new TypeError("Generator is already executing.");
|
|
16
|
+
while (g && (g = 0, op[0] && (_ = 0)), _) try {
|
|
17
|
+
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
18
|
+
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
19
|
+
switch (op[0]) {
|
|
20
|
+
case 0: case 1: t = op; break;
|
|
21
|
+
case 4: _.label++; return { value: op[1], done: false };
|
|
22
|
+
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
23
|
+
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
24
|
+
default:
|
|
25
|
+
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
26
|
+
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
27
|
+
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
28
|
+
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
29
|
+
if (t[2]) _.ops.pop();
|
|
30
|
+
_.trys.pop(); continue;
|
|
31
|
+
}
|
|
32
|
+
op = body.call(thisArg, _);
|
|
33
|
+
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
34
|
+
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
35
|
+
}
|
|
36
|
+
};
|
|
37
|
+
import WebSocket from 'isomorphic-ws';
|
|
38
|
+
import to from 'await-to-js';
|
|
39
|
+
var WS = /** @class */ (function () {
|
|
40
|
+
function WS(options) {
|
|
41
|
+
this.connectionTries = 0;
|
|
42
|
+
this.methodIdIncrement = 0;
|
|
43
|
+
this.endpoint = "";
|
|
44
|
+
this.timeout = 15000; // default to 15s
|
|
45
|
+
this.events = {};
|
|
46
|
+
this.unsubscribeSuspense = 1000;
|
|
47
|
+
this.maxConnectionTries = 3;
|
|
48
|
+
this.reconnectOnConnectionLoss = true;
|
|
49
|
+
this.options = options;
|
|
50
|
+
}
|
|
51
|
+
WS.prototype.connect = function (endpoint) {
|
|
52
|
+
var _this = this;
|
|
53
|
+
// force disconnect if already connected
|
|
54
|
+
if (this.socket && this.socket.readyState === WebSocket.OPEN) {
|
|
55
|
+
this.socket.close();
|
|
56
|
+
}
|
|
57
|
+
this.events = {};
|
|
58
|
+
this.connectionTries = 0;
|
|
59
|
+
return new Promise(function (resolve, reject) {
|
|
60
|
+
_this.socket = new WebSocket(endpoint, _this.options);
|
|
61
|
+
_this.endpoint = endpoint;
|
|
62
|
+
_this.socket.addEventListener("open", function (event) {
|
|
63
|
+
resolve(event);
|
|
64
|
+
});
|
|
65
|
+
_this.socket.addEventListener("close", function (event) {
|
|
66
|
+
if (_this.reconnectOnConnectionLoss && !event.wasClean) {
|
|
67
|
+
_this.tryReconnect();
|
|
68
|
+
reject(new Error("Unhandled close. Reconnecting..."));
|
|
69
|
+
}
|
|
70
|
+
else {
|
|
71
|
+
reject(event);
|
|
72
|
+
}
|
|
73
|
+
});
|
|
74
|
+
_this.socket.addEventListener("error", function (err) {
|
|
75
|
+
reject(err);
|
|
76
|
+
});
|
|
77
|
+
});
|
|
78
|
+
};
|
|
79
|
+
WS.prototype.tryReconnect = function () {
|
|
80
|
+
var _this = this;
|
|
81
|
+
this.connectionTries++;
|
|
82
|
+
if (this.connectionTries > this.maxConnectionTries) {
|
|
83
|
+
return;
|
|
84
|
+
}
|
|
85
|
+
this.socket = new WebSocket(this.endpoint, this.options);
|
|
86
|
+
this.socket.addEventListener("open", function () {
|
|
87
|
+
_this.connectionTries = 0;
|
|
88
|
+
});
|
|
89
|
+
this.socket.addEventListener("close", function (event) {
|
|
90
|
+
_this.tryReconnect();
|
|
91
|
+
});
|
|
92
|
+
};
|
|
93
|
+
WS.prototype.close = function () {
|
|
94
|
+
if (!this.socket)
|
|
95
|
+
return;
|
|
96
|
+
this.socket.close();
|
|
97
|
+
};
|
|
98
|
+
WS.prototype.clearEvent = function (event) {
|
|
99
|
+
var _this = this;
|
|
100
|
+
this.events[event].listeners.forEach(function (listener) {
|
|
101
|
+
_this.socket && _this.socket.removeEventListener("message", listener);
|
|
102
|
+
});
|
|
103
|
+
Reflect.deleteProperty(this.events, event);
|
|
104
|
+
};
|
|
105
|
+
WS.prototype.closeAllListens = function (event) {
|
|
106
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
107
|
+
var _a, err, _;
|
|
108
|
+
return __generator(this, function (_b) {
|
|
109
|
+
switch (_b.label) {
|
|
110
|
+
case 0:
|
|
111
|
+
if (!this.events[event]) return [3 /*break*/, 2];
|
|
112
|
+
return [4 /*yield*/, to(this.call("unsubscribe", { notify: event }))];
|
|
113
|
+
case 1:
|
|
114
|
+
_a = _b.sent(), err = _a[0], _ = _a[1];
|
|
115
|
+
if (err)
|
|
116
|
+
return [2 /*return*/, Promise.reject(err)];
|
|
117
|
+
this.clearEvent(event);
|
|
118
|
+
_b.label = 2;
|
|
119
|
+
case 2: return [2 /*return*/, Promise.resolve()];
|
|
120
|
+
}
|
|
121
|
+
});
|
|
122
|
+
});
|
|
123
|
+
};
|
|
124
|
+
WS.prototype.listenEvent = function (event, onData) {
|
|
125
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
126
|
+
var onMessage, unsubscribeTimeoutId, _a, err, res, closeListen;
|
|
127
|
+
var _this = this;
|
|
128
|
+
return __generator(this, function (_b) {
|
|
129
|
+
switch (_b.label) {
|
|
130
|
+
case 0:
|
|
131
|
+
onMessage = function (msgEvent) {
|
|
132
|
+
if (_this.events[event]) {
|
|
133
|
+
var id = _this.events[event].id;
|
|
134
|
+
if (typeof msgEvent.data === "string") {
|
|
135
|
+
try {
|
|
136
|
+
var data = JSON.parse(msgEvent.data);
|
|
137
|
+
if (data.id === id) {
|
|
138
|
+
if (data.error) {
|
|
139
|
+
onData(msgEvent, undefined, new Error(data.error.message));
|
|
140
|
+
}
|
|
141
|
+
else {
|
|
142
|
+
onData(msgEvent, data.result, undefined);
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
catch (_a) {
|
|
147
|
+
// can't parse json -- do nothing
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
};
|
|
152
|
+
if (!this.events[event]) return [3 /*break*/, 1];
|
|
153
|
+
unsubscribeTimeoutId = this.events[event].unsubscribeTimeoutId;
|
|
154
|
+
if (unsubscribeTimeoutId) {
|
|
155
|
+
// clear timeout to unsubscribe
|
|
156
|
+
// because we got a new registered event and want to cancel the pending unsubscribe grace period
|
|
157
|
+
clearTimeout(unsubscribeTimeoutId);
|
|
158
|
+
}
|
|
159
|
+
this.events[event].listeners.push(onMessage);
|
|
160
|
+
return [3 /*break*/, 3];
|
|
161
|
+
case 1:
|
|
162
|
+
// important if multiple listenEvent are called without await at least we store listener before getting id
|
|
163
|
+
this.events[event] = { listeners: [onMessage] };
|
|
164
|
+
return [4 /*yield*/, to(this.call("subscribe", { notify: event }))];
|
|
165
|
+
case 2:
|
|
166
|
+
_a = _b.sent(), err = _a[0], res = _a[1];
|
|
167
|
+
if (err) {
|
|
168
|
+
this.clearEvent(event);
|
|
169
|
+
return [2 /*return*/, Promise.reject(err)];
|
|
170
|
+
}
|
|
171
|
+
this.events[event].id = res.id;
|
|
172
|
+
_b.label = 3;
|
|
173
|
+
case 3:
|
|
174
|
+
this.socket && this.socket.addEventListener("message", onMessage);
|
|
175
|
+
closeListen = function () {
|
|
176
|
+
var eventData = _this.events[event];
|
|
177
|
+
if (eventData) {
|
|
178
|
+
var listeners = eventData.listeners;
|
|
179
|
+
for (var i = 0; i < listeners.length; i++) {
|
|
180
|
+
if (listeners[i] === onMessage) {
|
|
181
|
+
listeners.splice(i, 1);
|
|
182
|
+
break;
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
// no more listener so we unsubscribe from daemon websocket if socket still open
|
|
186
|
+
if (listeners.length === 0) {
|
|
187
|
+
if (_this.socket && _this.socket.readyState === WebSocket.OPEN) {
|
|
188
|
+
// we use a grace period to unsubscribe (mostly because of react useEffect and avoid unecessary subscribe)
|
|
189
|
+
_this.events[event].unsubscribeTimeoutId = setTimeout(function () { return __awaiter(_this, void 0, void 0, function () {
|
|
190
|
+
return __generator(this, function (_a) {
|
|
191
|
+
this.call("unsubscribe", { notify: event });
|
|
192
|
+
Reflect.deleteProperty(this.events, event);
|
|
193
|
+
return [2 /*return*/];
|
|
194
|
+
});
|
|
195
|
+
}); }, _this.unsubscribeSuspense);
|
|
196
|
+
}
|
|
197
|
+
else {
|
|
198
|
+
// socket is closed so we don't send unsubscribe and no grace period delete right away
|
|
199
|
+
Reflect.deleteProperty(_this.events, event);
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
_this.socket && _this.socket.removeEventListener("message", onMessage);
|
|
204
|
+
return Promise.resolve();
|
|
205
|
+
};
|
|
206
|
+
return [2 /*return*/, Promise.resolve(closeListen)];
|
|
207
|
+
}
|
|
208
|
+
});
|
|
209
|
+
});
|
|
210
|
+
};
|
|
211
|
+
WS.prototype.call = function (method, params, overwriteData) {
|
|
212
|
+
var _this = this;
|
|
213
|
+
return new Promise(function (resolve, reject) {
|
|
214
|
+
if (!_this.socket)
|
|
215
|
+
return reject(new Error("Socket is not initialized."));
|
|
216
|
+
if (_this.socket.readyState !== WebSocket.OPEN)
|
|
217
|
+
return reject(new Error("Can't send msg. Socket is not opened."));
|
|
218
|
+
var requestMethod = _this.createRequestMethod(method, params);
|
|
219
|
+
// for XSWD we want to send the application data without request method wrapping
|
|
220
|
+
if (overwriteData) {
|
|
221
|
+
requestMethod.id = null;
|
|
222
|
+
requestMethod.data = overwriteData;
|
|
223
|
+
}
|
|
224
|
+
var timeoutId = null;
|
|
225
|
+
var onMessage = function (msgEvent) {
|
|
226
|
+
if (typeof msgEvent.data === "string") {
|
|
227
|
+
var data = JSON.parse(msgEvent.data);
|
|
228
|
+
if (data.id === requestMethod.id) {
|
|
229
|
+
clearTimeout(timeoutId);
|
|
230
|
+
_this.socket && _this.socket.removeEventListener("message", onMessage);
|
|
231
|
+
if (data.error)
|
|
232
|
+
return reject(new Error(data.error.message));
|
|
233
|
+
else
|
|
234
|
+
resolve(data);
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
};
|
|
238
|
+
// make sure you listen before sending data
|
|
239
|
+
_this.socket && _this.socket.addEventListener("message", onMessage); // we don't use { once: true } option because of timeout feature
|
|
240
|
+
if (_this.timeout > 0) {
|
|
241
|
+
timeoutId = setTimeout(function () {
|
|
242
|
+
_this.socket && _this.socket.removeEventListener("message", onMessage);
|
|
243
|
+
reject(new Error("timeout"));
|
|
244
|
+
}, _this.timeout);
|
|
245
|
+
}
|
|
246
|
+
if (_this.socket && _this.socket.readyState === WebSocket.OPEN) {
|
|
247
|
+
_this.socket.send(requestMethod.data);
|
|
248
|
+
}
|
|
249
|
+
});
|
|
250
|
+
};
|
|
251
|
+
WS.prototype.dataCall = function (method, params) {
|
|
252
|
+
var _this = this;
|
|
253
|
+
return new Promise(function (resolve, reject) { return __awaiter(_this, void 0, void 0, function () {
|
|
254
|
+
var _a, err, res;
|
|
255
|
+
return __generator(this, function (_b) {
|
|
256
|
+
switch (_b.label) {
|
|
257
|
+
case 0: return [4 /*yield*/, to(this.call(method, params))];
|
|
258
|
+
case 1:
|
|
259
|
+
_a = _b.sent(), err = _a[0], res = _a[1];
|
|
260
|
+
if (err)
|
|
261
|
+
return [2 /*return*/, reject(err)];
|
|
262
|
+
return [2 /*return*/, resolve(res.result)];
|
|
263
|
+
}
|
|
264
|
+
});
|
|
265
|
+
}); });
|
|
266
|
+
};
|
|
267
|
+
WS.prototype.createRequestMethod = function (method, params) {
|
|
268
|
+
var id = this.methodIdIncrement++;
|
|
269
|
+
var request = { id: id, jsonrpc: "2.0", method: method };
|
|
270
|
+
if (params)
|
|
271
|
+
request.params = params;
|
|
272
|
+
var data = JSON.stringify(request);
|
|
273
|
+
return { data: data, id: id };
|
|
274
|
+
};
|
|
275
|
+
return WS;
|
|
276
|
+
}());
|
|
277
|
+
export { WS };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"type":"module"}
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
2
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
3
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
4
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
5
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
6
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
7
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
|
+
});
|
|
9
|
+
};
|
|
10
|
+
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
11
|
+
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
|
|
12
|
+
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
13
|
+
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
14
|
+
function step(op) {
|
|
15
|
+
if (f) throw new TypeError("Generator is already executing.");
|
|
16
|
+
while (g && (g = 0, op[0] && (_ = 0)), _) try {
|
|
17
|
+
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
18
|
+
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
19
|
+
switch (op[0]) {
|
|
20
|
+
case 0: case 1: t = op; break;
|
|
21
|
+
case 4: _.label++; return { value: op[1], done: false };
|
|
22
|
+
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
23
|
+
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
24
|
+
default:
|
|
25
|
+
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
26
|
+
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
27
|
+
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
28
|
+
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
29
|
+
if (t[2]) _.ops.pop();
|
|
30
|
+
_.trys.pop(); continue;
|
|
31
|
+
}
|
|
32
|
+
op = body.call(thisArg, _);
|
|
33
|
+
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
34
|
+
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
35
|
+
}
|
|
36
|
+
};
|
|
37
|
+
var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
|
|
38
|
+
if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
|
|
39
|
+
if (ar || !(i in from)) {
|
|
40
|
+
if (!ar) ar = Array.prototype.slice.call(from, 0, i);
|
|
41
|
+
ar[i] = from[i];
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
return to.concat(ar || Array.prototype.slice.call(from));
|
|
45
|
+
};
|
|
46
|
+
import React, { createContext, useContext, useEffect, useState } from 'react';
|
|
47
|
+
import to from 'await-to-js';
|
|
48
|
+
import DaemonWS from '../daemon/websocket';
|
|
49
|
+
export var INITIATING = -1;
|
|
50
|
+
var daemon = new DaemonWS();
|
|
51
|
+
var Context = createContext({
|
|
52
|
+
err: undefined,
|
|
53
|
+
daemon: daemon,
|
|
54
|
+
readyState: INITIATING
|
|
55
|
+
});
|
|
56
|
+
export var NodeSocketProvider = function (props) {
|
|
57
|
+
var children = props.children, endpoint = props.endpoint, timeout = props.timeout;
|
|
58
|
+
var _a = useState(INITIATING), readyState = _a[0], setReadyState = _a[1];
|
|
59
|
+
var _b = useState(), err = _b[0], setErr = _b[1];
|
|
60
|
+
useEffect(function () {
|
|
61
|
+
var connect = function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
62
|
+
var _a, err, _;
|
|
63
|
+
return __generator(this, function (_b) {
|
|
64
|
+
switch (_b.label) {
|
|
65
|
+
case 0:
|
|
66
|
+
setErr(undefined);
|
|
67
|
+
return [4 /*yield*/, to(daemon.connect(endpoint))];
|
|
68
|
+
case 1:
|
|
69
|
+
_a = _b.sent(), err = _a[0], _ = _a[1];
|
|
70
|
+
if (err)
|
|
71
|
+
setErr(err);
|
|
72
|
+
return [2 /*return*/];
|
|
73
|
+
}
|
|
74
|
+
});
|
|
75
|
+
}); };
|
|
76
|
+
connect();
|
|
77
|
+
}, [endpoint]);
|
|
78
|
+
useEffect(function () {
|
|
79
|
+
if (!timeout)
|
|
80
|
+
return;
|
|
81
|
+
daemon.timeout = timeout;
|
|
82
|
+
}, [timeout]);
|
|
83
|
+
useEffect(function () {
|
|
84
|
+
if (!daemon.socket)
|
|
85
|
+
return;
|
|
86
|
+
setReadyState(daemon.socket.readyState);
|
|
87
|
+
var onOpen = function () {
|
|
88
|
+
if (!daemon.socket)
|
|
89
|
+
return;
|
|
90
|
+
setReadyState(daemon.socket.readyState);
|
|
91
|
+
setErr(undefined);
|
|
92
|
+
};
|
|
93
|
+
var onClose = function (event) {
|
|
94
|
+
if (!daemon.socket)
|
|
95
|
+
return;
|
|
96
|
+
setReadyState(daemon.socket.readyState);
|
|
97
|
+
setErr(new Error(event.reason));
|
|
98
|
+
};
|
|
99
|
+
var onError = function (err) {
|
|
100
|
+
if (!daemon.socket)
|
|
101
|
+
return;
|
|
102
|
+
setReadyState(daemon.socket.readyState);
|
|
103
|
+
setErr(new Error(err.message));
|
|
104
|
+
};
|
|
105
|
+
daemon.socket.addEventListener("open", onOpen);
|
|
106
|
+
daemon.socket.addEventListener("close", onClose);
|
|
107
|
+
daemon.socket.addEventListener("error", onError);
|
|
108
|
+
return function () {
|
|
109
|
+
if (!daemon.socket)
|
|
110
|
+
return;
|
|
111
|
+
daemon.socket.removeEventListener("open", onOpen);
|
|
112
|
+
daemon.socket.removeEventListener("close", onClose);
|
|
113
|
+
daemon.socket.removeEventListener("error", onError);
|
|
114
|
+
};
|
|
115
|
+
}, [daemon.socket]);
|
|
116
|
+
return React.createElement(Context.Provider, { value: { daemon: daemon, err: err, readyState: readyState } }, children);
|
|
117
|
+
};
|
|
118
|
+
export var useNodeSocketSubscribe = function (_a, dependencies) {
|
|
119
|
+
var event = _a.event, onLoad = _a.onLoad, onData = _a.onData;
|
|
120
|
+
var nodeSocket = useNodeSocket();
|
|
121
|
+
useEffect(function () {
|
|
122
|
+
if (nodeSocket.readyState !== WebSocket.OPEN)
|
|
123
|
+
return;
|
|
124
|
+
if (typeof onLoad === "function")
|
|
125
|
+
onLoad();
|
|
126
|
+
var closeEvent;
|
|
127
|
+
var listen = function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
128
|
+
return __generator(this, function (_a) {
|
|
129
|
+
switch (_a.label) {
|
|
130
|
+
case 0: return [4 /*yield*/, nodeSocket.daemon.listenEvent(event, onData)];
|
|
131
|
+
case 1:
|
|
132
|
+
closeEvent = _a.sent();
|
|
133
|
+
return [2 /*return*/];
|
|
134
|
+
}
|
|
135
|
+
});
|
|
136
|
+
}); };
|
|
137
|
+
listen();
|
|
138
|
+
return function () {
|
|
139
|
+
closeEvent && closeEvent();
|
|
140
|
+
};
|
|
141
|
+
}, __spreadArray([nodeSocket], dependencies, true));
|
|
142
|
+
};
|
|
143
|
+
export var useNodeSocket = function () { return useContext(Context); };
|
|
144
|
+
export default useNodeSocket;
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
var __extends = (this && this.__extends) || (function () {
|
|
2
|
+
var extendStatics = function (d, b) {
|
|
3
|
+
extendStatics = Object.setPrototypeOf ||
|
|
4
|
+
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
|
|
5
|
+
function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
|
|
6
|
+
return extendStatics(d, b);
|
|
7
|
+
};
|
|
8
|
+
return function (d, b) {
|
|
9
|
+
if (typeof b !== "function" && b !== null)
|
|
10
|
+
throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
|
|
11
|
+
extendStatics(d, b);
|
|
12
|
+
function __() { this.constructor = d; }
|
|
13
|
+
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
|
|
14
|
+
};
|
|
15
|
+
})();
|
|
16
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
17
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
18
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
19
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
20
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
21
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
22
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
23
|
+
});
|
|
24
|
+
};
|
|
25
|
+
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
26
|
+
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
|
|
27
|
+
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
28
|
+
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
29
|
+
function step(op) {
|
|
30
|
+
if (f) throw new TypeError("Generator is already executing.");
|
|
31
|
+
while (g && (g = 0, op[0] && (_ = 0)), _) try {
|
|
32
|
+
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
33
|
+
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
34
|
+
switch (op[0]) {
|
|
35
|
+
case 0: case 1: t = op; break;
|
|
36
|
+
case 4: _.label++; return { value: op[1], done: false };
|
|
37
|
+
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
38
|
+
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
39
|
+
default:
|
|
40
|
+
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
41
|
+
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
42
|
+
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
43
|
+
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
44
|
+
if (t[2]) _.ops.pop();
|
|
45
|
+
_.trys.pop(); continue;
|
|
46
|
+
}
|
|
47
|
+
op = body.call(thisArg, _);
|
|
48
|
+
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
49
|
+
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
50
|
+
}
|
|
51
|
+
};
|
|
52
|
+
import { Base64 } from 'js-base64';
|
|
53
|
+
import { RPCMethod } from './types';
|
|
54
|
+
import { RPC as BaseRPC } from '../lib/rpc';
|
|
55
|
+
var RPC = /** @class */ (function (_super) {
|
|
56
|
+
__extends(RPC, _super);
|
|
57
|
+
function RPC(endpoint, username, password) {
|
|
58
|
+
var _this = _super.call(this, endpoint) || this;
|
|
59
|
+
var authValue = Base64.encode("".concat(username, ":").concat(password));
|
|
60
|
+
_this.auth = "Basic ".concat(authValue);
|
|
61
|
+
return _this;
|
|
62
|
+
}
|
|
63
|
+
RPC.prototype.post = function (method, params) {
|
|
64
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
65
|
+
var headers;
|
|
66
|
+
return __generator(this, function (_a) {
|
|
67
|
+
headers = new Headers();
|
|
68
|
+
headers.set("Authorization", this.auth);
|
|
69
|
+
return [2 /*return*/, _super.prototype.post.call(this, method, params, headers)];
|
|
70
|
+
});
|
|
71
|
+
});
|
|
72
|
+
};
|
|
73
|
+
RPC.prototype.getVersion = function () {
|
|
74
|
+
return this.post(RPCMethod.GetVersion);
|
|
75
|
+
};
|
|
76
|
+
RPC.prototype.getNetwork = function () {
|
|
77
|
+
return this.post(RPCMethod.GetNetwork);
|
|
78
|
+
};
|
|
79
|
+
RPC.prototype.getNonce = function () {
|
|
80
|
+
return this.post(RPCMethod.GetNonce);
|
|
81
|
+
};
|
|
82
|
+
RPC.prototype.getTopoheight = function () {
|
|
83
|
+
return this.post(RPCMethod.GetTopoheight);
|
|
84
|
+
};
|
|
85
|
+
RPC.prototype.getAddress = function (params) {
|
|
86
|
+
if (params === void 0) { params = {}; }
|
|
87
|
+
return this.post(RPCMethod.GetAddress, params);
|
|
88
|
+
};
|
|
89
|
+
RPC.prototype.splitAddress = function (params) {
|
|
90
|
+
return this.post(RPCMethod.SplitAddress, params);
|
|
91
|
+
};
|
|
92
|
+
RPC.prototype.rescan = function () {
|
|
93
|
+
return this.post(RPCMethod.Rescan);
|
|
94
|
+
};
|
|
95
|
+
RPC.prototype.getBalance = function (asset) {
|
|
96
|
+
return this.post(RPCMethod.GetBalance, { asset: asset });
|
|
97
|
+
};
|
|
98
|
+
RPC.prototype.hasBalance = function (asset) {
|
|
99
|
+
return this.post(RPCMethod.HasBalance, { asset: asset });
|
|
100
|
+
};
|
|
101
|
+
RPC.prototype.getTrackedAssets = function () {
|
|
102
|
+
return this.post(RPCMethod.GetTrackedAssets);
|
|
103
|
+
};
|
|
104
|
+
RPC.prototype.getAssetPrecision = function (params) {
|
|
105
|
+
return this.post(RPCMethod.GetAssetPrecision, params);
|
|
106
|
+
};
|
|
107
|
+
RPC.prototype.getTransaction = function (hash) {
|
|
108
|
+
return this.post(RPCMethod.GetTransaction, { hash: hash });
|
|
109
|
+
};
|
|
110
|
+
RPC.prototype.buildTransaction = function (params) {
|
|
111
|
+
return this.post(RPCMethod.BuildTransaction, params);
|
|
112
|
+
};
|
|
113
|
+
RPC.prototype.listTransactions = function (params) {
|
|
114
|
+
return this.post(RPCMethod.ListTransactions, params);
|
|
115
|
+
};
|
|
116
|
+
RPC.prototype.isOnline = function () {
|
|
117
|
+
return this.post(RPCMethod.IsOnline);
|
|
118
|
+
};
|
|
119
|
+
RPC.prototype.signData = function (data) {
|
|
120
|
+
return this.post(RPCMethod.SignData, data);
|
|
121
|
+
};
|
|
122
|
+
RPC.prototype.estimateFees = function (txData) {
|
|
123
|
+
return this.post(RPCMethod.EstimateFees, { tx_type: txData });
|
|
124
|
+
};
|
|
125
|
+
return RPC;
|
|
126
|
+
}(BaseRPC));
|
|
127
|
+
export { RPC };
|
|
128
|
+
export default RPC;
|
|
@@ -8,6 +8,7 @@ export var RPCMethod;
|
|
|
8
8
|
RPCMethod["SplitAddress"] = "split_address";
|
|
9
9
|
RPCMethod["Rescan"] = "rescan";
|
|
10
10
|
RPCMethod["GetBalance"] = "get_balance";
|
|
11
|
+
RPCMethod["HasBalance"] = "has_balance";
|
|
11
12
|
RPCMethod["GetTrackedAssets"] = "get_tracked_assets";
|
|
12
13
|
RPCMethod["GetAssetPrecision"] = "get_asset_precision";
|
|
13
14
|
RPCMethod["GetTransaction"] = "get_transaction";
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
var __extends = (this && this.__extends) || (function () {
|
|
2
|
+
var extendStatics = function (d, b) {
|
|
3
|
+
extendStatics = Object.setPrototypeOf ||
|
|
4
|
+
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
|
|
5
|
+
function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
|
|
6
|
+
return extendStatics(d, b);
|
|
7
|
+
};
|
|
8
|
+
return function (d, b) {
|
|
9
|
+
if (typeof b !== "function" && b !== null)
|
|
10
|
+
throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
|
|
11
|
+
extendStatics(d, b);
|
|
12
|
+
function __() { this.constructor = d; }
|
|
13
|
+
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
|
|
14
|
+
};
|
|
15
|
+
})();
|
|
16
|
+
import { WS as BaseWS } from '../lib/websocket';
|
|
17
|
+
import { RPCMethod } from './types';
|
|
18
|
+
var WalletMethods = /** @class */ (function () {
|
|
19
|
+
function WalletMethods(ws, prefix) {
|
|
20
|
+
if (prefix === void 0) { prefix = ""; }
|
|
21
|
+
this.ws = ws;
|
|
22
|
+
this.prefix = prefix;
|
|
23
|
+
}
|
|
24
|
+
WalletMethods.prototype.dataCall = function (method, params) {
|
|
25
|
+
return this.ws.dataCall(this.prefix + method, params);
|
|
26
|
+
};
|
|
27
|
+
WalletMethods.prototype.getVersion = function () {
|
|
28
|
+
return this.dataCall(RPCMethod.GetVersion);
|
|
29
|
+
};
|
|
30
|
+
WalletMethods.prototype.getNetwork = function () {
|
|
31
|
+
return this.dataCall(RPCMethod.GetNetwork);
|
|
32
|
+
};
|
|
33
|
+
WalletMethods.prototype.getNonce = function () {
|
|
34
|
+
return this.dataCall(RPCMethod.GetNonce);
|
|
35
|
+
};
|
|
36
|
+
WalletMethods.prototype.getTopoheight = function () {
|
|
37
|
+
return this.dataCall(RPCMethod.GetTopoheight);
|
|
38
|
+
};
|
|
39
|
+
WalletMethods.prototype.getAddress = function (params) {
|
|
40
|
+
if (params === void 0) { params = {}; }
|
|
41
|
+
return this.dataCall(RPCMethod.GetAddress, params);
|
|
42
|
+
};
|
|
43
|
+
WalletMethods.prototype.splitAddress = function (params) {
|
|
44
|
+
return this.dataCall(RPCMethod.SplitAddress, params);
|
|
45
|
+
};
|
|
46
|
+
WalletMethods.prototype.rescan = function () {
|
|
47
|
+
return this.dataCall(RPCMethod.Rescan);
|
|
48
|
+
};
|
|
49
|
+
WalletMethods.prototype.getBalance = function (asset) {
|
|
50
|
+
return this.dataCall(RPCMethod.GetBalance, { asset: asset });
|
|
51
|
+
};
|
|
52
|
+
WalletMethods.prototype.getTrackedAssets = function () {
|
|
53
|
+
return this.dataCall(RPCMethod.GetTrackedAssets);
|
|
54
|
+
};
|
|
55
|
+
WalletMethods.prototype.getAssetPrecision = function (params) {
|
|
56
|
+
return this.dataCall(RPCMethod.GetAssetPrecision, params);
|
|
57
|
+
};
|
|
58
|
+
WalletMethods.prototype.getTransaction = function (hash) {
|
|
59
|
+
return this.dataCall(RPCMethod.GetTransaction, { hash: hash });
|
|
60
|
+
};
|
|
61
|
+
WalletMethods.prototype.buildTransaction = function (params) {
|
|
62
|
+
return this.dataCall(RPCMethod.BuildTransaction, params);
|
|
63
|
+
};
|
|
64
|
+
WalletMethods.prototype.listTransactions = function (params) {
|
|
65
|
+
return this.dataCall(RPCMethod.GetTransaction, params);
|
|
66
|
+
};
|
|
67
|
+
WalletMethods.prototype.isOnline = function () {
|
|
68
|
+
return this.dataCall(RPCMethod.IsOnline);
|
|
69
|
+
};
|
|
70
|
+
WalletMethods.prototype.signData = function (data) {
|
|
71
|
+
return this.dataCall(RPCMethod.SignData, data);
|
|
72
|
+
};
|
|
73
|
+
WalletMethods.prototype.estimateFees = function (txData) {
|
|
74
|
+
return this.dataCall(RPCMethod.EstimateFees, { tx_type: txData });
|
|
75
|
+
};
|
|
76
|
+
return WalletMethods;
|
|
77
|
+
}());
|
|
78
|
+
export { WalletMethods };
|
|
79
|
+
var WS = /** @class */ (function (_super) {
|
|
80
|
+
__extends(WS, _super);
|
|
81
|
+
function WS(username, password) {
|
|
82
|
+
var _this = _super.call(this, { auth: "".concat(username, ":").concat(password) }) || this;
|
|
83
|
+
_this.methods = new WalletMethods(_this);
|
|
84
|
+
return _this;
|
|
85
|
+
}
|
|
86
|
+
return WS;
|
|
87
|
+
}(BaseWS));
|
|
88
|
+
export { WS };
|
|
89
|
+
export default WS;
|