@aeternity/aepp-sdk 11.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.
Files changed (442) hide show
  1. package/LICENSE +1 -1
  2. package/dist/aepp-sdk.browser-script.js +1 -1
  3. package/dist/aepp-sdk.browser-script.js.LICENSE.txt +0 -22
  4. package/dist/aepp-sdk.browser-script.js.map +1 -1
  5. package/dist/aepp-sdk.browser.js +2 -1
  6. package/dist/aepp-sdk.browser.js.LICENSE.txt +1 -0
  7. package/dist/aepp-sdk.browser.js.map +1 -1
  8. package/dist/aepp-sdk.js +20764 -1
  9. package/dist/aepp-sdk.js.map +1 -1
  10. package/es/AeSdk.d.ts +37 -0
  11. package/es/AeSdk.mjs +81 -0
  12. package/es/AeSdk.mjs.map +1 -0
  13. package/es/AeSdkAepp.d.ts +70 -0
  14. package/es/AeSdkAepp.mjs +176 -0
  15. package/es/AeSdkAepp.mjs.map +1 -0
  16. package/es/AeSdkBase.d.ts +213 -0
  17. package/es/AeSdkBase.mjs +314 -0
  18. package/es/AeSdkBase.mjs.map +1 -0
  19. package/es/AeSdkWallet.d.ts +104 -0
  20. package/es/AeSdkWallet.mjs +326 -0
  21. package/es/AeSdkWallet.mjs.map +1 -0
  22. package/es/Node.d.ts +41 -0
  23. package/es/Node.mjs +147 -0
  24. package/es/Node.mjs.map +1 -0
  25. package/es/account/Base.d.ts +68 -0
  26. package/es/account/Base.mjs +123 -0
  27. package/es/account/Base.mjs.map +1 -0
  28. package/es/account/Memory.d.ts +26 -0
  29. package/es/account/Memory.mjs +103 -0
  30. package/es/account/Memory.mjs.map +1 -0
  31. package/es/account/Rpc.d.ts +27 -0
  32. package/es/account/Rpc.mjs +80 -0
  33. package/es/account/Rpc.mjs.map +1 -0
  34. package/es/aens.d.ts +222 -0
  35. package/es/aens.mjs +338 -0
  36. package/es/aens.mjs.map +1 -0
  37. package/es/aepp-wallet-communication/connection/Browser.d.ts +33 -0
  38. package/es/aepp-wallet-communication/connection/Browser.mjs +73 -0
  39. package/es/aepp-wallet-communication/connection/Browser.mjs.map +1 -0
  40. package/es/aepp-wallet-communication/connection/BrowserRuntime.d.ts +18 -0
  41. package/es/aepp-wallet-communication/connection/BrowserRuntime.mjs +58 -0
  42. package/es/aepp-wallet-communication/connection/BrowserRuntime.mjs.map +1 -0
  43. package/es/aepp-wallet-communication/connection/BrowserWindowMessage.d.ts +36 -0
  44. package/es/aepp-wallet-communication/connection/BrowserWindowMessage.mjs +146 -0
  45. package/es/aepp-wallet-communication/connection/BrowserWindowMessage.mjs.map +1 -0
  46. package/es/aepp-wallet-communication/connection-proxy.d.ts +11 -0
  47. package/{src/utils/crypto-ts.ts → es/aepp-wallet-communication/connection-proxy.mjs} +16 -11
  48. package/es/aepp-wallet-communication/connection-proxy.mjs.map +1 -0
  49. package/es/aepp-wallet-communication/rpc/RpcClient.d.ts +34 -0
  50. package/es/aepp-wallet-communication/rpc/RpcClient.mjs +169 -0
  51. package/es/aepp-wallet-communication/rpc/RpcClient.mjs.map +1 -0
  52. package/es/aepp-wallet-communication/rpc/types.d.ts +77 -0
  53. package/es/aepp-wallet-communication/rpc/types.mjs +3 -0
  54. package/es/aepp-wallet-communication/rpc/types.mjs.map +1 -0
  55. package/es/aepp-wallet-communication/schema.d.ts +105 -46
  56. package/es/aepp-wallet-communication/schema.mjs +251 -0
  57. package/es/aepp-wallet-communication/schema.mjs.map +1 -0
  58. package/es/aepp-wallet-communication/wallet-detector.d.ts +25 -0
  59. package/es/aepp-wallet-communication/wallet-detector.mjs +62 -0
  60. package/es/aepp-wallet-communication/wallet-detector.mjs.map +1 -0
  61. package/es/apis/compiler/compiler.d.ts +92 -0
  62. package/es/apis/compiler/compiler.mjs +576 -0
  63. package/es/apis/compiler/compiler.mjs.map +1 -0
  64. package/es/apis/compiler/index.d.ts +2 -0
  65. package/es/apis/compiler/index.mjs +3 -0
  66. package/es/apis/compiler/index.mjs.map +1 -0
  67. package/es/apis/compiler/models/index.d.ts +248 -0
  68. package/es/apis/compiler/models/index.mjs +48 -0
  69. package/es/apis/compiler/models/index.mjs.map +1 -0
  70. package/es/apis/compiler/models/mappers.d.ts +23 -0
  71. package/es/apis/compiler/models/mappers.mjs +585 -0
  72. package/es/apis/compiler/models/mappers.mjs.map +1 -0
  73. package/es/apis/compiler/models/parameters.d.ts +13 -0
  74. package/es/apis/compiler/models/parameters.mjs +71 -0
  75. package/es/apis/compiler/models/parameters.mjs.map +1 -0
  76. package/es/apis/node/index.d.ts +2 -0
  77. package/es/apis/node/index.mjs +3 -0
  78. package/es/apis/node/index.mjs.map +1 -0
  79. package/es/apis/node/models/index.d.ts +1065 -0
  80. package/es/apis/node/models/index.mjs +2 -0
  81. package/es/apis/node/models/index.mjs.map +1 -0
  82. package/es/apis/node/models/mappers.d.ts +95 -0
  83. package/es/apis/node/models/mappers.mjs +4166 -0
  84. package/es/apis/node/models/mappers.mjs.map +1 -0
  85. package/es/apis/node/models/parameters.d.ts +17 -0
  86. package/es/apis/node/models/parameters.mjs +165 -0
  87. package/es/apis/node/models/parameters.mjs.map +1 -0
  88. package/es/apis/node/node.d.ts +215 -0
  89. package/es/apis/node/node.mjs +1165 -0
  90. package/es/apis/node/node.mjs.map +1 -0
  91. package/es/chain.d.ts +248 -0
  92. package/es/chain.mjs +560 -0
  93. package/es/chain.mjs.map +1 -0
  94. package/es/channel/handlers.d.ts +34 -0
  95. package/es/channel/handlers.mjs +164 -131
  96. package/es/channel/handlers.mjs.map +1 -1
  97. package/es/channel/index.d.ts +625 -0
  98. package/es/channel/index.mjs +897 -902
  99. package/es/channel/index.mjs.map +1 -1
  100. package/es/channel/internal.d.ts +101 -0
  101. package/es/channel/internal.mjs +138 -88
  102. package/es/channel/internal.mjs.map +1 -1
  103. package/es/contract/Compiler.d.ts +18 -0
  104. package/es/contract/Compiler.mjs +68 -0
  105. package/es/contract/Compiler.mjs.map +1 -0
  106. package/es/contract/aci.d.ts +127 -0
  107. package/es/contract/aci.mjs +225 -193
  108. package/es/contract/aci.mjs.map +1 -1
  109. package/es/contract/ga.d.ts +69 -0
  110. package/es/contract/ga.mjs +195 -0
  111. package/es/contract/ga.mjs.map +1 -0
  112. package/es/contract/methods.d.ts +71 -0
  113. package/es/contract/methods.mjs +104 -0
  114. package/es/contract/methods.mjs.map +1 -0
  115. package/es/deprecated/index.d.ts +143 -0
  116. package/es/deprecated/index.mjs +162 -0
  117. package/es/deprecated/index.mjs.map +1 -0
  118. package/es/deprecated/methods.d.ts +18 -0
  119. package/es/deprecated/methods.mjs +26 -0
  120. package/es/deprecated/methods.mjs.map +1 -0
  121. package/es/index.d.ts +35 -0
  122. package/es/index.mjs +35 -40
  123. package/es/index.mjs.map +1 -1
  124. package/es/oracle.d.ts +161 -0
  125. package/es/oracle.mjs +306 -0
  126. package/es/oracle.mjs.map +1 -0
  127. package/es/spend.d.ts +62 -0
  128. package/es/spend.mjs +111 -0
  129. package/es/spend.mjs.map +1 -0
  130. package/es/tx/builder/address.d.ts +25 -0
  131. package/es/tx/builder/address.mjs +45 -0
  132. package/es/tx/builder/address.mjs.map +1 -0
  133. package/es/tx/builder/constants.d.ts +70 -0
  134. package/es/tx/builder/constants.mjs +122 -0
  135. package/es/tx/builder/constants.mjs.map +1 -0
  136. package/es/tx/builder/field-types/coin-amount.d.ts +13 -0
  137. package/es/tx/builder/field-types/coin-amount.mjs +26 -0
  138. package/es/tx/builder/field-types/coin-amount.mjs.map +1 -0
  139. package/es/tx/builder/field-types/deposit.d.ts +15 -0
  140. package/es/tx/builder/field-types/deposit.mjs +19 -0
  141. package/es/tx/builder/field-types/deposit.mjs.map +1 -0
  142. package/es/tx/builder/field-types/fee.d.ts +25 -0
  143. package/es/tx/builder/field-types/fee.mjs +150 -0
  144. package/es/tx/builder/field-types/fee.mjs.map +1 -0
  145. package/es/tx/builder/field-types/field.d.ts +6 -0
  146. package/es/tx/builder/field-types/field.mjs +15 -0
  147. package/es/tx/builder/field-types/field.mjs.map +1 -0
  148. package/es/tx/builder/field-types/gas-limit.d.ts +12 -0
  149. package/es/tx/builder/field-types/gas-limit.mjs +33 -0
  150. package/es/tx/builder/field-types/gas-limit.mjs.map +1 -0
  151. package/es/tx/builder/field-types/gas-price.d.ts +8 -0
  152. package/es/tx/builder/field-types/gas-price.mjs +18 -0
  153. package/es/tx/builder/field-types/gas-price.mjs.map +1 -0
  154. package/es/tx/builder/field-types/index.d.ts +70 -0
  155. package/es/tx/builder/field-types/index.mjs +25 -0
  156. package/es/tx/builder/field-types/index.mjs.map +1 -0
  157. package/es/tx/builder/field-types/name-fee.d.ts +20 -0
  158. package/es/tx/builder/field-types/name-fee.mjs +24 -0
  159. package/es/tx/builder/field-types/name-fee.mjs.map +1 -0
  160. package/es/tx/builder/field-types/name-id.d.ts +14 -0
  161. package/es/tx/builder/field-types/name-id.mjs +19 -0
  162. package/es/tx/builder/field-types/name-id.mjs.map +1 -0
  163. package/es/tx/builder/field-types/name.d.ts +13 -0
  164. package/es/tx/builder/field-types/name.mjs +18 -0
  165. package/es/tx/builder/field-types/name.mjs.map +1 -0
  166. package/es/tx/builder/field-types/short-u-int.d.ts +6 -0
  167. package/es/tx/builder/field-types/short-u-int.mjs +12 -0
  168. package/es/tx/builder/field-types/short-u-int.mjs.map +1 -0
  169. package/es/tx/builder/field-types/u-int.d.ts +8 -0
  170. package/es/tx/builder/field-types/u-int.mjs +14 -0
  171. package/es/tx/builder/field-types/u-int.mjs.map +1 -0
  172. package/es/tx/builder/helpers.d.ts +125 -0
  173. package/es/tx/builder/helpers.mjs +94 -240
  174. package/es/tx/builder/helpers.mjs.map +1 -1
  175. package/es/tx/builder/index.d.ts +88 -0
  176. package/es/tx/builder/index.mjs +167 -358
  177. package/es/tx/builder/index.mjs.map +1 -1
  178. package/es/tx/builder/schema.d.ts +1201 -0
  179. package/es/tx/builder/schema.mjs +175 -664
  180. package/es/tx/builder/schema.mjs.map +1 -1
  181. package/es/tx/index.d.ts +64 -0
  182. package/es/tx/index.mjs +151 -265
  183. package/es/tx/index.mjs.map +1 -1
  184. package/es/tx/validator.d.ts +20 -0
  185. package/es/tx/validator.mjs +104 -124
  186. package/es/tx/validator.mjs.map +1 -1
  187. package/es/typings/@aeternity__argon2-browser/index.d.mjs +2 -0
  188. package/es/typings/@aeternity__argon2-browser/index.d.mjs.map +1 -0
  189. package/es/typings/@aeternity__uuid/index.d.mjs +2 -0
  190. package/es/typings/@aeternity__uuid/index.d.mjs.map +1 -0
  191. package/es/typings/bip32-path/index.d.mjs +2 -0
  192. package/es/typings/bip32-path/index.d.mjs.map +1 -0
  193. package/es/typings/blakejs/index.d.mjs.map +1 -1
  194. package/es/typings/sha-js/index.d.mjs +2 -0
  195. package/es/typings/sha-js/index.d.mjs.map +1 -0
  196. package/es/typings/tweetnacl-auth/index.d.mjs +2 -0
  197. package/es/typings/tweetnacl-auth/index.d.mjs.map +1 -0
  198. package/es/utils/amount-formatter.d.ts +42 -0
  199. package/es/utils/amount-formatter.mjs +36 -49
  200. package/es/utils/amount-formatter.mjs.map +1 -1
  201. package/es/utils/autorest.d.ts +6 -0
  202. package/es/utils/autorest.mjs +97 -0
  203. package/es/utils/autorest.mjs.map +1 -0
  204. package/es/utils/bignumber.d.ts +13 -0
  205. package/es/utils/bignumber.mjs +11 -8
  206. package/es/utils/bignumber.mjs.map +1 -1
  207. package/es/{bytes.d.ts → utils/bytes.d.ts} +10 -13
  208. package/es/utils/bytes.mjs +11 -15
  209. package/es/utils/bytes.mjs.map +1 -1
  210. package/es/utils/crypto.d.ts +88 -0
  211. package/es/utils/crypto.mjs +64 -108
  212. package/es/utils/crypto.mjs.map +1 -1
  213. package/es/utils/encoder-types.d.ts +61 -0
  214. package/es/utils/encoder-types.mjs +36 -0
  215. package/es/utils/encoder-types.mjs.map +1 -0
  216. package/es/utils/encoder.d.ts +25 -0
  217. package/es/utils/encoder.mjs +118 -0
  218. package/es/utils/encoder.mjs.map +1 -0
  219. package/es/{errors.d.ts → utils/errors.d.ts} +246 -59
  220. package/es/utils/errors.mjs +313 -136
  221. package/es/utils/errors.mjs.map +1 -1
  222. package/es/utils/hd-wallet.d.ts +50 -0
  223. package/es/utils/hd-wallet.mjs +86 -45
  224. package/es/utils/hd-wallet.mjs.map +1 -1
  225. package/es/utils/json-big.d.ts +5 -0
  226. package/es/utils/json-big.mjs +12 -16
  227. package/es/utils/json-big.mjs.map +1 -1
  228. package/es/utils/keystore.d.ts +51 -0
  229. package/es/utils/keystore.mjs +101 -194
  230. package/es/utils/keystore.mjs.map +1 -1
  231. package/es/{mptree.d.ts → utils/mptree.d.ts} +6 -9
  232. package/es/utils/mptree.mjs +22 -18
  233. package/es/utils/mptree.mjs.map +1 -1
  234. package/es/utils/other.d.ts +20 -0
  235. package/es/utils/other.mjs +32 -35
  236. package/es/utils/other.mjs.map +1 -1
  237. package/es/utils/semver-satisfies.d.ts +1 -0
  238. package/es/utils/semver-satisfies.mjs +2 -2
  239. package/es/utils/semver-satisfies.mjs.map +1 -1
  240. package/es/utils/string.d.ts +24 -0
  241. package/es/utils/string.mjs +8 -10
  242. package/es/utils/string.mjs.map +1 -1
  243. package/package.json +56 -42
  244. package/src/AeSdk.ts +68 -0
  245. package/src/AeSdkAepp.ts +176 -0
  246. package/src/AeSdkBase.ts +338 -0
  247. package/src/AeSdkWallet.ts +348 -0
  248. package/src/Node.ts +173 -0
  249. package/src/account/Base.ts +124 -0
  250. package/src/account/Memory.ts +98 -0
  251. package/src/account/Rpc.ts +69 -0
  252. package/src/aens.ts +407 -0
  253. package/src/aepp-wallet-communication/connection/Browser.ts +71 -0
  254. package/src/aepp-wallet-communication/connection/BrowserRuntime.ts +59 -0
  255. package/src/aepp-wallet-communication/connection/BrowserWindowMessage.ts +122 -0
  256. package/{es/utils/crypto-ts.mjs → src/aepp-wallet-communication/connection-proxy.ts} +18 -18
  257. package/src/aepp-wallet-communication/rpc/RpcClient.ts +143 -0
  258. package/src/aepp-wallet-communication/rpc/types.ts +66 -0
  259. package/src/aepp-wallet-communication/schema.ts +224 -0
  260. package/src/aepp-wallet-communication/wallet-detector.ts +72 -0
  261. package/src/apis/compiler/code-model-v4.yaml +2649 -0
  262. package/src/apis/compiler/compiler.ts +585 -0
  263. package/src/apis/compiler/index.ts +2 -0
  264. package/src/apis/compiler/models/index.ts +301 -0
  265. package/src/apis/compiler/models/mappers.ts +583 -0
  266. package/src/apis/compiler/models/parameters.ts +93 -0
  267. package/src/apis/node/code-model-v4.yaml +10080 -0
  268. package/src/apis/node/index.ts +2 -0
  269. package/src/apis/node/models/index.ts +1257 -0
  270. package/src/apis/node/models/mappers.ts +4280 -0
  271. package/src/apis/node/models/parameters.ts +188 -0
  272. package/src/apis/node/node.ts +1299 -0
  273. package/src/chain.ts +502 -0
  274. package/src/channel/handlers.ts +817 -0
  275. package/src/channel/index.ts +1025 -0
  276. package/src/channel/internal.ts +361 -0
  277. package/src/contract/Compiler.ts +67 -0
  278. package/src/contract/aci.ts +538 -0
  279. package/src/contract/ga.ts +199 -0
  280. package/src/contract/methods.ts +123 -0
  281. package/src/deprecated/index.ts +170 -0
  282. package/src/deprecated/methods.ts +25 -0
  283. package/src/index.ts +56 -0
  284. package/src/oracle.ts +364 -0
  285. package/src/spend.ts +164 -0
  286. package/src/tx/builder/address.ts +50 -0
  287. package/src/tx/builder/constants.ts +126 -0
  288. package/src/tx/builder/field-types/coin-amount.ts +27 -0
  289. package/src/tx/builder/field-types/deposit.ts +21 -0
  290. package/src/tx/builder/field-types/fee.ts +143 -0
  291. package/src/tx/builder/field-types/field.ts +9 -0
  292. package/src/tx/builder/field-types/gas-limit.ts +41 -0
  293. package/src/tx/builder/field-types/gas-price.ts +16 -0
  294. package/src/tx/builder/field-types/index.ts +45 -0
  295. package/src/tx/builder/field-types/name-fee.ts +32 -0
  296. package/src/tx/builder/field-types/name-id.ts +20 -0
  297. package/src/tx/builder/field-types/name.ts +18 -0
  298. package/src/tx/builder/field-types/short-u-int.ts +11 -0
  299. package/src/tx/builder/field-types/u-int.ts +16 -0
  300. package/src/tx/builder/helpers.ts +248 -0
  301. package/src/tx/builder/index.ts +400 -0
  302. package/src/tx/builder/schema.ts +727 -0
  303. package/src/tx/index.ts +192 -0
  304. package/src/tx/validator.ts +230 -0
  305. package/src/typings/@aeternity__argon2-browser/index.d.ts +3 -0
  306. package/src/typings/@aeternity__uuid/index.d.ts +5 -0
  307. package/src/typings/bip32-path/index.d.ts +33 -0
  308. package/src/typings/blakejs/index.d.ts +4 -32
  309. package/src/typings/sha-js/index.d.ts +5 -0
  310. package/src/typings/tweetnacl-auth/index.d.ts +14 -0
  311. package/src/utils/amount-formatter.ts +56 -69
  312. package/src/utils/autorest.ts +93 -0
  313. package/src/utils/bignumber.ts +11 -12
  314. package/src/utils/bytes.ts +29 -31
  315. package/src/utils/crypto.ts +205 -0
  316. package/src/utils/encoder-types.ts +63 -0
  317. package/src/utils/encoder.ts +146 -0
  318. package/src/utils/errors.ts +482 -366
  319. package/src/utils/hd-wallet.ts +166 -0
  320. package/src/utils/json-big.ts +27 -0
  321. package/src/utils/keystore.ts +182 -0
  322. package/src/utils/mptree.ts +64 -61
  323. package/src/utils/other.ts +34 -41
  324. package/src/utils/semver-satisfies.ts +15 -11
  325. package/src/utils/string.ts +18 -20
  326. package/es/account/base.mjs +0 -179
  327. package/es/account/base.mjs.map +0 -1
  328. package/es/account/memory.mjs +0 -99
  329. package/es/account/memory.mjs.map +0 -1
  330. package/es/account/multiple.mjs +0 -179
  331. package/es/account/multiple.mjs.map +0 -1
  332. package/es/ae/aens.mjs +0 -404
  333. package/es/ae/aens.mjs.map +0 -1
  334. package/es/ae/aepp.mjs +0 -45
  335. package/es/ae/aepp.mjs.map +0 -1
  336. package/es/ae/contract.mjs +0 -159
  337. package/es/ae/contract.mjs.map +0 -1
  338. package/es/ae/index.mjs +0 -207
  339. package/es/ae/index.mjs.map +0 -1
  340. package/es/ae/oracle.mjs +0 -339
  341. package/es/ae/oracle.mjs.map +0 -1
  342. package/es/ae/universal.mjs +0 -45
  343. package/es/ae/universal.mjs.map +0 -1
  344. package/es/ae/wallet.mjs +0 -50
  345. package/es/ae/wallet.mjs.map +0 -1
  346. package/es/amount-formatter.d.ts +0 -58
  347. package/es/bignumber.d.ts +0 -18
  348. package/es/chain/index.mjs +0 -272
  349. package/es/chain/index.mjs.map +0 -1
  350. package/es/chain/node.mjs +0 -442
  351. package/es/chain/node.mjs.map +0 -1
  352. package/es/contract/compiler.mjs +0 -115
  353. package/es/contract/compiler.mjs.map +0 -1
  354. package/es/contract/ga/helpers.mjs +0 -30
  355. package/es/contract/ga/helpers.mjs.map +0 -1
  356. package/es/contract/ga/index.mjs +0 -178
  357. package/es/contract/ga/index.mjs.map +0 -1
  358. package/es/crypto-ts.d.ts +0 -9
  359. package/es/node-pool/index.mjs +0 -188
  360. package/es/node-pool/index.mjs.map +0 -1
  361. package/es/node.mjs +0 -133
  362. package/es/node.mjs.map +0 -1
  363. package/es/other.d.ts +0 -31
  364. package/es/semver-satisfies.d.ts +0 -1
  365. package/es/string.d.ts +0 -26
  366. package/es/tx/builder/field-types.mjs +0 -74
  367. package/es/tx/builder/field-types.mjs.map +0 -1
  368. package/es/tx/tx-object.mjs +0 -283
  369. package/es/tx/tx-object.mjs.map +0 -1
  370. package/es/tx/tx.mjs +0 -938
  371. package/es/tx/tx.mjs.map +0 -1
  372. package/es/utils/aepp-wallet-communication/connection/browser-runtime.mjs +0 -132
  373. package/es/utils/aepp-wallet-communication/connection/browser-runtime.mjs.map +0 -1
  374. package/es/utils/aepp-wallet-communication/connection/browser-window-message.mjs +0 -183
  375. package/es/utils/aepp-wallet-communication/connection/browser-window-message.mjs.map +0 -1
  376. package/es/utils/aepp-wallet-communication/connection/index.mjs +0 -87
  377. package/es/utils/aepp-wallet-communication/connection/index.mjs.map +0 -1
  378. package/es/utils/aepp-wallet-communication/content-script-bridge.mjs +0 -98
  379. package/es/utils/aepp-wallet-communication/content-script-bridge.mjs.map +0 -1
  380. package/es/utils/aepp-wallet-communication/helpers.mjs +0 -92
  381. package/es/utils/aepp-wallet-communication/helpers.mjs.map +0 -1
  382. package/es/utils/aepp-wallet-communication/rpc/aepp-rpc.mjs +0 -375
  383. package/es/utils/aepp-wallet-communication/rpc/aepp-rpc.mjs.map +0 -1
  384. package/es/utils/aepp-wallet-communication/rpc/rpc-client.mjs +0 -275
  385. package/es/utils/aepp-wallet-communication/rpc/rpc-client.mjs.map +0 -1
  386. package/es/utils/aepp-wallet-communication/rpc/wallet-rpc.mjs +0 -541
  387. package/es/utils/aepp-wallet-communication/rpc/wallet-rpc.mjs.map +0 -1
  388. package/es/utils/aepp-wallet-communication/schema.mjs +0 -102
  389. package/es/utils/aepp-wallet-communication/schema.mjs.map +0 -1
  390. package/es/utils/aepp-wallet-communication/wallet-detector.mjs +0 -110
  391. package/es/utils/aepp-wallet-communication/wallet-detector.mjs.map +0 -1
  392. package/es/utils/async-init.mjs +0 -64
  393. package/es/utils/async-init.mjs.map +0 -1
  394. package/es/utils/crypto-ts.mjs.map +0 -1
  395. package/es/utils/swagger.mjs +0 -164
  396. package/es/utils/swagger.mjs.map +0 -1
  397. package/src/account/base.js +0 -153
  398. package/src/account/memory.js +0 -83
  399. package/src/account/multiple.js +0 -162
  400. package/src/ae/aens.js +0 -361
  401. package/src/ae/aepp.js +0 -45
  402. package/src/ae/contract.js +0 -148
  403. package/src/ae/index.js +0 -168
  404. package/src/ae/oracle.js +0 -311
  405. package/src/ae/universal.js +0 -47
  406. package/src/ae/wallet.js +0 -50
  407. package/src/chain/index.js +0 -269
  408. package/src/chain/node.js +0 -320
  409. package/src/channel/handlers.js +0 -673
  410. package/src/channel/index.js +0 -898
  411. package/src/channel/internal.js +0 -237
  412. package/src/contract/aci.js +0 -376
  413. package/src/contract/compiler.js +0 -100
  414. package/src/contract/ga/helpers.js +0 -19
  415. package/src/contract/ga/index.js +0 -150
  416. package/src/index.js +0 -89
  417. package/src/node-pool/index.js +0 -172
  418. package/src/node.js +0 -116
  419. package/src/tx/builder/field-types.js +0 -61
  420. package/src/tx/builder/helpers.js +0 -380
  421. package/src/tx/builder/index.js +0 -465
  422. package/src/tx/builder/schema.js +0 -1197
  423. package/src/tx/index.js +0 -301
  424. package/src/tx/tx-object.js +0 -187
  425. package/src/tx/tx.js +0 -631
  426. package/src/tx/validator.js +0 -181
  427. package/src/utils/aepp-wallet-communication/connection/browser-runtime.js +0 -119
  428. package/src/utils/aepp-wallet-communication/connection/browser-window-message.js +0 -165
  429. package/src/utils/aepp-wallet-communication/connection/index.js +0 -85
  430. package/src/utils/aepp-wallet-communication/content-script-bridge.js +0 -86
  431. package/src/utils/aepp-wallet-communication/helpers.js +0 -60
  432. package/src/utils/aepp-wallet-communication/rpc/aepp-rpc.js +0 -294
  433. package/src/utils/aepp-wallet-communication/rpc/rpc-client.js +0 -232
  434. package/src/utils/aepp-wallet-communication/rpc/wallet-rpc.js +0 -401
  435. package/src/utils/aepp-wallet-communication/schema.ts +0 -80
  436. package/src/utils/aepp-wallet-communication/wallet-detector.js +0 -92
  437. package/src/utils/async-init.js +0 -45
  438. package/src/utils/crypto.js +0 -229
  439. package/src/utils/hd-wallet.js +0 -100
  440. package/src/utils/json-big.js +0 -26
  441. package/src/utils/keystore.js +0 -219
  442. package/src/utils/swagger.js +0 -156
