@aeternity/aepp-sdk 10.0.0 → 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/README.md +15 -14
- package/dist/aepp-sdk.browser-script.js +1 -1
- package/dist/aepp-sdk.browser-script.js.LICENSE.txt +13 -40
- 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 +118 -0
- 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.js → handlers.mjs} +163 -130
- package/es/channel/handlers.mjs.map +1 -0
- package/es/channel/index.d.ts +634 -0
- package/es/channel/index.mjs +978 -0
- package/es/channel/index.mjs.map +1 -0
- package/es/channel/internal.d.ts +100 -0
- package/es/channel/internal.mjs +328 -0
- package/es/channel/internal.mjs.map +1 -0
- 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 +496 -0
- package/es/contract/aci.mjs.map +1 -0
- 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 +49 -0
- package/es/index.mjs.map +1 -0
- 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 +100 -0
- package/es/tx/builder/constants.mjs.map +1 -0
- package/es/tx/builder/field-types.d.ts +62 -0
- package/es/tx/builder/field-types.mjs +126 -0
- package/es/tx/builder/field-types.mjs.map +1 -0
- package/es/tx/builder/helpers.d.ts +131 -0
- package/es/tx/builder/helpers.mjs +223 -0
- package/es/tx/builder/helpers.mjs.map +1 -0
- package/es/tx/builder/index.d.ts +75 -0
- package/es/tx/builder/index.mjs +424 -0
- package/es/tx/builder/index.mjs.map +1 -0
- package/es/tx/builder/schema.d.ts +350 -0
- package/es/tx/builder/schema.mjs +320 -0
- package/es/tx/builder/schema.mjs.map +1 -0
- package/es/tx/index.d.ts +63 -0
- package/es/tx/index.mjs +209 -0
- package/es/tx/index.mjs.map +1 -0
- 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 +240 -0
- package/es/tx/validator.mjs.map +1 -0
- 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 +2 -0
- package/es/typings/blakejs/index.d.mjs.map +1 -0
- 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.js → amount-formatter.mjs} +38 -44
- package/es/utils/amount-formatter.mjs.map +1 -0
- 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 +23 -0
- package/es/utils/bignumber.mjs.map +1 -0
- package/es/{bytes.d.ts → utils/bytes.d.ts} +10 -13
- package/es/utils/{bytes.js → bytes.mjs} +26 -22
- package/es/utils/bytes.mjs.map +1 -0
- package/es/utils/crypto.d.ts +103 -0
- package/es/utils/crypto.mjs +221 -0
- package/es/utils/crypto.mjs.map +1 -0
- package/es/utils/encoder.d.ts +26 -0
- package/es/utils/encoder.mjs +102 -0
- package/es/utils/encoder.mjs.map +1 -0
- package/es/utils/errors.d.ts +481 -0
- package/es/utils/errors.mjs +882 -0
- package/es/utils/errors.mjs.map +1 -0
- package/es/utils/hd-wallet.d.ts +34 -0
- package/es/utils/hd-wallet.mjs +122 -0
- package/es/utils/hd-wallet.mjs.map +1 -0
- package/es/utils/json-big.d.ts +5 -0
- package/es/utils/json-big.mjs +41 -0
- package/es/utils/json-big.mjs.map +1 -0
- package/es/utils/keystore.d.ts +51 -0
- package/es/utils/keystore.mjs +145 -0
- package/es/utils/keystore.mjs.map +1 -0
- package/es/{mptree.d.ts → utils/mptree.d.ts} +5 -8
- package/es/utils/{mptree.js → mptree.mjs} +33 -25
- package/es/utils/mptree.mjs.map +1 -0
- package/es/utils/other.d.ts +14 -0
- package/es/utils/other.mjs +28 -0
- package/es/utils/other.mjs.map +1 -0
- package/es/{semver-satisfies.d.ts → utils/semver-satisfies.d.ts} +0 -0
- package/es/utils/{semver-satisfies.js → semver-satisfies.mjs} +1 -1
- package/es/utils/semver-satisfies.mjs.map +1 -0
- package/es/utils/string.d.ts +24 -0
- package/es/utils/{string.js → string.mjs} +9 -11
- package/es/utils/string.mjs.map +1 -0
- package/package.json +67 -64
- 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.js → src/aepp-wallet-communication/connection-proxy.ts} +16 -9
- 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} +238 -143
- 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.ts +96 -0
- 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 -41
- package/src/utils/autorest.ts +90 -0
- package/src/utils/bignumber.ts +9 -19
- package/src/utils/bytes.ts +15 -16
- package/src/utils/crypto.ts +217 -0
- package/src/utils/encoder.ts +98 -0
- package/src/utils/errors.ts +817 -0
- 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 +26 -20
- package/src/utils/other.ts +28 -43
- package/src/utils/string.ts +8 -10
- package/CHANGELOG.md +0 -1603
- package/es/account/base.js +0 -169
- package/es/account/base.js.map +0 -1
- package/es/account/memory.js +0 -84
- package/es/account/memory.js.map +0 -1
- package/es/account/multiple.js +0 -178
- package/es/account/multiple.js.map +0 -1
- package/es/ae/aens.js +0 -408
- package/es/ae/aens.js.map +0 -1
- package/es/ae/aepp.js +0 -45
- package/es/ae/aepp.js.map +0 -1
- package/es/ae/contract.js +0 -312
- package/es/ae/contract.js.map +0 -1
- package/es/ae/index.js +0 -206
- package/es/ae/index.js.map +0 -1
- package/es/ae/oracle.js +0 -322
- package/es/ae/oracle.js.map +0 -1
- package/es/ae/universal.js +0 -45
- package/es/ae/universal.js.map +0 -1
- package/es/ae/wallet.js +0 -50
- package/es/ae/wallet.js.map +0 -1
- package/es/amount-formatter.d.ts +0 -58
- package/es/bignumber.d.ts +0 -24
- package/es/chain/index.js +0 -256
- package/es/chain/index.js.map +0 -1
- package/es/chain/node.js +0 -394
- package/es/chain/node.js.map +0 -1
- package/es/channel/handlers.js.map +0 -1
- package/es/channel/index.js +0 -980
- package/es/channel/index.js.map +0 -1
- package/es/channel/internal.js +0 -266
- 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 -361
- package/es/contract/aci/index.js.map +0 -1
- package/es/contract/aci/transformation.js +0 -66
- package/es/contract/aci/transformation.js.map +0 -1
- package/es/contract/compiler.js +0 -244
- package/es/contract/compiler.js.map +0 -1
- package/es/contract/ga/helpers.js +0 -22
- package/es/contract/ga/helpers.js.map +0 -1
- package/es/contract/ga/index.js +0 -170
- package/es/contract/ga/index.js.map +0 -1
- package/es/contract/index.js +0 -162
- package/es/contract/index.js.map +0 -1
- package/es/crypto-ts.d.ts +0 -9
- package/es/index.js +0 -57
- package/es/index.js.map +0 -1
- package/es/node-pool/index.js +0 -187
- package/es/node-pool/index.js.map +0 -1
- package/es/node.js +0 -132
- package/es/node.js.map +0 -1
- package/es/other.d.ts +0 -31
- package/es/string.d.ts +0 -26
- package/es/tx/builder/helpers.js +0 -305
- package/es/tx/builder/helpers.js.map +0 -1
- package/es/tx/builder/index.js +0 -595
- package/es/tx/builder/index.js.map +0 -1
- package/es/tx/builder/schema.js +0 -814
- package/es/tx/builder/schema.js.map +0 -1
- package/es/tx/index.js +0 -300
- package/es/tx/index.js.map +0 -1
- package/es/tx/tx-object.js +0 -276
- package/es/tx/tx-object.js.map +0 -1
- package/es/tx/tx.js +0 -937
- package/es/tx/tx.js.map +0 -1
- package/es/tx/validator.js +0 -208
- package/es/tx/validator.js.map +0 -1
- package/es/typings/blakejs/index.d.js +0 -2
- package/es/typings/blakejs/index.d.js.map +0 -1
- package/es/utils/aepp-wallet-communication/connection/browser-runtime.js +0 -131
- 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 -184
- package/es/utils/aepp-wallet-communication/connection/browser-window-message.js.map +0 -1
- package/es/utils/aepp-wallet-communication/connection/index.js +0 -84
- package/es/utils/aepp-wallet-communication/connection/index.js.map +0 -1
- package/es/utils/aepp-wallet-communication/content-script-bridge.js +0 -97
- package/es/utils/aepp-wallet-communication/content-script-bridge.js.map +0 -1
- package/es/utils/aepp-wallet-communication/helpers.js +0 -103
- package/es/utils/aepp-wallet-communication/helpers.js.map +0 -1
- package/es/utils/aepp-wallet-communication/rpc/aepp-rpc.js +0 -329
- package/es/utils/aepp-wallet-communication/rpc/aepp-rpc.js.map +0 -1
- package/es/utils/aepp-wallet-communication/rpc/rpc-client.js +0 -270
- package/es/utils/aepp-wallet-communication/rpc/rpc-client.js.map +0 -1
- package/es/utils/aepp-wallet-communication/rpc/wallet-rpc.js +0 -533
- package/es/utils/aepp-wallet-communication/rpc/wallet-rpc.js.map +0 -1
- package/es/utils/aepp-wallet-communication/schema.js +0 -107
- package/es/utils/aepp-wallet-communication/schema.js.map +0 -1
- package/es/utils/aepp-wallet-communication/wallet-detector.js +0 -109
- package/es/utils/aepp-wallet-communication/wallet-detector.js.map +0 -1
- package/es/utils/amount-formatter.js.map +0 -1
- package/es/utils/async-init.js +0 -67
- package/es/utils/async-init.js.map +0 -1
- package/es/utils/bignumber.js +0 -28
- 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 -304
- package/es/utils/crypto.js.map +0 -1
- package/es/utils/hd-wallet.js +0 -112
- package/es/utils/hd-wallet.js.map +0 -1
- package/es/utils/json-big.js +0 -45
- package/es/utils/json-big.js.map +0 -1
- package/es/utils/keystore.js +0 -228
- package/es/utils/keystore.js.map +0 -1
- package/es/utils/mptree.js.map +0 -1
- package/es/utils/other.js +0 -43
- package/es/utils/other.js.map +0 -1
- package/es/utils/semver-satisfies.js.map +0 -1
- package/es/utils/string.js.map +0 -1
- package/es/utils/swagger.js +0 -132
- package/es/utils/swagger.js.map +0 -1
- package/src/account/base.js +0 -153
- package/src/account/memory.js +0 -78
- package/src/account/multiple.js +0 -154
- package/src/ae/aens.js +0 -366
- package/src/ae/aepp.js +0 -45
- package/src/ae/contract.js +0 -285
- package/src/ae/index.js +0 -167
- package/src/ae/oracle.js +0 -296
- package/src/ae/universal.js +0 -47
- package/src/ae/wallet.js +0 -50
- package/src/chain/index.js +0 -250
- package/src/chain/node.js +0 -293
- package/src/channel/index.js +0 -898
- package/src/channel/internal.js +0 -231
- package/src/contract/aci/index.js +0 -317
- package/src/contract/aci/transformation.js +0 -72
- package/src/contract/compiler.js +0 -195
- package/src/contract/ga/helpers.js +0 -17
- package/src/contract/ga/index.js +0 -147
- package/src/contract/index.js +0 -163
- package/src/index.js +0 -90
- package/src/node-pool/index.js +0 -171
- package/src/node.js +0 -118
- package/src/tx/builder/helpers.js +0 -325
- package/src/tx/builder/index.js +0 -460
- package/src/tx/builder/schema.js +0 -1211
- package/src/tx/index.js +0 -301
- package/src/tx/tx-object.js +0 -186
- package/src/tx/tx.js +0 -622
- package/src/tx/validator.js +0 -161
- package/src/utils/aepp-wallet-communication/connection/browser-runtime.js +0 -114
- package/src/utils/aepp-wallet-communication/connection/browser-window-message.js +0 -161
- package/src/utils/aepp-wallet-communication/connection/index.js +0 -85
- package/src/utils/aepp-wallet-communication/content-script-bridge.js +0 -85
- package/src/utils/aepp-wallet-communication/helpers.js +0 -70
- package/src/utils/aepp-wallet-communication/rpc/aepp-rpc.js +0 -268
- package/src/utils/aepp-wallet-communication/rpc/rpc-client.js +0 -223
- package/src/utils/aepp-wallet-communication/rpc/wallet-rpc.js +0 -390
- package/src/utils/aepp-wallet-communication/schema.js +0 -108
- package/src/utils/aepp-wallet-communication/wallet-detector.js +0 -91
- package/src/utils/async-init.js +0 -41
- package/src/utils/crypto.js +0 -312
- package/src/utils/hd-wallet.js +0 -115
- package/src/utils/json-big.js +0 -26
- package/src/utils/keystore.js +0 -223
- package/src/utils/swagger.js +0 -133
|
@@ -0,0 +1,345 @@
|
|
|
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
|
+
import { w3cwebsocket as W3CWebSocket } from 'websocket'
|
|
19
|
+
import { EventEmitter } from 'events'
|
|
20
|
+
import BigNumber from 'bignumber.js'
|
|
21
|
+
import Channel from '.'
|
|
22
|
+
import JsonBig from '../utils/json-big'
|
|
23
|
+
import { pascalToSnake } from '../utils/string'
|
|
24
|
+
import { EncodedData } from '../utils/encoder'
|
|
25
|
+
import { ChannelCallError, ChannelPingTimedOutError, UnknownChannelStateError } from '../utils/errors'
|
|
26
|
+
|
|
27
|
+
interface ChannelAction {
|
|
28
|
+
guard: (channel: Channel, state?: ChannelFsm) => boolean
|
|
29
|
+
action: (channel: Channel, state?: ChannelFsm) => ChannelFsm
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
export type SignTxWithTag = (tag: string, tx: EncodedData<'tx'>, options?: object) => Promise<EncodedData<'tx'>>
|
|
33
|
+
// TODO: SignTx shouldn't return number or null
|
|
34
|
+
export type SignTx = (tx: EncodedData<'tx'>, options?: object) => Promise<EncodedData<'tx'> | number | null>
|
|
35
|
+
|
|
36
|
+
export interface ChannelOptions {
|
|
37
|
+
existingFsmId?: string
|
|
38
|
+
url: string
|
|
39
|
+
role: 'initiator' | 'responder'
|
|
40
|
+
initiatorId: EncodedData<'ak'>
|
|
41
|
+
responderId: EncodedData<'ak'>
|
|
42
|
+
pushAmount: number
|
|
43
|
+
initiatorAmount: BigNumber
|
|
44
|
+
responderAmount: BigNumber
|
|
45
|
+
channelReserve?: BigNumber | number
|
|
46
|
+
signedTx?: string
|
|
47
|
+
ttl?: number
|
|
48
|
+
host: string
|
|
49
|
+
port: number
|
|
50
|
+
lockPeriod: number
|
|
51
|
+
existingChannelId?: string
|
|
52
|
+
offChainTx?: string
|
|
53
|
+
reconnectTx?: string
|
|
54
|
+
timeoutIdle?: number
|
|
55
|
+
timeoutFundingCreate?: number
|
|
56
|
+
timeoutFundingSign?: number
|
|
57
|
+
timeoutFundingLock?: number
|
|
58
|
+
timeoutSign?: number
|
|
59
|
+
timeoutAccept?: number
|
|
60
|
+
timeoutInitialized?: number
|
|
61
|
+
timeoutAwaitingOpen?: number
|
|
62
|
+
statePassword?: string
|
|
63
|
+
debug: boolean
|
|
64
|
+
sign: SignTxWithTag
|
|
65
|
+
offchainTx?: string
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
export interface ChannelHandler extends Function {
|
|
69
|
+
enter?: Function
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
export interface ChannelState {
|
|
73
|
+
signedTx: any
|
|
74
|
+
resolve: Function
|
|
75
|
+
reject: Function
|
|
76
|
+
sign: SignTx
|
|
77
|
+
handler?: ChannelHandler
|
|
78
|
+
onOnChainTx?: Function
|
|
79
|
+
onOwnWithdrawLocked?: Function
|
|
80
|
+
onWithdrawLocked?: Function
|
|
81
|
+
onOwnDepositLocked?: Function
|
|
82
|
+
onDepositLocked?: Function
|
|
83
|
+
closeTx?: string
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
export interface ChannelFsm {
|
|
87
|
+
handler: ChannelHandler
|
|
88
|
+
state?: ChannelState | {
|
|
89
|
+
resolve: Function
|
|
90
|
+
reject: Function
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
export interface ChannelMessage {
|
|
95
|
+
id?: number
|
|
96
|
+
jsonrpc: string
|
|
97
|
+
method: string
|
|
98
|
+
params: any
|
|
99
|
+
payload?: any
|
|
100
|
+
data?: any
|
|
101
|
+
error?: ChannelMessageError
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
interface ChannelMessageError {
|
|
105
|
+
code: number
|
|
106
|
+
message: string
|
|
107
|
+
data: [{
|
|
108
|
+
message: string
|
|
109
|
+
code: number
|
|
110
|
+
}]
|
|
111
|
+
request: ChannelMessage
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
// Send ping message every 10 seconds
|
|
115
|
+
const PING_TIMEOUT_MS = 10000
|
|
116
|
+
// Close connection if pong message is not received within 5 seconds
|
|
117
|
+
const PONG_TIMEOUT_MS = 5000
|
|
118
|
+
|
|
119
|
+
// TODO: move to Channel instance to avoid is-null checks and for easier debugging
|
|
120
|
+
export const options = new WeakMap<Channel, ChannelOptions>()
|
|
121
|
+
export const status = new WeakMap<Channel, string>()
|
|
122
|
+
export const state = new WeakMap<Channel, EncodedData<'tx'>>()
|
|
123
|
+
const fsm = new WeakMap<Channel, ChannelFsm>()
|
|
124
|
+
const websockets = new WeakMap<Channel, W3CWebSocket>()
|
|
125
|
+
export const eventEmitters = new WeakMap<Channel, EventEmitter>()
|
|
126
|
+
const messageQueue = new WeakMap<Channel, string[]>()
|
|
127
|
+
const messageQueueLocked = new WeakMap<Channel, boolean>()
|
|
128
|
+
const actionQueue = new WeakMap<Channel, ChannelAction[]>()
|
|
129
|
+
const actionQueueLocked = new WeakMap<Channel, boolean>()
|
|
130
|
+
const sequence = new WeakMap<Channel, number>()
|
|
131
|
+
export const channelId = new WeakMap<Channel, string>()
|
|
132
|
+
const rpcCallbacks = new WeakMap<Channel, Map<number, Function>>()
|
|
133
|
+
const pingTimeoutId = new WeakMap<Channel, NodeJS.Timeout>()
|
|
134
|
+
const pongTimeoutId = new WeakMap<Channel, NodeJS.Timeout>()
|
|
135
|
+
export const fsmId = new WeakMap<Channel, string>()
|
|
136
|
+
|
|
137
|
+
export function emit (channel: Channel, ...args: any[]): void {
|
|
138
|
+
const [eventName, ...rest] = args
|
|
139
|
+
eventEmitters.get(channel)?.emit(eventName, ...rest)
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
function enterState (channel: Channel, nextState: ChannelFsm): void {
|
|
143
|
+
if (nextState == null) {
|
|
144
|
+
throw new UnknownChannelStateError()
|
|
145
|
+
}
|
|
146
|
+
fsm.set(channel, nextState)
|
|
147
|
+
if (nextState?.handler?.enter != null) {
|
|
148
|
+
nextState.handler.enter(channel)
|
|
149
|
+
}
|
|
150
|
+
void dequeueAction(channel)
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
export function changeStatus (channel: Channel, newStatus: string): void {
|
|
154
|
+
const prevStatus = status.get(channel)
|
|
155
|
+
if (newStatus !== prevStatus) {
|
|
156
|
+
status.set(channel, newStatus)
|
|
157
|
+
emit(channel, 'statusChanged', newStatus)
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
export function changeState (channel: Channel, newState: EncodedData<'tx'>): void {
|
|
162
|
+
state.set(channel, newState)
|
|
163
|
+
emit(channel, 'stateChanged', newState)
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
export function send (channel: Channel, message: ChannelMessage): void {
|
|
167
|
+
const debug: boolean = options.get(channel)?.debug ?? false
|
|
168
|
+
if (debug) console.log('Send message: ', message)
|
|
169
|
+
|
|
170
|
+
websockets.get(channel)?.send(JsonBig.stringify(message))
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
export function enqueueAction (channel: Channel, guard: ChannelAction['guard'], action: ChannelAction['action']): void {
|
|
174
|
+
const queue = actionQueue.get(channel) ?? []
|
|
175
|
+
actionQueue.set(channel, [
|
|
176
|
+
...queue,
|
|
177
|
+
{ guard, action }
|
|
178
|
+
])
|
|
179
|
+
void dequeueAction(channel)
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
async function dequeueAction (channel: Channel): Promise<void> {
|
|
183
|
+
const locked = actionQueueLocked.get(channel)
|
|
184
|
+
const queue = actionQueue.get(channel) ?? []
|
|
185
|
+
if (Boolean(locked) || queue.length === 0) {
|
|
186
|
+
return
|
|
187
|
+
}
|
|
188
|
+
const state = fsm.get(channel)
|
|
189
|
+
if (state == null) return
|
|
190
|
+
const index = queue.findIndex((action: ChannelAction) => action.guard(channel, state))
|
|
191
|
+
if (index === -1) {
|
|
192
|
+
return
|
|
193
|
+
}
|
|
194
|
+
actionQueue.set(channel, queue.filter((_: ChannelAction, i: number) => index !== i))
|
|
195
|
+
actionQueueLocked.set(channel, true)
|
|
196
|
+
const nextState: ChannelFsm = await Promise.resolve(queue[index].action(channel, state))
|
|
197
|
+
actionQueueLocked.set(channel, false)
|
|
198
|
+
enterState(channel, nextState)
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
async function handleMessage (channel: Channel, message: string): Promise<void> {
|
|
202
|
+
const fsmState = fsm.get(channel)
|
|
203
|
+
if (fsmState == null) throw new UnknownChannelStateError()
|
|
204
|
+
const { handler, state } = fsmState
|
|
205
|
+
enterState(channel, await Promise.resolve(handler(channel, message, state)))
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
async function dequeueMessage (channel: Channel): Promise<void> {
|
|
209
|
+
const locked: boolean = messageQueueLocked.get(channel) ?? false
|
|
210
|
+
if (locked) return
|
|
211
|
+
const messages: string[] = messageQueue.get(channel) ?? []
|
|
212
|
+
if (messages.length === 0) return
|
|
213
|
+
messageQueueLocked.set(channel, true)
|
|
214
|
+
while (messages.length > 0) {
|
|
215
|
+
const message: string = messages.shift() ?? ''
|
|
216
|
+
try {
|
|
217
|
+
await handleMessage(channel, message)
|
|
218
|
+
} catch (error) {
|
|
219
|
+
console.error('Error handling incoming message:')
|
|
220
|
+
console.error(message)
|
|
221
|
+
console.error(error)
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
messageQueueLocked.set(channel, false)
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
function ping (channel: Channel): void {
|
|
228
|
+
const pingTimeoutIdValue = pingTimeoutId.get(channel)
|
|
229
|
+
const pongTimeoutIdValue = pongTimeoutId.get(channel)
|
|
230
|
+
if (pingTimeoutIdValue != null) clearTimeout(pingTimeoutIdValue)
|
|
231
|
+
if (pongTimeoutIdValue != null) clearTimeout(pongTimeoutIdValue)
|
|
232
|
+
pingTimeoutId.set(channel, setTimeout(() => {
|
|
233
|
+
send(channel, {
|
|
234
|
+
jsonrpc: '2.0',
|
|
235
|
+
method: 'channels.system',
|
|
236
|
+
params: {
|
|
237
|
+
action: 'ping'
|
|
238
|
+
}
|
|
239
|
+
})
|
|
240
|
+
pongTimeoutId.set(channel, setTimeout(() => {
|
|
241
|
+
disconnect(channel)
|
|
242
|
+
emit(channel, 'error', new ChannelPingTimedOutError())
|
|
243
|
+
}, PONG_TIMEOUT_MS))
|
|
244
|
+
}, PING_TIMEOUT_MS))
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
function onMessage (channel: Channel, data: string): void {
|
|
248
|
+
const message = JsonBig.parse(data)
|
|
249
|
+
const debug: boolean = options.get(channel)?.debug ?? false
|
|
250
|
+
if (debug) console.log('Receive message: ', message)
|
|
251
|
+
if (message.id != null) {
|
|
252
|
+
const callback = rpcCallbacks.get(channel)?.get(message.id)
|
|
253
|
+
try {
|
|
254
|
+
callback?.(message)
|
|
255
|
+
} finally {
|
|
256
|
+
rpcCallbacks.get(channel)?.delete(message.id)
|
|
257
|
+
}
|
|
258
|
+
return
|
|
259
|
+
}
|
|
260
|
+
if (message.method === 'channels.message') {
|
|
261
|
+
emit(channel, 'message', message.params.data.message)
|
|
262
|
+
return
|
|
263
|
+
}
|
|
264
|
+
if (message.method === 'channels.system.pong') {
|
|
265
|
+
if (
|
|
266
|
+
(message.params.channel_id === channelId.get(channel)) ||
|
|
267
|
+
// Skip channelId check if channelId is not known yet
|
|
268
|
+
(channelId.get(channel) == null)
|
|
269
|
+
) {
|
|
270
|
+
ping(channel)
|
|
271
|
+
}
|
|
272
|
+
return
|
|
273
|
+
}
|
|
274
|
+
messageQueue.get(channel)?.push(message)
|
|
275
|
+
void dequeueMessage(channel)
|
|
276
|
+
}
|
|
277
|
+
|
|
278
|
+
export async function call (channel: Channel, method: string, params: any): Promise<any> {
|
|
279
|
+
return await new Promise((resolve, reject) => {
|
|
280
|
+
const currentSequence: number = sequence.get(channel) ?? 0
|
|
281
|
+
const id = sequence.set(channel, currentSequence + 1).get(channel) ?? 1
|
|
282
|
+
rpcCallbacks.get(channel)?.set(id, (message: {
|
|
283
|
+
result: PromiseLike<any>
|
|
284
|
+
error?: ChannelMessageError }) => {
|
|
285
|
+
if (message.result != null) return resolve(message.result)
|
|
286
|
+
if (message.error != null) {
|
|
287
|
+
const [{ message: details } = { message: '' }] = message.error.data ?? []
|
|
288
|
+
return reject(new ChannelCallError(message.error.message + details))
|
|
289
|
+
}
|
|
290
|
+
})
|
|
291
|
+
send(channel, { jsonrpc: '2.0', method, id, params })
|
|
292
|
+
})
|
|
293
|
+
}
|
|
294
|
+
|
|
295
|
+
export function disconnect (channel: Channel): void {
|
|
296
|
+
websockets.get(channel)?.close()
|
|
297
|
+
const pingTimeoutIdValue = pingTimeoutId.get(channel)
|
|
298
|
+
const pongTimeoutIdValue = pongTimeoutId.get(channel)
|
|
299
|
+
if (pingTimeoutIdValue != null) clearTimeout(pingTimeoutIdValue)
|
|
300
|
+
if (pongTimeoutIdValue != null) clearTimeout(pongTimeoutIdValue)
|
|
301
|
+
}
|
|
302
|
+
|
|
303
|
+
export async function initialize (
|
|
304
|
+
channel: Channel,
|
|
305
|
+
connectionHandler: Function,
|
|
306
|
+
openHandler: Function,
|
|
307
|
+
{ url, ...channelOptions }: ChannelOptions
|
|
308
|
+
): Promise<void> {
|
|
309
|
+
options.set(channel, { url, ...channelOptions })
|
|
310
|
+
fsm.set(channel, { handler: connectionHandler })
|
|
311
|
+
eventEmitters.set(channel, new EventEmitter())
|
|
312
|
+
sequence.set(channel, 0)
|
|
313
|
+
rpcCallbacks.set(channel, new Map())
|
|
314
|
+
messageQueue.set(channel, [])
|
|
315
|
+
|
|
316
|
+
const wsUrl = new URL(url)
|
|
317
|
+
Object.entries(channelOptions)
|
|
318
|
+
.filter(([key]) => !['sign', 'debug'].includes(key))
|
|
319
|
+
.forEach(([key, value]) => wsUrl.searchParams.set(pascalToSnake(key), value))
|
|
320
|
+
wsUrl.searchParams.set('protocol', 'json-rpc')
|
|
321
|
+
changeStatus(channel, 'connecting')
|
|
322
|
+
const ws = new W3CWebSocket(wsUrl.toString())
|
|
323
|
+
await new Promise<void>((resolve, reject) => Object.assign(ws, {
|
|
324
|
+
onerror: reject,
|
|
325
|
+
onopen: async () => {
|
|
326
|
+
resolve()
|
|
327
|
+
changeStatus(channel, 'connected')
|
|
328
|
+
if (channelOptions.reconnectTx != null) {
|
|
329
|
+
enterState(channel, { handler: openHandler })
|
|
330
|
+
const signedTx = (await call(channel, 'channels.get.offchain_state', {})).signed_tx
|
|
331
|
+
changeState(channel, signedTx)
|
|
332
|
+
}
|
|
333
|
+
ping(channel)
|
|
334
|
+
},
|
|
335
|
+
onclose: () => {
|
|
336
|
+
changeStatus(channel, 'disconnected')
|
|
337
|
+
const pingTimeoutIdValue = pingTimeoutId.get(channel)
|
|
338
|
+
const pongTimeoutIdValue = pongTimeoutId.get(channel)
|
|
339
|
+
if (pingTimeoutIdValue != null) clearTimeout(pingTimeoutIdValue)
|
|
340
|
+
if (pongTimeoutIdValue != null) clearTimeout(pongTimeoutIdValue)
|
|
341
|
+
},
|
|
342
|
+
onmessage: ({ data }: {data: string}) => onMessage(channel, data)
|
|
343
|
+
}))
|
|
344
|
+
websockets.set(channel, ws)
|
|
345
|
+
}
|
|
@@ -0,0 +1,66 @@
|
|
|
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
|
+
import { Compiler as CompilerApi, ErrorModel, CompilerError } from '../apis/compiler'
|
|
18
|
+
import { genErrorFormatterPolicy, genVersionCheckPolicy } from '../utils/autorest'
|
|
19
|
+
|
|
20
|
+
type GeneralCompilerError = ErrorModel & {
|
|
21
|
+
info?: object
|
|
22
|
+
parameter?: string
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* Contract Compiler
|
|
27
|
+
*
|
|
28
|
+
* This class include api call's related to contract compiler functionality.
|
|
29
|
+
* @example Compiler('COMPILER_URL')
|
|
30
|
+
*/
|
|
31
|
+
export default class Compiler extends CompilerApi {
|
|
32
|
+
/**
|
|
33
|
+
* @param compilerUrl - Url for compiler API
|
|
34
|
+
* @param options - Options
|
|
35
|
+
* @param options.ignoreVersion - Don't check compiler version
|
|
36
|
+
*/
|
|
37
|
+
constructor (compilerUrl: string, { ignoreVersion }: { ignoreVersion?: boolean } = {}) {
|
|
38
|
+
super(compilerUrl, {
|
|
39
|
+
allowInsecureConnection: true,
|
|
40
|
+
additionalPolicies: [
|
|
41
|
+
genErrorFormatterPolicy((body: GeneralCompilerError | CompilerError[]) => {
|
|
42
|
+
let message = ''
|
|
43
|
+
if ('reason' in body) {
|
|
44
|
+
message += ' ' + body.reason +
|
|
45
|
+
(body.parameter != null ? ` in ${body.parameter}` : '') +
|
|
46
|
+
// TODO: revising after improving documentation https://github.com/aeternity/aesophia_http/issues/78
|
|
47
|
+
(body.info != null ? ` (${JSON.stringify(body.info)})` : '')
|
|
48
|
+
}
|
|
49
|
+
if (Array.isArray(body)) {
|
|
50
|
+
message += '\n' + body
|
|
51
|
+
.map(e => `${e.type}:${e.pos.line}:${e.pos.col}: ${e.message}${e.context != null ? `(${e.context})` : ''}`)
|
|
52
|
+
.map(e => e.trim()) // TODO: remove after fixing https://github.com/aeternity/aesophia_http/issues/80
|
|
53
|
+
.join('\n')
|
|
54
|
+
}
|
|
55
|
+
return message
|
|
56
|
+
})
|
|
57
|
+
]
|
|
58
|
+
})
|
|
59
|
+
if (ignoreVersion !== true) {
|
|
60
|
+
const versionPromise = this.aPIVersion().then(({ apiVersion }) => apiVersion)
|
|
61
|
+
this.pipeline.addPolicy(
|
|
62
|
+
genVersionCheckPolicy('compiler', '/api-version', versionPromise, '6.1.0', '7.0.0')
|
|
63
|
+
)
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
}
|