@aeternity/aepp-sdk 9.0.1 → 11.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 (284) hide show
  1. package/README.md +15 -14
  2. package/dist/aepp-sdk.browser-script.js +1 -1
  3. package/dist/aepp-sdk.browser-script.js.LICENSE.txt +7 -36
  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/account/base.mjs +179 -0
  10. package/es/account/base.mjs.map +1 -0
  11. package/es/account/memory.mjs +99 -0
  12. package/es/account/memory.mjs.map +1 -0
  13. package/es/account/multiple.mjs +179 -0
  14. package/es/account/multiple.mjs.map +1 -0
  15. package/es/ae/aens.mjs +404 -0
  16. package/es/ae/aens.mjs.map +1 -0
  17. package/es/ae/{aepp.js → aepp.mjs} +9 -9
  18. package/es/ae/aepp.mjs.map +1 -0
  19. package/es/ae/contract.mjs +159 -0
  20. package/es/ae/contract.mjs.map +1 -0
  21. package/es/ae/index.mjs +207 -0
  22. package/es/ae/index.mjs.map +1 -0
  23. package/es/ae/oracle.mjs +339 -0
  24. package/es/ae/oracle.mjs.map +1 -0
  25. package/es/ae/{universal.js → universal.mjs} +10 -10
  26. package/es/ae/universal.mjs.map +1 -0
  27. package/es/ae/{wallet.js → wallet.mjs} +10 -10
  28. package/es/ae/wallet.mjs.map +1 -0
  29. package/es/aepp-wallet-communication/schema.d.ts +74 -0
  30. package/es/bignumber.d.ts +1 -7
  31. package/es/chain/{index.js → index.mjs} +29 -9
  32. package/es/chain/index.mjs.map +1 -0
  33. package/es/chain/node.mjs +442 -0
  34. package/es/chain/node.mjs.map +1 -0
  35. package/es/channel/handlers.mjs +1110 -0
  36. package/es/channel/handlers.mjs.map +1 -0
  37. package/es/channel/{index.js → index.mjs} +245 -472
  38. package/es/channel/index.mjs.map +1 -0
  39. package/es/channel/internal.mjs +283 -0
  40. package/es/channel/internal.mjs.map +1 -0
  41. package/es/contract/aci.mjs +477 -0
  42. package/es/contract/aci.mjs.map +1 -0
  43. package/es/contract/compiler.mjs +115 -0
  44. package/es/contract/compiler.mjs.map +1 -0
  45. package/es/contract/ga/helpers.mjs +30 -0
  46. package/es/contract/ga/helpers.mjs.map +1 -0
  47. package/es/contract/ga/index.mjs +178 -0
  48. package/es/contract/ga/index.mjs.map +1 -0
  49. package/es/errors.d.ts +284 -0
  50. package/es/index.mjs +57 -0
  51. package/es/index.mjs.map +1 -0
  52. package/es/node-pool/index.mjs +188 -0
  53. package/es/node-pool/index.mjs.map +1 -0
  54. package/es/node.mjs +133 -0
  55. package/es/node.mjs.map +1 -0
  56. package/es/other.d.ts +1 -1
  57. package/es/tx/builder/field-types.mjs +74 -0
  58. package/es/tx/builder/field-types.mjs.map +1 -0
  59. package/es/tx/builder/helpers.mjs +363 -0
  60. package/es/tx/builder/helpers.mjs.map +1 -0
  61. package/es/tx/builder/index.mjs +606 -0
  62. package/es/tx/builder/index.mjs.map +1 -0
  63. package/es/tx/builder/schema.mjs +760 -0
  64. package/es/tx/builder/schema.mjs.map +1 -0
  65. package/es/tx/{index.js → index.mjs} +107 -15
  66. package/es/tx/index.mjs.map +1 -0
  67. package/es/tx/tx-object.mjs +283 -0
  68. package/es/tx/tx-object.mjs.map +1 -0
  69. package/es/tx/tx.mjs +938 -0
  70. package/es/tx/tx.mjs.map +1 -0
  71. package/es/tx/validator.mjs +247 -0
  72. package/es/tx/validator.mjs.map +1 -0
  73. package/es/typings/blakejs/index.d.mjs +2 -0
  74. package/es/typings/blakejs/{index.d.js.map → index.d.mjs.map} +1 -1
  75. package/es/utils/aepp-wallet-communication/connection/{browser-runtime.js → browser-runtime.mjs} +27 -29
  76. package/es/utils/aepp-wallet-communication/connection/browser-runtime.mjs.map +1 -0
  77. package/es/utils/aepp-wallet-communication/connection/browser-window-message.mjs +183 -0
  78. package/es/utils/aepp-wallet-communication/connection/browser-window-message.mjs.map +1 -0
  79. package/es/utils/aepp-wallet-communication/connection/{index.js → index.mjs} +7 -3
  80. package/es/utils/aepp-wallet-communication/connection/index.mjs.map +1 -0
  81. package/es/utils/aepp-wallet-communication/{content-script-bridge.js → content-script-bridge.mjs} +29 -23
  82. package/es/utils/aepp-wallet-communication/content-script-bridge.mjs.map +1 -0
  83. package/es/utils/aepp-wallet-communication/helpers.mjs +92 -0
  84. package/es/utils/aepp-wallet-communication/helpers.mjs.map +1 -0
  85. package/es/utils/aepp-wallet-communication/rpc/aepp-rpc.mjs +375 -0
  86. package/es/utils/aepp-wallet-communication/rpc/aepp-rpc.mjs.map +1 -0
  87. package/es/utils/aepp-wallet-communication/rpc/rpc-client.mjs +275 -0
  88. package/es/utils/aepp-wallet-communication/rpc/rpc-client.mjs.map +1 -0
  89. package/es/utils/aepp-wallet-communication/rpc/wallet-rpc.mjs +541 -0
  90. package/es/utils/aepp-wallet-communication/rpc/wallet-rpc.mjs.map +1 -0
  91. package/es/utils/aepp-wallet-communication/schema.mjs +102 -0
  92. package/es/utils/aepp-wallet-communication/schema.mjs.map +1 -0
  93. package/es/utils/aepp-wallet-communication/wallet-detector.mjs +110 -0
  94. package/es/utils/aepp-wallet-communication/wallet-detector.mjs.map +1 -0
  95. package/es/utils/amount-formatter.mjs +139 -0
  96. package/es/utils/amount-formatter.mjs.map +1 -0
  97. package/es/utils/async-init.mjs +64 -0
  98. package/es/utils/async-init.mjs.map +1 -0
  99. package/es/utils/bignumber.mjs +21 -0
  100. package/es/utils/bignumber.mjs.map +1 -0
  101. package/es/utils/{bytes.js → bytes.mjs} +16 -12
  102. package/es/utils/bytes.mjs.map +1 -0
  103. package/es/utils/{crypto-ts.js → crypto-ts.mjs} +11 -3
  104. package/es/utils/crypto-ts.mjs.map +1 -0
  105. package/es/utils/crypto.mjs +239 -0
  106. package/es/utils/crypto.mjs.map +1 -0
  107. package/es/utils/errors.mjs +689 -0
  108. package/es/utils/errors.mjs.map +1 -0
  109. package/es/utils/hd-wallet.mjs +111 -0
  110. package/es/utils/hd-wallet.mjs.map +1 -0
  111. package/es/utils/json-big.mjs +45 -0
  112. package/es/utils/json-big.mjs.map +1 -0
  113. package/es/utils/keystore.mjs +240 -0
  114. package/es/utils/keystore.mjs.map +1 -0
  115. package/es/utils/mptree.mjs +161 -0
  116. package/es/utils/mptree.mjs.map +1 -0
  117. package/es/utils/other.mjs +43 -0
  118. package/es/utils/other.mjs.map +1 -0
  119. package/es/utils/semver-satisfies.mjs +16 -0
  120. package/es/utils/semver-satisfies.mjs.map +1 -0
  121. package/es/utils/{string.js → string.mjs} +5 -14
  122. package/es/utils/string.mjs.map +1 -0
  123. package/es/utils/swagger.mjs +164 -0
  124. package/es/utils/swagger.mjs.map +1 -0
  125. package/package.json +55 -62
  126. package/src/account/base.js +3 -1
  127. package/src/account/memory.js +13 -8
  128. package/src/account/multiple.js +31 -22
  129. package/src/ae/aens.js +75 -77
  130. package/src/ae/aepp.js +2 -2
  131. package/src/ae/contract.js +27 -291
  132. package/src/ae/index.js +9 -7
  133. package/src/ae/oracle.js +51 -28
  134. package/src/ae/universal.js +4 -2
  135. package/src/ae/wallet.js +2 -2
  136. package/src/chain/index.js +29 -6
  137. package/src/chain/node.js +95 -67
  138. package/src/channel/handlers.js +30 -21
  139. package/src/channel/index.js +44 -20
  140. package/src/channel/internal.js +30 -24
  141. package/src/contract/aci.js +376 -0
  142. package/src/contract/compiler.js +41 -91
  143. package/src/contract/ga/helpers.js +10 -13
  144. package/src/contract/ga/index.js +42 -33
  145. package/src/index.js +9 -10
  146. package/src/node-pool/index.js +29 -17
  147. package/src/node.js +33 -36
  148. package/src/tx/builder/field-types.js +61 -0
  149. package/src/tx/builder/helpers.js +126 -84
  150. package/src/tx/builder/index.js +83 -41
  151. package/src/tx/builder/schema.js +50 -40
  152. package/src/tx/index.js +101 -12
  153. package/src/tx/tx-object.js +35 -15
  154. package/src/tx/tx.js +232 -153
  155. package/src/tx/validator.js +34 -12
  156. package/src/utils/aepp-wallet-communication/connection/browser-runtime.js +11 -5
  157. package/src/utils/aepp-wallet-communication/connection/browser-window-message.js +35 -13
  158. package/src/utils/aepp-wallet-communication/connection/index.js +2 -1
  159. package/src/utils/aepp-wallet-communication/content-script-bridge.js +14 -7
  160. package/src/utils/aepp-wallet-communication/helpers.js +6 -14
  161. package/src/utils/aepp-wallet-communication/rpc/aepp-rpc.js +107 -60
  162. package/src/utils/aepp-wallet-communication/rpc/rpc-client.js +24 -11
  163. package/src/utils/aepp-wallet-communication/rpc/wallet-rpc.js +98 -56
  164. package/src/utils/aepp-wallet-communication/schema.ts +80 -0
  165. package/src/utils/aepp-wallet-communication/wallet-detector.js +6 -2
  166. package/src/utils/amount-formatter.ts +4 -3
  167. package/src/utils/async-init.js +10 -6
  168. package/src/utils/bignumber.ts +3 -10
  169. package/src/utils/bytes.ts +3 -2
  170. package/src/utils/crypto-ts.ts +2 -2
  171. package/src/utils/crypto.js +10 -144
  172. package/src/utils/errors.ts +683 -0
  173. package/src/utils/hd-wallet.js +11 -26
  174. package/src/utils/keystore.js +57 -53
  175. package/src/utils/mptree.ts +12 -6
  176. package/src/utils/other.ts +1 -1
  177. package/src/utils/semver-satisfies.ts +1 -1
  178. package/src/utils/swagger.js +75 -45
  179. package/es/account/base.js +0 -259
  180. package/es/account/base.js.map +0 -1
  181. package/es/account/memory.js +0 -86
  182. package/es/account/memory.js.map +0 -1
  183. package/es/account/multiple.js +0 -267
  184. package/es/account/multiple.js.map +0 -1
  185. package/es/ae/aens.js +0 -829
  186. package/es/ae/aens.js.map +0 -1
  187. package/es/ae/aepp.js.map +0 -1
  188. package/es/ae/contract.js +0 -985
  189. package/es/ae/contract.js.map +0 -1
  190. package/es/ae/index.js +0 -442
  191. package/es/ae/index.js.map +0 -1
  192. package/es/ae/oracle.js +0 -690
  193. package/es/ae/oracle.js.map +0 -1
  194. package/es/ae/universal.js.map +0 -1
  195. package/es/ae/wallet.js.map +0 -1
  196. package/es/chain/index.js.map +0 -1
  197. package/es/chain/node.js +0 -1119
  198. package/es/chain/node.js.map +0 -1
  199. package/es/channel/handlers.js +0 -1601
  200. package/es/channel/handlers.js.map +0 -1
  201. package/es/channel/index.js.map +0 -1
  202. package/es/channel/internal.js +0 -438
  203. package/es/channel/internal.js.map +0 -1
  204. package/es/contract/aci/helpers.js +0 -298
  205. package/es/contract/aci/helpers.js.map +0 -1
  206. package/es/contract/aci/index.js +0 -517
  207. package/es/contract/aci/index.js.map +0 -1
  208. package/es/contract/aci/transformation.js +0 -742
  209. package/es/contract/aci/transformation.js.map +0 -1
  210. package/es/contract/compiler.js +0 -316
  211. package/es/contract/compiler.js.map +0 -1
  212. package/es/contract/ga/helpers.js +0 -120
  213. package/es/contract/ga/helpers.js.map +0 -1
  214. package/es/contract/ga/index.js +0 -307
  215. package/es/contract/ga/index.js.map +0 -1
  216. package/es/contract/index.js +0 -158
  217. package/es/contract/index.js.map +0 -1
  218. package/es/index.js +0 -57
  219. package/es/index.js.map +0 -1
  220. package/es/node-pool/index.js +0 -204
  221. package/es/node-pool/index.js.map +0 -1
  222. package/es/node.js +0 -228
  223. package/es/node.js.map +0 -1
  224. package/es/tx/builder/helpers.js +0 -355
  225. package/es/tx/builder/helpers.js.map +0 -1
  226. package/es/tx/builder/index.js +0 -686
  227. package/es/tx/builder/index.js.map +0 -1
  228. package/es/tx/builder/schema.js +0 -695
  229. package/es/tx/builder/schema.js.map +0 -1
  230. package/es/tx/index.js.map +0 -1
  231. package/es/tx/tx-object.js +0 -297
  232. package/es/tx/tx-object.js.map +0 -1
  233. package/es/tx/tx.js +0 -1757
  234. package/es/tx/tx.js.map +0 -1
  235. package/es/tx/validator.js +0 -344
  236. package/es/tx/validator.js.map +0 -1
  237. package/es/typings/blakejs/index.d.js +0 -2
  238. package/es/utils/aepp-wallet-communication/connection/browser-runtime.js.map +0 -1
  239. package/es/utils/aepp-wallet-communication/connection/browser-window-message.js +0 -211
  240. package/es/utils/aepp-wallet-communication/connection/browser-window-message.js.map +0 -1
  241. package/es/utils/aepp-wallet-communication/connection/index.js.map +0 -1
  242. package/es/utils/aepp-wallet-communication/content-script-bridge.js.map +0 -1
  243. package/es/utils/aepp-wallet-communication/helpers.js +0 -148
  244. package/es/utils/aepp-wallet-communication/helpers.js.map +0 -1
  245. package/es/utils/aepp-wallet-communication/rpc/aepp-rpc.js +0 -652
  246. package/es/utils/aepp-wallet-communication/rpc/aepp-rpc.js.map +0 -1
  247. package/es/utils/aepp-wallet-communication/rpc/rpc-client.js +0 -285
  248. package/es/utils/aepp-wallet-communication/rpc/rpc-client.js.map +0 -1
  249. package/es/utils/aepp-wallet-communication/rpc/wallet-rpc.js +0 -763
  250. package/es/utils/aepp-wallet-communication/rpc/wallet-rpc.js.map +0 -1
  251. package/es/utils/aepp-wallet-communication/schema.js +0 -103
  252. package/es/utils/aepp-wallet-communication/schema.js.map +0 -1
  253. package/es/utils/aepp-wallet-communication/wallet-detector.js +0 -135
  254. package/es/utils/aepp-wallet-communication/wallet-detector.js.map +0 -1
  255. package/es/utils/amount-formatter.js +0 -152
  256. package/es/utils/amount-formatter.js.map +0 -1
  257. package/es/utils/async-init.js +0 -103
  258. package/es/utils/async-init.js.map +0 -1
  259. package/es/utils/bignumber.js +0 -36
  260. package/es/utils/bignumber.js.map +0 -1
  261. package/es/utils/bytes.js.map +0 -1
  262. package/es/utils/crypto-ts.js.map +0 -1
  263. package/es/utils/crypto.js +0 -358
  264. package/es/utils/crypto.js.map +0 -1
  265. package/es/utils/hd-wallet.js +0 -148
  266. package/es/utils/hd-wallet.js.map +0 -1
  267. package/es/utils/json-big.js +0 -78
  268. package/es/utils/json-big.js.map +0 -1
  269. package/es/utils/keystore.js +0 -393
  270. package/es/utils/keystore.js.map +0 -1
  271. package/es/utils/mptree.js +0 -198
  272. package/es/utils/mptree.js.map +0 -1
  273. package/es/utils/other.js +0 -93
  274. package/es/utils/other.js.map +0 -1
  275. package/es/utils/semver-satisfies.js +0 -35
  276. package/es/utils/semver-satisfies.js.map +0 -1
  277. package/es/utils/string.js.map +0 -1
  278. package/es/utils/swagger.js +0 -269
  279. package/es/utils/swagger.js.map +0 -1
  280. package/src/contract/aci/helpers.js +0 -140
  281. package/src/contract/aci/index.js +0 -191
  282. package/src/contract/aci/transformation.js +0 -464
  283. package/src/contract/index.js +0 -159
  284. package/src/utils/aepp-wallet-communication/schema.js +0 -110
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/utils/aepp-wallet-communication/rpc/rpc-client.js"],"names":["stampit","METHODS","RPC_STATUS","SUBSCRIPTION_TYPES","sendMessage","message","isValidAccounts","InvalidRpcMessageError","TypeError","DuplicateCallbackError","MissingCallbackError","init","id","name","networkId","icons","connection","handlers","onMessage","onDisconnect","info","callbacks","addressSubscription","accounts","handleMessage","msg","origin","jsonrpc","method","disconnect","aepp","connect","propertyDescriptors","currentAccount","enumerable","configurable","get","isHasAccounts","Object","keys","current","undefined","addresses","connected","methods","updateInfo","assign","isSubscribed","length","hasAccessToAccount","address","find","a","isConnected","status","CONNECTED","NODE_BINDED","getCurrentAccount","onAccount","forceConnectionClose","DISCONNECTED","setAccounts","forceNotification","updateAddress","updateSubscription","type","value","subscribe","includes","push","unsubscribe","filter","s","request","params","msgId","prototype","hasOwnProperty","call","Promise","resolve","reject","processResponse","transformResult","error","result"],"mappings":"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","sourcesContent":["/**\n * RpcClient module\n *\n * @module @aeternity/aepp-sdk/es/utils/aepp-wallet-communication/rpc/rpc-client\n * @export { RpcClient, RpcClients }\n * @example\n * import RpcClient from '@aeternity/aepp-sdk/es/utils/aepp-wallet-communication/rpc/rpc-client'\n */\nimport stampit from '@stamp/it'\n\nimport { METHODS, RPC_STATUS, SUBSCRIPTION_TYPES } from '../schema'\nimport { sendMessage, message, isValidAccounts } from '../helpers'\nimport {\n InvalidRpcMessageError,\n TypeError,\n DuplicateCallbackError,\n MissingCallbackError\n} from '../../errors'\n\n/**\n * Contain functionality for using RPC conection\n * @alias module:@aeternity/aepp-sdk/es/utils/aepp-wallet-communication/rpc/rpc-client\n * @function\n * @rtype Stamp\n * @param {Object} param Init params object\n * @param {String} param.name Client name\n * @param {Object} param.connection Connection object\n * @param {Function[]} param.handlers Array with two function for message handling\n * @param {Function} param.handlers[0] Message handler\n * @param {Function} param.handlers[1] Disconnect callback\n * @return {Object}\n */\nexport default stampit({\n init ({ id, name, networkId, icons, connection, handlers: [onMessage, onDisconnect] }) {\n this.id = id\n this.connection = connection\n this.info = { name, networkId, icons }\n // {\n // [msg.id]: { resolve, reject }\n // }\n this.callbacks = {}\n // ['connected', 'current']\n this.addressSubscription = []\n // {\n // connected: { [pub]: {...meta} },\n // current: { [pub]: {...meta} }\n // }\n this.accounts = {}\n\n this.sendMessage = sendMessage(this.connection)\n\n const handleMessage = (msg, origin) => {\n if (!msg || !msg.jsonrpc || msg.jsonrpc !== '2.0' || !msg.method) {\n throw new InvalidRpcMessageError(msg)\n }\n onMessage(msg, origin)\n }\n\n const disconnect = (aepp, connection) => {\n this.disconnect(true)\n typeof onDisconnect === 'function' && onDisconnect(connection, this)\n }\n\n connection.connect(handleMessage, disconnect)\n },\n propertyDescriptors: {\n currentAccount: {\n enumerable: true,\n configurable: false,\n get () {\n return this.isHasAccounts()\n ? Object.keys(this.accounts.current)[0]\n : undefined\n }\n },\n addresses: {\n enumerable: true,\n configurable: false,\n get () {\n return this.isHasAccounts()\n ? [...Object.keys(this.accounts.current), ...Object.keys(this.accounts.connected)]\n : []\n }\n },\n origin: {\n enumerable: true,\n configurable: false,\n get () {\n return this.connection\n }\n }\n },\n methods: {\n /**\n * Update info\n * @function updateInfo\n * @instance\n * @rtype (info: Object) => void\n * @param {Object} info Info to update (will be merged with current info object)\n * @return {void}\n */\n updateInfo (info) {\n Object.assign(this.info, info)\n },\n isHasAccounts () {\n return typeof this.accounts === 'object' &&\n typeof this.accounts.connected === 'object' &&\n typeof this.accounts.current === 'object'\n },\n isSubscribed () {\n return this.addressSubscription.length && this.isHasAccounts()\n },\n /**\n * Check if aepp has access to account\n * @function hasAccessToAccount\n * @instance\n * @rtype (address: String) => Boolean\n * @param {String} address Account address\n * @return {Boolean} is connected\n */\n hasAccessToAccount (address) {\n return !!address && this.addresses.find(a => a === address)\n },\n /**\n * Check if is connected\n * @function isConnected\n * @instance\n * @rtype () => Boolean\n * @return {Boolean} is connected\n */\n isConnected () {\n return this.connection.isConnected() &&\n (this.info.status === RPC_STATUS.CONNECTED || this.info.status === RPC_STATUS.NODE_BINDED)\n },\n /**\n * Get selected account\n * @function getCurrentAccount\n * @instance\n * @rtype ({ onAccount } = {}) => String\n * @param {Object} options Options\n * @return {String}\n */\n getCurrentAccount ({ onAccount } = {}) {\n return onAccount || Object.keys(this.accounts.current)[0]\n },\n /**\n * Disconnect\n * @function disconnect\n * @instance\n * @rtype () => void\n * @return {void}\n */\n disconnect (forceConnectionClose = false) {\n this.info.status = RPC_STATUS.DISCONNECTED\n this.addressSubscription = []\n this.accounts = {}\n forceConnectionClose || this.connection.disconnect()\n },\n /**\n * Update accounts and sent `update.address` notification to AEPP\n * @param {{ current: Object, connected: Object }} accounts Current and connected accounts\n * @param {Object} [options]\n * @param {Boolean} [options.forceNotification] Don't sent update notification to AEPP\n */\n setAccounts (accounts, { forceNotification } = {}) {\n if (!isValidAccounts(accounts)) {\n throw new TypeError('Invalid accounts object. Should be object like: `{ connected: {}, selected: {} }`')\n }\n this.accounts = accounts\n if (!forceNotification) {\n // Sent notification about account updates\n this.sendMessage(message(METHODS.updateAddress, this.accounts), true)\n }\n },\n /**\n * Update subscription\n * @function updateSubscription\n * @instance\n * @rtype (type: String, value: String) => void\n * @param {String} type Subscription type\n * @param {String} value Subscription value\n * @return {String[]}\n */\n updateSubscription (type, value) {\n if (type === SUBSCRIPTION_TYPES.subscribe && !this.addressSubscription.includes(value)) {\n this.addressSubscription.push(value)\n }\n if (type === SUBSCRIPTION_TYPES.unsubscribe && this.addressSubscription.includes(value)) {\n this.addressSubscription = this.addressSubscription.filter(s => s !== value)\n }\n return this.addressSubscription\n },\n /**\n * Make a request\n * @function request\n * @instance\n * @rtype (name: String, params: Object) => Promise\n * @param {String} name Method name\n * @param {Object} params Method params\n * @return {Promise} Promise which will be resolved after receiving response message\n */\n request (name, params) {\n const msgId = this.sendMessage(message(name, params))\n if (Object.prototype.hasOwnProperty.call(this.callbacks, msgId)) {\n throw new DuplicateCallbackError()\n }\n return new Promise((resolve, reject) => {\n this.callbacks[msgId] = { resolve, reject }\n })\n },\n /**\n * Process response message\n * @function processResponse\n * @instance\n * @rtype (msg: Object, transformResult: Function) => void\n * @param {Object} msg Message object\n * @param {Function=} transformResult Optional parser function for message\n * @return {void}\n */\n processResponse ({ id, error, result }, transformResult) {\n if (!this.callbacks[id]) throw new MissingCallbackError(id)\n if (result) {\n this.callbacks[id].resolve(...typeof transformResult === 'function'\n ? transformResult({ id, result })\n : [result])\n } else {\n this.callbacks[id].reject(error)\n }\n delete this.callbacks[id]\n }\n }\n})\n"],"file":"rpc-client.mjs"}
@@ -0,0 +1,541 @@
1
+ /**
2
+ * RPC handler for WAELLET side
3
+ *
4
+ * @module @aeternity/aepp-sdk/es/utils/aepp-wallet-communication/rpc/wallet-rpc
5
+ * @export WalletRpc
6
+ * @example
7
+ * import WalletRpc from '@aeternity/aepp-sdk/es/utils/aepp-wallet-communication/rpc/wallet-rpc'
8
+ */
9
+ import { v4 as uuid } from '@aeternity/uuid';
10
+ import Ae from "../../../ae/index.mjs";
11
+ import verifyTransaction from "../../../tx/validator.mjs";
12
+ import AccountMultiple from "../../../account/multiple.mjs";
13
+ import TxObject from "../../../tx/tx-object.mjs";
14
+ import RpcClient from "./rpc-client.mjs";
15
+ import { getBrowserAPI, getHandler, isValidAccounts, message, sendResponseMessage } from "../helpers.mjs";
16
+ import { ERRORS, METHODS, RPC_STATUS, VERSION, WALLET_TYPE } from "../schema.mjs";
17
+ import { ArgumentError, TypeError, UnknownRpcClientError } from "../../errors.mjs";
18
+ import { isAccountBase } from "../../../account/base.mjs";
19
+
20
+ const resolveOnAccount = function (addresses, onAccount) {
21
+ let opt = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
22
+
23
+ if (!addresses.find(a => a === onAccount)) {
24
+ if (typeof opt.onAccount !== 'object' || !isAccountBase(opt.onAccount)) throw new TypeError('Provided onAccount should be an AccountBase');
25
+ onAccount = opt.onAccount;
26
+ }
27
+
28
+ return onAccount;
29
+ };
30
+
31
+ const NOTIFICATIONS = {
32
+ [METHODS.closeConnection]: (instance, _ref) => {
33
+ let {
34
+ client
35
+ } = _ref;
36
+ return async msg => {
37
+ client.disconnect(true);
38
+ instance.onDisconnect(msg.params, client);
39
+ };
40
+ }
41
+ };
42
+ const RESPONSES = {};
43
+ const REQUESTS = {
44
+ // Store client info and prepare two fn for each client `connect` and `denyConnection`
45
+ // which automatically prepare and send response for that client
46
+ [METHODS.connect](callInstance, instance, client, _ref2) {
47
+ let {
48
+ name,
49
+ networkId,
50
+ version,
51
+ icons,
52
+ connectNode
53
+ } = _ref2;
54
+ // Check if protocol and network is compatible with wallet
55
+ if (version !== VERSION) return {
56
+ error: ERRORS.unsupportedProtocol()
57
+ }; // Store new AEPP and wait for connection approve
58
+
59
+ client.updateInfo({
60
+ status: RPC_STATUS.WAITING_FOR_CONNECTION_APPROVE,
61
+ name,
62
+ networkId,
63
+ icons,
64
+ version,
65
+ origin: window.location.origin,
66
+ connectNode
67
+ }); // Call onConnection callBack to notice Wallet about new AEPP
68
+
69
+ return callInstance('onConnection', {
70
+ name,
71
+ networkId,
72
+ version
73
+ }, function () {
74
+ let {
75
+ shareNode
76
+ } = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
77
+ client.updateInfo({
78
+ status: shareNode ? RPC_STATUS.NODE_BINDED : RPC_STATUS.CONNECTED
79
+ });
80
+ return {
81
+ result: { ...instance.getWalletInfo(),
82
+ ...(shareNode && {
83
+ node: instance.selectedNode
84
+ })
85
+ }
86
+ };
87
+ }, error => {
88
+ client.updateInfo({
89
+ status: RPC_STATUS.CONNECTION_REJECTED
90
+ });
91
+ return {
92
+ error: ERRORS.connectionDeny(error)
93
+ };
94
+ });
95
+ },
96
+
97
+ [METHODS.subscribeAddress](callInstance, instance, client, _ref3) {
98
+ let {
99
+ type,
100
+ value
101
+ } = _ref3;
102
+ // Authorization check
103
+ if (!client.isConnected()) return {
104
+ error: ERRORS.notAuthorize()
105
+ };
106
+ return callInstance('onSubscription', {
107
+ type,
108
+ value
109
+ }, async function () {
110
+ let {
111
+ accounts
112
+ } = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
113
+
114
+ try {
115
+ const clientAccounts = accounts || instance.getAccounts();
116
+
117
+ if (!isValidAccounts(clientAccounts)) {
118
+ throw new TypeError('Invalid provided accounts object');
119
+ }
120
+
121
+ const subscription = client.updateSubscription(type, value);
122
+ client.setAccounts(clientAccounts, {
123
+ forceNotification: true
124
+ });
125
+ return {
126
+ result: {
127
+ subscription,
128
+ address: clientAccounts
129
+ }
130
+ };
131
+ } catch (e) {
132
+ if (instance.debug) console.error(e);
133
+ return {
134
+ error: ERRORS.internalError(e.message)
135
+ };
136
+ }
137
+ }, error => ({
138
+ error: ERRORS.rejectedByUser(error)
139
+ }));
140
+ },
141
+
142
+ [METHODS.address](callInstance, instance, client) {
143
+ // Authorization check
144
+ if (!client.isConnected()) return {
145
+ error: ERRORS.notAuthorize()
146
+ };
147
+ if (!client.isSubscribed()) return {
148
+ error: ERRORS.notAuthorize()
149
+ };
150
+ return callInstance('onAskAccounts', {}, function () {
151
+ let {
152
+ accounts
153
+ } = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
154
+ return {
155
+ result: accounts || [...Object.keys(client.accounts.current), ...Object.keys(client.accounts.connected)]
156
+ };
157
+ }, error => ({
158
+ error: ERRORS.rejectedByUser(error)
159
+ }));
160
+ },
161
+
162
+ [METHODS.sign](callInstance, instance, client, options) {
163
+ const {
164
+ tx,
165
+ onAccount,
166
+ networkId,
167
+ returnSigned = false
168
+ } = options;
169
+ const address = onAccount || client.currentAccount; // Update client with new networkId
170
+
171
+ networkId && client.updateInfo({
172
+ networkId
173
+ }); // Authorization check
174
+
175
+ if (!client.isConnected()) return {
176
+ error: ERRORS.notAuthorize()
177
+ }; // Account permission check
178
+
179
+ if (!client.hasAccessToAccount(address)) {
180
+ return {
181
+ error: ERRORS.permissionDeny(address)
182
+ };
183
+ } // NetworkId check
184
+
185
+
186
+ if (!networkId || networkId !== instance.getNetworkId()) {
187
+ return {
188
+ error: ERRORS.unsupportedNetwork()
189
+ };
190
+ }
191
+
192
+ return callInstance('onSign', {
193
+ tx,
194
+ returnSigned,
195
+ onAccount: address,
196
+ txObject: TxObject.fromString(tx)
197
+ }, async function (rawTx) {
198
+ let opt = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
199
+ let onAcc;
200
+
201
+ try {
202
+ onAcc = resolveOnAccount(instance.addresses(), address, opt);
203
+ } catch (e) {
204
+ if (instance.debug) console.error(e);
205
+ return {
206
+ error: ERRORS.internalError(e.message)
207
+ };
208
+ }
209
+
210
+ try {
211
+ const t = rawTx || tx;
212
+ const result = returnSigned ? {
213
+ signedTransaction: await instance.signTransaction(t, {
214
+ onAccount: onAcc
215
+ })
216
+ } : {
217
+ transactionHash: await instance.send(t, {
218
+ onAccount: onAcc,
219
+ verify: false
220
+ })
221
+ };
222
+ return {
223
+ result
224
+ };
225
+ } catch (e) {
226
+ if (!returnSigned) {
227
+ // Validate transaction
228
+ const validation = await verifyTransaction(rawTx || tx, instance.selectedNode.instance);
229
+ if (validation.length) return {
230
+ error: ERRORS.invalidTransaction(validation)
231
+ }; // Send broadcast failed error to aepp
232
+
233
+ return {
234
+ error: ERRORS.broadcastFailed(e.message)
235
+ };
236
+ }
237
+
238
+ throw e;
239
+ }
240
+ }, error => ({
241
+ error: ERRORS.rejectedByUser(error)
242
+ }));
243
+ },
244
+
245
+ [METHODS.signMessage](callInstance, instance, client, _ref4) {
246
+ let {
247
+ message,
248
+ onAccount
249
+ } = _ref4;
250
+ // Authorization check
251
+ if (!client.isConnected()) return {
252
+ error: ERRORS.notAuthorize()
253
+ };
254
+ const address = onAccount || client.currentAccount;
255
+
256
+ if (!client.hasAccessToAccount(address)) {
257
+ return {
258
+ error: ERRORS.permissionDeny(address)
259
+ };
260
+ }
261
+
262
+ return callInstance('onMessageSign', {
263
+ message,
264
+ onAccount: address
265
+ }, async function () {
266
+ let opt = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
267
+
268
+ try {
269
+ const onAcc = resolveOnAccount(instance.addresses(), address, opt);
270
+ return {
271
+ result: {
272
+ signature: await instance.signMessage(message, {
273
+ onAccount: onAcc,
274
+ returnHex: true
275
+ })
276
+ }
277
+ };
278
+ } catch (e) {
279
+ if (instance.debug) console.error(e);
280
+ return {
281
+ error: ERRORS.internalError(e.message)
282
+ };
283
+ }
284
+ }, error => ({
285
+ error: ERRORS.rejectedByUser(error)
286
+ }));
287
+ }
288
+
289
+ };
290
+
291
+ const handleMessage = (instance, id) => async (msg, origin) => {
292
+ const client = instance.rpcClients[id];
293
+
294
+ if (!msg.id) {
295
+ return getHandler(NOTIFICATIONS, msg, {
296
+ debug: instance.debug
297
+ })(instance, {
298
+ client
299
+ })(msg, origin);
300
+ }
301
+
302
+ if (Object.prototype.hasOwnProperty.call(client.callbacks, msg.id)) {
303
+ return getHandler(RESPONSES, msg, {
304
+ debug: instance.debug
305
+ })(instance, {
306
+ client
307
+ })(msg, origin);
308
+ } else {
309
+ const {
310
+ id,
311
+ method
312
+ } = msg;
313
+
314
+ const callInstance = (methodName, params, accept, deny) => () => new Promise(resolve => {
315
+ instance[methodName](client, {
316
+ id,
317
+ method,
318
+ params,
319
+ accept: function () {
320
+ return resolve(accept(...arguments));
321
+ },
322
+ deny: function () {
323
+ return resolve(deny(...arguments));
324
+ }
325
+ }, origin);
326
+ }); // TODO make one structure for handler functions
327
+
328
+
329
+ const errorObjectOrHandler = getHandler(REQUESTS, msg, {
330
+ debug: instance.debug
331
+ })(callInstance, instance, client, msg.params);
332
+ const response = typeof errorObjectOrHandler === 'function' ? await errorObjectOrHandler() : errorObjectOrHandler;
333
+ sendResponseMessage(client)(id, method, response);
334
+ }
335
+ };
336
+ /**
337
+ * Contain functionality for aepp interaction and managing multiple aepps
338
+ * @alias module:@aeternity/aepp-sdk/es/utils/aepp-wallet-communication/rpc/wallet-rpc
339
+ * @function
340
+ * @rtype Stamp
341
+ * @param {Object} param Init params object
342
+ * @param {String=} [param.name] Wallet name
343
+ * @param {Function} onConnection Call-back function for incoming AEPP connection
344
+ * @param {Function} onSubscription Call-back function for incoming AEPP account subscription
345
+ * @param {Function} onSign Call-back function for incoming AEPP sign request
346
+ * @param {Function} onAskAccounts Call-back function for incoming AEPP get address request
347
+ * @param {Function} onMessageSign Call-back function for incoming AEPP sign message request
348
+ * Second argument of incoming call-backs contain function for accept/deny request
349
+ * @param {Function} onDisconnect Call-back function for disconnect event
350
+ * @return {Object}
351
+ */
352
+
353
+
354
+ export default Ae.compose(AccountMultiple, {
355
+ init() {
356
+ var _this = this;
357
+
358
+ let {
359
+ name,
360
+ debug = false,
361
+ ...other
362
+ } = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
363
+ ['onConnection', 'onSubscription', 'onSign', 'onDisconnect', 'onAskAccounts', 'onMessageSign'].forEach(event => {
364
+ const handler = other[event];
365
+ if (typeof handler !== 'function') throw new ArgumentError(event, 'a function', handler);
366
+ this[event] = handler;
367
+ });
368
+ this.debug = debug;
369
+ this.rpcClients = {};
370
+ this.name = name;
371
+ this.id = uuid();
372
+
373
+ const _selectAccount = this.selectAccount.bind(this);
374
+
375
+ const _addAccount = this.addAccount.bind(this);
376
+
377
+ const _selectNode = this.selectNode.bind(this); // Overwrite AE methods
378
+
379
+
380
+ this.selectAccount = function (address) {
381
+ let {
382
+ condition = () => true
383
+ } = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
384
+
385
+ _selectAccount(address);
386
+
387
+ Object.values(_this.rpcClients).filter(client => client.isConnected() && client.isSubscribed() && client.hasAccessToAccount(address) && condition(client)).forEach(client => client.setAccounts({
388
+ current: {
389
+ [address]: {}
390
+ },
391
+ connected: { ...client.accounts.current,
392
+ ...Object.entries(client.accounts.connected).filter(_ref5 => {
393
+ let [k, v] = _ref5;
394
+ return k !== address;
395
+ }).reduce((acc, _ref6) => {
396
+ let [k, v] = _ref6;
397
+ return { ...acc,
398
+ [k]: v
399
+ };
400
+ }, {})
401
+ }
402
+ }));
403
+ };
404
+
405
+ this.addAccount = async function (account) {
406
+ let {
407
+ select,
408
+ meta = {},
409
+ condition = () => true
410
+ } = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
411
+ await _addAccount(account, {
412
+ select
413
+ });
414
+ const address = await account.address(); // Send notification 'update.address' to all Aepp which are subscribed for connected accounts
415
+
416
+ Object.values(_this.rpcClients).filter(client => client.isConnected() && client.isSubscribed() && condition(client)).forEach(client => client.setAccounts({
417
+ current: { ...(select ? {
418
+ [address]: meta
419
+ } : client.accounts.current)
420
+ },
421
+ connected: { ...(select ? client.accounts.current : {
422
+ [address]: meta
423
+ }),
424
+ ...client.accounts.connected
425
+ }
426
+ }));
427
+ };
428
+
429
+ this.selectNode = name => {
430
+ _selectNode(name); // Send notification 'update.network' to all Aepp which connected
431
+
432
+
433
+ Object.values(this.rpcClients).filter(client => client.isConnected()).forEach(client => {
434
+ client.sendMessage(message(METHODS.updateNetwork, {
435
+ networkId: this.getNetworkId(),
436
+ ...(client.info.status === RPC_STATUS.NODE_BINDED && {
437
+ node: this.selectedNode
438
+ })
439
+ }), true);
440
+ });
441
+ };
442
+ },
443
+
444
+ methods: {
445
+ /**
446
+ * Remove specific RpcClient by ID
447
+ * @function removeRpcClient
448
+ * @instance
449
+ * @rtype (id: string) => void
450
+ * @param {String} id Client ID
451
+ * @param {Object} [opt = {}]
452
+ * @return {void}
453
+ */
454
+ removeRpcClient(id) {
455
+ let {
456
+ forceConnectionClose = false
457
+ } = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
458
+ const client = this.rpcClients[id];
459
+ if (!client) throw new UnknownRpcClientError(id);
460
+ client.disconnect(forceConnectionClose);
461
+ delete this.rpcClients[id];
462
+ },
463
+
464
+ /**
465
+ * Add new client by AEPP connection
466
+ * @function addRpcClient
467
+ * @instance
468
+ * @rtype (clientConnection: Object) => Object
469
+ * @param {Object} clientConnection AEPP connection object
470
+ * @return {String} Client ID
471
+ */
472
+ addRpcClient(clientConnection) {
473
+ // @TODO detect if aepp has some history based on origin????
474
+ // if yes use this instance for connection
475
+ const id = uuid();
476
+ this.rpcClients[id] = RpcClient({
477
+ id,
478
+ info: {
479
+ status: RPC_STATUS.WAITING_FOR_CONNECTION_REQUEST
480
+ },
481
+ connection: clientConnection,
482
+ handlers: [handleMessage(this, id), this.onDisconnect]
483
+ });
484
+ return id;
485
+ },
486
+
487
+ /**
488
+ * Share wallet info
489
+ * Send shareWalletInfo message to notify AEPP about wallet
490
+ * @function shareWalletInfo
491
+ * @instance
492
+ * @rtype (postFn: Function) => void
493
+ * @param {Function} postFn Send message function like `(msg) => void`
494
+ * @return {void}
495
+ */
496
+ shareWalletInfo(postFn) {
497
+ postFn({
498
+ jsonrpc: '2.0',
499
+ ...message(METHODS.readyToConnect, this.getWalletInfo())
500
+ });
501
+ },
502
+
503
+ /**
504
+ * Get Wallet info object
505
+ * @function getWalletInfo
506
+ * @instance
507
+ * @rtype () => Object
508
+ * @return {Object} Object with wallet information(id, name, network, ...)
509
+ */
510
+ getWalletInfo() {
511
+ const runtime = getBrowserAPI(true).runtime;
512
+ return {
513
+ id: runtime && runtime.id ? runtime.id : this.id,
514
+ name: this.name,
515
+ networkId: this.getNetworkId(),
516
+ origin: window.location.origin,
517
+ type: runtime && runtime.id ? WALLET_TYPE.extension : WALLET_TYPE.window
518
+ };
519
+ },
520
+
521
+ /**
522
+ * Get Wallet accounts
523
+ * @function getAccounts
524
+ * @instance
525
+ * @rtype () => Object
526
+ * @return {Object} Object with accounts information({ connected: Object, current: Object })
527
+ */
528
+ getAccounts() {
529
+ return {
530
+ current: this.selectedAddress ? {
531
+ [this.selectedAddress]: {}
532
+ } : {},
533
+ connected: this.addresses().filter(a => a !== this.selectedAddress).reduce((acc, a) => ({ ...acc,
534
+ [a]: {}
535
+ }), {})
536
+ };
537
+ }
538
+
539
+ }
540
+ });
541
+ //# sourceMappingURL=wallet-rpc.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/utils/aepp-wallet-communication/rpc/wallet-rpc.js"],"names":["v4","uuid","Ae","verifyTransaction","AccountMultiple","TxObject","RpcClient","getBrowserAPI","getHandler","isValidAccounts","message","sendResponseMessage","ERRORS","METHODS","RPC_STATUS","VERSION","WALLET_TYPE","ArgumentError","TypeError","UnknownRpcClientError","isAccountBase","resolveOnAccount","addresses","onAccount","opt","find","a","NOTIFICATIONS","closeConnection","instance","client","msg","disconnect","onDisconnect","params","RESPONSES","REQUESTS","connect","callInstance","name","networkId","version","icons","connectNode","error","unsupportedProtocol","updateInfo","status","WAITING_FOR_CONNECTION_APPROVE","origin","window","location","shareNode","NODE_BINDED","CONNECTED","result","getWalletInfo","node","selectedNode","CONNECTION_REJECTED","connectionDeny","subscribeAddress","type","value","isConnected","notAuthorize","accounts","clientAccounts","getAccounts","subscription","updateSubscription","setAccounts","forceNotification","address","e","debug","console","internalError","rejectedByUser","isSubscribed","Object","keys","current","connected","sign","options","tx","returnSigned","currentAccount","hasAccessToAccount","permissionDeny","getNetworkId","unsupportedNetwork","txObject","fromString","rawTx","onAcc","t","signedTransaction","signTransaction","transactionHash","send","verify","validation","length","invalidTransaction","broadcastFailed","signMessage","signature","returnHex","handleMessage","id","rpcClients","prototype","hasOwnProperty","call","callbacks","method","methodName","accept","deny","Promise","resolve","errorObjectOrHandler","response","compose","init","other","forEach","event","handler","_selectAccount","selectAccount","bind","_addAccount","addAccount","_selectNode","selectNode","condition","values","filter","entries","k","v","reduce","acc","account","select","meta","sendMessage","updateNetwork","info","methods","removeRpcClient","forceConnectionClose","addRpcClient","clientConnection","WAITING_FOR_CONNECTION_REQUEST","connection","handlers","shareWalletInfo","postFn","jsonrpc","readyToConnect","runtime","extension","selectedAddress"],"mappings":"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","sourcesContent":["/**\n * RPC handler for WAELLET side\n *\n * @module @aeternity/aepp-sdk/es/utils/aepp-wallet-communication/rpc/wallet-rpc\n * @export WalletRpc\n * @example\n * import WalletRpc from '@aeternity/aepp-sdk/es/utils/aepp-wallet-communication/rpc/wallet-rpc'\n */\nimport { v4 as uuid } from '@aeternity/uuid'\nimport Ae from '../../../ae'\nimport verifyTransaction from '../../../tx/validator'\nimport AccountMultiple from '../../../account/multiple'\nimport TxObject from '../../../tx/tx-object'\nimport RpcClient from './rpc-client'\nimport { getBrowserAPI, getHandler, isValidAccounts, message, sendResponseMessage } from '../helpers'\nimport { ERRORS, METHODS, RPC_STATUS, VERSION, WALLET_TYPE } from '../schema'\nimport { ArgumentError, TypeError, UnknownRpcClientError } from '../../errors'\nimport { isAccountBase } from '../../../account/base'\n\nconst resolveOnAccount = (addresses, onAccount, opt = {}) => {\n if (!addresses.find(a => a === onAccount)) {\n if (typeof opt.onAccount !== 'object' || !isAccountBase(opt.onAccount)) throw new TypeError('Provided onAccount should be an AccountBase')\n onAccount = opt.onAccount\n }\n return onAccount\n}\n\nconst NOTIFICATIONS = {\n [METHODS.closeConnection]: (instance, { client }) =>\n async (msg) => {\n client.disconnect(true)\n instance.onDisconnect(msg.params, client)\n }\n}\n\nconst RESPONSES = {}\n\nconst REQUESTS = {\n // Store client info and prepare two fn for each client `connect` and `denyConnection`\n // which automatically prepare and send response for that client\n [METHODS.connect] (\n callInstance,\n instance,\n client,\n { name, networkId, version, icons, connectNode }) {\n // Check if protocol and network is compatible with wallet\n if (version !== VERSION) return { error: ERRORS.unsupportedProtocol() }\n // Store new AEPP and wait for connection approve\n client.updateInfo({\n status: RPC_STATUS.WAITING_FOR_CONNECTION_APPROVE,\n name,\n networkId,\n icons,\n version,\n origin: window.location.origin,\n connectNode\n })\n\n // Call onConnection callBack to notice Wallet about new AEPP\n return callInstance(\n 'onConnection',\n { name, networkId, version },\n ({ shareNode } = {}) => {\n client.updateInfo({ status: shareNode ? RPC_STATUS.NODE_BINDED : RPC_STATUS.CONNECTED })\n return {\n result: {\n ...instance.getWalletInfo(),\n ...(shareNode && { node: instance.selectedNode })\n }\n }\n },\n (error) => {\n client.updateInfo({ status: RPC_STATUS.CONNECTION_REJECTED })\n return { error: ERRORS.connectionDeny(error) }\n }\n )\n },\n [METHODS.subscribeAddress] (callInstance, instance, client, { type, value }) {\n // Authorization check\n if (!client.isConnected()) return { error: ERRORS.notAuthorize() }\n\n return callInstance(\n 'onSubscription',\n { type, value },\n async ({ accounts } = {}) => {\n try {\n const clientAccounts = accounts || instance.getAccounts()\n if (!isValidAccounts(clientAccounts)) {\n throw new TypeError('Invalid provided accounts object')\n }\n const subscription = client.updateSubscription(type, value)\n client.setAccounts(clientAccounts, { forceNotification: true })\n return {\n result: {\n subscription,\n address: clientAccounts\n }\n }\n } catch (e) {\n if (instance.debug) console.error(e)\n return { error: ERRORS.internalError(e.message) }\n }\n },\n (error) => ({ error: ERRORS.rejectedByUser(error) })\n )\n },\n [METHODS.address] (callInstance, instance, client) {\n // Authorization check\n if (!client.isConnected()) return { error: ERRORS.notAuthorize() }\n if (!client.isSubscribed()) return { error: ERRORS.notAuthorize() }\n\n return callInstance(\n 'onAskAccounts',\n {},\n ({ accounts } = {}) => ({\n result: accounts ||\n [...Object.keys(client.accounts.current), ...Object.keys(client.accounts.connected)]\n }),\n (error) => ({ error: ERRORS.rejectedByUser(error) })\n )\n },\n [METHODS.sign] (callInstance, instance, client, options) {\n const { tx, onAccount, networkId, returnSigned = false } = options\n const address = onAccount || client.currentAccount\n // Update client with new networkId\n networkId && client.updateInfo({ networkId })\n // Authorization check\n if (!client.isConnected()) return { error: ERRORS.notAuthorize() }\n // Account permission check\n if (!client.hasAccessToAccount(address)) {\n return { error: ERRORS.permissionDeny(address) }\n }\n // NetworkId check\n if (!networkId || networkId !== instance.getNetworkId()) {\n return { error: ERRORS.unsupportedNetwork() }\n }\n\n return callInstance(\n 'onSign',\n { tx, returnSigned, onAccount: address, txObject: TxObject.fromString(tx) },\n async (rawTx, opt = {}) => {\n let onAcc\n try {\n onAcc = resolveOnAccount(instance.addresses(), address, opt)\n } catch (e) {\n if (instance.debug) console.error(e)\n return { error: ERRORS.internalError(e.message) }\n }\n try {\n const t = rawTx || tx\n const result = returnSigned\n ? { signedTransaction: await instance.signTransaction(t, { onAccount: onAcc }) }\n : { transactionHash: await instance.send(t, { onAccount: onAcc, verify: false }) }\n return { result }\n } catch (e) {\n if (!returnSigned) {\n // Validate transaction\n const validation = await verifyTransaction(rawTx || tx, instance.selectedNode.instance)\n if (validation.length) return { error: ERRORS.invalidTransaction(validation) }\n // Send broadcast failed error to aepp\n return { error: ERRORS.broadcastFailed(e.message) }\n }\n throw e\n }\n },\n (error) => ({ error: ERRORS.rejectedByUser(error) })\n )\n },\n [METHODS.signMessage] (callInstance, instance, client, { message, onAccount }) {\n // Authorization check\n if (!client.isConnected()) return { error: ERRORS.notAuthorize() }\n const address = onAccount || client.currentAccount\n if (!client.hasAccessToAccount(address)) {\n return { error: ERRORS.permissionDeny(address) }\n }\n\n return callInstance(\n 'onMessageSign',\n { message, onAccount: address },\n async (opt = {}) => {\n try {\n const onAcc = resolveOnAccount(instance.addresses(), address, opt)\n return {\n result: {\n signature: await instance.signMessage(message, {\n onAccount: onAcc,\n returnHex: true\n })\n }\n }\n } catch (e) {\n if (instance.debug) console.error(e)\n return { error: ERRORS.internalError(e.message) }\n }\n },\n (error) => ({ error: ERRORS.rejectedByUser(error) })\n )\n }\n}\n\nconst handleMessage = (instance, id) => async (msg, origin) => {\n const client = instance.rpcClients[id]\n if (!msg.id) {\n return getHandler(\n NOTIFICATIONS, msg, { debug: instance.debug }\n )(instance, { client })(msg, origin)\n }\n if (Object.prototype.hasOwnProperty.call(client.callbacks, msg.id)) {\n return getHandler(RESPONSES, msg, { debug: instance.debug })(instance, { client })(msg, origin)\n } else {\n const { id, method } = msg\n const callInstance = (methodName, params, accept, deny) => () => new Promise(resolve => {\n instance[methodName](\n client,\n {\n id,\n method,\n params,\n accept: (...args) => resolve(accept(...args)),\n deny: (...args) => resolve(deny(...args))\n },\n origin\n )\n })\n // TODO make one structure for handler functions\n const errorObjectOrHandler = getHandler(REQUESTS, msg, { debug: instance.debug })(\n callInstance, instance, client, msg.params\n )\n const response = typeof errorObjectOrHandler === 'function' ? await errorObjectOrHandler() : errorObjectOrHandler\n sendResponseMessage(client)(id, method, response)\n }\n}\n\n/**\n * Contain functionality for aepp interaction and managing multiple aepps\n * @alias module:@aeternity/aepp-sdk/es/utils/aepp-wallet-communication/rpc/wallet-rpc\n * @function\n * @rtype Stamp\n * @param {Object} param Init params object\n * @param {String=} [param.name] Wallet name\n * @param {Function} onConnection Call-back function for incoming AEPP connection\n * @param {Function} onSubscription Call-back function for incoming AEPP account subscription\n * @param {Function} onSign Call-back function for incoming AEPP sign request\n * @param {Function} onAskAccounts Call-back function for incoming AEPP get address request\n * @param {Function} onMessageSign Call-back function for incoming AEPP sign message request\n * Second argument of incoming call-backs contain function for accept/deny request\n * @param {Function} onDisconnect Call-back function for disconnect event\n * @return {Object}\n */\nexport default Ae.compose(AccountMultiple, {\n init ({\n name,\n debug = false,\n ...other\n } = {}) {\n [\n 'onConnection', 'onSubscription', 'onSign', 'onDisconnect', 'onAskAccounts', 'onMessageSign'\n ].forEach(event => {\n const handler = other[event]\n if (typeof handler !== 'function') throw new ArgumentError(event, 'a function', handler)\n this[event] = handler\n })\n\n this.debug = debug\n this.rpcClients = {}\n this.name = name\n this.id = uuid()\n\n const _selectAccount = this.selectAccount.bind(this)\n const _addAccount = this.addAccount.bind(this)\n const _selectNode = this.selectNode.bind(this)\n\n // Overwrite AE methods\n this.selectAccount = (address, { condition = () => true } = {}) => {\n _selectAccount(address)\n Object.values(this.rpcClients)\n .filter(client => client.isConnected() && client.isSubscribed() &&\n client.hasAccessToAccount(address) && condition(client))\n .forEach(client => client.setAccounts({\n current: { [address]: {} },\n connected: {\n ...client.accounts.current,\n ...Object.entries(client.accounts.connected)\n .filter(([k, v]) => k !== address)\n .reduce((acc, [k, v]) => ({ ...acc, [k]: v }), {})\n }\n }))\n }\n this.addAccount = async (account, { select, meta = {}, condition = () => true } = {}) => {\n await _addAccount(account, { select })\n const address = await account.address()\n // Send notification 'update.address' to all Aepp which are subscribed for connected accounts\n Object.values(this.rpcClients)\n .filter(client => client.isConnected() && client.isSubscribed() && condition(client))\n .forEach(client => client.setAccounts({\n current: { ...select ? { [address]: meta } : client.accounts.current },\n connected: {\n ...select ? client.accounts.current : { [address]: meta },\n ...client.accounts.connected\n }\n }))\n }\n this.selectNode = (name) => {\n _selectNode(name)\n // Send notification 'update.network' to all Aepp which connected\n Object.values(this.rpcClients)\n .filter(client => client.isConnected())\n .forEach(client => {\n client.sendMessage(\n message(METHODS.updateNetwork, {\n networkId: this.getNetworkId(),\n ...(client.info.status === RPC_STATUS.NODE_BINDED && { node: this.selectedNode })\n }), true)\n })\n }\n },\n methods: {\n /**\n * Remove specific RpcClient by ID\n * @function removeRpcClient\n * @instance\n * @rtype (id: string) => void\n * @param {String} id Client ID\n * @param {Object} [opt = {}]\n * @return {void}\n */\n removeRpcClient (id, { forceConnectionClose = false } = {}) {\n const client = this.rpcClients[id]\n if (!client) throw new UnknownRpcClientError(id)\n client.disconnect(forceConnectionClose)\n delete this.rpcClients[id]\n },\n /**\n * Add new client by AEPP connection\n * @function addRpcClient\n * @instance\n * @rtype (clientConnection: Object) => Object\n * @param {Object} clientConnection AEPP connection object\n * @return {String} Client ID\n */\n addRpcClient (clientConnection) {\n // @TODO detect if aepp has some history based on origin????\n // if yes use this instance for connection\n const id = uuid()\n this.rpcClients[id] = RpcClient({\n id,\n info: { status: RPC_STATUS.WAITING_FOR_CONNECTION_REQUEST },\n connection: clientConnection,\n handlers: [handleMessage(this, id), this.onDisconnect]\n })\n return id\n },\n /**\n * Share wallet info\n * Send shareWalletInfo message to notify AEPP about wallet\n * @function shareWalletInfo\n * @instance\n * @rtype (postFn: Function) => void\n * @param {Function} postFn Send message function like `(msg) => void`\n * @return {void}\n */\n shareWalletInfo (postFn) {\n postFn({\n jsonrpc: '2.0',\n ...message(METHODS.readyToConnect, this.getWalletInfo())\n })\n },\n /**\n * Get Wallet info object\n * @function getWalletInfo\n * @instance\n * @rtype () => Object\n * @return {Object} Object with wallet information(id, name, network, ...)\n */\n getWalletInfo () {\n const runtime = getBrowserAPI(true).runtime\n return {\n id: runtime && runtime.id ? runtime.id : this.id,\n name: this.name,\n networkId: this.getNetworkId(),\n origin: window.location.origin,\n type: runtime && runtime.id ? WALLET_TYPE.extension : WALLET_TYPE.window\n }\n },\n /**\n * Get Wallet accounts\n * @function getAccounts\n * @instance\n * @rtype () => Object\n * @return {Object} Object with accounts information({ connected: Object, current: Object })\n */\n getAccounts () {\n return {\n current: this.selectedAddress ? { [this.selectedAddress]: {} } : {},\n connected: this.addresses()\n .filter(a => a !== this.selectedAddress)\n .reduce((acc, a) => ({ ...acc, [a]: {} }), {})\n }\n }\n }\n})\n"],"file":"wallet-rpc.mjs"}