@aeternity/aepp-sdk 11.0.1 → 12.0.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 (376) 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 +12 -19
  4. package/dist/aepp-sdk.browser-script.js.map +1 -1
  5. package/dist/aepp-sdk.browser.js +1 -1
  6. package/dist/aepp-sdk.browser.js.map +1 -1
  7. package/dist/aepp-sdk.js +1 -1
  8. package/dist/aepp-sdk.js.map +1 -1
  9. package/es/AeSdk.d.ts +37 -0
  10. package/es/AeSdk.mjs +81 -0
  11. package/es/AeSdk.mjs.map +1 -0
  12. package/es/AeSdkAepp.d.ts +69 -0
  13. package/es/AeSdkAepp.mjs +175 -0
  14. package/es/AeSdkAepp.mjs.map +1 -0
  15. package/es/AeSdkBase.d.ts +212 -0
  16. package/es/AeSdkBase.mjs +310 -0
  17. package/es/AeSdkBase.mjs.map +1 -0
  18. package/es/AeSdkWallet.d.ts +103 -0
  19. package/es/AeSdkWallet.mjs +322 -0
  20. package/es/AeSdkWallet.mjs.map +1 -0
  21. package/es/Node.d.ts +44 -0
  22. package/es/Node.mjs +141 -0
  23. package/es/Node.mjs.map +1 -0
  24. package/es/account/Base.d.ts +65 -0
  25. package/es/account/Base.mjs +123 -0
  26. package/es/account/Base.mjs.map +1 -0
  27. package/es/account/Memory.d.ts +25 -0
  28. package/es/account/Memory.mjs +81 -0
  29. package/es/account/Memory.mjs.map +1 -0
  30. package/es/account/Rpc.d.ts +27 -0
  31. package/es/account/Rpc.mjs +79 -0
  32. package/es/account/Rpc.mjs.map +1 -0
  33. package/es/aens.d.ts +209 -0
  34. package/es/aens.mjs +332 -0
  35. package/es/aens.mjs.map +1 -0
  36. package/es/aepp-wallet-communication/connection/Browser.d.ts +32 -0
  37. package/es/aepp-wallet-communication/connection/Browser.mjs +70 -0
  38. package/es/aepp-wallet-communication/connection/Browser.mjs.map +1 -0
  39. package/es/aepp-wallet-communication/connection/BrowserRuntime.d.ts +17 -0
  40. package/es/aepp-wallet-communication/connection/BrowserRuntime.mjs +57 -0
  41. package/es/aepp-wallet-communication/connection/BrowserRuntime.mjs.map +1 -0
  42. package/es/aepp-wallet-communication/connection/BrowserWindowMessage.d.ts +35 -0
  43. package/es/aepp-wallet-communication/connection/BrowserWindowMessage.mjs +142 -0
  44. package/es/aepp-wallet-communication/connection/BrowserWindowMessage.mjs.map +1 -0
  45. package/es/aepp-wallet-communication/connection-proxy.d.ts +10 -0
  46. package/{src/utils/crypto-ts.ts → es/aepp-wallet-communication/connection-proxy.mjs} +15 -11
  47. package/es/aepp-wallet-communication/connection-proxy.mjs.map +1 -0
  48. package/es/aepp-wallet-communication/rpc/RpcClient.d.ts +33 -0
  49. package/es/aepp-wallet-communication/rpc/RpcClient.mjs +169 -0
  50. package/es/aepp-wallet-communication/rpc/RpcClient.mjs.map +1 -0
  51. package/es/aepp-wallet-communication/rpc/types.d.ts +77 -0
  52. package/es/aepp-wallet-communication/rpc/types.mjs +3 -0
  53. package/es/aepp-wallet-communication/rpc/types.mjs.map +1 -0
  54. package/es/aepp-wallet-communication/schema.d.ts +90 -46
  55. package/es/aepp-wallet-communication/schema.mjs +214 -0
  56. package/es/aepp-wallet-communication/schema.mjs.map +1 -0
  57. package/es/aepp-wallet-communication/wallet-detector.d.ts +24 -0
  58. package/es/aepp-wallet-communication/wallet-detector.mjs +63 -0
  59. package/es/aepp-wallet-communication/wallet-detector.mjs.map +1 -0
  60. package/es/apis/compiler/compiler.d.ts +92 -0
  61. package/es/apis/compiler/compiler.mjs +576 -0
  62. package/es/apis/compiler/compiler.mjs.map +1 -0
  63. package/es/apis/compiler/index.d.ts +2 -0
  64. package/es/apis/compiler/index.mjs +3 -0
  65. package/es/apis/compiler/index.mjs.map +1 -0
  66. package/es/apis/compiler/models/index.d.ts +248 -0
  67. package/es/apis/compiler/models/index.mjs +48 -0
  68. package/es/apis/compiler/models/index.mjs.map +1 -0
  69. package/es/apis/compiler/models/mappers.d.ts +23 -0
  70. package/es/apis/compiler/models/mappers.mjs +585 -0
  71. package/es/apis/compiler/models/mappers.mjs.map +1 -0
  72. package/es/apis/compiler/models/parameters.d.ts +13 -0
  73. package/es/apis/compiler/models/parameters.mjs +71 -0
  74. package/es/apis/compiler/models/parameters.mjs.map +1 -0
  75. package/es/apis/node/index.d.ts +2 -0
  76. package/es/apis/node/index.mjs +3 -0
  77. package/es/apis/node/index.mjs.map +1 -0
  78. package/es/apis/node/models/index.d.ts +1061 -0
  79. package/es/apis/node/models/index.mjs +2 -0
  80. package/es/apis/node/models/index.mjs.map +1 -0
  81. package/es/apis/node/models/mappers.d.ts +95 -0
  82. package/es/apis/node/models/mappers.mjs +4164 -0
  83. package/es/apis/node/models/mappers.mjs.map +1 -0
  84. package/es/apis/node/models/parameters.d.ts +17 -0
  85. package/es/apis/node/models/parameters.mjs +165 -0
  86. package/es/apis/node/models/parameters.mjs.map +1 -0
  87. package/es/apis/node/node.d.ts +215 -0
  88. package/es/apis/node/node.mjs +1165 -0
  89. package/es/apis/node/node.mjs.map +1 -0
  90. package/es/chain.d.ts +220 -0
  91. package/es/chain.mjs +524 -0
  92. package/es/chain.mjs.map +1 -0
  93. package/es/channel/handlers.d.ts +34 -0
  94. package/es/channel/handlers.mjs +147 -112
  95. package/es/channel/handlers.mjs.map +1 -1
  96. package/es/channel/index.d.ts +634 -0
  97. package/es/channel/index.mjs +898 -900
  98. package/es/channel/index.mjs.map +1 -1
  99. package/es/channel/internal.d.ts +100 -0
  100. package/es/channel/internal.mjs +97 -51
  101. package/es/channel/internal.mjs.map +1 -1
  102. package/es/contract/Compiler.d.ts +17 -0
  103. package/es/contract/Compiler.mjs +67 -0
  104. package/es/contract/Compiler.mjs.map +1 -0
  105. package/es/contract/aci.d.ts +125 -0
  106. package/es/contract/aci.mjs +199 -180
  107. package/es/contract/aci.mjs.map +1 -1
  108. package/es/contract/ga.d.ts +68 -0
  109. package/es/contract/ga.mjs +190 -0
  110. package/es/contract/ga.mjs.map +1 -0
  111. package/es/contract/methods.d.ts +68 -0
  112. package/es/contract/methods.mjs +101 -0
  113. package/es/contract/methods.mjs.map +1 -0
  114. package/es/index.d.ts +32 -0
  115. package/es/index.mjs +32 -40
  116. package/es/index.mjs.map +1 -1
  117. package/es/oracle.d.ts +154 -0
  118. package/es/oracle.mjs +288 -0
  119. package/es/oracle.mjs.map +1 -0
  120. package/es/spend.d.ts +61 -0
  121. package/es/spend.mjs +122 -0
  122. package/es/spend.mjs.map +1 -0
  123. package/es/tx/builder/constants.d.ts +41 -0
  124. package/es/tx/builder/constants.mjs +11 -19
  125. package/es/tx/builder/constants.mjs.map +1 -1
  126. package/es/tx/builder/field-types.d.ts +62 -0
  127. package/es/tx/builder/field-types.mjs +62 -10
  128. package/es/tx/builder/field-types.mjs.map +1 -1
  129. package/es/tx/builder/helpers.d.ts +131 -0
  130. package/es/tx/builder/helpers.mjs +71 -169
  131. package/es/tx/builder/helpers.mjs.map +1 -1
  132. package/es/tx/builder/index.d.ts +75 -0
  133. package/es/tx/builder/index.mjs +141 -323
  134. package/es/tx/builder/index.mjs.map +1 -1
  135. package/es/tx/builder/schema.d.ts +350 -0
  136. package/es/tx/builder/schema.mjs +173 -510
  137. package/es/tx/builder/schema.mjs.map +1 -1
  138. package/es/tx/index.d.ts +63 -0
  139. package/es/tx/index.mjs +171 -265
  140. package/es/tx/index.mjs.map +1 -1
  141. package/es/tx/min-fee.d.ts +20 -0
  142. package/es/tx/min-fee.mjs +148 -0
  143. package/es/tx/min-fee.mjs.map +1 -0
  144. package/es/tx/validator.d.ts +19 -0
  145. package/es/tx/validator.mjs +64 -71
  146. package/es/tx/validator.mjs.map +1 -1
  147. package/es/typings/@aeternity__argon2-browser/index.d.mjs +2 -0
  148. package/es/typings/@aeternity__argon2-browser/index.d.mjs.map +1 -0
  149. package/es/typings/@aeternity__uuid/index.d.mjs +2 -0
  150. package/es/typings/@aeternity__uuid/index.d.mjs.map +1 -0
  151. package/es/typings/bip32-path/index.d.mjs +2 -0
  152. package/es/typings/bip32-path/index.d.mjs.map +1 -0
  153. package/es/typings/blakejs/index.d.mjs.map +1 -1
  154. package/es/typings/tweetnacl-auth/index.d.mjs +2 -0
  155. package/es/typings/tweetnacl-auth/index.d.mjs.map +1 -0
  156. package/es/utils/amount-formatter.d.ts +42 -0
  157. package/es/utils/amount-formatter.mjs +28 -41
  158. package/es/utils/amount-formatter.mjs.map +1 -1
  159. package/es/utils/autorest.d.ts +6 -0
  160. package/es/utils/autorest.mjs +97 -0
  161. package/es/utils/autorest.mjs.map +1 -0
  162. package/es/utils/bignumber.d.ts +13 -0
  163. package/es/utils/bignumber.mjs +10 -8
  164. package/es/utils/bignumber.mjs.map +1 -1
  165. package/es/{bytes.d.ts → utils/bytes.d.ts} +10 -13
  166. package/es/utils/bytes.mjs +10 -14
  167. package/es/utils/bytes.mjs.map +1 -1
  168. package/es/utils/crypto.d.ts +103 -0
  169. package/es/utils/crypto.mjs +60 -68
  170. package/es/utils/crypto.mjs.map +1 -1
  171. package/es/utils/encoder.d.ts +26 -0
  172. package/es/utils/encoder.mjs +47 -51
  173. package/es/utils/encoder.mjs.map +1 -1
  174. package/es/{errors.d.ts → utils/errors.d.ts} +254 -57
  175. package/es/utils/errors.mjs +318 -125
  176. package/es/utils/errors.mjs.map +1 -1
  177. package/es/utils/hd-wallet.d.ts +34 -0
  178. package/es/utils/hd-wallet.mjs +27 -16
  179. package/es/utils/hd-wallet.mjs.map +1 -1
  180. package/es/utils/json-big.d.ts +5 -0
  181. package/es/utils/json-big.mjs +10 -14
  182. package/es/utils/json-big.mjs.map +1 -1
  183. package/es/utils/keystore.d.ts +51 -0
  184. package/es/utils/keystore.mjs +98 -193
  185. package/es/utils/keystore.mjs.map +1 -1
  186. package/es/{mptree.d.ts → utils/mptree.d.ts} +5 -8
  187. package/es/utils/mptree.mjs +13 -14
  188. package/es/utils/mptree.mjs.map +1 -1
  189. package/es/utils/other.d.ts +14 -0
  190. package/es/utils/other.mjs +21 -36
  191. package/es/utils/other.mjs.map +1 -1
  192. package/es/{semver-satisfies.d.ts → utils/semver-satisfies.d.ts} +0 -0
  193. package/es/utils/semver-satisfies.mjs.map +1 -1
  194. package/es/utils/string.d.ts +24 -0
  195. package/es/utils/string.mjs +8 -10
  196. package/es/utils/string.mjs.map +1 -1
  197. package/package.json +49 -39
  198. package/src/AeSdk.ts +65 -0
  199. package/src/AeSdkAepp.ts +167 -0
  200. package/src/AeSdkBase.ts +320 -0
  201. package/src/AeSdkWallet.ts +332 -0
  202. package/src/Node.ts +167 -0
  203. package/src/account/Base.ts +114 -0
  204. package/src/account/Memory.ts +83 -0
  205. package/src/account/Rpc.ts +67 -0
  206. package/src/aens.ts +391 -0
  207. package/src/aepp-wallet-communication/connection/Browser.ts +68 -0
  208. package/src/aepp-wallet-communication/connection/BrowserRuntime.ts +58 -0
  209. package/src/aepp-wallet-communication/connection/BrowserWindowMessage.ts +111 -0
  210. package/{es/utils/crypto-ts.mjs → src/aepp-wallet-communication/connection-proxy.ts} +16 -17
  211. package/src/aepp-wallet-communication/rpc/RpcClient.ts +137 -0
  212. package/src/aepp-wallet-communication/rpc/types.ts +66 -0
  213. package/src/aepp-wallet-communication/schema.ts +181 -0
  214. package/src/aepp-wallet-communication/wallet-detector.ts +71 -0
  215. package/src/apis/compiler/code-model-v4.yaml +2649 -0
  216. package/src/apis/compiler/compiler.ts +585 -0
  217. package/src/apis/compiler/index.ts +2 -0
  218. package/src/apis/compiler/models/index.ts +301 -0
  219. package/src/apis/compiler/models/mappers.ts +583 -0
  220. package/src/apis/compiler/models/parameters.ts +93 -0
  221. package/src/apis/node/code-model-v4.yaml +10046 -0
  222. package/src/apis/node/index.ts +2 -0
  223. package/src/apis/node/models/index.ts +1253 -0
  224. package/src/apis/node/models/mappers.ts +4278 -0
  225. package/src/apis/node/models/parameters.ts +188 -0
  226. package/src/apis/node/node.ts +1299 -0
  227. package/src/chain.ts +444 -0
  228. package/src/channel/{handlers.js → handlers.ts} +220 -128
  229. package/src/channel/index.ts +991 -0
  230. package/src/channel/internal.ts +345 -0
  231. package/src/contract/Compiler.ts +66 -0
  232. package/src/contract/aci.ts +529 -0
  233. package/src/contract/ga.ts +178 -0
  234. package/src/contract/methods.ts +118 -0
  235. package/src/index.ts +51 -0
  236. package/src/oracle.ts +342 -0
  237. package/src/spend.ts +152 -0
  238. package/src/tx/builder/{constants.js → constants.ts} +12 -16
  239. package/src/tx/builder/field-types.ts +111 -0
  240. package/src/tx/builder/helpers.ts +253 -0
  241. package/src/tx/builder/index.ts +394 -0
  242. package/src/tx/builder/schema.ts +771 -0
  243. package/src/tx/index.ts +199 -0
  244. package/src/tx/min-fee.ts +136 -0
  245. package/src/tx/validator.ts +226 -0
  246. package/src/typings/@aeternity__argon2-browser/index.d.ts +3 -0
  247. package/src/typings/@aeternity__uuid/index.d.ts +3 -0
  248. package/src/typings/bip32-path/index.d.ts +33 -0
  249. package/src/typings/tweetnacl-auth/index.d.ts +14 -0
  250. package/src/utils/amount-formatter.ts +29 -42
  251. package/src/utils/autorest.ts +90 -0
  252. package/src/utils/bignumber.ts +9 -11
  253. package/src/utils/bytes.ts +12 -14
  254. package/src/utils/crypto.ts +217 -0
  255. package/src/utils/encoder.ts +52 -55
  256. package/src/utils/errors.ts +268 -134
  257. package/src/utils/hd-wallet.ts +134 -0
  258. package/src/utils/json-big.ts +26 -0
  259. package/src/utils/keystore.ts +179 -0
  260. package/src/utils/mptree.ts +14 -14
  261. package/src/utils/other.ts +28 -43
  262. package/src/utils/string.ts +8 -10
  263. package/es/account/base.mjs +0 -179
  264. package/es/account/base.mjs.map +0 -1
  265. package/es/account/memory.mjs +0 -99
  266. package/es/account/memory.mjs.map +0 -1
  267. package/es/account/multiple.mjs +0 -179
  268. package/es/account/multiple.mjs.map +0 -1
  269. package/es/ae/aens.mjs +0 -404
  270. package/es/ae/aens.mjs.map +0 -1
  271. package/es/ae/aepp.mjs +0 -45
  272. package/es/ae/aepp.mjs.map +0 -1
  273. package/es/ae/contract.mjs +0 -159
  274. package/es/ae/contract.mjs.map +0 -1
  275. package/es/ae/index.mjs +0 -207
  276. package/es/ae/index.mjs.map +0 -1
  277. package/es/ae/oracle.mjs +0 -339
  278. package/es/ae/oracle.mjs.map +0 -1
  279. package/es/ae/universal.mjs +0 -45
  280. package/es/ae/universal.mjs.map +0 -1
  281. package/es/ae/wallet.mjs +0 -50
  282. package/es/ae/wallet.mjs.map +0 -1
  283. package/es/amount-formatter.d.ts +0 -58
  284. package/es/bignumber.d.ts +0 -18
  285. package/es/chain/index.mjs +0 -272
  286. package/es/chain/index.mjs.map +0 -1
  287. package/es/chain/node.mjs +0 -442
  288. package/es/chain/node.mjs.map +0 -1
  289. package/es/contract/compiler.mjs +0 -115
  290. package/es/contract/compiler.mjs.map +0 -1
  291. package/es/contract/ga/helpers.mjs +0 -30
  292. package/es/contract/ga/helpers.mjs.map +0 -1
  293. package/es/contract/ga/index.mjs +0 -178
  294. package/es/contract/ga/index.mjs.map +0 -1
  295. package/es/crypto-ts.d.ts +0 -9
  296. package/es/encoder.d.ts +0 -26
  297. package/es/node-pool/index.mjs +0 -188
  298. package/es/node-pool/index.mjs.map +0 -1
  299. package/es/node.mjs +0 -133
  300. package/es/node.mjs.map +0 -1
  301. package/es/other.d.ts +0 -31
  302. package/es/string.d.ts +0 -26
  303. package/es/tx/tx-object.mjs +0 -283
  304. package/es/tx/tx-object.mjs.map +0 -1
  305. package/es/tx/tx.mjs +0 -938
  306. package/es/tx/tx.mjs.map +0 -1
  307. package/es/utils/aepp-wallet-communication/connection/browser-runtime.mjs +0 -132
  308. package/es/utils/aepp-wallet-communication/connection/browser-runtime.mjs.map +0 -1
  309. package/es/utils/aepp-wallet-communication/connection/browser-window-message.mjs +0 -183
  310. package/es/utils/aepp-wallet-communication/connection/browser-window-message.mjs.map +0 -1
  311. package/es/utils/aepp-wallet-communication/connection/index.mjs +0 -87
  312. package/es/utils/aepp-wallet-communication/connection/index.mjs.map +0 -1
  313. package/es/utils/aepp-wallet-communication/content-script-bridge.mjs +0 -98
  314. package/es/utils/aepp-wallet-communication/content-script-bridge.mjs.map +0 -1
  315. package/es/utils/aepp-wallet-communication/helpers.mjs +0 -92
  316. package/es/utils/aepp-wallet-communication/helpers.mjs.map +0 -1
  317. package/es/utils/aepp-wallet-communication/rpc/aepp-rpc.mjs +0 -375
  318. package/es/utils/aepp-wallet-communication/rpc/aepp-rpc.mjs.map +0 -1
  319. package/es/utils/aepp-wallet-communication/rpc/rpc-client.mjs +0 -275
  320. package/es/utils/aepp-wallet-communication/rpc/rpc-client.mjs.map +0 -1
  321. package/es/utils/aepp-wallet-communication/rpc/wallet-rpc.mjs +0 -541
  322. package/es/utils/aepp-wallet-communication/rpc/wallet-rpc.mjs.map +0 -1
  323. package/es/utils/aepp-wallet-communication/schema.mjs +0 -102
  324. package/es/utils/aepp-wallet-communication/schema.mjs.map +0 -1
  325. package/es/utils/aepp-wallet-communication/wallet-detector.mjs +0 -110
  326. package/es/utils/aepp-wallet-communication/wallet-detector.mjs.map +0 -1
  327. package/es/utils/async-init.mjs +0 -64
  328. package/es/utils/async-init.mjs.map +0 -1
  329. package/es/utils/crypto-ts.mjs.map +0 -1
  330. package/es/utils/swagger.mjs +0 -164
  331. package/es/utils/swagger.mjs.map +0 -1
  332. package/src/account/base.js +0 -153
  333. package/src/account/memory.js +0 -83
  334. package/src/account/multiple.js +0 -162
  335. package/src/ae/aens.js +0 -361
  336. package/src/ae/aepp.js +0 -45
  337. package/src/ae/contract.js +0 -148
  338. package/src/ae/index.js +0 -168
  339. package/src/ae/oracle.js +0 -311
  340. package/src/ae/universal.js +0 -47
  341. package/src/ae/wallet.js +0 -50
  342. package/src/chain/index.js +0 -269
  343. package/src/chain/node.js +0 -320
  344. package/src/channel/index.js +0 -903
  345. package/src/channel/internal.js +0 -236
  346. package/src/contract/aci.js +0 -376
  347. package/src/contract/compiler.js +0 -100
  348. package/src/contract/ga/helpers.js +0 -19
  349. package/src/contract/ga/index.js +0 -150
  350. package/src/index.js +0 -89
  351. package/src/node-pool/index.js +0 -172
  352. package/src/node.js +0 -116
  353. package/src/tx/builder/field-types.js +0 -61
  354. package/src/tx/builder/helpers.js +0 -334
  355. package/src/tx/builder/index.js +0 -465
  356. package/src/tx/builder/schema.js +0 -1100
  357. package/src/tx/index.js +0 -301
  358. package/src/tx/tx-object.js +0 -187
  359. package/src/tx/tx.js +0 -631
  360. package/src/tx/validator.js +0 -181
  361. package/src/utils/aepp-wallet-communication/connection/browser-runtime.js +0 -119
  362. package/src/utils/aepp-wallet-communication/connection/browser-window-message.js +0 -165
  363. package/src/utils/aepp-wallet-communication/connection/index.js +0 -85
  364. package/src/utils/aepp-wallet-communication/content-script-bridge.js +0 -86
  365. package/src/utils/aepp-wallet-communication/helpers.js +0 -60
  366. package/src/utils/aepp-wallet-communication/rpc/aepp-rpc.js +0 -294
  367. package/src/utils/aepp-wallet-communication/rpc/rpc-client.js +0 -232
  368. package/src/utils/aepp-wallet-communication/rpc/wallet-rpc.js +0 -401
  369. package/src/utils/aepp-wallet-communication/schema.ts +0 -80
  370. package/src/utils/aepp-wallet-communication/wallet-detector.js +0 -92
  371. package/src/utils/async-init.js +0 -45
  372. package/src/utils/crypto.js +0 -219
  373. package/src/utils/hd-wallet.js +0 -100
  374. package/src/utils/json-big.js +0 -26
  375. package/src/utils/keystore.js +0 -219
  376. package/src/utils/swagger.js +0 -156
