@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
|
@@ -27,65 +27,11 @@ var DaemonMethods = /** @class */ (function () {
|
|
|
27
27
|
DaemonMethods.prototype.dataCall = function (method, params) {
|
|
28
28
|
return this.ws.dataCall(this.prefix + method, params);
|
|
29
29
|
};
|
|
30
|
-
DaemonMethods.prototype.
|
|
31
|
-
|
|
30
|
+
DaemonMethods.prototype.closeListener = function (event, listener) {
|
|
31
|
+
this.ws.closeListener(event, listener);
|
|
32
32
|
};
|
|
33
|
-
DaemonMethods.prototype.
|
|
34
|
-
|
|
35
|
-
};
|
|
36
|
-
DaemonMethods.prototype.onBlockOrphaned = function (onData) {
|
|
37
|
-
return this.ws.listenEvent(this.prefix + types_1.RPCEvent.BlockOrphaned, onData);
|
|
38
|
-
};
|
|
39
|
-
DaemonMethods.prototype.onStableHeightChanged = function (onData) {
|
|
40
|
-
return this.ws.listenEvent(this.prefix + types_1.RPCEvent.StableHeightChanged, onData);
|
|
41
|
-
};
|
|
42
|
-
DaemonMethods.prototype.onStableTopoHeightChanged = function (onData) {
|
|
43
|
-
return this.ws.listenEvent(this.prefix + types_1.RPCEvent.StableTopoHeightChanged, onData);
|
|
44
|
-
};
|
|
45
|
-
DaemonMethods.prototype.onTransactionOrphaned = function (onData) {
|
|
46
|
-
return this.ws.listenEvent(this.prefix + types_1.RPCEvent.TransactionOrphaned, onData);
|
|
47
|
-
};
|
|
48
|
-
DaemonMethods.prototype.onTransactionAddedInMempool = function (onData) {
|
|
49
|
-
return this.ws.listenEvent(this.prefix + types_1.RPCEvent.TransactionAddedInMempool, onData);
|
|
50
|
-
};
|
|
51
|
-
DaemonMethods.prototype.onTransactionExecuted = function (onData) {
|
|
52
|
-
return this.ws.listenEvent(this.prefix + types_1.RPCEvent.TransactionExecuted, onData);
|
|
53
|
-
};
|
|
54
|
-
DaemonMethods.prototype.onInvokeContract = function (contract, onData) {
|
|
55
|
-
var _a;
|
|
56
|
-
return this.ws.listenEvent((_a = {}, _a[this.prefix + types_1.RPCEvent.InvokeContract] = { contract: contract }, _a), onData);
|
|
57
|
-
};
|
|
58
|
-
DaemonMethods.prototype.onContractTransfer = function (address, onData) {
|
|
59
|
-
var _a;
|
|
60
|
-
return this.ws.listenEvent((_a = {}, _a[this.prefix + types_1.RPCEvent.ContractTransfer] = { address: address }, _a), onData);
|
|
61
|
-
};
|
|
62
|
-
DaemonMethods.prototype.onContractEvent = function (contract, id, onData) {
|
|
63
|
-
var _a;
|
|
64
|
-
return this.ws.listenEvent((_a = {}, _a[this.prefix + types_1.RPCEvent.ContractEvent] = { contract: contract, id: id }, _a), onData);
|
|
65
|
-
};
|
|
66
|
-
DaemonMethods.prototype.onDeployContract = function (onData) {
|
|
67
|
-
return this.ws.listenEvent(this.prefix + types_1.RPCEvent.DeployContract, onData);
|
|
68
|
-
};
|
|
69
|
-
DaemonMethods.prototype.onNewAsset = function (onData) {
|
|
70
|
-
return this.ws.listenEvent(this.prefix + types_1.RPCEvent.NewAsset, onData);
|
|
71
|
-
};
|
|
72
|
-
DaemonMethods.prototype.onPeerConnected = function (onData) {
|
|
73
|
-
return this.ws.listenEvent(this.prefix + types_1.RPCEvent.PeerConnected, onData);
|
|
74
|
-
};
|
|
75
|
-
DaemonMethods.prototype.onPeerDisconnected = function (onData) {
|
|
76
|
-
return this.ws.listenEvent(this.prefix + types_1.RPCEvent.PeerDisconnected, onData);
|
|
77
|
-
};
|
|
78
|
-
DaemonMethods.prototype.onPeerStateUpdated = function (onData) {
|
|
79
|
-
return this.ws.listenEvent(this.prefix + types_1.RPCEvent.PeerStateUpdated, onData);
|
|
80
|
-
};
|
|
81
|
-
DaemonMethods.prototype.onPeerPeerListUpdated = function (onData) {
|
|
82
|
-
return this.ws.listenEvent(this.prefix + types_1.RPCEvent.PeerPeerListUpdated, onData);
|
|
83
|
-
};
|
|
84
|
-
DaemonMethods.prototype.onPeerPeerDisconnected = function (onData) {
|
|
85
|
-
return this.ws.listenEvent(this.prefix + types_1.RPCEvent.PeerPeerDisconnected, onData);
|
|
86
|
-
};
|
|
87
|
-
DaemonMethods.prototype.onNewBlockTemplate = function (onData) {
|
|
88
|
-
return this.ws.listenEvent(this.prefix + types_1.RPCEvent.NewBlockTemplate, onData);
|
|
33
|
+
DaemonMethods.prototype.listen = function (event, listener) {
|
|
34
|
+
this.ws.listen(this.prefix + event, listener);
|
|
89
35
|
};
|
|
90
36
|
DaemonMethods.prototype.getVersion = function () {
|
|
91
37
|
return this.dataCall(types_1.RPCMethod.GetVersion);
|
|
@@ -296,8 +242,8 @@ var DaemonMethods = /** @class */ (function () {
|
|
|
296
242
|
exports.DaemonMethods = DaemonMethods;
|
|
297
243
|
var WS = /** @class */ (function (_super) {
|
|
298
244
|
__extends(WS, _super);
|
|
299
|
-
function WS() {
|
|
300
|
-
var _this = _super.call(this) || this;
|
|
245
|
+
function WS(endpoint) {
|
|
246
|
+
var _this = _super.call(this, endpoint) || this;
|
|
301
247
|
_this.methods = new DaemonMethods(_this);
|
|
302
248
|
return _this;
|
|
303
249
|
}
|
package/dist/cjs/react/daemon.js
CHANGED
|
@@ -22,42 +22,6 @@ var __importStar = (this && this.__importStar) || function (mod) {
|
|
|
22
22
|
__setModuleDefault(result, mod);
|
|
23
23
|
return result;
|
|
24
24
|
};
|
|
25
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
26
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
27
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
28
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
29
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
30
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
31
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
32
|
-
});
|
|
33
|
-
};
|
|
34
|
-
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
35
|
-
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
|
|
36
|
-
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
37
|
-
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
38
|
-
function step(op) {
|
|
39
|
-
if (f) throw new TypeError("Generator is already executing.");
|
|
40
|
-
while (g && (g = 0, op[0] && (_ = 0)), _) try {
|
|
41
|
-
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;
|
|
42
|
-
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
43
|
-
switch (op[0]) {
|
|
44
|
-
case 0: case 1: t = op; break;
|
|
45
|
-
case 4: _.label++; return { value: op[1], done: false };
|
|
46
|
-
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
47
|
-
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
48
|
-
default:
|
|
49
|
-
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
50
|
-
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
51
|
-
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
52
|
-
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
53
|
-
if (t[2]) _.ops.pop();
|
|
54
|
-
_.trys.pop(); continue;
|
|
55
|
-
}
|
|
56
|
-
op = body.call(thisArg, _);
|
|
57
|
-
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
58
|
-
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
59
|
-
}
|
|
60
|
-
};
|
|
61
25
|
var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
|
|
62
26
|
if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
|
|
63
27
|
if (ar || !(i in from)) {
|
|
@@ -73,49 +37,34 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
73
37
|
exports.__esModule = true;
|
|
74
38
|
exports.useNodeSocket = exports.useNodeSocketSubscribe = exports.NodeSocketProvider = exports.INITIATING = void 0;
|
|
75
39
|
var react_1 = __importStar(require("react"));
|
|
76
|
-
var await_to_js_1 = require("await-to-js");
|
|
77
40
|
var websocket_1 = __importDefault(require("../daemon/websocket"));
|
|
78
41
|
exports.INITIATING = -1;
|
|
79
|
-
var daemon = new websocket_1["default"]();
|
|
80
42
|
var Context = (0, react_1.createContext)({
|
|
81
43
|
err: undefined,
|
|
82
|
-
daemon:
|
|
44
|
+
daemon: undefined,
|
|
83
45
|
readyState: exports.INITIATING
|
|
84
46
|
});
|
|
85
47
|
var NodeSocketProvider = function (props) {
|
|
86
48
|
var children = props.children, endpoint = props.endpoint, timeout = props.timeout;
|
|
87
49
|
var _a = (0, react_1.useState)(exports.INITIATING), readyState = _a[0], setReadyState = _a[1];
|
|
88
50
|
var _b = (0, react_1.useState)(), err = _b[0], setErr = _b[1];
|
|
51
|
+
var _c = (0, react_1.useState)(), daemon = _c[0], setDaemon = _c[1];
|
|
89
52
|
(0, react_1.useEffect)(function () {
|
|
90
|
-
var
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
switch (_b.label) {
|
|
94
|
-
case 0:
|
|
95
|
-
setErr(undefined);
|
|
96
|
-
return [4 /*yield*/, (0, await_to_js_1.to)(daemon.connect(endpoint))];
|
|
97
|
-
case 1:
|
|
98
|
-
_a = _b.sent(), err = _a[0], _ = _a[1];
|
|
99
|
-
if (err)
|
|
100
|
-
setErr(err);
|
|
101
|
-
return [2 /*return*/];
|
|
102
|
-
}
|
|
103
|
-
});
|
|
104
|
-
}); };
|
|
105
|
-
connect();
|
|
53
|
+
var daemon = new websocket_1["default"](endpoint);
|
|
54
|
+
setDaemon(daemon);
|
|
55
|
+
return function () { return daemon.socket.close(); };
|
|
106
56
|
}, [endpoint]);
|
|
107
57
|
(0, react_1.useEffect)(function () {
|
|
108
58
|
if (!timeout)
|
|
109
59
|
return;
|
|
110
|
-
daemon
|
|
60
|
+
if (daemon)
|
|
61
|
+
daemon.callTimeout = timeout;
|
|
111
62
|
}, [timeout]);
|
|
112
63
|
(0, react_1.useEffect)(function () {
|
|
113
|
-
if (!daemon
|
|
64
|
+
if (!daemon)
|
|
114
65
|
return;
|
|
115
66
|
setReadyState(daemon.socket.readyState);
|
|
116
67
|
var onOpen = function () {
|
|
117
|
-
if (!daemon.socket)
|
|
118
|
-
return;
|
|
119
68
|
setReadyState(daemon.socket.readyState);
|
|
120
69
|
setErr(undefined);
|
|
121
70
|
};
|
|
@@ -141,7 +90,7 @@ var NodeSocketProvider = function (props) {
|
|
|
141
90
|
daemon.socket.removeEventListener("close", onClose);
|
|
142
91
|
daemon.socket.removeEventListener("error", onError);
|
|
143
92
|
};
|
|
144
|
-
}, [daemon
|
|
93
|
+
}, [daemon]);
|
|
145
94
|
return react_1["default"].createElement(Context.Provider, { value: { daemon: daemon, err: err, readyState: readyState } }, children);
|
|
146
95
|
};
|
|
147
96
|
exports.NodeSocketProvider = NodeSocketProvider;
|
|
@@ -149,24 +98,17 @@ var useNodeSocketSubscribe = function (_a, dependencies) {
|
|
|
149
98
|
var event = _a.event, onLoad = _a.onLoad, onData = _a.onData;
|
|
150
99
|
var nodeSocket = (0, exports.useNodeSocket)();
|
|
151
100
|
(0, react_1.useEffect)(function () {
|
|
101
|
+
if (!nodeSocket.daemon)
|
|
102
|
+
return;
|
|
152
103
|
if (nodeSocket.readyState !== WebSocket.OPEN)
|
|
153
104
|
return;
|
|
154
105
|
if (typeof onLoad === "function")
|
|
155
106
|
onLoad();
|
|
156
|
-
|
|
157
|
-
var listen = function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
158
|
-
return __generator(this, function (_a) {
|
|
159
|
-
switch (_a.label) {
|
|
160
|
-
case 0: return [4 /*yield*/, nodeSocket.daemon.listenEvent(event, onData)];
|
|
161
|
-
case 1:
|
|
162
|
-
closeEvent = _a.sent();
|
|
163
|
-
return [2 /*return*/];
|
|
164
|
-
}
|
|
165
|
-
});
|
|
166
|
-
}); };
|
|
167
|
-
listen();
|
|
107
|
+
nodeSocket.daemon.listen(event, onData);
|
|
168
108
|
return function () {
|
|
169
|
-
|
|
109
|
+
if (!nodeSocket.daemon)
|
|
110
|
+
return;
|
|
111
|
+
nodeSocket.daemon.closeListener(event, onData);
|
|
170
112
|
};
|
|
171
113
|
}, __spreadArray([nodeSocket], dependencies, true));
|
|
172
114
|
};
|
|
@@ -40,248 +40,121 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
40
40
|
};
|
|
41
41
|
exports.__esModule = true;
|
|
42
42
|
exports.WSRPC = void 0;
|
|
43
|
-
var
|
|
44
|
-
var await_to_js_1 = require("await-to-js");
|
|
43
|
+
var await_to_js_1 = __importDefault(require("await-to-js"));
|
|
45
44
|
var parse_json_1 = require("./parse_json/parse_json");
|
|
45
|
+
var isomorphic_ws_1 = __importDefault(require("isomorphic-ws"));
|
|
46
46
|
var WSRPC = /** @class */ (function () {
|
|
47
|
-
function WSRPC(options) {
|
|
48
|
-
this.connectionTries = 0;
|
|
49
|
-
this.methodIdIncrement = 0;
|
|
50
|
-
this.endpoint = "";
|
|
51
|
-
this.timeout = 15000; // default to 15s
|
|
52
|
-
this.events = new Map();
|
|
53
|
-
this.unsubscribeSuspense = 1000;
|
|
54
|
-
this.maxConnectionTries = 3;
|
|
55
|
-
this.reconnectOnConnectionLoss = true;
|
|
56
|
-
this.options = options;
|
|
57
|
-
}
|
|
58
|
-
WSRPC.prototype.connect = function (endpoint) {
|
|
47
|
+
function WSRPC(endpoint, options) {
|
|
59
48
|
var _this = this;
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
}
|
|
49
|
+
this.socket = new isomorphic_ws_1["default"](endpoint, options);
|
|
50
|
+
this.methodIdIncrement = 0;
|
|
51
|
+
this.callTimeout = 3000;
|
|
64
52
|
this.events = new Map();
|
|
65
|
-
this.
|
|
66
|
-
|
|
67
|
-
_this.socket = new isomorphic_ws_1["default"](endpoint, _this.options);
|
|
68
|
-
_this.endpoint = endpoint;
|
|
69
|
-
_this.socket.addEventListener("open", function (event) {
|
|
70
|
-
resolve(event);
|
|
71
|
-
});
|
|
72
|
-
_this.socket.addEventListener("close", function (event) {
|
|
73
|
-
if (_this.reconnectOnConnectionLoss && !event.wasClean) {
|
|
74
|
-
_this.tryReconnect();
|
|
75
|
-
reject(new Error("Unhandled close. Reconnecting..."));
|
|
76
|
-
}
|
|
77
|
-
else {
|
|
78
|
-
reject(event);
|
|
79
|
-
}
|
|
80
|
-
});
|
|
81
|
-
_this.socket.addEventListener("error", function (err) {
|
|
82
|
-
reject(err);
|
|
83
|
-
});
|
|
53
|
+
this.socket.addEventListener("close", function () {
|
|
54
|
+
_this.events = new Map();
|
|
84
55
|
});
|
|
85
|
-
}
|
|
86
|
-
WSRPC.prototype.
|
|
87
|
-
var _this = this;
|
|
88
|
-
this.connectionTries++;
|
|
89
|
-
if (this.connectionTries > this.maxConnectionTries) {
|
|
90
|
-
return;
|
|
91
|
-
}
|
|
92
|
-
this.socket = new isomorphic_ws_1["default"](this.endpoint, this.options);
|
|
93
|
-
this.socket.addEventListener("open", function () {
|
|
94
|
-
_this.connectionTries = 0;
|
|
95
|
-
});
|
|
96
|
-
this.socket.addEventListener("close", function (event) {
|
|
97
|
-
_this.tryReconnect();
|
|
98
|
-
});
|
|
99
|
-
};
|
|
100
|
-
WSRPC.prototype.close = function () {
|
|
101
|
-
if (!this.socket)
|
|
102
|
-
return;
|
|
103
|
-
this.socket.close();
|
|
104
|
-
};
|
|
105
|
-
WSRPC.prototype.clearEvent = function (event) {
|
|
106
|
-
var _this = this;
|
|
107
|
-
var eventData = this.events.get(event);
|
|
108
|
-
if (eventData) {
|
|
109
|
-
eventData.listeners.forEach(function (listener) {
|
|
110
|
-
_this.socket && _this.socket.removeEventListener("message", listener);
|
|
111
|
-
});
|
|
112
|
-
this.events["delete"](event);
|
|
113
|
-
}
|
|
114
|
-
};
|
|
115
|
-
WSRPC.prototype.closeAllListens = function (event) {
|
|
56
|
+
}
|
|
57
|
+
WSRPC.prototype.closeListener = function (event, listener) {
|
|
116
58
|
return __awaiter(this, void 0, void 0, function () {
|
|
117
|
-
var
|
|
118
|
-
return __generator(this, function (
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
this.
|
|
128
|
-
|
|
129
|
-
|
|
59
|
+
var eventData;
|
|
60
|
+
return __generator(this, function (_a) {
|
|
61
|
+
eventData = this.events.get(event);
|
|
62
|
+
if (eventData) {
|
|
63
|
+
if (eventData.listeners.length > 1) {
|
|
64
|
+
eventData.listeners = eventData.listeners.filter(function (l) { return l !== listener; });
|
|
65
|
+
this.events.set(event, eventData);
|
|
66
|
+
}
|
|
67
|
+
else {
|
|
68
|
+
this.events["delete"](event);
|
|
69
|
+
this.socket.removeEventListener("message", eventData.onMessage);
|
|
70
|
+
this.dataCall("unsubscribe", { notify: event });
|
|
71
|
+
}
|
|
130
72
|
}
|
|
73
|
+
return [2 /*return*/];
|
|
131
74
|
});
|
|
132
75
|
});
|
|
133
76
|
};
|
|
134
|
-
WSRPC.prototype.
|
|
77
|
+
WSRPC.prototype.listen = function (event, listener) {
|
|
135
78
|
return __awaiter(this, void 0, void 0, function () {
|
|
136
|
-
var
|
|
79
|
+
var eventData, idRefObject_1, onMessage;
|
|
137
80
|
var _this = this;
|
|
138
|
-
return __generator(this, function (
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
81
|
+
return __generator(this, function (_a) {
|
|
82
|
+
eventData = this.events.get(event);
|
|
83
|
+
if (eventData) {
|
|
84
|
+
eventData.listeners.push(listener);
|
|
85
|
+
this.events.set(event, eventData);
|
|
86
|
+
}
|
|
87
|
+
else {
|
|
88
|
+
idRefObject_1 = {};
|
|
89
|
+
this.dataCall("subscribe", { notify: event }, idRefObject_1)["catch"](function (err) {
|
|
90
|
+
listener(undefined, err);
|
|
91
|
+
});
|
|
92
|
+
onMessage = function (msgEvent) {
|
|
93
|
+
var eventData = _this.events.get(event);
|
|
94
|
+
if (eventData && typeof msgEvent.data === "string") {
|
|
95
|
+
try {
|
|
96
|
+
var data_1 = (0, parse_json_1.parseJSON)(msgEvent.data);
|
|
97
|
+
if (data_1.id === idRefObject_1.id) {
|
|
98
|
+
eventData.listeners.forEach(function (listener) {
|
|
99
|
+
if (data_1.error) {
|
|
100
|
+
listener(undefined, new Error(data_1.error.message));
|
|
149
101
|
}
|
|
150
102
|
else {
|
|
151
|
-
|
|
103
|
+
listener(data_1.result, undefined);
|
|
152
104
|
}
|
|
153
|
-
}
|
|
154
|
-
}
|
|
155
|
-
catch (_a) {
|
|
156
|
-
// can't parse json -- do nothing
|
|
105
|
+
});
|
|
157
106
|
}
|
|
158
107
|
}
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
if (!eventData) return [3 /*break*/, 1];
|
|
162
|
-
if (eventData.unsubscribeTimeoutId) {
|
|
163
|
-
// clear timeout to unsubscribe
|
|
164
|
-
// because we got a new registered event and want to cancel the pending unsubscribe grace period
|
|
165
|
-
clearTimeout(eventData.unsubscribeTimeoutId);
|
|
166
|
-
}
|
|
167
|
-
eventData.listeners.push(onMessage);
|
|
168
|
-
return [3 /*break*/, 3];
|
|
169
|
-
case 1:
|
|
170
|
-
// important if multiple listenEvent are called without await at least we store listener before getting id
|
|
171
|
-
// avoid trying to subscribe the same event multiple times
|
|
172
|
-
this.events.set(event, { listeners: [onMessage] });
|
|
173
|
-
idRefObject = {};
|
|
174
|
-
return [4 /*yield*/, (0, await_to_js_1.to)(this.dataCall("subscribe", { notify: event }, idRefObject))];
|
|
175
|
-
case 2:
|
|
176
|
-
_a = _b.sent(), err = _a[0], _ = _a[1];
|
|
177
|
-
if (err) {
|
|
178
|
-
this.clearEvent(event);
|
|
179
|
-
return [2 /*return*/, Promise.reject(err)];
|
|
180
|
-
}
|
|
181
|
-
eventData_1 = this.events.get(event);
|
|
182
|
-
if (eventData_1)
|
|
183
|
-
eventData_1.id = idRefObject.id;
|
|
184
|
-
_b.label = 3;
|
|
185
|
-
case 3:
|
|
186
|
-
this.socket && this.socket.addEventListener("message", onMessage);
|
|
187
|
-
closeListen = function () {
|
|
188
|
-
var eventData = _this.events.get(event);
|
|
189
|
-
if (eventData) {
|
|
190
|
-
var listeners = eventData.listeners;
|
|
191
|
-
for (var i = 0; i < listeners.length; i++) {
|
|
192
|
-
if (listeners[i] === onMessage) {
|
|
193
|
-
listeners.splice(i, 1);
|
|
194
|
-
break;
|
|
195
|
-
}
|
|
196
|
-
}
|
|
197
|
-
// no more listener so we unsubscribe from daemon websocket if socket still open
|
|
198
|
-
if (listeners.length === 0) {
|
|
199
|
-
// we use a grace period to unsubscribe (mostly because of react useEffect and avoid unecessary subscribe)
|
|
200
|
-
eventData.unsubscribeTimeoutId = setTimeout(function () { return __awaiter(_this, void 0, void 0, function () {
|
|
201
|
-
return __generator(this, function (_a) {
|
|
202
|
-
if (this.socket && this.socket.readyState === isomorphic_ws_1["default"].OPEN) {
|
|
203
|
-
this.dataCall("unsubscribe", { notify: event });
|
|
204
|
-
}
|
|
205
|
-
this.events["delete"](event);
|
|
206
|
-
return [2 /*return*/];
|
|
207
|
-
});
|
|
208
|
-
}); }, _this.unsubscribeSuspense);
|
|
209
|
-
}
|
|
108
|
+
catch (_a) {
|
|
109
|
+
// can't parse json -- do nothing
|
|
210
110
|
}
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
111
|
+
}
|
|
112
|
+
};
|
|
113
|
+
this.socket.addEventListener("message", onMessage);
|
|
114
|
+
this.events.set(event, { onMessage: onMessage, listeners: [listener] });
|
|
215
115
|
}
|
|
116
|
+
return [2 /*return*/];
|
|
216
117
|
});
|
|
217
118
|
});
|
|
218
119
|
};
|
|
219
|
-
WSRPC.prototype.batchCall = function (requests) {
|
|
220
|
-
var _this = this;
|
|
221
|
-
return new Promise(function (resolve, reject) { return __awaiter(_this, void 0, void 0, function () {
|
|
222
|
-
var id, data, _a, err, res, items;
|
|
223
|
-
return __generator(this, function (_b) {
|
|
224
|
-
switch (_b.label) {
|
|
225
|
-
case 0:
|
|
226
|
-
id = this.methodIdIncrement++;
|
|
227
|
-
requests.forEach(function (request) {
|
|
228
|
-
request.id = id;
|
|
229
|
-
request.jsonrpc = "2.0";
|
|
230
|
-
});
|
|
231
|
-
data = JSON.stringify(requests);
|
|
232
|
-
return [4 /*yield*/, (0, await_to_js_1.to)(this.rawCall(id, data))];
|
|
233
|
-
case 1:
|
|
234
|
-
_a = _b.sent(), err = _a[0], res = _a[1];
|
|
235
|
-
if (err)
|
|
236
|
-
return [2 /*return*/, reject(err)];
|
|
237
|
-
items = [];
|
|
238
|
-
res.forEach(function (v) {
|
|
239
|
-
if (v.error) {
|
|
240
|
-
items.push(new Error(v.error.message));
|
|
241
|
-
}
|
|
242
|
-
else {
|
|
243
|
-
items.push(v.result);
|
|
244
|
-
}
|
|
245
|
-
});
|
|
246
|
-
return [2 /*return*/, resolve(items)];
|
|
247
|
-
}
|
|
248
|
-
});
|
|
249
|
-
}); });
|
|
250
|
-
};
|
|
251
120
|
WSRPC.prototype.rawCall = function (id, body) {
|
|
252
121
|
var _this = this;
|
|
253
122
|
return new Promise(function (resolve, reject) {
|
|
254
|
-
if (!_this.socket)
|
|
255
|
-
return reject(new Error("Socket is not initialized."));
|
|
256
123
|
if (_this.socket.readyState !== isomorphic_ws_1["default"].OPEN)
|
|
257
124
|
return reject(new Error("Can't send msg. Socket is not opened."));
|
|
258
125
|
var timeoutId = null;
|
|
259
126
|
var onMessage = function (msgEvent) {
|
|
260
127
|
if (typeof msgEvent.data === "string") {
|
|
261
|
-
var
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
128
|
+
var data_2 = (0, parse_json_1.parseJSON)(msgEvent.data);
|
|
129
|
+
var evaluate_data = function () {
|
|
130
|
+
clearTimeout(timeoutId);
|
|
131
|
+
_this.socket.removeEventListener("message", onMessage);
|
|
132
|
+
if (data_2.error && data_2.error.message) {
|
|
133
|
+
reject(new Error(data_2.error.message));
|
|
134
|
+
return;
|
|
135
|
+
}
|
|
136
|
+
return resolve(data_2);
|
|
137
|
+
};
|
|
138
|
+
// this is for batch call we match the id with first item id
|
|
139
|
+
if (Array.isArray(data_2) && data_2.length > 0 && data_2[0].id === id) {
|
|
140
|
+
return evaluate_data();
|
|
268
141
|
}
|
|
269
|
-
|
|
270
|
-
|
|
142
|
+
// the msg id is matching so we can evaluate the data
|
|
143
|
+
if (data_2.id === id) {
|
|
144
|
+
return evaluate_data();
|
|
271
145
|
}
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
return
|
|
146
|
+
// special XSWD case - sending first call will return null id
|
|
147
|
+
if (data_2.id === null && id === 0) {
|
|
148
|
+
return evaluate_data();
|
|
275
149
|
}
|
|
276
|
-
reject(new Error("invalid data"));
|
|
277
150
|
}
|
|
278
151
|
};
|
|
279
152
|
_this.socket.addEventListener("message", onMessage);
|
|
280
|
-
if (_this.
|
|
153
|
+
if (_this.callTimeout > 0) {
|
|
281
154
|
timeoutId = setTimeout(function () {
|
|
282
155
|
_this.socket && _this.socket.removeEventListener("message", onMessage);
|
|
283
156
|
reject(new Error("timeout"));
|
|
284
|
-
}, _this.
|
|
157
|
+
}, _this.callTimeout);
|
|
285
158
|
}
|
|
286
159
|
if (_this.socket.readyState === isomorphic_ws_1["default"].OPEN) {
|
|
287
160
|
_this.socket.send(body);
|
|
@@ -302,7 +175,7 @@ var WSRPC = /** @class */ (function () {
|
|
|
302
175
|
if (params)
|
|
303
176
|
request.params = params;
|
|
304
177
|
data = JSON.stringify(request);
|
|
305
|
-
return [4 /*yield*/, (0, await_to_js_1
|
|
178
|
+
return [4 /*yield*/, (0, await_to_js_1["default"])(this.rawCall(id, data))];
|
|
306
179
|
case 1:
|
|
307
180
|
_a = _b.sent(), err = _a[0], res = _a[1];
|
|
308
181
|
if (err)
|
|
@@ -315,6 +188,38 @@ var WSRPC = /** @class */ (function () {
|
|
|
315
188
|
});
|
|
316
189
|
}); });
|
|
317
190
|
};
|
|
191
|
+
WSRPC.prototype.batchCall = function (requests) {
|
|
192
|
+
var _this = this;
|
|
193
|
+
return new Promise(function (resolve, reject) { return __awaiter(_this, void 0, void 0, function () {
|
|
194
|
+
var id, data, _a, err, res, items;
|
|
195
|
+
return __generator(this, function (_b) {
|
|
196
|
+
switch (_b.label) {
|
|
197
|
+
case 0:
|
|
198
|
+
id = this.methodIdIncrement++;
|
|
199
|
+
requests.forEach(function (request) {
|
|
200
|
+
request.id = id;
|
|
201
|
+
request.jsonrpc = "2.0";
|
|
202
|
+
});
|
|
203
|
+
data = JSON.stringify(requests);
|
|
204
|
+
return [4 /*yield*/, (0, await_to_js_1["default"])(this.rawCall(id, data))];
|
|
205
|
+
case 1:
|
|
206
|
+
_a = _b.sent(), err = _a[0], res = _a[1];
|
|
207
|
+
if (err)
|
|
208
|
+
return [2 /*return*/, reject(err)];
|
|
209
|
+
items = [];
|
|
210
|
+
res.forEach(function (v) {
|
|
211
|
+
if (v.error) {
|
|
212
|
+
items.push(new Error(v.error.message));
|
|
213
|
+
}
|
|
214
|
+
else {
|
|
215
|
+
items.push(v.result);
|
|
216
|
+
}
|
|
217
|
+
});
|
|
218
|
+
return [2 /*return*/, resolve(items)];
|
|
219
|
+
}
|
|
220
|
+
});
|
|
221
|
+
}); });
|
|
222
|
+
};
|
|
318
223
|
return WSRPC;
|
|
319
224
|
}());
|
|
320
225
|
exports.WSRPC = WSRPC;
|
|
@@ -27,29 +27,11 @@ var WalletMethods = /** @class */ (function () {
|
|
|
27
27
|
WalletMethods.prototype.dataCall = function (method, params) {
|
|
28
28
|
return this.ws.dataCall(this.prefix + method, params);
|
|
29
29
|
};
|
|
30
|
-
WalletMethods.prototype.
|
|
31
|
-
|
|
30
|
+
WalletMethods.prototype.closeListener = function (event, listener) {
|
|
31
|
+
this.ws.closeListener(event, listener);
|
|
32
32
|
};
|
|
33
|
-
WalletMethods.prototype.
|
|
34
|
-
|
|
35
|
-
};
|
|
36
|
-
WalletMethods.prototype.onNewTransaction = function (onData) {
|
|
37
|
-
return this.ws.listenEvent(this.prefix + types_1.RPCEvent.NewTransaction, onData);
|
|
38
|
-
};
|
|
39
|
-
WalletMethods.prototype.onBalanceChanged = function (onData) {
|
|
40
|
-
return this.ws.listenEvent(this.prefix + types_1.RPCEvent.BalanceChanged, onData);
|
|
41
|
-
};
|
|
42
|
-
WalletMethods.prototype.onRescan = function (onData) {
|
|
43
|
-
return this.ws.listenEvent(this.prefix + types_1.RPCEvent.Rescan, onData);
|
|
44
|
-
};
|
|
45
|
-
WalletMethods.prototype.onHistorySynced = function (onData) {
|
|
46
|
-
return this.ws.listenEvent(this.prefix + types_1.RPCEvent.HistorySynced, onData);
|
|
47
|
-
};
|
|
48
|
-
WalletMethods.prototype.onOnline = function (onData) {
|
|
49
|
-
return this.ws.listenEvent(this.prefix + types_1.RPCEvent.Online, onData);
|
|
50
|
-
};
|
|
51
|
-
WalletMethods.prototype.onOffline = function (onData) {
|
|
52
|
-
return this.ws.listenEvent(this.prefix + types_1.RPCEvent.Offline, onData);
|
|
33
|
+
WalletMethods.prototype.listen = function (event, listener) {
|
|
34
|
+
this.ws.listen(this.prefix + event, listener);
|
|
53
35
|
};
|
|
54
36
|
WalletMethods.prototype.getVersion = function () {
|
|
55
37
|
return this.dataCall(types_1.RPCMethod.GetVersion);
|
|
@@ -177,8 +159,8 @@ var WalletMethods = /** @class */ (function () {
|
|
|
177
159
|
exports.WalletMethods = WalletMethods;
|
|
178
160
|
var WS = /** @class */ (function (_super) {
|
|
179
161
|
__extends(WS, _super);
|
|
180
|
-
function WS(username, password) {
|
|
181
|
-
var _this = _super.call(this, { auth: "".concat(username, ":").concat(password) }) || this;
|
|
162
|
+
function WS(endpoint, username, password) {
|
|
163
|
+
var _this = _super.call(this, endpoint, { auth: "".concat(username, ":").concat(password) }) || this;
|
|
182
164
|
_this.methods = new WalletMethods(_this);
|
|
183
165
|
return _this;
|
|
184
166
|
}
|