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,64 @@
|
|
|
1
|
+
import type { FeeEstimateDraft } from '../model/fee';
|
|
2
|
+
import type { IntentSummary } from '../model/intent';
|
|
3
|
+
import type { Secret } from '../secret/secret';
|
|
4
|
+
export interface KeyRef {
|
|
5
|
+
/** Routes a request to a specific signer through `WalletConfig.signers`. */
|
|
6
|
+
readonly id?: string;
|
|
7
|
+
/** HD derivation path for mnemonic-backed signers. */
|
|
8
|
+
readonly path?: string;
|
|
9
|
+
}
|
|
10
|
+
export interface SigningParams {
|
|
11
|
+
/** BIP341 key-path tweak for `secp256k1-schnorr`. */
|
|
12
|
+
readonly tweak?: Uint8Array;
|
|
13
|
+
}
|
|
14
|
+
export interface SigningRequest {
|
|
15
|
+
readonly id: string;
|
|
16
|
+
readonly scheme: string;
|
|
17
|
+
readonly payload: Uint8Array;
|
|
18
|
+
readonly payloadKind: 'digest' | 'message';
|
|
19
|
+
readonly publicKey: Uint8Array;
|
|
20
|
+
readonly keyRef?: KeyRef;
|
|
21
|
+
readonly params?: SigningParams;
|
|
22
|
+
}
|
|
23
|
+
/** `secp256k1-ecdsa`: 64-byte compact r‖s (low-s) plus `recovery`; others: raw signature. */
|
|
24
|
+
export interface SignatureBundle {
|
|
25
|
+
readonly requestId: string;
|
|
26
|
+
readonly bytes: Uint8Array;
|
|
27
|
+
readonly recovery?: number;
|
|
28
|
+
}
|
|
29
|
+
export type SigningResult = {
|
|
30
|
+
readonly status: 'signed';
|
|
31
|
+
readonly signatures: readonly SignatureBundle[];
|
|
32
|
+
} | {
|
|
33
|
+
readonly status: 'pending';
|
|
34
|
+
readonly ticket?: string;
|
|
35
|
+
};
|
|
36
|
+
/** A pending signer's ticket, kept with the signer that issued it (only it can cancel it). */
|
|
37
|
+
export interface SignerTicket {
|
|
38
|
+
readonly signerId: string;
|
|
39
|
+
readonly ticket: string;
|
|
40
|
+
}
|
|
41
|
+
export type SigningPurpose = 'original' | 'replacement' | 'cancel' | 'rebuild';
|
|
42
|
+
/** Context handed to signers and policy hooks. Never contains secrets or SDK objects. */
|
|
43
|
+
export interface SigningContext {
|
|
44
|
+
readonly operationId: string;
|
|
45
|
+
readonly namespace: string;
|
|
46
|
+
readonly chain: string;
|
|
47
|
+
readonly network: string;
|
|
48
|
+
readonly wallet: string;
|
|
49
|
+
readonly tier?: string;
|
|
50
|
+
readonly purpose: SigningPurpose;
|
|
51
|
+
readonly summary: IntentSummary;
|
|
52
|
+
readonly fee: FeeEstimateDraft;
|
|
53
|
+
readonly unsignedHash: string;
|
|
54
|
+
}
|
|
55
|
+
export interface Signer {
|
|
56
|
+
readonly id: string;
|
|
57
|
+
readonly schemes: readonly string[];
|
|
58
|
+
getPublicKey(scheme: string, keyRef?: KeyRef): Promise<Uint8Array>;
|
|
59
|
+
sign(requests: readonly SigningRequest[], ctx: SigningContext): Promise<SigningResult>;
|
|
60
|
+
/** Best-effort cancellation of a pending request (used by `abandon`). */
|
|
61
|
+
cancelRequest?(ticket: string): Promise<void>;
|
|
62
|
+
/** Only available on signers created as exportable. */
|
|
63
|
+
exportKey?(scheme: string, keyRef?: KeyRef): Promise<Secret<Uint8Array>>;
|
|
64
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/core/signing/types.ts"],"names":[],"mappings":"","sourcesContent":["import type { FeeEstimateDraft } from '../model/fee';\nimport type { IntentSummary } from '../model/intent';\nimport type { Secret } from '../secret/secret';\n\nexport interface KeyRef {\n /** Routes a request to a specific signer through `WalletConfig.signers`. */\n readonly id?: string;\n /** HD derivation path for mnemonic-backed signers. */\n readonly path?: string;\n}\n\nexport interface SigningParams {\n /** BIP341 key-path tweak for `secp256k1-schnorr`. */\n readonly tweak?: Uint8Array;\n}\n\nexport interface SigningRequest {\n readonly id: string;\n readonly scheme: string;\n readonly payload: Uint8Array;\n readonly payloadKind: 'digest' | 'message';\n readonly publicKey: Uint8Array;\n readonly keyRef?: KeyRef;\n readonly params?: SigningParams;\n}\n\n/** `secp256k1-ecdsa`: 64-byte compact r‖s (low-s) plus `recovery`; others: raw signature. */\nexport interface SignatureBundle {\n readonly requestId: string;\n readonly bytes: Uint8Array;\n readonly recovery?: number;\n}\n\nexport type SigningResult =\n | { readonly status: 'signed'; readonly signatures: readonly SignatureBundle[] }\n | { readonly status: 'pending'; readonly ticket?: string };\n\n/** A pending signer's ticket, kept with the signer that issued it (only it can cancel it). */\nexport interface SignerTicket {\n readonly signerId: string;\n readonly ticket: string;\n}\n\nexport type SigningPurpose = 'original' | 'replacement' | 'cancel' | 'rebuild';\n\n/** Context handed to signers and policy hooks. Never contains secrets or SDK objects. */\nexport interface SigningContext {\n readonly operationId: string;\n readonly namespace: string;\n readonly chain: string;\n readonly network: string;\n readonly wallet: string;\n readonly tier?: string;\n readonly purpose: SigningPurpose;\n readonly summary: IntentSummary;\n readonly fee: FeeEstimateDraft;\n readonly unsignedHash: string;\n}\n\nexport interface Signer {\n readonly id: string;\n readonly schemes: readonly string[];\n getPublicKey(scheme: string, keyRef?: KeyRef): Promise<Uint8Array>;\n sign(requests: readonly SigningRequest[], ctx: SigningContext): Promise<SigningResult>;\n /** Best-effort cancellation of a pending request (used by `abandon`). */\n cancelRequest?(ticket: string): Promise<void>;\n /** Only available on signers created as exportable. */\n exportKey?(scheme: string, keyRef?: KeyRef): Promise<Secret<Uint8Array>>;\n}\n"]}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import type { ResolvedSelection, WalletConfig } from '../config/types';
|
|
2
|
+
import type { ChainDriver, WalletKey, WalletOptions } from '../driver/types';
|
|
3
|
+
import { Address } from '../model/address';
|
|
4
|
+
import type { SchemeCatalog } from '../registry/schemes';
|
|
5
|
+
import { type SignerDeadline } from './guard';
|
|
6
|
+
import { type ExtendedKeyVersions } from './hd';
|
|
7
|
+
import type { KeyRef, Signer } from './types';
|
|
8
|
+
export interface ResolvedWallet {
|
|
9
|
+
readonly name: string;
|
|
10
|
+
readonly config: WalletConfig;
|
|
11
|
+
readonly address: Address;
|
|
12
|
+
/** One key per chain scheme the signer supports; `keys[0]` defines the address. */
|
|
13
|
+
readonly keys: readonly WalletKey[];
|
|
14
|
+
readonly options: WalletOptions;
|
|
15
|
+
readonly watchOnly: boolean;
|
|
16
|
+
readonly tier?: string;
|
|
17
|
+
signerFor(keyRef?: KeyRef): {
|
|
18
|
+
readonly id: string;
|
|
19
|
+
readonly signer: Signer;
|
|
20
|
+
} | undefined;
|
|
21
|
+
/** The signer with this id (own keys only), e.g. to cancel a ticket through its issuer. */
|
|
22
|
+
signerById(id: string): {
|
|
23
|
+
readonly id: string;
|
|
24
|
+
readonly signer: Signer;
|
|
25
|
+
} | undefined;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* The wallet's extended public key as drivers receive it, `WalletOptions.hd`: plain,
|
|
29
|
+
* frozen data, present only when the wallet configures a non-empty `xpub` (an empty
|
|
30
|
+
* one counts as none, as in `deriveAddress`), which must be a readable PUBLIC extended key
|
|
31
|
+
* (`CONFIG_INVALID` otherwise, naming no key).
|
|
32
|
+
*/
|
|
33
|
+
export interface WalletHdOptions {
|
|
34
|
+
readonly xpub: string;
|
|
35
|
+
/** Child path template relative to the xpub; `{index}` is replaced. Default `0/{index}`. */
|
|
36
|
+
readonly xpubPath?: string;
|
|
37
|
+
readonly xpubVersions?: ExtendedKeyVersions;
|
|
38
|
+
}
|
|
39
|
+
export declare function walletOptionsOf(config: WalletConfig): WalletOptions;
|
|
40
|
+
/**
|
|
41
|
+
* The wallet's `xpubPath`, `undefined` when absent (`undefined` or `null`, as
|
|
42
|
+
* `deriveAddress` reads it). One that is present but not a string is `CONFIG_INVALID` with a
|
|
43
|
+
* fixed text. Wallet resolution and `deriveAddress` share this check.
|
|
44
|
+
*/
|
|
45
|
+
export declare function xpubPathOf(config: WalletConfig): string | undefined;
|
|
46
|
+
export declare function resolveWallet(selection: ResolvedSelection, driver: ChainDriver, signers: Readonly<Record<string, Signer>>, schemes: SchemeCatalog,
|
|
47
|
+
/** Bounds each public-key read (`lifecycle.signTimeoutMs`). */
|
|
48
|
+
deadline?: SignerDeadline): Promise<ResolvedWallet>;
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.walletOptionsOf = walletOptionsOf;
|
|
4
|
+
exports.xpubPathOf = xpubPathOf;
|
|
5
|
+
exports.resolveWallet = resolveWallet;
|
|
6
|
+
const error_1 = require("../errors/error");
|
|
7
|
+
const address_1 = require("../model/address");
|
|
8
|
+
const bytes_1 = require("../util/bytes");
|
|
9
|
+
const guard_1 = require("./guard");
|
|
10
|
+
const hd_1 = require("./hd");
|
|
11
|
+
function walletOptionsOf(config) {
|
|
12
|
+
// `hd` is the core's own key: the wallet's xpub or nothing, never a user option, since
|
|
13
|
+
// a driver trusts it to validate change addresses.
|
|
14
|
+
const { hd: _ignored, ...options } = config.options ?? {};
|
|
15
|
+
return {
|
|
16
|
+
...options,
|
|
17
|
+
...(config.utxo ? { utxo: config.utxo } : {}),
|
|
18
|
+
...(config.ton ? { ton: config.ton } : {}),
|
|
19
|
+
// A falsy `xpub` ('', null) is no xpub, as `deriveAddress` reads it.
|
|
20
|
+
...(config.xpub ? { hd: hdOptionsOf(config) } : {}),
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* The wallet's `xpubPath`, `undefined` when absent (`undefined` or `null`, as
|
|
25
|
+
* `deriveAddress` reads it). One that is present but not a string is `CONFIG_INVALID` with a
|
|
26
|
+
* fixed text. Wallet resolution and `deriveAddress` share this check.
|
|
27
|
+
*/
|
|
28
|
+
function xpubPathOf(config) {
|
|
29
|
+
const path = config.xpubPath;
|
|
30
|
+
if (path === undefined || path === null)
|
|
31
|
+
return undefined;
|
|
32
|
+
if (typeof path !== 'string') {
|
|
33
|
+
throw new error_1.ConfigError('CONFIG_INVALID', 'xpubPath must be a string');
|
|
34
|
+
}
|
|
35
|
+
return path;
|
|
36
|
+
}
|
|
37
|
+
function hdOptionsOf(config) {
|
|
38
|
+
const xpubPath = xpubPathOf(config);
|
|
39
|
+
const versions = config.xpubVersions;
|
|
40
|
+
// The frozen copy comes first, reading each field once, and the key is read against
|
|
41
|
+
// it, so it is checked against exactly the versions a driver receives.
|
|
42
|
+
const hd = Object.freeze({
|
|
43
|
+
xpub: config.xpub,
|
|
44
|
+
...(xpubPath !== undefined ? { xpubPath } : {}),
|
|
45
|
+
// The version pair only, never other keys of the caller's object.
|
|
46
|
+
...(versions
|
|
47
|
+
? {
|
|
48
|
+
xpubVersions: Object.freeze({
|
|
49
|
+
private: versions.private,
|
|
50
|
+
public: versions.public,
|
|
51
|
+
}),
|
|
52
|
+
}
|
|
53
|
+
: {}),
|
|
54
|
+
});
|
|
55
|
+
// Only a readable, PUBLIC extended key ever reaches a driver.
|
|
56
|
+
(0, hd_1.parseExtendedPublicKey)(hd.xpub, hd.xpubVersions);
|
|
57
|
+
return hd;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* A watch-only wallet's `publicKey` is checked as a signer's key is: hex of
|
|
61
|
+
* exactly the length its scheme defines. Any other key fails here, never later: an
|
|
62
|
+
* uncompressed secp256k1 key derives an address but never verifies a signature.
|
|
63
|
+
*/
|
|
64
|
+
function watchOnlyKey(name, hex, scheme, length) {
|
|
65
|
+
let key;
|
|
66
|
+
try {
|
|
67
|
+
key = typeof hex === 'string' ? (0, bytes_1.fromHex)(hex) : undefined;
|
|
68
|
+
}
|
|
69
|
+
catch {
|
|
70
|
+
key = undefined;
|
|
71
|
+
}
|
|
72
|
+
if (key === undefined || key.length !== length) {
|
|
73
|
+
throw new error_1.ConfigError('CONFIG_INVALID', `wallet '${name}': publicKey must be ${length} bytes of hex for ${scheme}`);
|
|
74
|
+
}
|
|
75
|
+
return key;
|
|
76
|
+
}
|
|
77
|
+
async function resolveWallet(selection, driver, signers, schemes,
|
|
78
|
+
/** Bounds each public-key read (`lifecycle.signTimeoutMs`). */
|
|
79
|
+
deadline) {
|
|
80
|
+
const wallet = selection.wallet;
|
|
81
|
+
if (!wallet) {
|
|
82
|
+
throw new error_1.ConfigError('CONFIG_INVALID', `no wallet selected for ${selection.chain.id}; pass { wallet } or set chains.${selection.chain.id}.wallet`);
|
|
83
|
+
}
|
|
84
|
+
const { config } = wallet;
|
|
85
|
+
const options = walletOptionsOf(config);
|
|
86
|
+
const keyRef = config.keyRef;
|
|
87
|
+
const keys = [];
|
|
88
|
+
if (selection.signer) {
|
|
89
|
+
// The signer is user-supplied code; its scheme list and keys are guarded.
|
|
90
|
+
const { id, instance } = selection.signer;
|
|
91
|
+
const supported = (0, guard_1.signerSchemes)(id, instance);
|
|
92
|
+
for (const scheme of selection.chain.schemes) {
|
|
93
|
+
if (!supported.includes(scheme))
|
|
94
|
+
continue;
|
|
95
|
+
const { publicKeyLength } = schemes.get(scheme);
|
|
96
|
+
const publicKey = await (0, guard_1.signerPublicKey)(id, instance, scheme, keyRef, publicKeyLength, deadline);
|
|
97
|
+
keys.push({ scheme, publicKey, ...(keyRef ? { keyRef } : {}) });
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
else if (config.publicKey) {
|
|
101
|
+
const scheme = selection.chain.schemes[0];
|
|
102
|
+
keys.push({
|
|
103
|
+
scheme,
|
|
104
|
+
publicKey: watchOnlyKey(wallet.name, config.publicKey, scheme, schemes.get(scheme).publicKeyLength),
|
|
105
|
+
...(keyRef ? { keyRef } : {}),
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
const first = keys[0];
|
|
109
|
+
const derived = first
|
|
110
|
+
? driver.address.fromPublicKey(first.publicKey, options)
|
|
111
|
+
: undefined;
|
|
112
|
+
const configured = config.address !== undefined ? driver.address.normalize(config.address) : undefined;
|
|
113
|
+
if (derived && configured && derived.canonical !== configured.canonical) {
|
|
114
|
+
throw new error_1.ConfigError('CONFIG_INVALID', `wallet '${wallet.name}': configured address does not match its public key`);
|
|
115
|
+
}
|
|
116
|
+
const normalized = configured ?? derived;
|
|
117
|
+
if (!normalized) {
|
|
118
|
+
throw new error_1.ConfigError('CONFIG_INVALID', `wallet '${wallet.name}' needs a signer, a publicKey or an address`);
|
|
119
|
+
}
|
|
120
|
+
const primary = selection.signer;
|
|
121
|
+
return {
|
|
122
|
+
name: wallet.name,
|
|
123
|
+
config,
|
|
124
|
+
address: new address_1.Address(selection.chain.id, normalized, driver.address.format),
|
|
125
|
+
keys,
|
|
126
|
+
options,
|
|
127
|
+
watchOnly: !primary,
|
|
128
|
+
...(config.tier !== undefined ? { tier: config.tier } : {}),
|
|
129
|
+
signerFor: (ref) => {
|
|
130
|
+
// Own keys only: a key ref named `toString` routes nowhere.
|
|
131
|
+
const routes = config.signers ?? {};
|
|
132
|
+
const routed = ref?.id !== undefined && Object.hasOwn(routes, ref.id)
|
|
133
|
+
? routes[ref.id]
|
|
134
|
+
: undefined;
|
|
135
|
+
const id = routed ?? primary?.id;
|
|
136
|
+
if (id === undefined)
|
|
137
|
+
return undefined;
|
|
138
|
+
const signer = id === primary?.id
|
|
139
|
+
? primary.instance
|
|
140
|
+
: Object.hasOwn(signers, id)
|
|
141
|
+
? signers[id]
|
|
142
|
+
: undefined;
|
|
143
|
+
return signer ? { id, signer } : undefined;
|
|
144
|
+
},
|
|
145
|
+
signerById: (id) => {
|
|
146
|
+
if (id === primary?.id)
|
|
147
|
+
return { id, signer: primary.instance };
|
|
148
|
+
const signer = Object.hasOwn(signers, id) ? signers[id] : undefined;
|
|
149
|
+
return signer ? { id, signer } : undefined;
|
|
150
|
+
},
|
|
151
|
+
};
|
|
152
|
+
}
|
|
153
|
+
//# sourceMappingURL=wallet.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wallet.js","sourceRoot":"","sources":["../../../src/core/signing/wallet.ts"],"names":[],"mappings":"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","sourcesContent":["import type { ResolvedSelection, WalletConfig } from '../config/types';\nimport type { ChainDriver, WalletKey, WalletOptions } from '../driver/types';\nimport { ConfigError } from '../errors/error';\nimport { Address } from '../model/address';\nimport type { SchemeCatalog } from '../registry/schemes';\nimport { fromHex } from '../util/bytes';\nimport { signerPublicKey, signerSchemes, type SignerDeadline } from './guard';\nimport { parseExtendedPublicKey, type ExtendedKeyVersions } from './hd';\nimport type { KeyRef, Signer } from './types';\n\nexport interface ResolvedWallet {\n readonly name: string;\n readonly config: WalletConfig;\n readonly address: Address;\n /** One key per chain scheme the signer supports; `keys[0]` defines the address. */\n readonly keys: readonly WalletKey[];\n readonly options: WalletOptions;\n readonly watchOnly: boolean;\n readonly tier?: string;\n signerFor(\n keyRef?: KeyRef,\n ): { readonly id: string; readonly signer: Signer } | undefined;\n /** The signer with this id (own keys only), e.g. to cancel a ticket through its issuer. */\n signerById(id: string): { readonly id: string; readonly signer: Signer } | undefined;\n}\n\n/**\n * The wallet's extended public key as drivers receive it, `WalletOptions.hd`: plain,\n * frozen data, present only when the wallet configures a non-empty `xpub` (an empty\n * one counts as none, as in `deriveAddress`), which must be a readable PUBLIC extended key\n * (`CONFIG_INVALID` otherwise, naming no key).\n */\nexport interface WalletHdOptions {\n readonly xpub: string;\n /** Child path template relative to the xpub; `{index}` is replaced. Default `0/{index}`. */\n readonly xpubPath?: string;\n readonly xpubVersions?: ExtendedKeyVersions;\n}\n\nexport function walletOptionsOf(config: WalletConfig): WalletOptions {\n // `hd` is the core's own key: the wallet's xpub or nothing, never a user option, since\n // a driver trusts it to validate change addresses.\n const { hd: _ignored, ...options } = config.options ?? {};\n return {\n ...options,\n ...(config.utxo ? { utxo: config.utxo } : {}),\n ...(config.ton ? { ton: config.ton } : {}),\n // A falsy `xpub` ('', null) is no xpub, as `deriveAddress` reads it.\n ...(config.xpub ? { hd: hdOptionsOf(config) } : {}),\n };\n}\n\n/**\n * The wallet's `xpubPath`, `undefined` when absent (`undefined` or `null`, as\n * `deriveAddress` reads it). One that is present but not a string is `CONFIG_INVALID` with a\n * fixed text. Wallet resolution and `deriveAddress` share this check.\n */\nexport function xpubPathOf(config: WalletConfig): string | undefined {\n const path: unknown = config.xpubPath;\n if (path === undefined || path === null) return undefined;\n if (typeof path !== 'string') {\n throw new ConfigError('CONFIG_INVALID', 'xpubPath must be a string');\n }\n return path;\n}\n\nfunction hdOptionsOf(config: WalletConfig): WalletHdOptions {\n const xpubPath = xpubPathOf(config);\n const versions = config.xpubVersions;\n // The frozen copy comes first, reading each field once, and the key is read against\n // it, so it is checked against exactly the versions a driver receives.\n const hd: WalletHdOptions = Object.freeze({\n xpub: config.xpub as string,\n ...(xpubPath !== undefined ? { xpubPath } : {}),\n // The version pair only, never other keys of the caller's object.\n ...(versions\n ? {\n xpubVersions: Object.freeze({\n private: versions.private,\n public: versions.public,\n }),\n }\n : {}),\n });\n // Only a readable, PUBLIC extended key ever reaches a driver.\n parseExtendedPublicKey(hd.xpub, hd.xpubVersions);\n return hd;\n}\n\n/**\n * A watch-only wallet's `publicKey` is checked as a signer's key is: hex of\n * exactly the length its scheme defines. Any other key fails here, never later: an\n * uncompressed secp256k1 key derives an address but never verifies a signature.\n */\nfunction watchOnlyKey(\n name: string,\n hex: unknown,\n scheme: string,\n length: number,\n): Uint8Array {\n let key: Uint8Array | undefined;\n try {\n key = typeof hex === 'string' ? fromHex(hex) : undefined;\n } catch {\n key = undefined;\n }\n if (key === undefined || key.length !== length) {\n throw new ConfigError(\n 'CONFIG_INVALID',\n `wallet '${name}': publicKey must be ${length} bytes of hex for ${scheme}`,\n );\n }\n return key;\n}\n\nexport async function resolveWallet(\n selection: ResolvedSelection,\n driver: ChainDriver,\n signers: Readonly<Record<string, Signer>>,\n schemes: SchemeCatalog,\n /** Bounds each public-key read (`lifecycle.signTimeoutMs`). */\n deadline?: SignerDeadline,\n): Promise<ResolvedWallet> {\n const wallet = selection.wallet;\n if (!wallet) {\n throw new ConfigError(\n 'CONFIG_INVALID',\n `no wallet selected for ${selection.chain.id}; pass { wallet } or set chains.${selection.chain.id}.wallet`,\n );\n }\n const { config } = wallet;\n const options = walletOptionsOf(config);\n const keyRef = config.keyRef;\n const keys: WalletKey[] = [];\n if (selection.signer) {\n // The signer is user-supplied code; its scheme list and keys are guarded.\n const { id, instance } = selection.signer;\n const supported = signerSchemes(id, instance);\n for (const scheme of selection.chain.schemes) {\n if (!supported.includes(scheme)) continue;\n const { publicKeyLength } = schemes.get(scheme);\n const publicKey = await signerPublicKey(\n id,\n instance,\n scheme,\n keyRef,\n publicKeyLength,\n deadline,\n );\n keys.push({ scheme, publicKey, ...(keyRef ? { keyRef } : {}) });\n }\n } else if (config.publicKey) {\n const scheme = selection.chain.schemes[0] as string;\n keys.push({\n scheme,\n publicKey: watchOnlyKey(\n wallet.name,\n config.publicKey,\n scheme,\n schemes.get(scheme).publicKeyLength,\n ),\n ...(keyRef ? { keyRef } : {}),\n });\n }\n const first = keys[0];\n const derived = first\n ? driver.address.fromPublicKey(first.publicKey, options)\n : undefined;\n const configured =\n config.address !== undefined ? driver.address.normalize(config.address) : undefined;\n if (derived && configured && derived.canonical !== configured.canonical) {\n throw new ConfigError(\n 'CONFIG_INVALID',\n `wallet '${wallet.name}': configured address does not match its public key`,\n );\n }\n const normalized = configured ?? derived;\n if (!normalized) {\n throw new ConfigError(\n 'CONFIG_INVALID',\n `wallet '${wallet.name}' needs a signer, a publicKey or an address`,\n );\n }\n const primary = selection.signer;\n return {\n name: wallet.name,\n config,\n address: new Address(selection.chain.id, normalized, driver.address.format),\n keys,\n options,\n watchOnly: !primary,\n ...(config.tier !== undefined ? { tier: config.tier } : {}),\n signerFor: (ref) => {\n // Own keys only: a key ref named `toString` routes nowhere.\n const routes = config.signers ?? {};\n const routed =\n ref?.id !== undefined && Object.hasOwn(routes, ref.id)\n ? routes[ref.id]\n : undefined;\n const id = routed ?? primary?.id;\n if (id === undefined) return undefined;\n const signer =\n id === primary?.id\n ? primary.instance\n : Object.hasOwn(signers, id)\n ? signers[id]\n : undefined;\n return signer ? { id, signer } : undefined;\n },\n signerById: (id) => {\n if (id === primary?.id) return { id, signer: primary.instance };\n const signer = Object.hasOwn(signers, id) ? signers[id] : undefined;\n return signer ? { id, signer } : undefined;\n },\n };\n}\n"]}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Deep-clones plain JSON-like data: objects, arrays, `bigint`, `Uint8Array` and other
|
|
3
|
+
* primitives.
|
|
4
|
+
*
|
|
5
|
+
* Deliberately not `structuredClone`: under a sandboxed test runtime (e.g. Jest's
|
|
6
|
+
* per-file VM context), `structuredClone` rebuilds objects against the *host*
|
|
7
|
+
* realm's `Object`/`Array`, so a cloned plain object's prototype ends up `!==` the
|
|
8
|
+
* caller's own `Object.prototype` and `assert.deepStrictEqual` reports a spurious
|
|
9
|
+
* mismatch. This clone is realm-safe: it never uses `instanceof` against this
|
|
10
|
+
* module's own constructors, only `Array.isArray`, `Object.prototype.toString` and
|
|
11
|
+
* prototype-chain shape, so it works the same regardless of which realm the input
|
|
12
|
+
* came from.
|
|
13
|
+
*
|
|
14
|
+
* Only plain data is accepted. A future serialized store (Redis/Postgres) round-trips
|
|
15
|
+
* exactly two non-JSON shapes over the wire — `bigint` and `Uint8Array` — via a
|
|
16
|
+
* tagged encoding. Anything else (`Date`, `Map`, `Set`, `RegExp`, a class instance
|
|
17
|
+
* such as `Amount`/`Address`, a function, a symbol, or a typed array other than
|
|
18
|
+
* `Uint8Array`) has no such encoding, so it is rejected loudly here rather than
|
|
19
|
+
* silently corrupted (as a naive recursive clone would do to a `Uint8Array`, turning
|
|
20
|
+
* its bytes into a `{0: ..., 1: ...}` object) or silently dropped. This also covers
|
|
21
|
+
* symbol-keyed own properties on an otherwise plain object: `Object.entries` skips
|
|
22
|
+
* them silently, so they are rejected explicitly instead of being dropped without
|
|
23
|
+
* a trace.
|
|
24
|
+
*/
|
|
25
|
+
export declare function clone<T>(value: T): T;
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.clone = clone;
|
|
4
|
+
/**
|
|
5
|
+
* Deep-clones plain JSON-like data: objects, arrays, `bigint`, `Uint8Array` and other
|
|
6
|
+
* primitives.
|
|
7
|
+
*
|
|
8
|
+
* Deliberately not `structuredClone`: under a sandboxed test runtime (e.g. Jest's
|
|
9
|
+
* per-file VM context), `structuredClone` rebuilds objects against the *host*
|
|
10
|
+
* realm's `Object`/`Array`, so a cloned plain object's prototype ends up `!==` the
|
|
11
|
+
* caller's own `Object.prototype` and `assert.deepStrictEqual` reports a spurious
|
|
12
|
+
* mismatch. This clone is realm-safe: it never uses `instanceof` against this
|
|
13
|
+
* module's own constructors, only `Array.isArray`, `Object.prototype.toString` and
|
|
14
|
+
* prototype-chain shape, so it works the same regardless of which realm the input
|
|
15
|
+
* came from.
|
|
16
|
+
*
|
|
17
|
+
* Only plain data is accepted. A future serialized store (Redis/Postgres) round-trips
|
|
18
|
+
* exactly two non-JSON shapes over the wire — `bigint` and `Uint8Array` — via a
|
|
19
|
+
* tagged encoding. Anything else (`Date`, `Map`, `Set`, `RegExp`, a class instance
|
|
20
|
+
* such as `Amount`/`Address`, a function, a symbol, or a typed array other than
|
|
21
|
+
* `Uint8Array`) has no such encoding, so it is rejected loudly here rather than
|
|
22
|
+
* silently corrupted (as a naive recursive clone would do to a `Uint8Array`, turning
|
|
23
|
+
* its bytes into a `{0: ..., 1: ...}` object) or silently dropped. This also covers
|
|
24
|
+
* symbol-keyed own properties on an otherwise plain object: `Object.entries` skips
|
|
25
|
+
* them silently, so they are rejected explicitly instead of being dropped without
|
|
26
|
+
* a trace.
|
|
27
|
+
*/
|
|
28
|
+
function clone(value) {
|
|
29
|
+
if (value === null || value === undefined)
|
|
30
|
+
return value;
|
|
31
|
+
const kind = typeof value;
|
|
32
|
+
if (kind === 'string' || kind === 'number' || kind === 'boolean' || kind === 'bigint') {
|
|
33
|
+
return value;
|
|
34
|
+
}
|
|
35
|
+
if (kind === 'function' || kind === 'symbol')
|
|
36
|
+
return reject(value);
|
|
37
|
+
// kind === 'object' from here on.
|
|
38
|
+
if (Array.isArray(value)) {
|
|
39
|
+
// `Array.from` (called on this realm's own `Array`) always builds a this-realm
|
|
40
|
+
// array; `value.map(...)` would not — a foreign-realm array's inherited `.map`
|
|
41
|
+
// uses species-based construction and returns a result still rooted in the
|
|
42
|
+
// *foreign* `Array.prototype`, reintroducing the same realm mismatch this
|
|
43
|
+
// function exists to avoid.
|
|
44
|
+
return Array.from(value, (item) => clone(item));
|
|
45
|
+
}
|
|
46
|
+
if (Object.prototype.toString.call(value) === '[object Uint8Array]') {
|
|
47
|
+
return new Uint8Array(value);
|
|
48
|
+
}
|
|
49
|
+
if (isPlainObject(value)) {
|
|
50
|
+
if (Object.getOwnPropertySymbols(value).length > 0)
|
|
51
|
+
return reject(value);
|
|
52
|
+
const out = Object.getPrototypeOf(value) === null ? Object.create(null) : {};
|
|
53
|
+
for (const [key, item] of Object.entries(value)) {
|
|
54
|
+
out[key] = clone(item);
|
|
55
|
+
}
|
|
56
|
+
return out;
|
|
57
|
+
}
|
|
58
|
+
return reject(value);
|
|
59
|
+
}
|
|
60
|
+
/** True for `{}`/`Object.create(null)`-shaped objects, from any realm. */
|
|
61
|
+
function isPlainObject(value) {
|
|
62
|
+
const proto = Object.getPrototypeOf(value);
|
|
63
|
+
if (proto === null)
|
|
64
|
+
return true;
|
|
65
|
+
return Object.getPrototypeOf(proto) === null;
|
|
66
|
+
}
|
|
67
|
+
function reject(value) {
|
|
68
|
+
throw new TypeError('memory store accepts only plain data (objects, arrays, primitives, bigint, ' +
|
|
69
|
+
`Uint8Array); got ${Object.prototype.toString.call(value)}`);
|
|
70
|
+
}
|
|
71
|
+
//# sourceMappingURL=clone.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"clone.js","sourceRoot":"","sources":["../../../src/core/store/clone.ts"],"names":[],"mappings":";;AAwBA,sBA+BC;AAvDD;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,SAAgB,KAAK,CAAI,KAAQ;IAC/B,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,KAAK,CAAC;IAExD,MAAM,IAAI,GAAG,OAAO,KAAK,CAAC;IAC1B,IAAI,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;QACtF,OAAO,KAAK,CAAC;IACf,CAAC;IACD,IAAI,IAAI,KAAK,UAAU,IAAI,IAAI,KAAK,QAAQ;QAAE,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;IAEnE,kCAAkC;IAClC,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,+EAA+E;QAC/E,+EAA+E;QAC/E,2EAA2E;QAC3E,0EAA0E;QAC1E,4BAA4B;QAC5B,OAAO,KAAK,CAAC,IAAI,CAAC,KAAkB,EAAE,CAAC,IAAa,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAiB,CAAC;IACxF,CAAC;IACD,IAAI,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,qBAAqB,EAAE,CAAC;QACpE,OAAO,IAAI,UAAU,CAAC,KAA8B,CAAiB,CAAC;IACxE,CAAC;IACD,IAAI,aAAa,CAAC,KAAe,CAAC,EAAE,CAAC;QACnC,IAAI,MAAM,CAAC,qBAAqB,CAAC,KAAe,CAAC,CAAC,MAAM,GAAG,CAAC;YAAE,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;QACnF,MAAM,GAAG,GACP,MAAM,CAAC,cAAc,CAAC,KAAe,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7E,KAAK,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAgC,CAAC,EAAE,CAAC;YAC3E,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC;QACzB,CAAC;QACD,OAAO,GAAQ,CAAC;IAClB,CAAC;IACD,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;AACvB,CAAC;AAED,0EAA0E;AAC1E,SAAS,aAAa,CAAC,KAAa;IAClC,MAAM,KAAK,GAAkB,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;IAC1D,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IAChC,OAAO,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC;AAC/C,CAAC;AAED,SAAS,MAAM,CAAC,KAAc;IAC5B,MAAM,IAAI,SAAS,CACjB,6EAA6E;QAC3E,oBAAoB,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAC9D,CAAC;AACJ,CAAC","sourcesContent":["/**\n * Deep-clones plain JSON-like data: objects, arrays, `bigint`, `Uint8Array` and other\n * primitives.\n *\n * Deliberately not `structuredClone`: under a sandboxed test runtime (e.g. Jest's\n * per-file VM context), `structuredClone` rebuilds objects against the *host*\n * realm's `Object`/`Array`, so a cloned plain object's prototype ends up `!==` the\n * caller's own `Object.prototype` and `assert.deepStrictEqual` reports a spurious\n * mismatch. This clone is realm-safe: it never uses `instanceof` against this\n * module's own constructors, only `Array.isArray`, `Object.prototype.toString` and\n * prototype-chain shape, so it works the same regardless of which realm the input\n * came from.\n *\n * Only plain data is accepted. A future serialized store (Redis/Postgres) round-trips\n * exactly two non-JSON shapes over the wire — `bigint` and `Uint8Array` — via a\n * tagged encoding. Anything else (`Date`, `Map`, `Set`, `RegExp`, a class instance\n * such as `Amount`/`Address`, a function, a symbol, or a typed array other than\n * `Uint8Array`) has no such encoding, so it is rejected loudly here rather than\n * silently corrupted (as a naive recursive clone would do to a `Uint8Array`, turning\n * its bytes into a `{0: ..., 1: ...}` object) or silently dropped. This also covers\n * symbol-keyed own properties on an otherwise plain object: `Object.entries` skips\n * them silently, so they are rejected explicitly instead of being dropped without\n * a trace.\n */\nexport function clone<T>(value: T): T {\n if (value === null || value === undefined) return value;\n\n const kind = typeof value;\n if (kind === 'string' || kind === 'number' || kind === 'boolean' || kind === 'bigint') {\n return value;\n }\n if (kind === 'function' || kind === 'symbol') return reject(value);\n\n // kind === 'object' from here on.\n if (Array.isArray(value)) {\n // `Array.from` (called on this realm's own `Array`) always builds a this-realm\n // array; `value.map(...)` would not — a foreign-realm array's inherited `.map`\n // uses species-based construction and returns a result still rooted in the\n // *foreign* `Array.prototype`, reintroducing the same realm mismatch this\n // function exists to avoid.\n return Array.from(value as unknown[], (item: unknown) => clone(item)) as unknown as T;\n }\n if (Object.prototype.toString.call(value) === '[object Uint8Array]') {\n return new Uint8Array(value as unknown as Uint8Array) as unknown as T;\n }\n if (isPlainObject(value as object)) {\n if (Object.getOwnPropertySymbols(value as object).length > 0) return reject(value);\n const out: Record<string, unknown> =\n Object.getPrototypeOf(value as object) === null ? Object.create(null) : {};\n for (const [key, item] of Object.entries(value as Record<string, unknown>)) {\n out[key] = clone(item);\n }\n return out as T;\n }\n return reject(value);\n}\n\n/** True for `{}`/`Object.create(null)`-shaped objects, from any realm. */\nfunction isPlainObject(value: object): boolean {\n const proto: object | null = Object.getPrototypeOf(value);\n if (proto === null) return true;\n return Object.getPrototypeOf(proto) === null;\n}\n\nfunction reject(value: unknown): never {\n throw new TypeError(\n 'memory store accepts only plain data (objects, arrays, primitives, bigint, ' +\n `Uint8Array); got ${Object.prototype.toString.call(value)}`,\n );\n}\n"]}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { type Clock } from '../util/clock';
|
|
2
|
+
import type { AttemptObservation, AttemptRecord, CreateResult, CursorStore, Fence, Lease, LockManager, NewOperation, OperationFilter, OperationPatch, OperationRecord, OperationStore, ScanCursor, SequenceState, SequenceStore, Stores, StoredCursor } from './types';
|
|
3
|
+
export declare class MemoryLockManager implements LockManager {
|
|
4
|
+
#private;
|
|
5
|
+
private readonly clock;
|
|
6
|
+
constructor(clock?: Clock);
|
|
7
|
+
acquire(key: string, owner: string, ttlMs: number): Promise<Lease | null>;
|
|
8
|
+
renew(lease: Lease, ttlMs: number): Promise<Lease | null>;
|
|
9
|
+
release(lease: Lease): Promise<void>;
|
|
10
|
+
}
|
|
11
|
+
export declare class MemorySequenceStore implements SequenceStore {
|
|
12
|
+
#private;
|
|
13
|
+
get(key: string): Promise<SequenceState | null>;
|
|
14
|
+
put(key: string, state: Omit<SequenceState, 'version'>, expectedVersion: number | null): Promise<void>;
|
|
15
|
+
}
|
|
16
|
+
export declare class MemoryCursorStore implements CursorStore {
|
|
17
|
+
#private;
|
|
18
|
+
get(key: string): Promise<StoredCursor | null>;
|
|
19
|
+
put(key: string, cursor: ScanCursor, expectedVersion: number | null): Promise<number>;
|
|
20
|
+
}
|
|
21
|
+
export declare class MemoryOperationStore implements OperationStore {
|
|
22
|
+
#private;
|
|
23
|
+
private readonly clock;
|
|
24
|
+
constructor(clock?: Clock);
|
|
25
|
+
create(operation: NewOperation): Promise<CreateResult>;
|
|
26
|
+
get(namespace: string, id: string): Promise<OperationRecord | null>;
|
|
27
|
+
getByKey(namespace: string, idempotencyKey: string): Promise<OperationRecord | null>;
|
|
28
|
+
findByRef(namespace: string, refOrTxHash: string): Promise<OperationRecord | null>;
|
|
29
|
+
update(namespace: string, id: string, patch: OperationPatch, expectedVersion: number, fence?: Fence): Promise<OperationRecord>;
|
|
30
|
+
appendAttempt(namespace: string, id: string, attempt: AttemptRecord, patch: OperationPatch, expectedVersion: number, fence?: Fence): Promise<OperationRecord>;
|
|
31
|
+
getObservation(attemptId: string): Promise<AttemptObservation | null>;
|
|
32
|
+
putObservation(observation: Omit<AttemptObservation, 'version'>, expectedVersion: number | null): Promise<AttemptObservation>;
|
|
33
|
+
claimDue(namespace: string, workerId: string, now: number, leaseMs: number, limit: number): Promise<OperationRecord[]>;
|
|
34
|
+
releaseClaim(namespace: string, id: string, fence: Fence): Promise<void>;
|
|
35
|
+
list(filter: OperationFilter): Promise<OperationRecord[]>;
|
|
36
|
+
purge(filter: OperationFilter): Promise<number>;
|
|
37
|
+
}
|
|
38
|
+
export declare function createMemoryStores(clock?: Clock): Stores;
|