@aeternity/aepp-sdk 12.0.0 → 12.1.2

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.
Files changed (283) hide show
  1. package/dist/aepp-sdk.browser-script.js +1 -1
  2. package/dist/aepp-sdk.browser-script.js.LICENSE.txt +0 -15
  3. package/dist/aepp-sdk.browser-script.js.map +1 -1
  4. package/dist/aepp-sdk.browser.js +2 -1
  5. package/dist/aepp-sdk.browser.js.LICENSE.txt +1 -0
  6. package/dist/aepp-sdk.browser.js.map +1 -1
  7. package/dist/aepp-sdk.js +20765 -1
  8. package/dist/aepp-sdk.js.map +1 -1
  9. package/es/AeSdk.d.ts +7 -7
  10. package/es/AeSdk.mjs.map +1 -1
  11. package/es/AeSdkAepp.d.ts +4 -3
  12. package/es/AeSdkAepp.mjs +2 -1
  13. package/es/AeSdkAepp.mjs.map +1 -1
  14. package/es/AeSdkBase.d.ts +22 -21
  15. package/es/AeSdkBase.mjs +25 -21
  16. package/es/AeSdkBase.mjs.map +1 -1
  17. package/es/AeSdkWallet.d.ts +4 -3
  18. package/es/AeSdkWallet.mjs +5 -1
  19. package/es/AeSdkWallet.mjs.map +1 -1
  20. package/es/Node.d.ts +7 -10
  21. package/es/Node.mjs +63 -57
  22. package/es/Node.mjs.map +1 -1
  23. package/es/account/Base.d.ts +7 -4
  24. package/es/account/Base.mjs +3 -3
  25. package/es/account/Base.mjs.map +1 -1
  26. package/es/account/Memory.d.ts +5 -4
  27. package/es/account/Memory.mjs +24 -2
  28. package/es/account/Memory.mjs.map +1 -1
  29. package/es/account/Rpc.d.ts +6 -6
  30. package/es/account/Rpc.mjs +3 -2
  31. package/es/account/Rpc.mjs.map +1 -1
  32. package/es/aens.d.ts +27 -14
  33. package/es/aens.mjs +27 -21
  34. package/es/aens.mjs.map +1 -1
  35. package/es/aepp-wallet-communication/connection/Browser.d.ts +2 -1
  36. package/es/aepp-wallet-communication/connection/Browser.mjs +5 -2
  37. package/es/aepp-wallet-communication/connection/Browser.mjs.map +1 -1
  38. package/es/aepp-wallet-communication/connection/BrowserRuntime.d.ts +1 -0
  39. package/es/aepp-wallet-communication/connection/BrowserRuntime.mjs +1 -0
  40. package/es/aepp-wallet-communication/connection/BrowserRuntime.mjs.map +1 -1
  41. package/es/aepp-wallet-communication/connection/BrowserWindowMessage.d.ts +1 -0
  42. package/es/aepp-wallet-communication/connection/BrowserWindowMessage.mjs +5 -1
  43. package/es/aepp-wallet-communication/connection/BrowserWindowMessage.mjs.map +1 -1
  44. package/es/aepp-wallet-communication/connection-proxy.d.ts +1 -0
  45. package/es/aepp-wallet-communication/connection-proxy.mjs +1 -0
  46. package/es/aepp-wallet-communication/connection-proxy.mjs.map +1 -1
  47. package/es/aepp-wallet-communication/rpc/RpcClient.d.ts +1 -0
  48. package/es/aepp-wallet-communication/rpc/RpcClient.mjs +5 -5
  49. package/es/aepp-wallet-communication/rpc/RpcClient.mjs.map +1 -1
  50. package/es/aepp-wallet-communication/rpc/types.d.ts +8 -8
  51. package/es/aepp-wallet-communication/rpc/types.mjs.map +1 -1
  52. package/es/aepp-wallet-communication/schema.d.ts +17 -2
  53. package/es/aepp-wallet-communication/schema.mjs +54 -17
  54. package/es/aepp-wallet-communication/schema.mjs.map +1 -1
  55. package/es/aepp-wallet-communication/wallet-detector.d.ts +2 -1
  56. package/es/aepp-wallet-communication/wallet-detector.mjs +2 -3
  57. package/es/aepp-wallet-communication/wallet-detector.mjs.map +1 -1
  58. package/es/apis/node/models/index.d.ts +6 -2
  59. package/es/apis/node/models/index.mjs.map +1 -1
  60. package/es/apis/node/models/mappers.mjs +4 -2
  61. package/es/apis/node/models/mappers.mjs.map +1 -1
  62. package/es/chain.d.ts +92 -64
  63. package/es/chain.mjs +190 -154
  64. package/es/chain.mjs.map +1 -1
  65. package/es/channel/handlers.d.ts +3 -3
  66. package/es/channel/handlers.mjs +42 -44
  67. package/es/channel/handlers.mjs.map +1 -1
  68. package/es/channel/index.d.ts +43 -52
  69. package/es/channel/index.mjs +46 -49
  70. package/es/channel/index.mjs.map +1 -1
  71. package/es/channel/internal.d.ts +16 -15
  72. package/es/channel/internal.mjs +67 -62
  73. package/es/channel/internal.mjs.map +1 -1
  74. package/es/contract/Compiler.d.ts +1 -0
  75. package/es/contract/Compiler.mjs +5 -4
  76. package/es/contract/Compiler.mjs.map +1 -1
  77. package/es/contract/aci.d.ts +17 -15
  78. package/es/contract/aci.mjs +58 -45
  79. package/es/contract/aci.mjs.map +1 -1
  80. package/es/contract/ga.d.ts +16 -15
  81. package/es/contract/ga.mjs +12 -7
  82. package/es/contract/ga.mjs.map +1 -1
  83. package/es/contract/methods.d.ts +9 -6
  84. package/es/contract/methods.mjs +9 -6
  85. package/es/contract/methods.mjs.map +1 -1
  86. package/es/deprecated/index.d.ts +143 -0
  87. package/es/deprecated/index.mjs +162 -0
  88. package/es/deprecated/index.mjs.map +1 -0
  89. package/es/deprecated/methods.d.ts +18 -0
  90. package/es/deprecated/methods.mjs +26 -0
  91. package/es/deprecated/methods.mjs.map +1 -0
  92. package/es/index.d.ts +4 -1
  93. package/es/index.mjs +4 -1
  94. package/es/index.mjs.map +1 -1
  95. package/es/oracle.d.ts +69 -62
  96. package/es/oracle.mjs +121 -103
  97. package/es/oracle.mjs.map +1 -1
  98. package/es/spend.d.ts +16 -15
  99. package/es/spend.mjs +19 -30
  100. package/es/spend.mjs.map +1 -1
  101. package/es/tx/builder/address.d.ts +25 -0
  102. package/es/tx/builder/address.mjs +45 -0
  103. package/es/tx/builder/address.mjs.map +1 -0
  104. package/es/tx/builder/constants.d.ts +55 -26
  105. package/es/tx/builder/constants.mjs +60 -38
  106. package/es/tx/builder/constants.mjs.map +1 -1
  107. package/es/tx/builder/field-types/coin-amount.d.ts +13 -0
  108. package/es/tx/builder/field-types/coin-amount.mjs +26 -0
  109. package/es/tx/builder/field-types/coin-amount.mjs.map +1 -0
  110. package/es/tx/builder/field-types/deposit.d.ts +15 -0
  111. package/es/tx/builder/field-types/deposit.mjs +19 -0
  112. package/es/tx/builder/field-types/deposit.mjs.map +1 -0
  113. package/es/tx/builder/field-types/fee.d.ts +25 -0
  114. package/es/tx/{min-fee.mjs → builder/field-types/fee.mjs} +62 -60
  115. package/es/tx/builder/field-types/fee.mjs.map +1 -0
  116. package/es/tx/builder/field-types/field.d.ts +6 -0
  117. package/es/tx/builder/field-types/field.mjs +15 -0
  118. package/es/tx/builder/field-types/field.mjs.map +1 -0
  119. package/es/tx/builder/field-types/gas-limit.d.ts +12 -0
  120. package/es/tx/builder/field-types/gas-limit.mjs +33 -0
  121. package/es/tx/builder/field-types/gas-limit.mjs.map +1 -0
  122. package/es/tx/builder/field-types/gas-price.d.ts +8 -0
  123. package/es/tx/builder/field-types/gas-price.mjs +18 -0
  124. package/es/tx/builder/field-types/gas-price.mjs.map +1 -0
  125. package/es/tx/builder/field-types/index.d.ts +70 -0
  126. package/es/tx/builder/field-types/index.mjs +25 -0
  127. package/es/tx/builder/field-types/index.mjs.map +1 -0
  128. package/es/tx/builder/field-types/name-fee.d.ts +20 -0
  129. package/es/tx/builder/field-types/name-fee.mjs +24 -0
  130. package/es/tx/builder/field-types/name-fee.mjs.map +1 -0
  131. package/es/tx/builder/field-types/name-id.d.ts +14 -0
  132. package/es/tx/builder/field-types/name-id.mjs +19 -0
  133. package/es/tx/builder/field-types/name-id.mjs.map +1 -0
  134. package/es/tx/builder/field-types/name.d.ts +13 -0
  135. package/es/tx/builder/field-types/name.mjs +18 -0
  136. package/es/tx/builder/field-types/name.mjs.map +1 -0
  137. package/es/tx/builder/field-types/short-u-int.d.ts +6 -0
  138. package/es/tx/builder/field-types/short-u-int.mjs +12 -0
  139. package/es/tx/builder/field-types/short-u-int.mjs.map +1 -0
  140. package/es/tx/builder/field-types/u-int.d.ts +8 -0
  141. package/es/tx/builder/field-types/u-int.mjs +14 -0
  142. package/es/tx/builder/field-types/u-int.mjs.map +1 -0
  143. package/es/tx/builder/helpers.d.ts +27 -33
  144. package/es/tx/builder/helpers.mjs +41 -47
  145. package/es/tx/builder/helpers.mjs.map +1 -1
  146. package/es/tx/builder/index.d.ts +25 -12
  147. package/es/tx/builder/index.mjs +74 -83
  148. package/es/tx/builder/index.mjs.map +1 -1
  149. package/es/tx/builder/schema.d.ts +995 -144
  150. package/es/tx/builder/schema.mjs +121 -170
  151. package/es/tx/builder/schema.mjs.map +1 -1
  152. package/es/tx/index.d.ts +28 -27
  153. package/es/tx/index.mjs +97 -117
  154. package/es/tx/index.mjs.map +1 -1
  155. package/es/tx/validator.d.ts +4 -3
  156. package/es/tx/validator.mjs +79 -92
  157. package/es/tx/validator.mjs.map +1 -1
  158. package/es/typings/@aeternity__argon2-browser/index.d.mjs.map +1 -1
  159. package/es/typings/@aeternity__uuid/index.d.mjs.map +1 -1
  160. package/es/typings/bip32-path/index.d.mjs.map +1 -1
  161. package/es/typings/blakejs/index.d.mjs.map +1 -1
  162. package/es/typings/sha-js/index.d.mjs +2 -0
  163. package/es/typings/sha-js/index.d.mjs.map +1 -0
  164. package/es/typings/tweetnacl-auth/index.d.mjs.map +1 -1
  165. package/es/utils/amount-formatter.d.ts +9 -9
  166. package/es/utils/amount-formatter.mjs +17 -17
  167. package/es/utils/amount-formatter.mjs.map +1 -1
  168. package/es/utils/autorest.mjs +7 -7
  169. package/es/utils/autorest.mjs.map +1 -1
  170. package/es/utils/bignumber.mjs +2 -1
  171. package/es/utils/bignumber.mjs.map +1 -1
  172. package/es/utils/bytes.mjs +1 -1
  173. package/es/utils/bytes.mjs.map +1 -1
  174. package/es/utils/crypto.d.ts +8 -23
  175. package/es/utils/crypto.mjs +15 -41
  176. package/es/utils/crypto.mjs.map +1 -1
  177. package/es/utils/encoder-types.d.ts +61 -0
  178. package/es/utils/encoder-types.mjs +36 -0
  179. package/es/utils/encoder-types.mjs.map +1 -0
  180. package/es/utils/encoder.d.ts +6 -7
  181. package/es/utils/encoder.mjs +42 -26
  182. package/es/utils/encoder.mjs.map +1 -1
  183. package/es/utils/errors.d.ts +1 -11
  184. package/es/utils/errors.mjs +4 -20
  185. package/es/utils/errors.mjs.map +1 -1
  186. package/es/utils/hd-wallet.d.ts +18 -2
  187. package/es/utils/hd-wallet.mjs +64 -34
  188. package/es/utils/hd-wallet.mjs.map +1 -1
  189. package/es/utils/json-big.mjs +2 -2
  190. package/es/utils/json-big.mjs.map +1 -1
  191. package/es/utils/keystore.mjs +4 -2
  192. package/es/utils/keystore.mjs.map +1 -1
  193. package/es/utils/mptree.d.ts +2 -2
  194. package/es/utils/mptree.mjs +11 -6
  195. package/es/utils/mptree.mjs.map +1 -1
  196. package/es/utils/other.d.ts +8 -2
  197. package/es/utils/other.mjs +15 -3
  198. package/es/utils/other.mjs.map +1 -1
  199. package/es/utils/semver-satisfies.d.ts +1 -1
  200. package/es/utils/semver-satisfies.mjs +2 -2
  201. package/es/utils/semver-satisfies.mjs.map +1 -1
  202. package/es/utils/string.mjs.map +1 -1
  203. package/package.json +36 -34
  204. package/src/AeSdk.ts +30 -27
  205. package/src/AeSdkAepp.ts +93 -84
  206. package/src/AeSdkBase.ts +148 -130
  207. package/src/AeSdkWallet.ts +172 -156
  208. package/src/Node.ts +108 -102
  209. package/src/account/Base.ts +42 -32
  210. package/src/account/Memory.ts +45 -30
  211. package/src/account/Rpc.ts +32 -30
  212. package/src/aens.ts +124 -108
  213. package/src/aepp-wallet-communication/connection/Browser.ts +18 -15
  214. package/src/aepp-wallet-communication/connection/BrowserRuntime.ts +22 -21
  215. package/src/aepp-wallet-communication/connection/BrowserWindowMessage.ts +63 -52
  216. package/src/aepp-wallet-communication/connection-proxy.ts +8 -7
  217. package/src/aepp-wallet-communication/rpc/RpcClient.ts +67 -61
  218. package/src/aepp-wallet-communication/rpc/types.ts +32 -32
  219. package/src/aepp-wallet-communication/schema.ts +117 -74
  220. package/src/aepp-wallet-communication/wallet-detector.ts +29 -28
  221. package/src/apis/node/code-model-v4.yaml +54 -20
  222. package/src/apis/node/models/index.ts +6 -2
  223. package/src/apis/node/models/mappers.ts +4 -2
  224. package/src/chain.ts +286 -228
  225. package/src/channel/handlers.ts +424 -372
  226. package/src/channel/index.ts +285 -251
  227. package/src/channel/internal.ts +248 -232
  228. package/src/contract/Compiler.ts +22 -21
  229. package/src/contract/aci.ts +267 -258
  230. package/src/contract/ga.ts +93 -72
  231. package/src/contract/methods.ts +32 -27
  232. package/src/deprecated/index.ts +172 -0
  233. package/src/deprecated/methods.ts +25 -0
  234. package/src/index.ts +37 -32
  235. package/src/oracle.ts +211 -189
  236. package/src/spend.ts +82 -70
  237. package/src/tx/builder/address.ts +50 -0
  238. package/src/tx/builder/constants.ts +82 -52
  239. package/src/tx/builder/field-types/coin-amount.ts +27 -0
  240. package/src/tx/builder/field-types/deposit.ts +21 -0
  241. package/src/tx/builder/field-types/fee.ts +143 -0
  242. package/src/tx/builder/field-types/field.ts +9 -0
  243. package/src/tx/builder/field-types/gas-limit.ts +41 -0
  244. package/src/tx/builder/field-types/gas-price.ts +16 -0
  245. package/src/tx/builder/field-types/index.ts +45 -0
  246. package/src/tx/builder/field-types/name-fee.ts +32 -0
  247. package/src/tx/builder/field-types/name-id.ts +20 -0
  248. package/src/tx/builder/field-types/name.ts +18 -0
  249. package/src/tx/builder/field-types/short-u-int.ts +11 -0
  250. package/src/tx/builder/field-types/u-int.ts +16 -0
  251. package/src/tx/builder/helpers.ts +112 -117
  252. package/src/tx/builder/index.ts +203 -197
  253. package/src/tx/builder/schema.ts +421 -465
  254. package/src/tx/index.ts +128 -135
  255. package/src/tx/validator.ts +165 -161
  256. package/src/typings/@aeternity__argon2-browser/index.d.ts +1 -1
  257. package/src/typings/@aeternity__uuid/index.d.ts +3 -1
  258. package/src/typings/bip32-path/index.d.ts +6 -6
  259. package/src/typings/blakejs/index.d.ts +4 -32
  260. package/src/typings/sha-js/index.d.ts +5 -0
  261. package/src/typings/tweetnacl-auth/index.d.ts +2 -2
  262. package/src/utils/amount-formatter.ts +41 -41
  263. package/src/utils/autorest.ts +57 -54
  264. package/src/utils/bignumber.ts +7 -6
  265. package/src/utils/bytes.ts +19 -19
  266. package/src/utils/crypto.ts +82 -94
  267. package/src/utils/encoder-types.ts +63 -0
  268. package/src/utils/encoder.ts +104 -56
  269. package/src/utils/errors.ts +246 -264
  270. package/src/utils/hd-wallet.ts +114 -82
  271. package/src/utils/json-big.ts +16 -15
  272. package/src/utils/keystore.ts +65 -62
  273. package/src/utils/mptree.ts +59 -56
  274. package/src/utils/other.ts +26 -18
  275. package/src/utils/semver-satisfies.ts +15 -11
  276. package/src/utils/string.ts +10 -10
  277. package/es/tx/builder/field-types.d.ts +0 -62
  278. package/es/tx/builder/field-types.mjs +0 -126
  279. package/es/tx/builder/field-types.mjs.map +0 -1
  280. package/es/tx/min-fee.d.ts +0 -20
  281. package/es/tx/min-fee.mjs.map +0 -1
  282. package/src/tx/builder/field-types.ts +0 -111
  283. package/src/tx/min-fee.ts +0 -136