@@ -0,0 +1,338 @@
1
+ import * as chainMethods from './chain';
2
+ import * as txMethods from './tx';
3
+ import * as aensMethods from './aens';
4
+ import * as spendMethods from './spend';
5
+ import * as oracleMethods from './oracle';
6
+ import * as contractMethods from './contract/methods';
7
+ import * as contractGaMethods from './contract/ga';
8
+ import * as deprecatedMethods from './deprecated/methods';
9
+ import { _buildTx } from './tx';
10
+ import { mapObject } from './utils/other';
11
+ import Node, { getNetworkId } from './Node';
12
+ import { AE_AMOUNT_FORMATS } from './utils/amount-formatter';
13
+ import { AMOUNT } from './tx/builder/schema';
14
+ import { Tag } from './tx/builder/constants';
15
+ import MemoryAccount, { Keypair } from './account/Memory';
16
+ import AccountBase, { isAccountBase } from './account/Base';
17
+ import {
18
+ CompilerError,
19
+ DuplicateNodeError,
20
+ NodeNotFoundError,
21
+ NotImplementedError,
22
+ TypeError,
23
+ } from './utils/errors';
24
+ import { Encoded } from './utils/encoder';
25
+ import Compiler from './contract/Compiler';
26
+
27
+ export type Account = Keypair | AccountBase | any;
28
+
29
+ type NodeInfo = Awaited<ReturnType<Node['getNodeInfo']>> & { name: string };
30
+
31
+ function getValueOrErrorProxy<Value extends object>(valueCb: () => Value): Value {
32
+ try {
33
+ return valueCb();
34
+ } catch (error) {
35
+ return new Proxy(
36
+ {},
37
+ Object.fromEntries(['get', 'set', 'has'].map((name) => [name, () => { throw error; }])),
38
+ ) as Value;
39
+ }
40
+ }
41
+
42
+ /**
43
+ * Basic AeSdk class
44
+ *
45
+ * AeSdkBase objects are the composition of:
46
+ * - chain methods
47
+ * - tx methods
48
+ * - aens methods
49
+ * - spend methods
50
+ * - oracle methods
51
+ * - contract methods
52
+ * - contract ga methods
53
+ * Only by providing the joint functionality of them, most more advanced
54
+ * operations, i.e. the ones with actual use value on the chain, become
55
+ * available.
56
+ */
57
+ class AeSdkBase {
58
+ _options: {
59
+ denomination: AE_AMOUNT_FORMATS;
60
+ amount: number;
61
+ [key: string]: any;
62
+ } = { denomination: AE_AMOUNT_FORMATS.AETTOS, amount: AMOUNT };
63
+
64
+ pool: Map<string, Node> = new Map();
65
+
66
+ selectedNodeName?: string;
67
+
68
+ compilerApi: Compiler;
69
+
70
+ /**
71
+ * @param options - Options
72
+ * @param options.nodes - Array of nodes
73
+ * @param options.compilerUrl - Url for compiler API
74
+ * @param options.ignoreVersion - Don't check node or compiler version
75
+ */
76
+ constructor(
77
+ {
78
+ nodes = [], compilerUrl, ignoreVersion = false, ...options
79
+ }:
80
+ {
81
+ nodes?: Array<{ name: string; instance: Node }>;
82
+ compilerUrl?: string;
83
+ ignoreVersion?: boolean;
84
+ [key: string]: any; // TODO: consider combining all possible options instead
85
+ } = {},
86
+ ) {
87
+ Object.assign(this._options, options);
88
+
89
+ nodes.forEach(({ name, instance }, i) => this.addNode(name, instance, i === 0));
90
+
91
+ if (compilerUrl == null) {
92
+ this.compilerApi = getValueOrErrorProxy(() => {
93
+ throw new CompilerError('You can\'t use Compiler API. Compiler is not ready!');
94
+ });
95
+ } else this.setCompilerUrl(compilerUrl, { ignoreVersion });
96
+ }
97
+
98
+ setCompilerUrl(
99
+ compilerUrl: string,
100
+ { ignoreVersion = false }: { ignoreVersion?: boolean } = {},
101
+ ): void {
102
+ this.compilerApi = new Compiler(compilerUrl, { ignoreVersion });
103
+ }
104
+
105
+ get api(): Node {
106
+ this.ensureNodeConnected();
107
+ return this.pool.get(this.selectedNodeName) as Node;
108
+ }
109
+
110
+ /**
111
+ * Add Node
112
+ * @param name - Node name
113
+ * @param node - Node instance
114
+ * @param select - Select this node as current
115
+ * @example
116
+ * ```js
117
+ * // add and select new node with name 'testNode'
118
+ * aeSdkBase.addNode('testNode', new Node({ url }), true)
119
+ * ```
120
+ */
121
+ addNode(name: string, node: Node, select = false): void {
122
+ if (this.pool.has(name)) throw new DuplicateNodeError(name);
123
+
124
+ this.pool.set(name, node);
125
+ if (select || this.selectedNodeName == null) {
126
+ this.selectNode(name);
127
+ }
128
+ }
129
+
130
+ /**
131
+ * Select Node
132
+ * @param name - Node name
133
+ * @example
134
+ * nodePool.selectNode('testNode')
135
+ */
136
+ selectNode(name: string): void {
137
+ if (!this.pool.has(name)) throw new NodeNotFoundError(`Node with name ${name} not in pool`);
138
+ this.selectedNodeName = name;
139
+ }
140
+
141
+ /**
142
+ * Get NetworkId of current Node
143
+ * @example
144
+ * nodePool.getNetworkId()
145
+ */
146
+ readonly getNetworkId = getNetworkId;
147
+
148
+ /**
149
+ * Check if you have selected node
150
+ * @example
151
+ * nodePool.isNodeConnected()
152
+ */
153
+ isNodeConnected(): this is AeSdkBase & { selectedNodeName: string } {
154
+ return this.selectedNodeName != null;
155
+ }
156
+
157
+ protected ensureNodeConnected(): asserts this is AeSdkBase & { selectedNodeName: string } {
158
+ if (!this.isNodeConnected()) {
159
+ throw new NodeNotFoundError('You can\'t use Node API. Node is not connected or not defined!');
160
+ }
161
+ }
162
+
163
+ /**
164
+ * Get information about node
165
+ * @example
166
+ * ```js
167
+ * nodePool.getNodeInfo() // { name, version, networkId, protocol, ... }
168
+ * ```
169
+ */
170
+ async getNodeInfo(): Promise<NodeInfo> {
171
+ this.ensureNodeConnected();
172
+ return {
173
+ name: this.selectedNodeName,
174
+ ...await this.api.getNodeInfo(),
175
+ };
176
+ }
177
+
178
+ /**
179
+ * Get array of available nodes
180
+ * @example
181
+ * nodePool.getNodesInPool()
182
+ */
183
+ async getNodesInPool(): Promise<NodeInfo[]> {
184
+ return Promise.all(
185
+ Array.from(this.pool.entries()).map(async ([name, node]) => ({
186
+ name,
187
+ ...await node.getNodeInfo(),
188
+ })),
189
+ );
190
+ }
191
+
192
+ // eslint-disable-next-line class-methods-use-this
193
+ addresses(): Encoded.AccountAddress[] {
194
+ return [];
195
+ }
196
+
197
+ async address({ onAccount }: { onAccount?: Account } = {}): Promise<Encoded.AccountAddress> {
198
+ return this._resolveAccount(onAccount).address();
199
+ }
200
+
201
+ async sign(
202
+ data: string | Uint8Array,
203
+ { onAccount, ...options }: { onAccount?: Account } = {},
204
+ ): Promise<Uint8Array> {
205
+ return this._resolveAccount(onAccount).sign(data, options);
206
+ }
207
+
208
+ async signTransaction(
209
+ tx: Encoded.Transaction,
210
+ { onAccount, ...options }: { onAccount?: Account } & Parameters<AccountBase['signTransaction']>[1] = {},
211
+ ): Promise<Encoded.Transaction> {
212
+ return this._resolveAccount(onAccount)
213
+ .signTransaction(tx, { ...options, networkId: await this.getNetworkId(options) });
214
+ }
215
+
216
+ async signMessage(
217
+ message: string,
218
+ { onAccount, ...options }: { onAccount?: Account } & Parameters<AccountBase['signMessage']>[1] = {},
219
+ ): Promise<string | Uint8Array> {
220
+ return this._resolveAccount(onAccount).signMessage(message, options);
221
+ }
222
+
223
+ async verifyMessage(
224
+ message: string,
225
+ signature: string | Uint8Array,
226
+ { onAccount, ...options }: { onAccount?: Account } & Parameters<AccountBase['verifyMessage']>[2] = {},
227
+ ): Promise<boolean> {
228
+ return this._resolveAccount(onAccount).verifyMessage(message, signature, options);
229
+ }
230
+
231
+ /**
232
+ * Resolves an account
233
+ * @param account - ak-address, instance of AccountBase, or keypair
234
+ */
235
+ // eslint-disable-next-line class-methods-use-this
236
+ _resolveAccount(account?: Account): AccountBase {
237
+ switch (account !== null && typeof account) {
238
+ case 'string':
239
+ throw new NotImplementedError('Address in AccountResolver');
240
+ case 'object':
241
+ return isAccountBase(account) ? account : new MemoryAccount({ keypair: account });
242
+ default:
243
+ throw new TypeError(
244
+ 'Account should be an address (ak-prefixed string), '
245
+ + `keypair, or instance of AccountBase, got ${String(account)} instead`,
246
+ );
247
+ }
248
+ }
249
+
250
+ _getOptions(): {
251
+ onNode: Node;
252
+ onAccount: AccountBase;
253
+ onCompiler: Compiler;
254
+ } {
255
+ return {
256
+ ...this._options,
257
+ onNode: getValueOrErrorProxy(() => this.api),
258
+ onAccount: getValueOrErrorProxy(() => this._resolveAccount()),
259
+ onCompiler: getValueOrErrorProxy(() => this.compilerApi),
260
+ };
261
+ }
262
+
263
+ async buildTx<TxType extends Tag>(
264
+ txType: TxType,
265
+ options: Omit<Parameters<typeof _buildTx<TxType>>[1], 'onNode'> & { onNode?: Node },
266
+ ): Promise<Encoded.Transaction> {
267
+ // @ts-expect-error TODO: need to figure out what's wrong here
268
+ return _buildTx<TxType>(txType, {
269
+ ...this._getOptions(),
270
+ ...options,
271
+ });
272
+ }
273
+ }
274
+
275
+ const { _buildTx: _, ...txMethodsOther } = txMethods;
276
+ const { InvalidTxError: _2, ...chainMethodsOther } = chainMethods;
277
+
278
+ const methods = {
279
+ ...chainMethodsOther,
280
+ ...txMethodsOther,
281
+ ...aensMethods,
282
+ ...spendMethods,
283
+ ...oracleMethods,
284
+ ...contractMethods,
285
+ ...contractGaMethods,
286
+ ...deprecatedMethods,
287
+ } as const;
288
+
289
+ type RequiredKeys<T> = {
290
+ [K in keyof T]-?: {} extends Pick<T, K> ? never : K
291
+ }[keyof T];
292
+
293
+ type OptionalIfNotRequired<T extends [any]> = RequiredKeys<T[0]> extends never ? T | [] : T;
294
+
295
+ type MakeOptional<Args extends any[]> = Args extends [infer Head, ...infer Tail]
296
+ ? Tail extends []
297
+ ? Head extends object
298
+ ? OptionalIfNotRequired<[Omit<Head, 'onNode' | 'onCompiler' | 'onAccount'>
299
+ & {
300
+ onNode?: Node;
301
+ onCompiler?: Compiler;
302
+ onAccount?: AccountBase | Encoded.AccountAddress | Keypair;
303
+ }]>
304
+ : [Head]
305
+ : [Head, ...MakeOptional<Tail>]
306
+ : never;
307
+
308
+ type TransformMethods <Methods extends { [key: string]: Function }> =
309
+ {
310
+ [Name in keyof Methods]:
311
+ Methods[Name] extends (...args: infer Args) => infer Ret
312
+ ? (...args: MakeOptional<Args>) => Ret
313
+ : never
314
+ };
315
+
316
+ interface AeSdkBaseMethods extends TransformMethods<typeof methods> {}
317
+
318
+ Object.assign(AeSdkBase.prototype, mapObject<Function, Function>(
319
+ methods,
320
+ ([name, handler]) => [
321
+ name,
322
+ function methodWrapper(...args: any[]) {
323
+ const instanceOptions = this._getOptions();
324
+ const lastArg = args[args.length - 1];
325
+ if (lastArg != null && typeof lastArg === 'object' && lastArg.constructor === Object) {
326
+ args[args.length - 1] = {
327
+ ...instanceOptions,
328
+ ...lastArg,
329
+ ...lastArg.onAccount != null && { onAccount: this._resolveAccount(lastArg.onAccount) },
330
+ };
331
+ } else args.push(instanceOptions);
332
+ return handler(...args);
333
+ },
334
+ ],
335
+ ));
336
+
337
+ export default AeSdkBase as new (options?: ConstructorParameters<typeof AeSdkBase>[0]) =>
338
+ AeSdkBase & AeSdkBaseMethods;
@@ -0,0 +1,348 @@
1
+ import { v4 as uuid } from '@aeternity/uuid';
2
+ import AeSdk from './AeSdk';
3
+ import { Account } from './AeSdkBase';
4
+ import verifyTransaction from './tx/validator';
5
+ import RpcClient from './aepp-wallet-communication/rpc/RpcClient';
6
+ import {
7
+ METHODS, RPC_STATUS, SUBSCRIPTION_TYPES, WALLET_TYPE,
8
+ RpcBroadcastError, RpcInvalidTransactionError,
9
+ RpcNotAuthorizeError, RpcPermissionDenyError, RpcUnsupportedProtocolError,
10
+ } from './aepp-wallet-communication/schema';
11
+ import { InternalError, UnknownRpcClientError } from './utils/errors';
12
+ import AccountBase from './account/Base';
13
+ import BrowserConnection from './aepp-wallet-communication/connection/Browser';
14
+ import {
15
+ Accounts,
16
+ AeppApi,
17
+ Network,
18
+ RPC_VERSION,
19
+ WalletApi,
20
+ WalletInfo,
21
+ } from './aepp-wallet-communication/rpc/types';
22
+ import { Encoded } from './utils/encoder';
23
+ import jsonBig from './utils/json-big';
24
+
25
+ type RpcClientWallet = RpcClient<AeppApi, WalletApi>;
26
+
27
+ type OnConnection = (
28
+ clientId: string, params: Omit<Parameters<WalletApi[METHODS.connect]>[0], 'version'>, origin: string
29
+ ) => void;
30
+
31
+ type OnSubscription = (
32
+ clientId: string, params: Parameters<WalletApi[METHODS.subscribeAddress]>[0], origin: string
33
+ ) => void;
34
+
35
+ type OnSign = (
36
+ clientId: string, params: Parameters<WalletApi[METHODS.sign]>[0], origin: string
37
+ ) => Promise<{ tx?: Encoded.Transaction; onAccount?: Account } | undefined> | Promise<void>;
38
+
39
+ type OnDisconnect = (
40
+ clientId: string, params: Parameters<WalletApi[METHODS.closeConnection]>[0]
41
+ ) => void;
42
+
43
+ type OnAskAccounts = (
44
+ clientId: string, params: undefined, origin: string
45
+ ) => void;
46
+
47
+ type OnMessageSign = (
48
+ clientId: string, params: Parameters<WalletApi[METHODS.signMessage]>[0], origin: string
49
+ ) => Promise<{ onAccount?: Account } | undefined> | Promise<void>;
50
+
51
+ interface RpcClientsInfo {
52
+ id: string;
53
+ status: RPC_STATUS;
54
+ connectNode: boolean;
55
+ addressSubscription: Set<'connected' | 'current'>;
56
+ rpc: RpcClientWallet;
57
+ }
58
+
59
+ /**
60
+ * Contain functionality for aepp interaction and managing multiple aepps
61
+ * @category aepp wallet communication
62
+ */
63
+ export default class AeSdkWallet extends AeSdk {
64
+ id: string;
65
+
66
+ _type: WALLET_TYPE;
67
+
68
+ name: string;
69
+
70
+ _clients: Map<string, RpcClientsInfo>;
71
+
72
+ onConnection: OnConnection;
73
+
74
+ onSubscription: OnSubscription;
75
+
76
+ onSign: OnSign;
77
+
78
+ onDisconnect: OnDisconnect;
79
+
80
+ onAskAccounts: OnAskAccounts;
81
+
82
+ onMessageSign: OnMessageSign;
83
+
84
+ /**
85
+ * @param options - Options
86
+ * @param options.name - Wallet name
87
+ * @param options.id - Wallet id
88
+ * @param options.type - Wallet type
89
+ * @param options.onConnection - Call-back function for incoming AEPP connection
90
+ * @param options.onSubscription - Call-back function for incoming AEPP account subscription
91
+ * @param options.onSign - Call-back function for incoming AEPP sign request
92
+ * @param options.onAskAccounts - Call-back function for incoming AEPP get address request
93
+ * @param options.onMessageSign - Call-back function for incoming AEPP sign message request
94
+ * @param options.onDisconnect - Call-back function for disconnect event
95
+ */
96
+ constructor({
97
+ name,
98
+ id,
99
+ type,
100
+ onConnection,
101
+ onSubscription,
102
+ onSign,
103
+ onDisconnect,
104
+ onAskAccounts,
105
+ onMessageSign,
106
+ ...options
107
+ }: {
108
+ id: string;
109
+ type: WALLET_TYPE;
110
+ name: string;
111
+ onConnection: OnConnection;
112
+ onSubscription: OnSubscription;
113
+ onSign: OnSign;
114
+ onDisconnect: OnDisconnect;
115
+ onAskAccounts: OnAskAccounts;
116
+ onMessageSign: OnMessageSign;
117
+ } & ConstructorParameters<typeof AeSdk>[0]) {
118
+ super(options);
119
+ this.onConnection = onConnection;
120
+ this.onSubscription = onSubscription;
121
+ this.onSign = onSign;
122
+ this.onDisconnect = onDisconnect;
123
+ this.onAskAccounts = onAskAccounts;
124
+ this.onMessageSign = onMessageSign;
125
+ this._clients = new Map();
126
+ this.name = name;
127
+ this.id = id;
128
+ this._type = type;
129
+ }
130
+
131
+ _pushAccountsToApps(): void {
132
+ Array.from(this._clients.keys())
133
+ .filter((clientId) => this._isRpcClientSubscribed(clientId))
134
+ .map((clientId) => this._getClient(clientId).rpc)
135
+ .forEach((client) => client.notify(METHODS.updateAddress, this.getAccounts()));
136
+ }
137
+
138
+ selectAccount(address: Encoded.AccountAddress): void {
139
+ super.selectAccount(address);
140
+ this._pushAccountsToApps();
141
+ }
142
+
143
+ async addAccount(
144
+ account: AccountBase,
145
+ options?: Parameters<AeSdk['addAccount']>[1],
146
+ ): Promise<void> {
147
+ await super.addAccount(account, options);
148
+ this._pushAccountsToApps();
149
+ }
150
+
151
+ _getNode(): { node: Network['node'] } {
152
+ this.ensureNodeConnected();
153
+ return { node: { url: this.api.url, name: this.selectedNodeName } };
154
+ }
155
+
156
+ async selectNode(name: string): Promise<void> {
157
+ super.selectNode(name);
158
+ const networkId = await this.getNetworkId();
159
+ Array.from(this._clients.keys())
160
+ .filter((clientId) => this._isRpcClientConnected(clientId))
161
+ .map((clientId) => this._getClient(clientId))
162
+ .forEach((client) => {
163
+ client.rpc.notify(METHODS.updateNetwork, {
164
+ networkId,
165
+ ...client.connectNode && this._getNode(),
166
+ });
167
+ });
168
+ }
169
+
170
+ _getClient(clientId: string): RpcClientsInfo {
171
+ const client = this._clients.get(clientId);
172
+ if (client == null) throw new UnknownRpcClientError(clientId);
173
+ return client;
174
+ }
175
+
176
+ _isRpcClientSubscribed(clientId: string): boolean {
177
+ return this._isRpcClientConnected(clientId)
178
+ && this._getClient(clientId).addressSubscription.size !== 0;
179
+ }
180
+
181
+ _isRpcClientConnected(clientId: string): boolean {
182
+ return RPC_STATUS.CONNECTED === this._getClient(clientId).status
183
+ && this._getClient(clientId).rpc.connection.isConnected();
184
+ }
185
+
186
+ _disconnectRpcClient(clientId: string): void {
187
+ const client = this._getClient(clientId);
188
+ client.rpc.connection.disconnect();
189
+ client.status = RPC_STATUS.DISCONNECTED;
190
+ client.addressSubscription = new Set();
191
+ }
192
+
193
+ /**
194
+ * Remove specific RpcClient by ID
195
+ * @param id - Client ID
196
+ */
197
+ removeRpcClient(id: string): void {
198
+ this._disconnectRpcClient(id);
199
+ this._clients.delete(id);
200
+ }
201
+
202
+ /**
203
+ * Add new client by AEPP connection
204
+ * @param clientConnection - AEPP connection object
205
+ * @returns Client ID
206
+ */
207
+ addRpcClient(clientConnection: BrowserConnection): string {
208
+ // @TODO detect if aepp has some history based on origin????
209
+ // if yes use this instance for connection
210
+ const id = uuid();
211
+ let disconnectParams: any;
212
+ const client: RpcClientsInfo = {
213
+ id,
214
+ status: RPC_STATUS.WAITING_FOR_CONNECTION_REQUEST,
215
+ addressSubscription: new Set(),
216
+ connectNode: false,
217
+ rpc: new RpcClient<AeppApi, WalletApi>(
218
+ clientConnection,
219
+ () => {
220
+ this._clients.delete(id);
221
+ this.onDisconnect(id, disconnectParams); // also related info
222
+ },
223
+ {
224
+ [METHODS.closeConnection]: (params) => {
225
+ disconnectParams = params;
226
+ this._disconnectRpcClient(id);
227
+ },
228
+ // Store client info and prepare two fn for each client `connect` and `denyConnection`
229
+ // which automatically prepare and send response for that client
230
+ [METHODS.connect]: async ({
231
+ name, version, icons, connectNode,
232
+ }, origin) => {
233
+ if (version !== RPC_VERSION) throw new RpcUnsupportedProtocolError();
234
+
235
+ await this.onConnection(id, { name, icons, connectNode }, origin);
236
+ client.status = RPC_STATUS.CONNECTED;
237
+ client.connectNode = connectNode;
238
+ return {
239
+ ...await this.getWalletInfo(),
240
+ ...connectNode && this._getNode(),
241
+ };
242
+ },
243
+ [METHODS.subscribeAddress]: async ({ type, value }, origin) => {
244
+ if (!this._isRpcClientConnected(id)) throw new RpcNotAuthorizeError();
245
+
246
+ await this.onSubscription(id, { type, value }, origin);
247
+
248
+ switch (type) {
249
+ case SUBSCRIPTION_TYPES.subscribe:
250
+ client.addressSubscription.add(value);
251
+ break;
252
+ case SUBSCRIPTION_TYPES.unsubscribe:
253
+ client.addressSubscription.delete(value);
254
+ break;
255
+ default:
256
+ throw new InternalError(`Unknown subscription type: ${type}`);
257
+ }
258
+
259
+ return {
260
+ subscription: Array.from(client.addressSubscription),
261
+ address: this.getAccounts(),
262
+ };
263
+ },
264
+ [METHODS.address]: async (params, origin) => {
265
+ if (!this._isRpcClientSubscribed(id)) throw new RpcNotAuthorizeError();
266
+ await this.onAskAccounts(id, params, origin);
267
+ return this.addresses();
268
+ },
269
+ [METHODS.sign]: async ({ tx, onAccount, returnSigned }, origin) => {
270
+ if (!this._isRpcClientConnected(id)) throw new RpcNotAuthorizeError();
271
+ onAccount ??= await this.address();
272
+ if (!this.addresses().includes(onAccount)) {
273
+ throw new RpcPermissionDenyError(onAccount);
274
+ }
275
+
276
+ const overrides = await this.onSign(id, { tx, returnSigned, onAccount }, origin);
277
+ onAccount = overrides?.onAccount ?? onAccount;
278
+ tx = overrides?.tx ?? tx;
279
+ if (returnSigned) {
280
+ return { signedTransaction: await this.signTransaction(tx, { onAccount }) };
281
+ }
282
+ try {
283
+ return jsonBig.parse(jsonBig.stringify({
284
+ transactionHash: await this.send(tx, { onAccount, verify: false }),
285
+ }));
286
+ } catch (error) {
287
+ const validation = await verifyTransaction(tx, this.api);
288
+ if (validation.length > 0) throw new RpcInvalidTransactionError(validation);
289
+ throw new RpcBroadcastError(error.message);
290
+ }
291
+ },
292
+ [METHODS.signMessage]: async ({ message, onAccount }, origin) => {
293
+ if (!this._isRpcClientConnected(id)) throw new RpcNotAuthorizeError();
294
+ onAccount ??= await this.address();
295
+ if (!this.addresses().includes(onAccount)) {
296
+ throw new RpcPermissionDenyError(onAccount);
297
+ }
298
+
299
+ const overrides = await this.onMessageSign(id, { message, onAccount }, origin);
300
+ onAccount = overrides?.onAccount ?? onAccount;
301
+ return {
302
+ // TODO: fix signMessage return type
303
+ signature: await this.signMessage(message, { onAccount, returnHex: true }) as
304
+ unknown as string,
305
+ };
306
+ },
307
+ },
308
+ ),
309
+ };
310
+ this._clients.set(id, client);
311
+ return id;
312
+ }
313
+
314
+ /**
315
+ * Send shareWalletInfo message to notify AEPP about wallet
316
+ * @param clientId - ID of RPC client send message to
317
+ */
318
+ async shareWalletInfo(clientId: string): Promise<void> {
319
+ this._getClient(clientId).rpc.notify(METHODS.readyToConnect, await this.getWalletInfo());
320
+ }
321
+
322
+ /**
323
+ * Get Wallet info object
324
+ * @returns Object with wallet information
325
+ */
326
+ async getWalletInfo(): Promise<WalletInfo> {
327
+ return {
328
+ id: this.id,
329
+ name: this.name,
330
+ networkId: await this.getNetworkId(),
331
+ origin: window.location.origin,
332
+ type: this._type,
333
+ };
334
+ }
335
+
336
+ /**
337
+ * Get Wallet accounts
338
+ * @returns Object with accounts information (\{ connected: Object, current: Object \})
339
+ */
340
+ getAccounts(): Accounts {
341
+ return {
342
+ current: this.selectedAddress != null ? { [this.selectedAddress]: {} } : {},
343
+ connected: this.addresses()
344
+ .filter((a) => a !== this.selectedAddress)
345
+ .reduce((acc, a) => ({ ...acc, [a]: {} }), {}),
346
+ };
347
+ }
348
+ }