@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.
- package/README.md +15 -14
- package/dist/aepp-sdk.browser-script.js +1 -1
- package/dist/aepp-sdk.browser-script.js.LICENSE.txt +7 -36
- package/dist/aepp-sdk.browser-script.js.map +1 -1
- package/dist/aepp-sdk.browser.js +1 -1
- package/dist/aepp-sdk.browser.js.map +1 -1
- package/dist/aepp-sdk.js +1 -1
- package/dist/aepp-sdk.js.map +1 -1
- package/es/account/base.mjs +179 -0
- package/es/account/base.mjs.map +1 -0
- package/es/account/memory.mjs +99 -0
- package/es/account/memory.mjs.map +1 -0
- package/es/account/multiple.mjs +179 -0
- package/es/account/multiple.mjs.map +1 -0
- package/es/ae/aens.mjs +404 -0
- package/es/ae/aens.mjs.map +1 -0
- package/es/ae/{aepp.js → aepp.mjs} +9 -9
- package/es/ae/aepp.mjs.map +1 -0
- package/es/ae/contract.mjs +159 -0
- package/es/ae/contract.mjs.map +1 -0
- package/es/ae/index.mjs +207 -0
- package/es/ae/index.mjs.map +1 -0
- package/es/ae/oracle.mjs +339 -0
- package/es/ae/oracle.mjs.map +1 -0
- package/es/ae/{universal.js → universal.mjs} +10 -10
- package/es/ae/universal.mjs.map +1 -0
- package/es/ae/{wallet.js → wallet.mjs} +10 -10
- package/es/ae/wallet.mjs.map +1 -0
- package/es/aepp-wallet-communication/schema.d.ts +74 -0
- package/es/bignumber.d.ts +1 -7
- package/es/chain/{index.js → index.mjs} +29 -9
- package/es/chain/index.mjs.map +1 -0
- package/es/chain/node.mjs +442 -0
- package/es/chain/node.mjs.map +1 -0
- package/es/channel/handlers.mjs +1110 -0
- package/es/channel/handlers.mjs.map +1 -0
- package/es/channel/{index.js → index.mjs} +245 -472
- package/es/channel/index.mjs.map +1 -0
- package/es/channel/internal.mjs +283 -0
- package/es/channel/internal.mjs.map +1 -0
- package/es/contract/aci.mjs +477 -0
- package/es/contract/aci.mjs.map +1 -0
- package/es/contract/compiler.mjs +115 -0
- package/es/contract/compiler.mjs.map +1 -0
- package/es/contract/ga/helpers.mjs +30 -0
- package/es/contract/ga/helpers.mjs.map +1 -0
- package/es/contract/ga/index.mjs +178 -0
- package/es/contract/ga/index.mjs.map +1 -0
- package/es/errors.d.ts +284 -0
- package/es/index.mjs +57 -0
- package/es/index.mjs.map +1 -0
- package/es/node-pool/index.mjs +188 -0
- package/es/node-pool/index.mjs.map +1 -0
- package/es/node.mjs +133 -0
- package/es/node.mjs.map +1 -0
- package/es/other.d.ts +1 -1
- package/es/tx/builder/field-types.mjs +74 -0
- package/es/tx/builder/field-types.mjs.map +1 -0
- package/es/tx/builder/helpers.mjs +363 -0
- package/es/tx/builder/helpers.mjs.map +1 -0
- package/es/tx/builder/index.mjs +606 -0
- package/es/tx/builder/index.mjs.map +1 -0
- package/es/tx/builder/schema.mjs +760 -0
- package/es/tx/builder/schema.mjs.map +1 -0
- package/es/tx/{index.js → index.mjs} +107 -15
- package/es/tx/index.mjs.map +1 -0
- package/es/tx/tx-object.mjs +283 -0
- package/es/tx/tx-object.mjs.map +1 -0
- package/es/tx/tx.mjs +938 -0
- package/es/tx/tx.mjs.map +1 -0
- package/es/tx/validator.mjs +247 -0
- package/es/tx/validator.mjs.map +1 -0
- package/es/typings/blakejs/index.d.mjs +2 -0
- package/es/typings/blakejs/{index.d.js.map → index.d.mjs.map} +1 -1
- package/es/utils/aepp-wallet-communication/connection/{browser-runtime.js → browser-runtime.mjs} +27 -29
- package/es/utils/aepp-wallet-communication/connection/browser-runtime.mjs.map +1 -0
- package/es/utils/aepp-wallet-communication/connection/browser-window-message.mjs +183 -0
- package/es/utils/aepp-wallet-communication/connection/browser-window-message.mjs.map +1 -0
- package/es/utils/aepp-wallet-communication/connection/{index.js → index.mjs} +7 -3
- package/es/utils/aepp-wallet-communication/connection/index.mjs.map +1 -0
- package/es/utils/aepp-wallet-communication/{content-script-bridge.js → content-script-bridge.mjs} +29 -23
- package/es/utils/aepp-wallet-communication/content-script-bridge.mjs.map +1 -0
- package/es/utils/aepp-wallet-communication/helpers.mjs +92 -0
- package/es/utils/aepp-wallet-communication/helpers.mjs.map +1 -0
- package/es/utils/aepp-wallet-communication/rpc/aepp-rpc.mjs +375 -0
- package/es/utils/aepp-wallet-communication/rpc/aepp-rpc.mjs.map +1 -0
- package/es/utils/aepp-wallet-communication/rpc/rpc-client.mjs +275 -0
- package/es/utils/aepp-wallet-communication/rpc/rpc-client.mjs.map +1 -0
- package/es/utils/aepp-wallet-communication/rpc/wallet-rpc.mjs +541 -0
- package/es/utils/aepp-wallet-communication/rpc/wallet-rpc.mjs.map +1 -0
- package/es/utils/aepp-wallet-communication/schema.mjs +102 -0
- package/es/utils/aepp-wallet-communication/schema.mjs.map +1 -0
- package/es/utils/aepp-wallet-communication/wallet-detector.mjs +110 -0
- package/es/utils/aepp-wallet-communication/wallet-detector.mjs.map +1 -0
- package/es/utils/amount-formatter.mjs +139 -0
- package/es/utils/amount-formatter.mjs.map +1 -0
- package/es/utils/async-init.mjs +64 -0
- package/es/utils/async-init.mjs.map +1 -0
- package/es/utils/bignumber.mjs +21 -0
- package/es/utils/bignumber.mjs.map +1 -0
- package/es/utils/{bytes.js → bytes.mjs} +16 -12
- package/es/utils/bytes.mjs.map +1 -0
- package/es/utils/{crypto-ts.js → crypto-ts.mjs} +11 -3
- package/es/utils/crypto-ts.mjs.map +1 -0
- package/es/utils/crypto.mjs +239 -0
- package/es/utils/crypto.mjs.map +1 -0
- package/es/utils/errors.mjs +689 -0
- package/es/utils/errors.mjs.map +1 -0
- package/es/utils/hd-wallet.mjs +111 -0
- package/es/utils/hd-wallet.mjs.map +1 -0
- package/es/utils/json-big.mjs +45 -0
- package/es/utils/json-big.mjs.map +1 -0
- package/es/utils/keystore.mjs +240 -0
- package/es/utils/keystore.mjs.map +1 -0
- package/es/utils/mptree.mjs +161 -0
- package/es/utils/mptree.mjs.map +1 -0
- package/es/utils/other.mjs +43 -0
- package/es/utils/other.mjs.map +1 -0
- package/es/utils/semver-satisfies.mjs +16 -0
- package/es/utils/semver-satisfies.mjs.map +1 -0
- package/es/utils/{string.js → string.mjs} +5 -14
- package/es/utils/string.mjs.map +1 -0
- package/es/utils/swagger.mjs +164 -0
- package/es/utils/swagger.mjs.map +1 -0
- package/package.json +55 -62
- package/src/account/base.js +3 -1
- package/src/account/memory.js +13 -8
- package/src/account/multiple.js +31 -22
- package/src/ae/aens.js +75 -77
- package/src/ae/aepp.js +2 -2
- package/src/ae/contract.js +27 -291
- package/src/ae/index.js +9 -7
- package/src/ae/oracle.js +51 -28
- package/src/ae/universal.js +4 -2
- package/src/ae/wallet.js +2 -2
- package/src/chain/index.js +29 -6
- package/src/chain/node.js +95 -67
- package/src/channel/handlers.js +30 -21
- package/src/channel/index.js +44 -20
- package/src/channel/internal.js +30 -24
- package/src/contract/aci.js +376 -0
- package/src/contract/compiler.js +41 -91
- package/src/contract/ga/helpers.js +10 -13
- package/src/contract/ga/index.js +42 -33
- package/src/index.js +9 -10
- package/src/node-pool/index.js +29 -17
- package/src/node.js +33 -36
- package/src/tx/builder/field-types.js +61 -0
- package/src/tx/builder/helpers.js +126 -84
- package/src/tx/builder/index.js +83 -41
- package/src/tx/builder/schema.js +50 -40
- package/src/tx/index.js +101 -12
- package/src/tx/tx-object.js +35 -15
- package/src/tx/tx.js +232 -153
- package/src/tx/validator.js +34 -12
- package/src/utils/aepp-wallet-communication/connection/browser-runtime.js +11 -5
- package/src/utils/aepp-wallet-communication/connection/browser-window-message.js +35 -13
- package/src/utils/aepp-wallet-communication/connection/index.js +2 -1
- package/src/utils/aepp-wallet-communication/content-script-bridge.js +14 -7
- package/src/utils/aepp-wallet-communication/helpers.js +6 -14
- package/src/utils/aepp-wallet-communication/rpc/aepp-rpc.js +107 -60
- package/src/utils/aepp-wallet-communication/rpc/rpc-client.js +24 -11
- package/src/utils/aepp-wallet-communication/rpc/wallet-rpc.js +98 -56
- package/src/utils/aepp-wallet-communication/schema.ts +80 -0
- package/src/utils/aepp-wallet-communication/wallet-detector.js +6 -2
- package/src/utils/amount-formatter.ts +4 -3
- package/src/utils/async-init.js +10 -6
- package/src/utils/bignumber.ts +3 -10
- package/src/utils/bytes.ts +3 -2
- package/src/utils/crypto-ts.ts +2 -2
- package/src/utils/crypto.js +10 -144
- package/src/utils/errors.ts +683 -0
- package/src/utils/hd-wallet.js +11 -26
- package/src/utils/keystore.js +57 -53
- package/src/utils/mptree.ts +12 -6
- package/src/utils/other.ts +1 -1
- package/src/utils/semver-satisfies.ts +1 -1
- package/src/utils/swagger.js +75 -45
- package/es/account/base.js +0 -259
- package/es/account/base.js.map +0 -1
- package/es/account/memory.js +0 -86
- package/es/account/memory.js.map +0 -1
- package/es/account/multiple.js +0 -267
- package/es/account/multiple.js.map +0 -1
- package/es/ae/aens.js +0 -829
- package/es/ae/aens.js.map +0 -1
- package/es/ae/aepp.js.map +0 -1
- package/es/ae/contract.js +0 -985
- package/es/ae/contract.js.map +0 -1
- package/es/ae/index.js +0 -442
- package/es/ae/index.js.map +0 -1
- package/es/ae/oracle.js +0 -690
- package/es/ae/oracle.js.map +0 -1
- package/es/ae/universal.js.map +0 -1
- package/es/ae/wallet.js.map +0 -1
- package/es/chain/index.js.map +0 -1
- package/es/chain/node.js +0 -1119
- package/es/chain/node.js.map +0 -1
- package/es/channel/handlers.js +0 -1601
- package/es/channel/handlers.js.map +0 -1
- package/es/channel/index.js.map +0 -1
- package/es/channel/internal.js +0 -438
- package/es/channel/internal.js.map +0 -1
- package/es/contract/aci/helpers.js +0 -298
- package/es/contract/aci/helpers.js.map +0 -1
- package/es/contract/aci/index.js +0 -517
- package/es/contract/aci/index.js.map +0 -1
- package/es/contract/aci/transformation.js +0 -742
- package/es/contract/aci/transformation.js.map +0 -1
- package/es/contract/compiler.js +0 -316
- package/es/contract/compiler.js.map +0 -1
- package/es/contract/ga/helpers.js +0 -120
- package/es/contract/ga/helpers.js.map +0 -1
- package/es/contract/ga/index.js +0 -307
- package/es/contract/ga/index.js.map +0 -1
- package/es/contract/index.js +0 -158
- package/es/contract/index.js.map +0 -1
- package/es/index.js +0 -57
- package/es/index.js.map +0 -1
- package/es/node-pool/index.js +0 -204
- package/es/node-pool/index.js.map +0 -1
- package/es/node.js +0 -228
- package/es/node.js.map +0 -1
- package/es/tx/builder/helpers.js +0 -355
- package/es/tx/builder/helpers.js.map +0 -1
- package/es/tx/builder/index.js +0 -686
- package/es/tx/builder/index.js.map +0 -1
- package/es/tx/builder/schema.js +0 -695
- package/es/tx/builder/schema.js.map +0 -1
- package/es/tx/index.js.map +0 -1
- package/es/tx/tx-object.js +0 -297
- package/es/tx/tx-object.js.map +0 -1
- package/es/tx/tx.js +0 -1757
- package/es/tx/tx.js.map +0 -1
- package/es/tx/validator.js +0 -344
- package/es/tx/validator.js.map +0 -1
- package/es/typings/blakejs/index.d.js +0 -2
- package/es/utils/aepp-wallet-communication/connection/browser-runtime.js.map +0 -1
- package/es/utils/aepp-wallet-communication/connection/browser-window-message.js +0 -211
- package/es/utils/aepp-wallet-communication/connection/browser-window-message.js.map +0 -1
- package/es/utils/aepp-wallet-communication/connection/index.js.map +0 -1
- package/es/utils/aepp-wallet-communication/content-script-bridge.js.map +0 -1
- package/es/utils/aepp-wallet-communication/helpers.js +0 -148
- package/es/utils/aepp-wallet-communication/helpers.js.map +0 -1
- package/es/utils/aepp-wallet-communication/rpc/aepp-rpc.js +0 -652
- package/es/utils/aepp-wallet-communication/rpc/aepp-rpc.js.map +0 -1
- package/es/utils/aepp-wallet-communication/rpc/rpc-client.js +0 -285
- package/es/utils/aepp-wallet-communication/rpc/rpc-client.js.map +0 -1
- package/es/utils/aepp-wallet-communication/rpc/wallet-rpc.js +0 -763
- package/es/utils/aepp-wallet-communication/rpc/wallet-rpc.js.map +0 -1
- package/es/utils/aepp-wallet-communication/schema.js +0 -103
- package/es/utils/aepp-wallet-communication/schema.js.map +0 -1
- package/es/utils/aepp-wallet-communication/wallet-detector.js +0 -135
- package/es/utils/aepp-wallet-communication/wallet-detector.js.map +0 -1
- package/es/utils/amount-formatter.js +0 -152
- package/es/utils/amount-formatter.js.map +0 -1
- package/es/utils/async-init.js +0 -103
- package/es/utils/async-init.js.map +0 -1
- package/es/utils/bignumber.js +0 -36
- package/es/utils/bignumber.js.map +0 -1
- package/es/utils/bytes.js.map +0 -1
- package/es/utils/crypto-ts.js.map +0 -1
- package/es/utils/crypto.js +0 -358
- package/es/utils/crypto.js.map +0 -1
- package/es/utils/hd-wallet.js +0 -148
- package/es/utils/hd-wallet.js.map +0 -1
- package/es/utils/json-big.js +0 -78
- package/es/utils/json-big.js.map +0 -1
- package/es/utils/keystore.js +0 -393
- package/es/utils/keystore.js.map +0 -1
- package/es/utils/mptree.js +0 -198
- package/es/utils/mptree.js.map +0 -1
- package/es/utils/other.js +0 -93
- package/es/utils/other.js.map +0 -1
- package/es/utils/semver-satisfies.js +0 -35
- package/es/utils/semver-satisfies.js.map +0 -1
- package/es/utils/string.js.map +0 -1
- package/es/utils/swagger.js +0 -269
- package/es/utils/swagger.js.map +0 -1
- package/src/contract/aci/helpers.js +0 -140
- package/src/contract/aci/index.js +0 -191
- package/src/contract/aci/transformation.js +0 -464
- package/src/contract/index.js +0 -159
- 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"}
|