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,86 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.FakeClock = void 0;
|
|
4
|
+
exports.settle = settle;
|
|
5
|
+
exports.drive = drive;
|
|
6
|
+
const clock_1 = require("../core/util/clock");
|
|
7
|
+
/** Lets pending promise chains and I/O callbacks run. */
|
|
8
|
+
async function settle(rounds = 5) {
|
|
9
|
+
for (let i = 0; i < rounds; i++)
|
|
10
|
+
await new Promise((r) => setImmediate(r));
|
|
11
|
+
}
|
|
12
|
+
/** Deterministic clock for tests: time moves only when `advance` is called. */
|
|
13
|
+
class FakeClock {
|
|
14
|
+
#now;
|
|
15
|
+
#seq = 0;
|
|
16
|
+
#timers = [];
|
|
17
|
+
constructor(start = 1_700_000_000_000) {
|
|
18
|
+
this.#now = start;
|
|
19
|
+
}
|
|
20
|
+
now() {
|
|
21
|
+
return this.#now;
|
|
22
|
+
}
|
|
23
|
+
get pending() {
|
|
24
|
+
return this.#timers.length;
|
|
25
|
+
}
|
|
26
|
+
sleep(ms, signal) {
|
|
27
|
+
return new Promise((resolve, reject) => {
|
|
28
|
+
if (signal?.aborted) {
|
|
29
|
+
reject((0, clock_1.abortReason)(signal));
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
32
|
+
const onAbort = () => {
|
|
33
|
+
this.#timers = this.#timers.filter((t) => t !== timer);
|
|
34
|
+
reject((0, clock_1.abortReason)(signal));
|
|
35
|
+
};
|
|
36
|
+
const timer = {
|
|
37
|
+
at: this.#now + Math.max(0, ms),
|
|
38
|
+
seq: this.#seq++,
|
|
39
|
+
wake: () => {
|
|
40
|
+
signal?.removeEventListener('abort', onAbort);
|
|
41
|
+
resolve();
|
|
42
|
+
},
|
|
43
|
+
};
|
|
44
|
+
signal?.addEventListener('abort', onAbort, { once: true });
|
|
45
|
+
this.#timers.push(timer);
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
/** Moves time forward, waking due sleepers in order and settling async work between them. */
|
|
49
|
+
async advance(ms) {
|
|
50
|
+
const target = this.#now + ms;
|
|
51
|
+
await settle();
|
|
52
|
+
for (;;) {
|
|
53
|
+
const due = this.#timers
|
|
54
|
+
.filter((t) => t.at <= target)
|
|
55
|
+
.sort((a, b) => a.at - b.at || a.seq - b.seq)[0];
|
|
56
|
+
if (!due)
|
|
57
|
+
break;
|
|
58
|
+
this.#timers = this.#timers.filter((t) => t !== due);
|
|
59
|
+
this.#now = Math.max(this.#now, due.at);
|
|
60
|
+
due.wake();
|
|
61
|
+
await settle();
|
|
62
|
+
}
|
|
63
|
+
this.#now = target;
|
|
64
|
+
await settle();
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
exports.FakeClock = FakeClock;
|
|
68
|
+
/** Advances `clock` in steps until `promise` settles, then returns its value or rethrows. */
|
|
69
|
+
async function drive(clock, promise, stepMs = 10, maxSteps = 10_000) {
|
|
70
|
+
let settled = false;
|
|
71
|
+
const tracked = promise.then((value) => {
|
|
72
|
+
settled = true;
|
|
73
|
+
return value;
|
|
74
|
+
}, (error) => {
|
|
75
|
+
settled = true;
|
|
76
|
+
throw error;
|
|
77
|
+
});
|
|
78
|
+
tracked.catch(() => undefined);
|
|
79
|
+
await settle();
|
|
80
|
+
for (let i = 0; i < maxSteps && !settled; i++)
|
|
81
|
+
await clock.advance(stepMs);
|
|
82
|
+
if (!settled)
|
|
83
|
+
throw new Error(`promise did not settle within ${maxSteps * stepMs}ms of fake time`);
|
|
84
|
+
return tracked;
|
|
85
|
+
}
|
|
86
|
+
//# sourceMappingURL=fake-clock.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fake-clock.js","sourceRoot":"","sources":["../../src/testing/fake-clock.ts"],"names":[],"mappings":"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","sourcesContent":["import { abortReason, type Clock } from '../core/util/clock';\n\ninterface Timer {\n readonly at: number;\n readonly seq: number;\n readonly wake: () => void;\n}\n\n/** Lets pending promise chains and I/O callbacks run. */\nexport async function settle(rounds = 5): Promise<void> {\n for (let i = 0; i < rounds; i++) await new Promise<void>((r) => setImmediate(r));\n}\n\n/** Deterministic clock for tests: time moves only when `advance` is called. */\nexport class FakeClock implements Clock {\n #now: number;\n #seq = 0;\n #timers: Timer[] = [];\n\n constructor(start = 1_700_000_000_000) {\n this.#now = start;\n }\n\n now(): number {\n return this.#now;\n }\n\n get pending(): number {\n return this.#timers.length;\n }\n\n sleep(ms: number, signal?: AbortSignal): Promise<void> {\n return new Promise<void>((resolve, reject) => {\n if (signal?.aborted) {\n reject(abortReason(signal));\n return;\n }\n const onAbort = () => {\n this.#timers = this.#timers.filter((t) => t !== timer);\n reject(abortReason(signal as AbortSignal));\n };\n const timer: Timer = {\n at: this.#now + Math.max(0, ms),\n seq: this.#seq++,\n wake: () => {\n signal?.removeEventListener('abort', onAbort);\n resolve();\n },\n };\n signal?.addEventListener('abort', onAbort, { once: true });\n this.#timers.push(timer);\n });\n }\n\n /** Moves time forward, waking due sleepers in order and settling async work between them. */\n async advance(ms: number): Promise<void> {\n const target = this.#now + ms;\n await settle();\n for (;;) {\n const due = this.#timers\n .filter((t) => t.at <= target)\n .sort((a, b) => a.at - b.at || a.seq - b.seq)[0];\n if (!due) break;\n this.#timers = this.#timers.filter((t) => t !== due);\n this.#now = Math.max(this.#now, due.at);\n due.wake();\n await settle();\n }\n this.#now = target;\n await settle();\n }\n}\n\n/** Advances `clock` in steps until `promise` settles, then returns its value or rethrows. */\nexport async function drive<T>(\n clock: FakeClock,\n promise: Promise<T>,\n stepMs = 10,\n maxSteps = 10_000,\n): Promise<T> {\n let settled = false;\n const tracked = promise.then(\n (value) => {\n settled = true;\n return value;\n },\n (error: unknown) => {\n settled = true;\n throw error;\n },\n );\n tracked.catch(() => undefined);\n await settle();\n for (let i = 0; i < maxSteps && !settled; i++) await clock.advance(stepMs);\n if (!settled)\n throw new Error(`promise did not settle within ${maxSteps * stepMs}ms of fake time`);\n return tracked;\n}\n"]}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { DriverFactory } from '../core/driver/types';
|
|
2
|
+
export interface FakeExt {
|
|
3
|
+
readonly fake: {
|
|
4
|
+
nonceOf(address: string): Promise<bigint>;
|
|
5
|
+
head(): Promise<bigint>;
|
|
6
|
+
};
|
|
7
|
+
}
|
|
8
|
+
export interface FakeNativeClient {
|
|
9
|
+
readonly id: number;
|
|
10
|
+
readonly settings: Record<string, unknown>;
|
|
11
|
+
/** How many times the driver's `close` for this client ran. */
|
|
12
|
+
readonly closes: number;
|
|
13
|
+
rpc<T = unknown>(method: string, params?: unknown[]): Promise<T>;
|
|
14
|
+
}
|
|
15
|
+
export declare const fakeDriverFactory: DriverFactory;
|
|
@@ -0,0 +1,458 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.fakeDriverFactory = void 0;
|
|
4
|
+
const error_1 = require("../core/errors/error");
|
|
5
|
+
const asset_1 = require("../core/model/asset");
|
|
6
|
+
const bytes_1 = require("../core/util/bytes");
|
|
7
|
+
const json_1 = require("../core/util/json");
|
|
8
|
+
const fake_chain_1 = require("./fake-chain");
|
|
9
|
+
let nativeClients = 0;
|
|
10
|
+
const REJECTED = /malformed transaction|invalid chain id|invalid sender|invalid signature/;
|
|
11
|
+
function classify(message) {
|
|
12
|
+
if (/already known|already processed/.test(message))
|
|
13
|
+
return { kind: 'already-known' };
|
|
14
|
+
if (REJECTED.test(message))
|
|
15
|
+
return { kind: 'rejected', reason: message };
|
|
16
|
+
if (/insufficient funds/.test(message))
|
|
17
|
+
return { kind: 'refused', code: 'INSUFFICIENT_FUNDS', reason: message };
|
|
18
|
+
if (/underpriced|fee too low/.test(message))
|
|
19
|
+
return { kind: 'refused', code: 'FEE_TOO_LOW', reason: message };
|
|
20
|
+
if (/nonce too low|seqno mismatch/.test(message))
|
|
21
|
+
return { kind: 'refused', code: 'NONCE_CONFLICT', reason: message };
|
|
22
|
+
if (/expired/.test(message))
|
|
23
|
+
return { kind: 'refused', code: 'TX_EXPIRED', reason: message };
|
|
24
|
+
return { kind: 'refused', code: 'TX_REFUSED', reason: message };
|
|
25
|
+
}
|
|
26
|
+
function toDriverBlock(wire) {
|
|
27
|
+
return {
|
|
28
|
+
height: BigInt(wire.height),
|
|
29
|
+
hash: wire.hash,
|
|
30
|
+
parentHash: wire.parentHash,
|
|
31
|
+
timestamp: wire.timestamp,
|
|
32
|
+
transactionIds: wire.txIds,
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
function toDriverTx(wire) {
|
|
36
|
+
const included = wire.blockHeight !== undefined && wire.blockHash !== undefined;
|
|
37
|
+
return {
|
|
38
|
+
id: wire.id,
|
|
39
|
+
observation: included
|
|
40
|
+
? {
|
|
41
|
+
seen: 'block',
|
|
42
|
+
txHash: wire.id,
|
|
43
|
+
blockHeight: BigInt(wire.blockHeight),
|
|
44
|
+
blockHash: wire.blockHash,
|
|
45
|
+
success: wire.success ?? true,
|
|
46
|
+
}
|
|
47
|
+
: { seen: wire.pending ? 'mempool' : 'none' },
|
|
48
|
+
fee: [{ asset: 'native', amount: BigInt(wire.fee) }],
|
|
49
|
+
transfers: wire.success === false
|
|
50
|
+
? []
|
|
51
|
+
: [
|
|
52
|
+
{
|
|
53
|
+
locator: 'native',
|
|
54
|
+
from: [wire.from],
|
|
55
|
+
to: wire.to,
|
|
56
|
+
asset: 'native',
|
|
57
|
+
amount: BigInt(wire.amount),
|
|
58
|
+
source: 'native',
|
|
59
|
+
...(wire.memo !== undefined ? { memo: wire.memo } : {}),
|
|
60
|
+
},
|
|
61
|
+
],
|
|
62
|
+
decoding: 'complete',
|
|
63
|
+
details: wire.nonce !== undefined ? { nonce: wire.nonce } : {},
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* The proof contract (`ProofSource`): a JSON-RPC error answer is no negative
|
|
68
|
+
* proof. Every `RPC_ERROR` on a proof path becomes a retryable `PROVIDER_UNAVAILABLE` that
|
|
69
|
+
* carries it as its cause, so the core decides nothing and looks again later; every other
|
|
70
|
+
* error passes unchanged. The EVM driver's proofs keep the same boundary.
|
|
71
|
+
*/
|
|
72
|
+
async function undecided(proof) {
|
|
73
|
+
try {
|
|
74
|
+
return await proof();
|
|
75
|
+
}
|
|
76
|
+
catch (error) {
|
|
77
|
+
if (!(0, error_1.isCryptoAioError)(error, 'RPC_ERROR'))
|
|
78
|
+
throw error;
|
|
79
|
+
throw new error_1.ProviderError('PROVIDER_UNAVAILABLE', 'the endpoints gave no answer', {
|
|
80
|
+
cause: error,
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
exports.fakeDriverFactory = {
|
|
85
|
+
async create(ctx) {
|
|
86
|
+
const { transport, chain, network, clock } = ctx;
|
|
87
|
+
const ordering = chain.ordering;
|
|
88
|
+
const expiryBlocks = BigInt(typeof ctx.options.expiryBlocks === 'number' ? ctx.options.expiryBlocks : 5);
|
|
89
|
+
const minBump = BigInt(network.replacement?.minBumpPercent ?? 10);
|
|
90
|
+
const nativeAsset = (0, asset_1.assetId)(chain.id, network.id, 'native');
|
|
91
|
+
transport.setProbes({
|
|
92
|
+
identity: (call) => call.rpc('fake_identity'),
|
|
93
|
+
...(network.identity !== undefined ? { expectedIdentity: network.identity } : {}),
|
|
94
|
+
height: async (call) => BigInt(await call.rpc('fake_blockNumber')),
|
|
95
|
+
});
|
|
96
|
+
const call = (method, params = [], options = {}) => transport.rpc(method, params, options);
|
|
97
|
+
const read = (method, params = []) => call(method, params);
|
|
98
|
+
const monitor = (method, params = []) => call(method, params, { purpose: 'monitor' });
|
|
99
|
+
const proof = (method, params = []) => call(method, params, { quorum: 'proof' });
|
|
100
|
+
const assertNative = (asset) => {
|
|
101
|
+
if (asset !== 'native') {
|
|
102
|
+
throw new error_1.UnsupportedCapabilityError('UNSUPPORTED_CAPABILITY', 'the fake chain has no tokens');
|
|
103
|
+
}
|
|
104
|
+
};
|
|
105
|
+
const address = {
|
|
106
|
+
validate: (value) => (0, fake_chain_1.isFakeAddress)(value),
|
|
107
|
+
normalize: (value) => {
|
|
108
|
+
if (!(0, fake_chain_1.isFakeAddress)(value))
|
|
109
|
+
throw new error_1.ValidationError('INVALID_ADDRESS', 'not a fake-chain address');
|
|
110
|
+
const canonical = value.toLowerCase();
|
|
111
|
+
return { canonical, display: canonical };
|
|
112
|
+
},
|
|
113
|
+
fromPublicKey: (publicKey) => {
|
|
114
|
+
const canonical = (0, fake_chain_1.fakeAddress)(publicKey);
|
|
115
|
+
return { canonical, display: canonical };
|
|
116
|
+
},
|
|
117
|
+
};
|
|
118
|
+
const feeFor = async (fee) => {
|
|
119
|
+
if (typeof fee === 'object') {
|
|
120
|
+
const amount = fee.fee;
|
|
121
|
+
if (typeof amount !== 'bigint') {
|
|
122
|
+
throw new error_1.ValidationError('INVALID_INTENT', 'fake fee overrides look like { fee: bigint }');
|
|
123
|
+
}
|
|
124
|
+
return {
|
|
125
|
+
kind: 'fake',
|
|
126
|
+
speed: 'custom',
|
|
127
|
+
charges: [{ asset: 'native', amount, label: 'network' }],
|
|
128
|
+
bound: 'exact',
|
|
129
|
+
details: { fee: amount },
|
|
130
|
+
};
|
|
131
|
+
}
|
|
132
|
+
const rate = BigInt(await read('fake_feeRate'));
|
|
133
|
+
const amount = rate * (fee === 'slow' ? 1n : fee === 'normal' ? 2n : 3n);
|
|
134
|
+
return {
|
|
135
|
+
kind: 'fake',
|
|
136
|
+
speed: fee,
|
|
137
|
+
charges: [{ asset: 'native', amount, label: 'network' }],
|
|
138
|
+
bound: 'exact',
|
|
139
|
+
details: { fee: amount },
|
|
140
|
+
};
|
|
141
|
+
};
|
|
142
|
+
const buildUnsigned = async (intent, fee, build, fixedOrdering) => {
|
|
143
|
+
assertNative(intent.asset);
|
|
144
|
+
const output = intent.outputs[0];
|
|
145
|
+
if (!output || intent.outputs.length !== 1) {
|
|
146
|
+
throw new error_1.ValidationError('INVALID_INTENT', 'the fake chain supports exactly one output');
|
|
147
|
+
}
|
|
148
|
+
const key = build.keys[0];
|
|
149
|
+
if (!key)
|
|
150
|
+
throw new error_1.SigningError('SIGNER_UNAVAILABLE', 'no public key for the sending wallet');
|
|
151
|
+
let order;
|
|
152
|
+
if (ordering === 'expiry') {
|
|
153
|
+
const head = BigInt(await read('fake_blockNumber'));
|
|
154
|
+
order = fixedOrdering ?? { kind: 'expiry', lastValidHeight: head + expiryBlocks };
|
|
155
|
+
}
|
|
156
|
+
else {
|
|
157
|
+
const allocated = fixedOrdering ?? build.ordering;
|
|
158
|
+
if (!allocated || allocated.kind !== ordering) {
|
|
159
|
+
throw new error_1.StateError('INVALID_TRANSITION', `missing ${ordering} allocation for the fake chain`);
|
|
160
|
+
}
|
|
161
|
+
order =
|
|
162
|
+
ordering === 'seqno' && allocated.kind === 'seqno'
|
|
163
|
+
? { kind: 'seqno', seqno: allocated.seqno, validUntil: clock.now() + 60_000 }
|
|
164
|
+
: allocated;
|
|
165
|
+
}
|
|
166
|
+
const feeAmount = fee.charges.reduce((sum, c) => sum + c.amount, 0n);
|
|
167
|
+
const slot = order.kind === 'nonce'
|
|
168
|
+
? { nonce: order.nonce.toString() }
|
|
169
|
+
: order.kind === 'seqno'
|
|
170
|
+
? { nonce: order.seqno.toString() }
|
|
171
|
+
: order.kind === 'expiry' && order.lastValidHeight !== undefined
|
|
172
|
+
? { lastValidHeight: order.lastValidHeight.toString() }
|
|
173
|
+
: {};
|
|
174
|
+
const tx = {
|
|
175
|
+
chainId: network.identity ?? 'fake-local',
|
|
176
|
+
from: intent.from,
|
|
177
|
+
to: output.to,
|
|
178
|
+
amount: output.amount.toString(),
|
|
179
|
+
fee: feeAmount.toString(),
|
|
180
|
+
...slot,
|
|
181
|
+
...(intent.memo !== undefined ? { memo: intent.memo } : {}),
|
|
182
|
+
};
|
|
183
|
+
return {
|
|
184
|
+
payload: { encoding: 'json', data: (0, json_1.canonicalJson)(tx) },
|
|
185
|
+
signingRequests: [
|
|
186
|
+
{
|
|
187
|
+
id: 'r0',
|
|
188
|
+
scheme: 'secp256k1-ecdsa',
|
|
189
|
+
payload: (0, fake_chain_1.fakeDigest)(tx),
|
|
190
|
+
payloadKind: 'digest',
|
|
191
|
+
publicKey: key.publicKey,
|
|
192
|
+
...(key.keyRef ? { keyRef: key.keyRef } : {}),
|
|
193
|
+
},
|
|
194
|
+
],
|
|
195
|
+
ordering: order,
|
|
196
|
+
fee,
|
|
197
|
+
summary: {
|
|
198
|
+
asset: nativeAsset,
|
|
199
|
+
outputs: [{ to: output.to, amount: output.amount.toString() }],
|
|
200
|
+
...(intent.memo !== undefined ? { memo: intent.memo } : {}),
|
|
201
|
+
},
|
|
202
|
+
};
|
|
203
|
+
};
|
|
204
|
+
const builder = {
|
|
205
|
+
estimateFee: async (intent) => {
|
|
206
|
+
assertNative(intent.asset);
|
|
207
|
+
return feeFor(intent.fee);
|
|
208
|
+
},
|
|
209
|
+
checkFunds: async (intent, fee) => {
|
|
210
|
+
const available = BigInt(await read('fake_getBalance', [intent.from, 'latest']));
|
|
211
|
+
const required = intent.outputs.reduce((sum, o) => sum + o.amount, 0n) +
|
|
212
|
+
fee.charges.reduce((sum, c) => sum + c.amount, 0n);
|
|
213
|
+
return available >= required
|
|
214
|
+
? { ok: true }
|
|
215
|
+
: { ok: false, asset: 'native', required, available };
|
|
216
|
+
},
|
|
217
|
+
build: (intent, fee, build) => buildUnsigned(intent, fee, build),
|
|
218
|
+
assemble: async (unsigned, signatures) => {
|
|
219
|
+
const request = unsigned.signingRequests[0];
|
|
220
|
+
const signature = signatures.find((s) => s.requestId === 'r0');
|
|
221
|
+
if (!request || !signature || signature.recovery === undefined) {
|
|
222
|
+
throw new error_1.SigningError('SIGNING_FAILED', 'missing signature for request r0');
|
|
223
|
+
}
|
|
224
|
+
const tx = JSON.parse(unsigned.payload.data);
|
|
225
|
+
const raw = (0, fake_chain_1.encodeEnvelope)({
|
|
226
|
+
tx,
|
|
227
|
+
sig: (0, bytes_1.toHex)(signature.bytes),
|
|
228
|
+
recovery: signature.recovery,
|
|
229
|
+
pub: (0, bytes_1.toHex)(request.publicKey),
|
|
230
|
+
});
|
|
231
|
+
return {
|
|
232
|
+
raw: { encoding: 'base64', data: raw },
|
|
233
|
+
ref: { id: (0, fake_chain_1.fakeTxId)(raw), idKind: 'tx-hash', canonical: true },
|
|
234
|
+
};
|
|
235
|
+
},
|
|
236
|
+
};
|
|
237
|
+
const broadcaster = {
|
|
238
|
+
async broadcast(signed, options = {}) {
|
|
239
|
+
try {
|
|
240
|
+
await call('fake_sendRawTransaction', [signed.raw.data], {
|
|
241
|
+
retry: 'ambiguous-on-failure',
|
|
242
|
+
purpose: 'broadcast',
|
|
243
|
+
...(options.fanout !== undefined ? { fanout: options.fanout } : {}),
|
|
244
|
+
...(options.signal ? { signal: options.signal } : {}),
|
|
245
|
+
});
|
|
246
|
+
return { kind: 'accepted' };
|
|
247
|
+
}
|
|
248
|
+
catch (error) {
|
|
249
|
+
// The transport tags a definitive RPC_ERROR as ambiguous when an earlier
|
|
250
|
+
// attempt for this same call may already have reached the node (e.g. it timed out
|
|
251
|
+
// after being delivered, and the retry then sees "nonce too low"). Classifying that
|
|
252
|
+
// as a normal refusal would let a caller release or reuse a nonce/seqno slot whose
|
|
253
|
+
// transaction may actually be live — so an ambiguous error is rethrown unclassified
|
|
254
|
+
// instead of being turned into a resolved BroadcastResult.
|
|
255
|
+
if ((0, error_1.isCryptoAioError)(error, 'RPC_ERROR') && !error.ambiguous) {
|
|
256
|
+
return classify(String(error.details?.rpcMessage ?? error.message));
|
|
257
|
+
}
|
|
258
|
+
throw error;
|
|
259
|
+
}
|
|
260
|
+
},
|
|
261
|
+
};
|
|
262
|
+
const reader = {
|
|
263
|
+
getBalance: async (value, asset) => {
|
|
264
|
+
assertNative(asset);
|
|
265
|
+
return BigInt(await read('fake_getBalance', [value, 'latest']));
|
|
266
|
+
},
|
|
267
|
+
getBlockHeight: async () => BigInt(await monitor('fake_blockNumber')),
|
|
268
|
+
getFinalizedHeight: async () => BigInt((await monitor('fake_finalizedBlock')).height),
|
|
269
|
+
getBlock: async (ref) => {
|
|
270
|
+
const wire = await read('fake_getBlock', [
|
|
271
|
+
typeof ref === 'bigint' ? ref.toString() : ref,
|
|
272
|
+
false,
|
|
273
|
+
]);
|
|
274
|
+
return wire ? toDriverBlock(wire) : null;
|
|
275
|
+
},
|
|
276
|
+
getTransaction: async (id) => {
|
|
277
|
+
const wire = await read('fake_getTransaction', [id]);
|
|
278
|
+
return wire ? toDriverTx(wire) : null;
|
|
279
|
+
},
|
|
280
|
+
observe: async (ref) => {
|
|
281
|
+
const wire = await monitor('fake_getTransaction', [ref.id]);
|
|
282
|
+
return wire ? toDriverTx(wire).observation : { seen: 'none' };
|
|
283
|
+
},
|
|
284
|
+
};
|
|
285
|
+
const finalizedHead = () => undecided(async () => {
|
|
286
|
+
const head = await proof('fake_finalizedBlock');
|
|
287
|
+
return {
|
|
288
|
+
height: BigInt(head.height),
|
|
289
|
+
hash: head.hash,
|
|
290
|
+
timestamp: head.timestamp,
|
|
291
|
+
};
|
|
292
|
+
});
|
|
293
|
+
const proofs = {
|
|
294
|
+
finalizedHead,
|
|
295
|
+
includedFinal: (ref) => undecided(async () => {
|
|
296
|
+
const wire = await proof('fake_getFinalizedTransaction', [
|
|
297
|
+
ref.id,
|
|
298
|
+
]);
|
|
299
|
+
if (!wire || wire.blockHeight === undefined || wire.blockHash === undefined)
|
|
300
|
+
return { included: false };
|
|
301
|
+
return {
|
|
302
|
+
included: true,
|
|
303
|
+
success: wire.success ?? true,
|
|
304
|
+
blockHeight: BigInt(wire.blockHeight),
|
|
305
|
+
blockHash: wire.blockHash,
|
|
306
|
+
txHash: wire.id,
|
|
307
|
+
};
|
|
308
|
+
}),
|
|
309
|
+
slotConsumed: (order, from, level) => undecided(async () => {
|
|
310
|
+
if (order.kind !== 'nonce' && order.kind !== 'seqno')
|
|
311
|
+
return false;
|
|
312
|
+
const slot = order.kind === 'nonce' ? order.nonce : order.seqno;
|
|
313
|
+
const fetchNonce = level === 'finalized' ? proof : monitor;
|
|
314
|
+
const next = BigInt(await fetchNonce('fake_getNonce', [
|
|
315
|
+
from,
|
|
316
|
+
level === 'finalized' ? 'finalized' : 'latest',
|
|
317
|
+
]));
|
|
318
|
+
return next > slot;
|
|
319
|
+
}),
|
|
320
|
+
expired: async (order) => {
|
|
321
|
+
if (order.kind !== 'expiry' || order.lastValidHeight === undefined)
|
|
322
|
+
return false;
|
|
323
|
+
return (await finalizedHead()).height >= order.lastValidHeight;
|
|
324
|
+
},
|
|
325
|
+
blockHash: (height, level) => undecided(() => proof('fake_getBlockHash', [height.toString(), level])),
|
|
326
|
+
};
|
|
327
|
+
const sequence = ordering === 'expiry'
|
|
328
|
+
? undefined
|
|
329
|
+
: {
|
|
330
|
+
pending: async (value) => BigInt(await monitor('fake_getNonce', [value, 'pending'])),
|
|
331
|
+
latest: async (value) => BigInt(await monitor('fake_getNonce', [value, 'latest'])),
|
|
332
|
+
};
|
|
333
|
+
const previousTx = (previous) => JSON.parse(previous.payload.data);
|
|
334
|
+
const previousFee = (previous) => previous.fee.charges.reduce((sum, c) => sum + c.amount, 0n);
|
|
335
|
+
const replacement = ordering === 'nonce'
|
|
336
|
+
? {
|
|
337
|
+
replace: true,
|
|
338
|
+
cancel: true,
|
|
339
|
+
async buildReplacement(previous, fee, build) {
|
|
340
|
+
const next = await feeFor(fee);
|
|
341
|
+
const nextFee = next.charges.reduce((sum, c) => sum + c.amount, 0n);
|
|
342
|
+
if (nextFee * 100n < previousFee(previous) * (100n + minBump)) {
|
|
343
|
+
throw new error_1.ChainError('FEE_TOO_LOW', `replacement fee must be at least ${minBump}% higher`);
|
|
344
|
+
}
|
|
345
|
+
const tx = previousTx(previous);
|
|
346
|
+
return buildUnsigned({
|
|
347
|
+
asset: 'native',
|
|
348
|
+
outputs: [{ to: tx.to, amount: BigInt(tx.amount) }],
|
|
349
|
+
from: tx.from,
|
|
350
|
+
fee,
|
|
351
|
+
...(tx.memo !== undefined ? { memo: tx.memo } : {}),
|
|
352
|
+
}, next, build, previous.ordering);
|
|
353
|
+
},
|
|
354
|
+
async buildCancel(previous, build, requested) {
|
|
355
|
+
const bumped = (previousFee(previous) * (100n + minBump) + 99n) / 100n;
|
|
356
|
+
const fee = requested === undefined
|
|
357
|
+
? {
|
|
358
|
+
kind: 'fake',
|
|
359
|
+
speed: 'custom',
|
|
360
|
+
charges: [{ asset: 'native', amount: bumped, label: 'network' }],
|
|
361
|
+
bound: 'exact',
|
|
362
|
+
details: { fee: bumped },
|
|
363
|
+
}
|
|
364
|
+
: await feeFor(requested);
|
|
365
|
+
const amount = fee.charges.reduce((sum, c) => sum + c.amount, 0n);
|
|
366
|
+
if (amount * 100n < previousFee(previous) * (100n + minBump)) {
|
|
367
|
+
throw new error_1.ChainError('FEE_TOO_LOW', `a cancel's fee must be at least ${minBump}% higher`);
|
|
368
|
+
}
|
|
369
|
+
const tx = previousTx(previous);
|
|
370
|
+
return buildUnsigned({
|
|
371
|
+
asset: 'native',
|
|
372
|
+
outputs: [{ to: tx.from, amount: 0n }],
|
|
373
|
+
from: tx.from,
|
|
374
|
+
fee: requested ?? { fee: amount },
|
|
375
|
+
}, fee, build, previous.ordering);
|
|
376
|
+
},
|
|
377
|
+
}
|
|
378
|
+
: undefined;
|
|
379
|
+
const blocks = {
|
|
380
|
+
header: async (height) => {
|
|
381
|
+
const wire = await monitor('fake_getBlock', [
|
|
382
|
+
height.toString(),
|
|
383
|
+
false,
|
|
384
|
+
]);
|
|
385
|
+
return wire ? toDriverBlock(wire) : null;
|
|
386
|
+
},
|
|
387
|
+
transactions: async (block, filter) => {
|
|
388
|
+
const wire = await monitor('fake_getBlock', [
|
|
389
|
+
block.height.toString(),
|
|
390
|
+
true,
|
|
391
|
+
]);
|
|
392
|
+
if (!wire || wire.hash !== block.hash) {
|
|
393
|
+
throw new error_1.ProviderError('PROVIDER_INCONSISTENT', `block ${block.height} changed while scanning`, { retryable: true });
|
|
394
|
+
}
|
|
395
|
+
const txs = (wire.txs ?? []).map(toDriverTx);
|
|
396
|
+
if (!filter?.addresses?.length)
|
|
397
|
+
return txs;
|
|
398
|
+
const wanted = new Set(filter.addresses.map((a) => a.toLowerCase()));
|
|
399
|
+
return txs.filter((t) => t.transfers.some((tr) => wanted.has(tr.to) || tr.from.some((f) => wanted.has(f))));
|
|
400
|
+
},
|
|
401
|
+
};
|
|
402
|
+
const capabilities = new Set([
|
|
403
|
+
'memo',
|
|
404
|
+
'block-scan',
|
|
405
|
+
'finality-tag',
|
|
406
|
+
'hd-public-derivation',
|
|
407
|
+
]);
|
|
408
|
+
if (ordering === 'nonce') {
|
|
409
|
+
capabilities.add('replace-fee');
|
|
410
|
+
capabilities.add('cancel');
|
|
411
|
+
}
|
|
412
|
+
if (ordering === 'expiry')
|
|
413
|
+
capabilities.add('expiry');
|
|
414
|
+
return {
|
|
415
|
+
ordering,
|
|
416
|
+
capabilities,
|
|
417
|
+
address,
|
|
418
|
+
reader,
|
|
419
|
+
builder,
|
|
420
|
+
broadcaster,
|
|
421
|
+
proofs,
|
|
422
|
+
...(sequence ? { sequence } : {}),
|
|
423
|
+
...(replacement ? { replacement } : {}),
|
|
424
|
+
blocks,
|
|
425
|
+
// Written as a fresh literal here (not a separately-typed `const ext: FakeExt = ...`):
|
|
426
|
+
// `ChainDriver.ext` is a generic `Record<string, Record<string, (...args) => Promise<unknown>>>`,
|
|
427
|
+
// and a named interface like `FakeExt` has no index signature, so passing it through a
|
|
428
|
+
// typed intermediate fails TS2322 ("index signature missing"). A fresh object literal at
|
|
429
|
+
// the assignment site is checked structurally instead and satisfies both `ChainDriver.ext`
|
|
430
|
+
// and, via the `fake` module augmentation, `FakeExt`.
|
|
431
|
+
ext: {
|
|
432
|
+
fake: {
|
|
433
|
+
nonceOf: async (value) => BigInt(await read('fake_getNonce', [value, 'latest'])),
|
|
434
|
+
head: async () => BigInt(await read('fake_blockNumber')),
|
|
435
|
+
},
|
|
436
|
+
},
|
|
437
|
+
limits: () => ({ maxOutputs: 1 }),
|
|
438
|
+
createNativeClient: () => {
|
|
439
|
+
let closes = 0;
|
|
440
|
+
const client = {
|
|
441
|
+
id: ++nativeClients,
|
|
442
|
+
settings: {},
|
|
443
|
+
get closes() {
|
|
444
|
+
return closes;
|
|
445
|
+
},
|
|
446
|
+
rpc: (method, params = []) => transport.rpc(method, params),
|
|
447
|
+
};
|
|
448
|
+
return {
|
|
449
|
+
client,
|
|
450
|
+
close: () => {
|
|
451
|
+
closes += 1;
|
|
452
|
+
},
|
|
453
|
+
};
|
|
454
|
+
},
|
|
455
|
+
};
|
|
456
|
+
},
|
|
457
|
+
};
|
|
458
|
+
//# sourceMappingURL=fake-driver.js.map
|