crypto-aio 0.0.2 → 0.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/CHANGELOG.md +17 -0
- package/README.md +144 -14
- package/dist/adapters/avalanche/address.d.ts +15 -0
- package/dist/adapters/avalanche/address.js +74 -0
- package/dist/adapters/avalanche/address.js.map +1 -0
- package/dist/adapters/avalanche/api.d.ts +100 -0
- package/dist/adapters/avalanche/api.js +381 -0
- package/dist/adapters/avalanche/api.js.map +1 -0
- package/dist/adapters/avalanche/builder.d.ts +13 -0
- package/dist/adapters/avalanche/builder.js +336 -0
- package/dist/adapters/avalanche/builder.js.map +1 -0
- package/dist/adapters/avalanche/cb58.d.ts +7 -0
- package/dist/adapters/avalanche/cb58.js +49 -0
- package/dist/adapters/avalanche/cb58.js.map +1 -0
- package/dist/adapters/avalanche/chains.d.ts +21 -0
- package/dist/adapters/avalanche/chains.js +79 -0
- package/dist/adapters/avalanche/chains.js.map +1 -0
- package/dist/adapters/avalanche/codec.d.ts +94 -0
- package/dist/adapters/avalanche/codec.js +371 -0
- package/dist/adapters/avalanche/codec.js.map +1 -0
- package/dist/adapters/avalanche/context.d.ts +59 -0
- package/dist/adapters/avalanche/context.js +114 -0
- package/dist/adapters/avalanche/context.js.map +1 -0
- package/dist/adapters/avalanche/decode.d.ts +16 -0
- package/dist/adapters/avalanche/decode.js +101 -0
- package/dist/adapters/avalanche/decode.js.map +1 -0
- package/dist/adapters/avalanche/driver.d.ts +22 -0
- package/dist/adapters/avalanche/driver.js +81 -0
- package/dist/adapters/avalanche/driver.js.map +1 -0
- package/dist/adapters/avalanche/errors.d.ts +18 -0
- package/dist/adapters/avalanche/errors.js +61 -0
- package/dist/adapters/avalanche/errors.js.map +1 -0
- package/dist/adapters/avalanche/fees.d.ts +23 -0
- package/dist/adapters/avalanche/fees.js +105 -0
- package/dist/adapters/avalanche/fees.js.map +1 -0
- package/dist/adapters/avalanche/index.d.ts +19 -0
- package/dist/adapters/avalanche/index.js +8 -0
- package/dist/adapters/avalanche/index.js.map +1 -0
- package/dist/adapters/avalanche/network.d.ts +37 -0
- package/dist/adapters/avalanche/network.js +135 -0
- package/dist/adapters/avalanche/network.js.map +1 -0
- package/dist/adapters/avalanche/plugin.d.ts +21 -0
- package/dist/adapters/avalanche/plugin.js +46 -0
- package/dist/adapters/avalanche/plugin.js.map +1 -0
- package/dist/adapters/avalanche/presets.d.ts +6 -0
- package/dist/adapters/avalanche/presets.js +86 -0
- package/dist/adapters/avalanche/presets.js.map +1 -0
- package/dist/adapters/avalanche/proofs.d.ts +41 -0
- package/dist/adapters/avalanche/proofs.js +270 -0
- package/dist/adapters/avalanche/proofs.js.map +1 -0
- package/dist/adapters/avalanche/reader.d.ts +40 -0
- package/dist/adapters/avalanche/reader.js +231 -0
- package/dist/adapters/avalanche/reader.js.map +1 -0
- package/dist/adapters/avalanche/sdk.d.ts +182 -0
- package/dist/adapters/avalanche/sdk.js +21 -0
- package/dist/adapters/avalanche/sdk.js.map +1 -0
- package/dist/adapters/avalanche/types.d.ts +86 -0
- package/dist/{type/common.js → adapters/avalanche/types.js} +1 -1
- package/dist/adapters/avalanche/types.js.map +1 -0
- package/dist/adapters/evm/builder.d.ts +11 -0
- package/dist/adapters/evm/builder.js +326 -0
- package/dist/adapters/evm/builder.js.map +1 -0
- package/dist/adapters/evm/chains.d.ts +6 -0
- package/dist/adapters/evm/chains.js +203 -0
- package/dist/adapters/evm/chains.js.map +1 -0
- package/dist/adapters/evm/client.d.ts +84 -0
- package/dist/adapters/evm/client.js +335 -0
- package/dist/adapters/evm/client.js.map +1 -0
- package/dist/adapters/evm/decode.d.ts +35 -0
- package/dist/adapters/evm/decode.js +170 -0
- package/dist/adapters/evm/decode.js.map +1 -0
- package/dist/adapters/evm/driver.d.ts +8 -0
- package/dist/adapters/evm/driver.js +61 -0
- package/dist/adapters/evm/driver.js.map +1 -0
- package/dist/adapters/evm/errors.d.ts +20 -0
- package/dist/adapters/evm/errors.js +110 -0
- package/dist/adapters/evm/errors.js.map +1 -0
- package/dist/adapters/evm/ethers-client.d.ts +43 -0
- package/dist/adapters/evm/ethers-client.js +135 -0
- package/dist/adapters/evm/ethers-client.js.map +1 -0
- package/dist/adapters/evm/fees.d.ts +79 -0
- package/dist/adapters/evm/fees.js +234 -0
- package/dist/adapters/evm/fees.js.map +1 -0
- package/dist/adapters/evm/index.d.ts +20 -0
- package/dist/adapters/evm/index.js +11 -0
- package/dist/adapters/evm/index.js.map +1 -0
- package/dist/adapters/evm/network.d.ts +60 -0
- package/dist/adapters/evm/network.js +131 -0
- package/dist/adapters/evm/network.js.map +1 -0
- package/dist/adapters/evm/plugin.d.ts +36 -0
- package/dist/adapters/evm/plugin.js +102 -0
- package/dist/adapters/evm/plugin.js.map +1 -0
- package/dist/adapters/evm/presets.d.ts +2 -0
- package/dist/adapters/evm/presets.js +105 -0
- package/dist/adapters/evm/presets.js.map +1 -0
- package/dist/adapters/evm/proofs.d.ts +19 -0
- package/dist/adapters/evm/proofs.js +358 -0
- package/dist/adapters/evm/proofs.js.map +1 -0
- package/dist/adapters/evm/rawtx.d.ts +25 -0
- package/dist/adapters/evm/rawtx.js +176 -0
- package/dist/adapters/evm/rawtx.js.map +1 -0
- package/dist/adapters/evm/reader.d.ts +65 -0
- package/dist/adapters/evm/reader.js +292 -0
- package/dist/adapters/evm/reader.js.map +1 -0
- package/dist/adapters/evm/rpc.d.ts +39 -0
- package/dist/adapters/evm/rpc.js +152 -0
- package/dist/adapters/evm/rpc.js.map +1 -0
- package/dist/adapters/evm/tokens.d.ts +7 -0
- package/dist/adapters/evm/tokens.js +23 -0
- package/dist/adapters/evm/tokens.js.map +1 -0
- package/dist/adapters/evm/types.d.ts +255 -0
- package/dist/{type/account.js → adapters/evm/types.js} +1 -1
- package/dist/adapters/evm/types.js.map +1 -0
- package/dist/adapters/evm/web3-client.d.ts +23 -0
- package/dist/adapters/evm/web3-client.js +159 -0
- package/dist/adapters/evm/web3-client.js.map +1 -0
- package/dist/adapters/solana/builder.d.ts +18 -0
- package/dist/adapters/solana/builder.js +545 -0
- package/dist/adapters/solana/builder.js.map +1 -0
- package/dist/adapters/solana/chains.d.ts +13 -0
- package/dist/adapters/solana/chains.js +37 -0
- package/dist/adapters/solana/chains.js.map +1 -0
- package/dist/adapters/solana/decode.d.ts +111 -0
- package/dist/adapters/solana/decode.js +595 -0
- package/dist/adapters/solana/decode.js.map +1 -0
- package/dist/adapters/solana/driver.d.ts +15 -0
- package/dist/adapters/solana/driver.js +72 -0
- package/dist/adapters/solana/driver.js.map +1 -0
- package/dist/adapters/solana/errors.d.ts +36 -0
- package/dist/adapters/solana/errors.js +154 -0
- package/dist/adapters/solana/errors.js.map +1 -0
- package/dist/adapters/solana/fees.d.ts +68 -0
- package/dist/adapters/solana/fees.js +205 -0
- package/dist/adapters/solana/fees.js.map +1 -0
- package/dist/adapters/solana/heights.d.ts +47 -0
- package/dist/adapters/solana/heights.js +185 -0
- package/dist/adapters/solana/heights.js.map +1 -0
- package/dist/adapters/solana/history.d.ts +10 -0
- package/dist/adapters/solana/history.js +71 -0
- package/dist/adapters/solana/history.js.map +1 -0
- package/dist/adapters/solana/index.d.ts +16 -0
- package/dist/adapters/solana/index.js +9 -0
- package/dist/adapters/solana/index.js.map +1 -0
- package/dist/adapters/solana/keys.d.ts +13 -0
- package/dist/adapters/solana/keys.js +69 -0
- package/dist/adapters/solana/keys.js.map +1 -0
- package/dist/adapters/solana/network.d.ts +24 -0
- package/dist/adapters/solana/network.js +95 -0
- package/dist/adapters/solana/network.js.map +1 -0
- package/dist/adapters/solana/plugin.d.ts +18 -0
- package/dist/adapters/solana/plugin.js +41 -0
- package/dist/adapters/solana/plugin.js.map +1 -0
- package/dist/adapters/solana/presets.d.ts +2 -0
- package/dist/adapters/solana/presets.js +77 -0
- package/dist/adapters/solana/presets.js.map +1 -0
- package/dist/adapters/solana/programs.d.ts +44 -0
- package/dist/adapters/solana/programs.js +159 -0
- package/dist/adapters/solana/programs.js.map +1 -0
- package/dist/adapters/solana/proofs.d.ts +56 -0
- package/dist/adapters/solana/proofs.js +540 -0
- package/dist/adapters/solana/proofs.js.map +1 -0
- package/dist/adapters/solana/reader.d.ts +82 -0
- package/dist/adapters/solana/reader.js +326 -0
- package/dist/adapters/solana/reader.js.map +1 -0
- package/dist/adapters/solana/rpc.d.ts +102 -0
- package/dist/adapters/solana/rpc.js +301 -0
- package/dist/adapters/solana/rpc.js.map +1 -0
- package/dist/adapters/solana/tokens.d.ts +7 -0
- package/dist/adapters/solana/tokens.js +19 -0
- package/dist/adapters/solana/tokens.js.map +1 -0
- package/dist/adapters/solana/types.d.ts +121 -0
- package/dist/{type/lib-types.js → adapters/solana/types.js} +1 -1
- package/dist/adapters/solana/types.js.map +1 -0
- package/dist/adapters/solana/web3.d.ts +5 -0
- package/dist/adapters/solana/web3.js +83 -0
- package/dist/adapters/solana/web3.js.map +1 -0
- package/dist/adapters/solana/wire.d.ts +62 -0
- package/dist/adapters/solana/wire.js +168 -0
- package/dist/adapters/solana/wire.js.map +1 -0
- package/dist/adapters/ton/address.d.ts +43 -0
- package/dist/adapters/ton/address.js +168 -0
- package/dist/adapters/ton/address.js.map +1 -0
- package/dist/adapters/ton/api.d.ts +344 -0
- package/dist/adapters/ton/api.js +942 -0
- package/dist/adapters/ton/api.js.map +1 -0
- package/dist/adapters/ton/builder.d.ts +18 -0
- package/dist/adapters/ton/builder.js +701 -0
- package/dist/adapters/ton/builder.js.map +1 -0
- package/dist/adapters/ton/chains.d.ts +16 -0
- package/dist/adapters/ton/chains.js +39 -0
- package/dist/adapters/ton/chains.js.map +1 -0
- package/dist/adapters/ton/decode.d.ts +43 -0
- package/dist/adapters/ton/decode.js +219 -0
- package/dist/adapters/ton/decode.js.map +1 -0
- package/dist/adapters/ton/driver.d.ts +10 -0
- package/dist/adapters/ton/driver.js +117 -0
- package/dist/adapters/ton/driver.js.map +1 -0
- package/dist/adapters/ton/errors.d.ts +36 -0
- package/dist/adapters/ton/errors.js +89 -0
- package/dist/adapters/ton/errors.js.map +1 -0
- package/dist/adapters/ton/fees.d.ts +28 -0
- package/dist/adapters/ton/fees.js +121 -0
- package/dist/adapters/ton/fees.js.map +1 -0
- package/dist/adapters/ton/index.d.ts +16 -0
- package/dist/adapters/ton/index.js +9 -0
- package/dist/adapters/ton/index.js.map +1 -0
- package/dist/adapters/ton/messages.d.ts +157 -0
- package/dist/adapters/ton/messages.js +397 -0
- package/dist/adapters/ton/messages.js.map +1 -0
- package/dist/adapters/ton/native-client.d.ts +10 -0
- package/dist/adapters/ton/native-client.js +47 -0
- package/dist/adapters/ton/native-client.js.map +1 -0
- package/dist/adapters/ton/network.d.ts +58 -0
- package/dist/adapters/ton/network.js +207 -0
- package/dist/adapters/ton/network.js.map +1 -0
- package/dist/adapters/ton/plugin.d.ts +24 -0
- package/dist/adapters/ton/plugin.js +57 -0
- package/dist/adapters/ton/plugin.js.map +1 -0
- package/dist/adapters/ton/presets.d.ts +6 -0
- package/dist/adapters/ton/presets.js +94 -0
- package/dist/adapters/ton/presets.js.map +1 -0
- package/dist/adapters/ton/proofs.d.ts +66 -0
- package/dist/adapters/ton/proofs.js +813 -0
- package/dist/adapters/ton/proofs.js.map +1 -0
- package/dist/adapters/ton/reader.d.ts +194 -0
- package/dist/adapters/ton/reader.js +781 -0
- package/dist/adapters/ton/reader.js.map +1 -0
- package/dist/adapters/ton/tokens.d.ts +10 -0
- package/dist/adapters/ton/tokens.js +27 -0
- package/dist/adapters/ton/tokens.js.map +1 -0
- package/dist/adapters/ton/trace.d.ts +48 -0
- package/dist/adapters/ton/trace.js +277 -0
- package/dist/adapters/ton/trace.js.map +1 -0
- package/dist/adapters/ton/types.d.ts +105 -0
- package/dist/adapters/ton/types.js +3 -0
- package/dist/adapters/ton/types.js.map +1 -0
- package/dist/adapters/ton/wallets.d.ts +86 -0
- package/dist/adapters/ton/wallets.js +373 -0
- package/dist/adapters/ton/wallets.js.map +1 -0
- package/dist/adapters/tron/abi.d.ts +39 -0
- package/dist/adapters/tron/abi.js +110 -0
- package/dist/adapters/tron/abi.js.map +1 -0
- package/dist/adapters/tron/address.d.ts +20 -0
- package/dist/adapters/tron/address.js +110 -0
- package/dist/adapters/tron/address.js.map +1 -0
- package/dist/adapters/tron/builder.d.ts +12 -0
- package/dist/adapters/tron/builder.js +553 -0
- package/dist/adapters/tron/builder.js.map +1 -0
- package/dist/adapters/tron/chains.d.ts +12 -0
- package/dist/adapters/tron/chains.js +35 -0
- package/dist/adapters/tron/chains.js.map +1 -0
- package/dist/adapters/tron/codec.d.ts +10 -0
- package/dist/adapters/tron/codec.js +322 -0
- package/dist/adapters/tron/codec.js.map +1 -0
- package/dist/adapters/tron/decode.d.ts +50 -0
- package/dist/adapters/tron/decode.js +280 -0
- package/dist/adapters/tron/decode.js.map +1 -0
- package/dist/adapters/tron/driver.d.ts +12 -0
- package/dist/adapters/tron/driver.js +106 -0
- package/dist/adapters/tron/driver.js.map +1 -0
- package/dist/adapters/tron/errors.d.ts +74 -0
- package/dist/adapters/tron/errors.js +261 -0
- package/dist/adapters/tron/errors.js.map +1 -0
- package/dist/adapters/tron/fees.d.ts +49 -0
- package/dist/adapters/tron/fees.js +166 -0
- package/dist/adapters/tron/fees.js.map +1 -0
- package/dist/adapters/tron/http.d.ts +173 -0
- package/dist/adapters/tron/http.js +729 -0
- package/dist/adapters/tron/http.js.map +1 -0
- package/dist/adapters/tron/index.d.ts +16 -0
- package/dist/adapters/tron/index.js +15 -0
- package/dist/adapters/tron/index.js.map +1 -0
- package/dist/adapters/tron/network.d.ts +44 -0
- package/dist/adapters/tron/network.js +163 -0
- package/dist/adapters/tron/network.js.map +1 -0
- package/dist/adapters/tron/plugin.d.ts +17 -0
- package/dist/adapters/tron/plugin.js +39 -0
- package/dist/adapters/tron/plugin.js.map +1 -0
- package/dist/adapters/tron/presets.d.ts +5 -0
- package/dist/adapters/tron/presets.js +68 -0
- package/dist/adapters/tron/presets.js.map +1 -0
- package/dist/adapters/tron/proofs.d.ts +80 -0
- package/dist/adapters/tron/proofs.js +370 -0
- package/dist/adapters/tron/proofs.js.map +1 -0
- package/dist/adapters/tron/protobuf.d.ts +36 -0
- package/dist/adapters/tron/protobuf.js +90 -0
- package/dist/adapters/tron/protobuf.js.map +1 -0
- package/dist/adapters/tron/reader.d.ts +47 -0
- package/dist/adapters/tron/reader.js +203 -0
- package/dist/adapters/tron/reader.js.map +1 -0
- package/dist/adapters/tron/tokens.d.ts +7 -0
- package/dist/adapters/tron/tokens.js +14 -0
- package/dist/adapters/tron/tokens.js.map +1 -0
- package/dist/adapters/tron/types.d.ts +166 -0
- package/dist/adapters/tron/types.js +3 -0
- package/dist/adapters/tron/types.js.map +1 -0
- package/dist/adapters/utxo/address.d.ts +51 -0
- package/dist/adapters/utxo/address.js +341 -0
- package/dist/adapters/utxo/address.js.map +1 -0
- package/dist/adapters/utxo/builder.d.ts +35 -0
- package/dist/adapters/utxo/builder.js +380 -0
- package/dist/adapters/utxo/builder.js.map +1 -0
- package/dist/adapters/utxo/chains.d.ts +17 -0
- package/dist/adapters/utxo/chains.js +99 -0
- package/dist/adapters/utxo/chains.js.map +1 -0
- package/dist/adapters/utxo/codec.d.ts +120 -0
- package/dist/adapters/utxo/codec.js +408 -0
- package/dist/adapters/utxo/codec.js.map +1 -0
- package/dist/adapters/utxo/coinselect.d.ts +48 -0
- package/dist/adapters/utxo/coinselect.js +131 -0
- package/dist/adapters/utxo/coinselect.js.map +1 -0
- package/dist/adapters/utxo/context.d.ts +57 -0
- package/dist/adapters/utxo/context.js +118 -0
- package/dist/adapters/utxo/context.js.map +1 -0
- package/dist/adapters/utxo/decode.d.ts +14 -0
- package/dist/adapters/utxo/decode.js +85 -0
- package/dist/adapters/utxo/decode.js.map +1 -0
- package/dist/adapters/utxo/driver.d.ts +16 -0
- package/dist/adapters/utxo/driver.js +74 -0
- package/dist/adapters/utxo/driver.js.map +1 -0
- package/dist/adapters/utxo/ecc.d.ts +9 -0
- package/dist/adapters/utxo/ecc.js +26 -0
- package/dist/adapters/utxo/ecc.js.map +1 -0
- package/dist/adapters/utxo/errors.d.ts +52 -0
- package/dist/adapters/utxo/errors.js +191 -0
- package/dist/adapters/utxo/errors.js.map +1 -0
- package/dist/adapters/utxo/esplora.d.ts +79 -0
- package/dist/adapters/utxo/esplora.js +451 -0
- package/dist/adapters/utxo/esplora.js.map +1 -0
- package/dist/adapters/utxo/fees.d.ts +41 -0
- package/dist/adapters/utxo/fees.js +125 -0
- package/dist/adapters/utxo/fees.js.map +1 -0
- package/dist/adapters/utxo/index.d.ts +17 -0
- package/dist/adapters/utxo/index.js +8 -0
- package/dist/adapters/utxo/index.js.map +1 -0
- package/dist/adapters/utxo/network.d.ts +50 -0
- package/dist/adapters/utxo/network.js +165 -0
- package/dist/adapters/utxo/network.js.map +1 -0
- package/dist/adapters/utxo/plugin.d.ts +17 -0
- package/dist/adapters/utxo/plugin.js +41 -0
- package/dist/adapters/utxo/plugin.js.map +1 -0
- package/dist/adapters/utxo/presets.d.ts +12 -0
- package/dist/adapters/utxo/presets.js +47 -0
- package/dist/adapters/utxo/presets.js.map +1 -0
- package/dist/adapters/utxo/preview.d.ts +3 -0
- package/dist/adapters/utxo/preview.js +65 -0
- package/dist/adapters/utxo/preview.js.map +1 -0
- package/dist/adapters/utxo/proofs.d.ts +57 -0
- package/dist/adapters/utxo/proofs.js +331 -0
- package/dist/adapters/utxo/proofs.js.map +1 -0
- package/dist/adapters/utxo/rawtx.d.ts +59 -0
- package/dist/adapters/utxo/rawtx.js +234 -0
- package/dist/adapters/utxo/rawtx.js.map +1 -0
- package/dist/adapters/utxo/reader.d.ts +36 -0
- package/dist/adapters/utxo/reader.js +265 -0
- package/dist/adapters/utxo/reader.js.map +1 -0
- package/dist/adapters/utxo/sdk.d.ts +18 -0
- package/dist/adapters/utxo/sdk.js +17 -0
- package/dist/adapters/utxo/sdk.js.map +1 -0
- package/dist/adapters/utxo/signed-psbt.d.ts +36 -0
- package/dist/adapters/utxo/signed-psbt.js +428 -0
- package/dist/adapters/utxo/signed-psbt.js.map +1 -0
- package/dist/adapters/utxo/spend.d.ts +59 -0
- package/dist/adapters/utxo/spend.js +230 -0
- package/dist/adapters/utxo/spend.js.map +1 -0
- package/dist/adapters/utxo/types.d.ts +167 -0
- package/dist/adapters/utxo/types.js +3 -0
- package/dist/adapters/utxo/types.js.map +1 -0
- package/dist/core/assets/service.d.ts +18 -0
- package/dist/core/assets/service.js +69 -0
- package/dist/core/assets/service.js.map +1 -0
- package/dist/core/blockchain/default-ref.d.ts +4 -0
- package/dist/core/blockchain/default-ref.js +16 -0
- package/dist/core/blockchain/default-ref.js.map +1 -0
- package/dist/core/blockchain/handle.d.ts +200 -0
- package/dist/core/blockchain/handle.js +579 -0
- package/dist/core/blockchain/handle.js.map +1 -0
- package/dist/core/blockchain/internal.d.ts +19 -0
- package/dist/core/blockchain/internal.js +16 -0
- package/dist/core/blockchain/internal.js.map +1 -0
- package/dist/core/blockchain/mapping.d.ts +22 -0
- package/dist/core/blockchain/mapping.js +136 -0
- package/dist/core/blockchain/mapping.js.map +1 -0
- package/dist/core/config/env.d.ts +8 -0
- package/dist/core/config/env.js +60 -0
- package/dist/core/config/env.js.map +1 -0
- package/dist/core/config/merge.d.ts +26 -0
- package/dist/core/config/merge.js +144 -0
- package/dist/core/config/merge.js.map +1 -0
- package/dist/core/config/resolve.d.ts +12 -0
- package/dist/core/config/resolve.js +251 -0
- package/dist/core/config/resolve.js.map +1 -0
- package/dist/core/config/types.d.ts +165 -0
- package/dist/core/config/types.js +3 -0
- package/dist/core/config/types.js.map +1 -0
- package/dist/core/container/builtins.d.ts +4 -0
- package/dist/core/container/builtins.js +13 -0
- package/dist/core/container/builtins.js.map +1 -0
- package/dist/core/container/container.d.ts +69 -0
- package/dist/core/container/container.js +466 -0
- package/dist/core/container/container.js.map +1 -0
- package/dist/core/container/default.d.ts +15 -0
- package/dist/core/container/default.js +70 -0
- package/dist/core/container/default.js.map +1 -0
- package/dist/core/container/internals.d.ts +54 -0
- package/dist/core/container/internals.js +21 -0
- package/dist/core/container/internals.js.map +1 -0
- package/dist/core/container/pool.d.ts +27 -0
- package/dist/core/container/pool.js +77 -0
- package/dist/core/container/pool.js.map +1 -0
- package/dist/core/driver/types.d.ts +346 -0
- package/dist/core/driver/types.js +3 -0
- package/dist/core/driver/types.js.map +1 -0
- package/dist/core/errors/codes.d.ts +153 -0
- package/dist/core/errors/codes.js +49 -0
- package/dist/core/errors/codes.js.map +1 -0
- package/dist/core/errors/error.d.ts +66 -0
- package/dist/core/errors/error.js +129 -0
- package/dist/core/errors/error.js.map +1 -0
- package/dist/core/events/bus.d.ts +12 -0
- package/dist/core/events/bus.js +46 -0
- package/dist/core/events/bus.js.map +1 -0
- package/dist/core/events/logger.d.ts +13 -0
- package/dist/core/events/logger.js +42 -0
- package/dist/core/events/logger.js.map +1 -0
- package/dist/core/events/types.d.ts +131 -0
- package/dist/core/events/types.js +3 -0
- package/dist/core/events/types.js.map +1 -0
- package/dist/core/lifecycle/engine-rules.d.ts +107 -0
- package/dist/core/lifecycle/engine-rules.js +257 -0
- package/dist/core/lifecycle/engine-rules.js.map +1 -0
- package/dist/core/lifecycle/engine.d.ts +500 -0
- package/dist/core/lifecycle/engine.js +1732 -0
- package/dist/core/lifecycle/engine.js.map +1 -0
- package/dist/core/lifecycle/evaluate.d.ts +19 -0
- package/dist/core/lifecycle/evaluate.js +72 -0
- package/dist/core/lifecycle/evaluate.js.map +1 -0
- package/dist/core/lifecycle/intent.d.ts +11 -0
- package/dist/core/lifecycle/intent.js +88 -0
- package/dist/core/lifecycle/intent.js.map +1 -0
- package/dist/core/lifecycle/monitor.d.ts +138 -0
- package/dist/core/lifecycle/monitor.js +606 -0
- package/dist/core/lifecycle/monitor.js.map +1 -0
- package/dist/core/lifecycle/observations.d.ts +17 -0
- package/dist/core/lifecycle/observations.js +59 -0
- package/dist/core/lifecycle/observations.js.map +1 -0
- package/dist/core/lifecycle/reconcile.d.ts +58 -0
- package/dist/core/lifecycle/reconcile.js +112 -0
- package/dist/core/lifecycle/reconcile.js.map +1 -0
- package/dist/core/lifecycle/views.d.ts +49 -0
- package/dist/core/lifecycle/views.js +57 -0
- package/dist/core/lifecycle/views.js.map +1 -0
- package/dist/core/lifecycle/workers.d.ts +82 -0
- package/dist/core/lifecycle/workers.js +329 -0
- package/dist/core/lifecycle/workers.js.map +1 -0
- package/dist/core/model/address.d.ts +32 -0
- package/dist/core/model/address.js +43 -0
- package/dist/core/model/address.js.map +1 -0
- package/dist/core/model/amount.d.ts +25 -0
- package/dist/core/model/amount.js +102 -0
- package/dist/core/model/amount.js.map +1 -0
- package/dist/core/model/asset.d.ts +28 -0
- package/dist/core/model/asset.js +47 -0
- package/dist/core/model/asset.js.map +1 -0
- package/dist/core/model/capability.d.ts +3 -0
- package/dist/core/model/capability.js +18 -0
- package/dist/core/model/capability.js.map +1 -0
- package/dist/core/model/chain.d.ts +63 -0
- package/dist/core/model/chain.js +8 -0
- package/dist/core/model/chain.js.map +1 -0
- package/dist/core/model/fee.d.ts +36 -0
- package/dist/core/model/fee.js +17 -0
- package/dist/core/model/fee.js.map +1 -0
- package/dist/core/model/ids.d.ts +37 -0
- package/dist/core/model/ids.js +13 -0
- package/dist/core/model/ids.js.map +1 -0
- package/dist/core/model/intent.d.ts +63 -0
- package/dist/core/model/intent.js +81 -0
- package/dist/core/model/intent.js.map +1 -0
- package/dist/core/model/ordering.d.ts +20 -0
- package/dist/core/model/ordering.js +29 -0
- package/dist/core/model/ordering.js.map +1 -0
- package/dist/core/model/transaction.d.ts +116 -0
- package/dist/core/model/transaction.js +3 -0
- package/dist/core/model/transaction.js.map +1 -0
- package/dist/core/observe/scanner.d.ts +135 -0
- package/dist/core/observe/scanner.js +355 -0
- package/dist/core/observe/scanner.js.map +1 -0
- package/dist/core/ordering/reservations.d.ts +16 -0
- package/dist/core/ordering/reservations.js +53 -0
- package/dist/core/ordering/reservations.js.map +1 -0
- package/dist/core/ordering/sequence.d.ts +61 -0
- package/dist/core/ordering/sequence.js +155 -0
- package/dist/core/ordering/sequence.js.map +1 -0
- package/dist/core/registry/adapters.d.ts +10 -0
- package/dist/core/registry/adapters.js +56 -0
- package/dist/core/registry/adapters.js.map +1 -0
- package/dist/core/registry/assets.d.ts +18 -0
- package/dist/core/registry/assets.js +90 -0
- package/dist/core/registry/assets.js.map +1 -0
- package/dist/core/registry/chains.d.ts +10 -0
- package/dist/core/registry/chains.js +80 -0
- package/dist/core/registry/chains.js.map +1 -0
- package/dist/core/registry/plugin.d.ts +41 -0
- package/dist/core/registry/plugin.js +109 -0
- package/dist/core/registry/plugin.js.map +1 -0
- package/dist/core/registry/providers.d.ts +31 -0
- package/dist/core/registry/providers.js +43 -0
- package/dist/core/registry/providers.js.map +1 -0
- package/dist/core/registry/schemes.d.ts +30 -0
- package/dist/core/registry/schemes.js +84 -0
- package/dist/core/registry/schemes.js.map +1 -0
- package/dist/core/secret/fragments.d.ts +33 -0
- package/dist/core/secret/fragments.js +110 -0
- package/dist/core/secret/fragments.js.map +1 -0
- package/dist/core/secret/redact.d.ts +10 -0
- package/dist/core/secret/redact.js +110 -0
- package/dist/core/secret/redact.js.map +1 -0
- package/dist/core/secret/secret.d.ts +14 -0
- package/dist/core/secret/secret.js +42 -0
- package/dist/core/secret/secret.js.map +1 -0
- package/dist/core/signing/callback.d.ts +10 -0
- package/dist/core/signing/callback.js +22 -0
- package/dist/core/signing/callback.js.map +1 -0
- package/dist/core/signing/guard.d.ts +18 -0
- package/dist/core/signing/guard.js +72 -0
- package/dist/core/signing/guard.js.map +1 -0
- package/dist/core/signing/hd.d.ts +36 -0
- package/dist/core/signing/hd.js +167 -0
- package/dist/core/signing/hd.js.map +1 -0
- package/dist/core/signing/local.d.ts +48 -0
- package/dist/core/signing/local.js +190 -0
- package/dist/core/signing/local.js.map +1 -0
- package/dist/core/signing/orchestrator.d.ts +40 -0
- package/dist/core/signing/orchestrator.js +300 -0
- package/dist/core/signing/orchestrator.js.map +1 -0
- package/dist/core/signing/types.d.ts +64 -0
- package/dist/core/signing/types.js +3 -0
- package/dist/core/signing/types.js.map +1 -0
- package/dist/core/signing/wallet.d.ts +48 -0
- package/dist/core/signing/wallet.js +153 -0
- package/dist/core/signing/wallet.js.map +1 -0
- package/dist/core/store/clone.d.ts +25 -0
- package/dist/core/store/clone.js +71 -0
- package/dist/core/store/clone.js.map +1 -0
- package/dist/core/store/memory.d.ts +38 -0
- package/dist/core/store/memory.js +325 -0
- package/dist/core/store/memory.js.map +1 -0
- package/dist/core/store/types.d.ts +246 -0
- package/dist/core/store/types.js +117 -0
- package/dist/core/store/types.js.map +1 -0
- package/dist/core/transport/backoff.d.ts +8 -0
- package/dist/core/transport/backoff.js +27 -0
- package/dist/core/transport/backoff.js.map +1 -0
- package/dist/core/transport/circuit.d.ts +25 -0
- package/dist/core/transport/circuit.js +61 -0
- package/dist/core/transport/circuit.js.map +1 -0
- package/dist/core/transport/http-transport.d.ts +30 -0
- package/dist/core/transport/http-transport.js +1695 -0
- package/dist/core/transport/http-transport.js.map +1 -0
- package/dist/core/transport/rate-limit.d.ts +27 -0
- package/dist/core/transport/rate-limit.js +78 -0
- package/dist/core/transport/rate-limit.js.map +1 -0
- package/dist/core/transport/stale-view.d.ts +11 -0
- package/dist/core/transport/stale-view.js +17 -0
- package/dist/core/transport/stale-view.js.map +1 -0
- package/dist/core/transport/types.d.ts +144 -0
- package/dist/core/transport/types.js +6 -0
- package/dist/core/transport/types.js.map +1 -0
- package/dist/core/util/bytes.d.ts +9 -0
- package/dist/core/util/bytes.js +40 -0
- package/dist/core/util/bytes.js.map +1 -0
- package/dist/core/util/clock.d.ts +6 -0
- package/dist/core/util/clock.js +26 -0
- package/dist/core/util/clock.js.map +1 -0
- package/dist/core/util/freeze.d.ts +8 -0
- package/dist/core/util/freeze.js +31 -0
- package/dist/core/util/freeze.js.map +1 -0
- package/dist/core/util/json.d.ts +29 -0
- package/dist/core/util/json.js +165 -0
- package/dist/core/util/json.js.map +1 -0
- package/dist/core/util/names.d.ts +21 -0
- package/dist/core/util/names.js +46 -0
- package/dist/core/util/names.js.map +1 -0
- package/dist/index.d.ts +64 -14
- package/dist/index.js +105 -49
- package/dist/index.js.map +1 -1
- package/dist/native.d.ts +21 -0
- package/dist/native.js +44 -0
- package/dist/native.js.map +1 -0
- package/dist/testing/contracts/api.d.ts +12 -0
- package/dist/testing/contracts/api.js +58 -0
- package/dist/testing/contracts/api.js.map +1 -0
- package/dist/testing/contracts/cursors.d.ts +6 -0
- package/dist/testing/contracts/cursors.js +43 -0
- package/dist/testing/contracts/cursors.js.map +1 -0
- package/dist/testing/contracts/locks.d.ts +10 -0
- package/dist/testing/contracts/locks.js +63 -0
- package/dist/testing/contracts/locks.js.map +1 -0
- package/dist/testing/contracts/operations.d.ts +21 -0
- package/dist/testing/contracts/operations.js +718 -0
- package/dist/testing/contracts/operations.js.map +1 -0
- package/dist/testing/contracts/sequences.d.ts +6 -0
- package/dist/testing/contracts/sequences.js +68 -0
- package/dist/testing/contracts/sequences.js.map +1 -0
- package/dist/testing/env.d.ts +63 -0
- package/dist/testing/env.js +105 -0
- package/dist/testing/env.js.map +1 -0
- package/dist/testing/fake-chain.d.ts +118 -0
- package/dist/testing/fake-chain.js +536 -0
- package/dist/testing/fake-chain.js.map +1 -0
- package/dist/testing/fake-clock.d.ts +15 -0
- package/dist/testing/fake-clock.js +86 -0
- package/dist/testing/fake-clock.js.map +1 -0
- package/dist/testing/fake-driver.d.ts +15 -0
- package/dist/testing/fake-driver.js +458 -0
- package/dist/testing/fake-driver.js.map +1 -0
- package/dist/testing/fake-fetch.d.ts +32 -0
- package/dist/testing/fake-fetch.js +81 -0
- package/dist/testing/fake-fetch.js.map +1 -0
- package/dist/testing/fake-plugin.d.ts +30 -0
- package/dist/testing/fake-plugin.js +66 -0
- package/dist/testing/fake-plugin.js.map +1 -0
- package/dist/testing/faulty-store.d.ts +36 -0
- package/dist/testing/faulty-store.js +66 -0
- package/dist/testing/faulty-store.js.map +1 -0
- package/dist/testing/generation.d.ts +60 -0
- package/dist/testing/generation.js +252 -0
- package/dist/testing/generation.js.map +1 -0
- package/dist/testing/index.d.ts +28 -0
- package/dist/testing/index.js +51 -0
- package/dist/testing/index.js.map +1 -0
- package/package.json +188 -44
- package/dist/libs/eth/account.d.ts +0 -9
- package/dist/libs/eth/account.js +0 -58
- package/dist/libs/eth/account.js.map +0 -1
- package/dist/libs/eth/contract.d.ts +0 -2
- package/dist/libs/eth/contract.js +0 -7
- package/dist/libs/eth/contract.js.map +0 -1
- package/dist/libs/eth/index.d.ts +0 -20
- package/dist/libs/eth/index.js +0 -62
- package/dist/libs/eth/index.js.map +0 -1
- package/dist/libs/eth/transact.d.ts +0 -2
- package/dist/libs/eth/transact.js +0 -7
- package/dist/libs/eth/transact.js.map +0 -1
- package/dist/libs/index.d.ts +0 -1
- package/dist/libs/index.js +0 -18
- package/dist/libs/index.js.map +0 -1
- package/dist/tool/common.d.ts +0 -28
- package/dist/tool/common.js +0 -33
- package/dist/tool/common.js.map +0 -1
- package/dist/tool/eth-tools.d.ts +0 -3
- package/dist/tool/eth-tools.js +0 -33
- package/dist/tool/eth-tools.js.map +0 -1
- package/dist/tool/index.d.ts +0 -4
- package/dist/tool/index.js +0 -21
- package/dist/tool/index.js.map +0 -1
- package/dist/tool/logging.d.ts +0 -3
- package/dist/tool/logging.js +0 -11
- package/dist/tool/logging.js.map +0 -1
- package/dist/tool/options.d.ts +0 -4
- package/dist/tool/options.js +0 -28
- package/dist/tool/options.js.map +0 -1
- package/dist/type/account.d.ts +0 -9
- package/dist/type/account.js.map +0 -1
- package/dist/type/common.d.ts +0 -18
- package/dist/type/common.js.map +0 -1
- package/dist/type/index.d.ts +0 -3
- package/dist/type/index.js +0 -20
- package/dist/type/index.js.map +0 -1
- package/dist/type/lib-types.d.ts +0 -7
- package/dist/type/lib-types.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http.js","sourceRoot":"","sources":["../../../src/adapters/tron/http.ts"],"names":[],"mappings":";;;AA8BA,8BAEC;AAMD,kCAKC;AAsaD,kCAOC;AA2ZD,kCAmEC;AAt7BD;;;;;;;;GAQG;AACH,iDAA8C;AAC9C,mDAAsF;AAEtF,iDAAoE;AAGvD,QAAA,IAAI,GAAiB,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;AACxD,QAAA,OAAO,GAAiB,EAAE,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;AAC9D,QAAA,KAAK,GAAiB,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;AAC3E,QAAA,SAAS,GAAiB;IACrC,OAAO,EAAE,WAAW;IACpB,KAAK,EAAE,sBAAsB;CAC9B,CAAC;AAEF,6CAA6C;AACtC,MAAM,UAAU,GAAG,CAAC,IAAkB,EAAE,MAAoB,EAAgB,EAAE,CACnF,MAAM,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;AADzB,QAAA,UAAU,cACe;AAKtC,SAAgB,SAAS,CAAC,KAAa;IACrC,OAAO,IAAI,qBAAa,CAAC,sBAAsB,EAAE,aAAa,KAAK,mBAAmB,CAAC,CAAC;AAC1F,CAAC;AAED;;;GAGG;AACH,SAAgB,WAAW;IACzB,OAAO,IAAI,qBAAa,CACtB,sBAAsB,EACtB,oDAAoD,CACrD,CAAC;AACJ,CAAC;AAED,iFAAiF;AACjF,SAAS,mBAAmB,CAAC,KAAa;IACxC,OAAO,IAAI,qBAAa,CACtB,sBAAsB,EACtB,aAAa,KAAK,mBAAmB,EACrC;QACE,SAAS,EAAE,IAAI;KAChB,CACF,CAAC;AACJ,CAAC;AAED,MAAM,QAAQ,GAAG,CAAC,KAAc,EAAiB,EAAE,CACjD,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAEvE,SAAS,MAAM,CAAC,KAAc,EAAE,KAAa;IAC3C,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,MAAM,SAAS,CAAC,KAAK,CAAC,CAAC;IAC7C,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;GAGG;AACH,SAAS,IAAI,CAAC,KAAc,EAAE,KAAa;IACzC,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,IAAI,EAAE;QAAE,OAAO,KAAK,CAAC;IAC3D,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,EAAE,CAAC;QAC3E,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;IACvB,CAAC;IACD,MAAM,SAAS,CAAC,KAAK,CAAC,CAAC;AACzB,CAAC;AAED,6EAA6E;AAC7E,MAAM,OAAO,GAAG,CAAC,KAAc,EAAE,KAAa,EAAU,EAAE,CACxD,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;AAEhD,gEAAgE;AAChE,MAAM,SAAS,GAAG,EAAE,IAAI,GAAG,GAAG,EAAE,CAAC;AAEjC,4CAA4C;AAC5C,SAAS,MAAM,CAAC,KAAc,EAAE,KAAa;IAC3C,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IAC7B,IAAI,CAAC,GAAG,SAAS;QAAE,MAAM,SAAS,CAAC,KAAK,CAAC,CAAC;IAC1C,OAAO,CAAC,CAAC;AACX,CAAC;AAED;;;GAGG;AACH,MAAM,YAAY,GAAG,CAAC,KAAa,EAAW,EAAE,CAC7C,IAAsD,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;AAEpF,gFAAgF;AAChF,SAAS,MAAM,CAAC,KAAc,EAAE,KAAa;IAC3C,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IAC9B,IAAI,EAAE,GAAG,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC;QAAE,MAAM,SAAS,CAAC,KAAK,CAAC,CAAC;IACjE,OAAO,MAAM,CAAC,EAAE,CAAC,CAAC;AACpB,CAAC;AAED,SAAS,GAAG,CAAC,KAAc,EAAE,KAAa,EAAE,KAAc;IACxD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QACtE,MAAM,SAAS,CAAC,KAAK,CAAC,CAAC;IACzB,CAAC;IACD,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,CAAC,MAAM,KAAK,KAAK,GAAG,CAAC;QAAE,MAAM,SAAS,CAAC,KAAK,CAAC,CAAC;IAC9E,OAAO,KAAK,CAAC,WAAW,EAAE,CAAC;AAC7B,CAAC;AAED,MAAM,OAAO,GAAG,CAAC,KAAc,EAAW,EAAE,CAC1C,QAAQ,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC;AAErD;;;GAGG;AACH,MAAM,WAAW,GAAG,CAAC,GAAG,GAAG,GAAG,IAAI,CAAC;AAEnC,4FAA4F;AAE5F,MAAM,KAAK,GAAG,CAAC,KAAc,EAAW,EAAE,CACxC,OAAO,KAAK,KAAK,QAAQ;IACvB,CAAC,CAAC,KAAK,CAAC,WAAW,EAAE;IACrB,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QACpB,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC;QAClB,CAAC,CAAC,KAAK,CAAC;AAEd;;;GAGG;AACH,MAAM,SAAS,GAAG,EAAE,KAAK,EAAE,IAAI,EAAW,CAAC;AAC3C,6FAA6F;AAC7F,MAAM,UAAU,GAAG,EAAE,MAAM,EAAE,IAAI,EAAW,CAAC;AAE7C,MAAM,aAAa,GAAG,CAAC,MAAe,EAAW,EAAE,CACjD,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,KAAK,SAAS,IAAI,MAAM,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC;AAEjF,uFAAuF;AACvF,MAAM,OAAO,GACX,CAAC,KAAgC,EAAa,EAAE,CAChD,CAAC,MAAM,EAAE,EAAE;IACT,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;QAAE,OAAO,MAAM,CAAC;IACrC,IAAI,aAAa,CAAC,MAAM,CAAC;QAAE,OAAO,SAAS,CAAC;IAC5C,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,UAAU,CAAC;IACxD,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC;AACvB,CAAC,CAAC;AAEJ,MAAM,SAAS,GAAG,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE;IACnC,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS,CAAC;IAC/E,MAAM,GAAG,GAAG,MAAM,IAAI,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC;IAC9E,OAAO;QACL,EAAE,EAAE,KAAK,CAAC,MAAM,CAAC,OAAO,IAAI,IAAI,CAAC;QACjC,+EAA+E;QAC/E,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI;QACtC,MAAM,EAAE,KAAK,CAAC,GAAG,EAAE,UAAU,IAAI,IAAI,CAAC;QACtC,SAAS,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI;KAC7C,CAAC;AACJ,CAAC,CAAC,CAAC;AAEH;;;GAGG;AACH,MAAM,OAAO,GAAG,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE;IACjC,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;IAC/D,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;IACzD,OAAO;QACL,EAAE,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE,IAAI,IAAI,CAAC;QAC5B,KAAK,EAAE,MAAM,CAAC,WAAW,IAAI,IAAI;QACjC,0EAA0E;QAC1E,IAAI,EAAE,MAAM,CAAC,cAAc,IAAI,IAAI;QACnC,MAAM,EAAE,MAAM,CAAC,MAAM,IAAI,IAAI;QAC7B,OAAO,EAAE,OAAO,CAAC,MAAM,IAAI,IAAI;QAC/B,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CACrB,QAAQ,CAAC,GAAG,CAAC;YACX,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;YACrE,CAAC,CAAC,GAAG,CACR;KACF,CAAC;AACJ,CAAC,CAAC,CAAC;AAEH,MAAM,cAAc,GAAG,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE;IACxC,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACtF,OAAO;QACL,EAAE,EAAE,KAAK,CAAC,MAAM,CAAC,IAAI,IAAI,IAAI,CAAC;QAC9B,GAAG,EAAE,KAAK,CAAC,MAAM,CAAC,YAAY,IAAI,IAAI,CAAC;QACvC,GAAG,EAAE,GAAG,CAAC,WAAW,IAAI,IAAI;KAC7B,CAAC;AACJ,CAAC,CAAC,CAAC;AAEH,yFAAyF;AACzF,SAAS,YAAY,CAAC,OAAa;IACjC,OAAO,CACL,OAAO,CAAC,MAAM,KAAK,IAAI;QACvB,OAAO,CAAC,IAAI,KAAK,yBAAyB;QAC1C,WAAW,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,8BAA8B,CAChE,CAAC;AACJ,CAAC;AAED;;;;;;GAMG;AACH,MAAM,eAAe,GAAG,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE;IACzC,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;IAC7D,MAAM,EAAE,GAAG,QAAQ,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC;IAClE,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,QAAQ,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC;IACrF,OAAO;QACL,OAAO,EACL,OAAO,CAAC,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,SAAS;QACpF,GAAG,EAAE,GAAG,IAAI,IAAI;QAChB,GAAG,EAAE,KAAK,CAAC,MAAM,CAAC,eAAe,IAAI,IAAI,CAAC;KAC3C,CAAC;AACJ,CAAC,CAAC,CAAC;AAEH,sFAAsF;AACtF,MAAM,WAAW,GAAG,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IACvC,QAAQ,EAAE,KAAK,CAAC,MAAM,CAAC,gBAAgB,IAAI,IAAI,CAAC;CACjD,CAAC,CAAC,CAAC;AAEJ,SAAS,WAAW,CAAC,MAAe;IAClC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;QAAE,OAAO,MAAM,CAAC;IACrC,oEAAoE;IACpE,IAAI,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC;QAAE,OAAO,SAAS,CAAC;IAChF,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC;IAC5B,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,IAAI,IAAI,CAAC;IAC3C,oFAAoF;IACpF,8CAA8C;IAC9C,OAAO;QACL,MAAM,EAAE,KAAK,CAAC,KAAK,CAAC,MAAM,IAAI,IAAI,CAAC;QACnC,IAAI,EAAE,KAAK,CAAC,KAAK,CAAC,IAAI,IAAI,IAAI,CAAC;QAC/B,MAAM,EAAE,KAAK,CAAC,KAAK,CAAC,UAAU,IAAI,IAAI,CAAC;QACvC,SAAS,EAAE,KAAK,CAAC,KAAK,CAAC,SAAS,IAAI,IAAI,CAAC;QACzC,YAAY,EAAE,KAAK,CAAC,KAAK,CAAC,YAAY,IAAI,IAAI,CAAC;KAChD,CAAC;AACJ,CAAC;AAED,MAAM,WAAW,GAAwC;IACvD,kBAAkB,EAAE,SAAS;IAC7B,0BAA0B,EAAE,SAAS;IACrC,wCAAwC,EAAE,OAAO;IACjD,gCAAgC,EAAE,OAAO;IACzC,oCAAoC,EAAE,cAAc;IACpD,4BAA4B,EAAE,cAAc;IAC5C,iCAAiC,EAAE,eAAe;IAClD,qBAAqB,EAAE,WAAW;IAClC,UAAU,EAAE,WAAW;CACxB,CAAC;AAEF,6EAA6E;AACtE,MAAM,YAAY,GAAG,CAAC,IAAY,EAAyB,EAAE,CAClE,MAAM,CAAC,MAAM,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AADtD,QAAA,YAAY,gBAC0C;AAEnE,wEAAwE;AACxE,MAAM,OAAO,GACX,CAAC,GAAc,EAAa,EAAE,CAC9B,CAAC,MAAM,EAAE,EAAE,CACT,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;AAEpD;;;;;;;;;;;;;;;GAeG;AACH,KAAK,UAAU,IAAI,CACjB,SAAoB,EACpB,OAAoB,EACpB,IAAkB,EAClB,QAAoB;IAEpB,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,GAAG,IAAI,EAAE,GAAG,IAAI,CAAC;IACzC,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;IACxF,MAAM,OAAO,GAAgB;QAC3B,GAAG,IAAI;QACP,aAAa,EAAE,IAAI;QACnB,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACpC,CAAC;IACF,IAAI,CAAC;QACH,OAAO,MAAM,SAAS,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAChD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IACE,IAAI,CAAC,OAAO,KAAK,OAAO;YACxB,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO;YACrB,KAAK,YAAY,qBAAa;YAC9B,CAAC,KAAK,CAAC,SAAS,EAChB,CAAC;YACD,MAAM,IAAI,qBAAa,CACrB,sBAAsB,EACtB,iDAAiD,EACjD,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,CAC1D,CAAC;QACJ,CAAC;QACD,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC;AAsCD,sFAAsF;AACtF,MAAM,cAAc,GAAG,IAAI,GAAG,CAAC;IAC7B,mBAAmB;IACnB,cAAc;IACd,qBAAqB;IACrB,wCAAwC;IACxC,kCAAkC;IAClC,YAAY;IACZ,gBAAgB;IAChB,6BAA6B;CAC9B,CAAC,CAAC;AAqCH,SAAS,WAAW,CAAC,KAAc;IACjC,IAAI,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAChC,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IACrC,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,YAAY,EAAE,cAAc,CAAC,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC;IACxF,2EAA2E;IAC3E,OAAO;QACL,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,MAAM,IAAI,CAAC,EAAE,cAAc,CAAC;QAC/C,EAAE,EAAE,GAAG,CAAC,KAAK,CAAC,OAAO,EAAE,UAAU,EAAE,EAAE,CAAC;QACtC,QAAQ,EAAE,GAAG,CAAC,GAAG,CAAC,UAAU,EAAE,aAAa,EAAE,EAAE,CAAC;QAChD,SAAS,EAAE,MAAM,CAAC,GAAG,CAAC,SAAS,IAAI,CAAC,EAAE,iBAAiB,CAAC;KACzD,CAAC;AACJ,CAAC;AAED,SAAS,gBAAgB,CAAC,KAAc;IACtC,MAAM,EAAE,GAAG,MAAM,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC;IACxC,MAAM,GAAG,GACP,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,QAAQ,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC;IACnF,IAAI,GAAG,KAAK,SAAS,IAAI,OAAO,GAAG,KAAK,QAAQ;QAAE,MAAM,SAAS,CAAC,aAAa,CAAC,CAAC;IACjF,MAAM,EAAE,GAAG,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC;IACpC,IAAI,OAAO,EAAE,CAAC,YAAY,KAAK,QAAQ,IAAI,EAAE,CAAC,YAAY,CAAC,MAAM,GAAG,WAAW,EAAE,CAAC;QAChF,MAAM,SAAS,CAAC,cAAc,CAAC,CAAC;IAClC,CAAC;IACD,MAAM,MAAM,GAAG,GAAG,CAAC,EAAE,CAAC,YAAY,EAAE,cAAc,CAAC,CAAC;IACpD,0FAA0F;IAC1F,IAAI,IAAA,aAAK,EAAC,IAAA,eAAM,EAAC,IAAA,eAAO,EAAC,MAAM,CAAC,CAAC,CAAC,KAAK,EAAE;QAAE,MAAM,SAAS,CAAC,cAAc,CAAC,CAAC;IAC3E,OAAO;QACL,EAAE;QACF,MAAM;QACN,GAAG,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACnD,CAAC;AACJ,CAAC;AAED,SAAS,SAAS,CAAC,KAAc;IAC/B,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,EAAE,kBAAkB,CAAC,CAAC;IAC/C,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;IAClF,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;IACpD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;QAAE,MAAM,SAAS,CAAC,KAAK,CAAC,CAAC;IACjD,MAAM,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC;IACrC,IAAI,aAAa,KAAK,SAAS,IAAI,OAAO,aAAa,KAAK,QAAQ,EAAE,CAAC;QACrE,MAAM,SAAS,CAAC,gBAAgB,CAAC,CAAC;IACpC,CAAC;IACD,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,IAAI,IAAI,CAAC,MAAM,KAAK,QAAQ;QAAE,MAAM,SAAS,CAAC,QAAQ,CAAC,CAAC;IACrF,OAAO;QACL,EAAE,EAAE,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,gBAAgB,EAAE,EAAE,CAAC;QACtC,WAAW,EAAE,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,cAAc,CAAC;QACrD,cAAc,EAAE,MAAM,CAAC,IAAI,CAAC,cAAc,EAAE,iBAAiB,CAAC;QAC9D,GAAG,EAAE,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC;QAC7B,GAAG,CAAC,aAAa,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACzD,MAAM,EAAE,IAAI,CAAC,MAAM,KAAK,QAAQ;QAChC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;YACvB,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;YACjC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC;gBAAE,MAAM,SAAS,CAAC,YAAY,CAAC,CAAC;YAC9D,OAAO;gBACL,OAAO,EAAE,GAAG,CAAC,GAAG,CAAC,OAAO,EAAE,aAAa,EAAE,EAAE,CAAC;gBAC5C,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,WAAW,EAAE,EAAE,CAAC,CAAC;gBACtD,IAAI,EAAE,GAAG,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,UAAU,CAAC;aAC9D,CAAC;QACJ,CAAC,CAAC;KACH,CAAC;AACJ,CAAC;AAED,uFAAuF;AACvF,MAAM,WAAW,GAAG,IAAI,CAAC;AAEzB;;;GAGG;AACH,SAAgB,WAAW,CAAC,KAAc;IACxC,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,SAAS,CAAC;IAChD,IAAI,uBAAuB,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QACxC,MAAM,IAAI,GAAG,IAAA,mBAAW,EAAC,IAAA,eAAO,EAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;QACnE,IAAI,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC;YAAE,OAAO,IAAI,CAAC;IAC/C,CAAC;IACD,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC;AACrC,CAAC;AAED,wDAAwD;AACxD,SAAS,OAAO,CAAC,KAAc,EAAE,KAAa;IAC5C,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QACpE,MAAM,SAAS,CAAC,KAAK,CAAC,CAAC;IACzB,CAAC;IACD,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;AACtC,CAAC;AAED,0EAA0E;AAC1E,SAAS,WAAW,CAAC,KAAc,EAAE,KAAa;IAChD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QACtE,MAAM,SAAS,CAAC,KAAK,CAAC,CAAC;IACzB,CAAC;IACD,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;AACvB,CAAC;AAED,4FAA4F;AAE5F,MAAa,OAAO;IACT,UAAU,CAAY;IAE/B,YAAY,SAAoB;QAC9B,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;IAC9B,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,IAAI,CAAC,IAAY,EAAE,IAAU,EAAE,IAAkB;QACrD,MAAM,MAAM,GAAG,MAAM,IAAI,CACvB,IAAI,CAAC,UAAU,EACf,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,EAC3C,IAAI,EACJ,IAAA,oBAAY,EAAC,IAAI,CAAC,CACnB,CAAC;QACF,IAAI,QAAQ,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;YACnD,MAAM,IAAI,qBAAa,CAAC,WAAW,EAAE,iCAAiC,IAAI,EAAE,EAAE;gBAC5E,SAAS,EAAE,IAAI;gBACf,GAAG,CAAC,IAAI,CAAC,OAAO,KAAK,WAAW,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aAC7D,CAAC,CAAC;QACL,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,qFAAqF;IACrF,KAAK,CAAC,KAAK,CACT,KAAuB,EACvB,GAAgC,EAChC,IAAkB;QAElB,MAAM,IAAI,GAAG,KAAK,KAAK,MAAM,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,0BAA0B,CAAC;QAChF,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,IAAI,CAC5B,IAAI,EACJ,EAAE,GAAG,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,GAAG,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,EAC9E,IAAI,CACL,CAAC;QACF,MAAM,MAAM,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC;QACnC,IAAI,MAAM,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,MAAM,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;YAC/D,MAAM,SAAS,CAAC,cAAc,CAAC,CAAC;QAClC,CAAC;QACD,IAAI,MAAM,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,MAAM,CAAC,EAAE,KAAK,GAAG,CAAC,WAAW,EAAE,EAAE,CAAC;YACzE,MAAM,SAAS,CAAC,UAAU,CAAC,CAAC;QAC9B,CAAC;QACD,IAAI,GAAG,KAAK,SAAS,IAAI,MAAM,KAAK,IAAI;YAAE,MAAM,SAAS,CAAC,YAAY,CAAC,CAAC;QACxE,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,qBAAqB,CACzB,MAAc,EACd,IAAkB;QAMlB,IAAI,MAAM,KAAK,EAAE,EAAE,CAAC;YAClB,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC;YACnD,OAAO,OAAO,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;QAC3E,CAAC;QACD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,IAAI,CAC5B,kBAAkB,EAClB,EAAE,SAAS,EAAE,MAAM,CAAC,QAAQ,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,EAC9C,IAAI,CACL,CAAC;QACF,MAAM,MAAM,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC;QACnC,IAAI,MAAM,KAAK,IAAI;YAAE,OAAO,IAAI,CAAC;QACjC,IAAI,MAAM,CAAC,MAAM,KAAK,MAAM;YAAE,MAAM,SAAS,CAAC,cAAc,CAAC,CAAC;QAC9D,MAAM,IAAI,GAAI,MAAe,CAAC,YAAY,IAAI,EAAE,CAAC;QACjD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;YAAE,MAAM,SAAS,CAAC,cAAc,CAAC,CAAC;QAC1D,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;QAChD,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,IAAI,CACjC,sCAAsC,EACtC,EAAE,GAAG,EAAE,YAAY,CAAC,MAAM,CAAC,EAAE,EAC7B,IAAI,CACL,CAAC;QACF,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC;YAAE,MAAM,SAAS,CAAC,mBAAmB,CAAC,CAAC;QACtE,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACzC,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,KAAK,MAAM,CAAC;YAAE,MAAM,SAAS,CAAC,mBAAmB,CAAC,CAAC;QACtF,qFAAqF;QACrF,gCAAgC;QAChC,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACnD,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAClD,IACE,GAAG,CAAC,IAAI,KAAK,YAAY,CAAC,MAAM;YAChC,SAAS,CAAC,IAAI,KAAK,KAAK,CAAC,MAAM;YAC/B,KAAK,CAAC,MAAM,KAAK,YAAY,CAAC,MAAM;YACpC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EACjC,CAAC;YACD,MAAM,IAAI,qBAAa,CACrB,uBAAuB,EACvB,SAAS,MAAM,2CAA2C,EAC1D,EAAE,SAAS,EAAE,IAAI,EAAE,CACpB,CAAC;QACJ,CAAC;QACD,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC;IACzC,CAAC;IAED,KAAK,CAAC,eAAe,CAAC,IAAkB;QACtC,MAAM,MAAM,GAAG,MAAM,CACnB,MAAM,IAAI,CAAC,IAAI,CAAC,4BAA4B,EAAE,EAAE,EAAE,IAAI,CAAC,EACvD,YAAY,CACb,CAAC;QACF,MAAM,IAAI,GAAG,MAAM,CAAC,cAAc,CAAC;QACnC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;YAAE,MAAM,SAAS,CAAC,kBAAkB,CAAC,CAAC;QAC9D,mFAAmF;QACnF,uEAAuE;QACvE,MAAM,MAAM,GAAG,IAAI,GAAG,EAAkB,CAAC;QACzC,KAAK,MAAM,KAAK,IAAI,IAAI,EAAE,CAAC;YACzB,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,EAAE,iBAAiB,CAAC,CAAC;YAC9C,IAAI,OAAO,IAAI,CAAC,GAAG,KAAK,QAAQ;gBAAE,MAAM,SAAS,CAAC,iBAAiB,CAAC,CAAC;YACrE,IAAI,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;gBACjC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;YACtD,CAAC;QACH,CAAC;QACD,MAAM,QAAQ,GAAG,CAAC,GAAW,EAAU,EAAE;YACvC,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAC9B,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,EAAE;gBAAE,MAAM,SAAS,CAAC,GAAG,CAAC,CAAC;YAC9D,OAAO,KAAK,CAAC;QACf,CAAC,CAAC;QACF,OAAO;YACL,cAAc,EAAE,QAAQ,CAAC,mBAAmB,CAAC;YAC7C,SAAS,EAAE,QAAQ,CAAC,cAAc,CAAC;YACnC,gBAAgB,EAAE,MAAM,CAAC,GAAG,CAAC,qBAAqB,CAAC,IAAI,EAAE;YACzD,mCAAmC,EACjC,MAAM,CAAC,GAAG,CAAC,wCAAwC,CAAC,IAAI,EAAE;YAC5D,6BAA6B,EAAE,MAAM,CAAC,GAAG,CAAC,kCAAkC,CAAC,IAAI,EAAE;YACnF,OAAO,EAAE,MAAM,CAAC,GAAG,CAAC,YAAY,CAAC,IAAI,EAAE;YACvC,WAAW,EAAE,QAAQ,CAAC,gBAAgB,CAAC;YACvC,wBAAwB,EAAE,MAAM,CAAC,GAAG,CAAC,6BAA6B,CAAC,KAAK,EAAE;SAC3E,CAAC;IACJ,CAAC;IAED,mEAAmE;IACnE,KAAK,CAAC,OAAO,CACX,UAAkB,EAClB,IAAkB;QAElB,MAAM,MAAM,GAAG,MAAM,CACnB,MAAM,IAAI,CAAC,IAAI,CAAC,oBAAoB,EAAE,EAAE,OAAO,EAAE,UAAU,EAAE,EAAE,IAAI,CAAC,EACpE,SAAS,CACV,CAAC;QACF,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;QAC5E,IACE,OAAO,MAAM,CAAC,OAAO,KAAK,QAAQ;YAClC,MAAM,CAAC,OAAO,CAAC,WAAW,EAAE,KAAK,UAAU,CAAC,WAAW,EAAE,EACzD,CAAC;YACD,MAAM,SAAS,CAAC,iBAAiB,CAAC,CAAC;QACrC,CAAC;QACD,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,SAAS,CAAC,EAAE,CAAC;IACvE,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,UAAkB,EAAE,IAAkB;QACpD,MAAM,CAAC,GAAG,MAAM,CACd,MAAM,IAAI,CAAC,IAAI,CAAC,4BAA4B,EAAE,EAAE,OAAO,EAAE,UAAU,EAAE,EAAE,IAAI,CAAC,EAC5E,mBAAmB,CACpB,CAAC;QACF,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAChC,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,aAAa,EAAE,EAAE,EAAE,eAAe,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;QAClF,CAAC;QACD,MAAM,IAAI,GAAG,CAAC,KAAc,EAAE,IAAa,EAAE,KAAa,EAAU,EAAE;YACpE,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;YAC3D,OAAO,KAAK,GAAG,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;QACjC,CAAC,CAAC;QACF,OAAO;YACL,SAAS,EAAE,IAAI;YACf,aAAa,EAAE,IAAI,CAAC,CAAC,CAAC,YAAY,EAAE,CAAC,CAAC,WAAW,EAAE,gBAAgB,CAAC;YACpE,eAAe,EAAE,IAAI,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,OAAO,EAAE,WAAW,CAAC;YACzD,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,UAAU,EAAE,QAAQ,CAAC;SACpD,CAAC;IACJ,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,YAAY,CAChB,QAAgB,EAChB,WAAmB,EACnB,IAAY,EACZ,IAAkB;QAElB,MAAM,MAAM,GAAG,MAAM,CACnB,MAAM,IAAI,CAAC,IAAI,CACb,iCAAiC,EACjC,EAAE,aAAa,EAAE,QAAQ,EAAE,gBAAgB,EAAE,WAAW,EAAE,IAAI,EAAE,EAChE,IAAI,CACL,EACD,eAAe,CAChB,CAAC;QACF,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,sBAAsB,CAAC,CAAC;QAC7D,IAAI,MAAM,CAAC,MAAM,KAAK,IAAI,EAAE,CAAC;YAC3B,IAAI,YAAY,CAAC,MAAM,CAAC;gBAAE,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC;YACzD,MAAM,IAAI,qBAAa,CAAC,WAAW,EAAE,kCAAkC,EAAE;gBACvE,SAAS,EAAE,IAAI;aAChB,CAAC,CAAC;QACL,CAAC;QACD,MAAM,EAAE,GACN,MAAM,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC;QACpF,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,QAAQ,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC;QACrF,IAAI,GAAG,KAAK,QAAQ,EAAE,CAAC;YACrB,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,WAAW,EAAE,aAAa,CAAC,EAAE,CAAC;QAChF,CAAC;QACD,MAAM,GAAG,GAAG,MAAM,CAAC,eAAe,CAAC;QACnC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC;YAAE,MAAM,SAAS,CAAC,iBAAiB,CAAC,CAAC;QAChF,iFAAiF;QACjF,oFAAoF;QACpF,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC;QACvD,IAAI,MAAM,KAAK,EAAE;YAAE,MAAM,SAAS,CAAC,aAAa,CAAC,CAAC;QAClD,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAC;IACxE,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,cAAc,CAAC,UAAkB,EAAE,IAAkB;QACzD,MAAM,MAAM,GAAG,MAAM,CACnB,MAAM,IAAI,CAAC,IAAI,CAAC,qBAAqB,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE,IAAI,CAAC,EACnE,UAAU,CACX,CAAC;QACF,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,KAAK,CAAC;QACnD,uEAAuE;QACvE,wCAAwC;QACxC,MAAM,OAAO,GAAG,MAAM,CAAC,gBAAgB,CAAC;QACxC,IACE,OAAO,OAAO,KAAK,QAAQ;YAC3B,OAAO,CAAC,WAAW,EAAE,KAAK,UAAU,CAAC,WAAW,EAAE,EAClD,CAAC;YACD,MAAM,SAAS,CAAC,UAAU,CAAC,CAAC;QAC9B,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,YAAY,CAAC,KAAa,EAAE,IAAkB;QAClD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,sBAAsB,EAAE,EAAE,WAAW,EAAE,KAAK,EAAE,EAAE,IAAI,CAAC,CAAC;QACrF,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;YAAE,MAAM,mBAAmB,CAAC,kBAAkB,CAAC,CAAC;QACrE,IAAI,MAAM,CAAC,MAAM,KAAK,IAAI;YAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;QACtD,IAAI,OAAO,MAAM,CAAC,IAAI,KAAK,QAAQ;YAAE,MAAM,mBAAmB,CAAC,gBAAgB,CAAC,CAAC;QACjF,MAAM,OAAO,GAAG,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAC5C,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;IACjF,CAAC;IAED,uFAAuF;IACvF,KAAK,CAAC,WAAW,CACf,KAAuB,EACvB,EAAU,EACV,IAAkB;QAElB,MAAM,IAAI,GACR,KAAK,KAAK,MAAM;YACd,CAAC,CAAC,4BAA4B;YAC9B,CAAC,CAAC,oCAAoC,CAAC;QAC3C,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC;QAC1D,IAAI,OAAO,CAAC,MAAM,CAAC;YAAE,OAAO,IAAI,CAAC;QACjC,MAAM,EAAE,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAC;QACpC,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,WAAW,EAAE;YAAE,MAAM,SAAS,CAAC,gBAAgB,CAAC,CAAC;QAClE,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,KAAK,CAAC,eAAe,CACnB,KAAuB,EACvB,EAAU,EACV,IAAkB;QAElB,MAAM,IAAI,GACR,KAAK,KAAK,MAAM;YACd,CAAC,CAAC,gCAAgC;YAClC,CAAC,CAAC,wCAAwC,CAAC;QAC/C,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC;QAC1D,IAAI,OAAO,CAAC,MAAM,CAAC;YAAE,OAAO,IAAI,CAAC;QACjC,MAAM,IAAI,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC;QAC/B,IAAI,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC,WAAW,EAAE;YAAE,MAAM,SAAS,CAAC,gBAAgB,CAAC,CAAC;QACpE,OAAO,IAAI,CAAC;IACd,CAAC;IAED,6EAA6E;IAC7E,KAAK,CAAC,OAAO,CAAC,EAAU,EAAE,IAAkB;QAC1C,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,IAAI,CAC5B,mCAAmC,EACnC,EAAE,KAAK,EAAE,EAAE,EAAE,EACb,IAAI,CACL,CAAC;QACF,IAAI,OAAO,CAAC,MAAM,CAAC;YAAE,OAAO,IAAI,CAAC;QACjC,MAAM,EAAE,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAC;QACpC,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,WAAW,EAAE;YAAE,MAAM,SAAS,CAAC,gBAAgB,CAAC,CAAC;QAClE,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,uFAAuF;IACvF,KAAK,CAAC,QAAQ,CAAC,GAAoB,EAAE,IAAkB;QACrD,MAAM,MAAM,GAAG,OAAO,GAAG,KAAK,QAAQ,CAAC;QACvC,MAAM,MAAM,GAAG,MAAM,CACnB,MAAM,IAAI,CAAC,IAAI,CACb,UAAU,EACV;YACE,OAAO,EAAE,KAAK;YACd,EAAE,EAAE,CAAC;YACL,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,sBAAsB;YAC9D,MAAM,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,EAAE,KAAK,CAAC;SAC/D,EACD,IAAI,CACL,EACD,iBAAiB,CAClB,CAAC;QACF,IAAI,MAAM,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;YAC/B,MAAM,IAAI,qBAAa,CAAC,WAAW,EAAE,oCAAoC,EAAE;gBACzE,SAAS,EAAE,IAAI;aAChB,CAAC,CAAC;QACL,CAAC;QACD,IAAI,MAAM,CAAC,MAAM,KAAK,IAAI;YAAE,OAAO,IAAI,CAAC;QACxC,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;QACtD,MAAM,GAAG,GAAG,KAAK,CAAC,YAAY,CAAC;QAC/B,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC;YAAE,MAAM,SAAS,CAAC,uBAAuB,CAAC,CAAC;QAClE,MAAM,OAAO,GAAG,WAAW,CAAC,KAAK,CAAC,SAAS,EAAE,oBAAoB,CAAC,CAAC;QACnE,IAAI,OAAO,GAAG,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,EAAE,CAAC;YACtD,MAAM,SAAS,CAAC,oBAAoB,CAAC,CAAC;QACxC,CAAC;QACD,MAAM,MAAM,GAAG,WAAW,CAAC,KAAK,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;QAC5D,IAAI,MAAM,GAAG,SAAS;YAAE,MAAM,SAAS,CAAC,iBAAiB,CAAC,CAAC;QAC3D,MAAM,MAAM,GAAa;YACvB,MAAM;YACN,IAAI,EAAE,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE,eAAe,CAAC;YAC1C,UAAU,EAAE,OAAO,CAAC,KAAK,CAAC,UAAU,EAAE,sBAAsB,CAAC;YAC7D,SAAS,EAAE,MAAM,CAAC,OAAO,CAAC,GAAG,IAAI;YACjC,YAAY,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,EAAE,sBAAsB,CAAC,CAAC;SACjE,CAAC;QACF,IAAI,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,KAAK,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;YACvE,MAAM,SAAS,CAAC,gBAAgB,CAAC,CAAC;QACpC,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;CACF;AA7VD,0BA6VC;AAED;;;GAGG;AACH,MAAM,cAAc,GAAG,6BAA6B,CAAC;AAErD;;;GAGG;AACH,MAAM,WAAW,GAAG,4BAA4B,CAAC;AAEjD,8EAA8E;AAC9E,MAAM,MAAM,GAAG,mBAAmB,CAAC;AAEnC,qFAAqF;AACrF,MAAM,eAAe,GAAG,CAAC,KAAW,EAAW,EAAE,CAC/C,OAAO,KAAK,CAAC,cAAc,KAAK,QAAQ;IACxC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC;IACjC,OAAO,KAAK,CAAC,KAAK,KAAK,QAAQ;IAC/B,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AAE3B;;;;;;;;;;;;;;;;;GAiBG;AACI,KAAK,UAAU,WAAW,CAC/B,SAAoB,EACpB,OAAe,EACf,IAA8B,EAC9B,OAAkE,EAClE,IAAkB;IAElB,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QACjE,MAAM,IAAI,uBAAe,CAAC,iBAAiB,EAAE,oBAAoB,CAAC,CAAC;IACrE,CAAC;IACD,IAAI,OAAO,CAAC,WAAW,KAAK,SAAS,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC;QAChF,MAAM,IAAI,mBAAW,CAAC,gBAAgB,EAAE,2BAA2B,CAAC,CAAC;IACvE,CAAC;IACD,MAAM,MAAM,GAAG,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;IAChD,MAAM,MAAM,GAAG,MAAM,CACnB,MAAM,IAAI,CACR,SAAS,EACT;QACE,MAAM,EAAE,KAAK;QACb,IAAI,EAAE,gBAAgB,OAAO,gBAAgB,MAAM,EAAE;QACrD,KAAK,EAAE,qCAAqC,MAAM,EAAE;QACpD,KAAK,EAAE;YACL,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC;YAC5B,cAAc,EAAE,MAAM;YACtB,GAAG,CAAC,IAAI,KAAK,cAAc,CAAC,CAAC,CAAC,EAAE,eAAe,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAChE,GAAG,CAAC,OAAO,CAAC,WAAW,KAAK,SAAS;gBACnC,CAAC,CAAC,EAAE,WAAW,EAAE,OAAO,CAAC,WAAW,EAAE;gBACtC,CAAC,CAAC,EAAE,CAAC;SACR;KACF,EACD,IAAI,CACL,EACD,cAAc,CACf,CAAC;IACF,uEAAuE;IACvE,qCAAqC;IACrC,IACE,MAAM,CAAC,OAAO,KAAK,IAAI;QACvB,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC;QAC3B,MAAM,CAAC,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,KAAK,EAClC,CAAC;QACD,MAAM,SAAS,CAAC,cAAc,CAAC,CAAC;IAClC,CAAC;IACD,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC;IAClF,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC;IAC9B,IACE,IAAI,KAAK,SAAS;QAClB,IAAI,KAAK,EAAE;QACX,CAAC,OAAO,IAAI,KAAK,QAAQ,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EACrD,CAAC;QACD,MAAM,SAAS,CAAC,qBAAqB,CAAC,CAAC;IACzC,CAAC;IACD,MAAM,GAAG,GAAa,EAAE,CAAC;IACzB,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;QAC/B,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC;QAC3C,MAAM,EAAE,GAAG,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC;QAChE,mFAAmF;QACnF,+EAA+E;QAC/E,kFAAkF;QAClF,+EAA+E;QAC/E,IAAI,EAAE,KAAK,SAAS,IAAI,eAAe,CAAC,KAAK,CAAC;YAAE,SAAS;QACzD,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,YAAY,EAAE,EAAE,CAAC,CAAC,CAAC;IACtC,CAAC;IACD,OAAO;QACL,GAAG,EAAE,CAAC,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;QACtB,GAAG,CAAC,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC7D,CAAC;AACJ,CAAC","sourcesContent":["/**\n * The driver's only path to the network: one direct transport call per\n * request, carrying the purpose, retry class, quorum, fanout and signal of the driver\n * method that made it. No SDK sits on a request path. Answers are validated here: a\n * malformed answer is a retryable `ProviderError('PROVIDER_UNAVAILABLE')`, never a foreign\n * error, and a node `Error` answer is a retryable `RPC_ERROR` that repeats no node text.\n * On a proof path every refusal decides nothing; on a broadcast, an answer\n * that cannot be read leaves the transaction possibly sent.\n */\nimport { sha256 } from '@noble/hashes/sha256';\nimport { ConfigError, ProviderError, ValidationError } from '../../core/errors/error';\nimport type { CallOptions, HttpRequest, Transport } from '../../core/transport/types';\nimport { bytesToUtf8, fromHex, toHex } from '../../core/util/bytes';\nimport type { TronCallTags, TronResources } from './types';\n\nexport const READ: TronCallTags = { purpose: 'read', retry: 'safe' };\nexport const MONITOR: TronCallTags = { purpose: 'monitor', retry: 'safe' };\nexport const PROOF: TronCallTags = { purpose: 'proof', retry: 'safe', quorum: 'proof' };\nexport const BROADCAST: TronCallTags = {\n purpose: 'broadcast',\n retry: 'ambiguous-on-failure',\n};\n\n/** Adds the caller's signal to a tag set. */\nexport const withSignal = (tags: TronCallTags, signal?: AbortSignal): TronCallTags =>\n signal ? { ...tags, signal } : tags;\n\ntype Json = Record<string, unknown>;\ntype QuorumKey = (result: unknown) => unknown;\n\nexport function malformed(field: string): ProviderError {\n return new ProviderError('PROVIDER_UNAVAILABLE', `malformed ${field} in a Tron answer`);\n}\n\n/**\n * The node indexed a transaction it cannot serve whole yet (its receipt, the transaction or\n * its block): neither \"not seen\" nor a verdict. Retryable; the core keeps its current view.\n */\nexport function notServable(): ProviderError {\n return new ProviderError(\n 'PROVIDER_UNAVAILABLE',\n 'the node indexed a transaction it cannot serve yet',\n );\n}\n\n/** A broadcast answer that cannot be read: the node may hold the transaction. */\nfunction unreadableAfterSend(field: string): ProviderError {\n return new ProviderError(\n 'PROVIDER_UNAVAILABLE',\n `malformed ${field} in a Tron answer`,\n {\n ambiguous: true,\n },\n );\n}\n\nconst isObject = (value: unknown): value is Json =>\n value !== null && typeof value === 'object' && !Array.isArray(value);\n\nfunction object(value: unknown, field: string): Json {\n if (!isObject(value)) throw malformed(field);\n return value;\n}\n\n/**\n * A non-negative JSON integer: a bigint under `exactIntegers` when it is outside the\n * safe range, else a safe number. Amounts are never rounded.\n */\nfunction uint(value: unknown, field: string): bigint {\n if (typeof value === 'bigint' && value >= 0n) return value;\n if (typeof value === 'number' && Number.isSafeInteger(value) && value >= 0) {\n return BigInt(value);\n }\n throw malformed(field);\n}\n\n/** Like `uint`, but an absent value is 0 (proto3 JSON omits zero fields). */\nconst uintOr0 = (value: unknown, field: string): bigint =>\n value === undefined ? 0n : uint(value, field);\n\n/** java-tron's `long`: block heights above it are malformed. */\nconst INT64_MAX = 2n ** 63n - 1n;\n\n/** A block height: a non-negative int64. */\nfunction height(value: unknown, field: string): bigint {\n const n = uint(value, field);\n if (n > INT64_MAX) throw malformed(field);\n return n;\n}\n\n/**\n * An integer written into a request body as an exact JSON literal (`JSON.rawJSON`, Node ≥ 22):\n * java-tron reads int64 fields from number literals, and `Number()` would round above 2^53.\n */\nconst exactInteger = (value: bigint): unknown =>\n (JSON as unknown as { rawJSON(text: string): unknown }).rawJSON(value.toString());\n\n/** A block time in milliseconds: a safe non-negative integer, never rounded. */\nfunction millis(value: unknown, field: string): number {\n const ms = uint(value, field);\n if (ms > BigInt(Number.MAX_SAFE_INTEGER)) throw malformed(field);\n return Number(ms);\n}\n\nfunction hex(value: unknown, field: string, bytes?: number): string {\n if (typeof value !== 'string' || !/^(?:[0-9a-fA-F]{2})*$/.test(value)) {\n throw malformed(field);\n }\n if (bytes !== undefined && value.length !== bytes * 2) throw malformed(field);\n return value.toLowerCase();\n}\n\nconst isEmpty = (value: unknown): boolean =>\n isObject(value) && Object.keys(value).length === 0;\n\n/**\n * java-tron refuses a transaction above `TRANSACTION_MAX_BYTE_SIZE` (500 KiB), so\n * longer raw bytes are malformed and never hashed or decoded.\n */\nconst MAX_RAW_HEX = 2 * 500 * 1024;\n\n// ---- consensus keys (quorum) ------------------------------------------------------------\n\nconst lower = (value: unknown): unknown =>\n typeof value === 'string'\n ? value.toLowerCase()\n : Array.isArray(value)\n ? value.map(lower)\n : value;\n\n/**\n * java-tron's HTTP 200 failure (`{ \"Error\": … }`) or a JSON-RPC error, keyed as a flag: it\n * never agrees with a real or an empty answer, and its text is never compared.\n */\nconst ERROR_KEY = { error: true } as const;\n/** java-tron's \"not found\" (`{}`); a non-empty answer without the facts never matches it. */\nconst ABSENT_KEY = { absent: true } as const;\n\nconst isErrorAnswer = (result: unknown): boolean =>\n isObject(result) && (result.Error !== undefined || result.error !== undefined);\n\n/** A REST key: an error answer is the error flag, `{}` is absent, else the `facts`. */\nconst restKey =\n (facts: (answer: Json) => unknown): QuorumKey =>\n (result) => {\n if (!isObject(result)) return result;\n if (isErrorAnswer(result)) return ERROR_KEY;\n if (Object.keys(result).length === 0) return ABSENT_KEY;\n return facts(result);\n };\n\nconst headerKey = restKey((answer) => {\n const header = isObject(answer.block_header) ? answer.block_header : undefined;\n const raw = header && isObject(header.raw_data) ? header.raw_data : undefined;\n return {\n id: lower(answer.blockID ?? null),\n // proto3 JSON omits genesis's number and timestamp: absent and 0 are one fact.\n number: raw ? (raw.number ?? 0) : null,\n parent: lower(raw?.parentHash ?? null),\n timestamp: raw ? (raw.timestamp ?? 0) : null,\n };\n});\n\n/**\n * A proven verdict reads the receipt result and the `Transfer` logs, so the\n * key covers them; hex case and fields nodes format differently do not count.\n */\nconst infoKey = restKey((answer) => {\n const receipt = isObject(answer.receipt) ? answer.receipt : {};\n const logs = Array.isArray(answer.log) ? answer.log : [];\n return {\n id: lower(answer.id ?? null),\n block: answer.blockNumber ?? null,\n // A proof binds the receipt to its block by this time, so it is attested.\n time: answer.blockTimeStamp ?? null,\n result: answer.result ?? null,\n receipt: receipt.result ?? null,\n logs: logs.map((log) =>\n isObject(log)\n ? { a: lower(log.address), t: lower(log.topics), d: lower(log.data) }\n : log,\n ),\n };\n});\n\nconst transactionKey = restKey((answer) => {\n const ret = Array.isArray(answer.ret) && isObject(answer.ret[0]) ? answer.ret[0] : {};\n return {\n id: lower(answer.txID ?? null),\n raw: lower(answer.raw_data_hex ?? null),\n ret: ret.contractRet ?? null,\n };\n});\n\n/** java-tron's answer for an address that holds no contract: its code and exact text. */\nfunction isNoContract(outcome: Json): boolean {\n return (\n outcome.result !== true &&\n outcome.code === 'CONTRACT_VALIDATE_ERROR' &&\n messageText(outcome.message) === 'Smart contract is not exist.'\n );\n}\n\n/**\n * A constant call's verdict, and nothing else. Each node builds the simulated\n * transaction on its own head (reference block, expiration, txID) and meters energy on its\n * own state, so honest nodes never agree on the whole answer. The key compares the outcome\n * (ran, no contract, or any other refusal: one value whose code and text are never\n * compared), whether the VM failed (`ret`), and what the call returned.\n */\nconst constantCallKey = restKey((answer) => {\n const outcome = isObject(answer.result) ? answer.result : {};\n const tx = isObject(answer.transaction) ? answer.transaction : {};\n const ret = Array.isArray(tx.ret) && isObject(tx.ret[0]) ? tx.ret[0].ret : undefined;\n return {\n outcome:\n outcome.result === true ? 'ok' : isNoContract(outcome) ? 'no-contract' : 'refused',\n ret: ret ?? null,\n out: lower(answer.constant_result ?? null),\n };\n});\n\n/** Whether a contract is there, and which: `{}` (none) keys as absent (`restKey`). */\nconst contractKey = restKey((answer) => ({\n contract: lower(answer.contract_address ?? null),\n}));\n\nfunction rpcBlockKey(result: unknown): unknown {\n if (!isObject(result)) return result;\n // An envelope without a result is an error, whatever else it holds.\n if (isErrorAnswer(result) || !Object.hasOwn(result, 'result')) return ERROR_KEY;\n const block = result.result;\n if (!isObject(block)) return block ?? null;\n // The negative scan stops on `timestamp`, so it is compared too: one lying endpoint\n // cannot end the scan early with an old time.\n return {\n number: lower(block.number ?? null),\n hash: lower(block.hash ?? null),\n parent: lower(block.parentHash ?? null),\n timestamp: lower(block.timestamp ?? null),\n transactions: lower(block.transactions ?? null),\n };\n}\n\nconst QUORUM_KEYS: Readonly<Record<string, QuorumKey>> = {\n '/wallet/getblock': headerKey,\n '/walletsolidity/getblock': headerKey,\n '/walletsolidity/gettransactioninfobyid': infoKey,\n '/wallet/gettransactioninfobyid': infoKey,\n '/walletsolidity/gettransactionbyid': transactionKey,\n '/wallet/gettransactionbyid': transactionKey,\n '/wallet/triggerconstantcontract': constantCallKey,\n '/wallet/getcontract': contractKey,\n '/jsonrpc': rpcBlockKey,\n};\n\n/** The consensus facts compared under a quorum for `path`, if it has any. */\nexport const quorumKeyFor = (path: string): QuorumKey | undefined =>\n Object.hasOwn(QUORUM_KEYS, path) ? QUORUM_KEYS[path] : undefined;\n\n/** A caller's key never makes an error answer agree with a real one. */\nconst guarded =\n (key: QuorumKey): QuorumKey =>\n (result) =>\n isErrorAnswer(result) ? ERROR_KEY : key(result);\n\n/**\n * One tagged transport call with exact integers. Under a quorum the caller's\n * `quorumKey` (a monotone predicate) replaces `fallback`; a key never travels\n * without a quorum.\n *\n * On a proof path a definitive refusal decides nothing, so it becomes a retryable\n * `PROVIDER_UNAVAILABLE`: a REST 4xx the quorum agreed on, and a 401 or 403 too. The\n * transport reports both as `PROVIDER_MISCONFIGURED` with no structured status, and TronGrid\n * answers a rate-limit suspension with 403 (\"Rate-limited requests usually return 429 or 403\n * and should be retried with backoff\", developers.tron.network/reference/rate-limits, read\n * 2026-09-27), so a proof cannot tell a bad key from a pause. A bad key still surfaces as\n * `PROVIDER_MISCONFIGURED` through the plain reads (monitor, read), which pass it unchanged:\n * on every endpoint when every key is bad; with one bad endpoint among several, a proof retries\n * until its breaker opens, and then the core reports the quorum unreachable. A caller's\n * abort is never converted. Other purposes see the transport's error unchanged.\n */\nasync function call(\n transport: Transport,\n request: HttpRequest,\n tags: TronCallTags,\n fallback?: QuorumKey,\n): Promise<unknown> {\n const { quorumKey: own, ...rest } = tags;\n const quorumKey = rest.quorum === undefined ? undefined : own ? guarded(own) : fallback;\n const options: CallOptions = {\n ...rest,\n exactIntegers: true,\n ...(quorumKey ? { quorumKey } : {}),\n };\n try {\n return await transport.http(request, options);\n } catch (error) {\n if (\n tags.purpose === 'proof' &&\n !tags.signal?.aborted &&\n error instanceof ProviderError &&\n !error.retryable\n ) {\n throw new ProviderError(\n 'PROVIDER_UNAVAILABLE',\n 'a proof read was refused, which decides nothing',\n { cause: error, context: error.context, retryable: true },\n );\n }\n throw error;\n }\n}\n\n// ---- wire shapes --------------------------------------------------------------------------\n\nexport interface TronBlockHeader {\n readonly number: bigint;\n readonly id: string;\n readonly parentId: string;\n readonly timestamp: number;\n}\n\nexport interface TronLog {\n /** The emitter, 20-byte hex (no `41`). */\n readonly address: string;\n readonly topics: readonly string[];\n readonly data: string;\n}\n\nexport interface TronTxInfo {\n readonly id: string;\n readonly blockNumber: bigint;\n readonly blockTimestamp: number;\n /** Total TRX burned, in sun. */\n readonly fee: bigint;\n /** `receipt.result` of a contract call (`SUCCESS`, `REVERT`, `OUT_OF_ENERGY`, …). */\n readonly receiptResult?: string;\n /** `FAILED` when execution failed. */\n readonly failed: boolean;\n readonly logs: readonly TronLog[];\n}\n\nexport interface TronTxJson {\n readonly id: string;\n readonly rawHex: string;\n /** `ret[0].contractRet`, absent while pending. */\n readonly contractRet?: string;\n}\n\n/** The chain parameters the driver reads: its fees, and one TransferContract rule. */\nconst FEE_PARAMETERS = new Set([\n 'getTransactionFee',\n 'getEnergyFee',\n 'getCreateAccountFee',\n 'getCreateNewAccountFeeInSystemContract',\n 'getCreateNewAccountBandwidthRate',\n 'getMemoFee',\n 'getMaxFeeLimit',\n 'getForbidTransferToContract',\n]);\n\nexport interface ChainParameters {\n readonly transactionFee: bigint;\n readonly energyFee: bigint;\n readonly createAccountFee: bigint;\n readonly createNewAccountFeeInSystemContract: bigint;\n readonly createNewAccountBandwidthRate: bigint;\n readonly memoFee: bigint;\n readonly maxFeeLimit: bigint;\n /**\n * `getForbidTransferToContract` is 1: `TransferActuator` refuses TRX sent to a contract\n * account. 0 (proto3 JSON omits it) on mainnet, Nile and Shasta, read 2026-09-29.\n */\n readonly forbidTransferToContract: boolean;\n}\n\nexport type ConstantCall =\n | { readonly kind: 'ok'; readonly result: string; readonly energy: bigint }\n | { readonly kind: 'failed'; readonly energy: bigint }\n | { readonly kind: 'no-contract' };\n\nexport interface BroadcastAnswer {\n readonly accepted: boolean;\n readonly code?: string;\n /** The node's message, decoded when it is hex. Never stored or logged as is. */\n readonly message?: string;\n}\n\nexport interface RpcBlock {\n readonly number: bigint;\n readonly hash: string;\n readonly parentHash: string;\n readonly timestamp: number;\n readonly transactions: readonly string[];\n}\n\nfunction parseHeader(value: unknown): TronBlockHeader | null {\n if (isEmpty(value)) return null;\n const block = object(value, 'block');\n const raw = object(object(block.block_header, 'block header').raw_data, 'block header');\n // proto3 JSON omits zero fields: genesis has neither number nor timestamp.\n return {\n number: height(raw.number ?? 0, 'block number'),\n id: hex(block.blockID, 'block id', 32),\n parentId: hex(raw.parentHash, 'parent hash', 32),\n timestamp: millis(raw.timestamp ?? 0, 'block timestamp'),\n };\n}\n\nfunction parseTransaction(value: unknown): TronTxJson {\n const tx = object(value, 'transaction');\n const ret =\n Array.isArray(tx.ret) && isObject(tx.ret[0]) ? tx.ret[0].contractRet : undefined;\n if (ret !== undefined && typeof ret !== 'string') throw malformed('contractRet');\n const id = hex(tx.txID, 'txID', 32);\n if (typeof tx.raw_data_hex === 'string' && tx.raw_data_hex.length > MAX_RAW_HEX) {\n throw malformed('raw_data_hex');\n }\n const rawHex = hex(tx.raw_data_hex, 'raw_data_hex');\n // The id is the SHA-256 of the raw bytes: an answer that does not bind them is malformed.\n if (toHex(sha256(fromHex(rawHex))) !== id) throw malformed('raw_data_hex');\n return {\n id,\n rawHex,\n ...(ret !== undefined ? { contractRet: ret } : {}),\n };\n}\n\nfunction parseInfo(value: unknown): TronTxInfo {\n const info = object(value, 'transaction info');\n const receipt = info.receipt === undefined ? {} : object(info.receipt, 'receipt');\n const logs = info.log === undefined ? [] : info.log;\n if (!Array.isArray(logs)) throw malformed('log');\n const receiptResult = receipt.result;\n if (receiptResult !== undefined && typeof receiptResult !== 'string') {\n throw malformed('receipt result');\n }\n if (info.result !== undefined && info.result !== 'FAILED') throw malformed('result');\n return {\n id: hex(info.id, 'transaction id', 32),\n blockNumber: height(info.blockNumber, 'block number'),\n blockTimestamp: millis(info.blockTimeStamp, 'block timestamp'),\n fee: uintOr0(info.fee, 'fee'),\n ...(receiptResult !== undefined ? { receiptResult } : {}),\n failed: info.result === 'FAILED',\n logs: logs.map((entry) => {\n const log = object(entry, 'log');\n if (!Array.isArray(log.topics)) throw malformed('log topics');\n return {\n address: hex(log.address, 'log address', 20),\n topics: log.topics.map((t) => hex(t, 'log topic', 32)),\n data: log.data === undefined ? '' : hex(log.data, 'log data'),\n };\n }),\n };\n}\n\n/** The longest node message kept, in characters: java-tron's texts are far shorter. */\nconst MAX_MESSAGE = 1024;\n\n/**\n * A node's message field: hex-encoded UTF-8 on some paths, plain text on others. At most\n * the first 1 KiB is kept, decoded when the whole field is printable hex.\n */\nexport function messageText(value: unknown): string | undefined {\n if (typeof value !== 'string') return undefined;\n if (/^(?:[0-9a-fA-F]{2})+$/.test(value)) {\n const text = bytesToUtf8(fromHex(value.slice(0, 2 * MAX_MESSAGE)));\n if (/^[\\x20-\\x7e]+$/.test(text)) return text;\n }\n return value.slice(0, MAX_MESSAGE);\n}\n\n/** A JSON-RPC 32-byte hash, lower-case without `0x`. */\nfunction rpcHash(value: unknown, field: string): string {\n if (typeof value !== 'string' || !/^0x[0-9a-fA-F]{64}$/.test(value)) {\n throw malformed(field);\n }\n return value.slice(2).toLowerCase();\n}\n\n/** A JSON-RPC quantity of at most 64 bits (bounded before conversion). */\nfunction rpcQuantity(value: unknown, field: string): bigint {\n if (typeof value !== 'string' || !/^0x[0-9a-fA-F]{1,16}$/.test(value)) {\n throw malformed(field);\n }\n return BigInt(value);\n}\n\n// ---- the API ----------------------------------------------------------------------------\n\nexport class TronApi {\n readonly #transport: Transport;\n\n constructor(transport: Transport) {\n this.#transport = transport;\n }\n\n /**\n * One POST to `path`, answered as JSON; a node `Error` answer is a retryable RPC_ERROR\n * (possibly sent, on a broadcast).\n */\n async post(path: string, body: Json, tags: TronCallTags): Promise<unknown> {\n const answer = await call(\n this.#transport,\n { method: 'POST', path, body, route: path },\n tags,\n quorumKeyFor(path),\n );\n if (isObject(answer) && answer.Error !== undefined) {\n throw new ProviderError('RPC_ERROR', `the node answered an error on ${path}`, {\n retryable: true,\n ...(tags.purpose === 'broadcast' ? { ambiguous: true } : {}),\n });\n }\n return answer;\n }\n\n /** The head (`scope: 'full'`) or latest solidified block, or one by height or id. */\n async block(\n scope: 'full' | 'solid',\n ref: bigint | string | undefined,\n tags: TronCallTags,\n ): Promise<TronBlockHeader | null> {\n const path = scope === 'full' ? '/wallet/getblock' : '/walletsolidity/getblock';\n const answer = await this.post(\n path,\n { ...(ref !== undefined ? { id_or_num: ref.toString() } : {}), detail: false },\n tags,\n );\n const header = parseHeader(answer);\n if (header && typeof ref === 'bigint' && header.number !== ref) {\n throw malformed('block number');\n }\n if (header && typeof ref === 'string' && header.id !== ref.toLowerCase()) {\n throw malformed('block id');\n }\n if (ref === undefined && header === null) throw malformed('head block');\n return header;\n }\n\n /**\n * A block with its transactions and their infos (the scanner's read). Block 0 is its\n * header alone: java-tron answers `{}` to `gettransactioninfobyblocknum` there\n * (`GetTransactionInfoByBlockNumServlet`, GreatVoyage-v4.8.2.2; Nile checked 2026-09-27),\n * a malformed answer the scanner would retry for ever, and genesis holds only the chain's\n * initial allocations, which are not reported.\n */\n async blockWithTransactions(\n height: bigint,\n tags: TronCallTags,\n ): Promise<{\n readonly header: TronBlockHeader;\n readonly transactions: readonly TronTxJson[];\n readonly infos: readonly TronTxInfo[];\n } | null> {\n if (height === 0n) {\n const genesis = await this.block('full', 0n, tags);\n return genesis ? { header: genesis, transactions: [], infos: [] } : null;\n }\n const answer = await this.post(\n '/wallet/getblock',\n { id_or_num: height.toString(), detail: true },\n tags,\n );\n const header = parseHeader(answer);\n if (header === null) return null;\n if (header.number !== height) throw malformed('block number');\n const list = (answer as Json).transactions ?? [];\n if (!Array.isArray(list)) throw malformed('transactions');\n const transactions = list.map(parseTransaction);\n const infosAnswer = await this.post(\n '/wallet/gettransactioninfobyblocknum',\n { num: exactInteger(height) },\n tags,\n );\n if (!Array.isArray(infosAnswer)) throw malformed('transaction infos');\n const infos = infosAnswer.map(parseInfo);\n if (infos.some((i) => i.blockNumber !== height)) throw malformed('transaction infos');\n // Two calls can reach two backends behind one URL: the receipts must be exactly this\n // block's, one per transaction.\n const ids = new Set(transactions.map((t) => t.id));\n const receipted = new Set(infos.map((i) => i.id));\n if (\n ids.size !== transactions.length ||\n receipted.size !== infos.length ||\n infos.length !== transactions.length ||\n infos.some((i) => !ids.has(i.id))\n ) {\n throw new ProviderError(\n 'PROVIDER_INCONSISTENT',\n `block ${height}'s receipts do not match its transactions`,\n { retryable: true },\n );\n }\n return { header, transactions, infos };\n }\n\n async chainParameters(tags: TronCallTags): Promise<ChainParameters> {\n const answer = object(\n await this.post('/wallet/getchainparameters', {}, tags),\n 'parameters',\n );\n const list = answer.chainParameter;\n if (!Array.isArray(list)) throw malformed('chain parameters');\n // Only the parameters the driver reads are validated: others may be negative (e.g.\n // Nile's `getRemoveThePowerOfTheGr` is -1) and must not fail the read.\n const values = new Map<string, bigint>();\n for (const entry of list) {\n const item = object(entry, 'chain parameter');\n if (typeof item.key !== 'string') throw malformed('chain parameter');\n if (FEE_PARAMETERS.has(item.key)) {\n values.set(item.key, uintOr0(item.value, item.key));\n }\n }\n const required = (key: string): bigint => {\n const value = values.get(key);\n if (value === undefined || value === 0n) throw malformed(key);\n return value;\n };\n return {\n transactionFee: required('getTransactionFee'),\n energyFee: required('getEnergyFee'),\n createAccountFee: values.get('getCreateAccountFee') ?? 0n,\n createNewAccountFeeInSystemContract:\n values.get('getCreateNewAccountFeeInSystemContract') ?? 0n,\n createNewAccountBandwidthRate: values.get('getCreateNewAccountBandwidthRate') ?? 1n,\n memoFee: values.get('getMemoFee') ?? 0n,\n maxFeeLimit: required('getMaxFeeLimit'),\n forbidTransferToContract: values.get('getForbidTransferToContract') === 1n,\n };\n }\n\n /** `{ exists: false }` for an account that was never activated. */\n async account(\n addressHex: string,\n tags: TronCallTags,\n ): Promise<{ readonly exists: boolean; readonly balance: bigint }> {\n const answer = object(\n await this.post('/wallet/getaccount', { address: addressHex }, tags),\n 'account',\n );\n if (Object.keys(answer).length === 0) return { exists: false, balance: 0n };\n if (\n typeof answer.address !== 'string' ||\n answer.address.toLowerCase() !== addressHex.toLowerCase()\n ) {\n throw malformed('account address');\n }\n return { exists: true, balance: uintOr0(answer.balance, 'balance') };\n }\n\n async resources(addressHex: string, tags: TronCallTags): Promise<TronResources> {\n const r = object(\n await this.post('/wallet/getaccountresource', { address: addressHex }, tags),\n 'account resources',\n );\n if (Object.keys(r).length === 0) {\n return { activated: false, freeBandwidth: 0n, stakedBandwidth: 0n, energy: 0n };\n }\n const left = (limit: unknown, used: unknown, field: string): bigint => {\n const value = uintOr0(limit, field) - uintOr0(used, field);\n return value > 0n ? value : 0n;\n };\n return {\n activated: true,\n freeBandwidth: left(r.freeNetLimit, r.freeNetUsed, 'free bandwidth'),\n stakedBandwidth: left(r.NetLimit, r.NetUsed, 'bandwidth'),\n energy: left(r.EnergyLimit, r.EnergyUsed, 'energy'),\n };\n }\n\n /**\n * A constant (simulated) contract call. `no-contract` when the address holds no contract;\n * `failed` when the call reverts or the VM fails; any other refusal is a retryable\n * RPC_ERROR.\n */\n async constantCall(\n ownerHex: string,\n contractHex: string,\n data: string,\n tags: TronCallTags,\n ): Promise<ConstantCall> {\n const answer = object(\n await this.post(\n '/wallet/triggerconstantcontract',\n { owner_address: ownerHex, contract_address: contractHex, data },\n tags,\n ),\n 'constant call',\n );\n const result = object(answer.result, 'constant call result');\n if (result.result !== true) {\n if (isNoContract(result)) return { kind: 'no-contract' };\n throw new ProviderError('RPC_ERROR', 'the node refused a contract call', {\n retryable: true,\n });\n }\n const tx =\n answer.transaction === undefined ? {} : object(answer.transaction, 'transaction');\n const ret = Array.isArray(tx.ret) && isObject(tx.ret[0]) ? tx.ret[0].ret : undefined;\n if (ret === 'FAILED') {\n return { kind: 'failed', energy: uintOr0(answer.energy_used, 'energy used') };\n }\n const out = answer.constant_result;\n if (!Array.isArray(out) || out.length !== 1) throw malformed('constant result');\n // A call that ran used energy, and the fee estimate is built on it; a missing or\n // zero `energy_used` is a malformed answer, never 0 (a 0 fee limit fails on chain).\n const energy = uint(answer.energy_used, 'energy used');\n if (energy === 0n) throw malformed('energy used');\n return { kind: 'ok', result: hex(out[0], 'constant result'), energy };\n }\n\n /**\n * Whether `addressHex` holds a contract (`/wallet/getcontract`): java-tron answers `{}`\n * when the account or its contract does not exist (`Wallet.getContract`, GreatVoyage-v4.8.2.2\n * `d5c3d1d1`), else the `SmartContract`. The structural check behind a constant call's\n * \"no contract\" text before anyone caches it; an answer about another address is\n * malformed.\n */\n async contractExists(addressHex: string, tags: TronCallTags): Promise<boolean> {\n const answer = object(\n await this.post('/wallet/getcontract', { value: addressHex }, tags),\n 'contract',\n );\n if (Object.keys(answer).length === 0) return false;\n // java-tron's `SmartContract` always names its address; an answer that\n // names none, or another, is malformed.\n const address = answer.contract_address;\n if (\n typeof address !== 'string' ||\n address.toLowerCase() !== addressHex.toLowerCase()\n ) {\n throw malformed('contract');\n }\n return true;\n }\n\n /**\n * `/wallet/broadcasthex`. java-tron answers refusals with HTTP 200, so the answer is read\n * here; one that cannot be read is possibly sent (the node may hold the bytes).\n */\n async broadcastHex(hexTx: string, tags: TronCallTags): Promise<BroadcastAnswer> {\n const answer = await this.post('/wallet/broadcasthex', { transaction: hexTx }, tags);\n if (!isObject(answer)) throw unreadableAfterSend('broadcast answer');\n if (answer.result === true) return { accepted: true };\n if (typeof answer.code !== 'string') throw unreadableAfterSend('broadcast code');\n const message = messageText(answer.message);\n return { accepted: false, code: answer.code, ...(message ? { message } : {}) };\n }\n\n /** An included transaction (`full`: any block; `solid`: a solidified one), or null. */\n async transaction(\n scope: 'full' | 'solid',\n id: string,\n tags: TronCallTags,\n ): Promise<TronTxJson | null> {\n const path =\n scope === 'full'\n ? '/wallet/gettransactionbyid'\n : '/walletsolidity/gettransactionbyid';\n const answer = await this.post(path, { value: id }, tags);\n if (isEmpty(answer)) return null;\n const tx = parseTransaction(answer);\n if (tx.id !== id.toLowerCase()) throw malformed('transaction id');\n return tx;\n }\n\n async transactionInfo(\n scope: 'full' | 'solid',\n id: string,\n tags: TronCallTags,\n ): Promise<TronTxInfo | null> {\n const path =\n scope === 'full'\n ? '/wallet/gettransactioninfobyid'\n : '/walletsolidity/gettransactioninfobyid';\n const answer = await this.post(path, { value: id }, tags);\n if (isEmpty(answer)) return null;\n const info = parseInfo(answer);\n if (info.id !== id.toLowerCase()) throw malformed('transaction id');\n return info;\n }\n\n /** The transaction if the node holds `id` in its pending pool, else null. */\n async pending(id: string, tags: TronCallTags): Promise<TronTxJson | null> {\n const answer = await this.post(\n '/wallet/gettransactionfrompending',\n { value: id },\n tags,\n );\n if (isEmpty(answer)) return null;\n const tx = parseTransaction(answer);\n if (tx.id !== id.toLowerCase()) throw malformed('transaction id');\n return tx;\n }\n\n /** The node's JSON-RPC block read (transaction ids only), or null when it has none. */\n async rpcBlock(ref: bigint | string, tags: TronCallTags): Promise<RpcBlock | null> {\n const byHash = typeof ref === 'string';\n const answer = object(\n await this.post(\n '/jsonrpc',\n {\n jsonrpc: '2.0',\n id: 1,\n method: byHash ? 'eth_getBlockByHash' : 'eth_getBlockByNumber',\n params: [byHash ? `0x${ref}` : `0x${ref.toString(16)}`, false],\n },\n tags,\n ),\n 'JSON-RPC answer',\n );\n if (answer.error !== undefined) {\n throw new ProviderError('RPC_ERROR', 'the node answered a JSON-RPC error', {\n retryable: true,\n });\n }\n if (answer.result === null) return null;\n const block = object(answer.result, 'JSON-RPC block');\n const txs = block.transactions;\n if (!Array.isArray(txs)) throw malformed('JSON-RPC transactions');\n const seconds = rpcQuantity(block.timestamp, 'JSON-RPC timestamp');\n if (seconds * 1000n > BigInt(Number.MAX_SAFE_INTEGER)) {\n throw malformed('JSON-RPC timestamp');\n }\n const number = rpcQuantity(block.number, 'JSON-RPC number');\n if (number > INT64_MAX) throw malformed('JSON-RPC number');\n const parsed: RpcBlock = {\n number,\n hash: rpcHash(block.hash, 'JSON-RPC hash'),\n parentHash: rpcHash(block.parentHash, 'JSON-RPC parent hash'),\n timestamp: Number(seconds) * 1000,\n transactions: txs.map((t) => rpcHash(t, 'JSON-RPC transaction')),\n };\n if (byHash ? parsed.hash !== ref.toLowerCase() : parsed.number !== ref) {\n throw malformed('JSON-RPC block');\n }\n return parsed;\n }\n}\n\n/**\n * A base58 account address, the only form sent to TronGrid: it becomes a URL path segment,\n * so anything else is refused before any call.\n */\nconst BASE58_ACCOUNT = /^T[1-9A-HJ-NP-Za-km-z]{33}$/;\n\n/**\n * TronGrid's page cursor, bounded in length and charset. Observed on 2026-09-27: 221 to\n * 224 base58 characters; the bound leaves room for base64 forms.\n */\nconst FINGERPRINT = /^[0-9A-Za-z+/=_-]{1,1024}$/;\n\n/** A 32-byte id as TronGrid writes it: 64 hex digits (one class, bounded). */\nconst ID_HEX = /^[0-9a-fA-F]{64}$/;\n\n/** TronGrid's documented internal-transaction entry: its own id and its parent's. */\nconst isInternalEntry = (entry: Json): boolean =>\n typeof entry.internal_tx_id === 'string' &&\n ID_HEX.test(entry.internal_tx_id) &&\n typeof entry.tx_id === 'string' &&\n ID_HEX.test(entry.tx_id);\n\n/**\n * TronGrid `/v1` account history pages (indexer transport), confirmed entries only. Each\n * transaction id is listed once per page: the TRC-20 stream lists a transaction once per\n * transfer it made.\n *\n * Internal transactions are not listed. `search_internal=false` asks TronGrid for none,\n * and an internal entry it mixes in anyway is skipped: TronGrid documents that entry shape\n * (`internal_tx_id`, `tx_id`, `from_address`, `to_address`, `data`, `block_timestamp`; its\n * OpenAPI schema at developers.tron.network/reference/get-transaction-info-by-account-address)\n * and it has no `txID`, so one would make the whole page malformed. Only an entry without\n * an id of its own that carries both documented ids is skipped. Read on 2026-09-27,\n * `GET api.trongrid.io/v1/accounts/TNUC9Qb1rRpS5CbWLmNMxXBjyFoydXjWFR/transactions?limit=20`\n * (WTRX) gave only whole transactions (`txID`, `raw_data_hex`, …), each with the internal\n * transfers nested in `internal_transactions[]` (`internal_tx_id`, `data`, `from_address`,\n * `to_address`); five other accounts, internal-TRX recipients among them, looked the same\n * with `search_internal` true or false. A TRX amount an account received only through a\n * contract's internal transfer is therefore not in its history.\n */\nexport async function historyPage(\n transport: Transport,\n address: string,\n kind: 'transactions' | 'trc20',\n options: { readonly limit: number; readonly fingerprint?: string },\n tags: TronCallTags,\n): Promise<{ readonly ids: readonly string[]; readonly next?: string }> {\n if (typeof address !== 'string' || !BASE58_ACCOUNT.test(address)) {\n throw new ValidationError('INVALID_ADDRESS', 'not a Tron address');\n }\n if (options.fingerprint !== undefined && !FINGERPRINT.test(options.fingerprint)) {\n throw new ConfigError('CONFIG_INVALID', 'not a Tron history cursor');\n }\n const suffix = kind === 'trc20' ? '/trc20' : '';\n const answer = object(\n await call(\n transport,\n {\n method: 'GET',\n path: `/v1/accounts/${address}/transactions${suffix}`,\n route: `/v1/accounts/:address/transactions${suffix}`,\n query: {\n limit: String(options.limit),\n only_confirmed: 'true',\n ...(kind === 'transactions' ? { search_internal: 'false' } : {}),\n ...(options.fingerprint !== undefined\n ? { fingerprint: options.fingerprint }\n : {}),\n },\n },\n tags,\n ),\n 'history page',\n );\n // Each listed id costs several node reads, so a page longer than asked\n // for is malformed rather than read.\n if (\n answer.success !== true ||\n !Array.isArray(answer.data) ||\n answer.data.length > options.limit\n ) {\n throw malformed('history page');\n }\n const meta = answer.meta === undefined ? {} : object(answer.meta, 'history meta');\n const next = meta.fingerprint;\n if (\n next !== undefined &&\n next !== '' &&\n (typeof next !== 'string' || !FINGERPRINT.test(next))\n ) {\n throw malformed('history fingerprint');\n }\n const ids: string[] = [];\n for (const item of answer.data) {\n const entry = object(item, 'history item');\n const id = kind === 'trc20' ? entry.transaction_id : entry.txID;\n // An entry is skipped only when its own fields prove it TronGrid's internal entry:\n // no id of its own, and the documented internal and parent ids. Any entry that\n // carries its id is read whatever else it carries, and anything else is malformed\n // (the page is read again), so a schema change never drops a deposit silently.\n if (id === undefined && isInternalEntry(entry)) continue;\n ids.push(hex(id, 'history id', 32));\n }\n return {\n ids: [...new Set(ids)],\n ...(typeof next === 'string' && next !== '' ? { next } : {}),\n };\n}\n"]}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `crypto-aio/tron`: the Tron family's constants and SDK-free types, and the
|
|
3
|
+
* `crypto-aio/native` client type: importing this entry types `native(bc, 'tronweb')` as a
|
|
4
|
+
* `TronWeb` instance whose providers send through the handle's transport.
|
|
5
|
+
*
|
|
6
|
+
* @module crypto-aio/tron
|
|
7
|
+
*/
|
|
8
|
+
import type { TronWeb } from 'tronweb';
|
|
9
|
+
declare module '../../index' {
|
|
10
|
+
interface NativeClientMap {
|
|
11
|
+
tronweb: TronWeb;
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
export { TRON_PEER_DEPENDENCIES } from './plugin';
|
|
15
|
+
export { DEFAULT_ENERGY_MARGIN_PERCENT, DEFAULT_EXPIRATION_MS, DEFAULT_MAX_FEE_LIMIT, MAX_EXPIRATION_MS, MAX_MEMO_BYTES, MIN_EXPIRATION_MS, TRON_CAPABILITIES, TRON_INDEXER_CAPABILITIES, } from './network';
|
|
16
|
+
export type { TronExpiryOrdering, TronExt, TronFeeDetails, TronFeeOverride, TronResources, } from './types';
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.TRON_INDEXER_CAPABILITIES = exports.TRON_CAPABILITIES = exports.MIN_EXPIRATION_MS = exports.MAX_MEMO_BYTES = exports.MAX_EXPIRATION_MS = exports.DEFAULT_MAX_FEE_LIMIT = exports.DEFAULT_EXPIRATION_MS = exports.DEFAULT_ENERGY_MARGIN_PERCENT = exports.TRON_PEER_DEPENDENCIES = void 0;
|
|
4
|
+
var plugin_1 = require("./plugin");
|
|
5
|
+
Object.defineProperty(exports, "TRON_PEER_DEPENDENCIES", { enumerable: true, get: function () { return plugin_1.TRON_PEER_DEPENDENCIES; } });
|
|
6
|
+
var network_1 = require("./network");
|
|
7
|
+
Object.defineProperty(exports, "DEFAULT_ENERGY_MARGIN_PERCENT", { enumerable: true, get: function () { return network_1.DEFAULT_ENERGY_MARGIN_PERCENT; } });
|
|
8
|
+
Object.defineProperty(exports, "DEFAULT_EXPIRATION_MS", { enumerable: true, get: function () { return network_1.DEFAULT_EXPIRATION_MS; } });
|
|
9
|
+
Object.defineProperty(exports, "DEFAULT_MAX_FEE_LIMIT", { enumerable: true, get: function () { return network_1.DEFAULT_MAX_FEE_LIMIT; } });
|
|
10
|
+
Object.defineProperty(exports, "MAX_EXPIRATION_MS", { enumerable: true, get: function () { return network_1.MAX_EXPIRATION_MS; } });
|
|
11
|
+
Object.defineProperty(exports, "MAX_MEMO_BYTES", { enumerable: true, get: function () { return network_1.MAX_MEMO_BYTES; } });
|
|
12
|
+
Object.defineProperty(exports, "MIN_EXPIRATION_MS", { enumerable: true, get: function () { return network_1.MIN_EXPIRATION_MS; } });
|
|
13
|
+
Object.defineProperty(exports, "TRON_CAPABILITIES", { enumerable: true, get: function () { return network_1.TRON_CAPABILITIES; } });
|
|
14
|
+
Object.defineProperty(exports, "TRON_INDEXER_CAPABILITIES", { enumerable: true, get: function () { return network_1.TRON_INDEXER_CAPABILITIES; } });
|
|
15
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/adapters/tron/index.ts"],"names":[],"mappings":";;;AAiBA,mCAAkD;AAAzC,gHAAA,sBAAsB,OAAA;AAC/B,qCASmB;AARjB,wHAAA,6BAA6B,OAAA;AAC7B,gHAAA,qBAAqB,OAAA;AACrB,gHAAA,qBAAqB,OAAA;AACrB,4GAAA,iBAAiB,OAAA;AACjB,yGAAA,cAAc,OAAA;AACd,4GAAA,iBAAiB,OAAA;AACjB,4GAAA,iBAAiB,OAAA;AACjB,oHAAA,yBAAyB,OAAA","sourcesContent":["/**\n * `crypto-aio/tron`: the Tron family's constants and SDK-free types, and the\n * `crypto-aio/native` client type: importing this entry types `native(bc, 'tronweb')` as a\n * `TronWeb` instance whose providers send through the handle's transport.\n *\n * @module crypto-aio/tron\n */\nimport type { TronWeb } from 'tronweb';\n\n// Through the package entry, as users augment it. SDK types appear only here, so every\n// other module's typings stay SDK-free.\ndeclare module '../../index' {\n interface NativeClientMap {\n tronweb: TronWeb;\n }\n}\n\nexport { TRON_PEER_DEPENDENCIES } from './plugin';\nexport {\n DEFAULT_ENERGY_MARGIN_PERCENT,\n DEFAULT_EXPIRATION_MS,\n DEFAULT_MAX_FEE_LIMIT,\n MAX_EXPIRATION_MS,\n MAX_MEMO_BYTES,\n MIN_EXPIRATION_MS,\n TRON_CAPABILITIES,\n TRON_INDEXER_CAPABILITIES,\n} from './network';\nexport type {\n TronExpiryOrdering,\n TronExt,\n TronFeeDetails,\n TronFeeOverride,\n TronResources,\n} from './types';\n"]}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { type Capability } from '../../core/model/capability';
|
|
2
|
+
import type { ChainInfo, NetworkInfo } from '../../core/model/chain';
|
|
3
|
+
/** Every capability of the Tron driver; `address-history` comes with an indexer. */
|
|
4
|
+
export declare const TRON_CAPABILITIES: readonly Capability[];
|
|
5
|
+
export declare const TRON_INDEXER_CAPABILITIES: readonly Capability[];
|
|
6
|
+
export declare const DEFAULT_EXPIRATION_MS = 60000;
|
|
7
|
+
export declare const MIN_EXPIRATION_MS = 10000;
|
|
8
|
+
/**
|
|
9
|
+
* The longest expiration window this driver builds. The negative inclusion proof does
|
|
10
|
+
* not depend on it: it scans from the reference block to the signed expiration.
|
|
11
|
+
*/
|
|
12
|
+
export declare const MAX_EXPIRATION_MS = 300000;
|
|
13
|
+
/**
|
|
14
|
+
* TaPoS (java-tron GreatVoyage-v4.8.2.2 `d5c3d1d1`, `Manager.validateTapos` and
|
|
15
|
+
* `updateRecentBlock`): a transaction's reference block must be the one the recent-block
|
|
16
|
+
* store holds under its number's bytes 6..8, and each block overwrites the entry of the block
|
|
17
|
+
* 65,536 below it. So only the 65,536 blocks after the reference block can hold the
|
|
18
|
+
* transaction, and an Attempt's `lastValidHeight` is its reference height plus this window.
|
|
19
|
+
*/
|
|
20
|
+
export declare const TAPOS_WINDOW = 65536n;
|
|
21
|
+
export declare const DEFAULT_ENERGY_MARGIN_PERCENT = 20;
|
|
22
|
+
/**
|
|
23
|
+
* The largest fee limit a TRC-20 transfer carries unless the handle's `maxFeeLimit` option
|
|
24
|
+
* allows more: 100 TRX, in sun. The network's own maximum (`getMaxFeeLimit`, 15,000
|
|
25
|
+
* TRX on mainnet), the energy price and the simulated energy all come from one endpoint's
|
|
26
|
+
* answer, and a call that fails through an INVALID opcode (a Solidity `assert`) burns its
|
|
27
|
+
* whole fee limit, so this operator bound is the only one no node can raise. It covers a
|
|
28
|
+
* TRC-20 transfer to a new holder (about 130,000 energy) at 420 sun per energy, margin
|
|
29
|
+
* included.
|
|
30
|
+
*/
|
|
31
|
+
export declare const DEFAULT_MAX_FEE_LIMIT = 100000000n;
|
|
32
|
+
/** The largest `fee_limit` the codec writes exactly: 2^53 − 1 sun. */
|
|
33
|
+
export declare const MAX_ENCODABLE_FEE_LIMIT: bigint;
|
|
34
|
+
/** Memo bytes (UTF-8) accepted in `raw_data.data`. */
|
|
35
|
+
export declare const MAX_MEMO_BYTES = 256;
|
|
36
|
+
export interface TronNetworkConfig {
|
|
37
|
+
/** The id of block 0, which the identity probe compares. */
|
|
38
|
+
readonly identity: string;
|
|
39
|
+
readonly expirationMs: number;
|
|
40
|
+
readonly energyMarginPercent: number;
|
|
41
|
+
/** The largest fee limit a transfer may carry, in sun: from 1 to 2^53 − 1. */
|
|
42
|
+
readonly maxFeeLimit: bigint;
|
|
43
|
+
}
|
|
44
|
+
export declare function tronNetworkConfig(chain: ChainInfo, network: NetworkInfo, options?: Readonly<Record<string, unknown>>): TronNetworkConfig;
|
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.MAX_MEMO_BYTES = exports.MAX_ENCODABLE_FEE_LIMIT = exports.DEFAULT_MAX_FEE_LIMIT = exports.DEFAULT_ENERGY_MARGIN_PERCENT = exports.TAPOS_WINDOW = exports.MAX_EXPIRATION_MS = exports.MIN_EXPIRATION_MS = exports.DEFAULT_EXPIRATION_MS = exports.TRON_INDEXER_CAPABILITIES = exports.TRON_CAPABILITIES = void 0;
|
|
4
|
+
exports.tronNetworkConfig = tronNetworkConfig;
|
|
5
|
+
/**
|
|
6
|
+
* What the Tron driver needs from a network's registry entry and the handle's options,
|
|
7
|
+
* validated once when a driver is created: a custom network or option with
|
|
8
|
+
* inconsistent data fails with `CONFIG_INVALID` instead of misbehaving.
|
|
9
|
+
*/
|
|
10
|
+
const error_1 = require("../../core/errors/error");
|
|
11
|
+
const capability_1 = require("../../core/model/capability");
|
|
12
|
+
const names_1 = require("../../core/util/names");
|
|
13
|
+
/** Every capability of the Tron driver; `address-history` comes with an indexer. */
|
|
14
|
+
exports.TRON_CAPABILITIES = Object.freeze([
|
|
15
|
+
'tokens',
|
|
16
|
+
'memo',
|
|
17
|
+
'block-scan',
|
|
18
|
+
'hd-public-derivation',
|
|
19
|
+
'expiry',
|
|
20
|
+
]);
|
|
21
|
+
exports.TRON_INDEXER_CAPABILITIES = Object.freeze([
|
|
22
|
+
'address-history',
|
|
23
|
+
]);
|
|
24
|
+
exports.DEFAULT_EXPIRATION_MS = 60_000;
|
|
25
|
+
exports.MIN_EXPIRATION_MS = 10_000;
|
|
26
|
+
/**
|
|
27
|
+
* The longest expiration window this driver builds. The negative inclusion proof does
|
|
28
|
+
* not depend on it: it scans from the reference block to the signed expiration.
|
|
29
|
+
*/
|
|
30
|
+
exports.MAX_EXPIRATION_MS = 300_000;
|
|
31
|
+
/**
|
|
32
|
+
* TaPoS (java-tron GreatVoyage-v4.8.2.2 `d5c3d1d1`, `Manager.validateTapos` and
|
|
33
|
+
* `updateRecentBlock`): a transaction's reference block must be the one the recent-block
|
|
34
|
+
* store holds under its number's bytes 6..8, and each block overwrites the entry of the block
|
|
35
|
+
* 65,536 below it. So only the 65,536 blocks after the reference block can hold the
|
|
36
|
+
* transaction, and an Attempt's `lastValidHeight` is its reference height plus this window.
|
|
37
|
+
*/
|
|
38
|
+
exports.TAPOS_WINDOW = 65536n;
|
|
39
|
+
exports.DEFAULT_ENERGY_MARGIN_PERCENT = 20;
|
|
40
|
+
/**
|
|
41
|
+
* The largest fee limit a TRC-20 transfer carries unless the handle's `maxFeeLimit` option
|
|
42
|
+
* allows more: 100 TRX, in sun. The network's own maximum (`getMaxFeeLimit`, 15,000
|
|
43
|
+
* TRX on mainnet), the energy price and the simulated energy all come from one endpoint's
|
|
44
|
+
* answer, and a call that fails through an INVALID opcode (a Solidity `assert`) burns its
|
|
45
|
+
* whole fee limit, so this operator bound is the only one no node can raise. It covers a
|
|
46
|
+
* TRC-20 transfer to a new holder (about 130,000 energy) at 420 sun per energy, margin
|
|
47
|
+
* included.
|
|
48
|
+
*/
|
|
49
|
+
exports.DEFAULT_MAX_FEE_LIMIT = 100000000n;
|
|
50
|
+
/** The largest `fee_limit` the codec writes exactly: 2^53 − 1 sun. */
|
|
51
|
+
exports.MAX_ENCODABLE_FEE_LIMIT = BigInt(Number.MAX_SAFE_INTEGER);
|
|
52
|
+
/** Memo bytes (UTF-8) accepted in `raw_data.data`. */
|
|
53
|
+
exports.MAX_MEMO_BYTES = 256;
|
|
54
|
+
/**
|
|
55
|
+
* The only driver options (`HandleOptions.options`) the Tron driver reads. Any other key is
|
|
56
|
+
* refused, so a typo such as `expirationMS` fails loudly instead of leaving the default in
|
|
57
|
+
* place.
|
|
58
|
+
*/
|
|
59
|
+
const OPTION_KEYS = Object.freeze([
|
|
60
|
+
'expirationMs',
|
|
61
|
+
'energyMarginPercent',
|
|
62
|
+
'maxFeeLimit',
|
|
63
|
+
]);
|
|
64
|
+
/**
|
|
65
|
+
* A capability from the network entry as an error may show it: a core capability's
|
|
66
|
+
* name is a fixed word, so it is shown; any other text could be a pasted secret, so it is not.
|
|
67
|
+
*/
|
|
68
|
+
const named = (key) => (0, names_1.knownName)(key, capability_1.KNOWN_CAPABILITIES, 'an unknown capability');
|
|
69
|
+
/**
|
|
70
|
+
* A network's capability overrides, checked against what the Tron driver serves,
|
|
71
|
+
* as `evmNetworkConfig` checks the EVM ones. The handle advertises the manifest's
|
|
72
|
+
* capabilities plus `add`, minus `remove` (the core's order), so that set must stay within
|
|
73
|
+
* the driver's own: no `replace-fee` or `cancel` (no replacement), no `fee-market-1559` (the
|
|
74
|
+
* `tron` fee model), no `finality-tag` (solidified finality), no `batch-transfer`.
|
|
75
|
+
* `address-history` comes with an indexer, never from the network, and `expiry` is how every
|
|
76
|
+
* Tron transaction is ordered: removing it would disable the proof that an Attempt
|
|
77
|
+
* expired. A removal must name a Tron capability, so a typo fails instead of leaving the
|
|
78
|
+
* capability advertised.
|
|
79
|
+
*/
|
|
80
|
+
function checkCapabilities(network, fail) {
|
|
81
|
+
const add = network.capabilities?.add ?? [];
|
|
82
|
+
const remove = network.capabilities?.remove ?? [];
|
|
83
|
+
if (!Array.isArray(add) || !Array.isArray(remove)) {
|
|
84
|
+
return fail('capabilities.add and capabilities.remove must be lists');
|
|
85
|
+
}
|
|
86
|
+
const own = (list, c) => list.includes(c);
|
|
87
|
+
const advertised = new Set([...exports.TRON_CAPABILITIES, ...add]);
|
|
88
|
+
for (const c of remove) {
|
|
89
|
+
if (!own(exports.TRON_CAPABILITIES, c) && !own(exports.TRON_INDEXER_CAPABILITIES, c)) {
|
|
90
|
+
fail(`capabilities.remove: the Tron driver does not have ${named(c)}`);
|
|
91
|
+
}
|
|
92
|
+
advertised.delete(c);
|
|
93
|
+
}
|
|
94
|
+
for (const c of advertised) {
|
|
95
|
+
if (own(exports.TRON_INDEXER_CAPABILITIES, c)) {
|
|
96
|
+
fail(`capabilities.add: ${named(c)} comes with an indexer, never from the network`);
|
|
97
|
+
}
|
|
98
|
+
if (!own(exports.TRON_CAPABILITIES, c)) {
|
|
99
|
+
fail(`capabilities.add: the Tron driver does not have ${named(c)}`);
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
if (!advertised.has('expiry')) {
|
|
103
|
+
fail(`capabilities.remove: every Tron transaction expires, so 'expiry' stays`);
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
function integerIn(value, min, max, name, fail) {
|
|
107
|
+
if (!Number.isSafeInteger(value) ||
|
|
108
|
+
value < min ||
|
|
109
|
+
value > max) {
|
|
110
|
+
fail(`${name} must be an integer from ${min} to ${max}`);
|
|
111
|
+
}
|
|
112
|
+
return value;
|
|
113
|
+
}
|
|
114
|
+
/** A fee-limit bound: a bigint of sun from 1 to what the codec writes exactly. */
|
|
115
|
+
function feeLimitBound(value, name, fail) {
|
|
116
|
+
if (typeof value !== 'bigint' || value < 1n || value > exports.MAX_ENCODABLE_FEE_LIMIT) {
|
|
117
|
+
fail(`${name} must be a bigint of sun from 1 to 2^53 − 1`);
|
|
118
|
+
}
|
|
119
|
+
return value;
|
|
120
|
+
}
|
|
121
|
+
function tronNetworkConfig(chain, network, options = {}) {
|
|
122
|
+
const fail = (reason) => {
|
|
123
|
+
throw new error_1.ConfigError('CONFIG_INVALID', `Tron network ${chain.id}:${network.id}: ${reason}`);
|
|
124
|
+
};
|
|
125
|
+
if (chain.family !== 'tron' || chain.ordering !== 'expiry') {
|
|
126
|
+
fail(`the chain must be of family 'tron' with 'expiry' ordering`);
|
|
127
|
+
}
|
|
128
|
+
if (network.identity === undefined || !/^[0-9a-f]{64}$/.test(network.identity)) {
|
|
129
|
+
fail('its identity must be the id of block 0 (64 lower-case hex digits)');
|
|
130
|
+
}
|
|
131
|
+
if (network.feeModel !== 'tron')
|
|
132
|
+
fail(`its fee model must be 'tron'`);
|
|
133
|
+
if (network.finality.kind !== 'solidified')
|
|
134
|
+
fail(`its finality must be 'solidified'`);
|
|
135
|
+
checkCapabilities(network, fail);
|
|
136
|
+
// The refusal lists the accepted names and shows neither the caller's key, which
|
|
137
|
+
// may be a pasted secret, nor its value.
|
|
138
|
+
for (const key of Object.keys(options)) {
|
|
139
|
+
if (!OPTION_KEYS.includes(key)) {
|
|
140
|
+
fail((0, names_1.unknownName)('option', OPTION_KEYS));
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
// The handle's option, else the network entry's own, else 100 TRX. A network
|
|
144
|
+
// value is checked even where an option overrides it, so a bad entry fails loudly.
|
|
145
|
+
const ownBound = network.params?.maxFeeLimit;
|
|
146
|
+
const networkBound = ownBound === undefined
|
|
147
|
+
? undefined
|
|
148
|
+
: feeLimitBound(ownBound, 'params.maxFeeLimit', fail);
|
|
149
|
+
const maxFeeLimit = options.maxFeeLimit !== undefined
|
|
150
|
+
? feeLimitBound(options.maxFeeLimit, 'maxFeeLimit', fail)
|
|
151
|
+
: (networkBound ?? exports.DEFAULT_MAX_FEE_LIMIT);
|
|
152
|
+
return {
|
|
153
|
+
identity: network.identity,
|
|
154
|
+
expirationMs: options.expirationMs === undefined
|
|
155
|
+
? exports.DEFAULT_EXPIRATION_MS
|
|
156
|
+
: integerIn(options.expirationMs, exports.MIN_EXPIRATION_MS, exports.MAX_EXPIRATION_MS, 'expirationMs', fail),
|
|
157
|
+
energyMarginPercent: options.energyMarginPercent === undefined
|
|
158
|
+
? exports.DEFAULT_ENERGY_MARGIN_PERCENT
|
|
159
|
+
: integerIn(options.energyMarginPercent, 0, 1_000, 'energyMarginPercent', fail),
|
|
160
|
+
maxFeeLimit,
|
|
161
|
+
};
|
|
162
|
+
}
|
|
163
|
+
//# sourceMappingURL=network.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"network.js","sourceRoot":"","sources":["../../../src/adapters/tron/network.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * What the Tron driver needs from a network's registry entry and the handle's options,\n * validated once when a driver is created: a custom network or option with\n * inconsistent data fails with `CONFIG_INVALID` instead of misbehaving.\n */\nimport { ConfigError } from '../../core/errors/error';\nimport { KNOWN_CAPABILITIES, type Capability } from '../../core/model/capability';\nimport type { ChainInfo, NetworkInfo } from '../../core/model/chain';\nimport { knownName, unknownName } from '../../core/util/names';\n\n/** Every capability of the Tron driver; `address-history` comes with an indexer. */\nexport const TRON_CAPABILITIES: readonly Capability[] = Object.freeze([\n 'tokens',\n 'memo',\n 'block-scan',\n 'hd-public-derivation',\n 'expiry',\n]);\nexport const TRON_INDEXER_CAPABILITIES: readonly Capability[] = Object.freeze([\n 'address-history',\n]);\n\nexport const DEFAULT_EXPIRATION_MS = 60_000;\nexport const MIN_EXPIRATION_MS = 10_000;\n/**\n * The longest expiration window this driver builds. The negative inclusion proof does\n * not depend on it: it scans from the reference block to the signed expiration.\n */\nexport const MAX_EXPIRATION_MS = 300_000;\n/**\n * TaPoS (java-tron GreatVoyage-v4.8.2.2 `d5c3d1d1`, `Manager.validateTapos` and\n * `updateRecentBlock`): a transaction's reference block must be the one the recent-block\n * store holds under its number's bytes 6..8, and each block overwrites the entry of the block\n * 65,536 below it. So only the 65,536 blocks after the reference block can hold the\n * transaction, and an Attempt's `lastValidHeight` is its reference height plus this window.\n */\nexport const TAPOS_WINDOW = 65_536n;\nexport const DEFAULT_ENERGY_MARGIN_PERCENT = 20;\n/**\n * The largest fee limit a TRC-20 transfer carries unless the handle's `maxFeeLimit` option\n * allows more: 100 TRX, in sun. The network's own maximum (`getMaxFeeLimit`, 15,000\n * TRX on mainnet), the energy price and the simulated energy all come from one endpoint's\n * answer, and a call that fails through an INVALID opcode (a Solidity `assert`) burns its\n * whole fee limit, so this operator bound is the only one no node can raise. It covers a\n * TRC-20 transfer to a new holder (about 130,000 energy) at 420 sun per energy, margin\n * included.\n */\nexport const DEFAULT_MAX_FEE_LIMIT = 100_000_000n;\n/** The largest `fee_limit` the codec writes exactly: 2^53 − 1 sun. */\nexport const MAX_ENCODABLE_FEE_LIMIT = BigInt(Number.MAX_SAFE_INTEGER);\n/** Memo bytes (UTF-8) accepted in `raw_data.data`. */\nexport const MAX_MEMO_BYTES = 256;\n\nexport interface TronNetworkConfig {\n /** The id of block 0, which the identity probe compares. */\n readonly identity: string;\n readonly expirationMs: number;\n readonly energyMarginPercent: number;\n /** The largest fee limit a transfer may carry, in sun: from 1 to 2^53 − 1. */\n readonly maxFeeLimit: bigint;\n}\n\n/**\n * The only driver options (`HandleOptions.options`) the Tron driver reads. Any other key is\n * refused, so a typo such as `expirationMS` fails loudly instead of leaving the default in\n * place.\n */\nconst OPTION_KEYS: readonly string[] = Object.freeze([\n 'expirationMs',\n 'energyMarginPercent',\n 'maxFeeLimit',\n]);\n/**\n * A capability from the network entry as an error may show it: a core capability's\n * name is a fixed word, so it is shown; any other text could be a pasted secret, so it is not.\n */\nconst named = (key: unknown): string =>\n knownName(key, KNOWN_CAPABILITIES, 'an unknown capability');\n\n/**\n * A network's capability overrides, checked against what the Tron driver serves,\n * as `evmNetworkConfig` checks the EVM ones. The handle advertises the manifest's\n * capabilities plus `add`, minus `remove` (the core's order), so that set must stay within\n * the driver's own: no `replace-fee` or `cancel` (no replacement), no `fee-market-1559` (the\n * `tron` fee model), no `finality-tag` (solidified finality), no `batch-transfer`.\n * `address-history` comes with an indexer, never from the network, and `expiry` is how every\n * Tron transaction is ordered: removing it would disable the proof that an Attempt\n * expired. A removal must name a Tron capability, so a typo fails instead of leaving the\n * capability advertised.\n */\nfunction checkCapabilities(network: NetworkInfo, fail: (reason: string) => never): void {\n const add: unknown = network.capabilities?.add ?? [];\n const remove: unknown = network.capabilities?.remove ?? [];\n if (!Array.isArray(add) || !Array.isArray(remove)) {\n return fail('capabilities.add and capabilities.remove must be lists');\n }\n const own = (list: readonly Capability[], c: unknown) => list.includes(c as Capability);\n const advertised = new Set<unknown>([...TRON_CAPABILITIES, ...add]);\n for (const c of remove) {\n if (!own(TRON_CAPABILITIES, c) && !own(TRON_INDEXER_CAPABILITIES, c)) {\n fail(`capabilities.remove: the Tron driver does not have ${named(c)}`);\n }\n advertised.delete(c);\n }\n for (const c of advertised) {\n if (own(TRON_INDEXER_CAPABILITIES, c)) {\n fail(`capabilities.add: ${named(c)} comes with an indexer, never from the network`);\n }\n if (!own(TRON_CAPABILITIES, c)) {\n fail(`capabilities.add: the Tron driver does not have ${named(c)}`);\n }\n }\n if (!advertised.has('expiry')) {\n fail(`capabilities.remove: every Tron transaction expires, so 'expiry' stays`);\n }\n}\n\nfunction integerIn(\n value: unknown,\n min: number,\n max: number,\n name: string,\n fail: (reason: string) => never,\n): number {\n if (\n !Number.isSafeInteger(value) ||\n (value as number) < min ||\n (value as number) > max\n ) {\n fail(`${name} must be an integer from ${min} to ${max}`);\n }\n return value as number;\n}\n\n/** A fee-limit bound: a bigint of sun from 1 to what the codec writes exactly. */\nfunction feeLimitBound(\n value: unknown,\n name: string,\n fail: (reason: string) => never,\n): bigint {\n if (typeof value !== 'bigint' || value < 1n || value > MAX_ENCODABLE_FEE_LIMIT) {\n fail(`${name} must be a bigint of sun from 1 to 2^53 − 1`);\n }\n return value as bigint;\n}\n\nexport function tronNetworkConfig(\n chain: ChainInfo,\n network: NetworkInfo,\n options: Readonly<Record<string, unknown>> = {},\n): TronNetworkConfig {\n const fail = (reason: string): never => {\n throw new ConfigError(\n 'CONFIG_INVALID',\n `Tron network ${chain.id}:${network.id}: ${reason}`,\n );\n };\n if (chain.family !== 'tron' || chain.ordering !== 'expiry') {\n fail(`the chain must be of family 'tron' with 'expiry' ordering`);\n }\n if (network.identity === undefined || !/^[0-9a-f]{64}$/.test(network.identity)) {\n fail('its identity must be the id of block 0 (64 lower-case hex digits)');\n }\n if (network.feeModel !== 'tron') fail(`its fee model must be 'tron'`);\n if (network.finality.kind !== 'solidified') fail(`its finality must be 'solidified'`);\n checkCapabilities(network, fail);\n // The refusal lists the accepted names and shows neither the caller's key, which\n // may be a pasted secret, nor its value.\n for (const key of Object.keys(options)) {\n if (!OPTION_KEYS.includes(key)) {\n fail(unknownName('option', OPTION_KEYS));\n }\n }\n // The handle's option, else the network entry's own, else 100 TRX. A network\n // value is checked even where an option overrides it, so a bad entry fails loudly.\n const ownBound = network.params?.maxFeeLimit;\n const networkBound =\n ownBound === undefined\n ? undefined\n : feeLimitBound(ownBound, 'params.maxFeeLimit', fail);\n const maxFeeLimit =\n options.maxFeeLimit !== undefined\n ? feeLimitBound(options.maxFeeLimit, 'maxFeeLimit', fail)\n : (networkBound ?? DEFAULT_MAX_FEE_LIMIT);\n return {\n identity: network.identity as string,\n expirationMs:\n options.expirationMs === undefined\n ? DEFAULT_EXPIRATION_MS\n : integerIn(\n options.expirationMs,\n MIN_EXPIRATION_MS,\n MAX_EXPIRATION_MS,\n 'expirationMs',\n fail,\n ),\n energyMarginPercent:\n options.energyMarginPercent === undefined\n ? DEFAULT_ENERGY_MARGIN_PERCENT\n : integerIn(options.energyMarginPercent, 0, 1_000, 'energyMarginPercent', fail),\n maxFeeLimit,\n };\n}\n"]}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The Tron family plugin: the chain, the USDT catalog and the TronGrid presets as
|
|
3
|
+
* data, plus the `tronweb` manifest. SDK-free: only the manifest's `load()` requires the
|
|
4
|
+
* codec module, and with it tronweb and the driver.
|
|
5
|
+
*/
|
|
6
|
+
import type { AdapterManifest, PeerDependency } from '../../core/driver/types';
|
|
7
|
+
import type { Plugin } from '../../core/registry/plugin';
|
|
8
|
+
/** The SDK version this adapter is validated against, keyed by library. */
|
|
9
|
+
export declare const TRON_PEER_DEPENDENCIES: Readonly<Record<'tronweb', PeerDependency>>;
|
|
10
|
+
/**
|
|
11
|
+
* The `tronweb` manifest. Built once, at module level, like the presets, so every
|
|
12
|
+
* `tronPlugin()` carries the same `load` function and registering it again is the same
|
|
13
|
+
* plugin: plugins compare their data structurally and their functions by identity.
|
|
14
|
+
*/
|
|
15
|
+
export declare const tronManifest: AdapterManifest;
|
|
16
|
+
/** The built-in Tron family: chain `tron` with mainnet, Shasta and Nile. */
|
|
17
|
+
export declare function tronPlugin(): Plugin;
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.tronManifest = exports.TRON_PEER_DEPENDENCIES = void 0;
|
|
4
|
+
exports.tronPlugin = tronPlugin;
|
|
5
|
+
const chains_1 = require("./chains");
|
|
6
|
+
const network_1 = require("./network");
|
|
7
|
+
const presets_1 = require("./presets");
|
|
8
|
+
const tokens_1 = require("./tokens");
|
|
9
|
+
/** The SDK version this adapter is validated against, keyed by library. */
|
|
10
|
+
exports.TRON_PEER_DEPENDENCIES = Object.freeze({ tronweb: Object.freeze({ name: 'tronweb', range: '^6.5.1' }) });
|
|
11
|
+
/**
|
|
12
|
+
* The `tronweb` manifest. Built once, at module level, like the presets, so every
|
|
13
|
+
* `tronPlugin()` carries the same `load` function and registering it again is the same
|
|
14
|
+
* plugin: plugins compare their data structurally and their functions by identity.
|
|
15
|
+
*/
|
|
16
|
+
exports.tronManifest = Object.freeze({
|
|
17
|
+
family: 'tron',
|
|
18
|
+
library: 'tronweb',
|
|
19
|
+
chains: Object.freeze(['tron']),
|
|
20
|
+
capabilities: network_1.TRON_CAPABILITIES,
|
|
21
|
+
indexerCapabilities: network_1.TRON_INDEXER_CAPABILITIES,
|
|
22
|
+
peerDependencies: Object.freeze([exports.TRON_PEER_DEPENDENCIES.tronweb]),
|
|
23
|
+
load: async () => {
|
|
24
|
+
// eslint-disable-next-line @typescript-eslint/no-require-imports
|
|
25
|
+
const mod = require('./codec');
|
|
26
|
+
return mod.tronwebDriverFactory;
|
|
27
|
+
},
|
|
28
|
+
});
|
|
29
|
+
/** The built-in Tron family: chain `tron` with mainnet, Shasta and Nile. */
|
|
30
|
+
function tronPlugin() {
|
|
31
|
+
return {
|
|
32
|
+
name: 'tron',
|
|
33
|
+
chains: [chains_1.TRON_CHAIN],
|
|
34
|
+
adapters: [exports.tronManifest],
|
|
35
|
+
presets: presets_1.TRON_PRESETS,
|
|
36
|
+
assets: tokens_1.TRON_TOKENS,
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=plugin.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin.js","sourceRoot":"","sources":["../../../src/adapters/tron/plugin.ts"],"names":[],"mappings":";;;AAwCA,gCAQC;AArCD,qCAAsC;AACtC,uCAAyE;AACzE,uCAAyC;AACzC,qCAAuC;AAEvC,2EAA2E;AAC9D,QAAA,sBAAsB,GACjC,MAAM,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC;AAElF;;;;GAIG;AACU,QAAA,YAAY,GAAoB,MAAM,CAAC,MAAM,CAAC;IACzD,MAAM,EAAE,MAAM;IACd,OAAO,EAAE,SAAS;IAClB,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC;IAC/B,YAAY,EAAE,2BAAiB;IAC/B,mBAAmB,EAAE,mCAAyB;IAC9C,gBAAgB,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,8BAAsB,CAAC,OAAO,CAAC,CAAC;IACjE,IAAI,EAAE,KAAK,IAA4B,EAAE;QACvC,iEAAiE;QACjE,MAAM,GAAG,GAAG,OAAO,CAAC,SAAS,CAA6B,CAAC;QAC3D,OAAO,GAAG,CAAC,oBAAoB,CAAC;IAClC,CAAC;CACF,CAAC,CAAC;AAEH,4EAA4E;AAC5E,SAAgB,UAAU;IACxB,OAAO;QACL,IAAI,EAAE,MAAM;QACZ,MAAM,EAAE,CAAC,mBAAU,CAAC;QACpB,QAAQ,EAAE,CAAC,oBAAY,CAAC;QACxB,OAAO,EAAE,sBAAY;QACrB,MAAM,EAAE,oBAAW;KACpB,CAAC;AACJ,CAAC","sourcesContent":["/**\n * The Tron family plugin: the chain, the USDT catalog and the TronGrid presets as\n * data, plus the `tronweb` manifest. SDK-free: only the manifest's `load()` requires the\n * codec module, and with it tronweb and the driver.\n */\nimport type {\n AdapterManifest,\n DriverFactory,\n PeerDependency,\n} from '../../core/driver/types';\nimport type { Plugin } from '../../core/registry/plugin';\nimport { TRON_CHAIN } from './chains';\nimport { TRON_CAPABILITIES, TRON_INDEXER_CAPABILITIES } from './network';\nimport { TRON_PRESETS } from './presets';\nimport { TRON_TOKENS } from './tokens';\n\n/** The SDK version this adapter is validated against, keyed by library. */\nexport const TRON_PEER_DEPENDENCIES: Readonly<Record<'tronweb', PeerDependency>> =\n Object.freeze({ tronweb: Object.freeze({ name: 'tronweb', range: '^6.5.1' }) });\n\n/**\n * The `tronweb` manifest. Built once, at module level, like the presets, so every\n * `tronPlugin()` carries the same `load` function and registering it again is the same\n * plugin: plugins compare their data structurally and their functions by identity.\n */\nexport const tronManifest: AdapterManifest = Object.freeze({\n family: 'tron',\n library: 'tronweb',\n chains: Object.freeze(['tron']),\n capabilities: TRON_CAPABILITIES,\n indexerCapabilities: TRON_INDEXER_CAPABILITIES,\n peerDependencies: Object.freeze([TRON_PEER_DEPENDENCIES.tronweb]),\n load: async (): Promise<DriverFactory> => {\n // eslint-disable-next-line @typescript-eslint/no-require-imports\n const mod = require('./codec') as typeof import('./codec');\n return mod.tronwebDriverFactory;\n },\n});\n\n/** The built-in Tron family: chain `tron` with mainnet, Shasta and Nile. */\nexport function tronPlugin(): Plugin {\n return {\n name: 'tron',\n chains: [TRON_CHAIN],\n adapters: [tronManifest],\n presets: TRON_PRESETS,\n assets: TRON_TOKENS,\n };\n}\n"]}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { ProviderPreset } from '../../core/registry/providers';
|
|
2
|
+
/** TronGrid hosts per network (Tron developer docs, "Networks"). */
|
|
3
|
+
export declare const TRONGRID_HOSTS: Readonly<Record<string, string>>;
|
|
4
|
+
/** Frozen with each preset; built once, so `use(tronPlugin())` stays idempotent. */
|
|
5
|
+
export declare const TRON_PRESETS: readonly ProviderPreset[];
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.TRON_PRESETS = exports.TRONGRID_HOSTS = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Tron provider presets: TronGrid, the hosted service Tron's own documentation
|
|
6
|
+
* lists for every network. `trongrid` sends the API key in the `TRON-PRO-API-KEY` header as
|
|
7
|
+
* a `Secret`; `public` is the same hosts without a key (rate limited, not for production).
|
|
8
|
+
* Each preset serves both kinds: `rpc` (the full node, solidity node and JSON-RPC paths) and
|
|
9
|
+
* `indexer` (TronGrid's `/v1` account history), so `{ provider, indexer }` may name it twice.
|
|
10
|
+
*/
|
|
11
|
+
const error_1 = require("../../core/errors/error");
|
|
12
|
+
const secret_1 = require("../../core/secret/secret");
|
|
13
|
+
const freeze_1 = require("../../core/util/freeze");
|
|
14
|
+
/** TronGrid hosts per network (Tron developer docs, "Networks"). */
|
|
15
|
+
exports.TRONGRID_HOSTS = Object.freeze({
|
|
16
|
+
mainnet: 'https://api.trongrid.io',
|
|
17
|
+
shasta: 'https://api.shasta.trongrid.io',
|
|
18
|
+
nile: 'https://nile.trongrid.io',
|
|
19
|
+
});
|
|
20
|
+
const supports = (chain, network) => chain === 'tron' && Object.hasOwn(exports.TRONGRID_HOSTS, network);
|
|
21
|
+
function host(input) {
|
|
22
|
+
const value = exports.TRONGRID_HOSTS[input.network];
|
|
23
|
+
// Unreachable through the catalog, which asks `supports` first.
|
|
24
|
+
if (value === undefined)
|
|
25
|
+
throw new Error(`no TronGrid host for ${input.network}`);
|
|
26
|
+
return value;
|
|
27
|
+
}
|
|
28
|
+
/** The revealed key; the error names the preset and network, never the key. */
|
|
29
|
+
function apiKeyOf(input) {
|
|
30
|
+
const key = input.apiKey === undefined ? undefined : (0, secret_1.reveal)(input.apiKey);
|
|
31
|
+
if (typeof key !== 'string' || key.trim() === '') {
|
|
32
|
+
throw new error_1.ConfigError('CONFIG_INVALID', `provider preset 'trongrid' requires a non-empty apiKey for ${input.chain}:${input.network}`);
|
|
33
|
+
}
|
|
34
|
+
return key;
|
|
35
|
+
}
|
|
36
|
+
function presets(kind) {
|
|
37
|
+
return [
|
|
38
|
+
{
|
|
39
|
+
name: 'public',
|
|
40
|
+
kind,
|
|
41
|
+
production: false,
|
|
42
|
+
supports,
|
|
43
|
+
endpoints: (input) => [
|
|
44
|
+
{ name: 'trongrid-public', url: host(input), kind },
|
|
45
|
+
],
|
|
46
|
+
},
|
|
47
|
+
{
|
|
48
|
+
name: 'trongrid',
|
|
49
|
+
kind,
|
|
50
|
+
requiresApiKey: true,
|
|
51
|
+
supports,
|
|
52
|
+
endpoints: (input) => [
|
|
53
|
+
{
|
|
54
|
+
name: 'trongrid',
|
|
55
|
+
url: host(input),
|
|
56
|
+
kind,
|
|
57
|
+
headers: { 'TRON-PRO-API-KEY': (0, secret_1.secret)(apiKeyOf(input)) },
|
|
58
|
+
},
|
|
59
|
+
],
|
|
60
|
+
},
|
|
61
|
+
];
|
|
62
|
+
}
|
|
63
|
+
/** Frozen with each preset; built once, so `use(tronPlugin())` stays idempotent. */
|
|
64
|
+
exports.TRON_PRESETS = (0, freeze_1.deepFreeze)([
|
|
65
|
+
...presets('rpc'),
|
|
66
|
+
...presets('indexer'),
|
|
67
|
+
]);
|
|
68
|
+
//# sourceMappingURL=presets.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"presets.js","sourceRoot":"","sources":["../../../src/adapters/tron/presets.ts"],"names":[],"mappings":";;;AAAA;;;;;;GAMG;AACH,mDAAsD;AAEtD,qDAA0D;AAE1D,mDAAoD;AAEpD,oEAAoE;AACvD,QAAA,cAAc,GAAqC,MAAM,CAAC,MAAM,CAAC;IAC5E,OAAO,EAAE,yBAAyB;IAClC,MAAM,EAAE,gCAAgC;IACxC,IAAI,EAAE,0BAA0B;CACjC,CAAC,CAAC;AAEH,MAAM,QAAQ,GAAG,CAAC,KAAa,EAAE,OAAe,EAAW,EAAE,CAC3D,KAAK,KAAK,MAAM,IAAI,MAAM,CAAC,MAAM,CAAC,sBAAc,EAAE,OAAO,CAAC,CAAC;AAE7D,SAAS,IAAI,CAAC,KAAkB;IAC9B,MAAM,KAAK,GAAG,sBAAc,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAC5C,gEAAgE;IAChE,IAAI,KAAK,KAAK,SAAS;QAAE,MAAM,IAAI,KAAK,CAAC,wBAAwB,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;IAClF,OAAO,KAAK,CAAC;AACf,CAAC;AAED,+EAA+E;AAC/E,SAAS,QAAQ,CAAC,KAAkB;IAClC,MAAM,GAAG,GAAY,KAAK,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAA,eAAM,EAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IACnF,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;QACjD,MAAM,IAAI,mBAAW,CACnB,gBAAgB,EAChB,8DAA8D,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,OAAO,EAAE,CAC7F,CAAC;IACJ,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,OAAO,CAAC,IAAuB;IACtC,OAAO;QACL;YACE,IAAI,EAAE,QAAQ;YACd,IAAI;YACJ,UAAU,EAAE,KAAK;YACjB,QAAQ;YACR,SAAS,EAAE,CAAC,KAAK,EAA6B,EAAE,CAAC;gBAC/C,EAAE,IAAI,EAAE,iBAAiB,EAAE,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE;aACpD;SACF;QACD;YACE,IAAI,EAAE,UAAU;YAChB,IAAI;YACJ,cAAc,EAAE,IAAI;YACpB,QAAQ;YACR,SAAS,EAAE,CAAC,KAAK,EAA6B,EAAE,CAAC;gBAC/C;oBACE,IAAI,EAAE,UAAU;oBAChB,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC;oBAChB,IAAI;oBACJ,OAAO,EAAE,EAAE,kBAAkB,EAAE,IAAA,eAAM,EAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE;iBACzD;aACF;SACF;KACF,CAAC;AACJ,CAAC;AAED,oFAAoF;AACvE,QAAA,YAAY,GAA8B,IAAA,mBAAU,EAAC;IAChE,GAAG,OAAO,CAAC,KAAK,CAAC;IACjB,GAAG,OAAO,CAAC,SAAS,CAAC;CACtB,CAAC,CAAC","sourcesContent":["/**\n * Tron provider presets: TronGrid, the hosted service Tron's own documentation\n * lists for every network. `trongrid` sends the API key in the `TRON-PRO-API-KEY` header as\n * a `Secret`; `public` is the same hosts without a key (rate limited, not for production).\n * Each preset serves both kinds: `rpc` (the full node, solidity node and JSON-RPC paths) and\n * `indexer` (TronGrid's `/v1` account history), so `{ provider, indexer }` may name it twice.\n */\nimport { ConfigError } from '../../core/errors/error';\nimport type { PresetInput, ProviderPreset } from '../../core/registry/providers';\nimport { reveal, secret } from '../../core/secret/secret';\nimport type { EndpointConfig } from '../../core/transport/types';\nimport { deepFreeze } from '../../core/util/freeze';\n\n/** TronGrid hosts per network (Tron developer docs, \"Networks\"). */\nexport const TRONGRID_HOSTS: Readonly<Record<string, string>> = Object.freeze({\n mainnet: 'https://api.trongrid.io',\n shasta: 'https://api.shasta.trongrid.io',\n nile: 'https://nile.trongrid.io',\n});\n\nconst supports = (chain: string, network: string): boolean =>\n chain === 'tron' && Object.hasOwn(TRONGRID_HOSTS, network);\n\nfunction host(input: PresetInput): string {\n const value = TRONGRID_HOSTS[input.network];\n // Unreachable through the catalog, which asks `supports` first.\n if (value === undefined) throw new Error(`no TronGrid host for ${input.network}`);\n return value;\n}\n\n/** The revealed key; the error names the preset and network, never the key. */\nfunction apiKeyOf(input: PresetInput): string {\n const key: unknown = input.apiKey === undefined ? undefined : reveal(input.apiKey);\n if (typeof key !== 'string' || key.trim() === '') {\n throw new ConfigError(\n 'CONFIG_INVALID',\n `provider preset 'trongrid' requires a non-empty apiKey for ${input.chain}:${input.network}`,\n );\n }\n return key;\n}\n\nfunction presets(kind: 'rpc' | 'indexer'): ProviderPreset[] {\n return [\n {\n name: 'public',\n kind,\n production: false,\n supports,\n endpoints: (input): readonly EndpointConfig[] => [\n { name: 'trongrid-public', url: host(input), kind },\n ],\n },\n {\n name: 'trongrid',\n kind,\n requiresApiKey: true,\n supports,\n endpoints: (input): readonly EndpointConfig[] => [\n {\n name: 'trongrid',\n url: host(input),\n kind,\n headers: { 'TRON-PRO-API-KEY': secret(apiKeyOf(input)) },\n },\n ],\n },\n ];\n}\n\n/** Frozen with each preset; built once, so `use(tronPlugin())` stays idempotent. */\nexport const TRON_PRESETS: readonly ProviderPreset[] = deepFreeze([\n ...presets('rpc'),\n ...presets('indexer'),\n]);\n"]}
|