@aeternity/aepp-sdk 8.2.0 → 10.0.0-beta.1
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/README.md +16 -9
- package/dist/aepp-sdk.browser-script.js +1 -1
- package/dist/aepp-sdk.browser-script.js.LICENSE.txt +0 -9
- package/dist/aepp-sdk.browser-script.js.map +1 -1
- package/dist/aepp-sdk.browser.js +1 -1
- package/dist/aepp-sdk.browser.js.map +1 -1
- package/dist/aepp-sdk.js +1 -1
- package/dist/aepp-sdk.js.map +1 -1
- package/es/account/base.js +33 -119
- package/es/account/base.js.map +1 -1
- package/es/account/memory.js +17 -19
- package/es/account/memory.js.map +1 -1
- package/es/account/multiple.js +75 -154
- package/es/account/multiple.js.map +1 -1
- package/es/ae/aens.js +164 -599
- package/es/ae/aens.js.map +1 -1
- package/es/ae/contract.js +108 -916
- package/es/ae/contract.js.map +1 -1
- package/es/ae/index.js +89 -250
- package/es/ae/index.js.map +1 -1
- package/es/ae/oracle.js +132 -500
- package/es/ae/oracle.js.map +1 -1
- package/es/chain/index.js +4 -23
- package/es/chain/index.js.map +1 -1
- package/es/chain/node.js +292 -1018
- package/es/chain/node.js.map +1 -1
- package/es/channel/handlers.js +597 -1086
- package/es/channel/handlers.js.map +1 -1
- package/es/channel/index.js +203 -451
- package/es/channel/index.js.map +1 -1
- package/es/channel/internal.js +129 -301
- package/es/channel/internal.js.map +1 -1
- package/es/contract/aci/index.js +319 -491
- package/es/contract/aci/index.js.map +1 -1
- package/es/contract/aci/transformation.js +35 -711
- package/es/contract/aci/transformation.js.map +1 -1
- package/es/contract/compiler.js +129 -203
- package/es/contract/compiler.js.map +1 -1
- package/es/contract/ga/helpers.js +17 -122
- package/es/contract/ga/helpers.js.map +1 -1
- package/es/contract/ga/index.js +102 -247
- package/es/contract/ga/index.js.map +1 -1
- package/es/contract/index.js +1 -1
- package/es/contract/index.js.map +1 -1
- package/es/index.js +2 -3
- package/es/index.js.map +1 -1
- package/es/node-pool/index.js +54 -73
- package/es/node-pool/index.js.map +1 -1
- package/es/node.js +56 -157
- package/es/node.js.map +1 -1
- package/es/other.d.ts +1 -1
- package/es/tx/builder/helpers.js +49 -89
- package/es/tx/builder/helpers.js.map +1 -1
- package/es/tx/builder/index.js +205 -303
- package/es/tx/builder/index.js.map +1 -1
- package/es/tx/builder/schema.js +585 -573
- package/es/tx/builder/schema.js.map +1 -1
- package/es/tx/index.js +1 -1
- package/es/tx/index.js.map +1 -1
- package/es/tx/tx-object.js +105 -135
- package/es/tx/tx-object.js.map +1 -1
- package/es/tx/tx.js +810 -1586
- package/es/tx/tx.js.map +1 -1
- package/es/tx/validator.js +191 -426
- package/es/tx/validator.js.map +1 -1
- package/es/utils/aepp-wallet-communication/connection/browser-runtime.js +17 -21
- package/es/utils/aepp-wallet-communication/connection/browser-runtime.js.map +1 -1
- package/es/utils/aepp-wallet-communication/connection/browser-window-message.js +38 -74
- package/es/utils/aepp-wallet-communication/connection/browser-window-message.js.map +1 -1
- package/es/utils/aepp-wallet-communication/content-script-bridge.js +14 -15
- package/es/utils/aepp-wallet-communication/content-script-bridge.js.map +1 -1
- package/es/utils/aepp-wallet-communication/helpers.js +60 -105
- package/es/utils/aepp-wallet-communication/helpers.js.map +1 -1
- package/es/utils/aepp-wallet-communication/rpc/aepp-rpc.js +179 -510
- package/es/utils/aepp-wallet-communication/rpc/aepp-rpc.js.map +1 -1
- package/es/utils/aepp-wallet-communication/rpc/rpc-client.js +70 -89
- package/es/utils/aepp-wallet-communication/rpc/rpc-client.js.map +1 -1
- package/es/utils/aepp-wallet-communication/rpc/wallet-rpc.js +354 -603
- package/es/utils/aepp-wallet-communication/rpc/wallet-rpc.js.map +1 -1
- package/es/utils/aepp-wallet-communication/schema.js +43 -39
- package/es/utils/aepp-wallet-communication/schema.js.map +1 -1
- package/es/utils/aepp-wallet-communication/wallet-detector.js +32 -58
- package/es/utils/aepp-wallet-communication/wallet-detector.js.map +1 -1
- package/es/utils/amount-formatter.js +41 -61
- package/es/utils/amount-formatter.js.map +1 -1
- package/es/utils/async-init.js +28 -64
- package/es/utils/async-init.js.map +1 -1
- package/es/utils/bignumber.js +3 -11
- package/es/utils/bignumber.js.map +1 -1
- package/es/utils/bytes.js +5 -9
- package/es/utils/bytes.js.map +1 -1
- package/es/utils/crypto.js +49 -75
- package/es/utils/crypto.js.map +1 -1
- package/es/utils/hd-wallet.js +45 -81
- package/es/utils/hd-wallet.js.map +1 -1
- package/es/utils/json-big.js +16 -49
- package/es/utils/json-big.js.map +1 -1
- package/es/utils/keystore.js +81 -246
- package/es/utils/keystore.js.map +1 -1
- package/es/utils/mptree.js +88 -134
- package/es/utils/mptree.js.map +1 -1
- package/es/utils/other.js +10 -60
- package/es/utils/other.js.map +1 -1
- package/es/utils/semver-satisfies.js +9 -28
- package/es/utils/semver-satisfies.js.map +1 -1
- package/es/utils/string.js +4 -13
- package/es/utils/string.js.map +1 -1
- package/es/utils/swagger.js +85 -218
- package/es/utils/swagger.js.map +1 -1
- package/package.json +52 -43
- package/src/account/base.js +8 -9
- package/src/account/multiple.js +20 -16
- package/src/ae/aens.js +25 -21
- package/src/ae/contract.js +65 -246
- package/src/ae/index.js +31 -7
- package/src/ae/oracle.js +21 -17
- package/src/chain/index.js +2 -12
- package/src/chain/node.js +26 -29
- package/src/channel/handlers.js +0 -1
- package/src/channel/index.js +4 -5
- package/src/contract/aci/index.js +221 -106
- package/src/contract/aci/transformation.js +30 -422
- package/src/contract/compiler.js +45 -4
- package/src/contract/ga/helpers.js +2 -12
- package/src/contract/ga/index.js +22 -26
- package/src/index.js +2 -4
- package/src/node-pool/index.js +21 -12
- package/src/node.js +22 -26
- package/src/tx/builder/helpers.js +12 -24
- package/src/tx/builder/index.js +18 -15
- package/src/tx/builder/schema.js +43 -108
- package/src/tx/tx-object.js +0 -2
- package/src/tx/tx.js +157 -144
- package/src/tx/validator.js +134 -202
- package/src/utils/aepp-wallet-communication/rpc/aepp-rpc.js +1 -3
- package/src/utils/aepp-wallet-communication/rpc/wallet-rpc.js +9 -10
- package/src/utils/aepp-wallet-communication/schema.js +1 -3
- package/src/utils/amount-formatter.ts +1 -1
- package/src/utils/bignumber.ts +2 -1
- package/src/utils/crypto.js +4 -17
- package/src/utils/other.ts +1 -1
- package/src/utils/semver-satisfies.ts +1 -1
- package/src/utils/swagger.js +24 -7
- package/CHANGELOG.md +0 -1716
- package/src/contract/aci/helpers.js +0 -140
package/es/channel/internal.js
CHANGED
|
@@ -1,24 +1,3 @@
|
|
|
1
|
-
import _toArray from "@babel/runtime-corejs3/helpers/toArray";
|
|
2
|
-
import _objectWithoutProperties from "@babel/runtime-corejs3/helpers/objectWithoutProperties";
|
|
3
|
-
import _slicedToArray from "@babel/runtime-corejs3/helpers/slicedToArray";
|
|
4
|
-
import _asyncToGenerator from "@babel/runtime-corejs3/helpers/asyncToGenerator";
|
|
5
|
-
import _toConsumableArray from "@babel/runtime-corejs3/helpers/toConsumableArray";
|
|
6
|
-
var _excluded = ["url"];
|
|
7
|
-
import _regeneratorRuntime from "@babel/runtime-corejs3/regenerator";
|
|
8
|
-
import _WeakMap from "@babel/runtime-corejs3/core-js-stable/weak-map";
|
|
9
|
-
import _concatInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/concat";
|
|
10
|
-
import _setTimeout from "@babel/runtime-corejs3/core-js-stable/set-timeout";
|
|
11
|
-
import _Promise from "@babel/runtime-corejs3/core-js-stable/promise";
|
|
12
|
-
import _findIndexInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/find-index";
|
|
13
|
-
import _filterInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/filter";
|
|
14
|
-
import _sliceInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/slice";
|
|
15
|
-
import _Map from "@babel/runtime-corejs3/core-js-stable/map";
|
|
16
|
-
import _URL from "@babel/runtime-corejs3/core-js-stable/url";
|
|
17
|
-
import _forEachInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/for-each";
|
|
18
|
-
import _Object$entries from "@babel/runtime-corejs3/core-js-stable/object/entries";
|
|
19
|
-
import _includesInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/includes";
|
|
20
|
-
import _Object$assign from "@babel/runtime-corejs3/core-js-stable/object/assign";
|
|
21
|
-
|
|
22
1
|
/*
|
|
23
2
|
* ISC License (ISC)
|
|
24
3
|
* Copyright (c) 2018 aeternity developers
|
|
@@ -41,33 +20,31 @@ import JsonBig from '../utils/json-big';
|
|
|
41
20
|
import { pascalToSnake } from '../utils/string';
|
|
42
21
|
import { awaitingConnection, awaitingReconnection, channelOpen } from './handlers'; // Send ping message every 10 seconds
|
|
43
22
|
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
export
|
|
48
|
-
export
|
|
49
|
-
export
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
export
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
export
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
export
|
|
23
|
+
const PING_TIMEOUT_MS = 10000; // Close connection if pong message is not received within 5 seconds
|
|
24
|
+
|
|
25
|
+
const PONG_TIMEOUT_MS = 5000;
|
|
26
|
+
export const options = new WeakMap();
|
|
27
|
+
export const status = new WeakMap();
|
|
28
|
+
export const state = new WeakMap();
|
|
29
|
+
const fsm = new WeakMap();
|
|
30
|
+
const websockets = new WeakMap();
|
|
31
|
+
export const eventEmitters = new WeakMap();
|
|
32
|
+
const messageQueue = new WeakMap();
|
|
33
|
+
const messageQueueLocked = new WeakMap();
|
|
34
|
+
const actionQueue = new WeakMap();
|
|
35
|
+
const actionQueueLocked = new WeakMap();
|
|
36
|
+
const sequence = new WeakMap();
|
|
37
|
+
export const channelId = new WeakMap();
|
|
38
|
+
const rpcCallbacks = new WeakMap();
|
|
39
|
+
const pingTimeoutId = new WeakMap();
|
|
40
|
+
const pongTimeoutId = new WeakMap();
|
|
41
|
+
export const fsmId = new WeakMap();
|
|
63
42
|
export function emit(channel) {
|
|
64
|
-
var _eventEmitters$get;
|
|
65
|
-
|
|
66
43
|
for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
|
|
67
44
|
args[_key - 1] = arguments[_key];
|
|
68
45
|
}
|
|
69
46
|
|
|
70
|
-
|
|
47
|
+
eventEmitters.get(channel).emit(...args);
|
|
71
48
|
}
|
|
72
49
|
|
|
73
50
|
function enterState(channel, nextState) {
|
|
@@ -85,7 +62,7 @@ function enterState(channel, nextState) {
|
|
|
85
62
|
}
|
|
86
63
|
|
|
87
64
|
export function changeStatus(channel, newStatus) {
|
|
88
|
-
|
|
65
|
+
const prevStatus = status.get(channel);
|
|
89
66
|
|
|
90
67
|
if (newStatus !== prevStatus) {
|
|
91
68
|
status.set(channel, newStatus);
|
|
@@ -97,158 +74,69 @@ export function changeState(channel, newState) {
|
|
|
97
74
|
emit(channel, 'stateChanged', newState);
|
|
98
75
|
}
|
|
99
76
|
export function send(channel, message) {
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
77
|
+
const {
|
|
78
|
+
debug = false
|
|
79
|
+
} = options.get(channel);
|
|
104
80
|
if (debug) console.log('Send message: ', message);
|
|
105
81
|
websockets.get(channel).send(JsonBig.stringify(message));
|
|
106
82
|
}
|
|
107
83
|
export function enqueueAction(channel, guard, action) {
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
action: action
|
|
113
|
-
}]));
|
|
84
|
+
actionQueue.set(channel, [...(actionQueue.get(channel) || []), {
|
|
85
|
+
guard,
|
|
86
|
+
action
|
|
87
|
+
}]);
|
|
114
88
|
dequeueAction(channel);
|
|
115
89
|
}
|
|
116
90
|
|
|
117
|
-
function dequeueAction(
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
function _dequeueAction() {
|
|
122
|
-
_dequeueAction = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee(channel) {
|
|
123
|
-
var locked, queue, state, index, nextState;
|
|
124
|
-
return _regeneratorRuntime.wrap(function _callee$(_context4) {
|
|
125
|
-
while (1) {
|
|
126
|
-
switch (_context4.prev = _context4.next) {
|
|
127
|
-
case 0:
|
|
128
|
-
locked = actionQueueLocked.get(channel);
|
|
129
|
-
queue = actionQueue.get(channel) || [];
|
|
130
|
-
|
|
131
|
-
if (!(locked || !queue.length)) {
|
|
132
|
-
_context4.next = 4;
|
|
133
|
-
break;
|
|
134
|
-
}
|
|
135
|
-
|
|
136
|
-
return _context4.abrupt("return");
|
|
137
|
-
|
|
138
|
-
case 4:
|
|
139
|
-
state = fsm.get(channel);
|
|
140
|
-
index = _findIndexInstanceProperty(queue).call(queue, function (item) {
|
|
141
|
-
return item.guard(channel, state);
|
|
142
|
-
});
|
|
143
|
-
|
|
144
|
-
if (!(index === -1)) {
|
|
145
|
-
_context4.next = 8;
|
|
146
|
-
break;
|
|
147
|
-
}
|
|
148
|
-
|
|
149
|
-
return _context4.abrupt("return");
|
|
150
|
-
|
|
151
|
-
case 8:
|
|
152
|
-
actionQueue.set(channel, _filterInstanceProperty(queue).call(queue, function (_, i) {
|
|
153
|
-
return index !== i;
|
|
154
|
-
}));
|
|
155
|
-
actionQueueLocked.set(channel, true);
|
|
156
|
-
_context4.next = 12;
|
|
157
|
-
return _Promise.resolve(queue[index].action(channel, state));
|
|
158
|
-
|
|
159
|
-
case 12:
|
|
160
|
-
nextState = _context4.sent;
|
|
161
|
-
actionQueueLocked.set(channel, false);
|
|
162
|
-
enterState(channel, nextState);
|
|
163
|
-
|
|
164
|
-
case 15:
|
|
165
|
-
case "end":
|
|
166
|
-
return _context4.stop();
|
|
167
|
-
}
|
|
168
|
-
}
|
|
169
|
-
}, _callee);
|
|
170
|
-
}));
|
|
171
|
-
return _dequeueAction.apply(this, arguments);
|
|
172
|
-
}
|
|
173
|
-
|
|
174
|
-
function handleMessage(_x2, _x3) {
|
|
175
|
-
return _handleMessage.apply(this, arguments);
|
|
176
|
-
}
|
|
91
|
+
async function dequeueAction(channel) {
|
|
92
|
+
const locked = actionQueueLocked.get(channel);
|
|
93
|
+
const queue = actionQueue.get(channel) || [];
|
|
177
94
|
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
95
|
+
if (locked || !queue.length) {
|
|
96
|
+
return;
|
|
97
|
+
}
|
|
181
98
|
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
switch (_context5.prev = _context5.next) {
|
|
185
|
-
case 0:
|
|
186
|
-
_fsm$get = fsm.get(channel), handler = _fsm$get.handler, state = _fsm$get.state;
|
|
187
|
-
_context5.t0 = enterState;
|
|
188
|
-
_context5.t1 = channel;
|
|
189
|
-
_context5.next = 5;
|
|
190
|
-
return _Promise.resolve(handler(channel, message, state));
|
|
99
|
+
const state = fsm.get(channel);
|
|
100
|
+
const index = queue.findIndex(item => item.guard(channel, state));
|
|
191
101
|
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
102
|
+
if (index === -1) {
|
|
103
|
+
return;
|
|
104
|
+
}
|
|
195
105
|
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
}, _callee2);
|
|
202
|
-
}));
|
|
203
|
-
return _handleMessage.apply(this, arguments);
|
|
106
|
+
actionQueue.set(channel, queue.filter((_, i) => index !== i));
|
|
107
|
+
actionQueueLocked.set(channel, true);
|
|
108
|
+
const nextState = await Promise.resolve(queue[index].action(channel, state));
|
|
109
|
+
actionQueueLocked.set(channel, false);
|
|
110
|
+
enterState(channel, nextState);
|
|
204
111
|
}
|
|
205
112
|
|
|
206
|
-
function
|
|
207
|
-
|
|
113
|
+
async function handleMessage(channel, message) {
|
|
114
|
+
const {
|
|
115
|
+
handler,
|
|
116
|
+
state
|
|
117
|
+
} = fsm.get(channel);
|
|
118
|
+
enterState(channel, await Promise.resolve(handler(channel, message, state)));
|
|
208
119
|
}
|
|
209
120
|
|
|
210
|
-
function
|
|
211
|
-
|
|
212
|
-
var queue, _queue, message, remaining;
|
|
213
|
-
|
|
214
|
-
return _regeneratorRuntime.wrap(function _callee3$(_context6) {
|
|
215
|
-
while (1) {
|
|
216
|
-
switch (_context6.prev = _context6.next) {
|
|
217
|
-
case 0:
|
|
218
|
-
queue = messageQueue.get(channel);
|
|
219
|
-
|
|
220
|
-
if (!(messageQueueLocked.get(channel) || !queue.length)) {
|
|
221
|
-
_context6.next = 3;
|
|
222
|
-
break;
|
|
223
|
-
}
|
|
224
|
-
|
|
225
|
-
return _context6.abrupt("return");
|
|
226
|
-
|
|
227
|
-
case 3:
|
|
228
|
-
_queue = _toArray(queue), message = _queue[0], remaining = _sliceInstanceProperty(_queue).call(_queue, 1);
|
|
229
|
-
messageQueue.set(channel, remaining || []);
|
|
230
|
-
messageQueueLocked.set(channel, true);
|
|
231
|
-
_context6.next = 8;
|
|
232
|
-
return handleMessage(channel, message);
|
|
121
|
+
async function dequeueMessage(channel) {
|
|
122
|
+
const queue = messageQueue.get(channel);
|
|
233
123
|
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
124
|
+
if (messageQueueLocked.get(channel) || !queue.length) {
|
|
125
|
+
return;
|
|
126
|
+
}
|
|
237
127
|
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
}));
|
|
245
|
-
return _dequeueMessage.apply(this, arguments);
|
|
128
|
+
const [message, ...remaining] = queue;
|
|
129
|
+
messageQueue.set(channel, remaining || []);
|
|
130
|
+
messageQueueLocked.set(channel, true);
|
|
131
|
+
await handleMessage(channel, message);
|
|
132
|
+
messageQueueLocked.set(channel, false);
|
|
133
|
+
dequeueMessage(channel);
|
|
246
134
|
}
|
|
247
135
|
|
|
248
136
|
function ping(channel) {
|
|
249
137
|
clearTimeout(pingTimeoutId.get(channel));
|
|
250
138
|
clearTimeout(pongTimeoutId.get(channel));
|
|
251
|
-
pingTimeoutId.set(channel,
|
|
139
|
+
pingTimeoutId.set(channel, setTimeout(() => {
|
|
252
140
|
send(channel, {
|
|
253
141
|
jsonrpc: '2.0',
|
|
254
142
|
method: 'channels.system',
|
|
@@ -256,7 +144,7 @@ function ping(channel) {
|
|
|
256
144
|
action: 'ping'
|
|
257
145
|
}
|
|
258
146
|
});
|
|
259
|
-
pongTimeoutId.set(channel,
|
|
147
|
+
pongTimeoutId.set(channel, setTimeout(() => {
|
|
260
148
|
disconnect(channel);
|
|
261
149
|
emit(channel, 'error', new Error('Server pong timed out'));
|
|
262
150
|
}, PONG_TIMEOUT_MS));
|
|
@@ -264,21 +152,19 @@ function ping(channel) {
|
|
|
264
152
|
}
|
|
265
153
|
|
|
266
154
|
function onMessage(channel, data) {
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
debug = _options$get2$debug === void 0 ? false : _options$get2$debug;
|
|
272
|
-
|
|
155
|
+
const message = JsonBig.parse(data);
|
|
156
|
+
const {
|
|
157
|
+
debug = false
|
|
158
|
+
} = options.get(channel);
|
|
273
159
|
if (debug) console.log('Receive message: ', message);
|
|
274
160
|
|
|
275
161
|
if (message.id) {
|
|
276
|
-
|
|
162
|
+
const callback = rpcCallbacks.get(channel).get(message.id);
|
|
277
163
|
|
|
278
164
|
try {
|
|
279
165
|
callback(message);
|
|
280
166
|
} finally {
|
|
281
|
-
rpcCallbacks.get(channel)
|
|
167
|
+
rpcCallbacks.get(channel).delete(message.id);
|
|
282
168
|
}
|
|
283
169
|
} else if (message.method === 'channels.message') {
|
|
284
170
|
emit(channel, 'message', message.params.data.message);
|
|
@@ -288,42 +174,35 @@ function onMessage(channel, data) {
|
|
|
288
174
|
ping(channel);
|
|
289
175
|
}
|
|
290
176
|
} else {
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
messageQueue.set(channel, _concatInstanceProperty(_context2 = []).call(_context2, _toConsumableArray(messageQueue.get(channel) || []), [message]));
|
|
177
|
+
messageQueue.set(channel, [...(messageQueue.get(channel) || []), message]);
|
|
294
178
|
dequeueMessage(channel);
|
|
295
179
|
}
|
|
296
180
|
}
|
|
297
181
|
|
|
298
182
|
function wrapCallErrorMessage(message) {
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
_ref2$ = _ref2$ === void 0 ? {} : _ref2$;
|
|
304
|
-
var details = _ref2$.message;
|
|
183
|
+
const [{
|
|
184
|
+
message: details
|
|
185
|
+
} = {}] = message.error.data || [];
|
|
305
186
|
|
|
306
187
|
if (details) {
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
return new Error(_concatInstanceProperty(_context3 = "".concat(message.error.message, ": ")).call(_context3, details));
|
|
188
|
+
return new Error(`${message.error.message}: ${details}`);
|
|
310
189
|
}
|
|
311
190
|
|
|
312
191
|
return new Error(message.error.message);
|
|
313
192
|
}
|
|
314
193
|
|
|
315
194
|
export function call(channel, method, params) {
|
|
316
|
-
return new
|
|
317
|
-
|
|
318
|
-
rpcCallbacks.get(channel).set(id,
|
|
195
|
+
return new Promise((resolve, reject) => {
|
|
196
|
+
const id = sequence.set(channel, sequence.get(channel) + 1).get(channel);
|
|
197
|
+
rpcCallbacks.get(channel).set(id, message => {
|
|
319
198
|
if (message.result) return resolve(message.result);
|
|
320
199
|
if (message.error) return reject(wrapCallErrorMessage(message));
|
|
321
200
|
});
|
|
322
201
|
send(channel, {
|
|
323
202
|
jsonrpc: '2.0',
|
|
324
|
-
method
|
|
325
|
-
id
|
|
326
|
-
params
|
|
203
|
+
method,
|
|
204
|
+
id,
|
|
205
|
+
params
|
|
327
206
|
});
|
|
328
207
|
});
|
|
329
208
|
}
|
|
@@ -332,107 +211,56 @@ export function disconnect(channel) {
|
|
|
332
211
|
clearTimeout(pingTimeoutId.get(channel));
|
|
333
212
|
clearTimeout(pongTimeoutId.get(channel));
|
|
334
213
|
}
|
|
335
|
-
export function initialize(
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
return wsUrl.searchParams.set(pascalToSnake(key), value);
|
|
371
|
-
});
|
|
372
|
-
|
|
373
|
-
wsUrl.searchParams.set('protocol', 'json-rpc');
|
|
374
|
-
changeStatus(channel, 'connecting');
|
|
375
|
-
ws = new W3CWebSocket(wsUrl.toString());
|
|
376
|
-
_context11.next = 13;
|
|
377
|
-
return new _Promise(function (resolve, reject) {
|
|
378
|
-
return _Object$assign(ws, {
|
|
379
|
-
onerror: reject,
|
|
380
|
-
onopen: function onopen() {
|
|
381
|
-
resolve();
|
|
382
|
-
changeStatus(channel, 'connected');
|
|
383
|
-
|
|
384
|
-
if (channelOptions.reconnectTx) {
|
|
385
|
-
enterState(channel, {
|
|
386
|
-
handler: channelOpen
|
|
387
|
-
});
|
|
388
|
-
|
|
389
|
-
_setTimeout( /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee4() {
|
|
390
|
-
return _regeneratorRuntime.wrap(function _callee4$(_context10) {
|
|
391
|
-
while (1) {
|
|
392
|
-
switch (_context10.prev = _context10.next) {
|
|
393
|
-
case 0:
|
|
394
|
-
_context10.t0 = changeState;
|
|
395
|
-
_context10.t1 = channel;
|
|
396
|
-
_context10.next = 4;
|
|
397
|
-
return call(channel, 'channels.get.offchain_state', {});
|
|
398
|
-
|
|
399
|
-
case 4:
|
|
400
|
-
_context10.t2 = _context10.sent.signed_tx;
|
|
401
|
-
return _context10.abrupt("return", (0, _context10.t0)(_context10.t1, _context10.t2));
|
|
402
|
-
|
|
403
|
-
case 6:
|
|
404
|
-
case "end":
|
|
405
|
-
return _context10.stop();
|
|
406
|
-
}
|
|
407
|
-
}
|
|
408
|
-
}, _callee4);
|
|
409
|
-
})));
|
|
410
|
-
}
|
|
411
|
-
|
|
412
|
-
ping(channel);
|
|
413
|
-
},
|
|
414
|
-
onclose: function onclose() {
|
|
415
|
-
changeStatus(channel, 'disconnected');
|
|
416
|
-
clearTimeout(pingTimeoutId.get(channel));
|
|
417
|
-
clearTimeout(pongTimeoutId.get(channel));
|
|
418
|
-
},
|
|
419
|
-
onmessage: function onmessage(_ref9) {
|
|
420
|
-
var data = _ref9.data;
|
|
421
|
-
return onMessage(channel, data);
|
|
422
|
-
}
|
|
423
|
-
});
|
|
424
|
-
});
|
|
425
|
-
|
|
426
|
-
case 13:
|
|
427
|
-
websockets.set(channel, ws);
|
|
428
|
-
|
|
429
|
-
case 14:
|
|
430
|
-
case "end":
|
|
431
|
-
return _context11.stop();
|
|
432
|
-
}
|
|
214
|
+
export async function initialize(channel, _ref) {
|
|
215
|
+
let {
|
|
216
|
+
url,
|
|
217
|
+
...channelOptions
|
|
218
|
+
} = _ref;
|
|
219
|
+
options.set(channel, channelOptions);
|
|
220
|
+
fsm.set(channel, {
|
|
221
|
+
handler: channelOptions.existingFsmId ? awaitingReconnection : awaitingConnection
|
|
222
|
+
});
|
|
223
|
+
eventEmitters.set(channel, new EventEmitter());
|
|
224
|
+
sequence.set(channel, 0);
|
|
225
|
+
rpcCallbacks.set(channel, new Map());
|
|
226
|
+
const wsUrl = new URL(url);
|
|
227
|
+
Object.entries(channelOptions).filter(_ref2 => {
|
|
228
|
+
let [key] = _ref2;
|
|
229
|
+
return !['sign', 'debug'].includes(key);
|
|
230
|
+
}).forEach(_ref3 => {
|
|
231
|
+
let [key, value] = _ref3;
|
|
232
|
+
return wsUrl.searchParams.set(pascalToSnake(key), value);
|
|
233
|
+
});
|
|
234
|
+
wsUrl.searchParams.set('protocol', 'json-rpc');
|
|
235
|
+
changeStatus(channel, 'connecting');
|
|
236
|
+
const ws = new W3CWebSocket(wsUrl.toString());
|
|
237
|
+
await new Promise((resolve, reject) => Object.assign(ws, {
|
|
238
|
+
onerror: reject,
|
|
239
|
+
onopen: () => {
|
|
240
|
+
resolve();
|
|
241
|
+
changeStatus(channel, 'connected');
|
|
242
|
+
|
|
243
|
+
if (channelOptions.reconnectTx) {
|
|
244
|
+
enterState(channel, {
|
|
245
|
+
handler: channelOpen
|
|
246
|
+
});
|
|
247
|
+
setTimeout(async () => changeState(channel, (await call(channel, 'channels.get.offchain_state', {})).signed_tx));
|
|
433
248
|
}
|
|
434
|
-
|
|
249
|
+
|
|
250
|
+
ping(channel);
|
|
251
|
+
},
|
|
252
|
+
onclose: () => {
|
|
253
|
+
changeStatus(channel, 'disconnected');
|
|
254
|
+
clearTimeout(pingTimeoutId.get(channel));
|
|
255
|
+
clearTimeout(pongTimeoutId.get(channel));
|
|
256
|
+
},
|
|
257
|
+
onmessage: _ref4 => {
|
|
258
|
+
let {
|
|
259
|
+
data
|
|
260
|
+
} = _ref4;
|
|
261
|
+
return onMessage(channel, data);
|
|
262
|
+
}
|
|
435
263
|
}));
|
|
436
|
-
|
|
264
|
+
websockets.set(channel, ws);
|
|
437
265
|
}
|
|
438
266
|
//# sourceMappingURL=internal.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/channel/internal.js"],"names":["w3cwebsocket","W3CWebSocket","EventEmitter","JsonBig","pascalToSnake","awaitingConnection","awaitingReconnection","channelOpen","PING_TIMEOUT_MS","PONG_TIMEOUT_MS","options","status","state","fsm","websockets","eventEmitters","messageQueue","messageQueueLocked","actionQueue","actionQueueLocked","sequence","channelId","rpcCallbacks","pingTimeoutId","pongTimeoutId","fsmId","emit","channel","args","get","enterState","nextState","Error","set","handler","enter","dequeueAction","changeStatus","newStatus","prevStatus","changeState","newState","send","message","debug","console","log","stringify","enqueueAction","guard","action","locked","queue","length","index","item","_","i","resolve","handleMessage","dequeueMessage","remaining","ping","clearTimeout","jsonrpc","method","params","disconnect","onMessage","data","parse","id","callback","channel_id","wrapCallErrorMessage","error","details","call","reject","result","close","initialize","url","channelOptions","existingFsmId","wsUrl","key","value","searchParams","ws","toString","onerror","onopen","reconnectTx","signed_tx","onclose","onmessage"],"mappings":"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","sourcesContent":["/*\n * ISC License (ISC)\n * Copyright (c) 2018 aeternity developers\n *\n * Permission to use, copy, modify, and/or distribute this software for any\n * purpose with or without fee is hereby granted, provided that the above\n * copyright notice and this permission notice appear in all copies.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\n * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\n * AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\n * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\n * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\n * OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\n * PERFORMANCE OF THIS SOFTWARE.\n */\n\nimport { w3cwebsocket as W3CWebSocket } from 'websocket'\nimport { EventEmitter } from 'events'\nimport JsonBig from '../utils/json-big'\nimport { pascalToSnake } from '../utils/string'\nimport { awaitingConnection, awaitingReconnection, channelOpen } from './handlers'\n\n// Send ping message every 10 seconds\nconst PING_TIMEOUT_MS = 10000\n// Close connection if pong message is not received within 5 seconds\nconst PONG_TIMEOUT_MS = 5000\n\nexport const options = new WeakMap()\nexport const status = new WeakMap()\nexport const state = new WeakMap()\nconst fsm = new WeakMap()\nconst websockets = new WeakMap()\nexport const eventEmitters = new WeakMap()\nconst messageQueue = new WeakMap()\nconst messageQueueLocked = new WeakMap()\nconst actionQueue = new WeakMap()\nconst actionQueueLocked = new WeakMap()\nconst sequence = new WeakMap()\nexport const channelId = new WeakMap()\nconst rpcCallbacks = new WeakMap()\nconst pingTimeoutId = new WeakMap()\nconst pongTimeoutId = new WeakMap()\nexport const fsmId = new WeakMap()\n\nexport function emit (channel, ...args) {\n eventEmitters.get(channel).emit(...args)\n}\n\nfunction enterState (channel, nextState) {\n if (!nextState) {\n throw new Error('State Channels FSM entered unknown state')\n }\n fsm.set(channel, nextState)\n if (nextState.handler.enter) {\n nextState.handler.enter(channel)\n }\n dequeueAction(channel)\n}\n\nexport function changeStatus (channel, newStatus) {\n const prevStatus = status.get(channel)\n if (newStatus !== prevStatus) {\n status.set(channel, newStatus)\n emit(channel, 'statusChanged', newStatus)\n }\n}\n\nexport function changeState (channel, newState) {\n state.set(channel, newState)\n emit(channel, 'stateChanged', newState)\n}\n\nexport function send (channel, message) {\n const { debug = false } = options.get(channel)\n if (debug) console.log('Send message: ', message)\n websockets.get(channel).send(JsonBig.stringify(message))\n}\n\nexport function enqueueAction (channel, guard, action) {\n actionQueue.set(channel, [\n ...actionQueue.get(channel) || [],\n { guard, action }\n ])\n dequeueAction(channel)\n}\n\nasync function dequeueAction (channel) {\n const locked = actionQueueLocked.get(channel)\n const queue = actionQueue.get(channel) || []\n if (locked || !queue.length) {\n return\n }\n const state = fsm.get(channel)\n const index = queue.findIndex(item => item.guard(channel, state))\n if (index === -1) {\n return\n }\n actionQueue.set(channel, queue.filter((_, i) => index !== i))\n actionQueueLocked.set(channel, true)\n const nextState = await Promise.resolve(queue[index].action(channel, state))\n actionQueueLocked.set(channel, false)\n enterState(channel, nextState)\n}\n\nasync function handleMessage (channel, message) {\n const { handler, state } = fsm.get(channel)\n enterState(channel, await Promise.resolve(handler(channel, message, state)))\n}\n\nasync function dequeueMessage (channel) {\n const queue = messageQueue.get(channel)\n if (messageQueueLocked.get(channel) || !queue.length) {\n return\n }\n const [message, ...remaining] = queue\n messageQueue.set(channel, remaining || [])\n messageQueueLocked.set(channel, true)\n await handleMessage(channel, message)\n messageQueueLocked.set(channel, false)\n dequeueMessage(channel)\n}\n\nfunction ping (channel) {\n clearTimeout(pingTimeoutId.get(channel))\n clearTimeout(pongTimeoutId.get(channel))\n pingTimeoutId.set(channel, setTimeout(() => {\n send(channel, {\n jsonrpc: '2.0',\n method: 'channels.system',\n params: {\n action: 'ping'\n }\n })\n pongTimeoutId.set(channel, setTimeout(() => {\n disconnect(channel)\n emit(channel, 'error', new Error('Server pong timed out'))\n }, PONG_TIMEOUT_MS))\n }, PING_TIMEOUT_MS))\n}\n\nfunction onMessage (channel, data) {\n const message = JsonBig.parse(data)\n const { debug = false } = options.get(channel)\n if (debug) console.log('Receive message: ', message)\n if (message.id) {\n const callback = rpcCallbacks.get(channel).get(message.id)\n try {\n callback(message)\n } finally {\n rpcCallbacks.get(channel).delete(message.id)\n }\n } else if (message.method === 'channels.message') {\n emit(channel, 'message', message.params.data.message)\n } else if (message.method === 'channels.system.pong') {\n if (\n (message.params.channel_id === channelId.get(channel)) ||\n // Skip channelId check if channelId is not known yet\n (channelId.get(channel) == null)\n ) {\n ping(channel)\n }\n } else {\n messageQueue.set(channel, [...(messageQueue.get(channel) || []), message])\n dequeueMessage(channel)\n }\n}\n\nfunction wrapCallErrorMessage (message) {\n const [{ message: details } = {}] = message.error.data || []\n if (details) {\n return new Error(`${message.error.message}: ${details}`)\n }\n return new Error(message.error.message)\n}\n\nexport function call (channel, method, params) {\n return new Promise((resolve, reject) => {\n const id = sequence.set(channel, sequence.get(channel) + 1).get(channel)\n rpcCallbacks.get(channel).set(id, (message) => {\n if (message.result) return resolve(message.result)\n if (message.error) return reject(wrapCallErrorMessage(message))\n })\n send(channel, { jsonrpc: '2.0', method, id, params })\n })\n}\n\nexport function disconnect (channel) {\n websockets.get(channel).close()\n clearTimeout(pingTimeoutId.get(channel))\n clearTimeout(pongTimeoutId.get(channel))\n}\n\nexport async function initialize (channel, { url, ...channelOptions }) {\n options.set(channel, channelOptions)\n fsm.set(channel, {\n handler: channelOptions.existingFsmId ? awaitingReconnection : awaitingConnection\n })\n eventEmitters.set(channel, new EventEmitter())\n sequence.set(channel, 0)\n rpcCallbacks.set(channel, new Map())\n\n const wsUrl = new URL(url)\n Object.entries(channelOptions)\n .filter(([key]) => !['sign', 'debug'].includes(key))\n .forEach(([key, value]) => wsUrl.searchParams.set(pascalToSnake(key), value))\n wsUrl.searchParams.set('protocol', 'json-rpc')\n changeStatus(channel, 'connecting')\n const ws = new W3CWebSocket(wsUrl.toString())\n await new Promise((resolve, reject) => Object.assign(ws, {\n onerror: reject,\n onopen: () => {\n resolve()\n changeStatus(channel, 'connected')\n if (channelOptions.reconnectTx) {\n enterState(channel, { handler: channelOpen })\n setTimeout(async () => changeState(channel,\n (await call(channel, 'channels.get.offchain_state', {})).signed_tx\n ))\n }\n ping(channel)\n },\n onclose: () => {\n changeStatus(channel, 'disconnected')\n clearTimeout(pingTimeoutId.get(channel))\n clearTimeout(pongTimeoutId.get(channel))\n },\n onmessage: ({ data }) => onMessage(channel, data)\n }))\n websockets.set(channel, ws)\n}\n"],"file":"internal.js"}
|
|
1
|
+
{"version":3,"sources":["../../src/channel/internal.js"],"names":["w3cwebsocket","W3CWebSocket","EventEmitter","JsonBig","pascalToSnake","awaitingConnection","awaitingReconnection","channelOpen","PING_TIMEOUT_MS","PONG_TIMEOUT_MS","options","WeakMap","status","state","fsm","websockets","eventEmitters","messageQueue","messageQueueLocked","actionQueue","actionQueueLocked","sequence","channelId","rpcCallbacks","pingTimeoutId","pongTimeoutId","fsmId","emit","channel","args","get","enterState","nextState","Error","set","handler","enter","dequeueAction","changeStatus","newStatus","prevStatus","changeState","newState","send","message","debug","console","log","stringify","enqueueAction","guard","action","locked","queue","length","index","findIndex","item","filter","_","i","Promise","resolve","handleMessage","dequeueMessage","remaining","ping","clearTimeout","setTimeout","jsonrpc","method","params","disconnect","onMessage","data","parse","id","callback","delete","channel_id","wrapCallErrorMessage","details","error","call","reject","result","close","initialize","url","channelOptions","existingFsmId","Map","wsUrl","URL","Object","entries","key","includes","forEach","value","searchParams","ws","toString","assign","onerror","onopen","reconnectTx","signed_tx","onclose","onmessage"],"mappings":"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","sourcesContent":["/*\n * ISC License (ISC)\n * Copyright (c) 2018 aeternity developers\n *\n * Permission to use, copy, modify, and/or distribute this software for any\n * purpose with or without fee is hereby granted, provided that the above\n * copyright notice and this permission notice appear in all copies.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\n * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\n * AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\n * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\n * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\n * OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\n * PERFORMANCE OF THIS SOFTWARE.\n */\n\nimport { w3cwebsocket as W3CWebSocket } from 'websocket'\nimport { EventEmitter } from 'events'\nimport JsonBig from '../utils/json-big'\nimport { pascalToSnake } from '../utils/string'\nimport { awaitingConnection, awaitingReconnection, channelOpen } from './handlers'\n\n// Send ping message every 10 seconds\nconst PING_TIMEOUT_MS = 10000\n// Close connection if pong message is not received within 5 seconds\nconst PONG_TIMEOUT_MS = 5000\n\nexport const options = new WeakMap()\nexport const status = new WeakMap()\nexport const state = new WeakMap()\nconst fsm = new WeakMap()\nconst websockets = new WeakMap()\nexport const eventEmitters = new WeakMap()\nconst messageQueue = new WeakMap()\nconst messageQueueLocked = new WeakMap()\nconst actionQueue = new WeakMap()\nconst actionQueueLocked = new WeakMap()\nconst sequence = new WeakMap()\nexport const channelId = new WeakMap()\nconst rpcCallbacks = new WeakMap()\nconst pingTimeoutId = new WeakMap()\nconst pongTimeoutId = new WeakMap()\nexport const fsmId = new WeakMap()\n\nexport function emit (channel, ...args) {\n eventEmitters.get(channel).emit(...args)\n}\n\nfunction enterState (channel, nextState) {\n if (!nextState) {\n throw new Error('State Channels FSM entered unknown state')\n }\n fsm.set(channel, nextState)\n if (nextState.handler.enter) {\n nextState.handler.enter(channel)\n }\n dequeueAction(channel)\n}\n\nexport function changeStatus (channel, newStatus) {\n const prevStatus = status.get(channel)\n if (newStatus !== prevStatus) {\n status.set(channel, newStatus)\n emit(channel, 'statusChanged', newStatus)\n }\n}\n\nexport function changeState (channel, newState) {\n state.set(channel, newState)\n emit(channel, 'stateChanged', newState)\n}\n\nexport function send (channel, message) {\n const { debug = false } = options.get(channel)\n if (debug) console.log('Send message: ', message)\n websockets.get(channel).send(JsonBig.stringify(message))\n}\n\nexport function enqueueAction (channel, guard, action) {\n actionQueue.set(channel, [\n ...actionQueue.get(channel) || [],\n { guard, action }\n ])\n dequeueAction(channel)\n}\n\nasync function dequeueAction (channel) {\n const locked = actionQueueLocked.get(channel)\n const queue = actionQueue.get(channel) || []\n if (locked || !queue.length) {\n return\n }\n const state = fsm.get(channel)\n const index = queue.findIndex(item => item.guard(channel, state))\n if (index === -1) {\n return\n }\n actionQueue.set(channel, queue.filter((_, i) => index !== i))\n actionQueueLocked.set(channel, true)\n const nextState = await Promise.resolve(queue[index].action(channel, state))\n actionQueueLocked.set(channel, false)\n enterState(channel, nextState)\n}\n\nasync function handleMessage (channel, message) {\n const { handler, state } = fsm.get(channel)\n enterState(channel, await Promise.resolve(handler(channel, message, state)))\n}\n\nasync function dequeueMessage (channel) {\n const queue = messageQueue.get(channel)\n if (messageQueueLocked.get(channel) || !queue.length) {\n return\n }\n const [message, ...remaining] = queue\n messageQueue.set(channel, remaining || [])\n messageQueueLocked.set(channel, true)\n await handleMessage(channel, message)\n messageQueueLocked.set(channel, false)\n dequeueMessage(channel)\n}\n\nfunction ping (channel) {\n clearTimeout(pingTimeoutId.get(channel))\n clearTimeout(pongTimeoutId.get(channel))\n pingTimeoutId.set(channel, setTimeout(() => {\n send(channel, {\n jsonrpc: '2.0',\n method: 'channels.system',\n params: {\n action: 'ping'\n }\n })\n pongTimeoutId.set(channel, setTimeout(() => {\n disconnect(channel)\n emit(channel, 'error', new Error('Server pong timed out'))\n }, PONG_TIMEOUT_MS))\n }, PING_TIMEOUT_MS))\n}\n\nfunction onMessage (channel, data) {\n const message = JsonBig.parse(data)\n const { debug = false } = options.get(channel)\n if (debug) console.log('Receive message: ', message)\n if (message.id) {\n const callback = rpcCallbacks.get(channel).get(message.id)\n try {\n callback(message)\n } finally {\n rpcCallbacks.get(channel).delete(message.id)\n }\n } else if (message.method === 'channels.message') {\n emit(channel, 'message', message.params.data.message)\n } else if (message.method === 'channels.system.pong') {\n if (\n (message.params.channel_id === channelId.get(channel)) ||\n // Skip channelId check if channelId is not known yet\n (channelId.get(channel) == null)\n ) {\n ping(channel)\n }\n } else {\n messageQueue.set(channel, [...(messageQueue.get(channel) || []), message])\n dequeueMessage(channel)\n }\n}\n\nfunction wrapCallErrorMessage (message) {\n const [{ message: details } = {}] = message.error.data || []\n if (details) {\n return new Error(`${message.error.message}: ${details}`)\n }\n return new Error(message.error.message)\n}\n\nexport function call (channel, method, params) {\n return new Promise((resolve, reject) => {\n const id = sequence.set(channel, sequence.get(channel) + 1).get(channel)\n rpcCallbacks.get(channel).set(id, (message) => {\n if (message.result) return resolve(message.result)\n if (message.error) return reject(wrapCallErrorMessage(message))\n })\n send(channel, { jsonrpc: '2.0', method, id, params })\n })\n}\n\nexport function disconnect (channel) {\n websockets.get(channel).close()\n clearTimeout(pingTimeoutId.get(channel))\n clearTimeout(pongTimeoutId.get(channel))\n}\n\nexport async function initialize (channel, { url, ...channelOptions }) {\n options.set(channel, channelOptions)\n fsm.set(channel, {\n handler: channelOptions.existingFsmId ? awaitingReconnection : awaitingConnection\n })\n eventEmitters.set(channel, new EventEmitter())\n sequence.set(channel, 0)\n rpcCallbacks.set(channel, new Map())\n\n const wsUrl = new URL(url)\n Object.entries(channelOptions)\n .filter(([key]) => !['sign', 'debug'].includes(key))\n .forEach(([key, value]) => wsUrl.searchParams.set(pascalToSnake(key), value))\n wsUrl.searchParams.set('protocol', 'json-rpc')\n changeStatus(channel, 'connecting')\n const ws = new W3CWebSocket(wsUrl.toString())\n await new Promise((resolve, reject) => Object.assign(ws, {\n onerror: reject,\n onopen: () => {\n resolve()\n changeStatus(channel, 'connected')\n if (channelOptions.reconnectTx) {\n enterState(channel, { handler: channelOpen })\n setTimeout(async () => changeState(channel,\n (await call(channel, 'channels.get.offchain_state', {})).signed_tx\n ))\n }\n ping(channel)\n },\n onclose: () => {\n changeStatus(channel, 'disconnected')\n clearTimeout(pingTimeoutId.get(channel))\n clearTimeout(pongTimeoutId.get(channel))\n },\n onmessage: ({ data }) => onMessage(channel, data)\n }))\n websockets.set(channel, ws)\n}\n"],"file":"internal.js"}
|