@aeternity/aepp-sdk 11.0.0 → 12.1.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 +0 -22
- package/dist/aepp-sdk.browser-script.js.map +1 -1
- package/dist/aepp-sdk.browser.js +2 -1
- package/dist/aepp-sdk.browser.js.LICENSE.txt +1 -0
- package/dist/aepp-sdk.browser.js.map +1 -1
- package/dist/aepp-sdk.js +20764 -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 +70 -0
- package/es/AeSdkAepp.mjs +176 -0
- package/es/AeSdkAepp.mjs.map +1 -0
- package/es/AeSdkBase.d.ts +213 -0
- package/es/AeSdkBase.mjs +314 -0
- package/es/AeSdkBase.mjs.map +1 -0
- package/es/AeSdkWallet.d.ts +104 -0
- package/es/AeSdkWallet.mjs +326 -0
- package/es/AeSdkWallet.mjs.map +1 -0
- package/es/Node.d.ts +41 -0
- package/es/Node.mjs +147 -0
- package/es/Node.mjs.map +1 -0
- package/es/account/Base.d.ts +68 -0
- package/es/account/Base.mjs +123 -0
- package/es/account/Base.mjs.map +1 -0
- package/es/account/Memory.d.ts +26 -0
- package/es/account/Memory.mjs +103 -0
- package/es/account/Memory.mjs.map +1 -0
- package/es/account/Rpc.d.ts +27 -0
- package/es/account/Rpc.mjs +80 -0
- package/es/account/Rpc.mjs.map +1 -0
- package/es/aens.d.ts +222 -0
- package/es/aens.mjs +338 -0
- package/es/aens.mjs.map +1 -0
- package/es/aepp-wallet-communication/connection/Browser.d.ts +33 -0
- package/es/aepp-wallet-communication/connection/Browser.mjs +73 -0
- package/es/aepp-wallet-communication/connection/Browser.mjs.map +1 -0
- package/es/aepp-wallet-communication/connection/BrowserRuntime.d.ts +18 -0
- package/es/aepp-wallet-communication/connection/BrowserRuntime.mjs +58 -0
- package/es/aepp-wallet-communication/connection/BrowserRuntime.mjs.map +1 -0
- package/es/aepp-wallet-communication/connection/BrowserWindowMessage.d.ts +36 -0
- package/es/aepp-wallet-communication/connection/BrowserWindowMessage.mjs +146 -0
- package/es/aepp-wallet-communication/connection/BrowserWindowMessage.mjs.map +1 -0
- package/es/aepp-wallet-communication/connection-proxy.d.ts +11 -0
- package/{src/utils/crypto-ts.ts → es/aepp-wallet-communication/connection-proxy.mjs} +16 -11
- package/es/aepp-wallet-communication/connection-proxy.mjs.map +1 -0
- package/es/aepp-wallet-communication/rpc/RpcClient.d.ts +34 -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 +105 -46
- package/es/aepp-wallet-communication/schema.mjs +251 -0
- package/es/aepp-wallet-communication/schema.mjs.map +1 -0
- package/es/aepp-wallet-communication/wallet-detector.d.ts +25 -0
- package/es/aepp-wallet-communication/wallet-detector.mjs +62 -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 +1065 -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 +4166 -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 +248 -0
- package/es/chain.mjs +560 -0
- package/es/chain.mjs.map +1 -0
- package/es/channel/handlers.d.ts +34 -0
- package/es/channel/handlers.mjs +164 -131
- package/es/channel/handlers.mjs.map +1 -1
- package/es/channel/index.d.ts +625 -0
- package/es/channel/index.mjs +897 -902
- package/es/channel/index.mjs.map +1 -1
- package/es/channel/internal.d.ts +101 -0
- package/es/channel/internal.mjs +138 -88
- package/es/channel/internal.mjs.map +1 -1
- package/es/contract/Compiler.d.ts +18 -0
- package/es/contract/Compiler.mjs +68 -0
- package/es/contract/Compiler.mjs.map +1 -0
- package/es/contract/aci.d.ts +127 -0
- package/es/contract/aci.mjs +225 -193
- package/es/contract/aci.mjs.map +1 -1
- package/es/contract/ga.d.ts +69 -0
- package/es/contract/ga.mjs +195 -0
- package/es/contract/ga.mjs.map +1 -0
- package/es/contract/methods.d.ts +71 -0
- package/es/contract/methods.mjs +104 -0
- package/es/contract/methods.mjs.map +1 -0
- package/es/deprecated/index.d.ts +143 -0
- package/es/deprecated/index.mjs +162 -0
- package/es/deprecated/index.mjs.map +1 -0
- package/es/deprecated/methods.d.ts +18 -0
- package/es/deprecated/methods.mjs +26 -0
- package/es/deprecated/methods.mjs.map +1 -0
- package/es/index.d.ts +35 -0
- package/es/index.mjs +35 -40
- package/es/index.mjs.map +1 -1
- package/es/oracle.d.ts +161 -0
- package/es/oracle.mjs +306 -0
- package/es/oracle.mjs.map +1 -0
- package/es/spend.d.ts +62 -0
- package/es/spend.mjs +111 -0
- package/es/spend.mjs.map +1 -0
- package/es/tx/builder/address.d.ts +25 -0
- package/es/tx/builder/address.mjs +45 -0
- package/es/tx/builder/address.mjs.map +1 -0
- package/es/tx/builder/constants.d.ts +70 -0
- package/es/tx/builder/constants.mjs +122 -0
- package/es/tx/builder/constants.mjs.map +1 -0
- package/es/tx/builder/field-types/coin-amount.d.ts +13 -0
- package/es/tx/builder/field-types/coin-amount.mjs +26 -0
- package/es/tx/builder/field-types/coin-amount.mjs.map +1 -0
- package/es/tx/builder/field-types/deposit.d.ts +15 -0
- package/es/tx/builder/field-types/deposit.mjs +19 -0
- package/es/tx/builder/field-types/deposit.mjs.map +1 -0
- package/es/tx/builder/field-types/fee.d.ts +25 -0
- package/es/tx/builder/field-types/fee.mjs +150 -0
- package/es/tx/builder/field-types/fee.mjs.map +1 -0
- package/es/tx/builder/field-types/field.d.ts +6 -0
- package/es/tx/builder/field-types/field.mjs +15 -0
- package/es/tx/builder/field-types/field.mjs.map +1 -0
- package/es/tx/builder/field-types/gas-limit.d.ts +12 -0
- package/es/tx/builder/field-types/gas-limit.mjs +33 -0
- package/es/tx/builder/field-types/gas-limit.mjs.map +1 -0
- package/es/tx/builder/field-types/gas-price.d.ts +8 -0
- package/es/tx/builder/field-types/gas-price.mjs +18 -0
- package/es/tx/builder/field-types/gas-price.mjs.map +1 -0
- package/es/tx/builder/field-types/index.d.ts +70 -0
- package/es/tx/builder/field-types/index.mjs +25 -0
- package/es/tx/builder/field-types/index.mjs.map +1 -0
- package/es/tx/builder/field-types/name-fee.d.ts +20 -0
- package/es/tx/builder/field-types/name-fee.mjs +24 -0
- package/es/tx/builder/field-types/name-fee.mjs.map +1 -0
- package/es/tx/builder/field-types/name-id.d.ts +14 -0
- package/es/tx/builder/field-types/name-id.mjs +19 -0
- package/es/tx/builder/field-types/name-id.mjs.map +1 -0
- package/es/tx/builder/field-types/name.d.ts +13 -0
- package/es/tx/builder/field-types/name.mjs +18 -0
- package/es/tx/builder/field-types/name.mjs.map +1 -0
- package/es/tx/builder/field-types/short-u-int.d.ts +6 -0
- package/es/tx/builder/field-types/short-u-int.mjs +12 -0
- package/es/tx/builder/field-types/short-u-int.mjs.map +1 -0
- package/es/tx/builder/field-types/u-int.d.ts +8 -0
- package/es/tx/builder/field-types/u-int.mjs +14 -0
- package/es/tx/builder/field-types/u-int.mjs.map +1 -0
- package/es/tx/builder/helpers.d.ts +125 -0
- package/es/tx/builder/helpers.mjs +94 -240
- package/es/tx/builder/helpers.mjs.map +1 -1
- package/es/tx/builder/index.d.ts +88 -0
- package/es/tx/builder/index.mjs +167 -358
- package/es/tx/builder/index.mjs.map +1 -1
- package/es/tx/builder/schema.d.ts +1201 -0
- package/es/tx/builder/schema.mjs +175 -664
- package/es/tx/builder/schema.mjs.map +1 -1
- package/es/tx/index.d.ts +64 -0
- package/es/tx/index.mjs +151 -265
- package/es/tx/index.mjs.map +1 -1
- package/es/tx/validator.d.ts +20 -0
- package/es/tx/validator.mjs +104 -124
- 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/sha-js/index.d.mjs +2 -0
- package/es/typings/sha-js/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.mjs +36 -49
- 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 +11 -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 +11 -15
- package/es/utils/bytes.mjs.map +1 -1
- package/es/utils/crypto.d.ts +88 -0
- package/es/utils/crypto.mjs +64 -108
- package/es/utils/crypto.mjs.map +1 -1
- package/es/utils/encoder-types.d.ts +61 -0
- package/es/utils/encoder-types.mjs +36 -0
- package/es/utils/encoder-types.mjs.map +1 -0
- package/es/utils/encoder.d.ts +25 -0
- package/es/utils/encoder.mjs +118 -0
- package/es/utils/encoder.mjs.map +1 -0
- package/es/{errors.d.ts → utils/errors.d.ts} +246 -59
- package/es/utils/errors.mjs +313 -136
- package/es/utils/errors.mjs.map +1 -1
- package/es/utils/hd-wallet.d.ts +50 -0
- package/es/utils/hd-wallet.mjs +86 -45
- package/es/utils/hd-wallet.mjs.map +1 -1
- package/es/utils/json-big.d.ts +5 -0
- package/es/utils/json-big.mjs +12 -16
- package/es/utils/json-big.mjs.map +1 -1
- package/es/utils/keystore.d.ts +51 -0
- package/es/utils/keystore.mjs +101 -194
- package/es/utils/keystore.mjs.map +1 -1
- package/es/{mptree.d.ts → utils/mptree.d.ts} +6 -9
- package/es/utils/mptree.mjs +22 -18
- package/es/utils/mptree.mjs.map +1 -1
- package/es/utils/other.d.ts +20 -0
- package/es/utils/other.mjs +32 -35
- package/es/utils/other.mjs.map +1 -1
- package/es/utils/semver-satisfies.d.ts +1 -0
- package/es/utils/semver-satisfies.mjs +2 -2
- 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 +56 -42
- package/src/AeSdk.ts +68 -0
- package/src/AeSdkAepp.ts +176 -0
- package/src/AeSdkBase.ts +338 -0
- package/src/AeSdkWallet.ts +348 -0
- package/src/Node.ts +173 -0
- package/src/account/Base.ts +124 -0
- package/src/account/Memory.ts +98 -0
- package/src/account/Rpc.ts +69 -0
- package/src/aens.ts +407 -0
- package/src/aepp-wallet-communication/connection/Browser.ts +71 -0
- package/src/aepp-wallet-communication/connection/BrowserRuntime.ts +59 -0
- package/src/aepp-wallet-communication/connection/BrowserWindowMessage.ts +122 -0
- package/{es/utils/crypto-ts.mjs → src/aepp-wallet-communication/connection-proxy.ts} +18 -18
- package/src/aepp-wallet-communication/rpc/RpcClient.ts +143 -0
- package/src/aepp-wallet-communication/rpc/types.ts +66 -0
- package/src/aepp-wallet-communication/schema.ts +224 -0
- package/src/aepp-wallet-communication/wallet-detector.ts +72 -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 +10080 -0
- package/src/apis/node/index.ts +2 -0
- package/src/apis/node/models/index.ts +1257 -0
- package/src/apis/node/models/mappers.ts +4280 -0
- package/src/apis/node/models/parameters.ts +188 -0
- package/src/apis/node/node.ts +1299 -0
- package/src/chain.ts +502 -0
- package/src/channel/handlers.ts +817 -0
- package/src/channel/index.ts +1025 -0
- package/src/channel/internal.ts +361 -0
- package/src/contract/Compiler.ts +67 -0
- package/src/contract/aci.ts +538 -0
- package/src/contract/ga.ts +199 -0
- package/src/contract/methods.ts +123 -0
- package/src/deprecated/index.ts +170 -0
- package/src/deprecated/methods.ts +25 -0
- package/src/index.ts +56 -0
- package/src/oracle.ts +364 -0
- package/src/spend.ts +164 -0
- package/src/tx/builder/address.ts +50 -0
- package/src/tx/builder/constants.ts +126 -0
- package/src/tx/builder/field-types/coin-amount.ts +27 -0
- package/src/tx/builder/field-types/deposit.ts +21 -0
- package/src/tx/builder/field-types/fee.ts +143 -0
- package/src/tx/builder/field-types/field.ts +9 -0
- package/src/tx/builder/field-types/gas-limit.ts +41 -0
- package/src/tx/builder/field-types/gas-price.ts +16 -0
- package/src/tx/builder/field-types/index.ts +45 -0
- package/src/tx/builder/field-types/name-fee.ts +32 -0
- package/src/tx/builder/field-types/name-id.ts +20 -0
- package/src/tx/builder/field-types/name.ts +18 -0
- package/src/tx/builder/field-types/short-u-int.ts +11 -0
- package/src/tx/builder/field-types/u-int.ts +16 -0
- package/src/tx/builder/helpers.ts +248 -0
- package/src/tx/builder/index.ts +400 -0
- package/src/tx/builder/schema.ts +727 -0
- package/src/tx/index.ts +192 -0
- package/src/tx/validator.ts +230 -0
- package/src/typings/@aeternity__argon2-browser/index.d.ts +3 -0
- package/src/typings/@aeternity__uuid/index.d.ts +5 -0
- package/src/typings/bip32-path/index.d.ts +33 -0
- package/src/typings/blakejs/index.d.ts +4 -32
- package/src/typings/sha-js/index.d.ts +5 -0
- package/src/typings/tweetnacl-auth/index.d.ts +14 -0
- package/src/utils/amount-formatter.ts +56 -69
- package/src/utils/autorest.ts +93 -0
- package/src/utils/bignumber.ts +11 -12
- package/src/utils/bytes.ts +29 -31
- package/src/utils/crypto.ts +205 -0
- package/src/utils/encoder-types.ts +63 -0
- package/src/utils/encoder.ts +146 -0
- package/src/utils/errors.ts +482 -366
- package/src/utils/hd-wallet.ts +166 -0
- package/src/utils/json-big.ts +27 -0
- package/src/utils/keystore.ts +182 -0
- package/src/utils/mptree.ts +64 -61
- package/src/utils/other.ts +34 -41
- package/src/utils/semver-satisfies.ts +15 -11
- package/src/utils/string.ts +18 -20
- 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/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/semver-satisfies.d.ts +0 -1
- package/es/string.d.ts +0 -26
- package/es/tx/builder/field-types.mjs +0 -74
- package/es/tx/builder/field-types.mjs.map +0 -1
- 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/handlers.js +0 -673
- package/src/channel/index.js +0 -898
- package/src/channel/internal.js +0 -237
- 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 -380
- package/src/tx/builder/index.js +0 -465
- package/src/tx/builder/schema.js +0 -1197
- 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 -229
- 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/es/channel/internal.mjs
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import _includesInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/includes";
|
|
2
|
+
|
|
1
3
|
/*
|
|
2
4
|
* ISC License (ISC)
|
|
3
5
|
* Copyright (c) 2018 aeternity developers
|
|
@@ -24,12 +26,12 @@ const {
|
|
|
24
26
|
} = _events;
|
|
25
27
|
import JsonBig from "../utils/json-big.mjs";
|
|
26
28
|
import { pascalToSnake } from "../utils/string.mjs";
|
|
27
|
-
import {
|
|
28
|
-
|
|
29
|
-
|
|
29
|
+
import { ChannelCallError, ChannelPingTimedOutError, UnknownChannelStateError } from "../utils/errors.mjs";
|
|
30
|
+
// Send ping message every 10 seconds
|
|
30
31
|
const PING_TIMEOUT_MS = 10000; // Close connection if pong message is not received within 5 seconds
|
|
31
32
|
|
|
32
|
-
const PONG_TIMEOUT_MS = 5000;
|
|
33
|
+
const PONG_TIMEOUT_MS = 5000; // TODO: move to Channel instance to avoid is-null checks and for easier debugging
|
|
34
|
+
|
|
33
35
|
export const options = new WeakMap();
|
|
34
36
|
export const status = new WeakMap();
|
|
35
37
|
export const state = new WeakMap();
|
|
@@ -47,25 +49,31 @@ const pingTimeoutId = new WeakMap();
|
|
|
47
49
|
const pongTimeoutId = new WeakMap();
|
|
48
50
|
export const fsmId = new WeakMap();
|
|
49
51
|
export function emit(channel) {
|
|
52
|
+
var _eventEmitters$get;
|
|
53
|
+
|
|
50
54
|
for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
|
|
51
55
|
args[_key - 1] = arguments[_key];
|
|
52
56
|
}
|
|
53
57
|
|
|
54
|
-
|
|
58
|
+
const [eventName, ...rest] = args;
|
|
59
|
+
(_eventEmitters$get = eventEmitters.get(channel)) === null || _eventEmitters$get === void 0 ? void 0 : _eventEmitters$get.emit(eventName, ...rest);
|
|
55
60
|
}
|
|
56
61
|
|
|
57
62
|
function enterState(channel, nextState) {
|
|
58
|
-
|
|
63
|
+
var _nextState$handler;
|
|
64
|
+
|
|
65
|
+
if (nextState == null) {
|
|
59
66
|
throw new UnknownChannelStateError();
|
|
60
67
|
}
|
|
61
68
|
|
|
62
69
|
fsm.set(channel, nextState);
|
|
63
70
|
|
|
64
|
-
if (nextState.handler.enter) {
|
|
71
|
+
if ((nextState === null || nextState === void 0 ? void 0 : (_nextState$handler = nextState.handler) === null || _nextState$handler === void 0 ? void 0 : _nextState$handler.enter) != null) {
|
|
65
72
|
nextState.handler.enter(channel);
|
|
66
|
-
}
|
|
73
|
+
} // eslint-disable-next-line @typescript-eslint/no-use-before-define
|
|
67
74
|
|
|
68
|
-
|
|
75
|
+
|
|
76
|
+
void dequeueAction(channel);
|
|
69
77
|
}
|
|
70
78
|
|
|
71
79
|
export function changeStatus(channel, newStatus) {
|
|
@@ -81,30 +89,26 @@ export function changeState(channel, newState) {
|
|
|
81
89
|
emit(channel, 'stateChanged', newState);
|
|
82
90
|
}
|
|
83
91
|
export function send(channel, message) {
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
92
|
+
var _options$get$debug, _options$get, _websockets$get;
|
|
93
|
+
|
|
94
|
+
const debug = (_options$get$debug = (_options$get = options.get(channel)) === null || _options$get === void 0 ? void 0 : _options$get.debug) !== null && _options$get$debug !== void 0 ? _options$get$debug : false;
|
|
87
95
|
if (debug) console.log('Send message: ', message);
|
|
88
|
-
websockets.get(channel).send(JsonBig.stringify(message));
|
|
89
|
-
}
|
|
90
|
-
export function enqueueAction(channel, guard, action) {
|
|
91
|
-
actionQueue.set(channel, [...(actionQueue.get(channel) || []), {
|
|
92
|
-
guard,
|
|
93
|
-
action
|
|
94
|
-
}]);
|
|
95
|
-
dequeueAction(channel);
|
|
96
|
+
(_websockets$get = websockets.get(channel)) === null || _websockets$get === void 0 ? void 0 : _websockets$get.send(JsonBig.stringify(message));
|
|
96
97
|
}
|
|
97
98
|
|
|
98
99
|
async function dequeueAction(channel) {
|
|
100
|
+
var _actionQueue$get;
|
|
101
|
+
|
|
99
102
|
const locked = actionQueueLocked.get(channel);
|
|
100
|
-
const queue = actionQueue.get(channel)
|
|
103
|
+
const queue = (_actionQueue$get = actionQueue.get(channel)) !== null && _actionQueue$get !== void 0 ? _actionQueue$get : [];
|
|
101
104
|
|
|
102
|
-
if (locked ||
|
|
105
|
+
if (Boolean(locked) || queue.length === 0) {
|
|
103
106
|
return;
|
|
104
107
|
}
|
|
105
108
|
|
|
106
|
-
const
|
|
107
|
-
|
|
109
|
+
const singleFsm = fsm.get(channel);
|
|
110
|
+
if (singleFsm == null) return;
|
|
111
|
+
const index = queue.findIndex(action => action.guard(channel, singleFsm));
|
|
108
112
|
|
|
109
113
|
if (index === -1) {
|
|
110
114
|
return;
|
|
@@ -112,27 +116,45 @@ async function dequeueAction(channel) {
|
|
|
112
116
|
|
|
113
117
|
actionQueue.set(channel, queue.filter((_, i) => index !== i));
|
|
114
118
|
actionQueueLocked.set(channel, true);
|
|
115
|
-
const nextState = await Promise.resolve(queue[index].action(channel,
|
|
119
|
+
const nextState = await Promise.resolve(queue[index].action(channel, singleFsm));
|
|
116
120
|
actionQueueLocked.set(channel, false);
|
|
117
121
|
enterState(channel, nextState);
|
|
118
122
|
}
|
|
119
123
|
|
|
124
|
+
export function enqueueAction(channel, guard, action) {
|
|
125
|
+
var _actionQueue$get2;
|
|
126
|
+
|
|
127
|
+
const queue = (_actionQueue$get2 = actionQueue.get(channel)) !== null && _actionQueue$get2 !== void 0 ? _actionQueue$get2 : [];
|
|
128
|
+
actionQueue.set(channel, [...queue, {
|
|
129
|
+
guard,
|
|
130
|
+
action
|
|
131
|
+
}]);
|
|
132
|
+
void dequeueAction(channel);
|
|
133
|
+
}
|
|
134
|
+
|
|
120
135
|
async function handleMessage(channel, message) {
|
|
136
|
+
const fsmState = fsm.get(channel);
|
|
137
|
+
if (fsmState == null) throw new UnknownChannelStateError();
|
|
121
138
|
const {
|
|
122
139
|
handler,
|
|
123
|
-
state
|
|
124
|
-
} =
|
|
125
|
-
enterState(channel, await Promise.resolve(handler(channel, message,
|
|
140
|
+
state: st
|
|
141
|
+
} = fsmState;
|
|
142
|
+
enterState(channel, await Promise.resolve(handler(channel, message, st)));
|
|
126
143
|
}
|
|
127
144
|
|
|
128
145
|
async function dequeueMessage(channel) {
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
146
|
+
var _messageQueueLocked$g, _messageQueue$get;
|
|
147
|
+
|
|
148
|
+
const locked = (_messageQueueLocked$g = messageQueueLocked.get(channel)) !== null && _messageQueueLocked$g !== void 0 ? _messageQueueLocked$g : false;
|
|
149
|
+
if (locked) return;
|
|
150
|
+
const messages = (_messageQueue$get = messageQueue.get(channel)) !== null && _messageQueue$get !== void 0 ? _messageQueue$get : [];
|
|
151
|
+
if (messages.length === 0) return;
|
|
132
152
|
messageQueueLocked.set(channel, true);
|
|
133
153
|
|
|
134
|
-
while (messages.length) {
|
|
135
|
-
|
|
154
|
+
while (messages.length > 0) {
|
|
155
|
+
var _messages$shift;
|
|
156
|
+
|
|
157
|
+
const message = (_messages$shift = messages.shift()) !== null && _messages$shift !== void 0 ? _messages$shift : '';
|
|
136
158
|
|
|
137
159
|
try {
|
|
138
160
|
await handleMessage(channel, message);
|
|
@@ -146,9 +168,21 @@ async function dequeueMessage(channel) {
|
|
|
146
168
|
messageQueueLocked.set(channel, false);
|
|
147
169
|
}
|
|
148
170
|
|
|
171
|
+
export function disconnect(channel) {
|
|
172
|
+
var _websockets$get2;
|
|
173
|
+
|
|
174
|
+
(_websockets$get2 = websockets.get(channel)) === null || _websockets$get2 === void 0 ? void 0 : _websockets$get2.close();
|
|
175
|
+
const pingTimeoutIdValue = pingTimeoutId.get(channel);
|
|
176
|
+
const pongTimeoutIdValue = pongTimeoutId.get(channel);
|
|
177
|
+
if (pingTimeoutIdValue != null) clearTimeout(pingTimeoutIdValue);
|
|
178
|
+
if (pongTimeoutIdValue != null) clearTimeout(pongTimeoutIdValue);
|
|
179
|
+
}
|
|
180
|
+
|
|
149
181
|
function ping(channel) {
|
|
150
|
-
|
|
151
|
-
|
|
182
|
+
const pingTimeoutIdValue = pingTimeoutId.get(channel);
|
|
183
|
+
const pongTimeoutIdValue = pongTimeoutId.get(channel);
|
|
184
|
+
if (pingTimeoutIdValue != null) clearTimeout(pingTimeoutIdValue);
|
|
185
|
+
if (pongTimeoutIdValue != null) clearTimeout(pongTimeoutIdValue);
|
|
152
186
|
pingTimeoutId.set(channel, setTimeout(() => {
|
|
153
187
|
send(channel, {
|
|
154
188
|
jsonrpc: '2.0',
|
|
@@ -165,19 +199,23 @@ function ping(channel) {
|
|
|
165
199
|
}
|
|
166
200
|
|
|
167
201
|
function onMessage(channel, data) {
|
|
202
|
+
var _options$get$debug2, _options$get2, _messageQueue$get2;
|
|
203
|
+
|
|
168
204
|
const message = JsonBig.parse(data);
|
|
169
|
-
const
|
|
170
|
-
debug = false
|
|
171
|
-
} = options.get(channel);
|
|
205
|
+
const debug = (_options$get$debug2 = (_options$get2 = options.get(channel)) === null || _options$get2 === void 0 ? void 0 : _options$get2.debug) !== null && _options$get$debug2 !== void 0 ? _options$get$debug2 : false;
|
|
172
206
|
if (debug) console.log('Receive message: ', message);
|
|
173
207
|
|
|
174
|
-
if (message.id) {
|
|
175
|
-
|
|
208
|
+
if (message.id != null) {
|
|
209
|
+
var _rpcCallbacks$get;
|
|
210
|
+
|
|
211
|
+
const callback = (_rpcCallbacks$get = rpcCallbacks.get(channel)) === null || _rpcCallbacks$get === void 0 ? void 0 : _rpcCallbacks$get.get(message.id);
|
|
176
212
|
|
|
177
213
|
try {
|
|
178
|
-
callback(message);
|
|
214
|
+
callback === null || callback === void 0 ? void 0 : callback(message);
|
|
179
215
|
} finally {
|
|
180
|
-
|
|
216
|
+
var _rpcCallbacks$get2;
|
|
217
|
+
|
|
218
|
+
(_rpcCallbacks$get2 = rpcCallbacks.get(channel)) === null || _rpcCallbacks$get2 === void 0 ? void 0 : _rpcCallbacks$get2.delete(message.id);
|
|
181
219
|
}
|
|
182
220
|
|
|
183
221
|
return;
|
|
@@ -189,30 +227,37 @@ function onMessage(channel, data) {
|
|
|
189
227
|
}
|
|
190
228
|
|
|
191
229
|
if (message.method === 'channels.system.pong') {
|
|
192
|
-
if (message.params.channel_id === channelId.get(channel)
|
|
193
|
-
channelId.get(channel) == null) {
|
|
230
|
+
if (message.params.channel_id === channelId.get(channel) // Skip channelId check if channelId is not known yet
|
|
231
|
+
|| channelId.get(channel) == null) {
|
|
194
232
|
ping(channel);
|
|
195
233
|
}
|
|
196
234
|
|
|
197
235
|
return;
|
|
198
236
|
}
|
|
199
237
|
|
|
200
|
-
messageQueue.get(channel).push(message);
|
|
201
|
-
dequeueMessage(channel);
|
|
238
|
+
(_messageQueue$get2 = messageQueue.get(channel)) === null || _messageQueue$get2 === void 0 ? void 0 : _messageQueue$get2.push(message);
|
|
239
|
+
void dequeueMessage(channel);
|
|
202
240
|
}
|
|
203
241
|
|
|
204
|
-
export function call(channel, method, params) {
|
|
242
|
+
export async function call(channel, method, params) {
|
|
205
243
|
return new Promise((resolve, reject) => {
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
244
|
+
var _sequence$get, _sequence$set$get, _rpcCallbacks$get3;
|
|
245
|
+
|
|
246
|
+
const currentSequence = (_sequence$get = sequence.get(channel)) !== null && _sequence$get !== void 0 ? _sequence$get : 0;
|
|
247
|
+
const id = (_sequence$set$get = sequence.set(channel, currentSequence + 1).get(channel)) !== null && _sequence$set$get !== void 0 ? _sequence$set$get : 1;
|
|
248
|
+
(_rpcCallbacks$get3 = rpcCallbacks.get(channel)) === null || _rpcCallbacks$get3 === void 0 ? void 0 : _rpcCallbacks$get3.set(id, message => {
|
|
249
|
+
if (message.error != null) {
|
|
250
|
+
var _message$error$data;
|
|
209
251
|
|
|
210
|
-
if (message.error) {
|
|
211
252
|
const [{
|
|
212
253
|
message: details
|
|
213
|
-
} = {
|
|
214
|
-
|
|
254
|
+
} = {
|
|
255
|
+
message: ''
|
|
256
|
+
}] = (_message$error$data = message.error.data) !== null && _message$error$data !== void 0 ? _message$error$data : [];
|
|
257
|
+
return reject(new ChannelCallError(message.error.message + details));
|
|
215
258
|
}
|
|
259
|
+
|
|
260
|
+
return resolve(message.result);
|
|
216
261
|
});
|
|
217
262
|
send(channel, {
|
|
218
263
|
jsonrpc: '2.0',
|
|
@@ -222,19 +267,17 @@ export function call(channel, method, params) {
|
|
|
222
267
|
});
|
|
223
268
|
});
|
|
224
269
|
}
|
|
225
|
-
export function
|
|
226
|
-
websockets.get(channel).close();
|
|
227
|
-
clearTimeout(pingTimeoutId.get(channel));
|
|
228
|
-
clearTimeout(pongTimeoutId.get(channel));
|
|
229
|
-
}
|
|
230
|
-
export async function initialize(channel, _ref) {
|
|
270
|
+
export async function initialize(channel, connectionHandler, openHandler, _ref) {
|
|
231
271
|
let {
|
|
232
272
|
url,
|
|
233
273
|
...channelOptions
|
|
234
274
|
} = _ref;
|
|
235
|
-
options.set(channel,
|
|
275
|
+
options.set(channel, {
|
|
276
|
+
url,
|
|
277
|
+
...channelOptions
|
|
278
|
+
});
|
|
236
279
|
fsm.set(channel, {
|
|
237
|
-
handler:
|
|
280
|
+
handler: connectionHandler
|
|
238
281
|
});
|
|
239
282
|
eventEmitters.set(channel, new EventEmitter());
|
|
240
283
|
sequence.set(channel, 0);
|
|
@@ -242,8 +285,10 @@ export async function initialize(channel, _ref) {
|
|
|
242
285
|
messageQueue.set(channel, []);
|
|
243
286
|
const wsUrl = new URL(url);
|
|
244
287
|
Object.entries(channelOptions).filter(_ref2 => {
|
|
288
|
+
var _context;
|
|
289
|
+
|
|
245
290
|
let [key] = _ref2;
|
|
246
|
-
return !['sign', 'debug'].
|
|
291
|
+
return !_includesInstanceProperty(_context = ['sign', 'debug']).call(_context, key);
|
|
247
292
|
}).forEach(_ref3 => {
|
|
248
293
|
let [key, value] = _ref3;
|
|
249
294
|
return wsUrl.searchParams.set(pascalToSnake(key), value);
|
|
@@ -251,33 +296,38 @@ export async function initialize(channel, _ref) {
|
|
|
251
296
|
wsUrl.searchParams.set('protocol', 'json-rpc');
|
|
252
297
|
changeStatus(channel, 'connecting');
|
|
253
298
|
const ws = new W3CWebSocket(wsUrl.toString());
|
|
254
|
-
await new Promise((resolve, reject) =>
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
299
|
+
await new Promise((resolve, reject) => {
|
|
300
|
+
Object.assign(ws, {
|
|
301
|
+
onerror: reject,
|
|
302
|
+
onopen: async () => {
|
|
303
|
+
resolve();
|
|
304
|
+
changeStatus(channel, 'connected');
|
|
305
|
+
|
|
306
|
+
if (channelOptions.reconnectTx != null) {
|
|
307
|
+
enterState(channel, {
|
|
308
|
+
handler: openHandler
|
|
309
|
+
});
|
|
310
|
+
const signedTx = (await call(channel, 'channels.get.offchain_state', {})).signed_tx;
|
|
311
|
+
changeState(channel, signedTx);
|
|
312
|
+
}
|
|
313
|
+
|
|
314
|
+
ping(channel);
|
|
315
|
+
},
|
|
316
|
+
onclose: () => {
|
|
317
|
+
changeStatus(channel, 'disconnected');
|
|
318
|
+
const pingTimeoutIdValue = pingTimeoutId.get(channel);
|
|
319
|
+
const pongTimeoutIdValue = pongTimeoutId.get(channel);
|
|
320
|
+
if (pingTimeoutIdValue != null) clearTimeout(pingTimeoutIdValue);
|
|
321
|
+
if (pongTimeoutIdValue != null) clearTimeout(pongTimeoutIdValue);
|
|
322
|
+
},
|
|
323
|
+
onmessage: _ref4 => {
|
|
324
|
+
let {
|
|
325
|
+
data
|
|
326
|
+
} = _ref4;
|
|
327
|
+
return onMessage(channel, data);
|
|
265
328
|
}
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
},
|
|
269
|
-
onclose: () => {
|
|
270
|
-
changeStatus(channel, 'disconnected');
|
|
271
|
-
clearTimeout(pingTimeoutId.get(channel));
|
|
272
|
-
clearTimeout(pongTimeoutId.get(channel));
|
|
273
|
-
},
|
|
274
|
-
onmessage: _ref4 => {
|
|
275
|
-
let {
|
|
276
|
-
data
|
|
277
|
-
} = _ref4;
|
|
278
|
-
return onMessage(channel, data);
|
|
279
|
-
}
|
|
280
|
-
}));
|
|
329
|
+
});
|
|
330
|
+
});
|
|
281
331
|
websockets.set(channel, ws);
|
|
282
332
|
}
|
|
283
333
|
//# sourceMappingURL=internal.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/channel/internal.js"],"names":["JsonBig","pascalToSnake","awaitingConnection","awaitingReconnection","channelOpen","ChannelCallError","ChannelPingTimedOutError","UnknownChannelStateError","PING_TIMEOUT_MS","PONG_TIMEOUT_MS","options","WeakMap","status","state","fsm","websockets","eventEmitters","messageQueue","messageQueueLocked","actionQueue","actionQueueLocked","sequence","channelId","rpcCallbacks","pingTimeoutId","pongTimeoutId","fsmId","emit","channel","args","get","enterState","nextState","set","handler","enter","dequeueAction","changeStatus","newStatus","prevStatus","changeState","newState","send","message","debug","console","log","stringify","enqueueAction","guard","action","locked","queue","length","index","findIndex","item","filter","_","i","Promise","resolve","handleMessage","dequeueMessage","messages","shift","error","ping","clearTimeout","setTimeout","jsonrpc","method","params","disconnect","onMessage","data","parse","id","callback","delete","channel_id","push","call","reject","result","details","close","initialize","url","channelOptions","existingFsmId","EventEmitter","Map","wsUrl","URL","Object","entries","key","includes","forEach","value","searchParams","ws","W3CWebSocket","toString","assign","onerror","onopen","reconnectTx","signed_tx","onclose","onmessage"],"mappings":"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","sourcesContent":["/*\n * ISC License (ISC)\n * Copyright (c) 2018 aeternity developers\n *\n * Permission to use, copy, modify, and/or distribute this software for any\n * purpose with or without fee is hereby granted, provided that the above\n * copyright notice and this permission notice appear in all copies.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\n * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\n * AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\n * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\n * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\n * OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\n * PERFORMANCE OF THIS SOFTWARE.\n */\n\nimport { w3cwebsocket as W3CWebSocket } from 'websocket'\nimport { EventEmitter } from 'events'\nimport JsonBig from '../utils/json-big'\nimport { pascalToSnake } from '../utils/string'\nimport { awaitingConnection, awaitingReconnection, channelOpen } from './handlers'\nimport { ChannelCallError, ChannelPingTimedOutError, UnknownChannelStateError } from '../utils/errors'\n\n// Send ping message every 10 seconds\nconst PING_TIMEOUT_MS = 10000\n// Close connection if pong message is not received within 5 seconds\nconst PONG_TIMEOUT_MS = 5000\n\nexport const options = new WeakMap()\nexport const status = new WeakMap()\nexport const state = new WeakMap()\nconst fsm = new WeakMap()\nconst websockets = new WeakMap()\nexport const eventEmitters = new WeakMap()\nconst messageQueue = new WeakMap()\nconst messageQueueLocked = new WeakMap()\nconst actionQueue = new WeakMap()\nconst actionQueueLocked = new WeakMap()\nconst sequence = new WeakMap()\nexport const channelId = new WeakMap()\nconst rpcCallbacks = new WeakMap()\nconst pingTimeoutId = new WeakMap()\nconst pongTimeoutId = new WeakMap()\nexport const fsmId = new WeakMap()\n\nexport function emit (channel, ...args) {\n eventEmitters.get(channel).emit(...args)\n}\n\nfunction enterState (channel, nextState) {\n if (!nextState) {\n throw new UnknownChannelStateError()\n }\n fsm.set(channel, nextState)\n if (nextState.handler.enter) {\n nextState.handler.enter(channel)\n }\n dequeueAction(channel)\n}\n\nexport function changeStatus (channel, newStatus) {\n const prevStatus = status.get(channel)\n if (newStatus !== prevStatus) {\n status.set(channel, newStatus)\n emit(channel, 'statusChanged', newStatus)\n }\n}\n\nexport function changeState (channel, newState) {\n state.set(channel, newState)\n emit(channel, 'stateChanged', newState)\n}\n\nexport function send (channel, message) {\n const { debug = false } = options.get(channel)\n if (debug) console.log('Send message: ', message)\n websockets.get(channel).send(JsonBig.stringify(message))\n}\n\nexport function enqueueAction (channel, guard, action) {\n actionQueue.set(channel, [\n ...actionQueue.get(channel) || [],\n { guard, action }\n ])\n dequeueAction(channel)\n}\n\nasync function dequeueAction (channel) {\n const locked = actionQueueLocked.get(channel)\n const queue = actionQueue.get(channel) || []\n if (locked || !queue.length) {\n return\n }\n const state = fsm.get(channel)\n const index = queue.findIndex(item => item.guard(channel, state))\n if (index === -1) {\n return\n }\n actionQueue.set(channel, queue.filter((_, i) => index !== i))\n actionQueueLocked.set(channel, true)\n const nextState = await Promise.resolve(queue[index].action(channel, state))\n actionQueueLocked.set(channel, false)\n enterState(channel, nextState)\n}\n\nasync function handleMessage (channel, message) {\n const { handler, state } = fsm.get(channel)\n enterState(channel, await Promise.resolve(handler(channel, message, state)))\n}\n\nasync function dequeueMessage (channel) {\n if (messageQueueLocked.get(channel)) return\n const messages = messageQueue.get(channel)\n if (!messages.length) return\n messageQueueLocked.set(channel, true)\n while (messages.length) {\n const message = messages.shift()\n try {\n await handleMessage(channel, message)\n } catch (error) {\n console.error('Error handling incoming message:')\n console.error(message)\n console.error(error)\n }\n }\n messageQueueLocked.set(channel, false)\n}\n\nfunction ping (channel) {\n clearTimeout(pingTimeoutId.get(channel))\n clearTimeout(pongTimeoutId.get(channel))\n pingTimeoutId.set(channel, setTimeout(() => {\n send(channel, {\n jsonrpc: '2.0',\n method: 'channels.system',\n params: {\n action: 'ping'\n }\n })\n pongTimeoutId.set(channel, setTimeout(() => {\n disconnect(channel)\n emit(channel, 'error', new ChannelPingTimedOutError())\n }, PONG_TIMEOUT_MS))\n }, PING_TIMEOUT_MS))\n}\n\nfunction onMessage (channel, data) {\n const message = JsonBig.parse(data)\n const { debug = false } = options.get(channel)\n if (debug) console.log('Receive message: ', message)\n if (message.id) {\n const callback = rpcCallbacks.get(channel).get(message.id)\n try {\n callback(message)\n } finally {\n rpcCallbacks.get(channel).delete(message.id)\n }\n return\n }\n if (message.method === 'channels.message') {\n emit(channel, 'message', message.params.data.message)\n return\n }\n if (message.method === 'channels.system.pong') {\n if (\n (message.params.channel_id === channelId.get(channel)) ||\n // Skip channelId check if channelId is not known yet\n (channelId.get(channel) == null)\n ) {\n ping(channel)\n }\n return\n }\n messageQueue.get(channel).push(message)\n dequeueMessage(channel)\n}\n\nexport function call (channel, method, params) {\n return new Promise((resolve, reject) => {\n const id = sequence.set(channel, sequence.get(channel) + 1).get(channel)\n rpcCallbacks.get(channel).set(id, (message) => {\n if (message.result) return resolve(message.result)\n if (message.error) {\n const [{ message: details } = {}] = message.error.data || []\n return reject(new ChannelCallError(message.error.message + (details ? `: ${details}` : '')))\n }\n })\n send(channel, { jsonrpc: '2.0', method, id, params })\n })\n}\n\nexport function disconnect (channel) {\n websockets.get(channel).close()\n clearTimeout(pingTimeoutId.get(channel))\n clearTimeout(pongTimeoutId.get(channel))\n}\n\nexport async function initialize (channel, { url, ...channelOptions }) {\n options.set(channel, channelOptions)\n fsm.set(channel, {\n handler: channelOptions.existingFsmId ? awaitingReconnection : awaitingConnection\n })\n eventEmitters.set(channel, new EventEmitter())\n sequence.set(channel, 0)\n rpcCallbacks.set(channel, new Map())\n messageQueue.set(channel, [])\n\n const wsUrl = new URL(url)\n Object.entries(channelOptions)\n .filter(([key]) => !['sign', 'debug'].includes(key))\n .forEach(([key, value]) => wsUrl.searchParams.set(pascalToSnake(key), value))\n wsUrl.searchParams.set('protocol', 'json-rpc')\n changeStatus(channel, 'connecting')\n const ws = new W3CWebSocket(wsUrl.toString())\n await new Promise((resolve, reject) => Object.assign(ws, {\n onerror: reject,\n onopen: () => {\n resolve()\n changeStatus(channel, 'connected')\n if (channelOptions.reconnectTx) {\n enterState(channel, { handler: channelOpen })\n setTimeout(async () => changeState(channel,\n (await call(channel, 'channels.get.offchain_state', {})).signed_tx\n ))\n }\n ping(channel)\n },\n onclose: () => {\n changeStatus(channel, 'disconnected')\n clearTimeout(pingTimeoutId.get(channel))\n clearTimeout(pongTimeoutId.get(channel))\n },\n onmessage: ({ data }) => onMessage(channel, data)\n }))\n websockets.set(channel, ws)\n}\n"],"file":"internal.mjs"}
|
|
1
|
+
{"version":3,"file":"internal.mjs","names":["JsonBig","pascalToSnake","ChannelCallError","ChannelPingTimedOutError","UnknownChannelStateError","PING_TIMEOUT_MS","PONG_TIMEOUT_MS","options","WeakMap","status","state","fsm","websockets","eventEmitters","messageQueue","messageQueueLocked","actionQueue","actionQueueLocked","sequence","channelId","rpcCallbacks","pingTimeoutId","pongTimeoutId","fsmId","emit","channel","args","eventName","rest","get","enterState","nextState","set","handler","enter","dequeueAction","changeStatus","newStatus","prevStatus","changeState","newState","send","message","debug","console","log","stringify","locked","queue","Boolean","length","singleFsm","index","findIndex","action","guard","filter","_","i","Promise","resolve","enqueueAction","handleMessage","fsmState","st","dequeueMessage","messages","shift","error","disconnect","close","pingTimeoutIdValue","pongTimeoutIdValue","clearTimeout","ping","setTimeout","jsonrpc","method","params","onMessage","data","parse","id","callback","delete","channel_id","push","call","reject","currentSequence","details","result","initialize","connectionHandler","openHandler","url","channelOptions","EventEmitter","Map","wsUrl","URL","Object","entries","key","forEach","value","searchParams","ws","W3CWebSocket","toString","assign","onerror","onopen","reconnectTx","signedTx","signed_tx","onclose","onmessage"],"sources":["../../src/channel/internal.ts"],"sourcesContent":["/*\n * ISC License (ISC)\n * Copyright (c) 2018 aeternity developers\n *\n * Permission to use, copy, modify, and/or distribute this software for any\n * purpose with or without fee is hereby granted, provided that the above\n * copyright notice and this permission notice appear in all copies.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\n * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\n * AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\n * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\n * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\n * OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\n * PERFORMANCE OF THIS SOFTWARE.\n */\n\nimport { w3cwebsocket as W3CWebSocket } from 'websocket';\nimport { EventEmitter } from 'events';\nimport BigNumber from 'bignumber.js';\nimport type Channel from '.';\nimport JsonBig from '../utils/json-big';\nimport { pascalToSnake } from '../utils/string';\nimport { Encoded } from '../utils/encoder';\nimport {\n BaseError, ChannelCallError, ChannelPingTimedOutError, UnknownChannelStateError,\n} from '../utils/errors';\n\ninterface ChannelAction {\n guard: (channel: Channel, state?: ChannelFsm) => boolean;\n action: (channel: Channel, state?: ChannelFsm) => ChannelFsm;\n}\n\nexport type SignTxWithTag = (tag: string, tx: Encoded.Transaction, options?: object) => (\n Promise<Encoded.Transaction>\n);\n// TODO: SignTx shouldn't return number or null\nexport type SignTx = (tx: Encoded.Transaction, options?: object) => (\n Promise<Encoded.Transaction | number | null>\n);\n\nexport interface ChannelOptions {\n existingFsmId?: string;\n url: string;\n role: 'initiator' | 'responder';\n initiatorId: Encoded.AccountAddress;\n responderId: Encoded.AccountAddress;\n pushAmount: number;\n initiatorAmount: BigNumber;\n responderAmount: BigNumber;\n channelReserve?: BigNumber | number;\n signedTx?: string;\n ttl?: number;\n host: string;\n port: number;\n lockPeriod: number;\n existingChannelId?: string;\n offChainTx?: string;\n reconnectTx?: string;\n timeoutIdle?: number;\n timeoutFundingCreate?: number;\n timeoutFundingSign?: number;\n timeoutFundingLock?: number;\n timeoutSign?: number;\n timeoutAccept?: number;\n timeoutInitialized?: number;\n timeoutAwaitingOpen?: number;\n statePassword?: string;\n debug: boolean;\n sign: SignTxWithTag;\n offchainTx?: string;\n}\n\nexport interface ChannelHandler extends Function {\n enter?: Function;\n}\n\nexport interface ChannelState {\n signedTx: any;\n resolve: (r?: any) => void;\n reject: (e: BaseError) => void;\n sign: SignTx;\n handler?: ChannelHandler;\n onOnChainTx?: (tx: Encoded.Transaction) => void;\n onOwnWithdrawLocked?: () => void;\n onWithdrawLocked?: () => void;\n onOwnDepositLocked?: () => void;\n onDepositLocked?: () => void;\n closeTx?: string;\n}\n\nexport interface ChannelFsm {\n handler: ChannelHandler;\n state?: ChannelState | {\n resolve: Function;\n reject: Function;\n };\n}\n\nexport interface ChannelMessage {\n id?: number;\n jsonrpc: string;\n method: string;\n params: any;\n payload?: any;\n data?: any;\n error?: ChannelMessageError;\n}\n\ninterface ChannelMessageError {\n code: number;\n message: string;\n data: [{\n message: string;\n code: number;\n }];\n request: ChannelMessage;\n}\n\n// Send ping message every 10 seconds\nconst PING_TIMEOUT_MS = 10000;\n// Close connection if pong message is not received within 5 seconds\nconst PONG_TIMEOUT_MS = 5000;\n\n// TODO: move to Channel instance to avoid is-null checks and for easier debugging\nexport const options = new WeakMap<Channel, ChannelOptions>();\nexport const status = new WeakMap<Channel, string>();\nexport const state = new WeakMap<Channel, Encoded.Transaction>();\nconst fsm = new WeakMap<Channel, ChannelFsm>();\nconst websockets = new WeakMap<Channel, W3CWebSocket>();\nexport const eventEmitters = new WeakMap<Channel, EventEmitter>();\nconst messageQueue = new WeakMap<Channel, string[]>();\nconst messageQueueLocked = new WeakMap<Channel, boolean>();\nconst actionQueue = new WeakMap<Channel, ChannelAction[]>();\nconst actionQueueLocked = new WeakMap<Channel, boolean>();\nconst sequence = new WeakMap<Channel, number>();\nexport const channelId = new WeakMap<Channel, string>();\nconst rpcCallbacks = new WeakMap<Channel, Map<number, Function>>();\nconst pingTimeoutId = new WeakMap<Channel, NodeJS.Timeout>();\nconst pongTimeoutId = new WeakMap<Channel, NodeJS.Timeout>();\nexport const fsmId = new WeakMap<Channel, string>();\n\nexport function emit(channel: Channel, ...args: any[]): void {\n const [eventName, ...rest] = args;\n eventEmitters.get(channel)?.emit(eventName, ...rest);\n}\n\nfunction enterState(channel: Channel, nextState: ChannelFsm): void {\n if (nextState == null) {\n throw new UnknownChannelStateError();\n }\n fsm.set(channel, nextState);\n if (nextState?.handler?.enter != null) {\n nextState.handler.enter(channel);\n }\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n void dequeueAction(channel);\n}\n\nexport function changeStatus(channel: Channel, newStatus: string): void {\n const prevStatus = status.get(channel);\n if (newStatus !== prevStatus) {\n status.set(channel, newStatus);\n emit(channel, 'statusChanged', newStatus);\n }\n}\n\nexport function changeState(channel: Channel, newState: Encoded.Transaction): void {\n state.set(channel, newState);\n emit(channel, 'stateChanged', newState);\n}\n\nexport function send(channel: Channel, message: ChannelMessage): void {\n const debug: boolean = options.get(channel)?.debug ?? false;\n if (debug) console.log('Send message: ', message);\n\n websockets.get(channel)?.send(JsonBig.stringify(message));\n}\n\nasync function dequeueAction(channel: Channel): Promise<void> {\n const locked = actionQueueLocked.get(channel);\n const queue = actionQueue.get(channel) ?? [];\n if (Boolean(locked) || queue.length === 0) {\n return;\n }\n const singleFsm = fsm.get(channel);\n if (singleFsm == null) return;\n const index = queue.findIndex((action: ChannelAction) => action.guard(channel, singleFsm));\n if (index === -1) {\n return;\n }\n actionQueue.set(channel, queue.filter((_: ChannelAction, i: number) => index !== i));\n actionQueueLocked.set(channel, true);\n const nextState: ChannelFsm = await Promise.resolve(queue[index].action(channel, singleFsm));\n actionQueueLocked.set(channel, false);\n enterState(channel, nextState);\n}\n\nexport function enqueueAction(\n channel: Channel,\n guard: ChannelAction['guard'],\n action: ChannelAction['action'],\n): void {\n const queue = actionQueue.get(channel) ?? [];\n actionQueue.set(channel, [\n ...queue,\n { guard, action },\n ]);\n void dequeueAction(channel);\n}\n\nasync function handleMessage(channel: Channel, message: string): Promise<void> {\n const fsmState = fsm.get(channel);\n if (fsmState == null) throw new UnknownChannelStateError();\n const { handler, state: st } = fsmState;\n enterState(channel, await Promise.resolve(handler(channel, message, st)));\n}\n\nasync function dequeueMessage(channel: Channel): Promise<void> {\n const locked: boolean = messageQueueLocked.get(channel) ?? false;\n if (locked) return;\n const messages: string[] = messageQueue.get(channel) ?? [];\n if (messages.length === 0) return;\n messageQueueLocked.set(channel, true);\n while (messages.length > 0) {\n const message: string = messages.shift() ?? '';\n try {\n await handleMessage(channel, message);\n } catch (error) {\n console.error('Error handling incoming message:');\n console.error(message);\n console.error(error);\n }\n }\n messageQueueLocked.set(channel, false);\n}\n\nexport function disconnect(channel: Channel): void {\n websockets.get(channel)?.close();\n const pingTimeoutIdValue = pingTimeoutId.get(channel);\n const pongTimeoutIdValue = pongTimeoutId.get(channel);\n if (pingTimeoutIdValue != null) clearTimeout(pingTimeoutIdValue);\n if (pongTimeoutIdValue != null) clearTimeout(pongTimeoutIdValue);\n}\n\nfunction ping(channel: Channel): void {\n const pingTimeoutIdValue = pingTimeoutId.get(channel);\n const pongTimeoutIdValue = pongTimeoutId.get(channel);\n if (pingTimeoutIdValue != null) clearTimeout(pingTimeoutIdValue);\n if (pongTimeoutIdValue != null) clearTimeout(pongTimeoutIdValue);\n pingTimeoutId.set(channel, setTimeout(() => {\n send(channel, {\n jsonrpc: '2.0',\n method: 'channels.system',\n params: {\n action: 'ping',\n },\n });\n pongTimeoutId.set(channel, setTimeout(() => {\n disconnect(channel);\n emit(channel, 'error', new ChannelPingTimedOutError());\n }, PONG_TIMEOUT_MS));\n }, PING_TIMEOUT_MS));\n}\n\nfunction onMessage(channel: Channel, data: string): void {\n const message = JsonBig.parse(data);\n const debug: boolean = options.get(channel)?.debug ?? false;\n if (debug) console.log('Receive message: ', message);\n if (message.id != null) {\n const callback = rpcCallbacks.get(channel)?.get(message.id);\n try {\n callback?.(message);\n } finally {\n rpcCallbacks.get(channel)?.delete(message.id);\n }\n return;\n }\n if (message.method === 'channels.message') {\n emit(channel, 'message', message.params.data.message);\n return;\n }\n if (message.method === 'channels.system.pong') {\n if (\n (message.params.channel_id === channelId.get(channel))\n // Skip channelId check if channelId is not known yet\n || (channelId.get(channel) == null)\n ) {\n ping(channel);\n }\n return;\n }\n messageQueue.get(channel)?.push(message);\n void dequeueMessage(channel);\n}\n\nexport async function call(channel: Channel, method: string, params: any): Promise<any> {\n return new Promise((resolve, reject) => {\n const currentSequence: number = sequence.get(channel) ?? 0;\n const id = sequence.set(channel, currentSequence + 1).get(channel) ?? 1;\n rpcCallbacks.get(channel)?.set(\n id,\n (message: { result: PromiseLike<any>; error?: ChannelMessageError }) => {\n if (message.error != null) {\n const [{ message: details } = { message: '' }] = message.error.data ?? [];\n return reject(new ChannelCallError(message.error.message + details));\n }\n return resolve(message.result);\n },\n );\n send(channel, {\n jsonrpc: '2.0', method, id, params,\n });\n });\n}\n\nexport async function initialize(\n channel: Channel,\n connectionHandler: Function,\n openHandler: Function,\n { url, ...channelOptions }: ChannelOptions,\n): Promise<void> {\n options.set(channel, { url, ...channelOptions });\n fsm.set(channel, { handler: connectionHandler });\n eventEmitters.set(channel, new EventEmitter());\n sequence.set(channel, 0);\n rpcCallbacks.set(channel, new Map());\n messageQueue.set(channel, []);\n\n const wsUrl = new URL(url);\n Object.entries(channelOptions)\n .filter(([key]) => !['sign', 'debug'].includes(key))\n .forEach(([key, value]) => wsUrl.searchParams.set(pascalToSnake(key), value));\n wsUrl.searchParams.set('protocol', 'json-rpc');\n changeStatus(channel, 'connecting');\n const ws = new W3CWebSocket(wsUrl.toString());\n await new Promise<void>((resolve, reject) => {\n Object.assign(ws, {\n onerror: reject,\n onopen: async () => {\n resolve();\n changeStatus(channel, 'connected');\n if (channelOptions.reconnectTx != null) {\n enterState(channel, { handler: openHandler });\n const signedTx = (await call(channel, 'channels.get.offchain_state', {})).signed_tx;\n changeState(channel, signedTx);\n }\n ping(channel);\n },\n onclose: () => {\n changeStatus(channel, 'disconnected');\n const pingTimeoutIdValue = pingTimeoutId.get(channel);\n const pongTimeoutIdValue = pongTimeoutId.get(channel);\n if (pingTimeoutIdValue != null) clearTimeout(pingTimeoutIdValue);\n if (pongTimeoutIdValue != null) clearTimeout(pongTimeoutIdValue);\n },\n onmessage: ({ data }: { data: string }) => onMessage(channel, data),\n });\n });\n websockets.set(channel, ws);\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { Compiler as CompilerApi } from '../apis/compiler';
|
|
2
|
+
/**
|
|
3
|
+
* Contract Compiler
|
|
4
|
+
*
|
|
5
|
+
* This class include api call's related to contract compiler functionality.
|
|
6
|
+
* @category contract
|
|
7
|
+
* @example Compiler('COMPILER_URL')
|
|
8
|
+
*/
|
|
9
|
+
export default class Compiler extends CompilerApi {
|
|
10
|
+
/**
|
|
11
|
+
* @param compilerUrl - Url for compiler API
|
|
12
|
+
* @param options - Options
|
|
13
|
+
* @param options.ignoreVersion - Don't check compiler version
|
|
14
|
+
*/
|
|
15
|
+
constructor(compilerUrl: string, { ignoreVersion }?: {
|
|
16
|
+
ignoreVersion?: boolean;
|
|
17
|
+
});
|
|
18
|
+
}
|
|
@@ -0,0 +1,68 @@
|
|
|
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 } from "../apis/compiler/index.mjs";
|
|
18
|
+
import { genErrorFormatterPolicy, genVersionCheckPolicy } from "../utils/autorest.mjs";
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* Contract Compiler
|
|
22
|
+
*
|
|
23
|
+
* This class include api call's related to contract compiler functionality.
|
|
24
|
+
* @category contract
|
|
25
|
+
* @example Compiler('COMPILER_URL')
|
|
26
|
+
*/
|
|
27
|
+
export default class Compiler extends CompilerApi {
|
|
28
|
+
/**
|
|
29
|
+
* @param compilerUrl - Url for compiler API
|
|
30
|
+
* @param options - Options
|
|
31
|
+
* @param options.ignoreVersion - Don't check compiler version
|
|
32
|
+
*/
|
|
33
|
+
constructor(compilerUrl) {
|
|
34
|
+
let {
|
|
35
|
+
ignoreVersion
|
|
36
|
+
} = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
37
|
+
super(compilerUrl, {
|
|
38
|
+
allowInsecureConnection: true,
|
|
39
|
+
additionalPolicies: [genErrorFormatterPolicy(body => {
|
|
40
|
+
let message = '';
|
|
41
|
+
|
|
42
|
+
if ('reason' in body) {
|
|
43
|
+
message += ` ${body.reason}${body.parameter != null ? ` in ${body.parameter}` : '' // TODO: revising after improving documentation https://github.com/aeternity/aesophia_http/issues/78
|
|
44
|
+
}${body.info != null ? ` (${JSON.stringify(body.info)})` : ''}`;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
if (Array.isArray(body)) {
|
|
48
|
+
message += `\n${body.map(e => `${e.type}:${e.pos.line}:${e.pos.col}: ${e.message}${e.context != null ? `(${e.context})` : ''}`).map(e => e.trim()) // TODO: remove after fixing https://github.com/aeternity/aesophia_http/issues/80
|
|
49
|
+
.join('\n')}`;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
return message;
|
|
53
|
+
})]
|
|
54
|
+
});
|
|
55
|
+
|
|
56
|
+
if (ignoreVersion !== true) {
|
|
57
|
+
const versionPromise = this.aPIVersion().then(_ref => {
|
|
58
|
+
let {
|
|
59
|
+
apiVersion
|
|
60
|
+
} = _ref;
|
|
61
|
+
return apiVersion;
|
|
62
|
+
});
|
|
63
|
+
this.pipeline.addPolicy(genVersionCheckPolicy('compiler', '/api-version', versionPromise, '6.1.0', '7.0.0'));
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
}
|
|
68
|
+
//# sourceMappingURL=Compiler.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Compiler.mjs","names":["Compiler","CompilerApi","genErrorFormatterPolicy","genVersionCheckPolicy","constructor","compilerUrl","ignoreVersion","allowInsecureConnection","additionalPolicies","body","message","reason","parameter","info","JSON","stringify","Array","isArray","map","e","type","pos","line","col","context","trim","join","versionPromise","aPIVersion","then","apiVersion","pipeline","addPolicy"],"sources":["../../src/contract/Compiler.ts"],"sourcesContent":["/*\n * ISC License (ISC)\n * Copyright (c) 2022 aeternity developers\n *\n * Permission to use, copy, modify, and/or distribute this software for any\n * purpose with or without fee is hereby granted, provided that the above\n * copyright notice and this permission notice appear in all copies.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\n * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\n * AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\n * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\n * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\n * OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\n * PERFORMANCE OF THIS SOFTWARE.\n */\nimport { Compiler as CompilerApi, ErrorModel, CompilerError } from '../apis/compiler';\nimport { genErrorFormatterPolicy, genVersionCheckPolicy } from '../utils/autorest';\n\ntype GeneralCompilerError = ErrorModel & {\n info?: object;\n parameter?: string;\n};\n\n/**\n * Contract Compiler\n *\n * This class include api call's related to contract compiler functionality.\n * @category contract\n * @example Compiler('COMPILER_URL')\n */\nexport default class Compiler extends CompilerApi {\n /**\n * @param compilerUrl - Url for compiler API\n * @param options - Options\n * @param options.ignoreVersion - Don't check compiler version\n */\n constructor(compilerUrl: string, { ignoreVersion }: { ignoreVersion?: boolean } = {}) {\n super(compilerUrl, {\n allowInsecureConnection: true,\n additionalPolicies: [\n genErrorFormatterPolicy((body: GeneralCompilerError | CompilerError[]) => {\n let message = '';\n if ('reason' in body) {\n message += ` ${body.reason\n }${body.parameter != null ? ` in ${body.parameter}` : ''\n // TODO: revising after improving documentation https://github.com/aeternity/aesophia_http/issues/78\n }${body.info != null ? ` (${JSON.stringify(body.info)})` : ''}`;\n }\n if (Array.isArray(body)) {\n message += `\\n${body\n .map((e) => `${e.type}:${e.pos.line}:${e.pos.col}: ${e.message}${e.context != null ? `(${e.context})` : ''}`)\n .map((e) => e.trim()) // TODO: remove after fixing https://github.com/aeternity/aesophia_http/issues/80\n .join('\\n')}`;\n }\n return message;\n }),\n ],\n });\n if (ignoreVersion !== true) {\n const versionPromise = this.aPIVersion().then(({ apiVersion }) => apiVersion);\n this.pipeline.addPolicy(\n genVersionCheckPolicy('compiler', '/api-version', versionPromise, '6.1.0', '7.0.0'),\n );\n }\n }\n}\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;SACSA,QAAQ,IAAIC,W;SACZC,uB,EAAyBC,qB;;AAOlC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAMH,QAAN,SAAuBC,WAAvB,CAAmC;EAChD;AACF;AACA;AACA;AACA;EACEG,WAAW,CAACC,WAAD,EAA2E;IAAA,IAArD;MAAEC;IAAF,CAAqD,uEAAJ,EAAI;IACpF,MAAMD,WAAN,EAAmB;MACjBE,uBAAuB,EAAE,IADR;MAEjBC,kBAAkB,EAAE,CAClBN,uBAAuB,CAAEO,IAAD,IAAkD;QACxE,IAAIC,OAAO,GAAG,EAAd;;QACA,IAAI,YAAYD,IAAhB,EAAsB;UACpBC,OAAO,IAAK,IAAGD,IAAI,CAACE,MACnB,GAAEF,IAAI,CAACG,SAAL,IAAkB,IAAlB,GAA0B,OAAMH,IAAI,CAACG,SAAU,EAA/C,GAAmD,EAD3C,CAET;UACD,GAAEH,IAAI,CAACI,IAAL,IAAa,IAAb,GAAqB,KAAIC,IAAI,CAACC,SAAL,CAAeN,IAAI,CAACI,IAApB,CAA0B,GAAnD,GAAwD,EAAG,EAH9D;QAID;;QACD,IAAIG,KAAK,CAACC,OAAN,CAAcR,IAAd,CAAJ,EAAyB;UACvBC,OAAO,IAAK,KAAID,IAAI,CACjBS,GADa,CACRC,CAAD,IAAQ,GAAEA,CAAC,CAACC,IAAK,IAAGD,CAAC,CAACE,GAAF,CAAMC,IAAK,IAAGH,CAAC,CAACE,GAAF,CAAME,GAAI,KAAIJ,CAAC,CAACT,OAAQ,GAAES,CAAC,CAACK,OAAF,IAAa,IAAb,GAAqB,IAAGL,CAAC,CAACK,OAAQ,GAAlC,GAAuC,EAAG,EAD7F,EAEbN,GAFa,CAERC,CAAD,IAAOA,CAAC,CAACM,IAAF,EAFE,EAEQ;UAFR,CAGbC,IAHa,CAGR,IAHQ,CAGF,EAHd;QAID;;QACD,OAAOhB,OAAP;MACD,CAfsB,CADL;IAFH,CAAnB;;IAqBA,IAAIJ,aAAa,KAAK,IAAtB,EAA4B;MAC1B,MAAMqB,cAAc,GAAG,KAAKC,UAAL,GAAkBC,IAAlB,CAAuB;QAAA,IAAC;UAAEC;QAAF,CAAD;QAAA,OAAoBA,UAApB;MAAA,CAAvB,CAAvB;MACA,KAAKC,QAAL,CAAcC,SAAd,CACE7B,qBAAqB,CAAC,UAAD,EAAa,cAAb,EAA6BwB,cAA7B,EAA6C,OAA7C,EAAsD,OAAtD,CADvB;IAGD;EACF;;AAlC+C"}
|