@aeternity/aepp-sdk 12.0.0 → 12.1.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/aepp-sdk.browser-script.js +1 -1
- package/dist/aepp-sdk.browser-script.js.LICENSE.txt +0 -15
- package/dist/aepp-sdk.browser-script.js.map +1 -1
- package/dist/aepp-sdk.browser.js +2 -1
- package/dist/aepp-sdk.browser.js.LICENSE.txt +1 -0
- package/dist/aepp-sdk.browser.js.map +1 -1
- package/dist/aepp-sdk.js +20764 -1
- package/dist/aepp-sdk.js.map +1 -1
- package/es/AeSdk.d.ts +7 -7
- package/es/AeSdk.mjs.map +1 -1
- package/es/AeSdkAepp.d.ts +4 -3
- package/es/AeSdkAepp.mjs +2 -1
- package/es/AeSdkAepp.mjs.map +1 -1
- package/es/AeSdkBase.d.ts +22 -21
- package/es/AeSdkBase.mjs +25 -21
- package/es/AeSdkBase.mjs.map +1 -1
- package/es/AeSdkWallet.d.ts +4 -3
- package/es/AeSdkWallet.mjs +5 -1
- package/es/AeSdkWallet.mjs.map +1 -1
- package/es/Node.d.ts +7 -10
- package/es/Node.mjs +63 -57
- package/es/Node.mjs.map +1 -1
- package/es/account/Base.d.ts +7 -4
- package/es/account/Base.mjs +3 -3
- package/es/account/Base.mjs.map +1 -1
- package/es/account/Memory.d.ts +5 -4
- package/es/account/Memory.mjs +24 -2
- package/es/account/Memory.mjs.map +1 -1
- package/es/account/Rpc.d.ts +6 -6
- package/es/account/Rpc.mjs +3 -2
- package/es/account/Rpc.mjs.map +1 -1
- package/es/aens.d.ts +27 -14
- package/es/aens.mjs +27 -21
- package/es/aens.mjs.map +1 -1
- package/es/aepp-wallet-communication/connection/Browser.d.ts +2 -1
- package/es/aepp-wallet-communication/connection/Browser.mjs +5 -2
- package/es/aepp-wallet-communication/connection/Browser.mjs.map +1 -1
- package/es/aepp-wallet-communication/connection/BrowserRuntime.d.ts +1 -0
- package/es/aepp-wallet-communication/connection/BrowserRuntime.mjs +1 -0
- package/es/aepp-wallet-communication/connection/BrowserRuntime.mjs.map +1 -1
- package/es/aepp-wallet-communication/connection/BrowserWindowMessage.d.ts +1 -0
- package/es/aepp-wallet-communication/connection/BrowserWindowMessage.mjs +5 -1
- package/es/aepp-wallet-communication/connection/BrowserWindowMessage.mjs.map +1 -1
- package/es/aepp-wallet-communication/connection-proxy.d.ts +1 -0
- package/es/aepp-wallet-communication/connection-proxy.mjs +1 -0
- package/es/aepp-wallet-communication/connection-proxy.mjs.map +1 -1
- package/es/aepp-wallet-communication/rpc/RpcClient.d.ts +1 -0
- package/es/aepp-wallet-communication/rpc/RpcClient.mjs +5 -5
- package/es/aepp-wallet-communication/rpc/RpcClient.mjs.map +1 -1
- package/es/aepp-wallet-communication/rpc/types.d.ts +8 -8
- package/es/aepp-wallet-communication/rpc/types.mjs.map +1 -1
- package/es/aepp-wallet-communication/schema.d.ts +17 -2
- package/es/aepp-wallet-communication/schema.mjs +54 -17
- package/es/aepp-wallet-communication/schema.mjs.map +1 -1
- package/es/aepp-wallet-communication/wallet-detector.d.ts +2 -1
- package/es/aepp-wallet-communication/wallet-detector.mjs +2 -3
- package/es/aepp-wallet-communication/wallet-detector.mjs.map +1 -1
- package/es/apis/node/models/index.d.ts +6 -2
- package/es/apis/node/models/index.mjs.map +1 -1
- package/es/apis/node/models/mappers.mjs +4 -2
- package/es/apis/node/models/mappers.mjs.map +1 -1
- package/es/chain.d.ts +92 -64
- package/es/chain.mjs +190 -154
- package/es/chain.mjs.map +1 -1
- package/es/channel/handlers.d.ts +3 -3
- package/es/channel/handlers.mjs +42 -44
- package/es/channel/handlers.mjs.map +1 -1
- package/es/channel/index.d.ts +43 -52
- package/es/channel/index.mjs +46 -49
- package/es/channel/index.mjs.map +1 -1
- package/es/channel/internal.d.ts +16 -15
- package/es/channel/internal.mjs +67 -62
- package/es/channel/internal.mjs.map +1 -1
- package/es/contract/Compiler.d.ts +1 -0
- package/es/contract/Compiler.mjs +5 -4
- package/es/contract/Compiler.mjs.map +1 -1
- package/es/contract/aci.d.ts +17 -15
- package/es/contract/aci.mjs +58 -45
- package/es/contract/aci.mjs.map +1 -1
- package/es/contract/ga.d.ts +16 -15
- package/es/contract/ga.mjs +12 -7
- package/es/contract/ga.mjs.map +1 -1
- package/es/contract/methods.d.ts +9 -6
- package/es/contract/methods.mjs +9 -6
- package/es/contract/methods.mjs.map +1 -1
- package/es/deprecated/index.d.ts +143 -0
- package/es/deprecated/index.mjs +162 -0
- package/es/deprecated/index.mjs.map +1 -0
- package/es/deprecated/methods.d.ts +18 -0
- package/es/deprecated/methods.mjs +26 -0
- package/es/deprecated/methods.mjs.map +1 -0
- package/es/index.d.ts +4 -1
- package/es/index.mjs +4 -1
- package/es/index.mjs.map +1 -1
- package/es/oracle.d.ts +69 -62
- package/es/oracle.mjs +121 -103
- package/es/oracle.mjs.map +1 -1
- package/es/spend.d.ts +16 -15
- package/es/spend.mjs +19 -30
- package/es/spend.mjs.map +1 -1
- package/es/tx/builder/address.d.ts +25 -0
- package/es/tx/builder/address.mjs +45 -0
- package/es/tx/builder/address.mjs.map +1 -0
- package/es/tx/builder/constants.d.ts +55 -26
- package/es/tx/builder/constants.mjs +60 -38
- package/es/tx/builder/constants.mjs.map +1 -1
- package/es/tx/builder/field-types/coin-amount.d.ts +13 -0
- package/es/tx/builder/field-types/coin-amount.mjs +26 -0
- package/es/tx/builder/field-types/coin-amount.mjs.map +1 -0
- package/es/tx/builder/field-types/deposit.d.ts +15 -0
- package/es/tx/builder/field-types/deposit.mjs +19 -0
- package/es/tx/builder/field-types/deposit.mjs.map +1 -0
- package/es/tx/builder/field-types/fee.d.ts +25 -0
- package/es/tx/{min-fee.mjs → builder/field-types/fee.mjs} +62 -60
- package/es/tx/builder/field-types/fee.mjs.map +1 -0
- package/es/tx/builder/field-types/field.d.ts +6 -0
- package/es/tx/builder/field-types/field.mjs +15 -0
- package/es/tx/builder/field-types/field.mjs.map +1 -0
- package/es/tx/builder/field-types/gas-limit.d.ts +12 -0
- package/es/tx/builder/field-types/gas-limit.mjs +33 -0
- package/es/tx/builder/field-types/gas-limit.mjs.map +1 -0
- package/es/tx/builder/field-types/gas-price.d.ts +8 -0
- package/es/tx/builder/field-types/gas-price.mjs +18 -0
- package/es/tx/builder/field-types/gas-price.mjs.map +1 -0
- package/es/tx/builder/field-types/index.d.ts +70 -0
- package/es/tx/builder/field-types/index.mjs +25 -0
- package/es/tx/builder/field-types/index.mjs.map +1 -0
- package/es/tx/builder/field-types/name-fee.d.ts +20 -0
- package/es/tx/builder/field-types/name-fee.mjs +24 -0
- package/es/tx/builder/field-types/name-fee.mjs.map +1 -0
- package/es/tx/builder/field-types/name-id.d.ts +14 -0
- package/es/tx/builder/field-types/name-id.mjs +19 -0
- package/es/tx/builder/field-types/name-id.mjs.map +1 -0
- package/es/tx/builder/field-types/name.d.ts +13 -0
- package/es/tx/builder/field-types/name.mjs +18 -0
- package/es/tx/builder/field-types/name.mjs.map +1 -0
- package/es/tx/builder/field-types/short-u-int.d.ts +6 -0
- package/es/tx/builder/field-types/short-u-int.mjs +12 -0
- package/es/tx/builder/field-types/short-u-int.mjs.map +1 -0
- package/es/tx/builder/field-types/u-int.d.ts +8 -0
- package/es/tx/builder/field-types/u-int.mjs +14 -0
- package/es/tx/builder/field-types/u-int.mjs.map +1 -0
- package/es/tx/builder/helpers.d.ts +27 -33
- package/es/tx/builder/helpers.mjs +41 -47
- package/es/tx/builder/helpers.mjs.map +1 -1
- package/es/tx/builder/index.d.ts +25 -12
- package/es/tx/builder/index.mjs +74 -83
- package/es/tx/builder/index.mjs.map +1 -1
- package/es/tx/builder/schema.d.ts +995 -144
- package/es/tx/builder/schema.mjs +121 -170
- package/es/tx/builder/schema.mjs.map +1 -1
- package/es/tx/index.d.ts +28 -27
- package/es/tx/index.mjs +97 -117
- package/es/tx/index.mjs.map +1 -1
- package/es/tx/validator.d.ts +4 -3
- package/es/tx/validator.mjs +79 -92
- package/es/tx/validator.mjs.map +1 -1
- package/es/typings/@aeternity__argon2-browser/index.d.mjs.map +1 -1
- package/es/typings/@aeternity__uuid/index.d.mjs.map +1 -1
- package/es/typings/bip32-path/index.d.mjs.map +1 -1
- package/es/typings/blakejs/index.d.mjs.map +1 -1
- package/es/typings/sha-js/index.d.mjs +2 -0
- package/es/typings/sha-js/index.d.mjs.map +1 -0
- package/es/typings/tweetnacl-auth/index.d.mjs.map +1 -1
- package/es/utils/amount-formatter.d.ts +9 -9
- package/es/utils/amount-formatter.mjs +17 -17
- package/es/utils/amount-formatter.mjs.map +1 -1
- package/es/utils/autorest.mjs +7 -7
- package/es/utils/autorest.mjs.map +1 -1
- package/es/utils/bignumber.mjs +2 -1
- package/es/utils/bignumber.mjs.map +1 -1
- package/es/utils/bytes.mjs +1 -1
- package/es/utils/bytes.mjs.map +1 -1
- package/es/utils/crypto.d.ts +8 -23
- package/es/utils/crypto.mjs +15 -41
- package/es/utils/crypto.mjs.map +1 -1
- package/es/utils/encoder-types.d.ts +61 -0
- package/es/utils/encoder-types.mjs +36 -0
- package/es/utils/encoder-types.mjs.map +1 -0
- package/es/utils/encoder.d.ts +6 -7
- package/es/utils/encoder.mjs +42 -26
- package/es/utils/encoder.mjs.map +1 -1
- package/es/utils/errors.d.ts +1 -11
- package/es/utils/errors.mjs +4 -20
- package/es/utils/errors.mjs.map +1 -1
- package/es/utils/hd-wallet.d.ts +18 -2
- package/es/utils/hd-wallet.mjs +64 -34
- package/es/utils/hd-wallet.mjs.map +1 -1
- package/es/utils/json-big.mjs +2 -2
- package/es/utils/json-big.mjs.map +1 -1
- package/es/utils/keystore.mjs +4 -2
- package/es/utils/keystore.mjs.map +1 -1
- package/es/utils/mptree.d.ts +2 -2
- package/es/utils/mptree.mjs +11 -6
- package/es/utils/mptree.mjs.map +1 -1
- package/es/utils/other.d.ts +8 -2
- package/es/utils/other.mjs +15 -3
- package/es/utils/other.mjs.map +1 -1
- package/es/utils/semver-satisfies.d.ts +1 -1
- package/es/utils/semver-satisfies.mjs +2 -2
- package/es/utils/semver-satisfies.mjs.map +1 -1
- package/es/utils/string.mjs.map +1 -1
- package/package.json +35 -33
- package/src/AeSdk.ts +30 -27
- package/src/AeSdkAepp.ts +93 -84
- package/src/AeSdkBase.ts +148 -130
- package/src/AeSdkWallet.ts +172 -156
- package/src/Node.ts +108 -102
- package/src/account/Base.ts +42 -32
- package/src/account/Memory.ts +45 -30
- package/src/account/Rpc.ts +32 -30
- package/src/aens.ts +124 -108
- package/src/aepp-wallet-communication/connection/Browser.ts +18 -15
- package/src/aepp-wallet-communication/connection/BrowserRuntime.ts +22 -21
- package/src/aepp-wallet-communication/connection/BrowserWindowMessage.ts +63 -52
- package/src/aepp-wallet-communication/connection-proxy.ts +8 -7
- package/src/aepp-wallet-communication/rpc/RpcClient.ts +67 -61
- package/src/aepp-wallet-communication/rpc/types.ts +32 -32
- package/src/aepp-wallet-communication/schema.ts +117 -74
- package/src/aepp-wallet-communication/wallet-detector.ts +29 -28
- package/src/apis/node/code-model-v4.yaml +54 -20
- package/src/apis/node/models/index.ts +6 -2
- package/src/apis/node/models/mappers.ts +4 -2
- package/src/chain.ts +286 -228
- package/src/channel/handlers.ts +424 -372
- package/src/channel/index.ts +285 -251
- package/src/channel/internal.ts +248 -232
- package/src/contract/Compiler.ts +22 -21
- package/src/contract/aci.ts +267 -258
- package/src/contract/ga.ts +93 -72
- package/src/contract/methods.ts +32 -27
- package/src/deprecated/index.ts +170 -0
- package/src/deprecated/methods.ts +25 -0
- package/src/index.ts +37 -32
- package/src/oracle.ts +211 -189
- package/src/spend.ts +82 -70
- package/src/tx/builder/address.ts +50 -0
- package/src/tx/builder/constants.ts +82 -52
- package/src/tx/builder/field-types/coin-amount.ts +27 -0
- package/src/tx/builder/field-types/deposit.ts +21 -0
- package/src/tx/builder/field-types/fee.ts +143 -0
- package/src/tx/builder/field-types/field.ts +9 -0
- package/src/tx/builder/field-types/gas-limit.ts +41 -0
- package/src/tx/builder/field-types/gas-price.ts +16 -0
- package/src/tx/builder/field-types/index.ts +45 -0
- package/src/tx/builder/field-types/name-fee.ts +32 -0
- package/src/tx/builder/field-types/name-id.ts +20 -0
- package/src/tx/builder/field-types/name.ts +18 -0
- package/src/tx/builder/field-types/short-u-int.ts +11 -0
- package/src/tx/builder/field-types/u-int.ts +16 -0
- package/src/tx/builder/helpers.ts +112 -117
- package/src/tx/builder/index.ts +203 -197
- package/src/tx/builder/schema.ts +421 -465
- package/src/tx/index.ts +128 -135
- package/src/tx/validator.ts +165 -161
- package/src/typings/@aeternity__argon2-browser/index.d.ts +1 -1
- package/src/typings/@aeternity__uuid/index.d.ts +3 -1
- package/src/typings/bip32-path/index.d.ts +6 -6
- package/src/typings/blakejs/index.d.ts +4 -32
- package/src/typings/sha-js/index.d.ts +5 -0
- package/src/typings/tweetnacl-auth/index.d.ts +2 -2
- package/src/utils/amount-formatter.ts +41 -41
- package/src/utils/autorest.ts +57 -54
- package/src/utils/bignumber.ts +7 -6
- package/src/utils/bytes.ts +19 -19
- package/src/utils/crypto.ts +82 -94
- package/src/utils/encoder-types.ts +63 -0
- package/src/utils/encoder.ts +104 -56
- package/src/utils/errors.ts +246 -264
- package/src/utils/hd-wallet.ts +114 -82
- package/src/utils/json-big.ts +16 -15
- package/src/utils/keystore.ts +65 -62
- package/src/utils/mptree.ts +59 -56
- package/src/utils/other.ts +26 -18
- package/src/utils/semver-satisfies.ts +15 -11
- package/src/utils/string.ts +10 -10
- package/es/tx/builder/field-types.d.ts +0 -62
- package/es/tx/builder/field-types.mjs +0 -126
- package/es/tx/builder/field-types.mjs.map +0 -1
- package/es/tx/min-fee.d.ts +0 -20
- package/es/tx/min-fee.mjs.map +0 -1
- package/src/tx/builder/field-types.ts +0 -111
- package/src/tx/min-fee.ts +0 -136
package/es/channel/internal.mjs
CHANGED
|
@@ -70,7 +70,8 @@ function enterState(channel, nextState) {
|
|
|
70
70
|
|
|
71
71
|
if ((nextState === null || nextState === void 0 ? void 0 : (_nextState$handler = nextState.handler) === null || _nextState$handler === void 0 ? void 0 : _nextState$handler.enter) != null) {
|
|
72
72
|
nextState.handler.enter(channel);
|
|
73
|
-
}
|
|
73
|
+
} // eslint-disable-next-line @typescript-eslint/no-use-before-define
|
|
74
|
+
|
|
74
75
|
|
|
75
76
|
void dequeueAction(channel);
|
|
76
77
|
}
|
|
@@ -94,30 +95,20 @@ export function send(channel, message) {
|
|
|
94
95
|
if (debug) console.log('Send message: ', message);
|
|
95
96
|
(_websockets$get = websockets.get(channel)) === null || _websockets$get === void 0 ? void 0 : _websockets$get.send(JsonBig.stringify(message));
|
|
96
97
|
}
|
|
97
|
-
export function enqueueAction(channel, guard, action) {
|
|
98
|
-
var _actionQueue$get;
|
|
99
|
-
|
|
100
|
-
const queue = (_actionQueue$get = actionQueue.get(channel)) !== null && _actionQueue$get !== void 0 ? _actionQueue$get : [];
|
|
101
|
-
actionQueue.set(channel, [...queue, {
|
|
102
|
-
guard,
|
|
103
|
-
action
|
|
104
|
-
}]);
|
|
105
|
-
void dequeueAction(channel);
|
|
106
|
-
}
|
|
107
98
|
|
|
108
99
|
async function dequeueAction(channel) {
|
|
109
|
-
var _actionQueue$
|
|
100
|
+
var _actionQueue$get;
|
|
110
101
|
|
|
111
102
|
const locked = actionQueueLocked.get(channel);
|
|
112
|
-
const queue = (_actionQueue$
|
|
103
|
+
const queue = (_actionQueue$get = actionQueue.get(channel)) !== null && _actionQueue$get !== void 0 ? _actionQueue$get : [];
|
|
113
104
|
|
|
114
105
|
if (Boolean(locked) || queue.length === 0) {
|
|
115
106
|
return;
|
|
116
107
|
}
|
|
117
108
|
|
|
118
|
-
const
|
|
119
|
-
if (
|
|
120
|
-
const index = queue.findIndex(action => action.guard(channel,
|
|
109
|
+
const singleFsm = fsm.get(channel);
|
|
110
|
+
if (singleFsm == null) return;
|
|
111
|
+
const index = queue.findIndex(action => action.guard(channel, singleFsm));
|
|
121
112
|
|
|
122
113
|
if (index === -1) {
|
|
123
114
|
return;
|
|
@@ -125,19 +116,30 @@ async function dequeueAction(channel) {
|
|
|
125
116
|
|
|
126
117
|
actionQueue.set(channel, queue.filter((_, i) => index !== i));
|
|
127
118
|
actionQueueLocked.set(channel, true);
|
|
128
|
-
const nextState = await Promise.resolve(queue[index].action(channel,
|
|
119
|
+
const nextState = await Promise.resolve(queue[index].action(channel, singleFsm));
|
|
129
120
|
actionQueueLocked.set(channel, false);
|
|
130
121
|
enterState(channel, nextState);
|
|
131
122
|
}
|
|
132
123
|
|
|
124
|
+
export function enqueueAction(channel, guard, action) {
|
|
125
|
+
var _actionQueue$get2;
|
|
126
|
+
|
|
127
|
+
const queue = (_actionQueue$get2 = actionQueue.get(channel)) !== null && _actionQueue$get2 !== void 0 ? _actionQueue$get2 : [];
|
|
128
|
+
actionQueue.set(channel, [...queue, {
|
|
129
|
+
guard,
|
|
130
|
+
action
|
|
131
|
+
}]);
|
|
132
|
+
void dequeueAction(channel);
|
|
133
|
+
}
|
|
134
|
+
|
|
133
135
|
async function handleMessage(channel, message) {
|
|
134
136
|
const fsmState = fsm.get(channel);
|
|
135
137
|
if (fsmState == null) throw new UnknownChannelStateError();
|
|
136
138
|
const {
|
|
137
139
|
handler,
|
|
138
|
-
state
|
|
140
|
+
state: st
|
|
139
141
|
} = fsmState;
|
|
140
|
-
enterState(channel, await Promise.resolve(handler(channel, message,
|
|
142
|
+
enterState(channel, await Promise.resolve(handler(channel, message, st)));
|
|
141
143
|
}
|
|
142
144
|
|
|
143
145
|
async function dequeueMessage(channel) {
|
|
@@ -166,6 +168,16 @@ async function dequeueMessage(channel) {
|
|
|
166
168
|
messageQueueLocked.set(channel, false);
|
|
167
169
|
}
|
|
168
170
|
|
|
171
|
+
export function disconnect(channel) {
|
|
172
|
+
var _websockets$get2;
|
|
173
|
+
|
|
174
|
+
(_websockets$get2 = websockets.get(channel)) === null || _websockets$get2 === void 0 ? void 0 : _websockets$get2.close();
|
|
175
|
+
const pingTimeoutIdValue = pingTimeoutId.get(channel);
|
|
176
|
+
const pongTimeoutIdValue = pongTimeoutId.get(channel);
|
|
177
|
+
if (pingTimeoutIdValue != null) clearTimeout(pingTimeoutIdValue);
|
|
178
|
+
if (pongTimeoutIdValue != null) clearTimeout(pongTimeoutIdValue);
|
|
179
|
+
}
|
|
180
|
+
|
|
169
181
|
function ping(channel) {
|
|
170
182
|
const pingTimeoutIdValue = pingTimeoutId.get(channel);
|
|
171
183
|
const pongTimeoutIdValue = pongTimeoutId.get(channel);
|
|
@@ -215,8 +227,8 @@ function onMessage(channel, data) {
|
|
|
215
227
|
}
|
|
216
228
|
|
|
217
229
|
if (message.method === 'channels.system.pong') {
|
|
218
|
-
if (message.params.channel_id === channelId.get(channel)
|
|
219
|
-
channelId.get(channel) == null) {
|
|
230
|
+
if (message.params.channel_id === channelId.get(channel) // Skip channelId check if channelId is not known yet
|
|
231
|
+
|| channelId.get(channel) == null) {
|
|
220
232
|
ping(channel);
|
|
221
233
|
}
|
|
222
234
|
|
|
@@ -228,14 +240,12 @@ function onMessage(channel, data) {
|
|
|
228
240
|
}
|
|
229
241
|
|
|
230
242
|
export async function call(channel, method, params) {
|
|
231
|
-
return
|
|
243
|
+
return new Promise((resolve, reject) => {
|
|
232
244
|
var _sequence$get, _sequence$set$get, _rpcCallbacks$get3;
|
|
233
245
|
|
|
234
246
|
const currentSequence = (_sequence$get = sequence.get(channel)) !== null && _sequence$get !== void 0 ? _sequence$get : 0;
|
|
235
247
|
const id = (_sequence$set$get = sequence.set(channel, currentSequence + 1).get(channel)) !== null && _sequence$set$get !== void 0 ? _sequence$set$get : 1;
|
|
236
248
|
(_rpcCallbacks$get3 = rpcCallbacks.get(channel)) === null || _rpcCallbacks$get3 === void 0 ? void 0 : _rpcCallbacks$get3.set(id, message => {
|
|
237
|
-
if (message.result != null) return resolve(message.result);
|
|
238
|
-
|
|
239
249
|
if (message.error != null) {
|
|
240
250
|
var _message$error$data;
|
|
241
251
|
|
|
@@ -246,6 +256,8 @@ export async function call(channel, method, params) {
|
|
|
246
256
|
}] = (_message$error$data = message.error.data) !== null && _message$error$data !== void 0 ? _message$error$data : [];
|
|
247
257
|
return reject(new ChannelCallError(message.error.message + details));
|
|
248
258
|
}
|
|
259
|
+
|
|
260
|
+
return resolve(message.result);
|
|
249
261
|
});
|
|
250
262
|
send(channel, {
|
|
251
263
|
jsonrpc: '2.0',
|
|
@@ -255,15 +267,6 @@ export async function call(channel, method, params) {
|
|
|
255
267
|
});
|
|
256
268
|
});
|
|
257
269
|
}
|
|
258
|
-
export function disconnect(channel) {
|
|
259
|
-
var _websockets$get2;
|
|
260
|
-
|
|
261
|
-
(_websockets$get2 = websockets.get(channel)) === null || _websockets$get2 === void 0 ? void 0 : _websockets$get2.close();
|
|
262
|
-
const pingTimeoutIdValue = pingTimeoutId.get(channel);
|
|
263
|
-
const pongTimeoutIdValue = pongTimeoutId.get(channel);
|
|
264
|
-
if (pingTimeoutIdValue != null) clearTimeout(pingTimeoutIdValue);
|
|
265
|
-
if (pongTimeoutIdValue != null) clearTimeout(pongTimeoutIdValue);
|
|
266
|
-
}
|
|
267
270
|
export async function initialize(channel, connectionHandler, openHandler, _ref) {
|
|
268
271
|
let {
|
|
269
272
|
url,
|
|
@@ -293,36 +296,38 @@ export async function initialize(channel, connectionHandler, openHandler, _ref)
|
|
|
293
296
|
wsUrl.searchParams.set('protocol', 'json-rpc');
|
|
294
297
|
changeStatus(channel, 'connecting');
|
|
295
298
|
const ws = new W3CWebSocket(wsUrl.toString());
|
|
296
|
-
await new Promise((resolve, reject) =>
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
299
|
+
await new Promise((resolve, reject) => {
|
|
300
|
+
Object.assign(ws, {
|
|
301
|
+
onerror: reject,
|
|
302
|
+
onopen: async () => {
|
|
303
|
+
resolve();
|
|
304
|
+
changeStatus(channel, 'connected');
|
|
305
|
+
|
|
306
|
+
if (channelOptions.reconnectTx != null) {
|
|
307
|
+
enterState(channel, {
|
|
308
|
+
handler: openHandler
|
|
309
|
+
});
|
|
310
|
+
const signedTx = (await call(channel, 'channels.get.offchain_state', {})).signed_tx;
|
|
311
|
+
changeState(channel, signedTx);
|
|
312
|
+
}
|
|
313
|
+
|
|
314
|
+
ping(channel);
|
|
315
|
+
},
|
|
316
|
+
onclose: () => {
|
|
317
|
+
changeStatus(channel, 'disconnected');
|
|
318
|
+
const pingTimeoutIdValue = pingTimeoutId.get(channel);
|
|
319
|
+
const pongTimeoutIdValue = pongTimeoutId.get(channel);
|
|
320
|
+
if (pingTimeoutIdValue != null) clearTimeout(pingTimeoutIdValue);
|
|
321
|
+
if (pongTimeoutIdValue != null) clearTimeout(pongTimeoutIdValue);
|
|
322
|
+
},
|
|
323
|
+
onmessage: _ref4 => {
|
|
324
|
+
let {
|
|
325
|
+
data
|
|
326
|
+
} = _ref4;
|
|
327
|
+
return onMessage(channel, data);
|
|
308
328
|
}
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
},
|
|
312
|
-
onclose: () => {
|
|
313
|
-
changeStatus(channel, 'disconnected');
|
|
314
|
-
const pingTimeoutIdValue = pingTimeoutId.get(channel);
|
|
315
|
-
const pongTimeoutIdValue = pongTimeoutId.get(channel);
|
|
316
|
-
if (pingTimeoutIdValue != null) clearTimeout(pingTimeoutIdValue);
|
|
317
|
-
if (pongTimeoutIdValue != null) clearTimeout(pongTimeoutIdValue);
|
|
318
|
-
},
|
|
319
|
-
onmessage: _ref4 => {
|
|
320
|
-
let {
|
|
321
|
-
data
|
|
322
|
-
} = _ref4;
|
|
323
|
-
return onMessage(channel, data);
|
|
324
|
-
}
|
|
325
|
-
}));
|
|
329
|
+
});
|
|
330
|
+
});
|
|
326
331
|
websockets.set(channel, ws);
|
|
327
332
|
}
|
|
328
333
|
//# sourceMappingURL=internal.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"internal.mjs","names":["JsonBig","pascalToSnake","ChannelCallError","ChannelPingTimedOutError","UnknownChannelStateError","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","eventName","rest","get","enterState","nextState","set","handler","enter","dequeueAction","changeStatus","newStatus","prevStatus","changeState","newState","send","message","debug","console","log","stringify","enqueueAction","guard","action","queue","locked","Boolean","length","index","findIndex","filter","_","i","Promise","resolve","handleMessage","fsmState","dequeueMessage","messages","shift","error","ping","pingTimeoutIdValue","pongTimeoutIdValue","clearTimeout","setTimeout","jsonrpc","method","params","disconnect","onMessage","data","parse","id","callback","delete","channel_id","push","call","reject","currentSequence","result","details","close","initialize","connectionHandler","openHandler","url","channelOptions","EventEmitter","Map","wsUrl","URL","Object","entries","key","forEach","value","searchParams","ws","W3CWebSocket","toString","assign","onerror","onopen","reconnectTx","signedTx","signed_tx","onclose","onmessage"],"sources":["../../src/channel/internal.ts"],"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 BigNumber from 'bignumber.js'\nimport Channel from '.'\nimport JsonBig from '../utils/json-big'\nimport { pascalToSnake } from '../utils/string'\nimport { EncodedData } from '../utils/encoder'\nimport { ChannelCallError, ChannelPingTimedOutError, UnknownChannelStateError } from '../utils/errors'\n\ninterface ChannelAction {\n guard: (channel: Channel, state?: ChannelFsm) => boolean\n action: (channel: Channel, state?: ChannelFsm) => ChannelFsm\n}\n\nexport type SignTxWithTag = (tag: string, tx: EncodedData<'tx'>, options?: object) => Promise<EncodedData<'tx'>>\n// TODO: SignTx shouldn't return number or null\nexport type SignTx = (tx: EncodedData<'tx'>, options?: object) => Promise<EncodedData<'tx'> | number | null>\n\nexport interface ChannelOptions {\n existingFsmId?: string\n url: string\n role: 'initiator' | 'responder'\n initiatorId: EncodedData<'ak'>\n responderId: EncodedData<'ak'>\n pushAmount: number\n initiatorAmount: BigNumber\n responderAmount: BigNumber\n channelReserve?: BigNumber | number\n signedTx?: string\n ttl?: number\n host: string\n port: number\n lockPeriod: number\n existingChannelId?: string\n offChainTx?: string\n reconnectTx?: string\n timeoutIdle?: number\n timeoutFundingCreate?: number\n timeoutFundingSign?: number\n timeoutFundingLock?: number\n timeoutSign?: number\n timeoutAccept?: number\n timeoutInitialized?: number\n timeoutAwaitingOpen?: number\n statePassword?: string\n debug: boolean\n sign: SignTxWithTag\n offchainTx?: string\n}\n\nexport interface ChannelHandler extends Function {\n enter?: Function\n}\n\nexport interface ChannelState {\n signedTx: any\n resolve: Function\n reject: Function\n sign: SignTx\n handler?: ChannelHandler\n onOnChainTx?: Function\n onOwnWithdrawLocked?: Function\n onWithdrawLocked?: Function\n onOwnDepositLocked?: Function\n onDepositLocked?: Function\n closeTx?: string\n}\n\nexport interface ChannelFsm {\n handler: ChannelHandler\n state?: ChannelState | {\n resolve: Function\n reject: Function\n }\n}\n\nexport interface ChannelMessage {\n id?: number\n jsonrpc: string\n method: string\n params: any\n payload?: any\n data?: any\n error?: ChannelMessageError\n}\n\ninterface ChannelMessageError {\n code: number\n message: string\n data: [{\n message: string\n code: number\n }]\n request: ChannelMessage\n}\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\n// TODO: move to Channel instance to avoid is-null checks and for easier debugging\nexport const options = new WeakMap<Channel, ChannelOptions>()\nexport const status = new WeakMap<Channel, string>()\nexport const state = new WeakMap<Channel, EncodedData<'tx'>>()\nconst fsm = new WeakMap<Channel, ChannelFsm>()\nconst websockets = new WeakMap<Channel, W3CWebSocket>()\nexport const eventEmitters = new WeakMap<Channel, EventEmitter>()\nconst messageQueue = new WeakMap<Channel, string[]>()\nconst messageQueueLocked = new WeakMap<Channel, boolean>()\nconst actionQueue = new WeakMap<Channel, ChannelAction[]>()\nconst actionQueueLocked = new WeakMap<Channel, boolean>()\nconst sequence = new WeakMap<Channel, number>()\nexport const channelId = new WeakMap<Channel, string>()\nconst rpcCallbacks = new WeakMap<Channel, Map<number, Function>>()\nconst pingTimeoutId = new WeakMap<Channel, NodeJS.Timeout>()\nconst pongTimeoutId = new WeakMap<Channel, NodeJS.Timeout>()\nexport const fsmId = new WeakMap<Channel, string>()\n\nexport function emit (channel: Channel, ...args: any[]): void {\n const [eventName, ...rest] = args\n eventEmitters.get(channel)?.emit(eventName, ...rest)\n}\n\nfunction enterState (channel: Channel, nextState: ChannelFsm): void {\n if (nextState == null) {\n throw new UnknownChannelStateError()\n }\n fsm.set(channel, nextState)\n if (nextState?.handler?.enter != null) {\n nextState.handler.enter(channel)\n }\n void dequeueAction(channel)\n}\n\nexport function changeStatus (channel: Channel, newStatus: string): void {\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: Channel, newState: EncodedData<'tx'>): void {\n state.set(channel, newState)\n emit(channel, 'stateChanged', newState)\n}\n\nexport function send (channel: Channel, message: ChannelMessage): void {\n const debug: boolean = options.get(channel)?.debug ?? false\n if (debug) console.log('Send message: ', message)\n\n websockets.get(channel)?.send(JsonBig.stringify(message))\n}\n\nexport function enqueueAction (channel: Channel, guard: ChannelAction['guard'], action: ChannelAction['action']): void {\n const queue = actionQueue.get(channel) ?? []\n actionQueue.set(channel, [\n ...queue,\n { guard, action }\n ])\n void dequeueAction(channel)\n}\n\nasync function dequeueAction (channel: Channel): Promise<void> {\n const locked = actionQueueLocked.get(channel)\n const queue = actionQueue.get(channel) ?? []\n if (Boolean(locked) || queue.length === 0) {\n return\n }\n const state = fsm.get(channel)\n if (state == null) return\n const index = queue.findIndex((action: ChannelAction) => action.guard(channel, state))\n if (index === -1) {\n return\n }\n actionQueue.set(channel, queue.filter((_: ChannelAction, i: number) => index !== i))\n actionQueueLocked.set(channel, true)\n const nextState: ChannelFsm = await Promise.resolve(queue[index].action(channel, state))\n actionQueueLocked.set(channel, false)\n enterState(channel, nextState)\n}\n\nasync function handleMessage (channel: Channel, message: string): Promise<void> {\n const fsmState = fsm.get(channel)\n if (fsmState == null) throw new UnknownChannelStateError()\n const { handler, state } = fsmState\n enterState(channel, await Promise.resolve(handler(channel, message, state)))\n}\n\nasync function dequeueMessage (channel: Channel): Promise<void> {\n const locked: boolean = messageQueueLocked.get(channel) ?? false\n if (locked) return\n const messages: string[] = messageQueue.get(channel) ?? []\n if (messages.length === 0) return\n messageQueueLocked.set(channel, true)\n while (messages.length > 0) {\n const message: string = messages.shift() ?? ''\n try {\n await handleMessage(channel, message)\n } catch (error) {\n console.error('Error handling incoming message:')\n console.error(message)\n console.error(error)\n }\n }\n messageQueueLocked.set(channel, false)\n}\n\nfunction ping (channel: Channel): void {\n const pingTimeoutIdValue = pingTimeoutId.get(channel)\n const pongTimeoutIdValue = pongTimeoutId.get(channel)\n if (pingTimeoutIdValue != null) clearTimeout(pingTimeoutIdValue)\n if (pongTimeoutIdValue != null) clearTimeout(pongTimeoutIdValue)\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 ChannelPingTimedOutError())\n }, PONG_TIMEOUT_MS))\n }, PING_TIMEOUT_MS))\n}\n\nfunction onMessage (channel: Channel, data: string): void {\n const message = JsonBig.parse(data)\n const debug: boolean = options.get(channel)?.debug ?? false\n if (debug) console.log('Receive message: ', message)\n if (message.id != null) {\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 return\n }\n if (message.method === 'channels.message') {\n emit(channel, 'message', message.params.data.message)\n return\n }\n 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 return\n }\n messageQueue.get(channel)?.push(message)\n void dequeueMessage(channel)\n}\n\nexport async function call (channel: Channel, method: string, params: any): Promise<any> {\n return await new Promise((resolve, reject) => {\n const currentSequence: number = sequence.get(channel) ?? 0\n const id = sequence.set(channel, currentSequence + 1).get(channel) ?? 1\n rpcCallbacks.get(channel)?.set(id, (message: {\n result: PromiseLike<any>\n error?: ChannelMessageError }) => {\n if (message.result != null) return resolve(message.result)\n if (message.error != null) {\n const [{ message: details } = { message: '' }] = message.error.data ?? []\n return reject(new ChannelCallError(message.error.message + details))\n }\n })\n send(channel, { jsonrpc: '2.0', method, id, params })\n })\n}\n\nexport function disconnect (channel: Channel): void {\n websockets.get(channel)?.close()\n const pingTimeoutIdValue = pingTimeoutId.get(channel)\n const pongTimeoutIdValue = pongTimeoutId.get(channel)\n if (pingTimeoutIdValue != null) clearTimeout(pingTimeoutIdValue)\n if (pongTimeoutIdValue != null) clearTimeout(pongTimeoutIdValue)\n}\n\nexport async function initialize (\n channel: Channel,\n connectionHandler: Function,\n openHandler: Function,\n { url, ...channelOptions }: ChannelOptions\n): Promise<void> {\n options.set(channel, { url, ...channelOptions })\n fsm.set(channel, { handler: connectionHandler })\n eventEmitters.set(channel, new EventEmitter())\n sequence.set(channel, 0)\n rpcCallbacks.set(channel, new Map())\n messageQueue.set(channel, [])\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<void>((resolve, reject) => Object.assign(ws, {\n onerror: reject,\n onopen: async () => {\n resolve()\n changeStatus(channel, 'connected')\n if (channelOptions.reconnectTx != null) {\n enterState(channel, { handler: openHandler })\n const signedTx = (await call(channel, 'channels.get.offchain_state', {})).signed_tx\n changeState(channel, signedTx)\n }\n ping(channel)\n },\n onclose: () => {\n changeStatus(channel, 'disconnected')\n const pingTimeoutIdValue = pingTimeoutId.get(channel)\n const pongTimeoutIdValue = pongTimeoutId.get(channel)\n if (pingTimeoutIdValue != null) clearTimeout(pingTimeoutIdValue)\n if (pongTimeoutIdValue != null) clearTimeout(pongTimeoutIdValue)\n },\n onmessage: ({ data }: {data: string}) => onMessage(channel, data)\n }))\n websockets.set(channel, ws)\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"internal.mjs","names":["JsonBig","pascalToSnake","ChannelCallError","ChannelPingTimedOutError","UnknownChannelStateError","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","eventName","rest","get","enterState","nextState","set","handler","enter","dequeueAction","changeStatus","newStatus","prevStatus","changeState","newState","send","message","debug","console","log","stringify","locked","queue","Boolean","length","singleFsm","index","findIndex","action","guard","filter","_","i","Promise","resolve","enqueueAction","handleMessage","fsmState","st","dequeueMessage","messages","shift","error","disconnect","close","pingTimeoutIdValue","pongTimeoutIdValue","clearTimeout","ping","setTimeout","jsonrpc","method","params","onMessage","data","parse","id","callback","delete","channel_id","push","call","reject","currentSequence","details","result","initialize","connectionHandler","openHandler","url","channelOptions","EventEmitter","Map","wsUrl","URL","Object","entries","key","forEach","value","searchParams","ws","W3CWebSocket","toString","assign","onerror","onopen","reconnectTx","signedTx","signed_tx","onclose","onmessage"],"sources":["../../src/channel/internal.ts"],"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 BigNumber from 'bignumber.js';\nimport type Channel from '.';\nimport JsonBig from '../utils/json-big';\nimport { pascalToSnake } from '../utils/string';\nimport { Encoded } from '../utils/encoder';\nimport {\n BaseError, ChannelCallError, ChannelPingTimedOutError, UnknownChannelStateError,\n} from '../utils/errors';\n\ninterface ChannelAction {\n guard: (channel: Channel, state?: ChannelFsm) => boolean;\n action: (channel: Channel, state?: ChannelFsm) => ChannelFsm;\n}\n\nexport type SignTxWithTag = (tag: string, tx: Encoded.Transaction, options?: object) => (\n Promise<Encoded.Transaction>\n);\n// TODO: SignTx shouldn't return number or null\nexport type SignTx = (tx: Encoded.Transaction, options?: object) => (\n Promise<Encoded.Transaction | number | null>\n);\n\nexport interface ChannelOptions {\n existingFsmId?: string;\n url: string;\n role: 'initiator' | 'responder';\n initiatorId: Encoded.AccountAddress;\n responderId: Encoded.AccountAddress;\n pushAmount: number;\n initiatorAmount: BigNumber;\n responderAmount: BigNumber;\n channelReserve?: BigNumber | number;\n signedTx?: string;\n ttl?: number;\n host: string;\n port: number;\n lockPeriod: number;\n existingChannelId?: string;\n offChainTx?: string;\n reconnectTx?: string;\n timeoutIdle?: number;\n timeoutFundingCreate?: number;\n timeoutFundingSign?: number;\n timeoutFundingLock?: number;\n timeoutSign?: number;\n timeoutAccept?: number;\n timeoutInitialized?: number;\n timeoutAwaitingOpen?: number;\n statePassword?: string;\n debug: boolean;\n sign: SignTxWithTag;\n offchainTx?: string;\n}\n\nexport interface ChannelHandler extends Function {\n enter?: Function;\n}\n\nexport interface ChannelState {\n signedTx: any;\n resolve: (r?: any) => void;\n reject: (e: BaseError) => void;\n sign: SignTx;\n handler?: ChannelHandler;\n onOnChainTx?: (tx: Encoded.Transaction) => void;\n onOwnWithdrawLocked?: () => void;\n onWithdrawLocked?: () => void;\n onOwnDepositLocked?: () => void;\n onDepositLocked?: () => void;\n closeTx?: string;\n}\n\nexport interface ChannelFsm {\n handler: ChannelHandler;\n state?: ChannelState | {\n resolve: Function;\n reject: Function;\n };\n}\n\nexport interface ChannelMessage {\n id?: number;\n jsonrpc: string;\n method: string;\n params: any;\n payload?: any;\n data?: any;\n error?: ChannelMessageError;\n}\n\ninterface ChannelMessageError {\n code: number;\n message: string;\n data: [{\n message: string;\n code: number;\n }];\n request: ChannelMessage;\n}\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\n// TODO: move to Channel instance to avoid is-null checks and for easier debugging\nexport const options = new WeakMap<Channel, ChannelOptions>();\nexport const status = new WeakMap<Channel, string>();\nexport const state = new WeakMap<Channel, Encoded.Transaction>();\nconst fsm = new WeakMap<Channel, ChannelFsm>();\nconst websockets = new WeakMap<Channel, W3CWebSocket>();\nexport const eventEmitters = new WeakMap<Channel, EventEmitter>();\nconst messageQueue = new WeakMap<Channel, string[]>();\nconst messageQueueLocked = new WeakMap<Channel, boolean>();\nconst actionQueue = new WeakMap<Channel, ChannelAction[]>();\nconst actionQueueLocked = new WeakMap<Channel, boolean>();\nconst sequence = new WeakMap<Channel, number>();\nexport const channelId = new WeakMap<Channel, string>();\nconst rpcCallbacks = new WeakMap<Channel, Map<number, Function>>();\nconst pingTimeoutId = new WeakMap<Channel, NodeJS.Timeout>();\nconst pongTimeoutId = new WeakMap<Channel, NodeJS.Timeout>();\nexport const fsmId = new WeakMap<Channel, string>();\n\nexport function emit(channel: Channel, ...args: any[]): void {\n const [eventName, ...rest] = args;\n eventEmitters.get(channel)?.emit(eventName, ...rest);\n}\n\nfunction enterState(channel: Channel, nextState: ChannelFsm): void {\n if (nextState == null) {\n throw new UnknownChannelStateError();\n }\n fsm.set(channel, nextState);\n if (nextState?.handler?.enter != null) {\n nextState.handler.enter(channel);\n }\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n void dequeueAction(channel);\n}\n\nexport function changeStatus(channel: Channel, newStatus: string): void {\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: Channel, newState: Encoded.Transaction): void {\n state.set(channel, newState);\n emit(channel, 'stateChanged', newState);\n}\n\nexport function send(channel: Channel, message: ChannelMessage): void {\n const debug: boolean = options.get(channel)?.debug ?? false;\n if (debug) console.log('Send message: ', message);\n\n websockets.get(channel)?.send(JsonBig.stringify(message));\n}\n\nasync function dequeueAction(channel: Channel): Promise<void> {\n const locked = actionQueueLocked.get(channel);\n const queue = actionQueue.get(channel) ?? [];\n if (Boolean(locked) || queue.length === 0) {\n return;\n }\n const singleFsm = fsm.get(channel);\n if (singleFsm == null) return;\n const index = queue.findIndex((action: ChannelAction) => action.guard(channel, singleFsm));\n if (index === -1) {\n return;\n }\n actionQueue.set(channel, queue.filter((_: ChannelAction, i: number) => index !== i));\n actionQueueLocked.set(channel, true);\n const nextState: ChannelFsm = await Promise.resolve(queue[index].action(channel, singleFsm));\n actionQueueLocked.set(channel, false);\n enterState(channel, nextState);\n}\n\nexport function enqueueAction(\n channel: Channel,\n guard: ChannelAction['guard'],\n action: ChannelAction['action'],\n): void {\n const queue = actionQueue.get(channel) ?? [];\n actionQueue.set(channel, [\n ...queue,\n { guard, action },\n ]);\n void dequeueAction(channel);\n}\n\nasync function handleMessage(channel: Channel, message: string): Promise<void> {\n const fsmState = fsm.get(channel);\n if (fsmState == null) throw new UnknownChannelStateError();\n const { handler, state: st } = fsmState;\n enterState(channel, await Promise.resolve(handler(channel, message, st)));\n}\n\nasync function dequeueMessage(channel: Channel): Promise<void> {\n const locked: boolean = messageQueueLocked.get(channel) ?? false;\n if (locked) return;\n const messages: string[] = messageQueue.get(channel) ?? [];\n if (messages.length === 0) return;\n messageQueueLocked.set(channel, true);\n while (messages.length > 0) {\n const message: string = messages.shift() ?? '';\n try {\n await handleMessage(channel, message);\n } catch (error) {\n console.error('Error handling incoming message:');\n console.error(message);\n console.error(error);\n }\n }\n messageQueueLocked.set(channel, false);\n}\n\nexport function disconnect(channel: Channel): void {\n websockets.get(channel)?.close();\n const pingTimeoutIdValue = pingTimeoutId.get(channel);\n const pongTimeoutIdValue = pongTimeoutId.get(channel);\n if (pingTimeoutIdValue != null) clearTimeout(pingTimeoutIdValue);\n if (pongTimeoutIdValue != null) clearTimeout(pongTimeoutIdValue);\n}\n\nfunction ping(channel: Channel): void {\n const pingTimeoutIdValue = pingTimeoutId.get(channel);\n const pongTimeoutIdValue = pongTimeoutId.get(channel);\n if (pingTimeoutIdValue != null) clearTimeout(pingTimeoutIdValue);\n if (pongTimeoutIdValue != null) clearTimeout(pongTimeoutIdValue);\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 ChannelPingTimedOutError());\n }, PONG_TIMEOUT_MS));\n }, PING_TIMEOUT_MS));\n}\n\nfunction onMessage(channel: Channel, data: string): void {\n const message = JsonBig.parse(data);\n const debug: boolean = options.get(channel)?.debug ?? false;\n if (debug) console.log('Receive message: ', message);\n if (message.id != null) {\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 return;\n }\n if (message.method === 'channels.message') {\n emit(channel, 'message', message.params.data.message);\n return;\n }\n 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 return;\n }\n messageQueue.get(channel)?.push(message);\n void dequeueMessage(channel);\n}\n\nexport async function call(channel: Channel, method: string, params: any): Promise<any> {\n return new Promise((resolve, reject) => {\n const currentSequence: number = sequence.get(channel) ?? 0;\n const id = sequence.set(channel, currentSequence + 1).get(channel) ?? 1;\n rpcCallbacks.get(channel)?.set(\n id,\n (message: { result: PromiseLike<any>; error?: ChannelMessageError }) => {\n if (message.error != null) {\n const [{ message: details } = { message: '' }] = message.error.data ?? [];\n return reject(new ChannelCallError(message.error.message + details));\n }\n return resolve(message.result);\n },\n );\n send(channel, {\n jsonrpc: '2.0', method, id, params,\n });\n });\n}\n\nexport async function initialize(\n channel: Channel,\n connectionHandler: Function,\n openHandler: Function,\n { url, ...channelOptions }: ChannelOptions,\n): Promise<void> {\n options.set(channel, { url, ...channelOptions });\n fsm.set(channel, { handler: connectionHandler });\n eventEmitters.set(channel, new EventEmitter());\n sequence.set(channel, 0);\n rpcCallbacks.set(channel, new Map());\n messageQueue.set(channel, []);\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<void>((resolve, reject) => {\n Object.assign(ws, {\n onerror: reject,\n onopen: async () => {\n resolve();\n changeStatus(channel, 'connected');\n if (channelOptions.reconnectTx != null) {\n enterState(channel, { handler: openHandler });\n const signedTx = (await call(channel, 'channels.get.offchain_state', {})).signed_tx;\n changeState(channel, signedTx);\n }\n ping(channel);\n },\n onclose: () => {\n changeStatus(channel, 'disconnected');\n const pingTimeoutIdValue = pingTimeoutId.get(channel);\n const pongTimeoutIdValue = pongTimeoutId.get(channel);\n if (pingTimeoutIdValue != null) clearTimeout(pingTimeoutIdValue);\n if (pongTimeoutIdValue != null) clearTimeout(pongTimeoutIdValue);\n },\n onmessage: ({ data }: { data: string }) => onMessage(channel, data),\n });\n });\n websockets.set(channel, ws);\n}\n"],"mappings":"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"}
|
|
@@ -3,6 +3,7 @@ import { Compiler as CompilerApi } from '../apis/compiler';
|
|
|
3
3
|
* Contract Compiler
|
|
4
4
|
*
|
|
5
5
|
* This class include api call's related to contract compiler functionality.
|
|
6
|
+
* @category contract
|
|
6
7
|
* @example Compiler('COMPILER_URL')
|
|
7
8
|
*/
|
|
8
9
|
export default class Compiler extends CompilerApi {
|
package/es/contract/Compiler.mjs
CHANGED
|
@@ -21,6 +21,7 @@ import { genErrorFormatterPolicy, genVersionCheckPolicy } from "../utils/autores
|
|
|
21
21
|
* Contract Compiler
|
|
22
22
|
*
|
|
23
23
|
* This class include api call's related to contract compiler functionality.
|
|
24
|
+
* @category contract
|
|
24
25
|
* @example Compiler('COMPILER_URL')
|
|
25
26
|
*/
|
|
26
27
|
export default class Compiler extends CompilerApi {
|
|
@@ -39,13 +40,13 @@ export default class Compiler extends CompilerApi {
|
|
|
39
40
|
let message = '';
|
|
40
41
|
|
|
41
42
|
if ('reason' in body) {
|
|
42
|
-
message +=
|
|
43
|
-
body.info != null ? ` (${JSON.stringify(body.info)})` : ''
|
|
43
|
+
message += ` ${body.reason}${body.parameter != null ? ` in ${body.parameter}` : '' // TODO: revising after improving documentation https://github.com/aeternity/aesophia_http/issues/78
|
|
44
|
+
}${body.info != null ? ` (${JSON.stringify(body.info)})` : ''}`;
|
|
44
45
|
}
|
|
45
46
|
|
|
46
47
|
if (Array.isArray(body)) {
|
|
47
|
-
message +=
|
|
48
|
-
.join('\n')
|
|
48
|
+
message += `\n${body.map(e => `${e.type}:${e.pos.line}:${e.pos.col}: ${e.message}${e.context != null ? `(${e.context})` : ''}`).map(e => e.trim()) // TODO: remove after fixing https://github.com/aeternity/aesophia_http/issues/80
|
|
49
|
+
.join('\n')}`;
|
|
49
50
|
}
|
|
50
51
|
|
|
51
52
|
return message;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Compiler.mjs","names":["Compiler","CompilerApi","genErrorFormatterPolicy","genVersionCheckPolicy","constructor","compilerUrl","ignoreVersion","allowInsecureConnection","additionalPolicies","body","message","reason","parameter","info","JSON","stringify","Array","isArray","map","e","type","pos","line","col","context","trim","join","versionPromise","aPIVersion","then","apiVersion","pipeline","addPolicy"],"sources":["../../src/contract/Compiler.ts"],"sourcesContent":["/*\n * ISC License (ISC)\n * Copyright (c) 2022 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 */\nimport { Compiler as CompilerApi, ErrorModel, CompilerError } from '../apis/compiler'
|
|
1
|
+
{"version":3,"file":"Compiler.mjs","names":["Compiler","CompilerApi","genErrorFormatterPolicy","genVersionCheckPolicy","constructor","compilerUrl","ignoreVersion","allowInsecureConnection","additionalPolicies","body","message","reason","parameter","info","JSON","stringify","Array","isArray","map","e","type","pos","line","col","context","trim","join","versionPromise","aPIVersion","then","apiVersion","pipeline","addPolicy"],"sources":["../../src/contract/Compiler.ts"],"sourcesContent":["/*\n * ISC License (ISC)\n * Copyright (c) 2022 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 */\nimport { Compiler as CompilerApi, ErrorModel, CompilerError } from '../apis/compiler';\nimport { genErrorFormatterPolicy, genVersionCheckPolicy } from '../utils/autorest';\n\ntype GeneralCompilerError = ErrorModel & {\n info?: object;\n parameter?: string;\n};\n\n/**\n * Contract Compiler\n *\n * This class include api call's related to contract compiler functionality.\n * @category contract\n * @example Compiler('COMPILER_URL')\n */\nexport default class Compiler extends CompilerApi {\n /**\n * @param compilerUrl - Url for compiler API\n * @param options - Options\n * @param options.ignoreVersion - Don't check compiler version\n */\n constructor(compilerUrl: string, { ignoreVersion }: { ignoreVersion?: boolean } = {}) {\n super(compilerUrl, {\n allowInsecureConnection: true,\n additionalPolicies: [\n genErrorFormatterPolicy((body: GeneralCompilerError | CompilerError[]) => {\n let message = '';\n if ('reason' in body) {\n message += ` ${body.reason\n }${body.parameter != null ? ` in ${body.parameter}` : ''\n // TODO: revising after improving documentation https://github.com/aeternity/aesophia_http/issues/78\n }${body.info != null ? ` (${JSON.stringify(body.info)})` : ''}`;\n }\n if (Array.isArray(body)) {\n message += `\\n${body\n .map((e) => `${e.type}:${e.pos.line}:${e.pos.col}: ${e.message}${e.context != null ? `(${e.context})` : ''}`)\n .map((e) => e.trim()) // TODO: remove after fixing https://github.com/aeternity/aesophia_http/issues/80\n .join('\\n')}`;\n }\n return message;\n }),\n ],\n });\n if (ignoreVersion !== true) {\n const versionPromise = this.aPIVersion().then(({ apiVersion }) => apiVersion);\n this.pipeline.addPolicy(\n genVersionCheckPolicy('compiler', '/api-version', versionPromise, '6.1.0', '7.0.0'),\n );\n }\n }\n}\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;SACSA,QAAQ,IAAIC,W;SACZC,uB,EAAyBC,qB;;AAOlC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAMH,QAAN,SAAuBC,WAAvB,CAAmC;EAChD;AACF;AACA;AACA;AACA;EACEG,WAAW,CAACC,WAAD,EAA2E;IAAA,IAArD;MAAEC;IAAF,CAAqD,uEAAJ,EAAI;IACpF,MAAMD,WAAN,EAAmB;MACjBE,uBAAuB,EAAE,IADR;MAEjBC,kBAAkB,EAAE,CAClBN,uBAAuB,CAAEO,IAAD,IAAkD;QACxE,IAAIC,OAAO,GAAG,EAAd;;QACA,IAAI,YAAYD,IAAhB,EAAsB;UACpBC,OAAO,IAAK,IAAGD,IAAI,CAACE,MACnB,GAAEF,IAAI,CAACG,SAAL,IAAkB,IAAlB,GAA0B,OAAMH,IAAI,CAACG,SAAU,EAA/C,GAAmD,EAD3C,CAET;UACD,GAAEH,IAAI,CAACI,IAAL,IAAa,IAAb,GAAqB,KAAIC,IAAI,CAACC,SAAL,CAAeN,IAAI,CAACI,IAApB,CAA0B,GAAnD,GAAwD,EAAG,EAH9D;QAID;;QACD,IAAIG,KAAK,CAACC,OAAN,CAAcR,IAAd,CAAJ,EAAyB;UACvBC,OAAO,IAAK,KAAID,IAAI,CACjBS,GADa,CACRC,CAAD,IAAQ,GAAEA,CAAC,CAACC,IAAK,IAAGD,CAAC,CAACE,GAAF,CAAMC,IAAK,IAAGH,CAAC,CAACE,GAAF,CAAME,GAAI,KAAIJ,CAAC,CAACT,OAAQ,GAAES,CAAC,CAACK,OAAF,IAAa,IAAb,GAAqB,IAAGL,CAAC,CAACK,OAAQ,GAAlC,GAAuC,EAAG,EAD7F,EAEbN,GAFa,CAERC,CAAD,IAAOA,CAAC,CAACM,IAAF,EAFE,EAEQ;UAFR,CAGbC,IAHa,CAGR,IAHQ,CAGF,EAHd;QAID;;QACD,OAAOhB,OAAP;MACD,CAfsB,CADL;IAFH,CAAnB;;IAqBA,IAAIJ,aAAa,KAAK,IAAtB,EAA4B;MAC1B,MAAMqB,cAAc,GAAG,KAAKC,UAAL,GAAkBC,IAAlB,CAAuB;QAAA,IAAC;UAAEC;QAAF,CAAD;QAAA,OAAoBA,UAApB;MAAA,CAAvB,CAAvB;MACA,KAAKC,QAAL,CAAcC,SAAd,CACE7B,qBAAqB,CAAC,UAAD,EAAa,cAAb,EAA6BwB,cAA7B,EAA6C,OAA7C,EAAsD,OAAtD,CADvB;IAGD;EACF;;AAlC+C"}
|
package/es/contract/aci.d.ts
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
import { AensName } from '../tx/builder/
|
|
1
|
+
import { AensName } from '../tx/builder/constants';
|
|
2
2
|
import { send } from '../spend';
|
|
3
|
-
import {
|
|
3
|
+
import { Encoded } from '../utils/encoder';
|
|
4
4
|
import { Aci as BaseAci } from '../apis/compiler';
|
|
5
|
+
import { ContractCallReturnType } from '../apis/node';
|
|
5
6
|
import Compiler from './Compiler';
|
|
6
7
|
import Node from '../Node';
|
|
7
8
|
import AccountBase from '../account/Base';
|
|
@@ -26,7 +27,7 @@ interface Aci extends BaseAci {
|
|
|
26
27
|
externalEncodedAci: any[];
|
|
27
28
|
}
|
|
28
29
|
interface Event {
|
|
29
|
-
address:
|
|
30
|
+
address: Encoded.ContractAddress;
|
|
30
31
|
data: string;
|
|
31
32
|
topics: Array<string | number>;
|
|
32
33
|
}
|
|
@@ -35,7 +36,7 @@ interface DecodedEvent {
|
|
|
35
36
|
args: unknown;
|
|
36
37
|
contract: {
|
|
37
38
|
name: string;
|
|
38
|
-
address:
|
|
39
|
+
address: Encoded.ContractAddress;
|
|
39
40
|
};
|
|
40
41
|
}
|
|
41
42
|
declare type TxData = Awaited<ReturnType<typeof send>>;
|
|
@@ -44,9 +45,9 @@ export interface ContractInstance {
|
|
|
44
45
|
_name: string;
|
|
45
46
|
calldata: any;
|
|
46
47
|
source?: string;
|
|
47
|
-
bytecode?:
|
|
48
|
+
bytecode?: Encoded.ContractBytearray;
|
|
48
49
|
deployInfo: {
|
|
49
|
-
address?:
|
|
50
|
+
address?: Encoded.ContractAddress;
|
|
50
51
|
result?: {
|
|
51
52
|
callerId: string;
|
|
52
53
|
callerNonce: string;
|
|
@@ -55,16 +56,16 @@ export interface ContractInstance {
|
|
|
55
56
|
gasUsed: number;
|
|
56
57
|
height: number;
|
|
57
58
|
log: any[];
|
|
58
|
-
returnType:
|
|
59
|
+
returnType: ContractCallReturnType;
|
|
59
60
|
returnValue: string;
|
|
60
61
|
};
|
|
61
|
-
owner?:
|
|
62
|
+
owner?: Encoded.AccountAddress;
|
|
62
63
|
transaction?: string;
|
|
63
64
|
rawTx?: string;
|
|
64
65
|
txData?: TxData;
|
|
65
66
|
};
|
|
66
67
|
options: any;
|
|
67
|
-
compile: (options?: {}) => Promise<
|
|
68
|
+
compile: (options?: {}) => Promise<Encoded.ContractBytearray>;
|
|
68
69
|
_estimateGas: (name: string, params: any[], options: object) => Promise<number>;
|
|
69
70
|
deploy: (params?: any[], options?: object) => Promise<any>;
|
|
70
71
|
call: (fn: string, params?: any[], options?: {}) => Promise<{
|
|
@@ -73,14 +74,14 @@ export interface ContractInstance {
|
|
|
73
74
|
txData: TxData;
|
|
74
75
|
rawTx: string;
|
|
75
76
|
result: {
|
|
76
|
-
callerId:
|
|
77
|
+
callerId: Encoded.AccountAddress;
|
|
77
78
|
callerNonce: number;
|
|
78
|
-
contractId:
|
|
79
|
+
contractId: Encoded.ContractAddress;
|
|
79
80
|
gasPrice: number;
|
|
80
81
|
gasUsed: number;
|
|
81
82
|
height: number;
|
|
82
83
|
log: any[];
|
|
83
|
-
returnType:
|
|
84
|
+
returnType: ContractCallReturnType;
|
|
84
85
|
returnValue: string;
|
|
85
86
|
};
|
|
86
87
|
decodedResult: any;
|
|
@@ -95,6 +96,7 @@ export interface ContractInstance {
|
|
|
95
96
|
/**
|
|
96
97
|
* Generate contract ACI object with predefined js methods for contract usage - can be used for
|
|
97
98
|
* creating a reference to already deployed contracts
|
|
99
|
+
* @category contract
|
|
98
100
|
* @param options - Options object
|
|
99
101
|
* @returns JS Contract API
|
|
100
102
|
* @example
|
|
@@ -111,13 +113,13 @@ export interface ContractInstance {
|
|
|
111
113
|
* stateful or not
|
|
112
114
|
*/
|
|
113
115
|
export default function getContractInstance({ onAccount, onCompiler, onNode, source, bytecode, aci: _aci, contractAddress, fileSystem, validateBytecode, ...otherOptions }: {
|
|
114
|
-
onAccount
|
|
116
|
+
onAccount?: AccountBase;
|
|
115
117
|
onCompiler: Compiler;
|
|
116
118
|
onNode: Node;
|
|
117
119
|
source?: string;
|
|
118
|
-
bytecode?:
|
|
120
|
+
bytecode?: Encoded.ContractBytearray;
|
|
119
121
|
aci?: Aci;
|
|
120
|
-
contractAddress?:
|
|
122
|
+
contractAddress?: Encoded.ContractAddress | AensName;
|
|
121
123
|
fileSystem?: Record<string, string>;
|
|
122
124
|
validateBytecode?: boolean;
|
|
123
125
|
[key: string]: any;
|