@@ -0,0 +1,137 @@
1
+ import { RpcError, RpcInternalError, RpcMethodNotFoundError } from '../schema'
2
+ import BrowserConnection from '../connection/Browser'
3
+ import { InvalidRpcMessageError, MissingCallbackError } from '../../utils/errors'
4
+
5
+ interface JsonRpcRequest {
6
+ jsonrpc: '2.0'
7
+ id: number
8
+ method: string
9
+ params?: any
10
+ }
11
+
12
+ interface JsonRpcResponse {
13
+ jsonrpc: '2.0'
14
+ id: number
15
+ method: string
16
+ result?: any
17
+ error?: {
18
+ code: number
19
+ message: string
20
+ data?: any
21
+ }
22
+ }
23
+
24
+ type RpcApiHandler = (p?: any) => any | undefined
25
+ type RpcApi<Api> = { [k in keyof Api]: RpcApiHandler }
26
+ type WithOrigin<Api extends RpcApi<Api>> = {
27
+ [k in keyof Api]: (p: Parameters<Api[k]>[0], origin: string) => ReturnType<Api[k]>
28
+ }
29
+
30
+ /**
31
+ * Contain functionality for using RPC conection
32
+ * @param connection - Connection object
33
+ * @param onDisconnect - Disconnect callback
34
+ * @param methods - Object containing handlers for each request by name
35
+ */
36
+ export default class RpcClient <
37
+ RemoteApi extends RpcApi<RemoteApi>, LocalApi extends RpcApi<LocalApi>
38
+ > {
39
+ connection: BrowserConnection
40
+ #callbacks = new Map<number, { resolve: (v: any) => void, reject: (e: Error) => void }>()
41
+ #messageId = 0
42
+ #methods: WithOrigin<LocalApi>
43
+
44
+ constructor (
45
+ connection: BrowserConnection,
46
+ onDisconnect: () => void,
47
+ methods: WithOrigin<LocalApi>
48
+ ) {
49
+ this.connection = connection
50
+ this.#methods = methods
51
+ connection.connect(this.#handleMessage.bind(this), onDisconnect)
52
+ }
53
+
54
+ async #handleMessage (msg: JsonRpcRequest | JsonRpcResponse, origin: string): Promise<void> {
55
+ if (msg?.jsonrpc !== '2.0') throw new InvalidRpcMessageError(JSON.stringify(msg))
56
+ if ('result' in msg || 'error' in msg) {
57
+ this.#processResponse(msg)
58
+ return
59
+ }
60
+
61
+ const request = msg as JsonRpcRequest
62
+ let result, error
63
+ try {
64
+ if (!(request.method in this.#methods)) throw new RpcMethodNotFoundError()
65
+ const methodName = request.method as keyof LocalApi
66
+ result = await this.#methods[methodName](request.params, origin)
67
+ } catch (e) {
68
+ error = e instanceof RpcError ? e : new RpcInternalError()
69
+ }
70
+ if (request.id != null) {
71
+ this.#sendResponse(request.id, request.method as keyof LocalApi, result, error)
72
+ }
73
+ }
74
+
75
+ #sendRequest (
76
+ id: number | undefined,
77
+ method: keyof RemoteApi | keyof LocalApi,
78
+ params?: any
79
+ ): void {
80
+ this.connection.sendMessage({
81
+ jsonrpc: '2.0',
82
+ ...id != null ? { id } : {},
83
+ method,
84
+ ...params != null ? { params } : {}
85
+ })
86
+ }
87
+
88
+ #sendResponse (
89
+ id: number,
90
+ method: keyof RemoteApi | keyof LocalApi, // TODO: remove as far it is not required in JSON RPC
91
+ result?: any,
92
+ error?: any
93
+ ): void {
94
+ this.connection.sendMessage({
95
+ jsonrpc: '2.0',
96
+ id,
97
+ method,
98
+ ...error != null ? { error } : { result }
99
+ })
100
+ }
101
+
102
+ /**
103
+ * Make a request
104
+ * @param name - Method name
105
+ * @param params - Method params
106
+ * @returns Promise which will be resolved after receiving response message
107
+ */
108
+ async request<Name extends keyof RemoteApi> (
109
+ name: Name, params: Parameters<RemoteApi[Name]>[0]
110
+ ): Promise<ReturnType<RemoteApi[Name]>> {
111
+ this.#sendRequest(++this.#messageId, name, params)
112
+ return await new Promise((resolve, reject) => {
113
+ this.#callbacks.set(this.#messageId, { resolve, reject })
114
+ })
115
+ }
116
+
117
+ /**
118
+ * Make a notification
119
+ * @param name - Method name
120
+ * @param params - Method params
121
+ */
122
+ notify<Name extends keyof RemoteApi> (name: Name, params: Parameters<RemoteApi[Name]>[0]): void {
123
+ this.#sendRequest(undefined, name, params)
124
+ }
125
+
126
+ /**
127
+ * Process response message
128
+ * @param msg - Message object
129
+ */
130
+ #processResponse ({ id, error, result }: { id: number, error?: any, result?: any }): void {
131
+ const callbacks = this.#callbacks.get(id)
132
+ if (callbacks == null) throw new MissingCallbackError(id)
133
+ if (error != null) callbacks.reject(RpcError.deserialize(error))
134
+ else callbacks.resolve(result)
135
+ this.#callbacks.delete(id)
136
+ }
137
+ }
@@ -0,0 +1,66 @@
1
+ import { send } from '../../spend'
2
+ import { EncodedData } from '../../utils/encoder'
3
+ import { METHODS, SUBSCRIPTION_TYPES, WALLET_TYPE } from '../schema'
4
+
5
+ export interface WalletInfo {
6
+ id: string
7
+ name: string
8
+ networkId: string
9
+ origin: string
10
+ type: WALLET_TYPE
11
+ }
12
+
13
+ export interface Accounts {
14
+ connected: { [pub: EncodedData<'ak'>]: {} }
15
+ current: { [pub: EncodedData<'ak'>]: {} }
16
+ }
17
+
18
+ export interface Node {
19
+ name: string
20
+ url: string
21
+ }
22
+
23
+ export interface Network {
24
+ networkId: string
25
+ node?: Node
26
+ }
27
+
28
+ type Icons = Array<{ src: string, sizes?: string, type?: string, purpose?: string }>
29
+
30
+ export const RPC_VERSION = 1
31
+
32
+ export interface WalletApi {
33
+ [METHODS.connect]: (
34
+ p: { name: string, icons?: Icons, version: typeof RPC_VERSION, connectNode: boolean }
35
+ ) => Promise<WalletInfo & { node?: Node }>
36
+
37
+ [METHODS.closeConnection]: (p: any) => void
38
+
39
+ [METHODS.subscribeAddress]: (
40
+ p: { type: SUBSCRIPTION_TYPES, value: 'connected' | 'current' }
41
+ ) => Promise<{ subscription: Array<'connected' | 'current'>, address: Accounts }>
42
+
43
+ [METHODS.address]: () => Promise<Array<EncodedData<'ak'>>>
44
+
45
+ [METHODS.sign]: ((
46
+ p: { tx: EncodedData<'tx'>, onAccount: EncodedData<'ak'>, returnSigned: boolean }
47
+ ) => Promise<{
48
+ /**
49
+ * @deprecated this is not a hash at all, will be removed later at the same time
50
+ * as dropping ability to broadcast transaction by wallet
51
+ */
52
+ transactionHash?: Awaited<ReturnType<typeof send>>
53
+ signedTransaction?: EncodedData<'tx'>
54
+ }>)
55
+
56
+ [METHODS.signMessage]: (
57
+ p: { message: string, onAccount: EncodedData<'ak'> }
58
+ ) => Promise<{ signature: string }>
59
+ }
60
+
61
+ export interface AeppApi {
62
+ [METHODS.updateAddress]: (a: Accounts) => void
63
+ [METHODS.updateNetwork]: (a: Network) => void
64
+ [METHODS.readyToConnect]: (w: WalletInfo) => void
65
+ [METHODS.closeConnection]: (p: any) => void
66
+ }
@@ -0,0 +1,181 @@
1
+ import { EncodedData } from '../utils/encoder'
2
+ import { BaseError, InternalError } from '../utils/errors'
3
+
4
+ export const enum MESSAGE_DIRECTION {
5
+ to_waellet = 'to_waellet',
6
+ to_aepp = 'to_aepp'
7
+ }
8
+
9
+ export const enum WALLET_TYPE {
10
+ window = 'window',
11
+ extension = 'extension'
12
+ }
13
+
14
+ export const enum SUBSCRIPTION_TYPES {
15
+ subscribe = 'subscribe',
16
+ unsubscribe = 'unsubscribe'
17
+ }
18
+
19
+ export const enum METHODS {
20
+ readyToConnect = 'connection.announcePresence',
21
+ updateAddress = 'address.update',
22
+ address = 'address.get',
23
+ connect = 'connection.open',
24
+ sign = 'transaction.sign',
25
+ signMessage = 'message.sign',
26
+ subscribeAddress = 'address.subscribe',
27
+ updateNetwork = 'networkId.update',
28
+ closeConnection = 'connection.close'
29
+ }
30
+
31
+ export const enum RPC_STATUS {
32
+ CONNECTED = 'CONNECTED',
33
+ DISCONNECTED = 'DISCONNECTED',
34
+ WAITING_FOR_CONNECTION_REQUEST = 'WAITING_FOR_CONNECTION_REQUEST'
35
+ }
36
+
37
+ interface RpcErrorAsJson {
38
+ code: number
39
+ message: string
40
+ data?: any
41
+ }
42
+
43
+ /**
44
+ * @category exception
45
+ */
46
+ export abstract class RpcError extends BaseError {
47
+ static code: number
48
+ code: number
49
+ data?: any
50
+
51
+ toJSON (): RpcErrorAsJson {
52
+ return {
53
+ code: this.code,
54
+ message: this.message,
55
+ data: this.data
56
+ }
57
+ }
58
+
59
+ static deserialize (json: RpcErrorAsJson): RpcError {
60
+ const RpcErr = [
61
+ RpcInvalidTransactionError, RpcBroadcastError, RpcRejectedByUserError,
62
+ RpcUnsupportedProtocolError, RpcConnectionDenyError, RpcNotAuthorizeError,
63
+ RpcPermissionDenyError, RpcInternalError
64
+ ].find(cl => cl.code === json.code)
65
+ if (RpcErr == null) throw new InternalError(`Can't find RpcError with code: ${json.code}`)
66
+ return new RpcErr(json.data)
67
+ }
68
+ }
69
+
70
+ /**
71
+ * @category exception
72
+ */
73
+ export class RpcInvalidTransactionError extends RpcError {
74
+ static code = 2
75
+ code = 2
76
+ constructor (data?: any) {
77
+ super('Invalid transaction')
78
+ this.data = data
79
+ this.name = 'RpcInvalidTransactionError'
80
+ }
81
+ }
82
+
83
+ /**
84
+ * @category exception
85
+ */
86
+ export class RpcBroadcastError extends RpcError {
87
+ static code = 3
88
+ code = 3
89
+ constructor (data?: any) {
90
+ super('Broadcast failed')
91
+ this.data = data
92
+ this.name = 'RpcBroadcastError'
93
+ }
94
+ }
95
+
96
+ /**
97
+ * @category exception
98
+ */
99
+ export class RpcRejectedByUserError extends RpcError {
100
+ static code = 4
101
+ code = 4
102
+ constructor (data?: any) {
103
+ super('Operation rejected by user')
104
+ this.data = data
105
+ this.name = 'RpcRejectedByUserError'
106
+ }
107
+ }
108
+
109
+ /**
110
+ * @category exception
111
+ */
112
+ export class RpcUnsupportedProtocolError extends RpcError {
113
+ static code = 5
114
+ code = 5
115
+ constructor () {
116
+ super('Unsupported Protocol Version')
117
+ this.name = 'RpcUnsupportedProtocolError'
118
+ }
119
+ }
120
+
121
+ /**
122
+ * @category exception
123
+ */
124
+ export class RpcConnectionDenyError extends RpcError {
125
+ static code = 9
126
+ code = 9
127
+ constructor (data?: any) {
128
+ super('Wallet deny your connection request')
129
+ this.data = data
130
+ this.name = 'RpcConnectionDenyError'
131
+ }
132
+ }
133
+
134
+ /**
135
+ * @category exception
136
+ */
137
+ export class RpcNotAuthorizeError extends RpcError {
138
+ static code = 10
139
+ code = 10
140
+ constructor () {
141
+ super('You are not connected to the wallet')
142
+ this.name = 'RpcNotAuthorizeError'
143
+ }
144
+ }
145
+
146
+ /**
147
+ * @category exception
148
+ */
149
+ export class RpcPermissionDenyError extends RpcError {
150
+ static code = 11
151
+ code = 11
152
+ constructor (address: EncodedData<'ak'>) {
153
+ super(`You are not subscribed for account ${address}`)
154
+ this.data = address
155
+ this.name = 'RpcPermissionDenyError'
156
+ }
157
+ }
158
+
159
+ /**
160
+ * @category exception
161
+ */
162
+ export class RpcInternalError extends RpcError {
163
+ static code = 12
164
+ code = 12
165
+ constructor () {
166
+ super('The peer failed to execute your request due to unknown error')
167
+ this.name = 'RpcInternalError'
168
+ }
169
+ }
170
+
171
+ /**
172
+ * @category exception
173
+ */
174
+ export class RpcMethodNotFoundError extends RpcError {
175
+ static code = -32601
176
+ code = -32601
177
+ constructor () {
178
+ super('Method not found')
179
+ this.name = 'RpcMethodNotFoundError'
180
+ }
181
+ }
@@ -0,0 +1,71 @@
1
+ /*
2
+ * ISC License (ISC)
3
+ * Copyright (c) 2022 aeternity developers
4
+ *
5
+ * Permission to use, copy, modify, and/or distribute this software for any
6
+ * purpose with or without fee is hereby granted, provided that the above
7
+ * copyright notice and this permission notice appear in all copies.
8
+ *
9
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
10
+ * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
11
+ * AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
12
+ * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
13
+ * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
14
+ * OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
15
+ * PERFORMANCE OF THIS SOFTWARE.
16
+ */
17
+
18
+ import BrowserConnection from './connection/Browser'
19
+ import BrowserWindowMessageConnection from './connection/BrowserWindowMessage'
20
+ import { MESSAGE_DIRECTION, METHODS } from './schema'
21
+ import { UnsupportedPlatformError } from '../utils/errors'
22
+
23
+ interface Wallet {
24
+ info: {
25
+ id: string
26
+ type: string
27
+ origin: string
28
+ }
29
+ getConnection: () => BrowserWindowMessageConnection
30
+ }
31
+ interface Wallets { [key: string]: Wallet }
32
+
33
+ /**
34
+ * A function to detect available wallets
35
+ * @param connection - connection to use to detect wallets
36
+ * @param onDetected - call-back function which trigger on new wallet
37
+ * @returns a function to stop scanning
38
+ */
39
+ export default (
40
+ connection: BrowserConnection = new BrowserWindowMessageConnection(),
41
+ onDetected: ({ wallets, newWallet }: { wallets: Wallets, newWallet?: Wallet }) => void
42
+ ): () => void => {
43
+ if (window == null) throw new UnsupportedPlatformError('Window object not found, you can run wallet detector only in browser')
44
+ const wallets: Wallets = {}
45
+
46
+ connection.connect((
47
+ { method, params }: { method: string, params: Wallet['info'] },
48
+ origin: string,
49
+ source: Window
50
+ ) => {
51
+ if (method !== METHODS.readyToConnect || wallets[params.id] != null) return
52
+
53
+ const wallet = {
54
+ info: params,
55
+ getConnection () {
56
+ const isExtension = params.type === 'extension'
57
+ return new BrowserWindowMessageConnection({
58
+ sendDirection: isExtension ? MESSAGE_DIRECTION.to_waellet : undefined,
59
+ receiveDirection: isExtension ? MESSAGE_DIRECTION.to_aepp : undefined,
60
+ target: source,
61
+ origin: isExtension ? window.origin : params.origin
62
+ })
63
+ }
64
+ }
65
+ wallets[wallet.info.id] = wallet
66
+ onDetected({ wallets, newWallet: wallet })
67
+ }, () => {})
68
+ if (Object.keys(wallets).length > 0) onDetected({ wallets })
69
+
70
+ return () => connection.disconnect()
71
+ }