@@ -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$get2;
100
+ var _actionQueue$get;
110
101
 
111
102
  const locked = actionQueueLocked.get(channel);
112
- const queue = (_actionQueue$get2 = actionQueue.get(channel)) !== null && _actionQueue$get2 !== void 0 ? _actionQueue$get2 : [];
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 state = fsm.get(channel);
119
- if (state == null) return;
120
- const index = queue.findIndex(action => action.guard(channel, state));
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, state));
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, state)));
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) || // Skip channelId check if channelId is not known yet
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 await new Promise((resolve, reject) => {
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) => Object.assign(ws, {
297
- onerror: reject,
298
- onopen: async () => {
299
- resolve();
300
- changeStatus(channel, 'connected');
301
-
302
- if (channelOptions.reconnectTx != null) {
303
- enterState(channel, {
304
- handler: openHandler
305
- });
306
- const signedTx = (await call(channel, 'channels.get.offchain_state', {})).signed_tx;
307
- changeState(channel, signedTx);
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
- ping(channel);
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 {
@@ -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 += ' ' + body.reason + (body.parameter != null ? ` in ${body.parameter}` : '') + ( // TODO: revising after improving documentation https://github.com/aeternity/aesophia_http/issues/78
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 += '\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
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'\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 * @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,eAAe,MAAMH,QAAN,SAAuBC,WAAvB,CAAmC;EAChD;AACF;AACA;AACA;AACA;EACEG,WAAW,CAAEC,WAAF,EAA4E;IAAA,IAArD;MAAEC;IAAF,CAAqD,uEAAJ,EAAI;IACrF,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,IAAI,MAAMD,IAAI,CAACE,MAAX,IACRF,IAAI,CAACG,SAAL,IAAkB,IAAlB,GAA0B,OAAMH,IAAI,CAACG,SAAU,EAA/C,GAAmD,EAD3C,MAET;UACCH,IAAI,CAACI,IAAL,IAAa,IAAb,GAAqB,KAAIC,IAAI,CAACC,SAAL,CAAeN,IAAI,CAACI,IAApB,CAA0B,GAAnD,GAAwD,EAHhD,CAAX;QAID;;QACD,IAAIG,KAAK,CAACC,OAAN,CAAcR,IAAd,CAAJ,EAAyB;UACvBC,OAAO,IAAI,OAAOD,IAAI,CACnBS,GADe,CACXC,CAAC,IAAK,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,EADzF,EAEfN,GAFe,CAEXC,CAAC,IAAIA,CAAC,CAACM,IAAF,EAFM,EAEI;UAFJ,CAGfC,IAHe,CAGV,IAHU,CAAlB;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"}
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"}
@@ -1,7 +1,8 @@
1
- import { AensName } from '../tx/builder/schema';
1
+ import { AensName } from '../tx/builder/constants';
2
2
  import { send } from '../spend';
3
- import { EncodedData } from '../utils/encoder';
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: EncodedData<'ct'>;
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: EncodedData<'ct'>;
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?: EncodedData<'cb'>;
48
+ bytecode?: Encoded.ContractBytearray;
48
49
  deployInfo: {
49
- address?: EncodedData<'ct'>;
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: string;
59
+ returnType: ContractCallReturnType;
59
60
  returnValue: string;
60
61
  };
61
- owner?: EncodedData<'ak'>;
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<EncodedData<'cb'>>;
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: EncodedData<'ak'>;
77
+ callerId: Encoded.AccountAddress;
77
78
  callerNonce: number;
78
- contractId: EncodedData<'ct'>;
79
+ contractId: Encoded.ContractAddress;
79
80
  gasPrice: number;
80
81
  gasUsed: number;
81
82
  height: number;
82
83
  log: any[];
83
- returnType: string;
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: AccountBase;
116
+ onAccount?: AccountBase;
115
117
  onCompiler: Compiler;
116
118
  onNode: Node;
117
119
  source?: string;
118
- bytecode?: EncodedData<'cb'>;
120
+ bytecode?: Encoded.ContractBytearray;
119
121
  aci?: Aci;
120
- contractAddress?: EncodedData<'ct'> | AensName;
122
+ contractAddress?: Encoded.ContractAddress | AensName;
121
123
  fileSystem?: Record<string, string>;
122
124
  validateBytecode?: boolean;
123
125
  [key: string]: any;