@aeternity/aepp-sdk 11.0.1 → 12.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +1 -1
- package/dist/aepp-sdk.browser-script.js +1 -1
- package/dist/aepp-sdk.browser-script.js.LICENSE.txt +12 -19
- 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/AeSdk.d.ts +37 -0
- package/es/AeSdk.mjs +81 -0
- package/es/AeSdk.mjs.map +1 -0
- package/es/AeSdkAepp.d.ts +69 -0
- package/es/AeSdkAepp.mjs +175 -0
- package/es/AeSdkAepp.mjs.map +1 -0
- package/es/AeSdkBase.d.ts +212 -0
- package/es/AeSdkBase.mjs +310 -0
- package/es/AeSdkBase.mjs.map +1 -0
- package/es/AeSdkWallet.d.ts +103 -0
- package/es/AeSdkWallet.mjs +322 -0
- package/es/AeSdkWallet.mjs.map +1 -0
- package/es/Node.d.ts +44 -0
- package/es/Node.mjs +141 -0
- package/es/Node.mjs.map +1 -0
- package/es/account/Base.d.ts +65 -0
- package/es/account/Base.mjs +123 -0
- package/es/account/Base.mjs.map +1 -0
- package/es/account/Memory.d.ts +25 -0
- package/es/account/Memory.mjs +81 -0
- package/es/account/Memory.mjs.map +1 -0
- package/es/account/Rpc.d.ts +27 -0
- package/es/account/Rpc.mjs +79 -0
- package/es/account/Rpc.mjs.map +1 -0
- package/es/aens.d.ts +209 -0
- package/es/aens.mjs +332 -0
- package/es/aens.mjs.map +1 -0
- package/es/aepp-wallet-communication/connection/Browser.d.ts +32 -0
- package/es/aepp-wallet-communication/connection/Browser.mjs +70 -0
- package/es/aepp-wallet-communication/connection/Browser.mjs.map +1 -0
- package/es/aepp-wallet-communication/connection/BrowserRuntime.d.ts +17 -0
- package/es/aepp-wallet-communication/connection/BrowserRuntime.mjs +57 -0
- package/es/aepp-wallet-communication/connection/BrowserRuntime.mjs.map +1 -0
- package/es/aepp-wallet-communication/connection/BrowserWindowMessage.d.ts +35 -0
- package/es/aepp-wallet-communication/connection/BrowserWindowMessage.mjs +142 -0
- package/es/aepp-wallet-communication/connection/BrowserWindowMessage.mjs.map +1 -0
- package/es/aepp-wallet-communication/connection-proxy.d.ts +10 -0
- package/{src/utils/crypto-ts.ts → es/aepp-wallet-communication/connection-proxy.mjs} +15 -11
- package/es/aepp-wallet-communication/connection-proxy.mjs.map +1 -0
- package/es/aepp-wallet-communication/rpc/RpcClient.d.ts +33 -0
- package/es/aepp-wallet-communication/rpc/RpcClient.mjs +169 -0
- package/es/aepp-wallet-communication/rpc/RpcClient.mjs.map +1 -0
- package/es/aepp-wallet-communication/rpc/types.d.ts +77 -0
- package/es/aepp-wallet-communication/rpc/types.mjs +3 -0
- package/es/aepp-wallet-communication/rpc/types.mjs.map +1 -0
- package/es/aepp-wallet-communication/schema.d.ts +90 -46
- package/es/aepp-wallet-communication/schema.mjs +214 -0
- package/es/aepp-wallet-communication/schema.mjs.map +1 -0
- package/es/aepp-wallet-communication/wallet-detector.d.ts +24 -0
- package/es/aepp-wallet-communication/wallet-detector.mjs +63 -0
- package/es/aepp-wallet-communication/wallet-detector.mjs.map +1 -0
- package/es/apis/compiler/compiler.d.ts +92 -0
- package/es/apis/compiler/compiler.mjs +576 -0
- package/es/apis/compiler/compiler.mjs.map +1 -0
- package/es/apis/compiler/index.d.ts +2 -0
- package/es/apis/compiler/index.mjs +3 -0
- package/es/apis/compiler/index.mjs.map +1 -0
- package/es/apis/compiler/models/index.d.ts +248 -0
- package/es/apis/compiler/models/index.mjs +48 -0
- package/es/apis/compiler/models/index.mjs.map +1 -0
- package/es/apis/compiler/models/mappers.d.ts +23 -0
- package/es/apis/compiler/models/mappers.mjs +585 -0
- package/es/apis/compiler/models/mappers.mjs.map +1 -0
- package/es/apis/compiler/models/parameters.d.ts +13 -0
- package/es/apis/compiler/models/parameters.mjs +71 -0
- package/es/apis/compiler/models/parameters.mjs.map +1 -0
- package/es/apis/node/index.d.ts +2 -0
- package/es/apis/node/index.mjs +3 -0
- package/es/apis/node/index.mjs.map +1 -0
- package/es/apis/node/models/index.d.ts +1061 -0
- package/es/apis/node/models/index.mjs +2 -0
- package/es/apis/node/models/index.mjs.map +1 -0
- package/es/apis/node/models/mappers.d.ts +95 -0
- package/es/apis/node/models/mappers.mjs +4164 -0
- package/es/apis/node/models/mappers.mjs.map +1 -0
- package/es/apis/node/models/parameters.d.ts +17 -0
- package/es/apis/node/models/parameters.mjs +165 -0
- package/es/apis/node/models/parameters.mjs.map +1 -0
- package/es/apis/node/node.d.ts +215 -0
- package/es/apis/node/node.mjs +1165 -0
- package/es/apis/node/node.mjs.map +1 -0
- package/es/chain.d.ts +220 -0
- package/es/chain.mjs +524 -0
- package/es/chain.mjs.map +1 -0
- package/es/channel/handlers.d.ts +34 -0
- package/es/channel/handlers.mjs +147 -112
- package/es/channel/handlers.mjs.map +1 -1
- package/es/channel/index.d.ts +634 -0
- package/es/channel/index.mjs +898 -900
- package/es/channel/index.mjs.map +1 -1
- package/es/channel/internal.d.ts +100 -0
- package/es/channel/internal.mjs +97 -51
- package/es/channel/internal.mjs.map +1 -1
- package/es/contract/Compiler.d.ts +17 -0
- package/es/contract/Compiler.mjs +67 -0
- package/es/contract/Compiler.mjs.map +1 -0
- package/es/contract/aci.d.ts +125 -0
- package/es/contract/aci.mjs +199 -180
- package/es/contract/aci.mjs.map +1 -1
- package/es/contract/ga.d.ts +68 -0
- package/es/contract/ga.mjs +190 -0
- package/es/contract/ga.mjs.map +1 -0
- package/es/contract/methods.d.ts +68 -0
- package/es/contract/methods.mjs +101 -0
- package/es/contract/methods.mjs.map +1 -0
- package/es/index.d.ts +32 -0
- package/es/index.mjs +32 -40
- package/es/index.mjs.map +1 -1
- package/es/oracle.d.ts +154 -0
- package/es/oracle.mjs +288 -0
- package/es/oracle.mjs.map +1 -0
- package/es/spend.d.ts +61 -0
- package/es/spend.mjs +122 -0
- package/es/spend.mjs.map +1 -0
- package/es/tx/builder/constants.d.ts +41 -0
- package/es/tx/builder/constants.mjs +11 -19
- package/es/tx/builder/constants.mjs.map +1 -1
- package/es/tx/builder/field-types.d.ts +62 -0
- package/es/tx/builder/field-types.mjs +62 -10
- package/es/tx/builder/field-types.mjs.map +1 -1
- package/es/tx/builder/helpers.d.ts +131 -0
- package/es/tx/builder/helpers.mjs +71 -169
- package/es/tx/builder/helpers.mjs.map +1 -1
- package/es/tx/builder/index.d.ts +75 -0
- package/es/tx/builder/index.mjs +141 -323
- package/es/tx/builder/index.mjs.map +1 -1
- package/es/tx/builder/schema.d.ts +350 -0
- package/es/tx/builder/schema.mjs +173 -510
- package/es/tx/builder/schema.mjs.map +1 -1
- package/es/tx/index.d.ts +63 -0
- package/es/tx/index.mjs +171 -265
- package/es/tx/index.mjs.map +1 -1
- package/es/tx/min-fee.d.ts +20 -0
- package/es/tx/min-fee.mjs +148 -0
- package/es/tx/min-fee.mjs.map +1 -0
- package/es/tx/validator.d.ts +19 -0
- package/es/tx/validator.mjs +64 -71
- package/es/tx/validator.mjs.map +1 -1
- package/es/typings/@aeternity__argon2-browser/index.d.mjs +2 -0
- package/es/typings/@aeternity__argon2-browser/index.d.mjs.map +1 -0
- package/es/typings/@aeternity__uuid/index.d.mjs +2 -0
- package/es/typings/@aeternity__uuid/index.d.mjs.map +1 -0
- package/es/typings/bip32-path/index.d.mjs +2 -0
- package/es/typings/bip32-path/index.d.mjs.map +1 -0
- package/es/typings/blakejs/index.d.mjs.map +1 -1
- package/es/typings/tweetnacl-auth/index.d.mjs +2 -0
- package/es/typings/tweetnacl-auth/index.d.mjs.map +1 -0
- package/es/utils/amount-formatter.d.ts +42 -0
- package/es/utils/amount-formatter.mjs +28 -41
- package/es/utils/amount-formatter.mjs.map +1 -1
- package/es/utils/autorest.d.ts +6 -0
- package/es/utils/autorest.mjs +97 -0
- package/es/utils/autorest.mjs.map +1 -0
- package/es/utils/bignumber.d.ts +13 -0
- package/es/utils/bignumber.mjs +10 -8
- package/es/utils/bignumber.mjs.map +1 -1
- package/es/{bytes.d.ts → utils/bytes.d.ts} +10 -13
- package/es/utils/bytes.mjs +10 -14
- package/es/utils/bytes.mjs.map +1 -1
- package/es/utils/crypto.d.ts +103 -0
- package/es/utils/crypto.mjs +60 -68
- package/es/utils/crypto.mjs.map +1 -1
- package/es/utils/encoder.d.ts +26 -0
- package/es/utils/encoder.mjs +47 -51
- package/es/utils/encoder.mjs.map +1 -1
- package/es/{errors.d.ts → utils/errors.d.ts} +254 -57
- package/es/utils/errors.mjs +318 -125
- package/es/utils/errors.mjs.map +1 -1
- package/es/utils/hd-wallet.d.ts +34 -0
- package/es/utils/hd-wallet.mjs +27 -16
- package/es/utils/hd-wallet.mjs.map +1 -1
- package/es/utils/json-big.d.ts +5 -0
- package/es/utils/json-big.mjs +10 -14
- package/es/utils/json-big.mjs.map +1 -1
- package/es/utils/keystore.d.ts +51 -0
- package/es/utils/keystore.mjs +98 -193
- package/es/utils/keystore.mjs.map +1 -1
- package/es/{mptree.d.ts → utils/mptree.d.ts} +5 -8
- package/es/utils/mptree.mjs +13 -14
- package/es/utils/mptree.mjs.map +1 -1
- package/es/utils/other.d.ts +14 -0
- package/es/utils/other.mjs +21 -36
- package/es/utils/other.mjs.map +1 -1
- package/es/{semver-satisfies.d.ts → utils/semver-satisfies.d.ts} +0 -0
- package/es/utils/semver-satisfies.mjs.map +1 -1
- package/es/utils/string.d.ts +24 -0
- package/es/utils/string.mjs +8 -10
- package/es/utils/string.mjs.map +1 -1
- package/package.json +49 -39
- package/src/AeSdk.ts +65 -0
- package/src/AeSdkAepp.ts +167 -0
- package/src/AeSdkBase.ts +320 -0
- package/src/AeSdkWallet.ts +332 -0
- package/src/Node.ts +167 -0
- package/src/account/Base.ts +114 -0
- package/src/account/Memory.ts +83 -0
- package/src/account/Rpc.ts +67 -0
- package/src/aens.ts +391 -0
- package/src/aepp-wallet-communication/connection/Browser.ts +68 -0
- package/src/aepp-wallet-communication/connection/BrowserRuntime.ts +58 -0
- package/src/aepp-wallet-communication/connection/BrowserWindowMessage.ts +111 -0
- package/{es/utils/crypto-ts.mjs → src/aepp-wallet-communication/connection-proxy.ts} +16 -17
- package/src/aepp-wallet-communication/rpc/RpcClient.ts +137 -0
- package/src/aepp-wallet-communication/rpc/types.ts +66 -0
- package/src/aepp-wallet-communication/schema.ts +181 -0
- package/src/aepp-wallet-communication/wallet-detector.ts +71 -0
- package/src/apis/compiler/code-model-v4.yaml +2649 -0
- package/src/apis/compiler/compiler.ts +585 -0
- package/src/apis/compiler/index.ts +2 -0
- package/src/apis/compiler/models/index.ts +301 -0
- package/src/apis/compiler/models/mappers.ts +583 -0
- package/src/apis/compiler/models/parameters.ts +93 -0
- package/src/apis/node/code-model-v4.yaml +10046 -0
- package/src/apis/node/index.ts +2 -0
- package/src/apis/node/models/index.ts +1253 -0
- package/src/apis/node/models/mappers.ts +4278 -0
- package/src/apis/node/models/parameters.ts +188 -0
- package/src/apis/node/node.ts +1299 -0
- package/src/chain.ts +444 -0
- package/src/channel/{handlers.js → handlers.ts} +220 -128
- package/src/channel/index.ts +991 -0
- package/src/channel/internal.ts +345 -0
- package/src/contract/Compiler.ts +66 -0
- package/src/contract/aci.ts +529 -0
- package/src/contract/ga.ts +178 -0
- package/src/contract/methods.ts +118 -0
- package/src/index.ts +51 -0
- package/src/oracle.ts +342 -0
- package/src/spend.ts +152 -0
- package/src/tx/builder/{constants.js → constants.ts} +12 -16
- package/src/tx/builder/field-types.ts +111 -0
- package/src/tx/builder/helpers.ts +253 -0
- package/src/tx/builder/index.ts +394 -0
- package/src/tx/builder/schema.ts +771 -0
- package/src/tx/index.ts +199 -0
- package/src/tx/min-fee.ts +136 -0
- package/src/tx/validator.ts +226 -0
- package/src/typings/@aeternity__argon2-browser/index.d.ts +3 -0
- package/src/typings/@aeternity__uuid/index.d.ts +3 -0
- package/src/typings/bip32-path/index.d.ts +33 -0
- package/src/typings/tweetnacl-auth/index.d.ts +14 -0
- package/src/utils/amount-formatter.ts +29 -42
- package/src/utils/autorest.ts +90 -0
- package/src/utils/bignumber.ts +9 -11
- package/src/utils/bytes.ts +12 -14
- package/src/utils/crypto.ts +217 -0
- package/src/utils/encoder.ts +52 -55
- package/src/utils/errors.ts +268 -134
- package/src/utils/hd-wallet.ts +134 -0
- package/src/utils/json-big.ts +26 -0
- package/src/utils/keystore.ts +179 -0
- package/src/utils/mptree.ts +14 -14
- package/src/utils/other.ts +28 -43
- package/src/utils/string.ts +8 -10
- package/es/account/base.mjs +0 -179
- package/es/account/base.mjs.map +0 -1
- package/es/account/memory.mjs +0 -99
- package/es/account/memory.mjs.map +0 -1
- package/es/account/multiple.mjs +0 -179
- package/es/account/multiple.mjs.map +0 -1
- package/es/ae/aens.mjs +0 -404
- package/es/ae/aens.mjs.map +0 -1
- package/es/ae/aepp.mjs +0 -45
- package/es/ae/aepp.mjs.map +0 -1
- package/es/ae/contract.mjs +0 -159
- package/es/ae/contract.mjs.map +0 -1
- package/es/ae/index.mjs +0 -207
- package/es/ae/index.mjs.map +0 -1
- package/es/ae/oracle.mjs +0 -339
- package/es/ae/oracle.mjs.map +0 -1
- package/es/ae/universal.mjs +0 -45
- package/es/ae/universal.mjs.map +0 -1
- package/es/ae/wallet.mjs +0 -50
- package/es/ae/wallet.mjs.map +0 -1
- package/es/amount-formatter.d.ts +0 -58
- package/es/bignumber.d.ts +0 -18
- package/es/chain/index.mjs +0 -272
- package/es/chain/index.mjs.map +0 -1
- package/es/chain/node.mjs +0 -442
- package/es/chain/node.mjs.map +0 -1
- package/es/contract/compiler.mjs +0 -115
- package/es/contract/compiler.mjs.map +0 -1
- package/es/contract/ga/helpers.mjs +0 -30
- package/es/contract/ga/helpers.mjs.map +0 -1
- package/es/contract/ga/index.mjs +0 -178
- package/es/contract/ga/index.mjs.map +0 -1
- package/es/crypto-ts.d.ts +0 -9
- package/es/encoder.d.ts +0 -26
- package/es/node-pool/index.mjs +0 -188
- package/es/node-pool/index.mjs.map +0 -1
- package/es/node.mjs +0 -133
- package/es/node.mjs.map +0 -1
- package/es/other.d.ts +0 -31
- package/es/string.d.ts +0 -26
- package/es/tx/tx-object.mjs +0 -283
- package/es/tx/tx-object.mjs.map +0 -1
- package/es/tx/tx.mjs +0 -938
- package/es/tx/tx.mjs.map +0 -1
- package/es/utils/aepp-wallet-communication/connection/browser-runtime.mjs +0 -132
- package/es/utils/aepp-wallet-communication/connection/browser-runtime.mjs.map +0 -1
- package/es/utils/aepp-wallet-communication/connection/browser-window-message.mjs +0 -183
- package/es/utils/aepp-wallet-communication/connection/browser-window-message.mjs.map +0 -1
- package/es/utils/aepp-wallet-communication/connection/index.mjs +0 -87
- package/es/utils/aepp-wallet-communication/connection/index.mjs.map +0 -1
- package/es/utils/aepp-wallet-communication/content-script-bridge.mjs +0 -98
- package/es/utils/aepp-wallet-communication/content-script-bridge.mjs.map +0 -1
- package/es/utils/aepp-wallet-communication/helpers.mjs +0 -92
- package/es/utils/aepp-wallet-communication/helpers.mjs.map +0 -1
- package/es/utils/aepp-wallet-communication/rpc/aepp-rpc.mjs +0 -375
- package/es/utils/aepp-wallet-communication/rpc/aepp-rpc.mjs.map +0 -1
- package/es/utils/aepp-wallet-communication/rpc/rpc-client.mjs +0 -275
- package/es/utils/aepp-wallet-communication/rpc/rpc-client.mjs.map +0 -1
- package/es/utils/aepp-wallet-communication/rpc/wallet-rpc.mjs +0 -541
- package/es/utils/aepp-wallet-communication/rpc/wallet-rpc.mjs.map +0 -1
- package/es/utils/aepp-wallet-communication/schema.mjs +0 -102
- package/es/utils/aepp-wallet-communication/schema.mjs.map +0 -1
- package/es/utils/aepp-wallet-communication/wallet-detector.mjs +0 -110
- package/es/utils/aepp-wallet-communication/wallet-detector.mjs.map +0 -1
- package/es/utils/async-init.mjs +0 -64
- package/es/utils/async-init.mjs.map +0 -1
- package/es/utils/crypto-ts.mjs.map +0 -1
- package/es/utils/swagger.mjs +0 -164
- package/es/utils/swagger.mjs.map +0 -1
- package/src/account/base.js +0 -153
- package/src/account/memory.js +0 -83
- package/src/account/multiple.js +0 -162
- package/src/ae/aens.js +0 -361
- package/src/ae/aepp.js +0 -45
- package/src/ae/contract.js +0 -148
- package/src/ae/index.js +0 -168
- package/src/ae/oracle.js +0 -311
- package/src/ae/universal.js +0 -47
- package/src/ae/wallet.js +0 -50
- package/src/chain/index.js +0 -269
- package/src/chain/node.js +0 -320
- package/src/channel/index.js +0 -903
- package/src/channel/internal.js +0 -236
- package/src/contract/aci.js +0 -376
- package/src/contract/compiler.js +0 -100
- package/src/contract/ga/helpers.js +0 -19
- package/src/contract/ga/index.js +0 -150
- package/src/index.js +0 -89
- package/src/node-pool/index.js +0 -172
- package/src/node.js +0 -116
- package/src/tx/builder/field-types.js +0 -61
- package/src/tx/builder/helpers.js +0 -334
- package/src/tx/builder/index.js +0 -465
- package/src/tx/builder/schema.js +0 -1100
- package/src/tx/index.js +0 -301
- package/src/tx/tx-object.js +0 -187
- package/src/tx/tx.js +0 -631
- package/src/tx/validator.js +0 -181
- package/src/utils/aepp-wallet-communication/connection/browser-runtime.js +0 -119
- package/src/utils/aepp-wallet-communication/connection/browser-window-message.js +0 -165
- package/src/utils/aepp-wallet-communication/connection/index.js +0 -85
- package/src/utils/aepp-wallet-communication/content-script-bridge.js +0 -86
- package/src/utils/aepp-wallet-communication/helpers.js +0 -60
- package/src/utils/aepp-wallet-communication/rpc/aepp-rpc.js +0 -294
- package/src/utils/aepp-wallet-communication/rpc/rpc-client.js +0 -232
- package/src/utils/aepp-wallet-communication/rpc/wallet-rpc.js +0 -401
- package/src/utils/aepp-wallet-communication/schema.ts +0 -80
- package/src/utils/aepp-wallet-communication/wallet-detector.js +0 -92
- package/src/utils/async-init.js +0 -45
- package/src/utils/crypto.js +0 -219
- package/src/utils/hd-wallet.js +0 -100
- package/src/utils/json-big.js +0 -26
- package/src/utils/keystore.js +0 -219
- package/src/utils/swagger.js +0 -156
package/src/tx/validator.js
DELETED
|
@@ -1,181 +0,0 @@
|
|
|
1
|
-
import { verify, hash } from '../utils/crypto'
|
|
2
|
-
import { encode, decode } from './builder/helpers'
|
|
3
|
-
|
|
4
|
-
import BigNumber from 'bignumber.js'
|
|
5
|
-
import { MIN_GAS_PRICE, PROTOCOL_VM_ABI, TX_TYPE } from './builder/schema'
|
|
6
|
-
import { calculateFee, unpackTx } from './builder'
|
|
7
|
-
import { UnsupportedProtocolError } from '../utils/errors'
|
|
8
|
-
|
|
9
|
-
/**
|
|
10
|
-
* Transaction validator
|
|
11
|
-
* @module @aeternity/aepp-sdk/es/tx/validator
|
|
12
|
-
* @export verifyTransaction
|
|
13
|
-
* @example import { verifyTransaction } from '@aeternity/aepp-sdk'
|
|
14
|
-
*/
|
|
15
|
-
|
|
16
|
-
const validators = [
|
|
17
|
-
({ encodedTx, signatures }, { account, node, parentTxTypes }) => {
|
|
18
|
-
if ((encodedTx ?? signatures) === undefined) return []
|
|
19
|
-
if (signatures.length !== 1) return [] // TODO: Support multisignature?
|
|
20
|
-
const prefix = Buffer.from([
|
|
21
|
-
node.nodeNetworkId,
|
|
22
|
-
...parentTxTypes.includes(TX_TYPE.payingFor) ? ['inner_tx'] : []
|
|
23
|
-
].join('-'))
|
|
24
|
-
const txWithNetworkId = Buffer.concat([prefix, encodedTx.rlpEncoded])
|
|
25
|
-
const txHashWithNetworkId = Buffer.concat([prefix, hash(encodedTx.rlpEncoded)])
|
|
26
|
-
const decodedPub = decode(account.id, 'ak')
|
|
27
|
-
if (verify(txWithNetworkId, signatures[0], decodedPub) ||
|
|
28
|
-
verify(txHashWithNetworkId, signatures[0], decodedPub)) return []
|
|
29
|
-
return [{
|
|
30
|
-
message: 'Signature cannot be verified, please ensure that you transaction have' +
|
|
31
|
-
' the correct prefix and the correct private key for the sender address',
|
|
32
|
-
key: 'InvalidSignature',
|
|
33
|
-
checkedKeys: ['encodedTx', 'signatures']
|
|
34
|
-
}]
|
|
35
|
-
},
|
|
36
|
-
({ encodedTx, tx }, { node, parentTxTypes, txType }) => {
|
|
37
|
-
if ((encodedTx ?? tx) === undefined) return []
|
|
38
|
-
return verifyTransaction(
|
|
39
|
-
encode((encodedTx ?? tx).rlpEncoded, 'tx'),
|
|
40
|
-
node,
|
|
41
|
-
[...parentTxTypes, txType]
|
|
42
|
-
)
|
|
43
|
-
},
|
|
44
|
-
(tx, { txType }) => {
|
|
45
|
-
if (tx.fee === undefined) return []
|
|
46
|
-
const minFee = calculateFee(0, txType, {
|
|
47
|
-
gas: +tx.gas || 0, params: tx, showWarning: false, vsn: tx.VSN
|
|
48
|
-
})
|
|
49
|
-
if (new BigNumber(minFee).lte(tx.fee)) return []
|
|
50
|
-
return [{
|
|
51
|
-
message: `Fee ${tx.fee} is too low, minimum fee for this transaction is ${minFee}`,
|
|
52
|
-
key: 'InsufficientFee',
|
|
53
|
-
checkedKeys: ['fee']
|
|
54
|
-
}]
|
|
55
|
-
},
|
|
56
|
-
({ ttl }, { height }) => {
|
|
57
|
-
if (ttl === undefined) return []
|
|
58
|
-
ttl = +ttl
|
|
59
|
-
if (ttl === 0 || ttl >= height) return []
|
|
60
|
-
return [{
|
|
61
|
-
message: `TTL ${ttl} is already expired, current height is ${height}`,
|
|
62
|
-
key: 'ExpiredTTL',
|
|
63
|
-
checkedKeys: ['ttl']
|
|
64
|
-
}]
|
|
65
|
-
},
|
|
66
|
-
({ amount, fee, nameFee, tx }, { account, parentTxTypes, txType }) => {
|
|
67
|
-
if ((amount ?? fee ?? nameFee) === undefined) return []
|
|
68
|
-
const cost = new BigNumber(fee).plus(nameFee || 0).plus(amount || 0)
|
|
69
|
-
.plus(txType === TX_TYPE.payingFor ? tx.tx.encodedTx.tx.fee : 0)
|
|
70
|
-
.minus(parentTxTypes.includes(TX_TYPE.payingFor) ? fee : 0)
|
|
71
|
-
if (cost.lte(account.balance)) return []
|
|
72
|
-
return [{
|
|
73
|
-
message: `Account balance ${account.balance} is not enough to execute the transaction that costs ${cost.toFixed()}`,
|
|
74
|
-
key: 'InsufficientBalance',
|
|
75
|
-
checkedKeys: ['amount', 'fee', 'nameFee']
|
|
76
|
-
}]
|
|
77
|
-
},
|
|
78
|
-
({ nonce }, { account, parentTxTypes }) => {
|
|
79
|
-
if (nonce === undefined || parentTxTypes.includes(TX_TYPE.gaMeta)) return []
|
|
80
|
-
nonce = +nonce
|
|
81
|
-
const validNonce = account.nonce + 1
|
|
82
|
-
if (nonce === validNonce) return []
|
|
83
|
-
return [{
|
|
84
|
-
...nonce < validNonce
|
|
85
|
-
? {
|
|
86
|
-
message: `Nonce ${nonce} is already used, valid nonce is ${validNonce}`,
|
|
87
|
-
key: 'NonceAlreadyUsed'
|
|
88
|
-
}
|
|
89
|
-
: {
|
|
90
|
-
message: `Nonce ${nonce} is too high, valid nonce is ${validNonce}`,
|
|
91
|
-
key: 'NonceHigh'
|
|
92
|
-
},
|
|
93
|
-
checkedKeys: ['nonce']
|
|
94
|
-
}]
|
|
95
|
-
},
|
|
96
|
-
({ gasPrice }) => {
|
|
97
|
-
if (gasPrice === undefined) return []
|
|
98
|
-
if (gasPrice >= MIN_GAS_PRICE) return []
|
|
99
|
-
return [{
|
|
100
|
-
message: `Gas price ${gasPrice} must be bigger then ${MIN_GAS_PRICE}`,
|
|
101
|
-
key: 'MinGasPrice',
|
|
102
|
-
checkedKeys: ['gasPrice']
|
|
103
|
-
}]
|
|
104
|
-
},
|
|
105
|
-
({ ctVersion, abiVersion }, { txType, node }) => {
|
|
106
|
-
const { consensusProtocolVersion } = node.getNodeInfo()
|
|
107
|
-
const protocol = PROTOCOL_VM_ABI[consensusProtocolVersion]
|
|
108
|
-
if (!protocol) throw new UnsupportedProtocolError(`Unsupported protocol: ${consensusProtocolVersion}`)
|
|
109
|
-
// If not contract create tx
|
|
110
|
-
if (!ctVersion) ctVersion = { abiVersion }
|
|
111
|
-
const txProtocol = protocol[txType]
|
|
112
|
-
if (!txProtocol) return []
|
|
113
|
-
if (Object.entries(ctVersion).some(([key, value]) => !txProtocol[key].includes(+value))) {
|
|
114
|
-
return [{
|
|
115
|
-
message: `ABI/VM version ${JSON.stringify(ctVersion)} is wrong, supported is: ${JSON.stringify(txProtocol)}`,
|
|
116
|
-
key: 'VmAndAbiVersionMismatch',
|
|
117
|
-
checkedKeys: ['ctVersion', 'abiVersion']
|
|
118
|
-
}]
|
|
119
|
-
}
|
|
120
|
-
return []
|
|
121
|
-
},
|
|
122
|
-
async ({ contractId }, { txType, node }) => {
|
|
123
|
-
if (TX_TYPE.contractCall !== txType) return []
|
|
124
|
-
try {
|
|
125
|
-
const { active } = await node.api.getContract(contractId)
|
|
126
|
-
if (active) return []
|
|
127
|
-
return [{
|
|
128
|
-
message: `Contract ${contractId} is not active`,
|
|
129
|
-
key: 'ContractNotActive',
|
|
130
|
-
checkedKeys: ['contractId']
|
|
131
|
-
}]
|
|
132
|
-
} catch (error) {
|
|
133
|
-
if (!error.response?.body?.reason) throw error
|
|
134
|
-
return [{
|
|
135
|
-
message: error.response.body.reason,
|
|
136
|
-
key: 'ContractNotFound',
|
|
137
|
-
checkedKeys: ['contractId']
|
|
138
|
-
}]
|
|
139
|
-
}
|
|
140
|
-
}
|
|
141
|
-
]
|
|
142
|
-
|
|
143
|
-
const getSenderAddress = tx => [
|
|
144
|
-
'senderId', 'accountId', 'ownerId', 'callerId',
|
|
145
|
-
'oracleId', 'fromId', 'initiator', 'gaId', 'payerId'
|
|
146
|
-
]
|
|
147
|
-
.map(key => tx[key])
|
|
148
|
-
.filter(a => a)
|
|
149
|
-
.map(a => a.replace(/^ok_/, 'ak_'))[0]
|
|
150
|
-
|
|
151
|
-
/**
|
|
152
|
-
* Transaction Validator
|
|
153
|
-
* This function validates some of transaction properties,
|
|
154
|
-
* to make sure it can be posted it to the chain
|
|
155
|
-
* @function
|
|
156
|
-
* @alias module:@aeternity/aepp-sdk/es/tx/validator
|
|
157
|
-
* @rtype (tx: String, node) => void
|
|
158
|
-
* @param {String} transaction Base64Check-encoded transaction
|
|
159
|
-
* @param {Object} node Node to validate transaction against
|
|
160
|
-
* @param {String[]} [parentTxTypes] Types of parent transactions
|
|
161
|
-
* @return {Promise<Object[]>} Array with verification errors
|
|
162
|
-
* @example const errors = await verifyTransaction(transaction, node)
|
|
163
|
-
*/
|
|
164
|
-
export default async function verifyTransaction (transaction, node, parentTxTypes = []) {
|
|
165
|
-
const { tx, txType } = unpackTx(transaction)
|
|
166
|
-
|
|
167
|
-
const address = getSenderAddress(tx) ??
|
|
168
|
-
(txType === TX_TYPE.signed ? getSenderAddress(tx.encodedTx.tx) : null)
|
|
169
|
-
const [account, { height }] = await Promise.all([
|
|
170
|
-
address && node.api.getAccountByPubkey(address).catch(() => ({
|
|
171
|
-
id: address,
|
|
172
|
-
balance: new BigNumber(0),
|
|
173
|
-
nonce: 0
|
|
174
|
-
})),
|
|
175
|
-
node.api.getCurrentKeyBlockHeight()
|
|
176
|
-
])
|
|
177
|
-
|
|
178
|
-
return (await Promise.all(
|
|
179
|
-
validators.map(v => v(tx, { txType, node, account, height, parentTxTypes })))
|
|
180
|
-
).flat()
|
|
181
|
-
}
|
|
@@ -1,119 +0,0 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* ISC License (ISC)
|
|
3
|
-
* Copyright (c) 2018 aeternity developers
|
|
4
|
-
*
|
|
5
|
-
* Permission to use, copy, modify, and/or distribute this software for any
|
|
6
|
-
* purpose with or without fee is hereby granted, provided that the above
|
|
7
|
-
* copyright notice and this permission notice appear in all copies.
|
|
8
|
-
*
|
|
9
|
-
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
|
|
10
|
-
* REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
|
|
11
|
-
* AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
|
|
12
|
-
* INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
|
|
13
|
-
* LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
|
14
|
-
* OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
|
15
|
-
* PERFORMANCE OF THIS SOFTWARE.
|
|
16
|
-
*/
|
|
17
|
-
|
|
18
|
-
/**
|
|
19
|
-
* Browser runtime connector module
|
|
20
|
-
*
|
|
21
|
-
* This is the complement to
|
|
22
|
-
* {@link module:@aeternity/aepp-sdk/es/utils/aepp-wallet-communication/connection}.
|
|
23
|
-
* @module @aeternity/aepp-sdk/es/utils/aepp-wallet-communication/connection/browser-runtime
|
|
24
|
-
* @export BrowserRuntimeConnection
|
|
25
|
-
* @example import { BrowserRuntimeConnection } from '@aeternity/aepp-sdk'
|
|
26
|
-
*/
|
|
27
|
-
import stampit from '@stamp/it'
|
|
28
|
-
|
|
29
|
-
import WalletConnection from '.'
|
|
30
|
-
import { getBrowserAPI } from '../helpers'
|
|
31
|
-
import {
|
|
32
|
-
RpcConnectionError,
|
|
33
|
-
AlreadyConnectedError,
|
|
34
|
-
NoWalletConnectedError
|
|
35
|
-
} from '../../errors'
|
|
36
|
-
|
|
37
|
-
/**
|
|
38
|
-
* Disconnect
|
|
39
|
-
* @function disconnect
|
|
40
|
-
* @instance
|
|
41
|
-
* @rtype () => void
|
|
42
|
-
* @return {void}
|
|
43
|
-
*/
|
|
44
|
-
function disconnect () {
|
|
45
|
-
try {
|
|
46
|
-
this.port.disconnect()
|
|
47
|
-
} catch (e) {
|
|
48
|
-
console.warning('From BrowserRuntimeConnection: ', e)
|
|
49
|
-
}
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
/**
|
|
53
|
-
* Connect
|
|
54
|
-
* @function connect
|
|
55
|
-
* @instance
|
|
56
|
-
* @rtype (onMessage: Function, onDisconnect: Function) => void
|
|
57
|
-
* @param {Function} onMessage - Message handler
|
|
58
|
-
* @param {Function} onDisconnect - trigger when runtime connection in closed
|
|
59
|
-
* @return {void}
|
|
60
|
-
*/
|
|
61
|
-
function connect (onMessage, onDisconnect) {
|
|
62
|
-
if (this.isConnected()) throw new AlreadyConnectedError('You already connected')
|
|
63
|
-
this.handler = (msg, source) => {
|
|
64
|
-
if (this.debug) console.log('Receive message: ', msg)
|
|
65
|
-
onMessage(msg, source)
|
|
66
|
-
}
|
|
67
|
-
this.port.onMessage.addListener(this.handler)
|
|
68
|
-
this.port.onDisconnect.addListener(() => {
|
|
69
|
-
typeof onDisconnect === 'function' && onDisconnect({}, this)
|
|
70
|
-
this.port.disconnect()
|
|
71
|
-
})
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
/**
|
|
75
|
-
* Send message
|
|
76
|
-
* @function sendMessage
|
|
77
|
-
* @instance
|
|
78
|
-
* @rtype (msg: Object) => void
|
|
79
|
-
* @param {Object} msg - Message
|
|
80
|
-
* @return {void}
|
|
81
|
-
*/
|
|
82
|
-
function sendMessage (msg) {
|
|
83
|
-
if (!this.port) throw new NoWalletConnectedError('You dont have connection. Please connect before')
|
|
84
|
-
if (this.debug) console.log('Send message: ', msg)
|
|
85
|
-
this.port.postMessage(msg)
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
/**
|
|
89
|
-
* Check if connected
|
|
90
|
-
* @function isConnected
|
|
91
|
-
* @instance
|
|
92
|
-
* @rtype () => Boolean
|
|
93
|
-
* @return {Boolean} Is connected
|
|
94
|
-
*/
|
|
95
|
-
function isConnected () {
|
|
96
|
-
return typeof this.port.onMessage.hasListeners === 'function' ? this.port.onMessage.hasListeners() : this.port.onMessage.hasListener(this.handler)
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
/**
|
|
100
|
-
* BrowserRuntimeConnection stamp
|
|
101
|
-
* Handle browser runtime communication
|
|
102
|
-
* @function
|
|
103
|
-
* @alias module:@aeternity/aepp-sdk/es/utils/aepp-wallet-communication/connection/browser-runtime
|
|
104
|
-
* @rtype Stamp
|
|
105
|
-
* @param {Object} params={} - Initializer object
|
|
106
|
-
* @param {Object} params.port - Runtime `port` object
|
|
107
|
-
* @param {Object} [params.connectionInfo={}] - Connection info object
|
|
108
|
-
* @param {Boolean} [params.debug=false] - Debug flag
|
|
109
|
-
* @return {Object}
|
|
110
|
-
*/
|
|
111
|
-
export default stampit({
|
|
112
|
-
init ({ connectionInfo = {}, port, debug = false }) {
|
|
113
|
-
if (!getBrowserAPI().runtime) throw new RpcConnectionError('Runtime is not accessible in your environment')
|
|
114
|
-
this.debug = debug
|
|
115
|
-
this.connectionInfo = connectionInfo
|
|
116
|
-
this.port = port || getBrowserAPI().runtime.connect(...[connectionInfo.id || undefined])
|
|
117
|
-
},
|
|
118
|
-
methods: { connect, sendMessage, disconnect, isConnected }
|
|
119
|
-
}, WalletConnection)
|
|
@@ -1,165 +0,0 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* ISC License (ISC)
|
|
3
|
-
* Copyright (c) 2018 aeternity developers
|
|
4
|
-
*
|
|
5
|
-
* Permission to use, copy, modify, and/or distribute this software for any
|
|
6
|
-
* purpose with or without fee is hereby granted, provided that the above
|
|
7
|
-
* copyright notice and this permission notice appear in all copies.
|
|
8
|
-
*
|
|
9
|
-
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
|
|
10
|
-
* REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
|
|
11
|
-
* AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
|
|
12
|
-
* INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
|
|
13
|
-
* LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
|
14
|
-
* OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
|
15
|
-
* PERFORMANCE OF THIS SOFTWARE.
|
|
16
|
-
*/
|
|
17
|
-
|
|
18
|
-
/**
|
|
19
|
-
* Browser window Post Message connector module
|
|
20
|
-
*
|
|
21
|
-
* This is the complement to
|
|
22
|
-
* {@link module:@aeternity/aepp-sdk/es/utils/aepp-wallet-communication/connection}.
|
|
23
|
-
* @module @aeternity/aepp-sdk/es/utils/aepp-wallet-communication/connection/browser-window-message
|
|
24
|
-
* @export BrowserWindowMessageConnection
|
|
25
|
-
* @example
|
|
26
|
-
* import BrowserWindowMessageConnection
|
|
27
|
-
* from '@aeternity/aepp-sdk/es/utils/aepp-wallet-communication/connection/browser-window-message'
|
|
28
|
-
*/
|
|
29
|
-
import stampit from '@stamp/it'
|
|
30
|
-
import WalletConnection from '.'
|
|
31
|
-
import { v4 as uuid } from '@aeternity/uuid'
|
|
32
|
-
import { MESSAGE_DIRECTION } from '../schema'
|
|
33
|
-
import { getBrowserAPI, isInIframe } from '../helpers'
|
|
34
|
-
import {
|
|
35
|
-
AlreadyConnectedError,
|
|
36
|
-
NoWalletConnectedError,
|
|
37
|
-
MessageDirectionError
|
|
38
|
-
} from '../../errors'
|
|
39
|
-
|
|
40
|
-
/**
|
|
41
|
-
* Check if connected
|
|
42
|
-
* @function isConnected
|
|
43
|
-
* @instance
|
|
44
|
-
* @rtype () => Boolean
|
|
45
|
-
* @return {Boolean} Is connected
|
|
46
|
-
*/
|
|
47
|
-
function isConnected () {
|
|
48
|
-
return this.listener
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
/**
|
|
52
|
-
* Connect
|
|
53
|
-
* @function connect
|
|
54
|
-
* @instance
|
|
55
|
-
* @rtype (onMessage: Function) => void
|
|
56
|
-
* @param {Function} onMessage - Message handler
|
|
57
|
-
* @return {void}
|
|
58
|
-
*/
|
|
59
|
-
function connect (onMessage) {
|
|
60
|
-
const origin = this.origin
|
|
61
|
-
const receiveDirection = this.receiveDirection
|
|
62
|
-
const debug = this.debug
|
|
63
|
-
const forceOrigin = this.forceOrigin
|
|
64
|
-
if (this.listener) throw new AlreadyConnectedError('You already connected')
|
|
65
|
-
|
|
66
|
-
this.listener = (msg, source) => {
|
|
67
|
-
if (!msg || typeof msg.data !== 'object') return
|
|
68
|
-
if (!forceOrigin && origin && origin !== msg.origin) return
|
|
69
|
-
if (debug) console.log('Receive message: ', msg)
|
|
70
|
-
if (msg.data.type) {
|
|
71
|
-
if (msg.data.type !== receiveDirection) return
|
|
72
|
-
onMessage(msg.data.data, msg.origin, msg.source)
|
|
73
|
-
} else {
|
|
74
|
-
onMessage(msg.data, msg.origin, msg.source)
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
this.subscribeFn(this.listener)
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
/**
|
|
81
|
-
* Disconnect
|
|
82
|
-
* @function disconnect
|
|
83
|
-
* @instance
|
|
84
|
-
* @rtype () => void
|
|
85
|
-
* @return {void}
|
|
86
|
-
*/
|
|
87
|
-
function disconnect () {
|
|
88
|
-
if (!this.listener) throw new NoWalletConnectedError('You dont have connection. Please connect before')
|
|
89
|
-
this.unsubscribeFn(this.listener)
|
|
90
|
-
this.listener = null
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
/**
|
|
94
|
-
* Send message
|
|
95
|
-
* @function sendMessage
|
|
96
|
-
* @instance
|
|
97
|
-
* @rtype (msg: Object) => void
|
|
98
|
-
* @param {Object} msg - Message
|
|
99
|
-
* @return {void}
|
|
100
|
-
*/
|
|
101
|
-
function sendMessage (msg) {
|
|
102
|
-
const message = this.sendDirection ? { type: this.sendDirection, data: msg } : msg
|
|
103
|
-
if (this.debug) console.log('Send message: ', message)
|
|
104
|
-
this.postFn(message)
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
const getTarget = () => {
|
|
108
|
-
const isExtensionContext = typeof getBrowserAPI(true).extension === 'object'
|
|
109
|
-
const isWeb = window && window.location && window.location.protocol.startsWith('http')
|
|
110
|
-
const isContentScript = isExtensionContext && isWeb
|
|
111
|
-
if (isContentScript) return window
|
|
112
|
-
// When we is the main page we need to decide the target by our self
|
|
113
|
-
// Probably can be implemented some algo for checking DOM for Iframes and somehow decide which
|
|
114
|
-
// Iframe to talk
|
|
115
|
-
return isInIframe() ? window.parent : undefined
|
|
116
|
-
}
|
|
117
|
-
|
|
118
|
-
/**
|
|
119
|
-
* BrowserWindowMessageConnection
|
|
120
|
-
* @function
|
|
121
|
-
* @alias module:@aeternity/aepp-sdk/es/utils/aepp-wallet-communication\
|
|
122
|
-
* /connection/browser-window-message
|
|
123
|
-
* @rtype Stamp
|
|
124
|
-
* @param {Object} [params={}] - Initializer object
|
|
125
|
-
* @param {Object} [params.target=window.parent] - Target window for message
|
|
126
|
-
* @param {Object} [params.self=window] - Host window for message
|
|
127
|
-
* @param {Object} [params.origin] - Origin of receiver
|
|
128
|
-
* @param {String} [params.sendDirection] Wrapping messages into additional struct
|
|
129
|
-
* ({ type: 'to_aepp' || 'to_waellet', data })
|
|
130
|
-
* Used for handling messages between content script and page
|
|
131
|
-
* @param {String} [params.receiveDirection='to_aepp'] Unwrapping messages from additional struct
|
|
132
|
-
* ({ type: 'to_aepp' || 'to_waellet', data })
|
|
133
|
-
* Used for handling messages between content script and page
|
|
134
|
-
* @param {Object} [params.connectionInfo={}] - Connection info object
|
|
135
|
-
* @param {Boolean} [params.debug=false] - Debug flag
|
|
136
|
-
* @return {Object}
|
|
137
|
-
*/
|
|
138
|
-
export default stampit({
|
|
139
|
-
init ({
|
|
140
|
-
connectionInfo = {},
|
|
141
|
-
target = getTarget(),
|
|
142
|
-
self = window,
|
|
143
|
-
origin,
|
|
144
|
-
sendDirection,
|
|
145
|
-
receiveDirection = MESSAGE_DIRECTION.to_aepp,
|
|
146
|
-
debug = false,
|
|
147
|
-
forceOrigin = false
|
|
148
|
-
} = {}) {
|
|
149
|
-
if (sendDirection && !Object.keys(MESSAGE_DIRECTION).includes(sendDirection)) throw new MessageDirectionError(`sendDirection must be one of [${Object.keys(MESSAGE_DIRECTION)}]`)
|
|
150
|
-
if (!Object.keys(MESSAGE_DIRECTION).includes(receiveDirection)) throw new MessageDirectionError(`receiveDirection must be one of [${Object.keys(MESSAGE_DIRECTION)}]`)
|
|
151
|
-
this.connectionInfo = { id: uuid(), ...connectionInfo }
|
|
152
|
-
|
|
153
|
-
const selfP = self
|
|
154
|
-
const targetP = target
|
|
155
|
-
this.origin = origin
|
|
156
|
-
this.debug = debug
|
|
157
|
-
this.forceOrigin = forceOrigin
|
|
158
|
-
this.sendDirection = sendDirection
|
|
159
|
-
this.receiveDirection = receiveDirection
|
|
160
|
-
this.subscribeFn = (listener) => selfP.addEventListener('message', listener, false)
|
|
161
|
-
this.unsubscribeFn = (listener) => selfP.removeEventListener('message', listener, false)
|
|
162
|
-
this.postFn = (msg) => targetP.postMessage(msg, this.origin || '*')
|
|
163
|
-
},
|
|
164
|
-
methods: { connect, sendMessage, disconnect, isConnected }
|
|
165
|
-
}, WalletConnection)
|
|
@@ -1,85 +0,0 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* ISC License (ISC)
|
|
3
|
-
* Copyright (c) 2018 aeternity developers
|
|
4
|
-
*
|
|
5
|
-
* Permission to use, copy, modify, and/or distribute this software for any
|
|
6
|
-
* purpose with or without fee is hereby granted, provided that the above
|
|
7
|
-
* copyright notice and this permission notice appear in all copies.
|
|
8
|
-
*
|
|
9
|
-
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
|
|
10
|
-
* REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
|
|
11
|
-
* AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
|
|
12
|
-
* INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
|
|
13
|
-
* LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
|
14
|
-
* OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
|
15
|
-
* PERFORMANCE OF THIS SOFTWARE.
|
|
16
|
-
*/
|
|
17
|
-
|
|
18
|
-
/**
|
|
19
|
-
* Wallet Connection base module
|
|
20
|
-
* @module @aeternity/aepp-sdk/es/utils/aepp-wallet-communication/connection
|
|
21
|
-
* @export WalletConnection
|
|
22
|
-
* @example
|
|
23
|
-
* import WalletConnection from '@aeternity/aepp-sdk/es/utils/aepp-wallet-communication/connection'
|
|
24
|
-
*/
|
|
25
|
-
|
|
26
|
-
import { required } from '@stamp/required'
|
|
27
|
-
|
|
28
|
-
/**
|
|
29
|
-
* Basic Wallet Connection
|
|
30
|
-
*
|
|
31
|
-
* This stamp include interface for wallet connection functionality.
|
|
32
|
-
* Attempting to create instances from the Stamp without overwriting all
|
|
33
|
-
* abstract methods using composition will result in an exception.
|
|
34
|
-
* @function
|
|
35
|
-
* @alias module:@aeternity/aepp-sdk/es/utils/aepp-wallet-communication/connection
|
|
36
|
-
* @rtype Stamp
|
|
37
|
-
* @param {Object} [options={}] - Initializer object
|
|
38
|
-
* @return {Object} WalletConnection instance
|
|
39
|
-
*/
|
|
40
|
-
export default required({
|
|
41
|
-
methods: {
|
|
42
|
-
connect: required,
|
|
43
|
-
disconnect: required,
|
|
44
|
-
sendMessage: required,
|
|
45
|
-
isConnected: required
|
|
46
|
-
}
|
|
47
|
-
})
|
|
48
|
-
|
|
49
|
-
/**
|
|
50
|
-
* Connect
|
|
51
|
-
* @function connect
|
|
52
|
-
* @instance
|
|
53
|
-
* @abstract
|
|
54
|
-
* @rtype (onMessage: Function) => void
|
|
55
|
-
* @param {Function} onMessage - Message handler
|
|
56
|
-
* @return {void}
|
|
57
|
-
*/
|
|
58
|
-
|
|
59
|
-
/**
|
|
60
|
-
* Disconnect
|
|
61
|
-
* @function disconnect
|
|
62
|
-
* @instance
|
|
63
|
-
* @abstract
|
|
64
|
-
* @rtype () => void
|
|
65
|
-
* @return {void}
|
|
66
|
-
*/
|
|
67
|
-
|
|
68
|
-
/**
|
|
69
|
-
* Send message
|
|
70
|
-
* @function sendMessage
|
|
71
|
-
* @instance
|
|
72
|
-
* @abstract
|
|
73
|
-
* @rtype (msg: Object) => void
|
|
74
|
-
* @param {Object} msg - Message
|
|
75
|
-
* @return {void}
|
|
76
|
-
*/
|
|
77
|
-
|
|
78
|
-
/**
|
|
79
|
-
* Check if connected
|
|
80
|
-
* @function isConnected
|
|
81
|
-
* @instance
|
|
82
|
-
* @abstract
|
|
83
|
-
* @rtype () => Boolean
|
|
84
|
-
* @return {Boolean} Is connected
|
|
85
|
-
*/
|
|
@@ -1,86 +0,0 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* ISC License (ISC)
|
|
3
|
-
* Copyright (c) 2018 aeternity developers
|
|
4
|
-
*
|
|
5
|
-
* Permission to use, copy, modify, and/or distribute this software for any
|
|
6
|
-
* purpose with or without fee is hereby granted, provided that the above
|
|
7
|
-
* copyright notice and this permission notice appear in all copies.
|
|
8
|
-
*
|
|
9
|
-
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
|
|
10
|
-
* REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
|
|
11
|
-
* AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
|
|
12
|
-
* INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
|
|
13
|
-
* LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
|
14
|
-
* OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
|
15
|
-
* PERFORMANCE OF THIS SOFTWARE.
|
|
16
|
-
*/
|
|
17
|
-
|
|
18
|
-
/**
|
|
19
|
-
* Content Script Bridge module
|
|
20
|
-
*
|
|
21
|
-
* @module @aeternity/aepp-sdk/es/utils/aepp-wallet-communication/content-script-bridge
|
|
22
|
-
* @export ContentScriptBridge
|
|
23
|
-
* @example
|
|
24
|
-
* import ContentScriptBridge
|
|
25
|
-
* from '@aeternity/aepp-sdk/es/utils/wallet-communication/content-script-bridge
|
|
26
|
-
*/
|
|
27
|
-
import stampit from '@stamp/it'
|
|
28
|
-
import { UnsupportedPlatformError, MissingParamError } from '../errors'
|
|
29
|
-
|
|
30
|
-
/**
|
|
31
|
-
* Start message proxy
|
|
32
|
-
* @function run
|
|
33
|
-
* @instance
|
|
34
|
-
* @return {void}
|
|
35
|
-
*/
|
|
36
|
-
function run () {
|
|
37
|
-
const allowCrossOrigin = this.allowCrossOrigin
|
|
38
|
-
// Connect to extension using runtime
|
|
39
|
-
this.extConnection.connect((msg) => {
|
|
40
|
-
this.pageConnection.sendMessage(msg)
|
|
41
|
-
})
|
|
42
|
-
// Connect to page using window.postMessage
|
|
43
|
-
this.pageConnection.connect((msg, origin, source) => {
|
|
44
|
-
if (!allowCrossOrigin && source !== window) return
|
|
45
|
-
this.extConnection.sendMessage(msg)
|
|
46
|
-
})
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
/**
|
|
50
|
-
* Stop message proxy
|
|
51
|
-
* @function stop
|
|
52
|
-
* @instance
|
|
53
|
-
* @return {void}
|
|
54
|
-
*/
|
|
55
|
-
function stop () {
|
|
56
|
-
this.extConnection.disconnect()
|
|
57
|
-
this.pageConnection.disconnect()
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
/**
|
|
61
|
-
* ContentScriptBridge stamp
|
|
62
|
-
* Provide functionality to easly redirect messages from page to extension and from extension to
|
|
63
|
-
* page through content script
|
|
64
|
-
* Using Runtime(Extension) and WindowPostMessage(Web-Page) connections
|
|
65
|
-
* @function
|
|
66
|
-
* @alias module:@aeternity/aepp-sdk/es/utils/aepp-wallet-communication/content-script-bridge
|
|
67
|
-
* @rtype Stamp
|
|
68
|
-
* @param {Object} params - Initializer object
|
|
69
|
-
* @param {Object} params.pageConnection - Page connection object
|
|
70
|
-
* (@link module:@aeternity/aepp-sdk/es/utils/aepp-wallet-communication/connection/
|
|
71
|
-
* browser-window-message)
|
|
72
|
-
* @param {Object} params.extConnection - Extension connection object
|
|
73
|
-
* (@link module:@aeternity/aepp-sdk/es/utils/aepp-wallet-communication/connection/browser-runtime)
|
|
74
|
-
* @return {Object}
|
|
75
|
-
*/
|
|
76
|
-
export default stampit({
|
|
77
|
-
init ({ pageConnection, extConnection, allowCrossOrigin = false }) {
|
|
78
|
-
if (!window) throw new UnsupportedPlatformError('Window object not found, you can run bridge only in browser')
|
|
79
|
-
if (!pageConnection) throw new MissingParamError('pageConnection required')
|
|
80
|
-
if (!extConnection) throw new MissingParamError('extConnection required')
|
|
81
|
-
this.allowCrossOrigin = allowCrossOrigin
|
|
82
|
-
this.pageConnection = pageConnection
|
|
83
|
-
this.extConnection = extConnection
|
|
84
|
-
},
|
|
85
|
-
methods: { run, stop }
|
|
86
|
-
})
|
|
@@ -1,60 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Browser helper functions
|
|
3
|
-
*/
|
|
4
|
-
import { NoBrowserFoundError } from '../errors'
|
|
5
|
-
|
|
6
|
-
export const getBrowserAPI = (force = false) => {
|
|
7
|
-
const { chrome, browser } = window
|
|
8
|
-
// Chrome, Opera support
|
|
9
|
-
if (typeof chrome !== 'undefined' && chrome === Object(chrome)) return chrome
|
|
10
|
-
// Firefox support
|
|
11
|
-
if (typeof browser !== 'undefined' && browser === Object(browser)) return browser
|
|
12
|
-
if (!force) throw new NoBrowserFoundError()
|
|
13
|
-
return {}
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
export const isInIframe = () => window !== window.parent
|
|
17
|
-
|
|
18
|
-
/**
|
|
19
|
-
* RPC helper functions
|
|
20
|
-
*/
|
|
21
|
-
export const sendMessage = (connection) => {
|
|
22
|
-
let messageId = 0
|
|
23
|
-
|
|
24
|
-
return ({ id, method, params, result, error }, isNotificationOrResponse = false) => {
|
|
25
|
-
// Increment id for each request
|
|
26
|
-
isNotificationOrResponse || (messageId += 1)
|
|
27
|
-
id = isNotificationOrResponse ? (id || null) : messageId
|
|
28
|
-
const msgData = params
|
|
29
|
-
? { params }
|
|
30
|
-
: result
|
|
31
|
-
? { result }
|
|
32
|
-
: { error }
|
|
33
|
-
connection.sendMessage({
|
|
34
|
-
jsonrpc: '2.0',
|
|
35
|
-
...id ? { id } : {},
|
|
36
|
-
method,
|
|
37
|
-
...msgData
|
|
38
|
-
})
|
|
39
|
-
return id
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
export const getHandler = (schema, msg, { debug = false } = {}) => {
|
|
44
|
-
const handler = schema[msg.method]
|
|
45
|
-
if (!handler || typeof handler !== 'function') {
|
|
46
|
-
debug && console.log(`Unknown message method ${msg.method}`)
|
|
47
|
-
return () => async () => true
|
|
48
|
-
}
|
|
49
|
-
return handler
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
export const message = (method, params = {}) => ({ method, params })
|
|
53
|
-
|
|
54
|
-
export const responseMessage = (id, method, { error, result } = {}) =>
|
|
55
|
-
({ id, method, ...(error ? { error } : { result }) })
|
|
56
|
-
|
|
57
|
-
export const sendResponseMessage = (client) => (id, method, data) =>
|
|
58
|
-
client.sendMessage(responseMessage(id, method, data), true)
|
|
59
|
-
|
|
60
|
-
export const isValidAccounts = (accounts) => (['', 'connected', 'current'].filter(k => typeof (k ? accounts[k] : accounts) === 'object')).length === 3
|