@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
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
import { RpcError, RpcInternalError, RpcMethodNotFoundError } from '../schema'
|
|
2
|
+
import BrowserConnection from '../connection/Browser'
|
|
3
|
+
import { InvalidRpcMessageError, MissingCallbackError } from '../../utils/errors'
|
|
4
|
+
|
|
5
|
+
interface JsonRpcRequest {
|
|
6
|
+
jsonrpc: '2.0'
|
|
7
|
+
id: number
|
|
8
|
+
method: string
|
|
9
|
+
params?: any
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
interface JsonRpcResponse {
|
|
13
|
+
jsonrpc: '2.0'
|
|
14
|
+
id: number
|
|
15
|
+
method: string
|
|
16
|
+
result?: any
|
|
17
|
+
error?: {
|
|
18
|
+
code: number
|
|
19
|
+
message: string
|
|
20
|
+
data?: any
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
type RpcApiHandler = (p?: any) => any | undefined
|
|
25
|
+
type RpcApi<Api> = { [k in keyof Api]: RpcApiHandler }
|
|
26
|
+
type WithOrigin<Api extends RpcApi<Api>> = {
|
|
27
|
+
[k in keyof Api]: (p: Parameters<Api[k]>[0], origin: string) => ReturnType<Api[k]>
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* Contain functionality for using RPC conection
|
|
32
|
+
* @param connection - Connection object
|
|
33
|
+
* @param onDisconnect - Disconnect callback
|
|
34
|
+
* @param methods - Object containing handlers for each request by name
|
|
35
|
+
*/
|
|
36
|
+
export default class RpcClient <
|
|
37
|
+
RemoteApi extends RpcApi<RemoteApi>, LocalApi extends RpcApi<LocalApi>
|
|
38
|
+
> {
|
|
39
|
+
connection: BrowserConnection
|
|
40
|
+
#callbacks = new Map<number, { resolve: (v: any) => void, reject: (e: Error) => void }>()
|
|
41
|
+
#messageId = 0
|
|
42
|
+
#methods: WithOrigin<LocalApi>
|
|
43
|
+
|
|
44
|
+
constructor (
|
|
45
|
+
connection: BrowserConnection,
|
|
46
|
+
onDisconnect: () => void,
|
|
47
|
+
methods: WithOrigin<LocalApi>
|
|
48
|
+
) {
|
|
49
|
+
this.connection = connection
|
|
50
|
+
this.#methods = methods
|
|
51
|
+
connection.connect(this.#handleMessage.bind(this), onDisconnect)
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
async #handleMessage (msg: JsonRpcRequest | JsonRpcResponse, origin: string): Promise<void> {
|
|
55
|
+
if (msg?.jsonrpc !== '2.0') throw new InvalidRpcMessageError(JSON.stringify(msg))
|
|
56
|
+
if ('result' in msg || 'error' in msg) {
|
|
57
|
+
this.#processResponse(msg)
|
|
58
|
+
return
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
const request = msg as JsonRpcRequest
|
|
62
|
+
let result, error
|
|
63
|
+
try {
|
|
64
|
+
if (!(request.method in this.#methods)) throw new RpcMethodNotFoundError()
|
|
65
|
+
const methodName = request.method as keyof LocalApi
|
|
66
|
+
result = await this.#methods[methodName](request.params, origin)
|
|
67
|
+
} catch (e) {
|
|
68
|
+
error = e instanceof RpcError ? e : new RpcInternalError()
|
|
69
|
+
}
|
|
70
|
+
if (request.id != null) {
|
|
71
|
+
this.#sendResponse(request.id, request.method as keyof LocalApi, result, error)
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
#sendRequest (
|
|
76
|
+
id: number | undefined,
|
|
77
|
+
method: keyof RemoteApi | keyof LocalApi,
|
|
78
|
+
params?: any
|
|
79
|
+
): void {
|
|
80
|
+
this.connection.sendMessage({
|
|
81
|
+
jsonrpc: '2.0',
|
|
82
|
+
...id != null ? { id } : {},
|
|
83
|
+
method,
|
|
84
|
+
...params != null ? { params } : {}
|
|
85
|
+
})
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
#sendResponse (
|
|
89
|
+
id: number,
|
|
90
|
+
method: keyof RemoteApi | keyof LocalApi, // TODO: remove as far it is not required in JSON RPC
|
|
91
|
+
result?: any,
|
|
92
|
+
error?: any
|
|
93
|
+
): void {
|
|
94
|
+
this.connection.sendMessage({
|
|
95
|
+
jsonrpc: '2.0',
|
|
96
|
+
id,
|
|
97
|
+
method,
|
|
98
|
+
...error != null ? { error } : { result }
|
|
99
|
+
})
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
/**
|
|
103
|
+
* Make a request
|
|
104
|
+
* @param name - Method name
|
|
105
|
+
* @param params - Method params
|
|
106
|
+
* @returns Promise which will be resolved after receiving response message
|
|
107
|
+
*/
|
|
108
|
+
async request<Name extends keyof RemoteApi> (
|
|
109
|
+
name: Name, params: Parameters<RemoteApi[Name]>[0]
|
|
110
|
+
): Promise<ReturnType<RemoteApi[Name]>> {
|
|
111
|
+
this.#sendRequest(++this.#messageId, name, params)
|
|
112
|
+
return await new Promise((resolve, reject) => {
|
|
113
|
+
this.#callbacks.set(this.#messageId, { resolve, reject })
|
|
114
|
+
})
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
/**
|
|
118
|
+
* Make a notification
|
|
119
|
+
* @param name - Method name
|
|
120
|
+
* @param params - Method params
|
|
121
|
+
*/
|
|
122
|
+
notify<Name extends keyof RemoteApi> (name: Name, params: Parameters<RemoteApi[Name]>[0]): void {
|
|
123
|
+
this.#sendRequest(undefined, name, params)
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
/**
|
|
127
|
+
* Process response message
|
|
128
|
+
* @param msg - Message object
|
|
129
|
+
*/
|
|
130
|
+
#processResponse ({ id, error, result }: { id: number, error?: any, result?: any }): void {
|
|
131
|
+
const callbacks = this.#callbacks.get(id)
|
|
132
|
+
if (callbacks == null) throw new MissingCallbackError(id)
|
|
133
|
+
if (error != null) callbacks.reject(RpcError.deserialize(error))
|
|
134
|
+
else callbacks.resolve(result)
|
|
135
|
+
this.#callbacks.delete(id)
|
|
136
|
+
}
|
|
137
|
+
}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { send } from '../../spend'
|
|
2
|
+
import { EncodedData } from '../../utils/encoder'
|
|
3
|
+
import { METHODS, SUBSCRIPTION_TYPES, WALLET_TYPE } from '../schema'
|
|
4
|
+
|
|
5
|
+
export interface WalletInfo {
|
|
6
|
+
id: string
|
|
7
|
+
name: string
|
|
8
|
+
networkId: string
|
|
9
|
+
origin: string
|
|
10
|
+
type: WALLET_TYPE
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
export interface Accounts {
|
|
14
|
+
connected: { [pub: EncodedData<'ak'>]: {} }
|
|
15
|
+
current: { [pub: EncodedData<'ak'>]: {} }
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
export interface Node {
|
|
19
|
+
name: string
|
|
20
|
+
url: string
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
export interface Network {
|
|
24
|
+
networkId: string
|
|
25
|
+
node?: Node
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
type Icons = Array<{ src: string, sizes?: string, type?: string, purpose?: string }>
|
|
29
|
+
|
|
30
|
+
export const RPC_VERSION = 1
|
|
31
|
+
|
|
32
|
+
export interface WalletApi {
|
|
33
|
+
[METHODS.connect]: (
|
|
34
|
+
p: { name: string, icons?: Icons, version: typeof RPC_VERSION, connectNode: boolean }
|
|
35
|
+
) => Promise<WalletInfo & { node?: Node }>
|
|
36
|
+
|
|
37
|
+
[METHODS.closeConnection]: (p: any) => void
|
|
38
|
+
|
|
39
|
+
[METHODS.subscribeAddress]: (
|
|
40
|
+
p: { type: SUBSCRIPTION_TYPES, value: 'connected' | 'current' }
|
|
41
|
+
) => Promise<{ subscription: Array<'connected' | 'current'>, address: Accounts }>
|
|
42
|
+
|
|
43
|
+
[METHODS.address]: () => Promise<Array<EncodedData<'ak'>>>
|
|
44
|
+
|
|
45
|
+
[METHODS.sign]: ((
|
|
46
|
+
p: { tx: EncodedData<'tx'>, onAccount: EncodedData<'ak'>, returnSigned: boolean }
|
|
47
|
+
) => Promise<{
|
|
48
|
+
/**
|
|
49
|
+
* @deprecated this is not a hash at all, will be removed later at the same time
|
|
50
|
+
* as dropping ability to broadcast transaction by wallet
|
|
51
|
+
*/
|
|
52
|
+
transactionHash?: Awaited<ReturnType<typeof send>>
|
|
53
|
+
signedTransaction?: EncodedData<'tx'>
|
|
54
|
+
}>)
|
|
55
|
+
|
|
56
|
+
[METHODS.signMessage]: (
|
|
57
|
+
p: { message: string, onAccount: EncodedData<'ak'> }
|
|
58
|
+
) => Promise<{ signature: string }>
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
export interface AeppApi {
|
|
62
|
+
[METHODS.updateAddress]: (a: Accounts) => void
|
|
63
|
+
[METHODS.updateNetwork]: (a: Network) => void
|
|
64
|
+
[METHODS.readyToConnect]: (w: WalletInfo) => void
|
|
65
|
+
[METHODS.closeConnection]: (p: any) => void
|
|
66
|
+
}
|
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
import { EncodedData } from '../utils/encoder'
|
|
2
|
+
import { BaseError, InternalError } from '../utils/errors'
|
|
3
|
+
|
|
4
|
+
export const enum MESSAGE_DIRECTION {
|
|
5
|
+
to_waellet = 'to_waellet',
|
|
6
|
+
to_aepp = 'to_aepp'
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
export const enum WALLET_TYPE {
|
|
10
|
+
window = 'window',
|
|
11
|
+
extension = 'extension'
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
export const enum SUBSCRIPTION_TYPES {
|
|
15
|
+
subscribe = 'subscribe',
|
|
16
|
+
unsubscribe = 'unsubscribe'
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
export const enum METHODS {
|
|
20
|
+
readyToConnect = 'connection.announcePresence',
|
|
21
|
+
updateAddress = 'address.update',
|
|
22
|
+
address = 'address.get',
|
|
23
|
+
connect = 'connection.open',
|
|
24
|
+
sign = 'transaction.sign',
|
|
25
|
+
signMessage = 'message.sign',
|
|
26
|
+
subscribeAddress = 'address.subscribe',
|
|
27
|
+
updateNetwork = 'networkId.update',
|
|
28
|
+
closeConnection = 'connection.close'
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
export const enum RPC_STATUS {
|
|
32
|
+
CONNECTED = 'CONNECTED',
|
|
33
|
+
DISCONNECTED = 'DISCONNECTED',
|
|
34
|
+
WAITING_FOR_CONNECTION_REQUEST = 'WAITING_FOR_CONNECTION_REQUEST'
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
interface RpcErrorAsJson {
|
|
38
|
+
code: number
|
|
39
|
+
message: string
|
|
40
|
+
data?: any
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* @category exception
|
|
45
|
+
*/
|
|
46
|
+
export abstract class RpcError extends BaseError {
|
|
47
|
+
static code: number
|
|
48
|
+
code: number
|
|
49
|
+
data?: any
|
|
50
|
+
|
|
51
|
+
toJSON (): RpcErrorAsJson {
|
|
52
|
+
return {
|
|
53
|
+
code: this.code,
|
|
54
|
+
message: this.message,
|
|
55
|
+
data: this.data
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
static deserialize (json: RpcErrorAsJson): RpcError {
|
|
60
|
+
const RpcErr = [
|
|
61
|
+
RpcInvalidTransactionError, RpcBroadcastError, RpcRejectedByUserError,
|
|
62
|
+
RpcUnsupportedProtocolError, RpcConnectionDenyError, RpcNotAuthorizeError,
|
|
63
|
+
RpcPermissionDenyError, RpcInternalError
|
|
64
|
+
].find(cl => cl.code === json.code)
|
|
65
|
+
if (RpcErr == null) throw new InternalError(`Can't find RpcError with code: ${json.code}`)
|
|
66
|
+
return new RpcErr(json.data)
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
/**
|
|
71
|
+
* @category exception
|
|
72
|
+
*/
|
|
73
|
+
export class RpcInvalidTransactionError extends RpcError {
|
|
74
|
+
static code = 2
|
|
75
|
+
code = 2
|
|
76
|
+
constructor (data?: any) {
|
|
77
|
+
super('Invalid transaction')
|
|
78
|
+
this.data = data
|
|
79
|
+
this.name = 'RpcInvalidTransactionError'
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
/**
|
|
84
|
+
* @category exception
|
|
85
|
+
*/
|
|
86
|
+
export class RpcBroadcastError extends RpcError {
|
|
87
|
+
static code = 3
|
|
88
|
+
code = 3
|
|
89
|
+
constructor (data?: any) {
|
|
90
|
+
super('Broadcast failed')
|
|
91
|
+
this.data = data
|
|
92
|
+
this.name = 'RpcBroadcastError'
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
/**
|
|
97
|
+
* @category exception
|
|
98
|
+
*/
|
|
99
|
+
export class RpcRejectedByUserError extends RpcError {
|
|
100
|
+
static code = 4
|
|
101
|
+
code = 4
|
|
102
|
+
constructor (data?: any) {
|
|
103
|
+
super('Operation rejected by user')
|
|
104
|
+
this.data = data
|
|
105
|
+
this.name = 'RpcRejectedByUserError'
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
/**
|
|
110
|
+
* @category exception
|
|
111
|
+
*/
|
|
112
|
+
export class RpcUnsupportedProtocolError extends RpcError {
|
|
113
|
+
static code = 5
|
|
114
|
+
code = 5
|
|
115
|
+
constructor () {
|
|
116
|
+
super('Unsupported Protocol Version')
|
|
117
|
+
this.name = 'RpcUnsupportedProtocolError'
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
/**
|
|
122
|
+
* @category exception
|
|
123
|
+
*/
|
|
124
|
+
export class RpcConnectionDenyError extends RpcError {
|
|
125
|
+
static code = 9
|
|
126
|
+
code = 9
|
|
127
|
+
constructor (data?: any) {
|
|
128
|
+
super('Wallet deny your connection request')
|
|
129
|
+
this.data = data
|
|
130
|
+
this.name = 'RpcConnectionDenyError'
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
/**
|
|
135
|
+
* @category exception
|
|
136
|
+
*/
|
|
137
|
+
export class RpcNotAuthorizeError extends RpcError {
|
|
138
|
+
static code = 10
|
|
139
|
+
code = 10
|
|
140
|
+
constructor () {
|
|
141
|
+
super('You are not connected to the wallet')
|
|
142
|
+
this.name = 'RpcNotAuthorizeError'
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
/**
|
|
147
|
+
* @category exception
|
|
148
|
+
*/
|
|
149
|
+
export class RpcPermissionDenyError extends RpcError {
|
|
150
|
+
static code = 11
|
|
151
|
+
code = 11
|
|
152
|
+
constructor (address: EncodedData<'ak'>) {
|
|
153
|
+
super(`You are not subscribed for account ${address}`)
|
|
154
|
+
this.data = address
|
|
155
|
+
this.name = 'RpcPermissionDenyError'
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
/**
|
|
160
|
+
* @category exception
|
|
161
|
+
*/
|
|
162
|
+
export class RpcInternalError extends RpcError {
|
|
163
|
+
static code = 12
|
|
164
|
+
code = 12
|
|
165
|
+
constructor () {
|
|
166
|
+
super('The peer failed to execute your request due to unknown error')
|
|
167
|
+
this.name = 'RpcInternalError'
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
/**
|
|
172
|
+
* @category exception
|
|
173
|
+
*/
|
|
174
|
+
export class RpcMethodNotFoundError extends RpcError {
|
|
175
|
+
static code = -32601
|
|
176
|
+
code = -32601
|
|
177
|
+
constructor () {
|
|
178
|
+
super('Method not found')
|
|
179
|
+
this.name = 'RpcMethodNotFoundError'
|
|
180
|
+
}
|
|
181
|
+
}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* ISC License (ISC)
|
|
3
|
+
* Copyright (c) 2022 aeternity developers
|
|
4
|
+
*
|
|
5
|
+
* Permission to use, copy, modify, and/or distribute this software for any
|
|
6
|
+
* purpose with or without fee is hereby granted, provided that the above
|
|
7
|
+
* copyright notice and this permission notice appear in all copies.
|
|
8
|
+
*
|
|
9
|
+
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
|
|
10
|
+
* REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
|
|
11
|
+
* AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
|
|
12
|
+
* INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
|
|
13
|
+
* LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
|
14
|
+
* OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
|
15
|
+
* PERFORMANCE OF THIS SOFTWARE.
|
|
16
|
+
*/
|
|
17
|
+
|
|
18
|
+
import BrowserConnection from './connection/Browser'
|
|
19
|
+
import BrowserWindowMessageConnection from './connection/BrowserWindowMessage'
|
|
20
|
+
import { MESSAGE_DIRECTION, METHODS } from './schema'
|
|
21
|
+
import { UnsupportedPlatformError } from '../utils/errors'
|
|
22
|
+
|
|
23
|
+
interface Wallet {
|
|
24
|
+
info: {
|
|
25
|
+
id: string
|
|
26
|
+
type: string
|
|
27
|
+
origin: string
|
|
28
|
+
}
|
|
29
|
+
getConnection: () => BrowserWindowMessageConnection
|
|
30
|
+
}
|
|
31
|
+
interface Wallets { [key: string]: Wallet }
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* A function to detect available wallets
|
|
35
|
+
* @param connection - connection to use to detect wallets
|
|
36
|
+
* @param onDetected - call-back function which trigger on new wallet
|
|
37
|
+
* @returns a function to stop scanning
|
|
38
|
+
*/
|
|
39
|
+
export default (
|
|
40
|
+
connection: BrowserConnection = new BrowserWindowMessageConnection(),
|
|
41
|
+
onDetected: ({ wallets, newWallet }: { wallets: Wallets, newWallet?: Wallet }) => void
|
|
42
|
+
): () => void => {
|
|
43
|
+
if (window == null) throw new UnsupportedPlatformError('Window object not found, you can run wallet detector only in browser')
|
|
44
|
+
const wallets: Wallets = {}
|
|
45
|
+
|
|
46
|
+
connection.connect((
|
|
47
|
+
{ method, params }: { method: string, params: Wallet['info'] },
|
|
48
|
+
origin: string,
|
|
49
|
+
source: Window
|
|
50
|
+
) => {
|
|
51
|
+
if (method !== METHODS.readyToConnect || wallets[params.id] != null) return
|
|
52
|
+
|
|
53
|
+
const wallet = {
|
|
54
|
+
info: params,
|
|
55
|
+
getConnection () {
|
|
56
|
+
const isExtension = params.type === 'extension'
|
|
57
|
+
return new BrowserWindowMessageConnection({
|
|
58
|
+
sendDirection: isExtension ? MESSAGE_DIRECTION.to_waellet : undefined,
|
|
59
|
+
receiveDirection: isExtension ? MESSAGE_DIRECTION.to_aepp : undefined,
|
|
60
|
+
target: source,
|
|
61
|
+
origin: isExtension ? window.origin : params.origin
|
|
62
|
+
})
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
wallets[wallet.info.id] = wallet
|
|
66
|
+
onDetected({ wallets, newWallet: wallet })
|
|
67
|
+
}, () => {})
|
|
68
|
+
if (Object.keys(wallets).length > 0) onDetected({ wallets })
|
|
69
|
+
|
|
70
|
+
return () => connection.disconnect()
|
|
71
|
+
}
|