diff --git a/.docker/service-cid b/.docker/service-cid new file mode 100644 index 00000000..71ff62dd --- /dev/null +++ b/.docker/service-cid @@ -0,0 +1 @@ +QmZUK6LA31b6vH66YbbxNBTeLmnogxRhRK6vkMkeRKuK1C \ No newline at end of file diff --git a/.env.example b/.env.example index 1a4de5b5..cc03e7b3 100644 --- a/.env.example +++ b/.env.example @@ -1,9 +1,8 @@ DEPLOY_ENV=LOCAL CHAIN_ID=31337 # 31337 for local, 11155111 for Sepolia -LOCAL_ETHEREUM_RPC_URL=http://localhost:8545 -# RPC_URL=https://ethereum-sepolia-rpc.publicnode.com/ -# TESTNET_RPC_URL=https://ethereum-sepolia-rpc.publicnode.com/ +RPC_URL=http://localhost:8545 +# RPC_URL=https://ethereum-sepolia-rpc.publicnode.com/ # Sepolia testnet # this key requires funds. used as the admin / deployer of contracts and core contracts. FUNDED_KEY=0x323ef3a895cad9fcb625aa859953bba2812a64b39f2fd0b857f4757f0e896858 diff --git a/.github/workflows/contracts.yml b/.github/workflows/contracts.yml index 43489876..18d81258 100644 --- a/.github/workflows/contracts.yml +++ b/.github/workflows/contracts.yml @@ -18,6 +18,9 @@ jobs: with: node-version: 21 + - uses: pnpm/action-setup@v4 + name: Install pnpm + - name: Install deps run: make setup diff --git a/.gitignore b/.gitignore index 83ac1842..6fdcf67c 100644 --- a/.gitignore +++ b/.gitignore @@ -20,3 +20,4 @@ infra/* # Tools **/.claude/settings.local.json +.task/remote/ diff --git a/.taskrc.yml b/.taskrc.yml new file mode 100644 index 00000000..ecaa20d6 --- /dev/null +++ b/.taskrc.yml @@ -0,0 +1,7 @@ +concurrency: 4 + +remote: + insecure: true + +experiments: + REMOTE_TASKFILES: 1 diff --git a/Cargo.lock b/Cargo.lock index 7a17c268..4b99abb9 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -17,6 +17,20 @@ version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "512761e0bb2578dd7380c6baaa0f4ce03e84f95e960231d1dec8bf4d7d6e2627" +[[package]] +name = "aggregator" +version = "1.0.0" +dependencies = [ + "alloy-network", + "alloy-primitives", + "alloy-provider", + "serde", + "serde_json", + "wavs-wasi-utils", + "wit-bindgen-rt 0.44.0", + "wstd", +] + [[package]] name = "allocator-api2" version = "0.2.21" @@ -239,6 +253,7 @@ dependencies = [ "alloy-network-primitives", "alloy-primitives", "alloy-rpc-client", + "alloy-rpc-types", "alloy-rpc-types-eth", "alloy-signer", "alloy-sol-types", @@ -309,6 +324,17 @@ dependencies = [ "wasmtimer", ] +[[package]] +name = "alloy-rpc-types" +version = "1.0.37" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e9e131624d08a25cfc40557041e7dc42e1182fa1153e7592d120f769a1edce56" +dependencies = [ + "alloy-primitives", + "alloy-serde", + "serde", +] + [[package]] name = "alloy-rpc-types-any" version = "1.0.37" diff --git a/Cargo.toml b/Cargo.toml index 5f19d4aa..0d8b5a26 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,5 +1,5 @@ [workspace] -members = ["components/evm-price-oracle"] +members = ["components/evm-price-oracle", "components/aggregator"] resolver = "2" [workspace.package] diff --git a/Makefile b/Makefile index 619e71af..00f563b5 100644 --- a/Makefile +++ b/Makefile @@ -8,7 +8,7 @@ CARGO=cargo INPUT_DATA?=`` COMPONENT_FILENAME?=evm_price_oracle.wasm CREDENTIAL?="" -DOCKER_IMAGE?=ghcr.io/lay3rlabs/wavs:1.4.1 +DOCKER_IMAGE?=ghcr.io/lay3rlabs/wavs:1.5.1 MIDDLEWARE_DOCKER_IMAGE?=ghcr.io/lay3rlabs/wavs-middleware:0.5.0-beta.10 IPFS_ENDPOINT?=http://127.0.0.1:5001 RPC_URL?=http://127.0.0.1:8545 @@ -91,7 +91,7 @@ setup: check-requirements @echo " â€ĸ Installing Forge dependencies..." @forge install > /dev/null 2>&1 @echo " â€ĸ Installing npm dependencies..." - @npm install > /dev/null 2>&1 + @pnpm install > /dev/null 2>&1 @echo "✅ Dependencies installed" ## start-all-local: starting anvil and core services (like IPFS for example) diff --git a/README.md b/README.md index ec23dde9..3515da2d 100644 --- a/README.md +++ b/README.md @@ -9,143 +9,24 @@ A template for developing WebAssembly AVS applications using Rust and Solidity, * [Go](./components/golang-evm-price-oracle/README.md) * [JS / TS](./components/js-evm-price-oracle/README.md) -## System Requirements +## Usage -
-Core (Docker, Compose, Make, JQ, Node v21+, Foundry) +### 1. System setup -## Ubuntu Base -- **Linux**: `sudo apt update && sudo apt install build-essential` +Follow the instructions in [README_SETUP.md](./README_SETUP.md) to ensure your system is set up with the necessary tools and dependencies. -### Docker - -If prompted, remove container with `sudo apt remove containerd.io`. - -- **MacOS**: `brew install --cask docker` -- **Linux**: `sudo apt -y install docker.io` -- **Windows WSL**: [docker desktop wsl](https://docs.docker.com/desktop/wsl/#turn-on-docker-desktop-wsl-2) & `sudo chmod 666 /var/run/docker.sock` -- [Docker Documentation](https://docs.docker.com/get-started/get-docker/) - -> **Note:** `sudo` is only used for Docker-related commands in this project. If you prefer not to use sudo with Docker, you can add your user to the Docker group with: -> ```bash -> sudo groupadd docker && sudo usermod -aG docker $USER -> ``` -> After adding yourself to the group, log out and back in for changes to take effect. - -### Docker Compose -- **MacOS**: Already installed with Docker installer -> `sudo apt remove docker-compose-plugin` may be required if you get a `dpkg` error -- **Linux + Windows WSL**: `sudo apt-get install docker-compose-v2` -- [Compose Documentation](https://docs.docker.com/compose/) - -### Make -- **MacOS**: `brew install make` -- **Linux + Windows WSL**: `sudo apt -y install make` -- [Make Documentation](https://www.gnu.org/software/make/manual/make.html) - -### JQ -- **MacOS**: `brew install jq` -- **Linux + Windows WSL**: `sudo apt -y install jq` -- [JQ Documentation](https://jqlang.org/download/) - -### Node.js -- **Required Version**: v21+ -- [Installation via NVM](https://github.com/nvm-sh/nvm?tab=readme-ov-file#installing-and-updating) +Then install dependencies: ```bash -curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.3/install.sh | bash -nvm install --lts -``` - -### Foundry -```bash docci-ignore -curl -L https://foundry.paradigm.xyz | bash && $HOME/.foundry/bin/foundryup +# Install packages (pnpm & forge submodules) +task -y setup ``` -
- -
- -Rust v1.85+ +### 2. Solidity -### Rust Installation - -```bash docci-ignore -curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh - -rustup toolchain install stable -rustup target add wasm32-wasip2 -``` +This project supports [pnpm packages](./package.json), you can add git submodules if you need. -### Upgrade Rust - -```bash docci-ignore -# Remove old targets if present -rustup target remove wasm32-wasi || true -rustup target remove wasm32-wasip1 || true - -# Update and add required target -rustup update stable -rustup target add wasm32-wasip2 -``` - -
- -
-Cargo Components - -### Install Cargo Components - -On Ubuntu LTS, if you later encounter errors like: - -```bash -wkg: /lib/x86_64-linux-gnu/libm.so.6: version `GLIBC_2.38' not found (required by wkg) -wkg: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.39' not found (required by wkg) -``` - -If GLIB is out of date. Consider updating your system using: ```bash -sudo do-release-upgrade -``` - - -```bash docci-ignore -# Install required cargo components -# https://github.com/bytecodealliance/cargo-component#installation -cargo install cargo-binstall -cargo binstall cargo-component wasm-tools warg-cli wkg --locked --no-confirm --force - -# Configure default registry -# Found at: $HOME/.config/wasm-pkg/config.toml -wkg config --default-registry wa.dev - -# Allow publishing to a registry -# -# if WSL: `warg config --keyring-backend linux-keyutils` -warg key new -``` - -
- -## Create Project - -```bash docci-ignore -# if foundry is not installed: -# `curl -L https://foundry.paradigm.xyz | bash && $HOME/.foundry/bin/foundryup` -forge init --template Lay3rLabs/wavs-foundry-template my-wavs --branch main -``` - -> \[!TIP] -> Run `make help` to see all available commands and environment variable overrides. - -### Solidity - -Install the required packages to build the Solidity contracts. This project supports [npm packages](./package.json), you can add git submodules if you need. - -```bash -# Install packages (npm & submodules) -task setup - # Build the contracts task build:forge @@ -153,9 +34,9 @@ task build:forge task test ``` -## Build WASI components +### 3. Build WASI components -Now build the WASI components into the `compiled` output directory. +Build the WASI components into the `compiled` output directory. > \[!WARNING] > If you get: `error: no registry configured for namespace "wavs"` @@ -169,21 +50,15 @@ Now build the WASI components into the `compiled` output directory. ```bash # Remove `WASI_BUILD_DIR` to build all components. -WASI_BUILD_DIR=components/evm-price-oracle task build:wasi +WASI_BUILD_DIR=components/evm-price-oracle task -y build:wasi ``` -## Testing the Price Feed Component Locally +### 4. Test the component locally -How to test the component locally for business logic validation before on-chain deployment. An ID of 1 for the oracle component is Bitcoin. +Validate business logic before on-chain deployment. An ID of `1` is Bitcoin. ```bash -# Rust components INPUT_DATA="1" COMPONENT_FILENAME=evm_price_oracle.wasm task wasi:exec - - -# Golang & JS (re-added in the future since v1 refactor) -# INPUT_DATA="1" COMPONENT_FILENAME=js_evm_price_oracle.wasm task wasi:exec -# INPUT_DATA="1" COMPONENT_FILENAME=golang_evm_price_oracle.wasm task wasi:exec-fixed ``` Expected output: @@ -202,103 +77,47 @@ Result (utf8): {"symbol":"BTC","timestamp":"2025-10-01T18:12:11","price":116999. Ordering: 0 ``` -## WAVS +### 5. Start backend services -> \[!NOTE] -> If you are running on a Mac with an ARM chip, you will need to do the following: -> - Set up Rosetta: `softwareupdate --install-rosetta` -> - Enable Rosetta (Docker Desktop: Settings -> General -> enable "Use Rosetta for x86_64/amd64 emulation on Apple Silicon") -> -> Configure one of the following networking: -> - Docker Desktop: Settings -> Resources -> Network -> 'Enable Host Networking' -> - `brew install chipmk/tap/docker-mac-net-connect && sudo brew services start chipmk/tap/docker-mac-net-connect` - -## Start Environment - -Start an Ethereum node (anvil), the WAVS service, and deploy [EigenLayer](https://www.eigenlayer.xyz/) contracts to the local network. - -### Enable Telemetry (optional) - -Set Log Level: - - Open the `.env` file. - - Set the `log_level` variable for wavs to debug to ensure detailed logs are captured. - -> \[!NOTE] -To see details on how to access both traces and metrics, please check out [Telemetry Documentation](telemetry/telemetry.md). - -### Start the backend +> [!NOTE] +> This must remain running in your terminal. Use new terminals to run other commands. You can stop the services with `ctrl+c`. Some terminals require pressing it twice. ```bash docci-background docci-delay-after=5 -# This must remain running in your terminal. Use another terminal to run other commands. -# You can stop the services with `ctrl+c`. Some MacOS terminals require pressing it twice. +# Create a .env file from the example cp .env.example .env -# update the .env for either LOCAL or TESTNET - -# Starts anvil + IPFS, WARG, Jaeger, and prometheus. -task start-all-local +# Starts anvil + IPFS and WARG registry. +task -y start-all-local ``` -## WAVS Deployment Script +### 6. Deploy and run WAVS -This script automates the complete WAVS deployment process in a single command: - -### What It Does - -1. **Build Check**: Rebuilds WebAssembly component if changes detected -2. **Create Deployer**: Sets up and funds deployer account -3. **Deploy Eigenlayer**: Deploys service manager contract -4. **Deploy Contracts**: Creates trigger and submission contracts -5. **Upload Component**: Publishes WebAssembly component to WASI registry -6. **Build Service**: Creates service configuration -7. **Upload to IPFS**: Stores service metadata on IPFS -8. **Set Service URI**: Registers IPFS URI with service manager -9. **Start Aggregator**: Launches result aggregation service -10. **Start WAVS**: Launches operator service with readiness check -11. **Deploy Service**: Configures WAVS to monitor trigger events -12. **Generate Keys**: Creates operator signing keys -13. **Register Operator**: Registers with Eigenlayer AVS (0.001 ETH stake) -14. **Verify Registration**: Confirms operator registration - -### Result - -A fully operational WAVS service that monitors blockchain events, executes WebAssembly components, and submits verified results on-chain. +This script automates the complete WAVS deployment process, including contract deployments, component uploads, and operator registration, in a single command: ```bash -export RPC_URL=$(task get-rpc) -export AGGREGATOR_URL=http://127.0.0.1:8001 - -# deploys contracts & components (( task deploy:full )) -# If you do not set the PoA operator you will get `ServiceManagerValidateAnyRevert("0x3dda1739")` -bash ./script/deploy-script.sh && task deploy:single-operator-poa-local +task deploy-full ``` +### 7. Trigger the service -## Trigger the Service - -Anyone can now call the [trigger contract](./src/contracts/WavsTrigger.sol) which emits the trigger event WAVS is watching for from the previous step. WAVS then calls the service and saves the result on-chain. +Anyone can now call the [trigger contract](./src/contracts/WavsTrigger.sol) to emit the trigger event WAVS is watching for. WAVS then calls the service and saves the result on-chain. ```bash -# Get the trigger address from previous Deploy forge script +# Get the trigger address from the deployment summary export SERVICE_TRIGGER_ADDR=`jq -r '.evmpriceoracle_trigger.deployedTo' .docker/deployment_summary.json` -# Execute on the trigger contract, WAVS will pick this up and submit the result -# on chain via the operators. export RPC_URL=`task get-rpc` export FUNDED_KEY=`task config:funded-key` -# Rust & Typescript - request BTC from CMC +# Request BTC price from CoinMarketCap (ID=1) export INPUT_DATA=`cast abi-encode "addTrigger(string)" "1"` -# Golang uses the raw value (TODO: future) -# export INPUT_DATA="1" - forge script ./src/script/Trigger.s.sol ${SERVICE_TRIGGER_ADDR} ${INPUT_DATA} --sig 'run(string,string)' --rpc-url ${RPC_URL} --broadcast --private-key ${FUNDED_KEY} ``` -## Show the result +### 8. Show the result -Query the latest submission contract id from the previous request made. +Query the latest submission from the previous request. ```bash docci-delay-per-cmd=2 docci-output-contains="1" RPC_URL=${RPC_URL} forge script ./src/script/ShowResult.s.sol ${SERVICE_TRIGGER_ADDR} --sig 'trigger(string)' --rpc-url ${RPC_URL} @@ -318,7 +137,7 @@ This template contains rulefiles for building components with Claude Code and Cu To spin up a sandboxed instance of [Claude Code](https://docs.anthropic.com/en/docs/agents-and-tools/claude-code/overview) in a Docker container that only has access to this project's files, run the following command: ```bash docci-ignore -npm run claude-code +pnpm run claude-code # or with no restrictions (--dangerously-skip-permissions) -npm run claude-code:unrestricted +pnpm run claude-code:unrestricted ``` diff --git a/README_SETUP.md b/README_SETUP.md new file mode 100644 index 00000000..c1c1f600 --- /dev/null +++ b/README_SETUP.md @@ -0,0 +1,128 @@ +# System Requirements + +### Linux + +If on Linux (e.g. Ubuntu), install the essentials: + +```bash +sudo apt update && sudo apt install build-essential +``` + +## Docker + +If prompted, remove container with `sudo apt remove containerd.io`. + +- **MacOS**: `brew install --cask docker` +- **Linux**: `sudo apt -y install docker.io` +- **Windows WSL**: [docker desktop wsl](https://docs.docker.com/desktop/wsl/#turn-on-docker-desktop-wsl-2) & `sudo chmod 666 /var/run/docker.sock` +- [Docker Documentation](https://docs.docker.com/get-started/get-docker/) + +> **Note:** `sudo` is only used for Docker-related commands in this project. If you prefer not to use sudo with Docker, you can add your user to the Docker group with: +> +> ```bash +> sudo groupadd docker && sudo usermod -aG docker $USER +> ``` +> +> After adding yourself to the group, log out and back in for changes to take effect. + +> [!NOTE] +> If you are running on a Mac with an ARM chip, you will need to do the following: +> +> - Set up Rosetta: `softwareupdate --install-rosetta` +> - Enable Rosetta (Docker Desktop: Settings -> General -> enable "Use Rosetta for x86_64/amd64 emulation on Apple Silicon") +> +> Configure one of the following networking: +> +> - Docker Desktop: Settings -> Resources -> Network -> 'Enable Host Networking' +> - `brew install chipmk/tap/docker-mac-net-connect && sudo brew services start chipmk/tap/docker-mac-net-connect` + +## Docker Compose + +- **MacOS**: Already installed with Docker installer + > `sudo apt remove docker-compose-plugin` may be required if you get a `dpkg` error +- **Linux + Windows WSL**: `sudo apt-get install docker-compose-v2` +- [Compose Documentation](https://docs.docker.com/compose/) + +## Task (Taskfile) + +- **MacOS**: `brew install go-task` +- **Linux + Windows WSL**: `npm install -g @go-task/cli` +- [Task Documentation](https://taskfile.dev/) + +## JQ + +- **MacOS**: `brew install jq` +- **Linux + Windows WSL**: `sudo apt -y install jq` +- [JQ Documentation](https://jqlang.org/download/) + +## Node.js + +- **Required Version**: v21+ +- [Installation via NVM](https://github.com/nvm-sh/nvm?tab=readme-ov-file#installing-and-updating) + +```bash +curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.3/install.sh | bash +nvm install --lts +``` + +## pnpm + +Install the latest version of pnpm: https://pnpm.io/installation + +## Foundry + +```bash docci-ignore +curl -L https://foundry.paradigm.xyz | bash && $HOME/.foundry/bin/foundryup +``` + +## Rust v1.85+ + +```bash docci-ignore +curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh + +rustup toolchain install stable +rustup target add wasm32-wasip2 +``` + +### Upgrade Rust + +```bash docci-ignore +# Remove old targets if present +rustup target remove wasm32-wasi || true +rustup target remove wasm32-wasip1 || true + +# Update and add required target +rustup update stable +rustup target add wasm32-wasip2 +``` + +## Cargo Components + +```bash docci-ignore +# Install required cargo components +# https://github.com/bytecodealliance/cargo-component#installation +cargo install cargo-binstall +cargo binstall cargo-component wasm-tools warg-cli wkg --locked --no-confirm --force + +# Configure default registry +# Found at: $HOME/.config/wasm-pkg/config.toml +wkg config --default-registry wa.dev + +# Allow publishing to a registry +# +# if WSL: `warg config --keyring-backend linux-keyutils` +warg key new +``` + +On Ubuntu LTS, if you later encounter errors like: + +```bash +wkg: /lib/x86_64-linux-gnu/libm.so.6: version `GLIBC_2.38' not found (required by wkg) +wkg: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.39' not found (required by wkg) +``` + +If GLIB is out of date. Consider updating your system using: + +```bash +sudo do-release-upgrade +``` diff --git a/Taskfile.yml b/Taskfile.yml index 3073a55d..60395ccf 100644 --- a/Taskfile.yml +++ b/Taskfile.yml @@ -7,19 +7,25 @@ silent: true dotenv: [".env"] includes: + # Upstream common taskfiles (from wavs-taskfiles repo) + docker: https://raw.githubusercontent.com/Lay3rLabs/wavs-taskfiles/main/base/docker.yml + operator: https://raw.githubusercontent.com/Lay3rLabs/wavs-taskfiles/main/base/poa-operator.yml + wasi: https://raw.githubusercontent.com/Lay3rLabs/wavs-taskfiles/main/base/wasi.yml + core: + taskfile: https://raw.githubusercontent.com/Lay3rLabs/wavs-taskfiles/main/base/core.yml + flatten: true + + # Project-specific taskfiles (with customizations) build: ./taskfile/build.yml - wasi: ./taskfile/wasi.yml - docker: ./taskfile/docker.yml deploy: ./taskfile/deploy.yml services: ./taskfile/services.yml - operator: ./taskfile/operator.yml env: taskfile: ./taskfile/env.yml flatten: true vars: # Docker configuration - DOCKER_IMAGE: '{{.DOCKER_IMAGE | default "ghcr.io/lay3rlabs/wavs:1.4.1"}}' + DOCKER_IMAGE: '{{.DOCKER_IMAGE | default "ghcr.io/lay3rlabs/wavs:1.5.1"}}' MIDDLEWARE_DOCKER_IMAGE: '{{.MIDDLEWARE_DOCKER_IMAGE | default "ghcr.io/lay3rlabs/wavs-middleware:0.5.0-beta.10"}}' # Check if user is in docker group to determine if sudo is needed @@ -29,8 +35,8 @@ vars: # Default endpoints RPC_URL: '{{.RPC_URL | default "http://127.0.0.1:8545"}}' - WAVS_ENDPOINT: '{{.WAVS_ENDPOINT | default "http://127.0.0.1:8000"}}' - AGGREGATOR_URL: '{{.AGGREGATOR_URL | default "http://localhost:8001"}}' + WAVS_ENDPOINT: '{{.WAVS_ENDPOINT | default "http://127.0.0.1:8041"}}' + AGGREGATOR_URL: '{{.AGGREGATOR_URL | default "http://127.0.0.1:8040"}}' IPFS_ENDPOINT: '{{.IPFS_ENDPOINT | default "http://127.0.0.1:5001"}}' IPFS_GATEWAY: '{{.IPFS_GATEWAY | default "http://127.0.0.1:8080/ipfs/"}}' @@ -48,8 +54,8 @@ tasks: desc: "Install initial dependencies" cmds: - | - echo "đŸ“Ļ Installing npm dependencies..." - npm install + echo "đŸ“Ļ Installing pnpm dependencies..." + pnpm install echo "đŸ“Ļ Installing forge dependencies..." forge install echo "✅ Dependencies installed" @@ -63,88 +69,14 @@ tasks: deploy-full: desc: "Run complete WAVS deployment pipeline" cmds: - - | - export AGGREGATOR_URL={{.AGGREGATOR_URL}} - bash ./script/deploy-script.sh - - clean: - desc: "Clean up project files" - cmds: - - forge clean - - cargo clean - - rm -rf cache out broadcast - - task: docker:clean - - test: - desc: "Run all tests" - cmds: - - forge test - - fmt: - desc: "Format Solidity and Rust code" - cmds: - - forge fmt - - cargo fmt + - pnpm run deploy:full lint:check: desc: "Check linting and formatting" cmds: - - npm run lint:check + - pnpm run lint:check lint:fix: desc: "Fix linting and formatting issues" cmds: - - npm run lint:fix - - setup-env: - desc: "Create .env file from example if it doesn't exist" - cmds: - - | - if [ ! -f .env ]; then - if [ -f .env.example ]; then - echo "Creating .env file from .env.example..." - cp .env.example .env - echo ".env file created successfully!" - fi - fi - - check-requirements: - desc: "Verify system requirements are installed" - cmds: - - | - echo "🔍 Validating system requirements..." - # Check Node.js - if ! command -v node >/dev/null 2>&1; then - echo "❌ Node.js not found. Install with: curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.3/install.sh | bash && nvm install --lts" - exit 1 - fi - NODE_VERSION=$(node --version) - MAJOR_VERSION=$(echo $NODE_VERSION | sed 's/^v\([0-9]*\)\..*/\1/') - if [ $MAJOR_VERSION -lt 21 ]; then - echo "❌ Node.js version $NODE_VERSION is less than required v21" - echo "💡 Upgrade with: nvm install --lts" - exit 1 - fi - # Check jq - if ! command -v jq >/dev/null 2>&1; then - echo "❌ jq not found. Install with: brew install jq (macOS) or apt install jq (Linux)" - exit 1 - fi - # Check cargo - if ! command -v cargo >/dev/null 2>&1; then - echo "❌ cargo not found. Install with: curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh" - exit 1 - fi - # Check docker - if ! command -v docker >/dev/null 2>&1; then - echo "❌ docker not found. Visit: https://docs.docker.com/get-docker/" - exit 1 - fi - echo "✅ All requirements satisfied" - - dos2unix: - desc: "Convert all script files to Unix line endings" - cmds: - - | - find script/ -type f -name "*.sh" -exec dos2unix {} \; - find script/ -type f -name "*.env*" -exec dos2unix {} \; + - pnpm run lint:fix diff --git a/components/aggregator/Cargo.toml b/components/aggregator/Cargo.toml new file mode 100644 index 00000000..105e8197 --- /dev/null +++ b/components/aggregator/Cargo.toml @@ -0,0 +1,31 @@ +[package] +name = "aggregator" +edition.workspace = true +version.workspace = true +authors.workspace = true +rust-version.workspace = true +repository.workspace = true + +[lib] +crate-type = ["cdylib"] + +[profile.release] +codegen-units = 1 +opt-level = "s" +debug = false +strip = true +lto = true + +[package.metadata.component] +package = "component:aggregator" +target = "wavs:aggregator@=1.3.0" + +[dependencies] +alloy-primitives = { workspace = true } +alloy-network = { workspace = true } +alloy-provider = { workspace = true } +wit-bindgen-rt = { workspace = true } +serde = { workspace = true } +serde_json = { workspace = true } +wavs-wasi-utils = { workspace = true } +wstd = { workspace = true } diff --git a/components/aggregator/Makefile b/components/aggregator/Makefile new file mode 100644 index 00000000..0f9edaa3 --- /dev/null +++ b/components/aggregator/Makefile @@ -0,0 +1,11 @@ +OUTPUT_DIR?=../../compiled + +# WASI_BUILD_DIR=components/aggregator make wasi-build + +## wasi-build: build the aggregator WASI component +wasi-build: + @echo "Building component: aggregator" + @cargo component build --release; cargo fmt + @mkdir -p $(OUTPUT_DIR) + @cp ../../target/wasm32-wasip1/release/aggregator.wasm $(OUTPUT_DIR) +.PHONY: wasi-build diff --git a/components/aggregator/src/bindings.rs b/components/aggregator/src/bindings.rs new file mode 100644 index 00000000..ae8379b9 --- /dev/null +++ b/components/aggregator/src/bindings.rs @@ -0,0 +1,24703 @@ +// Generated by `wit-bindgen` 0.41.0. DO NOT EDIT! +// Options used: +// * runtime_path: "wit_bindgen_rt" +pub type Packet = wavs::aggregator::aggregator::Packet; +pub type AggregatorAction = wavs::aggregator::aggregator::AggregatorAction; +pub type AnyTxHash = wavs::types::chain::AnyTxHash; +#[doc(hidden)] +#[allow(non_snake_case)] +pub unsafe fn _export_process_packet_cabi(arg0: *mut u8) -> *mut u8 { + #[cfg(target_arch = "wasm32")] _rt::run_ctors_once(); + let l0 = *arg0.add(0).cast::<*mut u8>(); + let l1 = *arg0.add(::core::mem::size_of::<*const u8>()).cast::(); + let len2 = l1; + let bytes2 = _rt::Vec::from_raw_parts(l0.cast(), len2, len2); + let l3 = *arg0.add(2 * ::core::mem::size_of::<*const u8>()).cast::<*mut u8>(); + let l4 = *arg0.add(3 * ::core::mem::size_of::<*const u8>()).cast::(); + let base160 = l3; + let len160 = l4; + let mut result160 = _rt::Vec::with_capacity(len160); + for i in 0..len160 { + let base = base160.add(i * (144 + 42 * ::core::mem::size_of::<*const u8>())); + let e160 = { + let l5 = *base.add(0).cast::<*mut u8>(); + let l6 = *base.add(::core::mem::size_of::<*const u8>()).cast::(); + let len7 = l6; + let bytes7 = _rt::Vec::from_raw_parts(l5.cast(), len7, len7); + let l8 = i32::from( + *base.add(2 * ::core::mem::size_of::<*const u8>()).cast::(), + ); + use wavs::types::service::Trigger as V43; + let v43 = match l8 { + 0 => { + let e43 = { + let l9 = *base + .add(8 + 2 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l10 = *base + .add(8 + 3 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len11 = l10; + let l12 = *base + .add(8 + 4 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l13 = *base + .add(8 + 5 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len14 = l13; + let bytes14 = _rt::Vec::from_raw_parts(l12.cast(), len14, len14); + let l15 = *base + .add(8 + 6 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l16 = *base + .add(8 + 7 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len17 = l16; + wavs::types::service::TriggerEvmContractEvent { + address: wavs::types::chain::EvmAddress { + raw_bytes: _rt::Vec::from_raw_parts(l9.cast(), len11, len11), + }, + chain: _rt::string_lift(bytes14), + event_hash: _rt::Vec::from_raw_parts( + l15.cast(), + len17, + len17, + ), + } + }; + V43::EvmContractEvent(e43) + } + 1 => { + let e43 = { + let l18 = *base + .add(8 + 2 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l19 = *base + .add(8 + 3 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len20 = l19; + let bytes20 = _rt::Vec::from_raw_parts(l18.cast(), len20, len20); + let l21 = *base + .add(8 + 4 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let l22 = *base + .add(8 + 5 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l23 = *base + .add(8 + 6 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len24 = l23; + let bytes24 = _rt::Vec::from_raw_parts(l22.cast(), len24, len24); + let l25 = *base + .add(8 + 7 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l26 = *base + .add(8 + 8 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len27 = l26; + let bytes27 = _rt::Vec::from_raw_parts(l25.cast(), len27, len27); + wavs::types::service::TriggerCosmosContractEvent { + address: wavs::types::chain::CosmosAddress { + bech32_addr: _rt::string_lift(bytes20), + prefix_len: l21 as u32, + }, + chain: _rt::string_lift(bytes24), + event_type: _rt::string_lift(bytes27), + } + }; + V43::CosmosContractEvent(e43) + } + 2 => { + let e43 = { + let l28 = *base + .add(8 + 2 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l29 = *base + .add(8 + 3 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len30 = l29; + let bytes30 = _rt::Vec::from_raw_parts(l28.cast(), len30, len30); + let l31 = *base + .add(8 + 4 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let l32 = i32::from( + *base + .add(16 + 4 * ::core::mem::size_of::<*const u8>()) + .cast::(), + ); + let l34 = i32::from( + *base + .add(32 + 4 * ::core::mem::size_of::<*const u8>()) + .cast::(), + ); + wavs::types::service::TriggerBlockInterval { + chain: _rt::string_lift(bytes30), + n_blocks: l31 as u32, + start_block: match l32 { + 0 => None, + 1 => { + let e = { + let l33 = *base + .add(24 + 4 * ::core::mem::size_of::<*const u8>()) + .cast::(); + l33 as u64 + }; + Some(e) + } + _ => _rt::invalid_enum_discriminant(), + }, + end_block: match l34 { + 0 => None, + 1 => { + let e = { + let l35 = *base + .add(40 + 4 * ::core::mem::size_of::<*const u8>()) + .cast::(); + l35 as u64 + }; + Some(e) + } + _ => _rt::invalid_enum_discriminant(), + }, + } + }; + V43::BlockInterval(e43) + } + 3 => { + let e43 = { + let l36 = *base + .add(8 + 2 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l37 = *base + .add(8 + 3 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len38 = l37; + let bytes38 = _rt::Vec::from_raw_parts(l36.cast(), len38, len38); + let l39 = i32::from( + *base + .add(8 + 4 * ::core::mem::size_of::<*const u8>()) + .cast::(), + ); + let l41 = i32::from( + *base + .add(24 + 4 * ::core::mem::size_of::<*const u8>()) + .cast::(), + ); + wavs::types::service::TriggerCron { + schedule: _rt::string_lift(bytes38), + start_time: match l39 { + 0 => None, + 1 => { + let e = { + let l40 = *base + .add(16 + 4 * ::core::mem::size_of::<*const u8>()) + .cast::(); + wavs::types::core::Timestamp { + nanos: l40 as u64, + } + }; + Some(e) + } + _ => _rt::invalid_enum_discriminant(), + }, + end_time: match l41 { + 0 => None, + 1 => { + let e = { + let l42 = *base + .add(32 + 4 * ::core::mem::size_of::<*const u8>()) + .cast::(); + wavs::types::core::Timestamp { + nanos: l42 as u64, + } + }; + Some(e) + } + _ => _rt::invalid_enum_discriminant(), + }, + } + }; + V43::Cron(e43) + } + n => { + debug_assert_eq!(n, 4, "invalid enum discriminant"); + V43::Manual + } + }; + let l44 = i32::from( + *base.add(48 + 4 * ::core::mem::size_of::<*const u8>()).cast::(), + ); + use wavs::types::service::ComponentSource as V68; + let v68 = match l44 { + 0 => { + let e68 = { + let l45 = *base + .add(48 + 5 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l46 = *base + .add(48 + 6 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len47 = l46; + let bytes47 = _rt::Vec::from_raw_parts(l45.cast(), len47, len47); + let l48 = *base + .add(48 + 7 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l49 = *base + .add(48 + 8 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len50 = l49; + let bytes50 = _rt::Vec::from_raw_parts(l48.cast(), len50, len50); + wavs::types::service::ComponentSourceDownload { + uri: _rt::string_lift(bytes47), + digest: _rt::string_lift(bytes50), + } + }; + V68::Download(e68) + } + 1 => { + let e68 = { + let l51 = *base + .add(48 + 5 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l52 = *base + .add(48 + 6 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len53 = l52; + let bytes53 = _rt::Vec::from_raw_parts(l51.cast(), len53, len53); + let l54 = i32::from( + *base + .add(48 + 7 * ::core::mem::size_of::<*const u8>()) + .cast::(), + ); + let l58 = i32::from( + *base + .add(48 + 10 * ::core::mem::size_of::<*const u8>()) + .cast::(), + ); + let l62 = *base + .add(48 + 13 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l63 = *base + .add(48 + 14 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len64 = l63; + let bytes64 = _rt::Vec::from_raw_parts(l62.cast(), len64, len64); + wavs::types::service::Registry { + digest: _rt::string_lift(bytes53), + domain: match l54 { + 0 => None, + 1 => { + let e = { + let l55 = *base + .add(48 + 8 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l56 = *base + .add(48 + 9 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len57 = l56; + let bytes57 = _rt::Vec::from_raw_parts( + l55.cast(), + len57, + len57, + ); + _rt::string_lift(bytes57) + }; + Some(e) + } + _ => _rt::invalid_enum_discriminant(), + }, + version: match l58 { + 0 => None, + 1 => { + let e = { + let l59 = *base + .add(48 + 11 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l60 = *base + .add(48 + 12 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len61 = l60; + let bytes61 = _rt::Vec::from_raw_parts( + l59.cast(), + len61, + len61, + ); + _rt::string_lift(bytes61) + }; + Some(e) + } + _ => _rt::invalid_enum_discriminant(), + }, + pkg: _rt::string_lift(bytes64), + } + }; + V68::Registry(e68) + } + n => { + debug_assert_eq!(n, 2, "invalid enum discriminant"); + let e68 = { + let l65 = *base + .add(48 + 5 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l66 = *base + .add(48 + 6 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len67 = l66; + let bytes67 = _rt::Vec::from_raw_parts(l65.cast(), len67, len67); + _rt::string_lift(bytes67) + }; + V68::Digest(e68) + } + }; + let l69 = i32::from( + *base.add(48 + 15 * ::core::mem::size_of::<*const u8>()).cast::(), + ); + use wavs::types::service::AllowedHostPermission as V76; + let v76 = match l69 { + 0 => V76::All, + 1 => { + let e76 = { + let l70 = *base + .add(48 + 16 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l71 = *base + .add(48 + 17 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let base75 = l70; + let len75 = l71; + let mut result75 = _rt::Vec::with_capacity(len75); + for i in 0..len75 { + let base = base75 + .add(i * (2 * ::core::mem::size_of::<*const u8>())); + let e75 = { + let l72 = *base.add(0).cast::<*mut u8>(); + let l73 = *base + .add(::core::mem::size_of::<*const u8>()) + .cast::(); + let len74 = l73; + let bytes74 = _rt::Vec::from_raw_parts( + l72.cast(), + len74, + len74, + ); + _rt::string_lift(bytes74) + }; + result75.push(e75); + } + _rt::cabi_dealloc( + base75, + len75 * (2 * ::core::mem::size_of::<*const u8>()), + ::core::mem::size_of::<*const u8>(), + ); + result75 + }; + V76::Only(e76) + } + n => { + debug_assert_eq!(n, 2, "invalid enum discriminant"); + V76::None + } + }; + let l77 = i32::from( + *base.add(48 + 18 * ::core::mem::size_of::<*const u8>()).cast::(), + ); + let l78 = i32::from( + *base.add(56 + 18 * ::core::mem::size_of::<*const u8>()).cast::(), + ); + let l80 = i32::from( + *base.add(72 + 18 * ::core::mem::size_of::<*const u8>()).cast::(), + ); + let l82 = *base + .add(88 + 18 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l83 = *base + .add(88 + 19 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let base90 = l82; + let len90 = l83; + let mut result90 = _rt::Vec::with_capacity(len90); + for i in 0..len90 { + let base = base90.add(i * (4 * ::core::mem::size_of::<*const u8>())); + let e90 = { + let l84 = *base.add(0).cast::<*mut u8>(); + let l85 = *base + .add(::core::mem::size_of::<*const u8>()) + .cast::(); + let len86 = l85; + let bytes86 = _rt::Vec::from_raw_parts(l84.cast(), len86, len86); + let l87 = *base + .add(2 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l88 = *base + .add(3 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len89 = l88; + let bytes89 = _rt::Vec::from_raw_parts(l87.cast(), len89, len89); + (_rt::string_lift(bytes86), _rt::string_lift(bytes89)) + }; + result90.push(e90); + } + _rt::cabi_dealloc( + base90, + len90 * (4 * ::core::mem::size_of::<*const u8>()), + ::core::mem::size_of::<*const u8>(), + ); + let l91 = *base + .add(88 + 20 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l92 = *base + .add(88 + 21 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let base96 = l91; + let len96 = l92; + let mut result96 = _rt::Vec::with_capacity(len96); + for i in 0..len96 { + let base = base96.add(i * (2 * ::core::mem::size_of::<*const u8>())); + let e96 = { + let l93 = *base.add(0).cast::<*mut u8>(); + let l94 = *base + .add(::core::mem::size_of::<*const u8>()) + .cast::(); + let len95 = l94; + let bytes95 = _rt::Vec::from_raw_parts(l93.cast(), len95, len95); + _rt::string_lift(bytes95) + }; + result96.push(e96); + } + _rt::cabi_dealloc( + base96, + len96 * (2 * ::core::mem::size_of::<*const u8>()), + ::core::mem::size_of::<*const u8>(), + ); + let l97 = i32::from( + *base.add(88 + 22 * ::core::mem::size_of::<*const u8>()).cast::(), + ); + use wavs::types::service::Submit as V159; + let v159 = match l97 { + 0 => V159::None, + n => { + debug_assert_eq!(n, 1, "invalid enum discriminant"); + let e159 = { + let l98 = *base + .add(96 + 22 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l99 = *base + .add(96 + 23 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len100 = l99; + let bytes100 = _rt::Vec::from_raw_parts( + l98.cast(), + len100, + len100, + ); + let l101 = i32::from( + *base + .add(96 + 24 * ::core::mem::size_of::<*const u8>()) + .cast::(), + ); + use wavs::types::service::ComponentSource as V125; + let v125 = match l101 { + 0 => { + let e125 = { + let l102 = *base + .add(96 + 25 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l103 = *base + .add(96 + 26 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len104 = l103; + let bytes104 = _rt::Vec::from_raw_parts( + l102.cast(), + len104, + len104, + ); + let l105 = *base + .add(96 + 27 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l106 = *base + .add(96 + 28 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len107 = l106; + let bytes107 = _rt::Vec::from_raw_parts( + l105.cast(), + len107, + len107, + ); + wavs::types::service::ComponentSourceDownload { + uri: _rt::string_lift(bytes104), + digest: _rt::string_lift(bytes107), + } + }; + V125::Download(e125) + } + 1 => { + let e125 = { + let l108 = *base + .add(96 + 25 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l109 = *base + .add(96 + 26 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len110 = l109; + let bytes110 = _rt::Vec::from_raw_parts( + l108.cast(), + len110, + len110, + ); + let l111 = i32::from( + *base + .add(96 + 27 * ::core::mem::size_of::<*const u8>()) + .cast::(), + ); + let l115 = i32::from( + *base + .add(96 + 30 * ::core::mem::size_of::<*const u8>()) + .cast::(), + ); + let l119 = *base + .add(96 + 33 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l120 = *base + .add(96 + 34 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len121 = l120; + let bytes121 = _rt::Vec::from_raw_parts( + l119.cast(), + len121, + len121, + ); + wavs::types::service::Registry { + digest: _rt::string_lift(bytes110), + domain: match l111 { + 0 => None, + 1 => { + let e = { + let l112 = *base + .add(96 + 28 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l113 = *base + .add(96 + 29 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len114 = l113; + let bytes114 = _rt::Vec::from_raw_parts( + l112.cast(), + len114, + len114, + ); + _rt::string_lift(bytes114) + }; + Some(e) + } + _ => _rt::invalid_enum_discriminant(), + }, + version: match l115 { + 0 => None, + 1 => { + let e = { + let l116 = *base + .add(96 + 31 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l117 = *base + .add(96 + 32 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len118 = l117; + let bytes118 = _rt::Vec::from_raw_parts( + l116.cast(), + len118, + len118, + ); + _rt::string_lift(bytes118) + }; + Some(e) + } + _ => _rt::invalid_enum_discriminant(), + }, + pkg: _rt::string_lift(bytes121), + } + }; + V125::Registry(e125) + } + n => { + debug_assert_eq!(n, 2, "invalid enum discriminant"); + let e125 = { + let l122 = *base + .add(96 + 25 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l123 = *base + .add(96 + 26 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len124 = l123; + let bytes124 = _rt::Vec::from_raw_parts( + l122.cast(), + len124, + len124, + ); + _rt::string_lift(bytes124) + }; + V125::Digest(e125) + } + }; + let l126 = i32::from( + *base + .add(96 + 35 * ::core::mem::size_of::<*const u8>()) + .cast::(), + ); + use wavs::types::service::AllowedHostPermission as V133; + let v133 = match l126 { + 0 => V133::All, + 1 => { + let e133 = { + let l127 = *base + .add(96 + 36 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l128 = *base + .add(96 + 37 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let base132 = l127; + let len132 = l128; + let mut result132 = _rt::Vec::with_capacity(len132); + for i in 0..len132 { + let base = base132 + .add(i * (2 * ::core::mem::size_of::<*const u8>())); + let e132 = { + let l129 = *base.add(0).cast::<*mut u8>(); + let l130 = *base + .add(::core::mem::size_of::<*const u8>()) + .cast::(); + let len131 = l130; + let bytes131 = _rt::Vec::from_raw_parts( + l129.cast(), + len131, + len131, + ); + _rt::string_lift(bytes131) + }; + result132.push(e132); + } + _rt::cabi_dealloc( + base132, + len132 * (2 * ::core::mem::size_of::<*const u8>()), + ::core::mem::size_of::<*const u8>(), + ); + result132 + }; + V133::Only(e133) + } + n => { + debug_assert_eq!(n, 2, "invalid enum discriminant"); + V133::None + } + }; + let l134 = i32::from( + *base + .add(96 + 38 * ::core::mem::size_of::<*const u8>()) + .cast::(), + ); + let l135 = i32::from( + *base + .add(104 + 38 * ::core::mem::size_of::<*const u8>()) + .cast::(), + ); + let l137 = i32::from( + *base + .add(120 + 38 * ::core::mem::size_of::<*const u8>()) + .cast::(), + ); + let l139 = *base + .add(136 + 38 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l140 = *base + .add(136 + 39 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let base147 = l139; + let len147 = l140; + let mut result147 = _rt::Vec::with_capacity(len147); + for i in 0..len147 { + let base = base147 + .add(i * (4 * ::core::mem::size_of::<*const u8>())); + let e147 = { + let l141 = *base.add(0).cast::<*mut u8>(); + let l142 = *base + .add(::core::mem::size_of::<*const u8>()) + .cast::(); + let len143 = l142; + let bytes143 = _rt::Vec::from_raw_parts( + l141.cast(), + len143, + len143, + ); + let l144 = *base + .add(2 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l145 = *base + .add(3 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len146 = l145; + let bytes146 = _rt::Vec::from_raw_parts( + l144.cast(), + len146, + len146, + ); + (_rt::string_lift(bytes143), _rt::string_lift(bytes146)) + }; + result147.push(e147); + } + _rt::cabi_dealloc( + base147, + len147 * (4 * ::core::mem::size_of::<*const u8>()), + ::core::mem::size_of::<*const u8>(), + ); + let l148 = *base + .add(136 + 40 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l149 = *base + .add(136 + 41 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let base153 = l148; + let len153 = l149; + let mut result153 = _rt::Vec::with_capacity(len153); + for i in 0..len153 { + let base = base153 + .add(i * (2 * ::core::mem::size_of::<*const u8>())); + let e153 = { + let l150 = *base.add(0).cast::<*mut u8>(); + let l151 = *base + .add(::core::mem::size_of::<*const u8>()) + .cast::(); + let len152 = l151; + let bytes152 = _rt::Vec::from_raw_parts( + l150.cast(), + len152, + len152, + ); + _rt::string_lift(bytes152) + }; + result153.push(e153); + } + _rt::cabi_dealloc( + base153, + len153 * (2 * ::core::mem::size_of::<*const u8>()), + ::core::mem::size_of::<*const u8>(), + ); + let l154 = i32::from( + *base + .add(136 + 42 * ::core::mem::size_of::<*const u8>()) + .cast::(), + ); + use wavs::types::service::SignatureAlgorithm as V155; + let v155 = match l154 { + n => { + debug_assert_eq!(n, 0, "invalid enum discriminant"); + V155::Secp256k1 + } + }; + let l156 = i32::from( + *base + .add(137 + 42 * ::core::mem::size_of::<*const u8>()) + .cast::(), + ); + wavs::types::service::AggregatorSubmit { + url: _rt::string_lift(bytes100), + component: wavs::types::service::Component { + source: v125, + permissions: wavs::types::service::Permissions { + allowed_http_hosts: v133, + file_system: _rt::bool_lift(l134 as u8), + }, + fuel_limit: match l135 { + 0 => None, + 1 => { + let e = { + let l136 = *base + .add(112 + 38 * ::core::mem::size_of::<*const u8>()) + .cast::(); + l136 as u64 + }; + Some(e) + } + _ => _rt::invalid_enum_discriminant(), + }, + time_limit_seconds: match l137 { + 0 => None, + 1 => { + let e = { + let l138 = *base + .add(128 + 38 * ::core::mem::size_of::<*const u8>()) + .cast::(); + l138 as u64 + }; + Some(e) + } + _ => _rt::invalid_enum_discriminant(), + }, + config: result147, + env_keys: result153, + }, + signature_kind: wavs::types::service::SignatureKind { + algorithm: v155, + prefix: match l156 { + 0 => None, + 1 => { + let e = { + let l157 = i32::from( + *base + .add(138 + 42 * ::core::mem::size_of::<*const u8>()) + .cast::(), + ); + use wavs::types::service::SignaturePrefix as V158; + let v158 = match l157 { + n => { + debug_assert_eq!(n, 0, "invalid enum discriminant"); + V158::Eip191 + } + }; + v158 + }; + Some(e) + } + _ => _rt::invalid_enum_discriminant(), + }, + }, + } + }; + V159::Aggregator(e159) + } + }; + ( + _rt::string_lift(bytes7), + wavs::types::service::Workflow { + trigger: v43, + component: wavs::types::service::Component { + source: v68, + permissions: wavs::types::service::Permissions { + allowed_http_hosts: v76, + file_system: _rt::bool_lift(l77 as u8), + }, + fuel_limit: match l78 { + 0 => None, + 1 => { + let e = { + let l79 = *base + .add(64 + 18 * ::core::mem::size_of::<*const u8>()) + .cast::(); + l79 as u64 + }; + Some(e) + } + _ => _rt::invalid_enum_discriminant(), + }, + time_limit_seconds: match l80 { + 0 => None, + 1 => { + let e = { + let l81 = *base + .add(80 + 18 * ::core::mem::size_of::<*const u8>()) + .cast::(); + l81 as u64 + }; + Some(e) + } + _ => _rt::invalid_enum_discriminant(), + }, + config: result90, + env_keys: result96, + }, + submit: v159, + }, + ) + }; + result160.push(e160); + } + _rt::cabi_dealloc( + base160, + len160 * (144 + 42 * ::core::mem::size_of::<*const u8>()), + 8, + ); + let l161 = i32::from( + *arg0.add(4 * ::core::mem::size_of::<*const u8>()).cast::(), + ); + use wavs::types::service::ServiceStatus as V162; + let v162 = match l161 { + 0 => V162::Active, + n => { + debug_assert_eq!(n, 1, "invalid enum discriminant"); + V162::Paused + } + }; + let l163 = i32::from( + *arg0.add(5 * ::core::mem::size_of::<*const u8>()).cast::(), + ); + use wavs::types::service::ServiceManager as V170; + let v170 = match l163 { + n => { + debug_assert_eq!(n, 0, "invalid enum discriminant"); + let e170 = { + let l164 = *arg0 + .add(6 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l165 = *arg0 + .add(7 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len166 = l165; + let bytes166 = _rt::Vec::from_raw_parts(l164.cast(), len166, len166); + let l167 = *arg0 + .add(8 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l168 = *arg0 + .add(9 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len169 = l168; + wavs::types::service::EvmManager { + chain: _rt::string_lift(bytes166), + address: wavs::types::chain::EvmAddress { + raw_bytes: _rt::Vec::from_raw_parts(l167.cast(), len169, len169), + }, + } + }; + V170::Evm(e170) + } + }; + let l171 = *arg0.add(10 * ::core::mem::size_of::<*const u8>()).cast::<*mut u8>(); + let l172 = *arg0.add(11 * ::core::mem::size_of::<*const u8>()).cast::(); + let len173 = l172; + let bytes173 = _rt::Vec::from_raw_parts(l171.cast(), len173, len173); + let l174 = *arg0.add(12 * ::core::mem::size_of::<*const u8>()).cast::<*mut u8>(); + let l175 = *arg0.add(13 * ::core::mem::size_of::<*const u8>()).cast::(); + let len176 = l175; + let l177 = *arg0.add(14 * ::core::mem::size_of::<*const u8>()).cast::<*mut u8>(); + let l178 = *arg0.add(15 * ::core::mem::size_of::<*const u8>()).cast::(); + let len179 = l178; + let l180 = *arg0.add(16 * ::core::mem::size_of::<*const u8>()).cast::<*mut u8>(); + let l181 = *arg0.add(17 * ::core::mem::size_of::<*const u8>()).cast::(); + let len182 = l181; + let l183 = *arg0.add(18 * ::core::mem::size_of::<*const u8>()).cast::<*mut u8>(); + let l184 = *arg0.add(19 * ::core::mem::size_of::<*const u8>()).cast::(); + let len185 = l184; + let l186 = i32::from( + *arg0.add(20 * ::core::mem::size_of::<*const u8>()).cast::(), + ); + use wavs::types::service::SignatureAlgorithm as V187; + let v187 = match l186 { + n => { + debug_assert_eq!(n, 0, "invalid enum discriminant"); + V187::Secp256k1 + } + }; + let l188 = i32::from( + *arg0.add(1 + 20 * ::core::mem::size_of::<*const u8>()).cast::(), + ); + let l191 = i32::from( + *arg0.add(8 + 20 * ::core::mem::size_of::<*const u8>()).cast::(), + ); + use wavs::types::events::TriggerData as V247; + let v247 = match l191 { + 0 => { + let e247 = { + let l192 = *arg0 + .add(16 + 20 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l193 = *arg0 + .add(16 + 21 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len194 = l193; + let bytes194 = _rt::Vec::from_raw_parts(l192.cast(), len194, len194); + let l195 = *arg0 + .add(16 + 22 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l196 = *arg0 + .add(16 + 23 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len197 = l196; + let l198 = *arg0 + .add(16 + 24 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l199 = *arg0 + .add(16 + 25 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let base203 = l198; + let len203 = l199; + let mut result203 = _rt::Vec::with_capacity(len203); + for i in 0..len203 { + let base = base203 + .add(i * (2 * ::core::mem::size_of::<*const u8>())); + let e203 = { + let l200 = *base.add(0).cast::<*mut u8>(); + let l201 = *base + .add(::core::mem::size_of::<*const u8>()) + .cast::(); + let len202 = l201; + _rt::Vec::from_raw_parts(l200.cast(), len202, len202) + }; + result203.push(e203); + } + _rt::cabi_dealloc( + base203, + len203 * (2 * ::core::mem::size_of::<*const u8>()), + ::core::mem::size_of::<*const u8>(), + ); + let l204 = *arg0 + .add(16 + 26 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l205 = *arg0 + .add(16 + 27 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len206 = l205; + let l207 = *arg0 + .add(16 + 28 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l208 = *arg0 + .add(16 + 29 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len209 = l208; + let l210 = *arg0 + .add(16 + 30 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let l211 = *arg0 + .add(24 + 30 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let l212 = *arg0 + .add(32 + 30 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l213 = *arg0 + .add(32 + 31 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len214 = l213; + let l215 = i32::from( + *arg0.add(32 + 32 * ::core::mem::size_of::<*const u8>()).cast::(), + ); + let l217 = *arg0 + .add(48 + 32 * ::core::mem::size_of::<*const u8>()) + .cast::(); + wavs::types::events::TriggerDataEvmContractEvent { + chain: _rt::string_lift(bytes194), + log: wavs::types::chain::EvmEventLog { + address: wavs::types::chain::EvmAddress { + raw_bytes: _rt::Vec::from_raw_parts( + l195.cast(), + len197, + len197, + ), + }, + data: wavs::types::chain::EvmEventLogData { + topics: result203, + data: _rt::Vec::from_raw_parts(l204.cast(), len206, len206), + }, + tx_hash: _rt::Vec::from_raw_parts(l207.cast(), len209, len209), + block_number: l210 as u64, + log_index: l211 as u64, + block_hash: _rt::Vec::from_raw_parts( + l212.cast(), + len214, + len214, + ), + block_timestamp: match l215 { + 0 => None, + 1 => { + let e = { + let l216 = *arg0 + .add(40 + 32 * ::core::mem::size_of::<*const u8>()) + .cast::(); + l216 as u64 + }; + Some(e) + } + _ => _rt::invalid_enum_discriminant(), + }, + tx_index: l217 as u64, + }, + } + }; + V247::EvmContractEvent(e247) + } + 1 => { + let e247 = { + let l218 = *arg0 + .add(16 + 20 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l219 = *arg0 + .add(16 + 21 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len220 = l219; + let bytes220 = _rt::Vec::from_raw_parts(l218.cast(), len220, len220); + let l221 = *arg0 + .add(16 + 22 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let l222 = *arg0 + .add(16 + 23 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l223 = *arg0 + .add(16 + 24 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len224 = l223; + let bytes224 = _rt::Vec::from_raw_parts(l222.cast(), len224, len224); + let l225 = *arg0 + .add(16 + 25 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l226 = *arg0 + .add(16 + 26 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len227 = l226; + let bytes227 = _rt::Vec::from_raw_parts(l225.cast(), len227, len227); + let l228 = *arg0 + .add(16 + 27 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l229 = *arg0 + .add(16 + 28 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let base236 = l228; + let len236 = l229; + let mut result236 = _rt::Vec::with_capacity(len236); + for i in 0..len236 { + let base = base236 + .add(i * (4 * ::core::mem::size_of::<*const u8>())); + let e236 = { + let l230 = *base.add(0).cast::<*mut u8>(); + let l231 = *base + .add(::core::mem::size_of::<*const u8>()) + .cast::(); + let len232 = l231; + let bytes232 = _rt::Vec::from_raw_parts( + l230.cast(), + len232, + len232, + ); + let l233 = *base + .add(2 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l234 = *base + .add(3 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len235 = l234; + let bytes235 = _rt::Vec::from_raw_parts( + l233.cast(), + len235, + len235, + ); + (_rt::string_lift(bytes232), _rt::string_lift(bytes235)) + }; + result236.push(e236); + } + _rt::cabi_dealloc( + base236, + len236 * (4 * ::core::mem::size_of::<*const u8>()), + ::core::mem::size_of::<*const u8>(), + ); + let l237 = *arg0 + .add(24 + 28 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let l238 = *arg0 + .add(32 + 28 * ::core::mem::size_of::<*const u8>()) + .cast::(); + wavs::types::events::TriggerDataCosmosContractEvent { + contract_address: wavs::types::chain::CosmosAddress { + bech32_addr: _rt::string_lift(bytes220), + prefix_len: l221 as u32, + }, + chain: _rt::string_lift(bytes224), + event: wavs::types::chain::CosmosEvent { + ty: _rt::string_lift(bytes227), + attributes: result236, + }, + event_index: l237 as u64, + block_height: l238 as u64, + } + }; + V247::CosmosContractEvent(e247) + } + 2 => { + let e247 = { + let l239 = *arg0 + .add(16 + 20 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l240 = *arg0 + .add(16 + 21 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len241 = l240; + let bytes241 = _rt::Vec::from_raw_parts(l239.cast(), len241, len241); + let l242 = *arg0 + .add(16 + 22 * ::core::mem::size_of::<*const u8>()) + .cast::(); + wavs::types::events::TriggerDataBlockInterval { + chain: _rt::string_lift(bytes241), + block_height: l242 as u64, + } + }; + V247::BlockInterval(e247) + } + 3 => { + let e247 = { + let l243 = *arg0 + .add(16 + 20 * ::core::mem::size_of::<*const u8>()) + .cast::(); + wavs::types::events::TriggerDataCron { + trigger_time: wavs::types::core::Timestamp { + nanos: l243 as u64, + }, + } + }; + V247::Cron(e247) + } + n => { + debug_assert_eq!(n, 4, "invalid enum discriminant"); + let e247 = { + let l244 = *arg0 + .add(16 + 20 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l245 = *arg0 + .add(16 + 21 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len246 = l245; + _rt::Vec::from_raw_parts(l244.cast(), len246, len246) + }; + V247::Raw(e247) + } + }; + let result248 = T::process_packet(wavs::aggregator::aggregator::Packet { + service: wavs::types::service::Service { + name: _rt::string_lift(bytes2), + workflows: result160, + status: v162, + manager: v170, + }, + workflow_id: _rt::string_lift(bytes173), + envelope: wavs::aggregator::aggregator::Envelope { + event_id: _rt::Vec::from_raw_parts(l174.cast(), len176, len176), + ordering: _rt::Vec::from_raw_parts(l177.cast(), len179, len179), + payload: _rt::Vec::from_raw_parts(l180.cast(), len182, len182), + }, + signature: wavs::aggregator::aggregator::EnvelopeSignature { + data: _rt::Vec::from_raw_parts(l183.cast(), len185, len185), + kind: wavs::types::service::SignatureKind { + algorithm: v187, + prefix: match l188 { + 0 => None, + 1 => { + let e = { + let l189 = i32::from( + *arg0 + .add(2 + 20 * ::core::mem::size_of::<*const u8>()) + .cast::(), + ); + use wavs::types::service::SignaturePrefix as V190; + let v190 = match l189 { + n => { + debug_assert_eq!(n, 0, "invalid enum discriminant"); + V190::Eip191 + } + }; + v190 + }; + Some(e) + } + _ => _rt::invalid_enum_discriminant(), + }, + }, + }, + trigger_data: v247, + }); + _rt::cabi_dealloc(arg0, 56 + 32 * ::core::mem::size_of::<*const u8>(), 8); + let ptr249 = (&raw mut _RET_AREA.0).cast::(); + match result248 { + Ok(e) => { + *ptr249.add(0).cast::() = (0i32) as u8; + let vec259 = e; + let len259 = vec259.len(); + let layout259 = _rt::alloc::Layout::from_size_align_unchecked( + vec259.len() * (32 + 4 * ::core::mem::size_of::<*const u8>()), + 8, + ); + let result259 = if layout259.size() != 0 { + let ptr = _rt::alloc::alloc(layout259).cast::(); + if ptr.is_null() { + _rt::alloc::handle_alloc_error(layout259); + } + ptr + } else { + ::core::ptr::null_mut() + }; + for (i, e) in vec259.into_iter().enumerate() { + let base = result259 + .add(i * (32 + 4 * ::core::mem::size_of::<*const u8>())); + { + use wavs::aggregator::aggregator::AggregatorAction as V258; + match e { + V258::Timer(e) => { + *base.add(0).cast::() = (0i32) as u8; + let wavs::aggregator::aggregator::TimerAction { + delay: delay250, + } = e; + let wavs::types::core::Duration { secs: secs251 } = delay250; + *base.add(8).cast::() = _rt::as_i64(secs251); + } + V258::Submit(e) => { + *base.add(0).cast::() = (1i32) as u8; + let wavs::aggregator::aggregator::SubmitAction { + chain: chain252, + contract_address: contract_address252, + gas_price: gas_price252, + } = e; + let vec253 = (chain252.into_bytes()).into_boxed_slice(); + let ptr253 = vec253.as_ptr().cast::(); + let len253 = vec253.len(); + ::core::mem::forget(vec253); + *base + .add(8 + 1 * ::core::mem::size_of::<*const u8>()) + .cast::() = len253; + *base.add(8).cast::<*mut u8>() = ptr253.cast_mut(); + let wavs::types::chain::EvmAddress { + raw_bytes: raw_bytes254, + } = contract_address252; + let vec255 = (raw_bytes254).into_boxed_slice(); + let ptr255 = vec255.as_ptr().cast::(); + let len255 = vec255.len(); + ::core::mem::forget(vec255); + *base + .add(8 + 3 * ::core::mem::size_of::<*const u8>()) + .cast::() = len255; + *base + .add(8 + 2 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>() = ptr255.cast_mut(); + match gas_price252 { + Some(e) => { + *base + .add(8 + 4 * ::core::mem::size_of::<*const u8>()) + .cast::() = (1i32) as u8; + let wavs::types::core::U128 { value: value256 } = e; + let (t257_0, t257_1) = value256; + *base + .add(16 + 4 * ::core::mem::size_of::<*const u8>()) + .cast::() = _rt::as_i64(t257_0); + *base + .add(24 + 4 * ::core::mem::size_of::<*const u8>()) + .cast::() = _rt::as_i64(t257_1); + } + None => { + *base + .add(8 + 4 * ::core::mem::size_of::<*const u8>()) + .cast::() = (0i32) as u8; + } + }; + } + } + } + } + *ptr249.add(2 * ::core::mem::size_of::<*const u8>()).cast::() = len259; + *ptr249.add(::core::mem::size_of::<*const u8>()).cast::<*mut u8>() = result259; + } + Err(e) => { + *ptr249.add(0).cast::() = (1i32) as u8; + let vec260 = (e.into_bytes()).into_boxed_slice(); + let ptr260 = vec260.as_ptr().cast::(); + let len260 = vec260.len(); + ::core::mem::forget(vec260); + *ptr249.add(2 * ::core::mem::size_of::<*const u8>()).cast::() = len260; + *ptr249.add(::core::mem::size_of::<*const u8>()).cast::<*mut u8>() = ptr260 + .cast_mut(); + } + }; + ptr249 +} +#[doc(hidden)] +#[allow(non_snake_case)] +pub unsafe fn __post_return_process_packet(arg0: *mut u8) { + let l0 = i32::from(*arg0.add(0).cast::()); + match l0 { + 0 => { + let l1 = *arg0.add(::core::mem::size_of::<*const u8>()).cast::<*mut u8>(); + let l2 = *arg0.add(2 * ::core::mem::size_of::<*const u8>()).cast::(); + let base9 = l1; + let len9 = l2; + for i in 0..len9 { + let base = base9.add(i * (32 + 4 * ::core::mem::size_of::<*const u8>())); + { + let l3 = i32::from(*base.add(0).cast::()); + match l3 { + 0 => {} + _ => { + let l4 = *base.add(8).cast::<*mut u8>(); + let l5 = *base + .add(8 + 1 * ::core::mem::size_of::<*const u8>()) + .cast::(); + _rt::cabi_dealloc(l4, l5, 1); + let l6 = *base + .add(8 + 2 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l7 = *base + .add(8 + 3 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let base8 = l6; + let len8 = l7; + _rt::cabi_dealloc(base8, len8 * 1, 1); + } + } + } + } + _rt::cabi_dealloc( + base9, + len9 * (32 + 4 * ::core::mem::size_of::<*const u8>()), + 8, + ); + } + _ => { + let l10 = *arg0.add(::core::mem::size_of::<*const u8>()).cast::<*mut u8>(); + let l11 = *arg0.add(2 * ::core::mem::size_of::<*const u8>()).cast::(); + _rt::cabi_dealloc(l10, l11, 1); + } + } +} +#[doc(hidden)] +#[allow(non_snake_case)] +pub unsafe fn _export_handle_timer_callback_cabi(arg0: *mut u8) -> *mut u8 { + #[cfg(target_arch = "wasm32")] _rt::run_ctors_once(); + let l0 = *arg0.add(0).cast::<*mut u8>(); + let l1 = *arg0.add(::core::mem::size_of::<*const u8>()).cast::(); + let len2 = l1; + let bytes2 = _rt::Vec::from_raw_parts(l0.cast(), len2, len2); + let l3 = *arg0.add(2 * ::core::mem::size_of::<*const u8>()).cast::<*mut u8>(); + let l4 = *arg0.add(3 * ::core::mem::size_of::<*const u8>()).cast::(); + let base160 = l3; + let len160 = l4; + let mut result160 = _rt::Vec::with_capacity(len160); + for i in 0..len160 { + let base = base160.add(i * (144 + 42 * ::core::mem::size_of::<*const u8>())); + let e160 = { + let l5 = *base.add(0).cast::<*mut u8>(); + let l6 = *base.add(::core::mem::size_of::<*const u8>()).cast::(); + let len7 = l6; + let bytes7 = _rt::Vec::from_raw_parts(l5.cast(), len7, len7); + let l8 = i32::from( + *base.add(2 * ::core::mem::size_of::<*const u8>()).cast::(), + ); + use wavs::types::service::Trigger as V43; + let v43 = match l8 { + 0 => { + let e43 = { + let l9 = *base + .add(8 + 2 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l10 = *base + .add(8 + 3 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len11 = l10; + let l12 = *base + .add(8 + 4 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l13 = *base + .add(8 + 5 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len14 = l13; + let bytes14 = _rt::Vec::from_raw_parts(l12.cast(), len14, len14); + let l15 = *base + .add(8 + 6 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l16 = *base + .add(8 + 7 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len17 = l16; + wavs::types::service::TriggerEvmContractEvent { + address: wavs::types::chain::EvmAddress { + raw_bytes: _rt::Vec::from_raw_parts(l9.cast(), len11, len11), + }, + chain: _rt::string_lift(bytes14), + event_hash: _rt::Vec::from_raw_parts( + l15.cast(), + len17, + len17, + ), + } + }; + V43::EvmContractEvent(e43) + } + 1 => { + let e43 = { + let l18 = *base + .add(8 + 2 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l19 = *base + .add(8 + 3 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len20 = l19; + let bytes20 = _rt::Vec::from_raw_parts(l18.cast(), len20, len20); + let l21 = *base + .add(8 + 4 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let l22 = *base + .add(8 + 5 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l23 = *base + .add(8 + 6 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len24 = l23; + let bytes24 = _rt::Vec::from_raw_parts(l22.cast(), len24, len24); + let l25 = *base + .add(8 + 7 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l26 = *base + .add(8 + 8 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len27 = l26; + let bytes27 = _rt::Vec::from_raw_parts(l25.cast(), len27, len27); + wavs::types::service::TriggerCosmosContractEvent { + address: wavs::types::chain::CosmosAddress { + bech32_addr: _rt::string_lift(bytes20), + prefix_len: l21 as u32, + }, + chain: _rt::string_lift(bytes24), + event_type: _rt::string_lift(bytes27), + } + }; + V43::CosmosContractEvent(e43) + } + 2 => { + let e43 = { + let l28 = *base + .add(8 + 2 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l29 = *base + .add(8 + 3 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len30 = l29; + let bytes30 = _rt::Vec::from_raw_parts(l28.cast(), len30, len30); + let l31 = *base + .add(8 + 4 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let l32 = i32::from( + *base + .add(16 + 4 * ::core::mem::size_of::<*const u8>()) + .cast::(), + ); + let l34 = i32::from( + *base + .add(32 + 4 * ::core::mem::size_of::<*const u8>()) + .cast::(), + ); + wavs::types::service::TriggerBlockInterval { + chain: _rt::string_lift(bytes30), + n_blocks: l31 as u32, + start_block: match l32 { + 0 => None, + 1 => { + let e = { + let l33 = *base + .add(24 + 4 * ::core::mem::size_of::<*const u8>()) + .cast::(); + l33 as u64 + }; + Some(e) + } + _ => _rt::invalid_enum_discriminant(), + }, + end_block: match l34 { + 0 => None, + 1 => { + let e = { + let l35 = *base + .add(40 + 4 * ::core::mem::size_of::<*const u8>()) + .cast::(); + l35 as u64 + }; + Some(e) + } + _ => _rt::invalid_enum_discriminant(), + }, + } + }; + V43::BlockInterval(e43) + } + 3 => { + let e43 = { + let l36 = *base + .add(8 + 2 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l37 = *base + .add(8 + 3 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len38 = l37; + let bytes38 = _rt::Vec::from_raw_parts(l36.cast(), len38, len38); + let l39 = i32::from( + *base + .add(8 + 4 * ::core::mem::size_of::<*const u8>()) + .cast::(), + ); + let l41 = i32::from( + *base + .add(24 + 4 * ::core::mem::size_of::<*const u8>()) + .cast::(), + ); + wavs::types::service::TriggerCron { + schedule: _rt::string_lift(bytes38), + start_time: match l39 { + 0 => None, + 1 => { + let e = { + let l40 = *base + .add(16 + 4 * ::core::mem::size_of::<*const u8>()) + .cast::(); + wavs::types::core::Timestamp { + nanos: l40 as u64, + } + }; + Some(e) + } + _ => _rt::invalid_enum_discriminant(), + }, + end_time: match l41 { + 0 => None, + 1 => { + let e = { + let l42 = *base + .add(32 + 4 * ::core::mem::size_of::<*const u8>()) + .cast::(); + wavs::types::core::Timestamp { + nanos: l42 as u64, + } + }; + Some(e) + } + _ => _rt::invalid_enum_discriminant(), + }, + } + }; + V43::Cron(e43) + } + n => { + debug_assert_eq!(n, 4, "invalid enum discriminant"); + V43::Manual + } + }; + let l44 = i32::from( + *base.add(48 + 4 * ::core::mem::size_of::<*const u8>()).cast::(), + ); + use wavs::types::service::ComponentSource as V68; + let v68 = match l44 { + 0 => { + let e68 = { + let l45 = *base + .add(48 + 5 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l46 = *base + .add(48 + 6 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len47 = l46; + let bytes47 = _rt::Vec::from_raw_parts(l45.cast(), len47, len47); + let l48 = *base + .add(48 + 7 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l49 = *base + .add(48 + 8 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len50 = l49; + let bytes50 = _rt::Vec::from_raw_parts(l48.cast(), len50, len50); + wavs::types::service::ComponentSourceDownload { + uri: _rt::string_lift(bytes47), + digest: _rt::string_lift(bytes50), + } + }; + V68::Download(e68) + } + 1 => { + let e68 = { + let l51 = *base + .add(48 + 5 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l52 = *base + .add(48 + 6 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len53 = l52; + let bytes53 = _rt::Vec::from_raw_parts(l51.cast(), len53, len53); + let l54 = i32::from( + *base + .add(48 + 7 * ::core::mem::size_of::<*const u8>()) + .cast::(), + ); + let l58 = i32::from( + *base + .add(48 + 10 * ::core::mem::size_of::<*const u8>()) + .cast::(), + ); + let l62 = *base + .add(48 + 13 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l63 = *base + .add(48 + 14 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len64 = l63; + let bytes64 = _rt::Vec::from_raw_parts(l62.cast(), len64, len64); + wavs::types::service::Registry { + digest: _rt::string_lift(bytes53), + domain: match l54 { + 0 => None, + 1 => { + let e = { + let l55 = *base + .add(48 + 8 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l56 = *base + .add(48 + 9 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len57 = l56; + let bytes57 = _rt::Vec::from_raw_parts( + l55.cast(), + len57, + len57, + ); + _rt::string_lift(bytes57) + }; + Some(e) + } + _ => _rt::invalid_enum_discriminant(), + }, + version: match l58 { + 0 => None, + 1 => { + let e = { + let l59 = *base + .add(48 + 11 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l60 = *base + .add(48 + 12 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len61 = l60; + let bytes61 = _rt::Vec::from_raw_parts( + l59.cast(), + len61, + len61, + ); + _rt::string_lift(bytes61) + }; + Some(e) + } + _ => _rt::invalid_enum_discriminant(), + }, + pkg: _rt::string_lift(bytes64), + } + }; + V68::Registry(e68) + } + n => { + debug_assert_eq!(n, 2, "invalid enum discriminant"); + let e68 = { + let l65 = *base + .add(48 + 5 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l66 = *base + .add(48 + 6 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len67 = l66; + let bytes67 = _rt::Vec::from_raw_parts(l65.cast(), len67, len67); + _rt::string_lift(bytes67) + }; + V68::Digest(e68) + } + }; + let l69 = i32::from( + *base.add(48 + 15 * ::core::mem::size_of::<*const u8>()).cast::(), + ); + use wavs::types::service::AllowedHostPermission as V76; + let v76 = match l69 { + 0 => V76::All, + 1 => { + let e76 = { + let l70 = *base + .add(48 + 16 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l71 = *base + .add(48 + 17 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let base75 = l70; + let len75 = l71; + let mut result75 = _rt::Vec::with_capacity(len75); + for i in 0..len75 { + let base = base75 + .add(i * (2 * ::core::mem::size_of::<*const u8>())); + let e75 = { + let l72 = *base.add(0).cast::<*mut u8>(); + let l73 = *base + .add(::core::mem::size_of::<*const u8>()) + .cast::(); + let len74 = l73; + let bytes74 = _rt::Vec::from_raw_parts( + l72.cast(), + len74, + len74, + ); + _rt::string_lift(bytes74) + }; + result75.push(e75); + } + _rt::cabi_dealloc( + base75, + len75 * (2 * ::core::mem::size_of::<*const u8>()), + ::core::mem::size_of::<*const u8>(), + ); + result75 + }; + V76::Only(e76) + } + n => { + debug_assert_eq!(n, 2, "invalid enum discriminant"); + V76::None + } + }; + let l77 = i32::from( + *base.add(48 + 18 * ::core::mem::size_of::<*const u8>()).cast::(), + ); + let l78 = i32::from( + *base.add(56 + 18 * ::core::mem::size_of::<*const u8>()).cast::(), + ); + let l80 = i32::from( + *base.add(72 + 18 * ::core::mem::size_of::<*const u8>()).cast::(), + ); + let l82 = *base + .add(88 + 18 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l83 = *base + .add(88 + 19 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let base90 = l82; + let len90 = l83; + let mut result90 = _rt::Vec::with_capacity(len90); + for i in 0..len90 { + let base = base90.add(i * (4 * ::core::mem::size_of::<*const u8>())); + let e90 = { + let l84 = *base.add(0).cast::<*mut u8>(); + let l85 = *base + .add(::core::mem::size_of::<*const u8>()) + .cast::(); + let len86 = l85; + let bytes86 = _rt::Vec::from_raw_parts(l84.cast(), len86, len86); + let l87 = *base + .add(2 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l88 = *base + .add(3 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len89 = l88; + let bytes89 = _rt::Vec::from_raw_parts(l87.cast(), len89, len89); + (_rt::string_lift(bytes86), _rt::string_lift(bytes89)) + }; + result90.push(e90); + } + _rt::cabi_dealloc( + base90, + len90 * (4 * ::core::mem::size_of::<*const u8>()), + ::core::mem::size_of::<*const u8>(), + ); + let l91 = *base + .add(88 + 20 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l92 = *base + .add(88 + 21 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let base96 = l91; + let len96 = l92; + let mut result96 = _rt::Vec::with_capacity(len96); + for i in 0..len96 { + let base = base96.add(i * (2 * ::core::mem::size_of::<*const u8>())); + let e96 = { + let l93 = *base.add(0).cast::<*mut u8>(); + let l94 = *base + .add(::core::mem::size_of::<*const u8>()) + .cast::(); + let len95 = l94; + let bytes95 = _rt::Vec::from_raw_parts(l93.cast(), len95, len95); + _rt::string_lift(bytes95) + }; + result96.push(e96); + } + _rt::cabi_dealloc( + base96, + len96 * (2 * ::core::mem::size_of::<*const u8>()), + ::core::mem::size_of::<*const u8>(), + ); + let l97 = i32::from( + *base.add(88 + 22 * ::core::mem::size_of::<*const u8>()).cast::(), + ); + use wavs::types::service::Submit as V159; + let v159 = match l97 { + 0 => V159::None, + n => { + debug_assert_eq!(n, 1, "invalid enum discriminant"); + let e159 = { + let l98 = *base + .add(96 + 22 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l99 = *base + .add(96 + 23 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len100 = l99; + let bytes100 = _rt::Vec::from_raw_parts( + l98.cast(), + len100, + len100, + ); + let l101 = i32::from( + *base + .add(96 + 24 * ::core::mem::size_of::<*const u8>()) + .cast::(), + ); + use wavs::types::service::ComponentSource as V125; + let v125 = match l101 { + 0 => { + let e125 = { + let l102 = *base + .add(96 + 25 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l103 = *base + .add(96 + 26 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len104 = l103; + let bytes104 = _rt::Vec::from_raw_parts( + l102.cast(), + len104, + len104, + ); + let l105 = *base + .add(96 + 27 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l106 = *base + .add(96 + 28 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len107 = l106; + let bytes107 = _rt::Vec::from_raw_parts( + l105.cast(), + len107, + len107, + ); + wavs::types::service::ComponentSourceDownload { + uri: _rt::string_lift(bytes104), + digest: _rt::string_lift(bytes107), + } + }; + V125::Download(e125) + } + 1 => { + let e125 = { + let l108 = *base + .add(96 + 25 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l109 = *base + .add(96 + 26 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len110 = l109; + let bytes110 = _rt::Vec::from_raw_parts( + l108.cast(), + len110, + len110, + ); + let l111 = i32::from( + *base + .add(96 + 27 * ::core::mem::size_of::<*const u8>()) + .cast::(), + ); + let l115 = i32::from( + *base + .add(96 + 30 * ::core::mem::size_of::<*const u8>()) + .cast::(), + ); + let l119 = *base + .add(96 + 33 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l120 = *base + .add(96 + 34 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len121 = l120; + let bytes121 = _rt::Vec::from_raw_parts( + l119.cast(), + len121, + len121, + ); + wavs::types::service::Registry { + digest: _rt::string_lift(bytes110), + domain: match l111 { + 0 => None, + 1 => { + let e = { + let l112 = *base + .add(96 + 28 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l113 = *base + .add(96 + 29 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len114 = l113; + let bytes114 = _rt::Vec::from_raw_parts( + l112.cast(), + len114, + len114, + ); + _rt::string_lift(bytes114) + }; + Some(e) + } + _ => _rt::invalid_enum_discriminant(), + }, + version: match l115 { + 0 => None, + 1 => { + let e = { + let l116 = *base + .add(96 + 31 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l117 = *base + .add(96 + 32 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len118 = l117; + let bytes118 = _rt::Vec::from_raw_parts( + l116.cast(), + len118, + len118, + ); + _rt::string_lift(bytes118) + }; + Some(e) + } + _ => _rt::invalid_enum_discriminant(), + }, + pkg: _rt::string_lift(bytes121), + } + }; + V125::Registry(e125) + } + n => { + debug_assert_eq!(n, 2, "invalid enum discriminant"); + let e125 = { + let l122 = *base + .add(96 + 25 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l123 = *base + .add(96 + 26 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len124 = l123; + let bytes124 = _rt::Vec::from_raw_parts( + l122.cast(), + len124, + len124, + ); + _rt::string_lift(bytes124) + }; + V125::Digest(e125) + } + }; + let l126 = i32::from( + *base + .add(96 + 35 * ::core::mem::size_of::<*const u8>()) + .cast::(), + ); + use wavs::types::service::AllowedHostPermission as V133; + let v133 = match l126 { + 0 => V133::All, + 1 => { + let e133 = { + let l127 = *base + .add(96 + 36 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l128 = *base + .add(96 + 37 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let base132 = l127; + let len132 = l128; + let mut result132 = _rt::Vec::with_capacity(len132); + for i in 0..len132 { + let base = base132 + .add(i * (2 * ::core::mem::size_of::<*const u8>())); + let e132 = { + let l129 = *base.add(0).cast::<*mut u8>(); + let l130 = *base + .add(::core::mem::size_of::<*const u8>()) + .cast::(); + let len131 = l130; + let bytes131 = _rt::Vec::from_raw_parts( + l129.cast(), + len131, + len131, + ); + _rt::string_lift(bytes131) + }; + result132.push(e132); + } + _rt::cabi_dealloc( + base132, + len132 * (2 * ::core::mem::size_of::<*const u8>()), + ::core::mem::size_of::<*const u8>(), + ); + result132 + }; + V133::Only(e133) + } + n => { + debug_assert_eq!(n, 2, "invalid enum discriminant"); + V133::None + } + }; + let l134 = i32::from( + *base + .add(96 + 38 * ::core::mem::size_of::<*const u8>()) + .cast::(), + ); + let l135 = i32::from( + *base + .add(104 + 38 * ::core::mem::size_of::<*const u8>()) + .cast::(), + ); + let l137 = i32::from( + *base + .add(120 + 38 * ::core::mem::size_of::<*const u8>()) + .cast::(), + ); + let l139 = *base + .add(136 + 38 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l140 = *base + .add(136 + 39 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let base147 = l139; + let len147 = l140; + let mut result147 = _rt::Vec::with_capacity(len147); + for i in 0..len147 { + let base = base147 + .add(i * (4 * ::core::mem::size_of::<*const u8>())); + let e147 = { + let l141 = *base.add(0).cast::<*mut u8>(); + let l142 = *base + .add(::core::mem::size_of::<*const u8>()) + .cast::(); + let len143 = l142; + let bytes143 = _rt::Vec::from_raw_parts( + l141.cast(), + len143, + len143, + ); + let l144 = *base + .add(2 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l145 = *base + .add(3 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len146 = l145; + let bytes146 = _rt::Vec::from_raw_parts( + l144.cast(), + len146, + len146, + ); + (_rt::string_lift(bytes143), _rt::string_lift(bytes146)) + }; + result147.push(e147); + } + _rt::cabi_dealloc( + base147, + len147 * (4 * ::core::mem::size_of::<*const u8>()), + ::core::mem::size_of::<*const u8>(), + ); + let l148 = *base + .add(136 + 40 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l149 = *base + .add(136 + 41 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let base153 = l148; + let len153 = l149; + let mut result153 = _rt::Vec::with_capacity(len153); + for i in 0..len153 { + let base = base153 + .add(i * (2 * ::core::mem::size_of::<*const u8>())); + let e153 = { + let l150 = *base.add(0).cast::<*mut u8>(); + let l151 = *base + .add(::core::mem::size_of::<*const u8>()) + .cast::(); + let len152 = l151; + let bytes152 = _rt::Vec::from_raw_parts( + l150.cast(), + len152, + len152, + ); + _rt::string_lift(bytes152) + }; + result153.push(e153); + } + _rt::cabi_dealloc( + base153, + len153 * (2 * ::core::mem::size_of::<*const u8>()), + ::core::mem::size_of::<*const u8>(), + ); + let l154 = i32::from( + *base + .add(136 + 42 * ::core::mem::size_of::<*const u8>()) + .cast::(), + ); + use wavs::types::service::SignatureAlgorithm as V155; + let v155 = match l154 { + n => { + debug_assert_eq!(n, 0, "invalid enum discriminant"); + V155::Secp256k1 + } + }; + let l156 = i32::from( + *base + .add(137 + 42 * ::core::mem::size_of::<*const u8>()) + .cast::(), + ); + wavs::types::service::AggregatorSubmit { + url: _rt::string_lift(bytes100), + component: wavs::types::service::Component { + source: v125, + permissions: wavs::types::service::Permissions { + allowed_http_hosts: v133, + file_system: _rt::bool_lift(l134 as u8), + }, + fuel_limit: match l135 { + 0 => None, + 1 => { + let e = { + let l136 = *base + .add(112 + 38 * ::core::mem::size_of::<*const u8>()) + .cast::(); + l136 as u64 + }; + Some(e) + } + _ => _rt::invalid_enum_discriminant(), + }, + time_limit_seconds: match l137 { + 0 => None, + 1 => { + let e = { + let l138 = *base + .add(128 + 38 * ::core::mem::size_of::<*const u8>()) + .cast::(); + l138 as u64 + }; + Some(e) + } + _ => _rt::invalid_enum_discriminant(), + }, + config: result147, + env_keys: result153, + }, + signature_kind: wavs::types::service::SignatureKind { + algorithm: v155, + prefix: match l156 { + 0 => None, + 1 => { + let e = { + let l157 = i32::from( + *base + .add(138 + 42 * ::core::mem::size_of::<*const u8>()) + .cast::(), + ); + use wavs::types::service::SignaturePrefix as V158; + let v158 = match l157 { + n => { + debug_assert_eq!(n, 0, "invalid enum discriminant"); + V158::Eip191 + } + }; + v158 + }; + Some(e) + } + _ => _rt::invalid_enum_discriminant(), + }, + }, + } + }; + V159::Aggregator(e159) + } + }; + ( + _rt::string_lift(bytes7), + wavs::types::service::Workflow { + trigger: v43, + component: wavs::types::service::Component { + source: v68, + permissions: wavs::types::service::Permissions { + allowed_http_hosts: v76, + file_system: _rt::bool_lift(l77 as u8), + }, + fuel_limit: match l78 { + 0 => None, + 1 => { + let e = { + let l79 = *base + .add(64 + 18 * ::core::mem::size_of::<*const u8>()) + .cast::(); + l79 as u64 + }; + Some(e) + } + _ => _rt::invalid_enum_discriminant(), + }, + time_limit_seconds: match l80 { + 0 => None, + 1 => { + let e = { + let l81 = *base + .add(80 + 18 * ::core::mem::size_of::<*const u8>()) + .cast::(); + l81 as u64 + }; + Some(e) + } + _ => _rt::invalid_enum_discriminant(), + }, + config: result90, + env_keys: result96, + }, + submit: v159, + }, + ) + }; + result160.push(e160); + } + _rt::cabi_dealloc( + base160, + len160 * (144 + 42 * ::core::mem::size_of::<*const u8>()), + 8, + ); + let l161 = i32::from( + *arg0.add(4 * ::core::mem::size_of::<*const u8>()).cast::(), + ); + use wavs::types::service::ServiceStatus as V162; + let v162 = match l161 { + 0 => V162::Active, + n => { + debug_assert_eq!(n, 1, "invalid enum discriminant"); + V162::Paused + } + }; + let l163 = i32::from( + *arg0.add(5 * ::core::mem::size_of::<*const u8>()).cast::(), + ); + use wavs::types::service::ServiceManager as V170; + let v170 = match l163 { + n => { + debug_assert_eq!(n, 0, "invalid enum discriminant"); + let e170 = { + let l164 = *arg0 + .add(6 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l165 = *arg0 + .add(7 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len166 = l165; + let bytes166 = _rt::Vec::from_raw_parts(l164.cast(), len166, len166); + let l167 = *arg0 + .add(8 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l168 = *arg0 + .add(9 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len169 = l168; + wavs::types::service::EvmManager { + chain: _rt::string_lift(bytes166), + address: wavs::types::chain::EvmAddress { + raw_bytes: _rt::Vec::from_raw_parts(l167.cast(), len169, len169), + }, + } + }; + V170::Evm(e170) + } + }; + let l171 = *arg0.add(10 * ::core::mem::size_of::<*const u8>()).cast::<*mut u8>(); + let l172 = *arg0.add(11 * ::core::mem::size_of::<*const u8>()).cast::(); + let len173 = l172; + let bytes173 = _rt::Vec::from_raw_parts(l171.cast(), len173, len173); + let l174 = *arg0.add(12 * ::core::mem::size_of::<*const u8>()).cast::<*mut u8>(); + let l175 = *arg0.add(13 * ::core::mem::size_of::<*const u8>()).cast::(); + let len176 = l175; + let l177 = *arg0.add(14 * ::core::mem::size_of::<*const u8>()).cast::<*mut u8>(); + let l178 = *arg0.add(15 * ::core::mem::size_of::<*const u8>()).cast::(); + let len179 = l178; + let l180 = *arg0.add(16 * ::core::mem::size_of::<*const u8>()).cast::<*mut u8>(); + let l181 = *arg0.add(17 * ::core::mem::size_of::<*const u8>()).cast::(); + let len182 = l181; + let l183 = *arg0.add(18 * ::core::mem::size_of::<*const u8>()).cast::<*mut u8>(); + let l184 = *arg0.add(19 * ::core::mem::size_of::<*const u8>()).cast::(); + let len185 = l184; + let l186 = i32::from( + *arg0.add(20 * ::core::mem::size_of::<*const u8>()).cast::(), + ); + use wavs::types::service::SignatureAlgorithm as V187; + let v187 = match l186 { + n => { + debug_assert_eq!(n, 0, "invalid enum discriminant"); + V187::Secp256k1 + } + }; + let l188 = i32::from( + *arg0.add(1 + 20 * ::core::mem::size_of::<*const u8>()).cast::(), + ); + let l191 = i32::from( + *arg0.add(8 + 20 * ::core::mem::size_of::<*const u8>()).cast::(), + ); + use wavs::types::events::TriggerData as V247; + let v247 = match l191 { + 0 => { + let e247 = { + let l192 = *arg0 + .add(16 + 20 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l193 = *arg0 + .add(16 + 21 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len194 = l193; + let bytes194 = _rt::Vec::from_raw_parts(l192.cast(), len194, len194); + let l195 = *arg0 + .add(16 + 22 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l196 = *arg0 + .add(16 + 23 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len197 = l196; + let l198 = *arg0 + .add(16 + 24 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l199 = *arg0 + .add(16 + 25 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let base203 = l198; + let len203 = l199; + let mut result203 = _rt::Vec::with_capacity(len203); + for i in 0..len203 { + let base = base203 + .add(i * (2 * ::core::mem::size_of::<*const u8>())); + let e203 = { + let l200 = *base.add(0).cast::<*mut u8>(); + let l201 = *base + .add(::core::mem::size_of::<*const u8>()) + .cast::(); + let len202 = l201; + _rt::Vec::from_raw_parts(l200.cast(), len202, len202) + }; + result203.push(e203); + } + _rt::cabi_dealloc( + base203, + len203 * (2 * ::core::mem::size_of::<*const u8>()), + ::core::mem::size_of::<*const u8>(), + ); + let l204 = *arg0 + .add(16 + 26 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l205 = *arg0 + .add(16 + 27 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len206 = l205; + let l207 = *arg0 + .add(16 + 28 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l208 = *arg0 + .add(16 + 29 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len209 = l208; + let l210 = *arg0 + .add(16 + 30 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let l211 = *arg0 + .add(24 + 30 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let l212 = *arg0 + .add(32 + 30 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l213 = *arg0 + .add(32 + 31 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len214 = l213; + let l215 = i32::from( + *arg0.add(32 + 32 * ::core::mem::size_of::<*const u8>()).cast::(), + ); + let l217 = *arg0 + .add(48 + 32 * ::core::mem::size_of::<*const u8>()) + .cast::(); + wavs::types::events::TriggerDataEvmContractEvent { + chain: _rt::string_lift(bytes194), + log: wavs::types::chain::EvmEventLog { + address: wavs::types::chain::EvmAddress { + raw_bytes: _rt::Vec::from_raw_parts( + l195.cast(), + len197, + len197, + ), + }, + data: wavs::types::chain::EvmEventLogData { + topics: result203, + data: _rt::Vec::from_raw_parts(l204.cast(), len206, len206), + }, + tx_hash: _rt::Vec::from_raw_parts(l207.cast(), len209, len209), + block_number: l210 as u64, + log_index: l211 as u64, + block_hash: _rt::Vec::from_raw_parts( + l212.cast(), + len214, + len214, + ), + block_timestamp: match l215 { + 0 => None, + 1 => { + let e = { + let l216 = *arg0 + .add(40 + 32 * ::core::mem::size_of::<*const u8>()) + .cast::(); + l216 as u64 + }; + Some(e) + } + _ => _rt::invalid_enum_discriminant(), + }, + tx_index: l217 as u64, + }, + } + }; + V247::EvmContractEvent(e247) + } + 1 => { + let e247 = { + let l218 = *arg0 + .add(16 + 20 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l219 = *arg0 + .add(16 + 21 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len220 = l219; + let bytes220 = _rt::Vec::from_raw_parts(l218.cast(), len220, len220); + let l221 = *arg0 + .add(16 + 22 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let l222 = *arg0 + .add(16 + 23 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l223 = *arg0 + .add(16 + 24 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len224 = l223; + let bytes224 = _rt::Vec::from_raw_parts(l222.cast(), len224, len224); + let l225 = *arg0 + .add(16 + 25 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l226 = *arg0 + .add(16 + 26 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len227 = l226; + let bytes227 = _rt::Vec::from_raw_parts(l225.cast(), len227, len227); + let l228 = *arg0 + .add(16 + 27 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l229 = *arg0 + .add(16 + 28 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let base236 = l228; + let len236 = l229; + let mut result236 = _rt::Vec::with_capacity(len236); + for i in 0..len236 { + let base = base236 + .add(i * (4 * ::core::mem::size_of::<*const u8>())); + let e236 = { + let l230 = *base.add(0).cast::<*mut u8>(); + let l231 = *base + .add(::core::mem::size_of::<*const u8>()) + .cast::(); + let len232 = l231; + let bytes232 = _rt::Vec::from_raw_parts( + l230.cast(), + len232, + len232, + ); + let l233 = *base + .add(2 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l234 = *base + .add(3 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len235 = l234; + let bytes235 = _rt::Vec::from_raw_parts( + l233.cast(), + len235, + len235, + ); + (_rt::string_lift(bytes232), _rt::string_lift(bytes235)) + }; + result236.push(e236); + } + _rt::cabi_dealloc( + base236, + len236 * (4 * ::core::mem::size_of::<*const u8>()), + ::core::mem::size_of::<*const u8>(), + ); + let l237 = *arg0 + .add(24 + 28 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let l238 = *arg0 + .add(32 + 28 * ::core::mem::size_of::<*const u8>()) + .cast::(); + wavs::types::events::TriggerDataCosmosContractEvent { + contract_address: wavs::types::chain::CosmosAddress { + bech32_addr: _rt::string_lift(bytes220), + prefix_len: l221 as u32, + }, + chain: _rt::string_lift(bytes224), + event: wavs::types::chain::CosmosEvent { + ty: _rt::string_lift(bytes227), + attributes: result236, + }, + event_index: l237 as u64, + block_height: l238 as u64, + } + }; + V247::CosmosContractEvent(e247) + } + 2 => { + let e247 = { + let l239 = *arg0 + .add(16 + 20 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l240 = *arg0 + .add(16 + 21 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len241 = l240; + let bytes241 = _rt::Vec::from_raw_parts(l239.cast(), len241, len241); + let l242 = *arg0 + .add(16 + 22 * ::core::mem::size_of::<*const u8>()) + .cast::(); + wavs::types::events::TriggerDataBlockInterval { + chain: _rt::string_lift(bytes241), + block_height: l242 as u64, + } + }; + V247::BlockInterval(e247) + } + 3 => { + let e247 = { + let l243 = *arg0 + .add(16 + 20 * ::core::mem::size_of::<*const u8>()) + .cast::(); + wavs::types::events::TriggerDataCron { + trigger_time: wavs::types::core::Timestamp { + nanos: l243 as u64, + }, + } + }; + V247::Cron(e247) + } + n => { + debug_assert_eq!(n, 4, "invalid enum discriminant"); + let e247 = { + let l244 = *arg0 + .add(16 + 20 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l245 = *arg0 + .add(16 + 21 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len246 = l245; + _rt::Vec::from_raw_parts(l244.cast(), len246, len246) + }; + V247::Raw(e247) + } + }; + let result248 = T::handle_timer_callback(wavs::aggregator::aggregator::Packet { + service: wavs::types::service::Service { + name: _rt::string_lift(bytes2), + workflows: result160, + status: v162, + manager: v170, + }, + workflow_id: _rt::string_lift(bytes173), + envelope: wavs::aggregator::aggregator::Envelope { + event_id: _rt::Vec::from_raw_parts(l174.cast(), len176, len176), + ordering: _rt::Vec::from_raw_parts(l177.cast(), len179, len179), + payload: _rt::Vec::from_raw_parts(l180.cast(), len182, len182), + }, + signature: wavs::aggregator::aggregator::EnvelopeSignature { + data: _rt::Vec::from_raw_parts(l183.cast(), len185, len185), + kind: wavs::types::service::SignatureKind { + algorithm: v187, + prefix: match l188 { + 0 => None, + 1 => { + let e = { + let l189 = i32::from( + *arg0 + .add(2 + 20 * ::core::mem::size_of::<*const u8>()) + .cast::(), + ); + use wavs::types::service::SignaturePrefix as V190; + let v190 = match l189 { + n => { + debug_assert_eq!(n, 0, "invalid enum discriminant"); + V190::Eip191 + } + }; + v190 + }; + Some(e) + } + _ => _rt::invalid_enum_discriminant(), + }, + }, + }, + trigger_data: v247, + }); + _rt::cabi_dealloc(arg0, 56 + 32 * ::core::mem::size_of::<*const u8>(), 8); + let ptr249 = (&raw mut _RET_AREA.0).cast::(); + match result248 { + Ok(e) => { + *ptr249.add(0).cast::() = (0i32) as u8; + let vec259 = e; + let len259 = vec259.len(); + let layout259 = _rt::alloc::Layout::from_size_align_unchecked( + vec259.len() * (32 + 4 * ::core::mem::size_of::<*const u8>()), + 8, + ); + let result259 = if layout259.size() != 0 { + let ptr = _rt::alloc::alloc(layout259).cast::(); + if ptr.is_null() { + _rt::alloc::handle_alloc_error(layout259); + } + ptr + } else { + ::core::ptr::null_mut() + }; + for (i, e) in vec259.into_iter().enumerate() { + let base = result259 + .add(i * (32 + 4 * ::core::mem::size_of::<*const u8>())); + { + use wavs::aggregator::aggregator::AggregatorAction as V258; + match e { + V258::Timer(e) => { + *base.add(0).cast::() = (0i32) as u8; + let wavs::aggregator::aggregator::TimerAction { + delay: delay250, + } = e; + let wavs::types::core::Duration { secs: secs251 } = delay250; + *base.add(8).cast::() = _rt::as_i64(secs251); + } + V258::Submit(e) => { + *base.add(0).cast::() = (1i32) as u8; + let wavs::aggregator::aggregator::SubmitAction { + chain: chain252, + contract_address: contract_address252, + gas_price: gas_price252, + } = e; + let vec253 = (chain252.into_bytes()).into_boxed_slice(); + let ptr253 = vec253.as_ptr().cast::(); + let len253 = vec253.len(); + ::core::mem::forget(vec253); + *base + .add(8 + 1 * ::core::mem::size_of::<*const u8>()) + .cast::() = len253; + *base.add(8).cast::<*mut u8>() = ptr253.cast_mut(); + let wavs::types::chain::EvmAddress { + raw_bytes: raw_bytes254, + } = contract_address252; + let vec255 = (raw_bytes254).into_boxed_slice(); + let ptr255 = vec255.as_ptr().cast::(); + let len255 = vec255.len(); + ::core::mem::forget(vec255); + *base + .add(8 + 3 * ::core::mem::size_of::<*const u8>()) + .cast::() = len255; + *base + .add(8 + 2 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>() = ptr255.cast_mut(); + match gas_price252 { + Some(e) => { + *base + .add(8 + 4 * ::core::mem::size_of::<*const u8>()) + .cast::() = (1i32) as u8; + let wavs::types::core::U128 { value: value256 } = e; + let (t257_0, t257_1) = value256; + *base + .add(16 + 4 * ::core::mem::size_of::<*const u8>()) + .cast::() = _rt::as_i64(t257_0); + *base + .add(24 + 4 * ::core::mem::size_of::<*const u8>()) + .cast::() = _rt::as_i64(t257_1); + } + None => { + *base + .add(8 + 4 * ::core::mem::size_of::<*const u8>()) + .cast::() = (0i32) as u8; + } + }; + } + } + } + } + *ptr249.add(2 * ::core::mem::size_of::<*const u8>()).cast::() = len259; + *ptr249.add(::core::mem::size_of::<*const u8>()).cast::<*mut u8>() = result259; + } + Err(e) => { + *ptr249.add(0).cast::() = (1i32) as u8; + let vec260 = (e.into_bytes()).into_boxed_slice(); + let ptr260 = vec260.as_ptr().cast::(); + let len260 = vec260.len(); + ::core::mem::forget(vec260); + *ptr249.add(2 * ::core::mem::size_of::<*const u8>()).cast::() = len260; + *ptr249.add(::core::mem::size_of::<*const u8>()).cast::<*mut u8>() = ptr260 + .cast_mut(); + } + }; + ptr249 +} +#[doc(hidden)] +#[allow(non_snake_case)] +pub unsafe fn __post_return_handle_timer_callback(arg0: *mut u8) { + let l0 = i32::from(*arg0.add(0).cast::()); + match l0 { + 0 => { + let l1 = *arg0.add(::core::mem::size_of::<*const u8>()).cast::<*mut u8>(); + let l2 = *arg0.add(2 * ::core::mem::size_of::<*const u8>()).cast::(); + let base9 = l1; + let len9 = l2; + for i in 0..len9 { + let base = base9.add(i * (32 + 4 * ::core::mem::size_of::<*const u8>())); + { + let l3 = i32::from(*base.add(0).cast::()); + match l3 { + 0 => {} + _ => { + let l4 = *base.add(8).cast::<*mut u8>(); + let l5 = *base + .add(8 + 1 * ::core::mem::size_of::<*const u8>()) + .cast::(); + _rt::cabi_dealloc(l4, l5, 1); + let l6 = *base + .add(8 + 2 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l7 = *base + .add(8 + 3 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let base8 = l6; + let len8 = l7; + _rt::cabi_dealloc(base8, len8 * 1, 1); + } + } + } + } + _rt::cabi_dealloc( + base9, + len9 * (32 + 4 * ::core::mem::size_of::<*const u8>()), + 8, + ); + } + _ => { + let l10 = *arg0.add(::core::mem::size_of::<*const u8>()).cast::<*mut u8>(); + let l11 = *arg0.add(2 * ::core::mem::size_of::<*const u8>()).cast::(); + _rt::cabi_dealloc(l10, l11, 1); + } + } +} +#[doc(hidden)] +#[allow(non_snake_case)] +pub unsafe fn _export_handle_submit_callback_cabi(arg0: *mut u8) -> *mut u8 { + #[cfg(target_arch = "wasm32")] _rt::run_ctors_once(); + let l0 = *arg0.add(0).cast::<*mut u8>(); + let l1 = *arg0.add(::core::mem::size_of::<*const u8>()).cast::(); + let len2 = l1; + let bytes2 = _rt::Vec::from_raw_parts(l0.cast(), len2, len2); + let l3 = *arg0.add(2 * ::core::mem::size_of::<*const u8>()).cast::<*mut u8>(); + let l4 = *arg0.add(3 * ::core::mem::size_of::<*const u8>()).cast::(); + let base160 = l3; + let len160 = l4; + let mut result160 = _rt::Vec::with_capacity(len160); + for i in 0..len160 { + let base = base160.add(i * (144 + 42 * ::core::mem::size_of::<*const u8>())); + let e160 = { + let l5 = *base.add(0).cast::<*mut u8>(); + let l6 = *base.add(::core::mem::size_of::<*const u8>()).cast::(); + let len7 = l6; + let bytes7 = _rt::Vec::from_raw_parts(l5.cast(), len7, len7); + let l8 = i32::from( + *base.add(2 * ::core::mem::size_of::<*const u8>()).cast::(), + ); + use wavs::types::service::Trigger as V43; + let v43 = match l8 { + 0 => { + let e43 = { + let l9 = *base + .add(8 + 2 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l10 = *base + .add(8 + 3 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len11 = l10; + let l12 = *base + .add(8 + 4 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l13 = *base + .add(8 + 5 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len14 = l13; + let bytes14 = _rt::Vec::from_raw_parts(l12.cast(), len14, len14); + let l15 = *base + .add(8 + 6 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l16 = *base + .add(8 + 7 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len17 = l16; + wavs::types::service::TriggerEvmContractEvent { + address: wavs::types::chain::EvmAddress { + raw_bytes: _rt::Vec::from_raw_parts(l9.cast(), len11, len11), + }, + chain: _rt::string_lift(bytes14), + event_hash: _rt::Vec::from_raw_parts( + l15.cast(), + len17, + len17, + ), + } + }; + V43::EvmContractEvent(e43) + } + 1 => { + let e43 = { + let l18 = *base + .add(8 + 2 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l19 = *base + .add(8 + 3 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len20 = l19; + let bytes20 = _rt::Vec::from_raw_parts(l18.cast(), len20, len20); + let l21 = *base + .add(8 + 4 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let l22 = *base + .add(8 + 5 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l23 = *base + .add(8 + 6 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len24 = l23; + let bytes24 = _rt::Vec::from_raw_parts(l22.cast(), len24, len24); + let l25 = *base + .add(8 + 7 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l26 = *base + .add(8 + 8 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len27 = l26; + let bytes27 = _rt::Vec::from_raw_parts(l25.cast(), len27, len27); + wavs::types::service::TriggerCosmosContractEvent { + address: wavs::types::chain::CosmosAddress { + bech32_addr: _rt::string_lift(bytes20), + prefix_len: l21 as u32, + }, + chain: _rt::string_lift(bytes24), + event_type: _rt::string_lift(bytes27), + } + }; + V43::CosmosContractEvent(e43) + } + 2 => { + let e43 = { + let l28 = *base + .add(8 + 2 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l29 = *base + .add(8 + 3 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len30 = l29; + let bytes30 = _rt::Vec::from_raw_parts(l28.cast(), len30, len30); + let l31 = *base + .add(8 + 4 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let l32 = i32::from( + *base + .add(16 + 4 * ::core::mem::size_of::<*const u8>()) + .cast::(), + ); + let l34 = i32::from( + *base + .add(32 + 4 * ::core::mem::size_of::<*const u8>()) + .cast::(), + ); + wavs::types::service::TriggerBlockInterval { + chain: _rt::string_lift(bytes30), + n_blocks: l31 as u32, + start_block: match l32 { + 0 => None, + 1 => { + let e = { + let l33 = *base + .add(24 + 4 * ::core::mem::size_of::<*const u8>()) + .cast::(); + l33 as u64 + }; + Some(e) + } + _ => _rt::invalid_enum_discriminant(), + }, + end_block: match l34 { + 0 => None, + 1 => { + let e = { + let l35 = *base + .add(40 + 4 * ::core::mem::size_of::<*const u8>()) + .cast::(); + l35 as u64 + }; + Some(e) + } + _ => _rt::invalid_enum_discriminant(), + }, + } + }; + V43::BlockInterval(e43) + } + 3 => { + let e43 = { + let l36 = *base + .add(8 + 2 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l37 = *base + .add(8 + 3 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len38 = l37; + let bytes38 = _rt::Vec::from_raw_parts(l36.cast(), len38, len38); + let l39 = i32::from( + *base + .add(8 + 4 * ::core::mem::size_of::<*const u8>()) + .cast::(), + ); + let l41 = i32::from( + *base + .add(24 + 4 * ::core::mem::size_of::<*const u8>()) + .cast::(), + ); + wavs::types::service::TriggerCron { + schedule: _rt::string_lift(bytes38), + start_time: match l39 { + 0 => None, + 1 => { + let e = { + let l40 = *base + .add(16 + 4 * ::core::mem::size_of::<*const u8>()) + .cast::(); + wavs::types::core::Timestamp { + nanos: l40 as u64, + } + }; + Some(e) + } + _ => _rt::invalid_enum_discriminant(), + }, + end_time: match l41 { + 0 => None, + 1 => { + let e = { + let l42 = *base + .add(32 + 4 * ::core::mem::size_of::<*const u8>()) + .cast::(); + wavs::types::core::Timestamp { + nanos: l42 as u64, + } + }; + Some(e) + } + _ => _rt::invalid_enum_discriminant(), + }, + } + }; + V43::Cron(e43) + } + n => { + debug_assert_eq!(n, 4, "invalid enum discriminant"); + V43::Manual + } + }; + let l44 = i32::from( + *base.add(48 + 4 * ::core::mem::size_of::<*const u8>()).cast::(), + ); + use wavs::types::service::ComponentSource as V68; + let v68 = match l44 { + 0 => { + let e68 = { + let l45 = *base + .add(48 + 5 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l46 = *base + .add(48 + 6 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len47 = l46; + let bytes47 = _rt::Vec::from_raw_parts(l45.cast(), len47, len47); + let l48 = *base + .add(48 + 7 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l49 = *base + .add(48 + 8 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len50 = l49; + let bytes50 = _rt::Vec::from_raw_parts(l48.cast(), len50, len50); + wavs::types::service::ComponentSourceDownload { + uri: _rt::string_lift(bytes47), + digest: _rt::string_lift(bytes50), + } + }; + V68::Download(e68) + } + 1 => { + let e68 = { + let l51 = *base + .add(48 + 5 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l52 = *base + .add(48 + 6 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len53 = l52; + let bytes53 = _rt::Vec::from_raw_parts(l51.cast(), len53, len53); + let l54 = i32::from( + *base + .add(48 + 7 * ::core::mem::size_of::<*const u8>()) + .cast::(), + ); + let l58 = i32::from( + *base + .add(48 + 10 * ::core::mem::size_of::<*const u8>()) + .cast::(), + ); + let l62 = *base + .add(48 + 13 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l63 = *base + .add(48 + 14 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len64 = l63; + let bytes64 = _rt::Vec::from_raw_parts(l62.cast(), len64, len64); + wavs::types::service::Registry { + digest: _rt::string_lift(bytes53), + domain: match l54 { + 0 => None, + 1 => { + let e = { + let l55 = *base + .add(48 + 8 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l56 = *base + .add(48 + 9 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len57 = l56; + let bytes57 = _rt::Vec::from_raw_parts( + l55.cast(), + len57, + len57, + ); + _rt::string_lift(bytes57) + }; + Some(e) + } + _ => _rt::invalid_enum_discriminant(), + }, + version: match l58 { + 0 => None, + 1 => { + let e = { + let l59 = *base + .add(48 + 11 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l60 = *base + .add(48 + 12 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len61 = l60; + let bytes61 = _rt::Vec::from_raw_parts( + l59.cast(), + len61, + len61, + ); + _rt::string_lift(bytes61) + }; + Some(e) + } + _ => _rt::invalid_enum_discriminant(), + }, + pkg: _rt::string_lift(bytes64), + } + }; + V68::Registry(e68) + } + n => { + debug_assert_eq!(n, 2, "invalid enum discriminant"); + let e68 = { + let l65 = *base + .add(48 + 5 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l66 = *base + .add(48 + 6 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len67 = l66; + let bytes67 = _rt::Vec::from_raw_parts(l65.cast(), len67, len67); + _rt::string_lift(bytes67) + }; + V68::Digest(e68) + } + }; + let l69 = i32::from( + *base.add(48 + 15 * ::core::mem::size_of::<*const u8>()).cast::(), + ); + use wavs::types::service::AllowedHostPermission as V76; + let v76 = match l69 { + 0 => V76::All, + 1 => { + let e76 = { + let l70 = *base + .add(48 + 16 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l71 = *base + .add(48 + 17 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let base75 = l70; + let len75 = l71; + let mut result75 = _rt::Vec::with_capacity(len75); + for i in 0..len75 { + let base = base75 + .add(i * (2 * ::core::mem::size_of::<*const u8>())); + let e75 = { + let l72 = *base.add(0).cast::<*mut u8>(); + let l73 = *base + .add(::core::mem::size_of::<*const u8>()) + .cast::(); + let len74 = l73; + let bytes74 = _rt::Vec::from_raw_parts( + l72.cast(), + len74, + len74, + ); + _rt::string_lift(bytes74) + }; + result75.push(e75); + } + _rt::cabi_dealloc( + base75, + len75 * (2 * ::core::mem::size_of::<*const u8>()), + ::core::mem::size_of::<*const u8>(), + ); + result75 + }; + V76::Only(e76) + } + n => { + debug_assert_eq!(n, 2, "invalid enum discriminant"); + V76::None + } + }; + let l77 = i32::from( + *base.add(48 + 18 * ::core::mem::size_of::<*const u8>()).cast::(), + ); + let l78 = i32::from( + *base.add(56 + 18 * ::core::mem::size_of::<*const u8>()).cast::(), + ); + let l80 = i32::from( + *base.add(72 + 18 * ::core::mem::size_of::<*const u8>()).cast::(), + ); + let l82 = *base + .add(88 + 18 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l83 = *base + .add(88 + 19 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let base90 = l82; + let len90 = l83; + let mut result90 = _rt::Vec::with_capacity(len90); + for i in 0..len90 { + let base = base90.add(i * (4 * ::core::mem::size_of::<*const u8>())); + let e90 = { + let l84 = *base.add(0).cast::<*mut u8>(); + let l85 = *base + .add(::core::mem::size_of::<*const u8>()) + .cast::(); + let len86 = l85; + let bytes86 = _rt::Vec::from_raw_parts(l84.cast(), len86, len86); + let l87 = *base + .add(2 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l88 = *base + .add(3 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len89 = l88; + let bytes89 = _rt::Vec::from_raw_parts(l87.cast(), len89, len89); + (_rt::string_lift(bytes86), _rt::string_lift(bytes89)) + }; + result90.push(e90); + } + _rt::cabi_dealloc( + base90, + len90 * (4 * ::core::mem::size_of::<*const u8>()), + ::core::mem::size_of::<*const u8>(), + ); + let l91 = *base + .add(88 + 20 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l92 = *base + .add(88 + 21 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let base96 = l91; + let len96 = l92; + let mut result96 = _rt::Vec::with_capacity(len96); + for i in 0..len96 { + let base = base96.add(i * (2 * ::core::mem::size_of::<*const u8>())); + let e96 = { + let l93 = *base.add(0).cast::<*mut u8>(); + let l94 = *base + .add(::core::mem::size_of::<*const u8>()) + .cast::(); + let len95 = l94; + let bytes95 = _rt::Vec::from_raw_parts(l93.cast(), len95, len95); + _rt::string_lift(bytes95) + }; + result96.push(e96); + } + _rt::cabi_dealloc( + base96, + len96 * (2 * ::core::mem::size_of::<*const u8>()), + ::core::mem::size_of::<*const u8>(), + ); + let l97 = i32::from( + *base.add(88 + 22 * ::core::mem::size_of::<*const u8>()).cast::(), + ); + use wavs::types::service::Submit as V159; + let v159 = match l97 { + 0 => V159::None, + n => { + debug_assert_eq!(n, 1, "invalid enum discriminant"); + let e159 = { + let l98 = *base + .add(96 + 22 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l99 = *base + .add(96 + 23 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len100 = l99; + let bytes100 = _rt::Vec::from_raw_parts( + l98.cast(), + len100, + len100, + ); + let l101 = i32::from( + *base + .add(96 + 24 * ::core::mem::size_of::<*const u8>()) + .cast::(), + ); + use wavs::types::service::ComponentSource as V125; + let v125 = match l101 { + 0 => { + let e125 = { + let l102 = *base + .add(96 + 25 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l103 = *base + .add(96 + 26 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len104 = l103; + let bytes104 = _rt::Vec::from_raw_parts( + l102.cast(), + len104, + len104, + ); + let l105 = *base + .add(96 + 27 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l106 = *base + .add(96 + 28 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len107 = l106; + let bytes107 = _rt::Vec::from_raw_parts( + l105.cast(), + len107, + len107, + ); + wavs::types::service::ComponentSourceDownload { + uri: _rt::string_lift(bytes104), + digest: _rt::string_lift(bytes107), + } + }; + V125::Download(e125) + } + 1 => { + let e125 = { + let l108 = *base + .add(96 + 25 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l109 = *base + .add(96 + 26 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len110 = l109; + let bytes110 = _rt::Vec::from_raw_parts( + l108.cast(), + len110, + len110, + ); + let l111 = i32::from( + *base + .add(96 + 27 * ::core::mem::size_of::<*const u8>()) + .cast::(), + ); + let l115 = i32::from( + *base + .add(96 + 30 * ::core::mem::size_of::<*const u8>()) + .cast::(), + ); + let l119 = *base + .add(96 + 33 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l120 = *base + .add(96 + 34 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len121 = l120; + let bytes121 = _rt::Vec::from_raw_parts( + l119.cast(), + len121, + len121, + ); + wavs::types::service::Registry { + digest: _rt::string_lift(bytes110), + domain: match l111 { + 0 => None, + 1 => { + let e = { + let l112 = *base + .add(96 + 28 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l113 = *base + .add(96 + 29 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len114 = l113; + let bytes114 = _rt::Vec::from_raw_parts( + l112.cast(), + len114, + len114, + ); + _rt::string_lift(bytes114) + }; + Some(e) + } + _ => _rt::invalid_enum_discriminant(), + }, + version: match l115 { + 0 => None, + 1 => { + let e = { + let l116 = *base + .add(96 + 31 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l117 = *base + .add(96 + 32 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len118 = l117; + let bytes118 = _rt::Vec::from_raw_parts( + l116.cast(), + len118, + len118, + ); + _rt::string_lift(bytes118) + }; + Some(e) + } + _ => _rt::invalid_enum_discriminant(), + }, + pkg: _rt::string_lift(bytes121), + } + }; + V125::Registry(e125) + } + n => { + debug_assert_eq!(n, 2, "invalid enum discriminant"); + let e125 = { + let l122 = *base + .add(96 + 25 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l123 = *base + .add(96 + 26 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len124 = l123; + let bytes124 = _rt::Vec::from_raw_parts( + l122.cast(), + len124, + len124, + ); + _rt::string_lift(bytes124) + }; + V125::Digest(e125) + } + }; + let l126 = i32::from( + *base + .add(96 + 35 * ::core::mem::size_of::<*const u8>()) + .cast::(), + ); + use wavs::types::service::AllowedHostPermission as V133; + let v133 = match l126 { + 0 => V133::All, + 1 => { + let e133 = { + let l127 = *base + .add(96 + 36 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l128 = *base + .add(96 + 37 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let base132 = l127; + let len132 = l128; + let mut result132 = _rt::Vec::with_capacity(len132); + for i in 0..len132 { + let base = base132 + .add(i * (2 * ::core::mem::size_of::<*const u8>())); + let e132 = { + let l129 = *base.add(0).cast::<*mut u8>(); + let l130 = *base + .add(::core::mem::size_of::<*const u8>()) + .cast::(); + let len131 = l130; + let bytes131 = _rt::Vec::from_raw_parts( + l129.cast(), + len131, + len131, + ); + _rt::string_lift(bytes131) + }; + result132.push(e132); + } + _rt::cabi_dealloc( + base132, + len132 * (2 * ::core::mem::size_of::<*const u8>()), + ::core::mem::size_of::<*const u8>(), + ); + result132 + }; + V133::Only(e133) + } + n => { + debug_assert_eq!(n, 2, "invalid enum discriminant"); + V133::None + } + }; + let l134 = i32::from( + *base + .add(96 + 38 * ::core::mem::size_of::<*const u8>()) + .cast::(), + ); + let l135 = i32::from( + *base + .add(104 + 38 * ::core::mem::size_of::<*const u8>()) + .cast::(), + ); + let l137 = i32::from( + *base + .add(120 + 38 * ::core::mem::size_of::<*const u8>()) + .cast::(), + ); + let l139 = *base + .add(136 + 38 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l140 = *base + .add(136 + 39 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let base147 = l139; + let len147 = l140; + let mut result147 = _rt::Vec::with_capacity(len147); + for i in 0..len147 { + let base = base147 + .add(i * (4 * ::core::mem::size_of::<*const u8>())); + let e147 = { + let l141 = *base.add(0).cast::<*mut u8>(); + let l142 = *base + .add(::core::mem::size_of::<*const u8>()) + .cast::(); + let len143 = l142; + let bytes143 = _rt::Vec::from_raw_parts( + l141.cast(), + len143, + len143, + ); + let l144 = *base + .add(2 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l145 = *base + .add(3 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len146 = l145; + let bytes146 = _rt::Vec::from_raw_parts( + l144.cast(), + len146, + len146, + ); + (_rt::string_lift(bytes143), _rt::string_lift(bytes146)) + }; + result147.push(e147); + } + _rt::cabi_dealloc( + base147, + len147 * (4 * ::core::mem::size_of::<*const u8>()), + ::core::mem::size_of::<*const u8>(), + ); + let l148 = *base + .add(136 + 40 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l149 = *base + .add(136 + 41 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let base153 = l148; + let len153 = l149; + let mut result153 = _rt::Vec::with_capacity(len153); + for i in 0..len153 { + let base = base153 + .add(i * (2 * ::core::mem::size_of::<*const u8>())); + let e153 = { + let l150 = *base.add(0).cast::<*mut u8>(); + let l151 = *base + .add(::core::mem::size_of::<*const u8>()) + .cast::(); + let len152 = l151; + let bytes152 = _rt::Vec::from_raw_parts( + l150.cast(), + len152, + len152, + ); + _rt::string_lift(bytes152) + }; + result153.push(e153); + } + _rt::cabi_dealloc( + base153, + len153 * (2 * ::core::mem::size_of::<*const u8>()), + ::core::mem::size_of::<*const u8>(), + ); + let l154 = i32::from( + *base + .add(136 + 42 * ::core::mem::size_of::<*const u8>()) + .cast::(), + ); + use wavs::types::service::SignatureAlgorithm as V155; + let v155 = match l154 { + n => { + debug_assert_eq!(n, 0, "invalid enum discriminant"); + V155::Secp256k1 + } + }; + let l156 = i32::from( + *base + .add(137 + 42 * ::core::mem::size_of::<*const u8>()) + .cast::(), + ); + wavs::types::service::AggregatorSubmit { + url: _rt::string_lift(bytes100), + component: wavs::types::service::Component { + source: v125, + permissions: wavs::types::service::Permissions { + allowed_http_hosts: v133, + file_system: _rt::bool_lift(l134 as u8), + }, + fuel_limit: match l135 { + 0 => None, + 1 => { + let e = { + let l136 = *base + .add(112 + 38 * ::core::mem::size_of::<*const u8>()) + .cast::(); + l136 as u64 + }; + Some(e) + } + _ => _rt::invalid_enum_discriminant(), + }, + time_limit_seconds: match l137 { + 0 => None, + 1 => { + let e = { + let l138 = *base + .add(128 + 38 * ::core::mem::size_of::<*const u8>()) + .cast::(); + l138 as u64 + }; + Some(e) + } + _ => _rt::invalid_enum_discriminant(), + }, + config: result147, + env_keys: result153, + }, + signature_kind: wavs::types::service::SignatureKind { + algorithm: v155, + prefix: match l156 { + 0 => None, + 1 => { + let e = { + let l157 = i32::from( + *base + .add(138 + 42 * ::core::mem::size_of::<*const u8>()) + .cast::(), + ); + use wavs::types::service::SignaturePrefix as V158; + let v158 = match l157 { + n => { + debug_assert_eq!(n, 0, "invalid enum discriminant"); + V158::Eip191 + } + }; + v158 + }; + Some(e) + } + _ => _rt::invalid_enum_discriminant(), + }, + }, + } + }; + V159::Aggregator(e159) + } + }; + ( + _rt::string_lift(bytes7), + wavs::types::service::Workflow { + trigger: v43, + component: wavs::types::service::Component { + source: v68, + permissions: wavs::types::service::Permissions { + allowed_http_hosts: v76, + file_system: _rt::bool_lift(l77 as u8), + }, + fuel_limit: match l78 { + 0 => None, + 1 => { + let e = { + let l79 = *base + .add(64 + 18 * ::core::mem::size_of::<*const u8>()) + .cast::(); + l79 as u64 + }; + Some(e) + } + _ => _rt::invalid_enum_discriminant(), + }, + time_limit_seconds: match l80 { + 0 => None, + 1 => { + let e = { + let l81 = *base + .add(80 + 18 * ::core::mem::size_of::<*const u8>()) + .cast::(); + l81 as u64 + }; + Some(e) + } + _ => _rt::invalid_enum_discriminant(), + }, + config: result90, + env_keys: result96, + }, + submit: v159, + }, + ) + }; + result160.push(e160); + } + _rt::cabi_dealloc( + base160, + len160 * (144 + 42 * ::core::mem::size_of::<*const u8>()), + 8, + ); + let l161 = i32::from( + *arg0.add(4 * ::core::mem::size_of::<*const u8>()).cast::(), + ); + use wavs::types::service::ServiceStatus as V162; + let v162 = match l161 { + 0 => V162::Active, + n => { + debug_assert_eq!(n, 1, "invalid enum discriminant"); + V162::Paused + } + }; + let l163 = i32::from( + *arg0.add(5 * ::core::mem::size_of::<*const u8>()).cast::(), + ); + use wavs::types::service::ServiceManager as V170; + let v170 = match l163 { + n => { + debug_assert_eq!(n, 0, "invalid enum discriminant"); + let e170 = { + let l164 = *arg0 + .add(6 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l165 = *arg0 + .add(7 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len166 = l165; + let bytes166 = _rt::Vec::from_raw_parts(l164.cast(), len166, len166); + let l167 = *arg0 + .add(8 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l168 = *arg0 + .add(9 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len169 = l168; + wavs::types::service::EvmManager { + chain: _rt::string_lift(bytes166), + address: wavs::types::chain::EvmAddress { + raw_bytes: _rt::Vec::from_raw_parts(l167.cast(), len169, len169), + }, + } + }; + V170::Evm(e170) + } + }; + let l171 = *arg0.add(10 * ::core::mem::size_of::<*const u8>()).cast::<*mut u8>(); + let l172 = *arg0.add(11 * ::core::mem::size_of::<*const u8>()).cast::(); + let len173 = l172; + let bytes173 = _rt::Vec::from_raw_parts(l171.cast(), len173, len173); + let l174 = *arg0.add(12 * ::core::mem::size_of::<*const u8>()).cast::<*mut u8>(); + let l175 = *arg0.add(13 * ::core::mem::size_of::<*const u8>()).cast::(); + let len176 = l175; + let l177 = *arg0.add(14 * ::core::mem::size_of::<*const u8>()).cast::<*mut u8>(); + let l178 = *arg0.add(15 * ::core::mem::size_of::<*const u8>()).cast::(); + let len179 = l178; + let l180 = *arg0.add(16 * ::core::mem::size_of::<*const u8>()).cast::<*mut u8>(); + let l181 = *arg0.add(17 * ::core::mem::size_of::<*const u8>()).cast::(); + let len182 = l181; + let l183 = *arg0.add(18 * ::core::mem::size_of::<*const u8>()).cast::<*mut u8>(); + let l184 = *arg0.add(19 * ::core::mem::size_of::<*const u8>()).cast::(); + let len185 = l184; + let l186 = i32::from( + *arg0.add(20 * ::core::mem::size_of::<*const u8>()).cast::(), + ); + use wavs::types::service::SignatureAlgorithm as V187; + let v187 = match l186 { + n => { + debug_assert_eq!(n, 0, "invalid enum discriminant"); + V187::Secp256k1 + } + }; + let l188 = i32::from( + *arg0.add(1 + 20 * ::core::mem::size_of::<*const u8>()).cast::(), + ); + let l191 = i32::from( + *arg0.add(8 + 20 * ::core::mem::size_of::<*const u8>()).cast::(), + ); + use wavs::types::events::TriggerData as V247; + let v247 = match l191 { + 0 => { + let e247 = { + let l192 = *arg0 + .add(16 + 20 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l193 = *arg0 + .add(16 + 21 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len194 = l193; + let bytes194 = _rt::Vec::from_raw_parts(l192.cast(), len194, len194); + let l195 = *arg0 + .add(16 + 22 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l196 = *arg0 + .add(16 + 23 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len197 = l196; + let l198 = *arg0 + .add(16 + 24 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l199 = *arg0 + .add(16 + 25 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let base203 = l198; + let len203 = l199; + let mut result203 = _rt::Vec::with_capacity(len203); + for i in 0..len203 { + let base = base203 + .add(i * (2 * ::core::mem::size_of::<*const u8>())); + let e203 = { + let l200 = *base.add(0).cast::<*mut u8>(); + let l201 = *base + .add(::core::mem::size_of::<*const u8>()) + .cast::(); + let len202 = l201; + _rt::Vec::from_raw_parts(l200.cast(), len202, len202) + }; + result203.push(e203); + } + _rt::cabi_dealloc( + base203, + len203 * (2 * ::core::mem::size_of::<*const u8>()), + ::core::mem::size_of::<*const u8>(), + ); + let l204 = *arg0 + .add(16 + 26 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l205 = *arg0 + .add(16 + 27 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len206 = l205; + let l207 = *arg0 + .add(16 + 28 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l208 = *arg0 + .add(16 + 29 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len209 = l208; + let l210 = *arg0 + .add(16 + 30 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let l211 = *arg0 + .add(24 + 30 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let l212 = *arg0 + .add(32 + 30 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l213 = *arg0 + .add(32 + 31 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len214 = l213; + let l215 = i32::from( + *arg0.add(32 + 32 * ::core::mem::size_of::<*const u8>()).cast::(), + ); + let l217 = *arg0 + .add(48 + 32 * ::core::mem::size_of::<*const u8>()) + .cast::(); + wavs::types::events::TriggerDataEvmContractEvent { + chain: _rt::string_lift(bytes194), + log: wavs::types::chain::EvmEventLog { + address: wavs::types::chain::EvmAddress { + raw_bytes: _rt::Vec::from_raw_parts( + l195.cast(), + len197, + len197, + ), + }, + data: wavs::types::chain::EvmEventLogData { + topics: result203, + data: _rt::Vec::from_raw_parts(l204.cast(), len206, len206), + }, + tx_hash: _rt::Vec::from_raw_parts(l207.cast(), len209, len209), + block_number: l210 as u64, + log_index: l211 as u64, + block_hash: _rt::Vec::from_raw_parts( + l212.cast(), + len214, + len214, + ), + block_timestamp: match l215 { + 0 => None, + 1 => { + let e = { + let l216 = *arg0 + .add(40 + 32 * ::core::mem::size_of::<*const u8>()) + .cast::(); + l216 as u64 + }; + Some(e) + } + _ => _rt::invalid_enum_discriminant(), + }, + tx_index: l217 as u64, + }, + } + }; + V247::EvmContractEvent(e247) + } + 1 => { + let e247 = { + let l218 = *arg0 + .add(16 + 20 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l219 = *arg0 + .add(16 + 21 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len220 = l219; + let bytes220 = _rt::Vec::from_raw_parts(l218.cast(), len220, len220); + let l221 = *arg0 + .add(16 + 22 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let l222 = *arg0 + .add(16 + 23 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l223 = *arg0 + .add(16 + 24 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len224 = l223; + let bytes224 = _rt::Vec::from_raw_parts(l222.cast(), len224, len224); + let l225 = *arg0 + .add(16 + 25 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l226 = *arg0 + .add(16 + 26 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len227 = l226; + let bytes227 = _rt::Vec::from_raw_parts(l225.cast(), len227, len227); + let l228 = *arg0 + .add(16 + 27 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l229 = *arg0 + .add(16 + 28 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let base236 = l228; + let len236 = l229; + let mut result236 = _rt::Vec::with_capacity(len236); + for i in 0..len236 { + let base = base236 + .add(i * (4 * ::core::mem::size_of::<*const u8>())); + let e236 = { + let l230 = *base.add(0).cast::<*mut u8>(); + let l231 = *base + .add(::core::mem::size_of::<*const u8>()) + .cast::(); + let len232 = l231; + let bytes232 = _rt::Vec::from_raw_parts( + l230.cast(), + len232, + len232, + ); + let l233 = *base + .add(2 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l234 = *base + .add(3 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len235 = l234; + let bytes235 = _rt::Vec::from_raw_parts( + l233.cast(), + len235, + len235, + ); + (_rt::string_lift(bytes232), _rt::string_lift(bytes235)) + }; + result236.push(e236); + } + _rt::cabi_dealloc( + base236, + len236 * (4 * ::core::mem::size_of::<*const u8>()), + ::core::mem::size_of::<*const u8>(), + ); + let l237 = *arg0 + .add(24 + 28 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let l238 = *arg0 + .add(32 + 28 * ::core::mem::size_of::<*const u8>()) + .cast::(); + wavs::types::events::TriggerDataCosmosContractEvent { + contract_address: wavs::types::chain::CosmosAddress { + bech32_addr: _rt::string_lift(bytes220), + prefix_len: l221 as u32, + }, + chain: _rt::string_lift(bytes224), + event: wavs::types::chain::CosmosEvent { + ty: _rt::string_lift(bytes227), + attributes: result236, + }, + event_index: l237 as u64, + block_height: l238 as u64, + } + }; + V247::CosmosContractEvent(e247) + } + 2 => { + let e247 = { + let l239 = *arg0 + .add(16 + 20 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l240 = *arg0 + .add(16 + 21 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len241 = l240; + let bytes241 = _rt::Vec::from_raw_parts(l239.cast(), len241, len241); + let l242 = *arg0 + .add(16 + 22 * ::core::mem::size_of::<*const u8>()) + .cast::(); + wavs::types::events::TriggerDataBlockInterval { + chain: _rt::string_lift(bytes241), + block_height: l242 as u64, + } + }; + V247::BlockInterval(e247) + } + 3 => { + let e247 = { + let l243 = *arg0 + .add(16 + 20 * ::core::mem::size_of::<*const u8>()) + .cast::(); + wavs::types::events::TriggerDataCron { + trigger_time: wavs::types::core::Timestamp { + nanos: l243 as u64, + }, + } + }; + V247::Cron(e247) + } + n => { + debug_assert_eq!(n, 4, "invalid enum discriminant"); + let e247 = { + let l244 = *arg0 + .add(16 + 20 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l245 = *arg0 + .add(16 + 21 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len246 = l245; + _rt::Vec::from_raw_parts(l244.cast(), len246, len246) + }; + V247::Raw(e247) + } + }; + let l248 = i32::from( + *arg0.add(56 + 32 * ::core::mem::size_of::<*const u8>()).cast::(), + ); + let result260 = T::handle_submit_callback( + wavs::aggregator::aggregator::Packet { + service: wavs::types::service::Service { + name: _rt::string_lift(bytes2), + workflows: result160, + status: v162, + manager: v170, + }, + workflow_id: _rt::string_lift(bytes173), + envelope: wavs::aggregator::aggregator::Envelope { + event_id: _rt::Vec::from_raw_parts(l174.cast(), len176, len176), + ordering: _rt::Vec::from_raw_parts(l177.cast(), len179, len179), + payload: _rt::Vec::from_raw_parts(l180.cast(), len182, len182), + }, + signature: wavs::aggregator::aggregator::EnvelopeSignature { + data: _rt::Vec::from_raw_parts(l183.cast(), len185, len185), + kind: wavs::types::service::SignatureKind { + algorithm: v187, + prefix: match l188 { + 0 => None, + 1 => { + let e = { + let l189 = i32::from( + *arg0 + .add(2 + 20 * ::core::mem::size_of::<*const u8>()) + .cast::(), + ); + use wavs::types::service::SignaturePrefix as V190; + let v190 = match l189 { + n => { + debug_assert_eq!(n, 0, "invalid enum discriminant"); + V190::Eip191 + } + }; + v190 + }; + Some(e) + } + _ => _rt::invalid_enum_discriminant(), + }, + }, + }, + trigger_data: v247, + }, + match l248 { + 0 => { + let e = { + let l249 = i32::from( + *arg0 + .add(56 + 33 * ::core::mem::size_of::<*const u8>()) + .cast::(), + ); + use wavs::types::chain::AnyTxHash as V256; + let v256 = match l249 { + 0 => { + let e256 = { + let l250 = *arg0 + .add(56 + 34 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l251 = *arg0 + .add(56 + 35 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len252 = l251; + _rt::Vec::from_raw_parts(l250.cast(), len252, len252) + }; + V256::Evm(e256) + } + n => { + debug_assert_eq!(n, 1, "invalid enum discriminant"); + let e256 = { + let l253 = *arg0 + .add(56 + 34 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l254 = *arg0 + .add(56 + 35 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len255 = l254; + let bytes255 = _rt::Vec::from_raw_parts( + l253.cast(), + len255, + len255, + ); + _rt::string_lift(bytes255) + }; + V256::Cosmos(e256) + } + }; + v256 + }; + Ok(e) + } + 1 => { + let e = { + let l257 = *arg0 + .add(56 + 33 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l258 = *arg0 + .add(56 + 34 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len259 = l258; + let bytes259 = _rt::Vec::from_raw_parts(l257.cast(), len259, len259); + _rt::string_lift(bytes259) + }; + Err(e) + } + _ => _rt::invalid_enum_discriminant(), + }, + ); + _rt::cabi_dealloc(arg0, 56 + 36 * ::core::mem::size_of::<*const u8>(), 8); + let ptr261 = (&raw mut _RET_AREA.0).cast::(); + match result260 { + Ok(_) => { + *ptr261.add(0).cast::() = (0i32) as u8; + } + Err(e) => { + *ptr261.add(0).cast::() = (1i32) as u8; + let vec262 = (e.into_bytes()).into_boxed_slice(); + let ptr262 = vec262.as_ptr().cast::(); + let len262 = vec262.len(); + ::core::mem::forget(vec262); + *ptr261.add(2 * ::core::mem::size_of::<*const u8>()).cast::() = len262; + *ptr261.add(::core::mem::size_of::<*const u8>()).cast::<*mut u8>() = ptr262 + .cast_mut(); + } + }; + ptr261 +} +#[doc(hidden)] +#[allow(non_snake_case)] +pub unsafe fn __post_return_handle_submit_callback(arg0: *mut u8) { + let l0 = i32::from(*arg0.add(0).cast::()); + match l0 { + 0 => {} + _ => { + let l1 = *arg0.add(::core::mem::size_of::<*const u8>()).cast::<*mut u8>(); + let l2 = *arg0.add(2 * ::core::mem::size_of::<*const u8>()).cast::(); + _rt::cabi_dealloc(l1, l2, 1); + } + } +} +pub trait Guest { + fn process_packet(packet: Packet) -> Result<_rt::Vec, _rt::String>; + fn handle_timer_callback( + packet: Packet, + ) -> Result<_rt::Vec, _rt::String>; + fn handle_submit_callback( + packet: Packet, + tx_result: Result, + ) -> Result<(), _rt::String>; +} +#[doc(hidden)] +macro_rules! __export_world_aggregator_world_cabi { + ($ty:ident with_types_in $($path_to_types:tt)*) => { + const _ : () = { #[unsafe (export_name = "process-packet")] unsafe extern "C" fn + export_process_packet(arg0 : * mut u8,) -> * mut u8 { unsafe { + $($path_to_types)*:: _export_process_packet_cabi::<$ty > (arg0) } } #[unsafe + (export_name = "cabi_post_process-packet")] unsafe extern "C" fn + _post_return_process_packet(arg0 : * mut u8,) { unsafe { $($path_to_types)*:: + __post_return_process_packet::<$ty > (arg0) } } #[unsafe (export_name = + "handle-timer-callback")] unsafe extern "C" fn export_handle_timer_callback(arg0 + : * mut u8,) -> * mut u8 { unsafe { $($path_to_types)*:: + _export_handle_timer_callback_cabi::<$ty > (arg0) } } #[unsafe (export_name = + "cabi_post_handle-timer-callback")] unsafe extern "C" fn + _post_return_handle_timer_callback(arg0 : * mut u8,) { unsafe { + $($path_to_types)*:: __post_return_handle_timer_callback::<$ty > (arg0) } } + #[unsafe (export_name = "handle-submit-callback")] unsafe extern "C" fn + export_handle_submit_callback(arg0 : * mut u8,) -> * mut u8 { unsafe { + $($path_to_types)*:: _export_handle_submit_callback_cabi::<$ty > (arg0) } } + #[unsafe (export_name = "cabi_post_handle-submit-callback")] unsafe extern "C" fn + _post_return_handle_submit_callback(arg0 : * mut u8,) { unsafe { + $($path_to_types)*:: __post_return_handle_submit_callback::<$ty > (arg0) } } }; + }; +} +#[doc(hidden)] +pub(crate) use __export_world_aggregator_world_cabi; +#[cfg_attr(target_pointer_width = "64", repr(align(8)))] +#[cfg_attr(target_pointer_width = "32", repr(align(4)))] +struct _RetArea([::core::mem::MaybeUninit; 3 * ::core::mem::size_of::<*const u8>()]); +static mut _RET_AREA: _RetArea = _RetArea( + [::core::mem::MaybeUninit::uninit(); 3 * ::core::mem::size_of::<*const u8>()], +); +#[rustfmt::skip] +#[allow(dead_code, clippy::all)] +pub mod wasi { + pub mod cli { + #[allow(dead_code, async_fn_in_trait, unused_imports, clippy::all)] + pub mod environment { + #[used] + #[doc(hidden)] + static __FORCE_SECTION_REF: fn() = super::super::super::__link_custom_section_describing_imports; + use super::super::super::_rt; + #[allow(unused_unsafe, clippy::all)] + pub fn get_environment() -> _rt::Vec<(_rt::String, _rt::String)> { + unsafe { + #[cfg_attr(target_pointer_width = "64", repr(align(8)))] + #[cfg_attr(target_pointer_width = "32", repr(align(4)))] + struct RetArea( + [::core::mem::MaybeUninit< + u8, + >; 2 * ::core::mem::size_of::<*const u8>()], + ); + let mut ret_area = RetArea( + [::core::mem::MaybeUninit::uninit(); 2 + * ::core::mem::size_of::<*const u8>()], + ); + let ptr0 = ret_area.0.as_mut_ptr().cast::(); + #[cfg(target_arch = "wasm32")] + #[link(wasm_import_module = "wasi:cli/environment@0.2.0")] + unsafe extern "C" { + #[link_name = "get-environment"] + fn wit_import1(_: *mut u8); + } + #[cfg(not(target_arch = "wasm32"))] + unsafe extern "C" fn wit_import1(_: *mut u8) { + unreachable!() + } + unsafe { wit_import1(ptr0) }; + let l2 = *ptr0.add(0).cast::<*mut u8>(); + let l3 = *ptr0 + .add(::core::mem::size_of::<*const u8>()) + .cast::(); + let base10 = l2; + let len10 = l3; + let mut result10 = _rt::Vec::with_capacity(len10); + for i in 0..len10 { + let base = base10 + .add(i * (4 * ::core::mem::size_of::<*const u8>())); + let e10 = { + let l4 = *base.add(0).cast::<*mut u8>(); + let l5 = *base + .add(::core::mem::size_of::<*const u8>()) + .cast::(); + let len6 = l5; + let bytes6 = _rt::Vec::from_raw_parts(l4.cast(), len6, len6); + let l7 = *base + .add(2 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l8 = *base + .add(3 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len9 = l8; + let bytes9 = _rt::Vec::from_raw_parts(l7.cast(), len9, len9); + (_rt::string_lift(bytes6), _rt::string_lift(bytes9)) + }; + result10.push(e10); + } + _rt::cabi_dealloc( + base10, + len10 * (4 * ::core::mem::size_of::<*const u8>()), + ::core::mem::size_of::<*const u8>(), + ); + let result11 = result10; + result11 + } + } + #[allow(unused_unsafe, clippy::all)] + pub fn get_arguments() -> _rt::Vec<_rt::String> { + unsafe { + #[cfg_attr(target_pointer_width = "64", repr(align(8)))] + #[cfg_attr(target_pointer_width = "32", repr(align(4)))] + struct RetArea( + [::core::mem::MaybeUninit< + u8, + >; 2 * ::core::mem::size_of::<*const u8>()], + ); + let mut ret_area = RetArea( + [::core::mem::MaybeUninit::uninit(); 2 + * ::core::mem::size_of::<*const u8>()], + ); + let ptr0 = ret_area.0.as_mut_ptr().cast::(); + #[cfg(target_arch = "wasm32")] + #[link(wasm_import_module = "wasi:cli/environment@0.2.0")] + unsafe extern "C" { + #[link_name = "get-arguments"] + fn wit_import1(_: *mut u8); + } + #[cfg(not(target_arch = "wasm32"))] + unsafe extern "C" fn wit_import1(_: *mut u8) { + unreachable!() + } + unsafe { wit_import1(ptr0) }; + let l2 = *ptr0.add(0).cast::<*mut u8>(); + let l3 = *ptr0 + .add(::core::mem::size_of::<*const u8>()) + .cast::(); + let base7 = l2; + let len7 = l3; + let mut result7 = _rt::Vec::with_capacity(len7); + for i in 0..len7 { + let base = base7 + .add(i * (2 * ::core::mem::size_of::<*const u8>())); + let e7 = { + let l4 = *base.add(0).cast::<*mut u8>(); + let l5 = *base + .add(::core::mem::size_of::<*const u8>()) + .cast::(); + let len6 = l5; + let bytes6 = _rt::Vec::from_raw_parts(l4.cast(), len6, len6); + _rt::string_lift(bytes6) + }; + result7.push(e7); + } + _rt::cabi_dealloc( + base7, + len7 * (2 * ::core::mem::size_of::<*const u8>()), + ::core::mem::size_of::<*const u8>(), + ); + let result8 = result7; + result8 + } + } + #[allow(unused_unsafe, clippy::all)] + pub fn initial_cwd() -> Option<_rt::String> { + unsafe { + #[cfg_attr(target_pointer_width = "64", repr(align(8)))] + #[cfg_attr(target_pointer_width = "32", repr(align(4)))] + struct RetArea( + [::core::mem::MaybeUninit< + u8, + >; 3 * ::core::mem::size_of::<*const u8>()], + ); + let mut ret_area = RetArea( + [::core::mem::MaybeUninit::uninit(); 3 + * ::core::mem::size_of::<*const u8>()], + ); + let ptr0 = ret_area.0.as_mut_ptr().cast::(); + #[cfg(target_arch = "wasm32")] + #[link(wasm_import_module = "wasi:cli/environment@0.2.0")] + unsafe extern "C" { + #[link_name = "initial-cwd"] + fn wit_import1(_: *mut u8); + } + #[cfg(not(target_arch = "wasm32"))] + unsafe extern "C" fn wit_import1(_: *mut u8) { + unreachable!() + } + unsafe { wit_import1(ptr0) }; + let l2 = i32::from(*ptr0.add(0).cast::()); + let result6 = match l2 { + 0 => None, + 1 => { + let e = { + let l3 = *ptr0 + .add(::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l4 = *ptr0 + .add(2 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len5 = l4; + let bytes5 = _rt::Vec::from_raw_parts( + l3.cast(), + len5, + len5, + ); + _rt::string_lift(bytes5) + }; + Some(e) + } + _ => _rt::invalid_enum_discriminant(), + }; + result6 + } + } + } + #[allow(dead_code, async_fn_in_trait, unused_imports, clippy::all)] + pub mod exit { + #[used] + #[doc(hidden)] + static __FORCE_SECTION_REF: fn() = super::super::super::__link_custom_section_describing_imports; + #[allow(unused_unsafe, clippy::all)] + pub fn exit(status: Result<(), ()>) -> () { + unsafe { + let result0 = match status { + Ok(_) => 0i32, + Err(_) => 1i32, + }; + #[cfg(target_arch = "wasm32")] + #[link(wasm_import_module = "wasi:cli/exit@0.2.0")] + unsafe extern "C" { + #[link_name = "exit"] + fn wit_import1(_: i32); + } + #[cfg(not(target_arch = "wasm32"))] + unsafe extern "C" fn wit_import1(_: i32) { + unreachable!() + } + unsafe { wit_import1(result0) }; + } + } + } + #[allow(dead_code, async_fn_in_trait, unused_imports, clippy::all)] + pub mod stdin { + #[used] + #[doc(hidden)] + static __FORCE_SECTION_REF: fn() = super::super::super::__link_custom_section_describing_imports; + pub type InputStream = super::super::super::wasi::io::streams::InputStream; + #[allow(unused_unsafe, clippy::all)] + pub fn get_stdin() -> InputStream { + unsafe { + #[cfg(target_arch = "wasm32")] + #[link(wasm_import_module = "wasi:cli/stdin@0.2.0")] + unsafe extern "C" { + #[link_name = "get-stdin"] + fn wit_import0() -> i32; + } + #[cfg(not(target_arch = "wasm32"))] + unsafe extern "C" fn wit_import0() -> i32 { + unreachable!() + } + let ret = unsafe { wit_import0() }; + unsafe { + super::super::super::wasi::io::streams::InputStream::from_handle( + ret as u32, + ) + } + } + } + } + #[allow(dead_code, async_fn_in_trait, unused_imports, clippy::all)] + pub mod stdout { + #[used] + #[doc(hidden)] + static __FORCE_SECTION_REF: fn() = super::super::super::__link_custom_section_describing_imports; + pub type OutputStream = super::super::super::wasi::io::streams::OutputStream; + #[allow(unused_unsafe, clippy::all)] + pub fn get_stdout() -> OutputStream { + unsafe { + #[cfg(target_arch = "wasm32")] + #[link(wasm_import_module = "wasi:cli/stdout@0.2.0")] + unsafe extern "C" { + #[link_name = "get-stdout"] + fn wit_import0() -> i32; + } + #[cfg(not(target_arch = "wasm32"))] + unsafe extern "C" fn wit_import0() -> i32 { + unreachable!() + } + let ret = unsafe { wit_import0() }; + unsafe { + super::super::super::wasi::io::streams::OutputStream::from_handle( + ret as u32, + ) + } + } + } + } + #[allow(dead_code, async_fn_in_trait, unused_imports, clippy::all)] + pub mod stderr { + #[used] + #[doc(hidden)] + static __FORCE_SECTION_REF: fn() = super::super::super::__link_custom_section_describing_imports; + pub type OutputStream = super::super::super::wasi::io::streams::OutputStream; + #[allow(unused_unsafe, clippy::all)] + pub fn get_stderr() -> OutputStream { + unsafe { + #[cfg(target_arch = "wasm32")] + #[link(wasm_import_module = "wasi:cli/stderr@0.2.0")] + unsafe extern "C" { + #[link_name = "get-stderr"] + fn wit_import0() -> i32; + } + #[cfg(not(target_arch = "wasm32"))] + unsafe extern "C" fn wit_import0() -> i32 { + unreachable!() + } + let ret = unsafe { wit_import0() }; + unsafe { + super::super::super::wasi::io::streams::OutputStream::from_handle( + ret as u32, + ) + } + } + } + } + #[allow(dead_code, async_fn_in_trait, unused_imports, clippy::all)] + pub mod terminal_input { + #[used] + #[doc(hidden)] + static __FORCE_SECTION_REF: fn() = super::super::super::__link_custom_section_describing_imports; + use super::super::super::_rt; + #[derive(Debug)] + #[repr(transparent)] + pub struct TerminalInput { + handle: _rt::Resource, + } + impl TerminalInput { + #[doc(hidden)] + pub unsafe fn from_handle(handle: u32) -> Self { + Self { + handle: unsafe { _rt::Resource::from_handle(handle) }, + } + } + #[doc(hidden)] + pub fn take_handle(&self) -> u32 { + _rt::Resource::take_handle(&self.handle) + } + #[doc(hidden)] + pub fn handle(&self) -> u32 { + _rt::Resource::handle(&self.handle) + } + } + unsafe impl _rt::WasmResource for TerminalInput { + #[inline] + unsafe fn drop(_handle: u32) { + #[cfg(not(target_arch = "wasm32"))] + unreachable!(); + #[cfg(target_arch = "wasm32")] + { + #[link(wasm_import_module = "wasi:cli/terminal-input@0.2.0")] + unsafe extern "C" { + #[link_name = "[resource-drop]terminal-input"] + fn drop(_: u32); + } + unsafe { drop(_handle) }; + } + } + } + } + #[allow(dead_code, async_fn_in_trait, unused_imports, clippy::all)] + pub mod terminal_output { + #[used] + #[doc(hidden)] + static __FORCE_SECTION_REF: fn() = super::super::super::__link_custom_section_describing_imports; + use super::super::super::_rt; + #[derive(Debug)] + #[repr(transparent)] + pub struct TerminalOutput { + handle: _rt::Resource, + } + impl TerminalOutput { + #[doc(hidden)] + pub unsafe fn from_handle(handle: u32) -> Self { + Self { + handle: unsafe { _rt::Resource::from_handle(handle) }, + } + } + #[doc(hidden)] + pub fn take_handle(&self) -> u32 { + _rt::Resource::take_handle(&self.handle) + } + #[doc(hidden)] + pub fn handle(&self) -> u32 { + _rt::Resource::handle(&self.handle) + } + } + unsafe impl _rt::WasmResource for TerminalOutput { + #[inline] + unsafe fn drop(_handle: u32) { + #[cfg(not(target_arch = "wasm32"))] + unreachable!(); + #[cfg(target_arch = "wasm32")] + { + #[link(wasm_import_module = "wasi:cli/terminal-output@0.2.0")] + unsafe extern "C" { + #[link_name = "[resource-drop]terminal-output"] + fn drop(_: u32); + } + unsafe { drop(_handle) }; + } + } + } + } + #[allow(dead_code, async_fn_in_trait, unused_imports, clippy::all)] + pub mod terminal_stdin { + #[used] + #[doc(hidden)] + static __FORCE_SECTION_REF: fn() = super::super::super::__link_custom_section_describing_imports; + use super::super::super::_rt; + pub type TerminalInput = super::super::super::wasi::cli::terminal_input::TerminalInput; + #[allow(unused_unsafe, clippy::all)] + pub fn get_terminal_stdin() -> Option { + unsafe { + #[repr(align(4))] + struct RetArea([::core::mem::MaybeUninit; 8]); + let mut ret_area = RetArea([::core::mem::MaybeUninit::uninit(); 8]); + let ptr0 = ret_area.0.as_mut_ptr().cast::(); + #[cfg(target_arch = "wasm32")] + #[link(wasm_import_module = "wasi:cli/terminal-stdin@0.2.0")] + unsafe extern "C" { + #[link_name = "get-terminal-stdin"] + fn wit_import1(_: *mut u8); + } + #[cfg(not(target_arch = "wasm32"))] + unsafe extern "C" fn wit_import1(_: *mut u8) { + unreachable!() + } + unsafe { wit_import1(ptr0) }; + let l2 = i32::from(*ptr0.add(0).cast::()); + let result4 = match l2 { + 0 => None, + 1 => { + let e = { + let l3 = *ptr0.add(4).cast::(); + unsafe { + super::super::super::wasi::cli::terminal_input::TerminalInput::from_handle( + l3 as u32, + ) + } + }; + Some(e) + } + _ => _rt::invalid_enum_discriminant(), + }; + result4 + } + } + } + #[allow(dead_code, async_fn_in_trait, unused_imports, clippy::all)] + pub mod terminal_stdout { + #[used] + #[doc(hidden)] + static __FORCE_SECTION_REF: fn() = super::super::super::__link_custom_section_describing_imports; + use super::super::super::_rt; + pub type TerminalOutput = super::super::super::wasi::cli::terminal_output::TerminalOutput; + #[allow(unused_unsafe, clippy::all)] + pub fn get_terminal_stdout() -> Option { + unsafe { + #[repr(align(4))] + struct RetArea([::core::mem::MaybeUninit; 8]); + let mut ret_area = RetArea([::core::mem::MaybeUninit::uninit(); 8]); + let ptr0 = ret_area.0.as_mut_ptr().cast::(); + #[cfg(target_arch = "wasm32")] + #[link(wasm_import_module = "wasi:cli/terminal-stdout@0.2.0")] + unsafe extern "C" { + #[link_name = "get-terminal-stdout"] + fn wit_import1(_: *mut u8); + } + #[cfg(not(target_arch = "wasm32"))] + unsafe extern "C" fn wit_import1(_: *mut u8) { + unreachable!() + } + unsafe { wit_import1(ptr0) }; + let l2 = i32::from(*ptr0.add(0).cast::()); + let result4 = match l2 { + 0 => None, + 1 => { + let e = { + let l3 = *ptr0.add(4).cast::(); + unsafe { + super::super::super::wasi::cli::terminal_output::TerminalOutput::from_handle( + l3 as u32, + ) + } + }; + Some(e) + } + _ => _rt::invalid_enum_discriminant(), + }; + result4 + } + } + } + #[allow(dead_code, async_fn_in_trait, unused_imports, clippy::all)] + pub mod terminal_stderr { + #[used] + #[doc(hidden)] + static __FORCE_SECTION_REF: fn() = super::super::super::__link_custom_section_describing_imports; + use super::super::super::_rt; + pub type TerminalOutput = super::super::super::wasi::cli::terminal_output::TerminalOutput; + #[allow(unused_unsafe, clippy::all)] + pub fn get_terminal_stderr() -> Option { + unsafe { + #[repr(align(4))] + struct RetArea([::core::mem::MaybeUninit; 8]); + let mut ret_area = RetArea([::core::mem::MaybeUninit::uninit(); 8]); + let ptr0 = ret_area.0.as_mut_ptr().cast::(); + #[cfg(target_arch = "wasm32")] + #[link(wasm_import_module = "wasi:cli/terminal-stderr@0.2.0")] + unsafe extern "C" { + #[link_name = "get-terminal-stderr"] + fn wit_import1(_: *mut u8); + } + #[cfg(not(target_arch = "wasm32"))] + unsafe extern "C" fn wit_import1(_: *mut u8) { + unreachable!() + } + unsafe { wit_import1(ptr0) }; + let l2 = i32::from(*ptr0.add(0).cast::()); + let result4 = match l2 { + 0 => None, + 1 => { + let e = { + let l3 = *ptr0.add(4).cast::(); + unsafe { + super::super::super::wasi::cli::terminal_output::TerminalOutput::from_handle( + l3 as u32, + ) + } + }; + Some(e) + } + _ => _rt::invalid_enum_discriminant(), + }; + result4 + } + } + } + } + pub mod clocks { + #[allow(dead_code, async_fn_in_trait, unused_imports, clippy::all)] + pub mod monotonic_clock { + #[used] + #[doc(hidden)] + static __FORCE_SECTION_REF: fn() = super::super::super::__link_custom_section_describing_imports; + use super::super::super::_rt; + pub type Pollable = super::super::super::wasi::io::poll::Pollable; + pub type Instant = u64; + pub type Duration = u64; + #[allow(unused_unsafe, clippy::all)] + pub fn now() -> Instant { + unsafe { + #[cfg(target_arch = "wasm32")] + #[link(wasm_import_module = "wasi:clocks/monotonic-clock@0.2.0")] + unsafe extern "C" { + #[link_name = "now"] + fn wit_import0() -> i64; + } + #[cfg(not(target_arch = "wasm32"))] + unsafe extern "C" fn wit_import0() -> i64 { + unreachable!() + } + let ret = unsafe { wit_import0() }; + ret as u64 + } + } + #[allow(unused_unsafe, clippy::all)] + pub fn resolution() -> Duration { + unsafe { + #[cfg(target_arch = "wasm32")] + #[link(wasm_import_module = "wasi:clocks/monotonic-clock@0.2.0")] + unsafe extern "C" { + #[link_name = "resolution"] + fn wit_import0() -> i64; + } + #[cfg(not(target_arch = "wasm32"))] + unsafe extern "C" fn wit_import0() -> i64 { + unreachable!() + } + let ret = unsafe { wit_import0() }; + ret as u64 + } + } + #[allow(unused_unsafe, clippy::all)] + pub fn subscribe_instant(when: Instant) -> Pollable { + unsafe { + #[cfg(target_arch = "wasm32")] + #[link(wasm_import_module = "wasi:clocks/monotonic-clock@0.2.0")] + unsafe extern "C" { + #[link_name = "subscribe-instant"] + fn wit_import0(_: i64) -> i32; + } + #[cfg(not(target_arch = "wasm32"))] + unsafe extern "C" fn wit_import0(_: i64) -> i32 { + unreachable!() + } + let ret = unsafe { wit_import0(_rt::as_i64(when)) }; + unsafe { + super::super::super::wasi::io::poll::Pollable::from_handle( + ret as u32, + ) + } + } + } + #[allow(unused_unsafe, clippy::all)] + pub fn subscribe_duration(when: Duration) -> Pollable { + unsafe { + #[cfg(target_arch = "wasm32")] + #[link(wasm_import_module = "wasi:clocks/monotonic-clock@0.2.0")] + unsafe extern "C" { + #[link_name = "subscribe-duration"] + fn wit_import0(_: i64) -> i32; + } + #[cfg(not(target_arch = "wasm32"))] + unsafe extern "C" fn wit_import0(_: i64) -> i32 { + unreachable!() + } + let ret = unsafe { wit_import0(_rt::as_i64(when)) }; + unsafe { + super::super::super::wasi::io::poll::Pollable::from_handle( + ret as u32, + ) + } + } + } + } + #[allow(dead_code, async_fn_in_trait, unused_imports, clippy::all)] + pub mod wall_clock { + #[used] + #[doc(hidden)] + static __FORCE_SECTION_REF: fn() = super::super::super::__link_custom_section_describing_imports; + #[repr(C)] + #[derive(Clone, Copy)] + pub struct Datetime { + pub seconds: u64, + pub nanoseconds: u32, + } + impl ::core::fmt::Debug for Datetime { + fn fmt( + &self, + f: &mut ::core::fmt::Formatter<'_>, + ) -> ::core::fmt::Result { + f.debug_struct("Datetime") + .field("seconds", &self.seconds) + .field("nanoseconds", &self.nanoseconds) + .finish() + } + } + #[allow(unused_unsafe, clippy::all)] + pub fn now() -> Datetime { + unsafe { + #[repr(align(8))] + struct RetArea([::core::mem::MaybeUninit; 16]); + let mut ret_area = RetArea([::core::mem::MaybeUninit::uninit(); 16]); + let ptr0 = ret_area.0.as_mut_ptr().cast::(); + #[cfg(target_arch = "wasm32")] + #[link(wasm_import_module = "wasi:clocks/wall-clock@0.2.0")] + unsafe extern "C" { + #[link_name = "now"] + fn wit_import1(_: *mut u8); + } + #[cfg(not(target_arch = "wasm32"))] + unsafe extern "C" fn wit_import1(_: *mut u8) { + unreachable!() + } + unsafe { wit_import1(ptr0) }; + let l2 = *ptr0.add(0).cast::(); + let l3 = *ptr0.add(8).cast::(); + let result4 = Datetime { + seconds: l2 as u64, + nanoseconds: l3 as u32, + }; + result4 + } + } + #[allow(unused_unsafe, clippy::all)] + pub fn resolution() -> Datetime { + unsafe { + #[repr(align(8))] + struct RetArea([::core::mem::MaybeUninit; 16]); + let mut ret_area = RetArea([::core::mem::MaybeUninit::uninit(); 16]); + let ptr0 = ret_area.0.as_mut_ptr().cast::(); + #[cfg(target_arch = "wasm32")] + #[link(wasm_import_module = "wasi:clocks/wall-clock@0.2.0")] + unsafe extern "C" { + #[link_name = "resolution"] + fn wit_import1(_: *mut u8); + } + #[cfg(not(target_arch = "wasm32"))] + unsafe extern "C" fn wit_import1(_: *mut u8) { + unreachable!() + } + unsafe { wit_import1(ptr0) }; + let l2 = *ptr0.add(0).cast::(); + let l3 = *ptr0.add(8).cast::(); + let result4 = Datetime { + seconds: l2 as u64, + nanoseconds: l3 as u32, + }; + result4 + } + } + } + } + pub mod filesystem { + #[allow(dead_code, async_fn_in_trait, unused_imports, clippy::all)] + pub mod types { + #[used] + #[doc(hidden)] + static __FORCE_SECTION_REF: fn() = super::super::super::__link_custom_section_describing_imports; + use super::super::super::_rt; + pub type InputStream = super::super::super::wasi::io::streams::InputStream; + pub type OutputStream = super::super::super::wasi::io::streams::OutputStream; + pub type Error = super::super::super::wasi::io::streams::Error; + pub type Datetime = super::super::super::wasi::clocks::wall_clock::Datetime; + pub type Filesize = u64; + #[repr(u8)] + #[derive(Clone, Copy, Eq, Ord, PartialEq, PartialOrd)] + pub enum DescriptorType { + Unknown, + BlockDevice, + CharacterDevice, + Directory, + Fifo, + SymbolicLink, + RegularFile, + Socket, + } + impl ::core::fmt::Debug for DescriptorType { + fn fmt( + &self, + f: &mut ::core::fmt::Formatter<'_>, + ) -> ::core::fmt::Result { + match self { + DescriptorType::Unknown => { + f.debug_tuple("DescriptorType::Unknown").finish() + } + DescriptorType::BlockDevice => { + f.debug_tuple("DescriptorType::BlockDevice").finish() + } + DescriptorType::CharacterDevice => { + f.debug_tuple("DescriptorType::CharacterDevice").finish() + } + DescriptorType::Directory => { + f.debug_tuple("DescriptorType::Directory").finish() + } + DescriptorType::Fifo => { + f.debug_tuple("DescriptorType::Fifo").finish() + } + DescriptorType::SymbolicLink => { + f.debug_tuple("DescriptorType::SymbolicLink").finish() + } + DescriptorType::RegularFile => { + f.debug_tuple("DescriptorType::RegularFile").finish() + } + DescriptorType::Socket => { + f.debug_tuple("DescriptorType::Socket").finish() + } + } + } + } + impl DescriptorType { + #[doc(hidden)] + pub unsafe fn _lift(val: u8) -> DescriptorType { + if !cfg!(debug_assertions) { + return ::core::mem::transmute(val); + } + match val { + 0 => DescriptorType::Unknown, + 1 => DescriptorType::BlockDevice, + 2 => DescriptorType::CharacterDevice, + 3 => DescriptorType::Directory, + 4 => DescriptorType::Fifo, + 5 => DescriptorType::SymbolicLink, + 6 => DescriptorType::RegularFile, + 7 => DescriptorType::Socket, + _ => panic!("invalid enum discriminant"), + } + } + } + wit_bindgen_rt::bitflags::bitflags! { + #[derive(PartialEq, Eq, PartialOrd, Ord, Hash, Debug, Clone, Copy)] pub + struct DescriptorFlags : u8 { const READ = 1 << 0; const WRITE = 1 << 1; + const FILE_INTEGRITY_SYNC = 1 << 2; const DATA_INTEGRITY_SYNC = 1 << 3; + const REQUESTED_WRITE_SYNC = 1 << 4; const MUTATE_DIRECTORY = 1 << 5; } + } + wit_bindgen_rt::bitflags::bitflags! { + #[derive(PartialEq, Eq, PartialOrd, Ord, Hash, Debug, Clone, Copy)] pub + struct PathFlags : u8 { const SYMLINK_FOLLOW = 1 << 0; } + } + wit_bindgen_rt::bitflags::bitflags! { + #[derive(PartialEq, Eq, PartialOrd, Ord, Hash, Debug, Clone, Copy)] pub + struct OpenFlags : u8 { const CREATE = 1 << 0; const DIRECTORY = 1 << 1; + const EXCLUSIVE = 1 << 2; const TRUNCATE = 1 << 3; } + } + pub type LinkCount = u64; + #[repr(C)] + #[derive(Clone, Copy)] + pub struct DescriptorStat { + pub type_: DescriptorType, + pub link_count: LinkCount, + pub size: Filesize, + pub data_access_timestamp: Option, + pub data_modification_timestamp: Option, + pub status_change_timestamp: Option, + } + impl ::core::fmt::Debug for DescriptorStat { + fn fmt( + &self, + f: &mut ::core::fmt::Formatter<'_>, + ) -> ::core::fmt::Result { + f.debug_struct("DescriptorStat") + .field("type", &self.type_) + .field("link-count", &self.link_count) + .field("size", &self.size) + .field("data-access-timestamp", &self.data_access_timestamp) + .field( + "data-modification-timestamp", + &self.data_modification_timestamp, + ) + .field("status-change-timestamp", &self.status_change_timestamp) + .finish() + } + } + #[derive(Clone, Copy)] + pub enum NewTimestamp { + NoChange, + Now, + Timestamp(Datetime), + } + impl ::core::fmt::Debug for NewTimestamp { + fn fmt( + &self, + f: &mut ::core::fmt::Formatter<'_>, + ) -> ::core::fmt::Result { + match self { + NewTimestamp::NoChange => { + f.debug_tuple("NewTimestamp::NoChange").finish() + } + NewTimestamp::Now => f.debug_tuple("NewTimestamp::Now").finish(), + NewTimestamp::Timestamp(e) => { + f.debug_tuple("NewTimestamp::Timestamp").field(e).finish() + } + } + } + } + #[derive(Clone)] + pub struct DirectoryEntry { + pub type_: DescriptorType, + pub name: _rt::String, + } + impl ::core::fmt::Debug for DirectoryEntry { + fn fmt( + &self, + f: &mut ::core::fmt::Formatter<'_>, + ) -> ::core::fmt::Result { + f.debug_struct("DirectoryEntry") + .field("type", &self.type_) + .field("name", &self.name) + .finish() + } + } + #[repr(u8)] + #[derive(Clone, Copy, Eq, Ord, PartialEq, PartialOrd)] + pub enum ErrorCode { + Access, + WouldBlock, + Already, + BadDescriptor, + Busy, + Deadlock, + Quota, + Exist, + FileTooLarge, + IllegalByteSequence, + InProgress, + Interrupted, + Invalid, + Io, + IsDirectory, + Loop, + TooManyLinks, + MessageSize, + NameTooLong, + NoDevice, + NoEntry, + NoLock, + InsufficientMemory, + InsufficientSpace, + NotDirectory, + NotEmpty, + NotRecoverable, + Unsupported, + NoTty, + NoSuchDevice, + Overflow, + NotPermitted, + Pipe, + ReadOnly, + InvalidSeek, + TextFileBusy, + CrossDevice, + } + impl ErrorCode { + pub fn name(&self) -> &'static str { + match self { + ErrorCode::Access => "access", + ErrorCode::WouldBlock => "would-block", + ErrorCode::Already => "already", + ErrorCode::BadDescriptor => "bad-descriptor", + ErrorCode::Busy => "busy", + ErrorCode::Deadlock => "deadlock", + ErrorCode::Quota => "quota", + ErrorCode::Exist => "exist", + ErrorCode::FileTooLarge => "file-too-large", + ErrorCode::IllegalByteSequence => "illegal-byte-sequence", + ErrorCode::InProgress => "in-progress", + ErrorCode::Interrupted => "interrupted", + ErrorCode::Invalid => "invalid", + ErrorCode::Io => "io", + ErrorCode::IsDirectory => "is-directory", + ErrorCode::Loop => "loop", + ErrorCode::TooManyLinks => "too-many-links", + ErrorCode::MessageSize => "message-size", + ErrorCode::NameTooLong => "name-too-long", + ErrorCode::NoDevice => "no-device", + ErrorCode::NoEntry => "no-entry", + ErrorCode::NoLock => "no-lock", + ErrorCode::InsufficientMemory => "insufficient-memory", + ErrorCode::InsufficientSpace => "insufficient-space", + ErrorCode::NotDirectory => "not-directory", + ErrorCode::NotEmpty => "not-empty", + ErrorCode::NotRecoverable => "not-recoverable", + ErrorCode::Unsupported => "unsupported", + ErrorCode::NoTty => "no-tty", + ErrorCode::NoSuchDevice => "no-such-device", + ErrorCode::Overflow => "overflow", + ErrorCode::NotPermitted => "not-permitted", + ErrorCode::Pipe => "pipe", + ErrorCode::ReadOnly => "read-only", + ErrorCode::InvalidSeek => "invalid-seek", + ErrorCode::TextFileBusy => "text-file-busy", + ErrorCode::CrossDevice => "cross-device", + } + } + pub fn message(&self) -> &'static str { + match self { + ErrorCode::Access => "", + ErrorCode::WouldBlock => "", + ErrorCode::Already => "", + ErrorCode::BadDescriptor => "", + ErrorCode::Busy => "", + ErrorCode::Deadlock => "", + ErrorCode::Quota => "", + ErrorCode::Exist => "", + ErrorCode::FileTooLarge => "", + ErrorCode::IllegalByteSequence => "", + ErrorCode::InProgress => "", + ErrorCode::Interrupted => "", + ErrorCode::Invalid => "", + ErrorCode::Io => "", + ErrorCode::IsDirectory => "", + ErrorCode::Loop => "", + ErrorCode::TooManyLinks => "", + ErrorCode::MessageSize => "", + ErrorCode::NameTooLong => "", + ErrorCode::NoDevice => "", + ErrorCode::NoEntry => "", + ErrorCode::NoLock => "", + ErrorCode::InsufficientMemory => "", + ErrorCode::InsufficientSpace => "", + ErrorCode::NotDirectory => "", + ErrorCode::NotEmpty => "", + ErrorCode::NotRecoverable => "", + ErrorCode::Unsupported => "", + ErrorCode::NoTty => "", + ErrorCode::NoSuchDevice => "", + ErrorCode::Overflow => "", + ErrorCode::NotPermitted => "", + ErrorCode::Pipe => "", + ErrorCode::ReadOnly => "", + ErrorCode::InvalidSeek => "", + ErrorCode::TextFileBusy => "", + ErrorCode::CrossDevice => "", + } + } + } + impl ::core::fmt::Debug for ErrorCode { + fn fmt( + &self, + f: &mut ::core::fmt::Formatter<'_>, + ) -> ::core::fmt::Result { + f.debug_struct("ErrorCode") + .field("code", &(*self as i32)) + .field("name", &self.name()) + .field("message", &self.message()) + .finish() + } + } + impl ::core::fmt::Display for ErrorCode { + fn fmt( + &self, + f: &mut ::core::fmt::Formatter<'_>, + ) -> ::core::fmt::Result { + write!(f, "{} (error {})", self.name(), * self as i32) + } + } + impl std::error::Error for ErrorCode {} + impl ErrorCode { + #[doc(hidden)] + pub unsafe fn _lift(val: u8) -> ErrorCode { + if !cfg!(debug_assertions) { + return ::core::mem::transmute(val); + } + match val { + 0 => ErrorCode::Access, + 1 => ErrorCode::WouldBlock, + 2 => ErrorCode::Already, + 3 => ErrorCode::BadDescriptor, + 4 => ErrorCode::Busy, + 5 => ErrorCode::Deadlock, + 6 => ErrorCode::Quota, + 7 => ErrorCode::Exist, + 8 => ErrorCode::FileTooLarge, + 9 => ErrorCode::IllegalByteSequence, + 10 => ErrorCode::InProgress, + 11 => ErrorCode::Interrupted, + 12 => ErrorCode::Invalid, + 13 => ErrorCode::Io, + 14 => ErrorCode::IsDirectory, + 15 => ErrorCode::Loop, + 16 => ErrorCode::TooManyLinks, + 17 => ErrorCode::MessageSize, + 18 => ErrorCode::NameTooLong, + 19 => ErrorCode::NoDevice, + 20 => ErrorCode::NoEntry, + 21 => ErrorCode::NoLock, + 22 => ErrorCode::InsufficientMemory, + 23 => ErrorCode::InsufficientSpace, + 24 => ErrorCode::NotDirectory, + 25 => ErrorCode::NotEmpty, + 26 => ErrorCode::NotRecoverable, + 27 => ErrorCode::Unsupported, + 28 => ErrorCode::NoTty, + 29 => ErrorCode::NoSuchDevice, + 30 => ErrorCode::Overflow, + 31 => ErrorCode::NotPermitted, + 32 => ErrorCode::Pipe, + 33 => ErrorCode::ReadOnly, + 34 => ErrorCode::InvalidSeek, + 35 => ErrorCode::TextFileBusy, + 36 => ErrorCode::CrossDevice, + _ => panic!("invalid enum discriminant"), + } + } + } + #[repr(u8)] + #[derive(Clone, Copy, Eq, Ord, PartialEq, PartialOrd)] + pub enum Advice { + Normal, + Sequential, + Random, + WillNeed, + DontNeed, + NoReuse, + } + impl ::core::fmt::Debug for Advice { + fn fmt( + &self, + f: &mut ::core::fmt::Formatter<'_>, + ) -> ::core::fmt::Result { + match self { + Advice::Normal => f.debug_tuple("Advice::Normal").finish(), + Advice::Sequential => { + f.debug_tuple("Advice::Sequential").finish() + } + Advice::Random => f.debug_tuple("Advice::Random").finish(), + Advice::WillNeed => f.debug_tuple("Advice::WillNeed").finish(), + Advice::DontNeed => f.debug_tuple("Advice::DontNeed").finish(), + Advice::NoReuse => f.debug_tuple("Advice::NoReuse").finish(), + } + } + } + impl Advice { + #[doc(hidden)] + pub unsafe fn _lift(val: u8) -> Advice { + if !cfg!(debug_assertions) { + return ::core::mem::transmute(val); + } + match val { + 0 => Advice::Normal, + 1 => Advice::Sequential, + 2 => Advice::Random, + 3 => Advice::WillNeed, + 4 => Advice::DontNeed, + 5 => Advice::NoReuse, + _ => panic!("invalid enum discriminant"), + } + } + } + #[repr(C)] + #[derive(Clone, Copy)] + pub struct MetadataHashValue { + pub lower: u64, + pub upper: u64, + } + impl ::core::fmt::Debug for MetadataHashValue { + fn fmt( + &self, + f: &mut ::core::fmt::Formatter<'_>, + ) -> ::core::fmt::Result { + f.debug_struct("MetadataHashValue") + .field("lower", &self.lower) + .field("upper", &self.upper) + .finish() + } + } + #[derive(Debug)] + #[repr(transparent)] + pub struct Descriptor { + handle: _rt::Resource, + } + impl Descriptor { + #[doc(hidden)] + pub unsafe fn from_handle(handle: u32) -> Self { + Self { + handle: unsafe { _rt::Resource::from_handle(handle) }, + } + } + #[doc(hidden)] + pub fn take_handle(&self) -> u32 { + _rt::Resource::take_handle(&self.handle) + } + #[doc(hidden)] + pub fn handle(&self) -> u32 { + _rt::Resource::handle(&self.handle) + } + } + unsafe impl _rt::WasmResource for Descriptor { + #[inline] + unsafe fn drop(_handle: u32) { + #[cfg(not(target_arch = "wasm32"))] + unreachable!(); + #[cfg(target_arch = "wasm32")] + { + #[link(wasm_import_module = "wasi:filesystem/types@0.2.0")] + unsafe extern "C" { + #[link_name = "[resource-drop]descriptor"] + fn drop(_: u32); + } + unsafe { drop(_handle) }; + } + } + } + #[derive(Debug)] + #[repr(transparent)] + pub struct DirectoryEntryStream { + handle: _rt::Resource, + } + impl DirectoryEntryStream { + #[doc(hidden)] + pub unsafe fn from_handle(handle: u32) -> Self { + Self { + handle: unsafe { _rt::Resource::from_handle(handle) }, + } + } + #[doc(hidden)] + pub fn take_handle(&self) -> u32 { + _rt::Resource::take_handle(&self.handle) + } + #[doc(hidden)] + pub fn handle(&self) -> u32 { + _rt::Resource::handle(&self.handle) + } + } + unsafe impl _rt::WasmResource for DirectoryEntryStream { + #[inline] + unsafe fn drop(_handle: u32) { + #[cfg(not(target_arch = "wasm32"))] + unreachable!(); + #[cfg(target_arch = "wasm32")] + { + #[link(wasm_import_module = "wasi:filesystem/types@0.2.0")] + unsafe extern "C" { + #[link_name = "[resource-drop]directory-entry-stream"] + fn drop(_: u32); + } + unsafe { drop(_handle) }; + } + } + } + impl Descriptor { + #[allow(unused_unsafe, clippy::all)] + pub fn read_via_stream( + &self, + offset: Filesize, + ) -> Result { + unsafe { + #[repr(align(4))] + struct RetArea([::core::mem::MaybeUninit; 8]); + let mut ret_area = RetArea( + [::core::mem::MaybeUninit::uninit(); 8], + ); + let ptr0 = ret_area.0.as_mut_ptr().cast::(); + #[cfg(target_arch = "wasm32")] + #[link(wasm_import_module = "wasi:filesystem/types@0.2.0")] + unsafe extern "C" { + #[link_name = "[method]descriptor.read-via-stream"] + fn wit_import1(_: i32, _: i64, _: *mut u8); + } + #[cfg(not(target_arch = "wasm32"))] + unsafe extern "C" fn wit_import1(_: i32, _: i64, _: *mut u8) { + unreachable!() + } + unsafe { + wit_import1( + (self).handle() as i32, + _rt::as_i64(offset), + ptr0, + ) + }; + let l2 = i32::from(*ptr0.add(0).cast::()); + let result5 = match l2 { + 0 => { + let e = { + let l3 = *ptr0.add(4).cast::(); + unsafe { + super::super::super::wasi::io::streams::InputStream::from_handle( + l3 as u32, + ) + } + }; + Ok(e) + } + 1 => { + let e = { + let l4 = i32::from(*ptr0.add(4).cast::()); + ErrorCode::_lift(l4 as u8) + }; + Err(e) + } + _ => _rt::invalid_enum_discriminant(), + }; + result5 + } + } + } + impl Descriptor { + #[allow(unused_unsafe, clippy::all)] + pub fn write_via_stream( + &self, + offset: Filesize, + ) -> Result { + unsafe { + #[repr(align(4))] + struct RetArea([::core::mem::MaybeUninit; 8]); + let mut ret_area = RetArea( + [::core::mem::MaybeUninit::uninit(); 8], + ); + let ptr0 = ret_area.0.as_mut_ptr().cast::(); + #[cfg(target_arch = "wasm32")] + #[link(wasm_import_module = "wasi:filesystem/types@0.2.0")] + unsafe extern "C" { + #[link_name = "[method]descriptor.write-via-stream"] + fn wit_import1(_: i32, _: i64, _: *mut u8); + } + #[cfg(not(target_arch = "wasm32"))] + unsafe extern "C" fn wit_import1(_: i32, _: i64, _: *mut u8) { + unreachable!() + } + unsafe { + wit_import1( + (self).handle() as i32, + _rt::as_i64(offset), + ptr0, + ) + }; + let l2 = i32::from(*ptr0.add(0).cast::()); + let result5 = match l2 { + 0 => { + let e = { + let l3 = *ptr0.add(4).cast::(); + unsafe { + super::super::super::wasi::io::streams::OutputStream::from_handle( + l3 as u32, + ) + } + }; + Ok(e) + } + 1 => { + let e = { + let l4 = i32::from(*ptr0.add(4).cast::()); + ErrorCode::_lift(l4 as u8) + }; + Err(e) + } + _ => _rt::invalid_enum_discriminant(), + }; + result5 + } + } + } + impl Descriptor { + #[allow(unused_unsafe, clippy::all)] + pub fn append_via_stream(&self) -> Result { + unsafe { + #[repr(align(4))] + struct RetArea([::core::mem::MaybeUninit; 8]); + let mut ret_area = RetArea( + [::core::mem::MaybeUninit::uninit(); 8], + ); + let ptr0 = ret_area.0.as_mut_ptr().cast::(); + #[cfg(target_arch = "wasm32")] + #[link(wasm_import_module = "wasi:filesystem/types@0.2.0")] + unsafe extern "C" { + #[link_name = "[method]descriptor.append-via-stream"] + fn wit_import1(_: i32, _: *mut u8); + } + #[cfg(not(target_arch = "wasm32"))] + unsafe extern "C" fn wit_import1(_: i32, _: *mut u8) { + unreachable!() + } + unsafe { wit_import1((self).handle() as i32, ptr0) }; + let l2 = i32::from(*ptr0.add(0).cast::()); + let result5 = match l2 { + 0 => { + let e = { + let l3 = *ptr0.add(4).cast::(); + unsafe { + super::super::super::wasi::io::streams::OutputStream::from_handle( + l3 as u32, + ) + } + }; + Ok(e) + } + 1 => { + let e = { + let l4 = i32::from(*ptr0.add(4).cast::()); + ErrorCode::_lift(l4 as u8) + }; + Err(e) + } + _ => _rt::invalid_enum_discriminant(), + }; + result5 + } + } + } + impl Descriptor { + #[allow(unused_unsafe, clippy::all)] + pub fn advise( + &self, + offset: Filesize, + length: Filesize, + advice: Advice, + ) -> Result<(), ErrorCode> { + unsafe { + #[repr(align(1))] + struct RetArea([::core::mem::MaybeUninit; 2]); + let mut ret_area = RetArea( + [::core::mem::MaybeUninit::uninit(); 2], + ); + let ptr0 = ret_area.0.as_mut_ptr().cast::(); + #[cfg(target_arch = "wasm32")] + #[link(wasm_import_module = "wasi:filesystem/types@0.2.0")] + unsafe extern "C" { + #[link_name = "[method]descriptor.advise"] + fn wit_import1(_: i32, _: i64, _: i64, _: i32, _: *mut u8); + } + #[cfg(not(target_arch = "wasm32"))] + unsafe extern "C" fn wit_import1( + _: i32, + _: i64, + _: i64, + _: i32, + _: *mut u8, + ) { + unreachable!() + } + unsafe { + wit_import1( + (self).handle() as i32, + _rt::as_i64(offset), + _rt::as_i64(length), + advice.clone() as i32, + ptr0, + ) + }; + let l2 = i32::from(*ptr0.add(0).cast::()); + let result4 = match l2 { + 0 => { + let e = (); + Ok(e) + } + 1 => { + let e = { + let l3 = i32::from(*ptr0.add(1).cast::()); + ErrorCode::_lift(l3 as u8) + }; + Err(e) + } + _ => _rt::invalid_enum_discriminant(), + }; + result4 + } + } + } + impl Descriptor { + #[allow(unused_unsafe, clippy::all)] + pub fn sync_data(&self) -> Result<(), ErrorCode> { + unsafe { + #[repr(align(1))] + struct RetArea([::core::mem::MaybeUninit; 2]); + let mut ret_area = RetArea( + [::core::mem::MaybeUninit::uninit(); 2], + ); + let ptr0 = ret_area.0.as_mut_ptr().cast::(); + #[cfg(target_arch = "wasm32")] + #[link(wasm_import_module = "wasi:filesystem/types@0.2.0")] + unsafe extern "C" { + #[link_name = "[method]descriptor.sync-data"] + fn wit_import1(_: i32, _: *mut u8); + } + #[cfg(not(target_arch = "wasm32"))] + unsafe extern "C" fn wit_import1(_: i32, _: *mut u8) { + unreachable!() + } + unsafe { wit_import1((self).handle() as i32, ptr0) }; + let l2 = i32::from(*ptr0.add(0).cast::()); + let result4 = match l2 { + 0 => { + let e = (); + Ok(e) + } + 1 => { + let e = { + let l3 = i32::from(*ptr0.add(1).cast::()); + ErrorCode::_lift(l3 as u8) + }; + Err(e) + } + _ => _rt::invalid_enum_discriminant(), + }; + result4 + } + } + } + impl Descriptor { + #[allow(unused_unsafe, clippy::all)] + pub fn get_flags(&self) -> Result { + unsafe { + #[repr(align(1))] + struct RetArea([::core::mem::MaybeUninit; 2]); + let mut ret_area = RetArea( + [::core::mem::MaybeUninit::uninit(); 2], + ); + let ptr0 = ret_area.0.as_mut_ptr().cast::(); + #[cfg(target_arch = "wasm32")] + #[link(wasm_import_module = "wasi:filesystem/types@0.2.0")] + unsafe extern "C" { + #[link_name = "[method]descriptor.get-flags"] + fn wit_import1(_: i32, _: *mut u8); + } + #[cfg(not(target_arch = "wasm32"))] + unsafe extern "C" fn wit_import1(_: i32, _: *mut u8) { + unreachable!() + } + unsafe { wit_import1((self).handle() as i32, ptr0) }; + let l2 = i32::from(*ptr0.add(0).cast::()); + let result5 = match l2 { + 0 => { + let e = { + let l3 = i32::from(*ptr0.add(1).cast::()); + DescriptorFlags::empty() + | DescriptorFlags::from_bits_retain(((l3 as u8) << 0) as _) + }; + Ok(e) + } + 1 => { + let e = { + let l4 = i32::from(*ptr0.add(1).cast::()); + ErrorCode::_lift(l4 as u8) + }; + Err(e) + } + _ => _rt::invalid_enum_discriminant(), + }; + result5 + } + } + } + impl Descriptor { + #[allow(unused_unsafe, clippy::all)] + pub fn get_type(&self) -> Result { + unsafe { + #[repr(align(1))] + struct RetArea([::core::mem::MaybeUninit; 2]); + let mut ret_area = RetArea( + [::core::mem::MaybeUninit::uninit(); 2], + ); + let ptr0 = ret_area.0.as_mut_ptr().cast::(); + #[cfg(target_arch = "wasm32")] + #[link(wasm_import_module = "wasi:filesystem/types@0.2.0")] + unsafe extern "C" { + #[link_name = "[method]descriptor.get-type"] + fn wit_import1(_: i32, _: *mut u8); + } + #[cfg(not(target_arch = "wasm32"))] + unsafe extern "C" fn wit_import1(_: i32, _: *mut u8) { + unreachable!() + } + unsafe { wit_import1((self).handle() as i32, ptr0) }; + let l2 = i32::from(*ptr0.add(0).cast::()); + let result5 = match l2 { + 0 => { + let e = { + let l3 = i32::from(*ptr0.add(1).cast::()); + DescriptorType::_lift(l3 as u8) + }; + Ok(e) + } + 1 => { + let e = { + let l4 = i32::from(*ptr0.add(1).cast::()); + ErrorCode::_lift(l4 as u8) + }; + Err(e) + } + _ => _rt::invalid_enum_discriminant(), + }; + result5 + } + } + } + impl Descriptor { + #[allow(unused_unsafe, clippy::all)] + pub fn set_size(&self, size: Filesize) -> Result<(), ErrorCode> { + unsafe { + #[repr(align(1))] + struct RetArea([::core::mem::MaybeUninit; 2]); + let mut ret_area = RetArea( + [::core::mem::MaybeUninit::uninit(); 2], + ); + let ptr0 = ret_area.0.as_mut_ptr().cast::(); + #[cfg(target_arch = "wasm32")] + #[link(wasm_import_module = "wasi:filesystem/types@0.2.0")] + unsafe extern "C" { + #[link_name = "[method]descriptor.set-size"] + fn wit_import1(_: i32, _: i64, _: *mut u8); + } + #[cfg(not(target_arch = "wasm32"))] + unsafe extern "C" fn wit_import1(_: i32, _: i64, _: *mut u8) { + unreachable!() + } + unsafe { + wit_import1((self).handle() as i32, _rt::as_i64(size), ptr0) + }; + let l2 = i32::from(*ptr0.add(0).cast::()); + let result4 = match l2 { + 0 => { + let e = (); + Ok(e) + } + 1 => { + let e = { + let l3 = i32::from(*ptr0.add(1).cast::()); + ErrorCode::_lift(l3 as u8) + }; + Err(e) + } + _ => _rt::invalid_enum_discriminant(), + }; + result4 + } + } + } + impl Descriptor { + #[allow(unused_unsafe, clippy::all)] + pub fn set_times( + &self, + data_access_timestamp: NewTimestamp, + data_modification_timestamp: NewTimestamp, + ) -> Result<(), ErrorCode> { + unsafe { + #[repr(align(1))] + struct RetArea([::core::mem::MaybeUninit; 2]); + let mut ret_area = RetArea( + [::core::mem::MaybeUninit::uninit(); 2], + ); + let (result1_0, result1_1, result1_2) = match data_access_timestamp { + NewTimestamp::NoChange => (0i32, 0i64, 0i32), + NewTimestamp::Now => (1i32, 0i64, 0i32), + NewTimestamp::Timestamp(e) => { + let super::super::super::wasi::clocks::wall_clock::Datetime { + seconds: seconds0, + nanoseconds: nanoseconds0, + } = e; + (2i32, _rt::as_i64(seconds0), _rt::as_i32(nanoseconds0)) + } + }; + let (result3_0, result3_1, result3_2) = match data_modification_timestamp { + NewTimestamp::NoChange => (0i32, 0i64, 0i32), + NewTimestamp::Now => (1i32, 0i64, 0i32), + NewTimestamp::Timestamp(e) => { + let super::super::super::wasi::clocks::wall_clock::Datetime { + seconds: seconds2, + nanoseconds: nanoseconds2, + } = e; + (2i32, _rt::as_i64(seconds2), _rt::as_i32(nanoseconds2)) + } + }; + let ptr4 = ret_area.0.as_mut_ptr().cast::(); + #[cfg(target_arch = "wasm32")] + #[link(wasm_import_module = "wasi:filesystem/types@0.2.0")] + unsafe extern "C" { + #[link_name = "[method]descriptor.set-times"] + fn wit_import5( + _: i32, + _: i32, + _: i64, + _: i32, + _: i32, + _: i64, + _: i32, + _: *mut u8, + ); + } + #[cfg(not(target_arch = "wasm32"))] + unsafe extern "C" fn wit_import5( + _: i32, + _: i32, + _: i64, + _: i32, + _: i32, + _: i64, + _: i32, + _: *mut u8, + ) { + unreachable!() + } + unsafe { + wit_import5( + (self).handle() as i32, + result1_0, + result1_1, + result1_2, + result3_0, + result3_1, + result3_2, + ptr4, + ) + }; + let l6 = i32::from(*ptr4.add(0).cast::()); + let result8 = match l6 { + 0 => { + let e = (); + Ok(e) + } + 1 => { + let e = { + let l7 = i32::from(*ptr4.add(1).cast::()); + ErrorCode::_lift(l7 as u8) + }; + Err(e) + } + _ => _rt::invalid_enum_discriminant(), + }; + result8 + } + } + } + impl Descriptor { + #[allow(unused_unsafe, clippy::all)] + pub fn read( + &self, + length: Filesize, + offset: Filesize, + ) -> Result<(_rt::Vec, bool), ErrorCode> { + unsafe { + #[cfg_attr(target_pointer_width = "64", repr(align(8)))] + #[cfg_attr(target_pointer_width = "32", repr(align(4)))] + struct RetArea( + [::core::mem::MaybeUninit< + u8, + >; 4 * ::core::mem::size_of::<*const u8>()], + ); + let mut ret_area = RetArea( + [::core::mem::MaybeUninit::uninit(); 4 + * ::core::mem::size_of::<*const u8>()], + ); + let ptr0 = ret_area.0.as_mut_ptr().cast::(); + #[cfg(target_arch = "wasm32")] + #[link(wasm_import_module = "wasi:filesystem/types@0.2.0")] + unsafe extern "C" { + #[link_name = "[method]descriptor.read"] + fn wit_import1(_: i32, _: i64, _: i64, _: *mut u8); + } + #[cfg(not(target_arch = "wasm32"))] + unsafe extern "C" fn wit_import1( + _: i32, + _: i64, + _: i64, + _: *mut u8, + ) { + unreachable!() + } + unsafe { + wit_import1( + (self).handle() as i32, + _rt::as_i64(length), + _rt::as_i64(offset), + ptr0, + ) + }; + let l2 = i32::from(*ptr0.add(0).cast::()); + let result8 = match l2 { + 0 => { + let e = { + let l3 = *ptr0 + .add(::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l4 = *ptr0 + .add(2 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len5 = l4; + let l6 = i32::from( + *ptr0 + .add(3 * ::core::mem::size_of::<*const u8>()) + .cast::(), + ); + ( + _rt::Vec::from_raw_parts(l3.cast(), len5, len5), + _rt::bool_lift(l6 as u8), + ) + }; + Ok(e) + } + 1 => { + let e = { + let l7 = i32::from( + *ptr0.add(::core::mem::size_of::<*const u8>()).cast::(), + ); + ErrorCode::_lift(l7 as u8) + }; + Err(e) + } + _ => _rt::invalid_enum_discriminant(), + }; + result8 + } + } + } + impl Descriptor { + #[allow(unused_unsafe, clippy::all)] + pub fn write( + &self, + buffer: &[u8], + offset: Filesize, + ) -> Result { + unsafe { + #[repr(align(8))] + struct RetArea([::core::mem::MaybeUninit; 16]); + let mut ret_area = RetArea( + [::core::mem::MaybeUninit::uninit(); 16], + ); + let vec0 = buffer; + let ptr0 = vec0.as_ptr().cast::(); + let len0 = vec0.len(); + let ptr1 = ret_area.0.as_mut_ptr().cast::(); + #[cfg(target_arch = "wasm32")] + #[link(wasm_import_module = "wasi:filesystem/types@0.2.0")] + unsafe extern "C" { + #[link_name = "[method]descriptor.write"] + fn wit_import2( + _: i32, + _: *mut u8, + _: usize, + _: i64, + _: *mut u8, + ); + } + #[cfg(not(target_arch = "wasm32"))] + unsafe extern "C" fn wit_import2( + _: i32, + _: *mut u8, + _: usize, + _: i64, + _: *mut u8, + ) { + unreachable!() + } + unsafe { + wit_import2( + (self).handle() as i32, + ptr0.cast_mut(), + len0, + _rt::as_i64(offset), + ptr1, + ) + }; + let l3 = i32::from(*ptr1.add(0).cast::()); + let result6 = match l3 { + 0 => { + let e = { + let l4 = *ptr1.add(8).cast::(); + l4 as u64 + }; + Ok(e) + } + 1 => { + let e = { + let l5 = i32::from(*ptr1.add(8).cast::()); + ErrorCode::_lift(l5 as u8) + }; + Err(e) + } + _ => _rt::invalid_enum_discriminant(), + }; + result6 + } + } + } + impl Descriptor { + #[allow(unused_unsafe, clippy::all)] + pub fn read_directory(&self) -> Result { + unsafe { + #[repr(align(4))] + struct RetArea([::core::mem::MaybeUninit; 8]); + let mut ret_area = RetArea( + [::core::mem::MaybeUninit::uninit(); 8], + ); + let ptr0 = ret_area.0.as_mut_ptr().cast::(); + #[cfg(target_arch = "wasm32")] + #[link(wasm_import_module = "wasi:filesystem/types@0.2.0")] + unsafe extern "C" { + #[link_name = "[method]descriptor.read-directory"] + fn wit_import1(_: i32, _: *mut u8); + } + #[cfg(not(target_arch = "wasm32"))] + unsafe extern "C" fn wit_import1(_: i32, _: *mut u8) { + unreachable!() + } + unsafe { wit_import1((self).handle() as i32, ptr0) }; + let l2 = i32::from(*ptr0.add(0).cast::()); + let result5 = match l2 { + 0 => { + let e = { + let l3 = *ptr0.add(4).cast::(); + unsafe { DirectoryEntryStream::from_handle(l3 as u32) } + }; + Ok(e) + } + 1 => { + let e = { + let l4 = i32::from(*ptr0.add(4).cast::()); + ErrorCode::_lift(l4 as u8) + }; + Err(e) + } + _ => _rt::invalid_enum_discriminant(), + }; + result5 + } + } + } + impl Descriptor { + #[allow(unused_unsafe, clippy::all)] + pub fn sync(&self) -> Result<(), ErrorCode> { + unsafe { + #[repr(align(1))] + struct RetArea([::core::mem::MaybeUninit; 2]); + let mut ret_area = RetArea( + [::core::mem::MaybeUninit::uninit(); 2], + ); + let ptr0 = ret_area.0.as_mut_ptr().cast::(); + #[cfg(target_arch = "wasm32")] + #[link(wasm_import_module = "wasi:filesystem/types@0.2.0")] + unsafe extern "C" { + #[link_name = "[method]descriptor.sync"] + fn wit_import1(_: i32, _: *mut u8); + } + #[cfg(not(target_arch = "wasm32"))] + unsafe extern "C" fn wit_import1(_: i32, _: *mut u8) { + unreachable!() + } + unsafe { wit_import1((self).handle() as i32, ptr0) }; + let l2 = i32::from(*ptr0.add(0).cast::()); + let result4 = match l2 { + 0 => { + let e = (); + Ok(e) + } + 1 => { + let e = { + let l3 = i32::from(*ptr0.add(1).cast::()); + ErrorCode::_lift(l3 as u8) + }; + Err(e) + } + _ => _rt::invalid_enum_discriminant(), + }; + result4 + } + } + } + impl Descriptor { + #[allow(unused_unsafe, clippy::all)] + pub fn create_directory_at(&self, path: &str) -> Result<(), ErrorCode> { + unsafe { + #[repr(align(1))] + struct RetArea([::core::mem::MaybeUninit; 2]); + let mut ret_area = RetArea( + [::core::mem::MaybeUninit::uninit(); 2], + ); + let vec0 = path; + let ptr0 = vec0.as_ptr().cast::(); + let len0 = vec0.len(); + let ptr1 = ret_area.0.as_mut_ptr().cast::(); + #[cfg(target_arch = "wasm32")] + #[link(wasm_import_module = "wasi:filesystem/types@0.2.0")] + unsafe extern "C" { + #[link_name = "[method]descriptor.create-directory-at"] + fn wit_import2(_: i32, _: *mut u8, _: usize, _: *mut u8); + } + #[cfg(not(target_arch = "wasm32"))] + unsafe extern "C" fn wit_import2( + _: i32, + _: *mut u8, + _: usize, + _: *mut u8, + ) { + unreachable!() + } + unsafe { + wit_import2( + (self).handle() as i32, + ptr0.cast_mut(), + len0, + ptr1, + ) + }; + let l3 = i32::from(*ptr1.add(0).cast::()); + let result5 = match l3 { + 0 => { + let e = (); + Ok(e) + } + 1 => { + let e = { + let l4 = i32::from(*ptr1.add(1).cast::()); + ErrorCode::_lift(l4 as u8) + }; + Err(e) + } + _ => _rt::invalid_enum_discriminant(), + }; + result5 + } + } + } + impl Descriptor { + #[allow(unused_unsafe, clippy::all)] + pub fn stat(&self) -> Result { + unsafe { + #[repr(align(8))] + struct RetArea([::core::mem::MaybeUninit; 104]); + let mut ret_area = RetArea( + [::core::mem::MaybeUninit::uninit(); 104], + ); + let ptr0 = ret_area.0.as_mut_ptr().cast::(); + #[cfg(target_arch = "wasm32")] + #[link(wasm_import_module = "wasi:filesystem/types@0.2.0")] + unsafe extern "C" { + #[link_name = "[method]descriptor.stat"] + fn wit_import1(_: i32, _: *mut u8); + } + #[cfg(not(target_arch = "wasm32"))] + unsafe extern "C" fn wit_import1(_: i32, _: *mut u8) { + unreachable!() + } + unsafe { wit_import1((self).handle() as i32, ptr0) }; + let l2 = i32::from(*ptr0.add(0).cast::()); + let result16 = match l2 { + 0 => { + let e = { + let l3 = i32::from(*ptr0.add(8).cast::()); + let l4 = *ptr0.add(16).cast::(); + let l5 = *ptr0.add(24).cast::(); + let l6 = i32::from(*ptr0.add(32).cast::()); + let l9 = i32::from(*ptr0.add(56).cast::()); + let l12 = i32::from(*ptr0.add(80).cast::()); + DescriptorStat { + type_: DescriptorType::_lift(l3 as u8), + link_count: l4 as u64, + size: l5 as u64, + data_access_timestamp: match l6 { + 0 => None, + 1 => { + let e = { + let l7 = *ptr0.add(40).cast::(); + let l8 = *ptr0.add(48).cast::(); + super::super::super::wasi::clocks::wall_clock::Datetime { + seconds: l7 as u64, + nanoseconds: l8 as u32, + } + }; + Some(e) + } + _ => _rt::invalid_enum_discriminant(), + }, + data_modification_timestamp: match l9 { + 0 => None, + 1 => { + let e = { + let l10 = *ptr0.add(64).cast::(); + let l11 = *ptr0.add(72).cast::(); + super::super::super::wasi::clocks::wall_clock::Datetime { + seconds: l10 as u64, + nanoseconds: l11 as u32, + } + }; + Some(e) + } + _ => _rt::invalid_enum_discriminant(), + }, + status_change_timestamp: match l12 { + 0 => None, + 1 => { + let e = { + let l13 = *ptr0.add(88).cast::(); + let l14 = *ptr0.add(96).cast::(); + super::super::super::wasi::clocks::wall_clock::Datetime { + seconds: l13 as u64, + nanoseconds: l14 as u32, + } + }; + Some(e) + } + _ => _rt::invalid_enum_discriminant(), + }, + } + }; + Ok(e) + } + 1 => { + let e = { + let l15 = i32::from(*ptr0.add(8).cast::()); + ErrorCode::_lift(l15 as u8) + }; + Err(e) + } + _ => _rt::invalid_enum_discriminant(), + }; + result16 + } + } + } + impl Descriptor { + #[allow(unused_unsafe, clippy::all)] + pub fn stat_at( + &self, + path_flags: PathFlags, + path: &str, + ) -> Result { + unsafe { + #[repr(align(8))] + struct RetArea([::core::mem::MaybeUninit; 104]); + let mut ret_area = RetArea( + [::core::mem::MaybeUninit::uninit(); 104], + ); + let flags0 = path_flags; + let vec1 = path; + let ptr1 = vec1.as_ptr().cast::(); + let len1 = vec1.len(); + let ptr2 = ret_area.0.as_mut_ptr().cast::(); + #[cfg(target_arch = "wasm32")] + #[link(wasm_import_module = "wasi:filesystem/types@0.2.0")] + unsafe extern "C" { + #[link_name = "[method]descriptor.stat-at"] + fn wit_import3( + _: i32, + _: i32, + _: *mut u8, + _: usize, + _: *mut u8, + ); + } + #[cfg(not(target_arch = "wasm32"))] + unsafe extern "C" fn wit_import3( + _: i32, + _: i32, + _: *mut u8, + _: usize, + _: *mut u8, + ) { + unreachable!() + } + unsafe { + wit_import3( + (self).handle() as i32, + (flags0.bits() >> 0) as i32, + ptr1.cast_mut(), + len1, + ptr2, + ) + }; + let l4 = i32::from(*ptr2.add(0).cast::()); + let result18 = match l4 { + 0 => { + let e = { + let l5 = i32::from(*ptr2.add(8).cast::()); + let l6 = *ptr2.add(16).cast::(); + let l7 = *ptr2.add(24).cast::(); + let l8 = i32::from(*ptr2.add(32).cast::()); + let l11 = i32::from(*ptr2.add(56).cast::()); + let l14 = i32::from(*ptr2.add(80).cast::()); + DescriptorStat { + type_: DescriptorType::_lift(l5 as u8), + link_count: l6 as u64, + size: l7 as u64, + data_access_timestamp: match l8 { + 0 => None, + 1 => { + let e = { + let l9 = *ptr2.add(40).cast::(); + let l10 = *ptr2.add(48).cast::(); + super::super::super::wasi::clocks::wall_clock::Datetime { + seconds: l9 as u64, + nanoseconds: l10 as u32, + } + }; + Some(e) + } + _ => _rt::invalid_enum_discriminant(), + }, + data_modification_timestamp: match l11 { + 0 => None, + 1 => { + let e = { + let l12 = *ptr2.add(64).cast::(); + let l13 = *ptr2.add(72).cast::(); + super::super::super::wasi::clocks::wall_clock::Datetime { + seconds: l12 as u64, + nanoseconds: l13 as u32, + } + }; + Some(e) + } + _ => _rt::invalid_enum_discriminant(), + }, + status_change_timestamp: match l14 { + 0 => None, + 1 => { + let e = { + let l15 = *ptr2.add(88).cast::(); + let l16 = *ptr2.add(96).cast::(); + super::super::super::wasi::clocks::wall_clock::Datetime { + seconds: l15 as u64, + nanoseconds: l16 as u32, + } + }; + Some(e) + } + _ => _rt::invalid_enum_discriminant(), + }, + } + }; + Ok(e) + } + 1 => { + let e = { + let l17 = i32::from(*ptr2.add(8).cast::()); + ErrorCode::_lift(l17 as u8) + }; + Err(e) + } + _ => _rt::invalid_enum_discriminant(), + }; + result18 + } + } + } + impl Descriptor { + #[allow(unused_unsafe, clippy::all)] + pub fn set_times_at( + &self, + path_flags: PathFlags, + path: &str, + data_access_timestamp: NewTimestamp, + data_modification_timestamp: NewTimestamp, + ) -> Result<(), ErrorCode> { + unsafe { + #[repr(align(1))] + struct RetArea([::core::mem::MaybeUninit; 2]); + let mut ret_area = RetArea( + [::core::mem::MaybeUninit::uninit(); 2], + ); + let flags0 = path_flags; + let vec1 = path; + let ptr1 = vec1.as_ptr().cast::(); + let len1 = vec1.len(); + let (result3_0, result3_1, result3_2) = match data_access_timestamp { + NewTimestamp::NoChange => (0i32, 0i64, 0i32), + NewTimestamp::Now => (1i32, 0i64, 0i32), + NewTimestamp::Timestamp(e) => { + let super::super::super::wasi::clocks::wall_clock::Datetime { + seconds: seconds2, + nanoseconds: nanoseconds2, + } = e; + (2i32, _rt::as_i64(seconds2), _rt::as_i32(nanoseconds2)) + } + }; + let (result5_0, result5_1, result5_2) = match data_modification_timestamp { + NewTimestamp::NoChange => (0i32, 0i64, 0i32), + NewTimestamp::Now => (1i32, 0i64, 0i32), + NewTimestamp::Timestamp(e) => { + let super::super::super::wasi::clocks::wall_clock::Datetime { + seconds: seconds4, + nanoseconds: nanoseconds4, + } = e; + (2i32, _rt::as_i64(seconds4), _rt::as_i32(nanoseconds4)) + } + }; + let ptr6 = ret_area.0.as_mut_ptr().cast::(); + #[cfg(target_arch = "wasm32")] + #[link(wasm_import_module = "wasi:filesystem/types@0.2.0")] + unsafe extern "C" { + #[link_name = "[method]descriptor.set-times-at"] + fn wit_import7( + _: i32, + _: i32, + _: *mut u8, + _: usize, + _: i32, + _: i64, + _: i32, + _: i32, + _: i64, + _: i32, + _: *mut u8, + ); + } + #[cfg(not(target_arch = "wasm32"))] + unsafe extern "C" fn wit_import7( + _: i32, + _: i32, + _: *mut u8, + _: usize, + _: i32, + _: i64, + _: i32, + _: i32, + _: i64, + _: i32, + _: *mut u8, + ) { + unreachable!() + } + unsafe { + wit_import7( + (self).handle() as i32, + (flags0.bits() >> 0) as i32, + ptr1.cast_mut(), + len1, + result3_0, + result3_1, + result3_2, + result5_0, + result5_1, + result5_2, + ptr6, + ) + }; + let l8 = i32::from(*ptr6.add(0).cast::()); + let result10 = match l8 { + 0 => { + let e = (); + Ok(e) + } + 1 => { + let e = { + let l9 = i32::from(*ptr6.add(1).cast::()); + ErrorCode::_lift(l9 as u8) + }; + Err(e) + } + _ => _rt::invalid_enum_discriminant(), + }; + result10 + } + } + } + impl Descriptor { + #[allow(unused_unsafe, clippy::all)] + pub fn link_at( + &self, + old_path_flags: PathFlags, + old_path: &str, + new_descriptor: &Descriptor, + new_path: &str, + ) -> Result<(), ErrorCode> { + unsafe { + #[repr(align(1))] + struct RetArea([::core::mem::MaybeUninit; 2]); + let mut ret_area = RetArea( + [::core::mem::MaybeUninit::uninit(); 2], + ); + let flags0 = old_path_flags; + let vec1 = old_path; + let ptr1 = vec1.as_ptr().cast::(); + let len1 = vec1.len(); + let vec2 = new_path; + let ptr2 = vec2.as_ptr().cast::(); + let len2 = vec2.len(); + let ptr3 = ret_area.0.as_mut_ptr().cast::(); + #[cfg(target_arch = "wasm32")] + #[link(wasm_import_module = "wasi:filesystem/types@0.2.0")] + unsafe extern "C" { + #[link_name = "[method]descriptor.link-at"] + fn wit_import4( + _: i32, + _: i32, + _: *mut u8, + _: usize, + _: i32, + _: *mut u8, + _: usize, + _: *mut u8, + ); + } + #[cfg(not(target_arch = "wasm32"))] + unsafe extern "C" fn wit_import4( + _: i32, + _: i32, + _: *mut u8, + _: usize, + _: i32, + _: *mut u8, + _: usize, + _: *mut u8, + ) { + unreachable!() + } + unsafe { + wit_import4( + (self).handle() as i32, + (flags0.bits() >> 0) as i32, + ptr1.cast_mut(), + len1, + (new_descriptor).handle() as i32, + ptr2.cast_mut(), + len2, + ptr3, + ) + }; + let l5 = i32::from(*ptr3.add(0).cast::()); + let result7 = match l5 { + 0 => { + let e = (); + Ok(e) + } + 1 => { + let e = { + let l6 = i32::from(*ptr3.add(1).cast::()); + ErrorCode::_lift(l6 as u8) + }; + Err(e) + } + _ => _rt::invalid_enum_discriminant(), + }; + result7 + } + } + } + impl Descriptor { + #[allow(unused_unsafe, clippy::all)] + pub fn open_at( + &self, + path_flags: PathFlags, + path: &str, + open_flags: OpenFlags, + flags: DescriptorFlags, + ) -> Result { + unsafe { + #[repr(align(4))] + struct RetArea([::core::mem::MaybeUninit; 8]); + let mut ret_area = RetArea( + [::core::mem::MaybeUninit::uninit(); 8], + ); + let flags0 = path_flags; + let vec1 = path; + let ptr1 = vec1.as_ptr().cast::(); + let len1 = vec1.len(); + let flags2 = open_flags; + let flags3 = flags; + let ptr4 = ret_area.0.as_mut_ptr().cast::(); + #[cfg(target_arch = "wasm32")] + #[link(wasm_import_module = "wasi:filesystem/types@0.2.0")] + unsafe extern "C" { + #[link_name = "[method]descriptor.open-at"] + fn wit_import5( + _: i32, + _: i32, + _: *mut u8, + _: usize, + _: i32, + _: i32, + _: *mut u8, + ); + } + #[cfg(not(target_arch = "wasm32"))] + unsafe extern "C" fn wit_import5( + _: i32, + _: i32, + _: *mut u8, + _: usize, + _: i32, + _: i32, + _: *mut u8, + ) { + unreachable!() + } + unsafe { + wit_import5( + (self).handle() as i32, + (flags0.bits() >> 0) as i32, + ptr1.cast_mut(), + len1, + (flags2.bits() >> 0) as i32, + (flags3.bits() >> 0) as i32, + ptr4, + ) + }; + let l6 = i32::from(*ptr4.add(0).cast::()); + let result9 = match l6 { + 0 => { + let e = { + let l7 = *ptr4.add(4).cast::(); + unsafe { Descriptor::from_handle(l7 as u32) } + }; + Ok(e) + } + 1 => { + let e = { + let l8 = i32::from(*ptr4.add(4).cast::()); + ErrorCode::_lift(l8 as u8) + }; + Err(e) + } + _ => _rt::invalid_enum_discriminant(), + }; + result9 + } + } + } + impl Descriptor { + #[allow(unused_unsafe, clippy::all)] + pub fn readlink_at(&self, path: &str) -> Result<_rt::String, ErrorCode> { + unsafe { + #[cfg_attr(target_pointer_width = "64", repr(align(8)))] + #[cfg_attr(target_pointer_width = "32", repr(align(4)))] + struct RetArea( + [::core::mem::MaybeUninit< + u8, + >; 3 * ::core::mem::size_of::<*const u8>()], + ); + let mut ret_area = RetArea( + [::core::mem::MaybeUninit::uninit(); 3 + * ::core::mem::size_of::<*const u8>()], + ); + let vec0 = path; + let ptr0 = vec0.as_ptr().cast::(); + let len0 = vec0.len(); + let ptr1 = ret_area.0.as_mut_ptr().cast::(); + #[cfg(target_arch = "wasm32")] + #[link(wasm_import_module = "wasi:filesystem/types@0.2.0")] + unsafe extern "C" { + #[link_name = "[method]descriptor.readlink-at"] + fn wit_import2(_: i32, _: *mut u8, _: usize, _: *mut u8); + } + #[cfg(not(target_arch = "wasm32"))] + unsafe extern "C" fn wit_import2( + _: i32, + _: *mut u8, + _: usize, + _: *mut u8, + ) { + unreachable!() + } + unsafe { + wit_import2( + (self).handle() as i32, + ptr0.cast_mut(), + len0, + ptr1, + ) + }; + let l3 = i32::from(*ptr1.add(0).cast::()); + let result8 = match l3 { + 0 => { + let e = { + let l4 = *ptr1 + .add(::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l5 = *ptr1 + .add(2 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len6 = l5; + let bytes6 = _rt::Vec::from_raw_parts( + l4.cast(), + len6, + len6, + ); + _rt::string_lift(bytes6) + }; + Ok(e) + } + 1 => { + let e = { + let l7 = i32::from( + *ptr1.add(::core::mem::size_of::<*const u8>()).cast::(), + ); + ErrorCode::_lift(l7 as u8) + }; + Err(e) + } + _ => _rt::invalid_enum_discriminant(), + }; + result8 + } + } + } + impl Descriptor { + #[allow(unused_unsafe, clippy::all)] + pub fn remove_directory_at(&self, path: &str) -> Result<(), ErrorCode> { + unsafe { + #[repr(align(1))] + struct RetArea([::core::mem::MaybeUninit; 2]); + let mut ret_area = RetArea( + [::core::mem::MaybeUninit::uninit(); 2], + ); + let vec0 = path; + let ptr0 = vec0.as_ptr().cast::(); + let len0 = vec0.len(); + let ptr1 = ret_area.0.as_mut_ptr().cast::(); + #[cfg(target_arch = "wasm32")] + #[link(wasm_import_module = "wasi:filesystem/types@0.2.0")] + unsafe extern "C" { + #[link_name = "[method]descriptor.remove-directory-at"] + fn wit_import2(_: i32, _: *mut u8, _: usize, _: *mut u8); + } + #[cfg(not(target_arch = "wasm32"))] + unsafe extern "C" fn wit_import2( + _: i32, + _: *mut u8, + _: usize, + _: *mut u8, + ) { + unreachable!() + } + unsafe { + wit_import2( + (self).handle() as i32, + ptr0.cast_mut(), + len0, + ptr1, + ) + }; + let l3 = i32::from(*ptr1.add(0).cast::()); + let result5 = match l3 { + 0 => { + let e = (); + Ok(e) + } + 1 => { + let e = { + let l4 = i32::from(*ptr1.add(1).cast::()); + ErrorCode::_lift(l4 as u8) + }; + Err(e) + } + _ => _rt::invalid_enum_discriminant(), + }; + result5 + } + } + } + impl Descriptor { + #[allow(unused_unsafe, clippy::all)] + pub fn rename_at( + &self, + old_path: &str, + new_descriptor: &Descriptor, + new_path: &str, + ) -> Result<(), ErrorCode> { + unsafe { + #[repr(align(1))] + struct RetArea([::core::mem::MaybeUninit; 2]); + let mut ret_area = RetArea( + [::core::mem::MaybeUninit::uninit(); 2], + ); + let vec0 = old_path; + let ptr0 = vec0.as_ptr().cast::(); + let len0 = vec0.len(); + let vec1 = new_path; + let ptr1 = vec1.as_ptr().cast::(); + let len1 = vec1.len(); + let ptr2 = ret_area.0.as_mut_ptr().cast::(); + #[cfg(target_arch = "wasm32")] + #[link(wasm_import_module = "wasi:filesystem/types@0.2.0")] + unsafe extern "C" { + #[link_name = "[method]descriptor.rename-at"] + fn wit_import3( + _: i32, + _: *mut u8, + _: usize, + _: i32, + _: *mut u8, + _: usize, + _: *mut u8, + ); + } + #[cfg(not(target_arch = "wasm32"))] + unsafe extern "C" fn wit_import3( + _: i32, + _: *mut u8, + _: usize, + _: i32, + _: *mut u8, + _: usize, + _: *mut u8, + ) { + unreachable!() + } + unsafe { + wit_import3( + (self).handle() as i32, + ptr0.cast_mut(), + len0, + (new_descriptor).handle() as i32, + ptr1.cast_mut(), + len1, + ptr2, + ) + }; + let l4 = i32::from(*ptr2.add(0).cast::()); + let result6 = match l4 { + 0 => { + let e = (); + Ok(e) + } + 1 => { + let e = { + let l5 = i32::from(*ptr2.add(1).cast::()); + ErrorCode::_lift(l5 as u8) + }; + Err(e) + } + _ => _rt::invalid_enum_discriminant(), + }; + result6 + } + } + } + impl Descriptor { + #[allow(unused_unsafe, clippy::all)] + pub fn symlink_at( + &self, + old_path: &str, + new_path: &str, + ) -> Result<(), ErrorCode> { + unsafe { + #[repr(align(1))] + struct RetArea([::core::mem::MaybeUninit; 2]); + let mut ret_area = RetArea( + [::core::mem::MaybeUninit::uninit(); 2], + ); + let vec0 = old_path; + let ptr0 = vec0.as_ptr().cast::(); + let len0 = vec0.len(); + let vec1 = new_path; + let ptr1 = vec1.as_ptr().cast::(); + let len1 = vec1.len(); + let ptr2 = ret_area.0.as_mut_ptr().cast::(); + #[cfg(target_arch = "wasm32")] + #[link(wasm_import_module = "wasi:filesystem/types@0.2.0")] + unsafe extern "C" { + #[link_name = "[method]descriptor.symlink-at"] + fn wit_import3( + _: i32, + _: *mut u8, + _: usize, + _: *mut u8, + _: usize, + _: *mut u8, + ); + } + #[cfg(not(target_arch = "wasm32"))] + unsafe extern "C" fn wit_import3( + _: i32, + _: *mut u8, + _: usize, + _: *mut u8, + _: usize, + _: *mut u8, + ) { + unreachable!() + } + unsafe { + wit_import3( + (self).handle() as i32, + ptr0.cast_mut(), + len0, + ptr1.cast_mut(), + len1, + ptr2, + ) + }; + let l4 = i32::from(*ptr2.add(0).cast::()); + let result6 = match l4 { + 0 => { + let e = (); + Ok(e) + } + 1 => { + let e = { + let l5 = i32::from(*ptr2.add(1).cast::()); + ErrorCode::_lift(l5 as u8) + }; + Err(e) + } + _ => _rt::invalid_enum_discriminant(), + }; + result6 + } + } + } + impl Descriptor { + #[allow(unused_unsafe, clippy::all)] + pub fn unlink_file_at(&self, path: &str) -> Result<(), ErrorCode> { + unsafe { + #[repr(align(1))] + struct RetArea([::core::mem::MaybeUninit; 2]); + let mut ret_area = RetArea( + [::core::mem::MaybeUninit::uninit(); 2], + ); + let vec0 = path; + let ptr0 = vec0.as_ptr().cast::(); + let len0 = vec0.len(); + let ptr1 = ret_area.0.as_mut_ptr().cast::(); + #[cfg(target_arch = "wasm32")] + #[link(wasm_import_module = "wasi:filesystem/types@0.2.0")] + unsafe extern "C" { + #[link_name = "[method]descriptor.unlink-file-at"] + fn wit_import2(_: i32, _: *mut u8, _: usize, _: *mut u8); + } + #[cfg(not(target_arch = "wasm32"))] + unsafe extern "C" fn wit_import2( + _: i32, + _: *mut u8, + _: usize, + _: *mut u8, + ) { + unreachable!() + } + unsafe { + wit_import2( + (self).handle() as i32, + ptr0.cast_mut(), + len0, + ptr1, + ) + }; + let l3 = i32::from(*ptr1.add(0).cast::()); + let result5 = match l3 { + 0 => { + let e = (); + Ok(e) + } + 1 => { + let e = { + let l4 = i32::from(*ptr1.add(1).cast::()); + ErrorCode::_lift(l4 as u8) + }; + Err(e) + } + _ => _rt::invalid_enum_discriminant(), + }; + result5 + } + } + } + impl Descriptor { + #[allow(unused_unsafe, clippy::all)] + pub fn is_same_object(&self, other: &Descriptor) -> bool { + unsafe { + #[cfg(target_arch = "wasm32")] + #[link(wasm_import_module = "wasi:filesystem/types@0.2.0")] + unsafe extern "C" { + #[link_name = "[method]descriptor.is-same-object"] + fn wit_import0(_: i32, _: i32) -> i32; + } + #[cfg(not(target_arch = "wasm32"))] + unsafe extern "C" fn wit_import0(_: i32, _: i32) -> i32 { + unreachable!() + } + let ret = unsafe { + wit_import0((self).handle() as i32, (other).handle() as i32) + }; + _rt::bool_lift(ret as u8) + } + } + } + impl Descriptor { + #[allow(unused_unsafe, clippy::all)] + pub fn metadata_hash(&self) -> Result { + unsafe { + #[repr(align(8))] + struct RetArea([::core::mem::MaybeUninit; 24]); + let mut ret_area = RetArea( + [::core::mem::MaybeUninit::uninit(); 24], + ); + let ptr0 = ret_area.0.as_mut_ptr().cast::(); + #[cfg(target_arch = "wasm32")] + #[link(wasm_import_module = "wasi:filesystem/types@0.2.0")] + unsafe extern "C" { + #[link_name = "[method]descriptor.metadata-hash"] + fn wit_import1(_: i32, _: *mut u8); + } + #[cfg(not(target_arch = "wasm32"))] + unsafe extern "C" fn wit_import1(_: i32, _: *mut u8) { + unreachable!() + } + unsafe { wit_import1((self).handle() as i32, ptr0) }; + let l2 = i32::from(*ptr0.add(0).cast::()); + let result6 = match l2 { + 0 => { + let e = { + let l3 = *ptr0.add(8).cast::(); + let l4 = *ptr0.add(16).cast::(); + MetadataHashValue { + lower: l3 as u64, + upper: l4 as u64, + } + }; + Ok(e) + } + 1 => { + let e = { + let l5 = i32::from(*ptr0.add(8).cast::()); + ErrorCode::_lift(l5 as u8) + }; + Err(e) + } + _ => _rt::invalid_enum_discriminant(), + }; + result6 + } + } + } + impl Descriptor { + #[allow(unused_unsafe, clippy::all)] + pub fn metadata_hash_at( + &self, + path_flags: PathFlags, + path: &str, + ) -> Result { + unsafe { + #[repr(align(8))] + struct RetArea([::core::mem::MaybeUninit; 24]); + let mut ret_area = RetArea( + [::core::mem::MaybeUninit::uninit(); 24], + ); + let flags0 = path_flags; + let vec1 = path; + let ptr1 = vec1.as_ptr().cast::(); + let len1 = vec1.len(); + let ptr2 = ret_area.0.as_mut_ptr().cast::(); + #[cfg(target_arch = "wasm32")] + #[link(wasm_import_module = "wasi:filesystem/types@0.2.0")] + unsafe extern "C" { + #[link_name = "[method]descriptor.metadata-hash-at"] + fn wit_import3( + _: i32, + _: i32, + _: *mut u8, + _: usize, + _: *mut u8, + ); + } + #[cfg(not(target_arch = "wasm32"))] + unsafe extern "C" fn wit_import3( + _: i32, + _: i32, + _: *mut u8, + _: usize, + _: *mut u8, + ) { + unreachable!() + } + unsafe { + wit_import3( + (self).handle() as i32, + (flags0.bits() >> 0) as i32, + ptr1.cast_mut(), + len1, + ptr2, + ) + }; + let l4 = i32::from(*ptr2.add(0).cast::()); + let result8 = match l4 { + 0 => { + let e = { + let l5 = *ptr2.add(8).cast::(); + let l6 = *ptr2.add(16).cast::(); + MetadataHashValue { + lower: l5 as u64, + upper: l6 as u64, + } + }; + Ok(e) + } + 1 => { + let e = { + let l7 = i32::from(*ptr2.add(8).cast::()); + ErrorCode::_lift(l7 as u8) + }; + Err(e) + } + _ => _rt::invalid_enum_discriminant(), + }; + result8 + } + } + } + impl DirectoryEntryStream { + #[allow(unused_unsafe, clippy::all)] + pub fn read_directory_entry( + &self, + ) -> Result, ErrorCode> { + unsafe { + #[cfg_attr(target_pointer_width = "64", repr(align(8)))] + #[cfg_attr(target_pointer_width = "32", repr(align(4)))] + struct RetArea( + [::core::mem::MaybeUninit< + u8, + >; 5 * ::core::mem::size_of::<*const u8>()], + ); + let mut ret_area = RetArea( + [::core::mem::MaybeUninit::uninit(); 5 + * ::core::mem::size_of::<*const u8>()], + ); + let ptr0 = ret_area.0.as_mut_ptr().cast::(); + #[cfg(target_arch = "wasm32")] + #[link(wasm_import_module = "wasi:filesystem/types@0.2.0")] + unsafe extern "C" { + #[link_name = "[method]directory-entry-stream.read-directory-entry"] + fn wit_import1(_: i32, _: *mut u8); + } + #[cfg(not(target_arch = "wasm32"))] + unsafe extern "C" fn wit_import1(_: i32, _: *mut u8) { + unreachable!() + } + unsafe { wit_import1((self).handle() as i32, ptr0) }; + let l2 = i32::from(*ptr0.add(0).cast::()); + let result9 = match l2 { + 0 => { + let e = { + let l3 = i32::from( + *ptr0.add(::core::mem::size_of::<*const u8>()).cast::(), + ); + match l3 { + 0 => None, + 1 => { + let e = { + let l4 = i32::from( + *ptr0 + .add(2 * ::core::mem::size_of::<*const u8>()) + .cast::(), + ); + let l5 = *ptr0 + .add(3 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l6 = *ptr0 + .add(4 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len7 = l6; + let bytes7 = _rt::Vec::from_raw_parts( + l5.cast(), + len7, + len7, + ); + DirectoryEntry { + type_: DescriptorType::_lift(l4 as u8), + name: _rt::string_lift(bytes7), + } + }; + Some(e) + } + _ => _rt::invalid_enum_discriminant(), + } + }; + Ok(e) + } + 1 => { + let e = { + let l8 = i32::from( + *ptr0.add(::core::mem::size_of::<*const u8>()).cast::(), + ); + ErrorCode::_lift(l8 as u8) + }; + Err(e) + } + _ => _rt::invalid_enum_discriminant(), + }; + result9 + } + } + } + #[allow(unused_unsafe, clippy::all)] + pub fn filesystem_error_code(err: &Error) -> Option { + unsafe { + #[repr(align(1))] + struct RetArea([::core::mem::MaybeUninit; 2]); + let mut ret_area = RetArea([::core::mem::MaybeUninit::uninit(); 2]); + let ptr0 = ret_area.0.as_mut_ptr().cast::(); + #[cfg(target_arch = "wasm32")] + #[link(wasm_import_module = "wasi:filesystem/types@0.2.0")] + unsafe extern "C" { + #[link_name = "filesystem-error-code"] + fn wit_import1(_: i32, _: *mut u8); + } + #[cfg(not(target_arch = "wasm32"))] + unsafe extern "C" fn wit_import1(_: i32, _: *mut u8) { + unreachable!() + } + unsafe { wit_import1((err).handle() as i32, ptr0) }; + let l2 = i32::from(*ptr0.add(0).cast::()); + let result4 = match l2 { + 0 => None, + 1 => { + let e = { + let l3 = i32::from(*ptr0.add(1).cast::()); + ErrorCode::_lift(l3 as u8) + }; + Some(e) + } + _ => _rt::invalid_enum_discriminant(), + }; + result4 + } + } + } + #[allow(dead_code, async_fn_in_trait, unused_imports, clippy::all)] + pub mod preopens { + #[used] + #[doc(hidden)] + static __FORCE_SECTION_REF: fn() = super::super::super::__link_custom_section_describing_imports; + use super::super::super::_rt; + pub type Descriptor = super::super::super::wasi::filesystem::types::Descriptor; + #[allow(unused_unsafe, clippy::all)] + pub fn get_directories() -> _rt::Vec<(Descriptor, _rt::String)> { + unsafe { + #[cfg_attr(target_pointer_width = "64", repr(align(8)))] + #[cfg_attr(target_pointer_width = "32", repr(align(4)))] + struct RetArea( + [::core::mem::MaybeUninit< + u8, + >; 2 * ::core::mem::size_of::<*const u8>()], + ); + let mut ret_area = RetArea( + [::core::mem::MaybeUninit::uninit(); 2 + * ::core::mem::size_of::<*const u8>()], + ); + let ptr0 = ret_area.0.as_mut_ptr().cast::(); + #[cfg(target_arch = "wasm32")] + #[link(wasm_import_module = "wasi:filesystem/preopens@0.2.0")] + unsafe extern "C" { + #[link_name = "get-directories"] + fn wit_import1(_: *mut u8); + } + #[cfg(not(target_arch = "wasm32"))] + unsafe extern "C" fn wit_import1(_: *mut u8) { + unreachable!() + } + unsafe { wit_import1(ptr0) }; + let l2 = *ptr0.add(0).cast::<*mut u8>(); + let l3 = *ptr0 + .add(::core::mem::size_of::<*const u8>()) + .cast::(); + let base8 = l2; + let len8 = l3; + let mut result8 = _rt::Vec::with_capacity(len8); + for i in 0..len8 { + let base = base8 + .add(i * (3 * ::core::mem::size_of::<*const u8>())); + let e8 = { + let l4 = *base.add(0).cast::(); + let l5 = *base + .add(::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l6 = *base + .add(2 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len7 = l6; + let bytes7 = _rt::Vec::from_raw_parts(l5.cast(), len7, len7); + ( + unsafe { + super::super::super::wasi::filesystem::types::Descriptor::from_handle( + l4 as u32, + ) + }, + _rt::string_lift(bytes7), + ) + }; + result8.push(e8); + } + _rt::cabi_dealloc( + base8, + len8 * (3 * ::core::mem::size_of::<*const u8>()), + ::core::mem::size_of::<*const u8>(), + ); + let result9 = result8; + result9 + } + } + } + } + pub mod http { + #[allow(dead_code, async_fn_in_trait, unused_imports, clippy::all)] + pub mod types { + #[used] + #[doc(hidden)] + static __FORCE_SECTION_REF: fn() = super::super::super::__link_custom_section_describing_imports; + use super::super::super::_rt; + pub type Duration = super::super::super::wasi::clocks::monotonic_clock::Duration; + pub type InputStream = super::super::super::wasi::io::streams::InputStream; + pub type OutputStream = super::super::super::wasi::io::streams::OutputStream; + pub type IoError = super::super::super::wasi::io::error::Error; + pub type Pollable = super::super::super::wasi::io::poll::Pollable; + #[derive(Clone)] + pub enum Method { + Get, + Head, + Post, + Put, + Delete, + Connect, + Options, + Trace, + Patch, + Other(_rt::String), + } + impl ::core::fmt::Debug for Method { + fn fmt( + &self, + f: &mut ::core::fmt::Formatter<'_>, + ) -> ::core::fmt::Result { + match self { + Method::Get => f.debug_tuple("Method::Get").finish(), + Method::Head => f.debug_tuple("Method::Head").finish(), + Method::Post => f.debug_tuple("Method::Post").finish(), + Method::Put => f.debug_tuple("Method::Put").finish(), + Method::Delete => f.debug_tuple("Method::Delete").finish(), + Method::Connect => f.debug_tuple("Method::Connect").finish(), + Method::Options => f.debug_tuple("Method::Options").finish(), + Method::Trace => f.debug_tuple("Method::Trace").finish(), + Method::Patch => f.debug_tuple("Method::Patch").finish(), + Method::Other(e) => { + f.debug_tuple("Method::Other").field(e).finish() + } + } + } + } + #[derive(Clone)] + pub enum Scheme { + Http, + Https, + Other(_rt::String), + } + impl ::core::fmt::Debug for Scheme { + fn fmt( + &self, + f: &mut ::core::fmt::Formatter<'_>, + ) -> ::core::fmt::Result { + match self { + Scheme::Http => f.debug_tuple("Scheme::Http").finish(), + Scheme::Https => f.debug_tuple("Scheme::Https").finish(), + Scheme::Other(e) => { + f.debug_tuple("Scheme::Other").field(e).finish() + } + } + } + } + #[derive(Clone)] + pub struct DnsErrorPayload { + pub rcode: Option<_rt::String>, + pub info_code: Option, + } + impl ::core::fmt::Debug for DnsErrorPayload { + fn fmt( + &self, + f: &mut ::core::fmt::Formatter<'_>, + ) -> ::core::fmt::Result { + f.debug_struct("DnsErrorPayload") + .field("rcode", &self.rcode) + .field("info-code", &self.info_code) + .finish() + } + } + #[derive(Clone)] + pub struct TlsAlertReceivedPayload { + pub alert_id: Option, + pub alert_message: Option<_rt::String>, + } + impl ::core::fmt::Debug for TlsAlertReceivedPayload { + fn fmt( + &self, + f: &mut ::core::fmt::Formatter<'_>, + ) -> ::core::fmt::Result { + f.debug_struct("TlsAlertReceivedPayload") + .field("alert-id", &self.alert_id) + .field("alert-message", &self.alert_message) + .finish() + } + } + #[derive(Clone)] + pub struct FieldSizePayload { + pub field_name: Option<_rt::String>, + pub field_size: Option, + } + impl ::core::fmt::Debug for FieldSizePayload { + fn fmt( + &self, + f: &mut ::core::fmt::Formatter<'_>, + ) -> ::core::fmt::Result { + f.debug_struct("FieldSizePayload") + .field("field-name", &self.field_name) + .field("field-size", &self.field_size) + .finish() + } + } + #[derive(Clone)] + pub enum ErrorCode { + DnsTimeout, + DnsError(DnsErrorPayload), + DestinationNotFound, + DestinationUnavailable, + DestinationIpProhibited, + DestinationIpUnroutable, + ConnectionRefused, + ConnectionTerminated, + ConnectionTimeout, + ConnectionReadTimeout, + ConnectionWriteTimeout, + ConnectionLimitReached, + TlsProtocolError, + TlsCertificateError, + TlsAlertReceived(TlsAlertReceivedPayload), + HttpRequestDenied, + HttpRequestLengthRequired, + HttpRequestBodySize(Option), + HttpRequestMethodInvalid, + HttpRequestUriInvalid, + HttpRequestUriTooLong, + HttpRequestHeaderSectionSize(Option), + HttpRequestHeaderSize(Option), + HttpRequestTrailerSectionSize(Option), + HttpRequestTrailerSize(FieldSizePayload), + HttpResponseIncomplete, + HttpResponseHeaderSectionSize(Option), + HttpResponseHeaderSize(FieldSizePayload), + HttpResponseBodySize(Option), + HttpResponseTrailerSectionSize(Option), + HttpResponseTrailerSize(FieldSizePayload), + HttpResponseTransferCoding(Option<_rt::String>), + HttpResponseContentCoding(Option<_rt::String>), + HttpResponseTimeout, + HttpUpgradeFailed, + HttpProtocolError, + LoopDetected, + ConfigurationError, + InternalError(Option<_rt::String>), + } + impl ::core::fmt::Debug for ErrorCode { + fn fmt( + &self, + f: &mut ::core::fmt::Formatter<'_>, + ) -> ::core::fmt::Result { + match self { + ErrorCode::DnsTimeout => { + f.debug_tuple("ErrorCode::DnsTimeout").finish() + } + ErrorCode::DnsError(e) => { + f.debug_tuple("ErrorCode::DnsError").field(e).finish() + } + ErrorCode::DestinationNotFound => { + f.debug_tuple("ErrorCode::DestinationNotFound").finish() + } + ErrorCode::DestinationUnavailable => { + f.debug_tuple("ErrorCode::DestinationUnavailable").finish() + } + ErrorCode::DestinationIpProhibited => { + f.debug_tuple("ErrorCode::DestinationIpProhibited").finish() + } + ErrorCode::DestinationIpUnroutable => { + f.debug_tuple("ErrorCode::DestinationIpUnroutable").finish() + } + ErrorCode::ConnectionRefused => { + f.debug_tuple("ErrorCode::ConnectionRefused").finish() + } + ErrorCode::ConnectionTerminated => { + f.debug_tuple("ErrorCode::ConnectionTerminated").finish() + } + ErrorCode::ConnectionTimeout => { + f.debug_tuple("ErrorCode::ConnectionTimeout").finish() + } + ErrorCode::ConnectionReadTimeout => { + f.debug_tuple("ErrorCode::ConnectionReadTimeout").finish() + } + ErrorCode::ConnectionWriteTimeout => { + f.debug_tuple("ErrorCode::ConnectionWriteTimeout").finish() + } + ErrorCode::ConnectionLimitReached => { + f.debug_tuple("ErrorCode::ConnectionLimitReached").finish() + } + ErrorCode::TlsProtocolError => { + f.debug_tuple("ErrorCode::TlsProtocolError").finish() + } + ErrorCode::TlsCertificateError => { + f.debug_tuple("ErrorCode::TlsCertificateError").finish() + } + ErrorCode::TlsAlertReceived(e) => { + f.debug_tuple("ErrorCode::TlsAlertReceived") + .field(e) + .finish() + } + ErrorCode::HttpRequestDenied => { + f.debug_tuple("ErrorCode::HttpRequestDenied").finish() + } + ErrorCode::HttpRequestLengthRequired => { + f.debug_tuple("ErrorCode::HttpRequestLengthRequired") + .finish() + } + ErrorCode::HttpRequestBodySize(e) => { + f.debug_tuple("ErrorCode::HttpRequestBodySize") + .field(e) + .finish() + } + ErrorCode::HttpRequestMethodInvalid => { + f.debug_tuple("ErrorCode::HttpRequestMethodInvalid").finish() + } + ErrorCode::HttpRequestUriInvalid => { + f.debug_tuple("ErrorCode::HttpRequestUriInvalid").finish() + } + ErrorCode::HttpRequestUriTooLong => { + f.debug_tuple("ErrorCode::HttpRequestUriTooLong").finish() + } + ErrorCode::HttpRequestHeaderSectionSize(e) => { + f.debug_tuple("ErrorCode::HttpRequestHeaderSectionSize") + .field(e) + .finish() + } + ErrorCode::HttpRequestHeaderSize(e) => { + f.debug_tuple("ErrorCode::HttpRequestHeaderSize") + .field(e) + .finish() + } + ErrorCode::HttpRequestTrailerSectionSize(e) => { + f.debug_tuple("ErrorCode::HttpRequestTrailerSectionSize") + .field(e) + .finish() + } + ErrorCode::HttpRequestTrailerSize(e) => { + f.debug_tuple("ErrorCode::HttpRequestTrailerSize") + .field(e) + .finish() + } + ErrorCode::HttpResponseIncomplete => { + f.debug_tuple("ErrorCode::HttpResponseIncomplete").finish() + } + ErrorCode::HttpResponseHeaderSectionSize(e) => { + f.debug_tuple("ErrorCode::HttpResponseHeaderSectionSize") + .field(e) + .finish() + } + ErrorCode::HttpResponseHeaderSize(e) => { + f.debug_tuple("ErrorCode::HttpResponseHeaderSize") + .field(e) + .finish() + } + ErrorCode::HttpResponseBodySize(e) => { + f.debug_tuple("ErrorCode::HttpResponseBodySize") + .field(e) + .finish() + } + ErrorCode::HttpResponseTrailerSectionSize(e) => { + f.debug_tuple("ErrorCode::HttpResponseTrailerSectionSize") + .field(e) + .finish() + } + ErrorCode::HttpResponseTrailerSize(e) => { + f.debug_tuple("ErrorCode::HttpResponseTrailerSize") + .field(e) + .finish() + } + ErrorCode::HttpResponseTransferCoding(e) => { + f.debug_tuple("ErrorCode::HttpResponseTransferCoding") + .field(e) + .finish() + } + ErrorCode::HttpResponseContentCoding(e) => { + f.debug_tuple("ErrorCode::HttpResponseContentCoding") + .field(e) + .finish() + } + ErrorCode::HttpResponseTimeout => { + f.debug_tuple("ErrorCode::HttpResponseTimeout").finish() + } + ErrorCode::HttpUpgradeFailed => { + f.debug_tuple("ErrorCode::HttpUpgradeFailed").finish() + } + ErrorCode::HttpProtocolError => { + f.debug_tuple("ErrorCode::HttpProtocolError").finish() + } + ErrorCode::LoopDetected => { + f.debug_tuple("ErrorCode::LoopDetected").finish() + } + ErrorCode::ConfigurationError => { + f.debug_tuple("ErrorCode::ConfigurationError").finish() + } + ErrorCode::InternalError(e) => { + f.debug_tuple("ErrorCode::InternalError").field(e).finish() + } + } + } + } + impl ::core::fmt::Display for ErrorCode { + fn fmt( + &self, + f: &mut ::core::fmt::Formatter<'_>, + ) -> ::core::fmt::Result { + write!(f, "{:?}", self) + } + } + impl std::error::Error for ErrorCode {} + #[derive(Clone, Copy)] + pub enum HeaderError { + InvalidSyntax, + Forbidden, + Immutable, + } + impl ::core::fmt::Debug for HeaderError { + fn fmt( + &self, + f: &mut ::core::fmt::Formatter<'_>, + ) -> ::core::fmt::Result { + match self { + HeaderError::InvalidSyntax => { + f.debug_tuple("HeaderError::InvalidSyntax").finish() + } + HeaderError::Forbidden => { + f.debug_tuple("HeaderError::Forbidden").finish() + } + HeaderError::Immutable => { + f.debug_tuple("HeaderError::Immutable").finish() + } + } + } + } + impl ::core::fmt::Display for HeaderError { + fn fmt( + &self, + f: &mut ::core::fmt::Formatter<'_>, + ) -> ::core::fmt::Result { + write!(f, "{:?}", self) + } + } + impl std::error::Error for HeaderError {} + pub type FieldKey = _rt::String; + pub type FieldValue = _rt::Vec; + #[derive(Debug)] + #[repr(transparent)] + pub struct Fields { + handle: _rt::Resource, + } + impl Fields { + #[doc(hidden)] + pub unsafe fn from_handle(handle: u32) -> Self { + Self { + handle: unsafe { _rt::Resource::from_handle(handle) }, + } + } + #[doc(hidden)] + pub fn take_handle(&self) -> u32 { + _rt::Resource::take_handle(&self.handle) + } + #[doc(hidden)] + pub fn handle(&self) -> u32 { + _rt::Resource::handle(&self.handle) + } + } + unsafe impl _rt::WasmResource for Fields { + #[inline] + unsafe fn drop(_handle: u32) { + #[cfg(not(target_arch = "wasm32"))] + unreachable!(); + #[cfg(target_arch = "wasm32")] + { + #[link(wasm_import_module = "wasi:http/types@0.2.0")] + unsafe extern "C" { + #[link_name = "[resource-drop]fields"] + fn drop(_: u32); + } + unsafe { drop(_handle) }; + } + } + } + pub type Headers = Fields; + pub type Trailers = Fields; + #[derive(Debug)] + #[repr(transparent)] + pub struct IncomingRequest { + handle: _rt::Resource, + } + impl IncomingRequest { + #[doc(hidden)] + pub unsafe fn from_handle(handle: u32) -> Self { + Self { + handle: unsafe { _rt::Resource::from_handle(handle) }, + } + } + #[doc(hidden)] + pub fn take_handle(&self) -> u32 { + _rt::Resource::take_handle(&self.handle) + } + #[doc(hidden)] + pub fn handle(&self) -> u32 { + _rt::Resource::handle(&self.handle) + } + } + unsafe impl _rt::WasmResource for IncomingRequest { + #[inline] + unsafe fn drop(_handle: u32) { + #[cfg(not(target_arch = "wasm32"))] + unreachable!(); + #[cfg(target_arch = "wasm32")] + { + #[link(wasm_import_module = "wasi:http/types@0.2.0")] + unsafe extern "C" { + #[link_name = "[resource-drop]incoming-request"] + fn drop(_: u32); + } + unsafe { drop(_handle) }; + } + } + } + #[derive(Debug)] + #[repr(transparent)] + pub struct OutgoingRequest { + handle: _rt::Resource, + } + impl OutgoingRequest { + #[doc(hidden)] + pub unsafe fn from_handle(handle: u32) -> Self { + Self { + handle: unsafe { _rt::Resource::from_handle(handle) }, + } + } + #[doc(hidden)] + pub fn take_handle(&self) -> u32 { + _rt::Resource::take_handle(&self.handle) + } + #[doc(hidden)] + pub fn handle(&self) -> u32 { + _rt::Resource::handle(&self.handle) + } + } + unsafe impl _rt::WasmResource for OutgoingRequest { + #[inline] + unsafe fn drop(_handle: u32) { + #[cfg(not(target_arch = "wasm32"))] + unreachable!(); + #[cfg(target_arch = "wasm32")] + { + #[link(wasm_import_module = "wasi:http/types@0.2.0")] + unsafe extern "C" { + #[link_name = "[resource-drop]outgoing-request"] + fn drop(_: u32); + } + unsafe { drop(_handle) }; + } + } + } + #[derive(Debug)] + #[repr(transparent)] + pub struct RequestOptions { + handle: _rt::Resource, + } + impl RequestOptions { + #[doc(hidden)] + pub unsafe fn from_handle(handle: u32) -> Self { + Self { + handle: unsafe { _rt::Resource::from_handle(handle) }, + } + } + #[doc(hidden)] + pub fn take_handle(&self) -> u32 { + _rt::Resource::take_handle(&self.handle) + } + #[doc(hidden)] + pub fn handle(&self) -> u32 { + _rt::Resource::handle(&self.handle) + } + } + unsafe impl _rt::WasmResource for RequestOptions { + #[inline] + unsafe fn drop(_handle: u32) { + #[cfg(not(target_arch = "wasm32"))] + unreachable!(); + #[cfg(target_arch = "wasm32")] + { + #[link(wasm_import_module = "wasi:http/types@0.2.0")] + unsafe extern "C" { + #[link_name = "[resource-drop]request-options"] + fn drop(_: u32); + } + unsafe { drop(_handle) }; + } + } + } + #[derive(Debug)] + #[repr(transparent)] + pub struct ResponseOutparam { + handle: _rt::Resource, + } + impl ResponseOutparam { + #[doc(hidden)] + pub unsafe fn from_handle(handle: u32) -> Self { + Self { + handle: unsafe { _rt::Resource::from_handle(handle) }, + } + } + #[doc(hidden)] + pub fn take_handle(&self) -> u32 { + _rt::Resource::take_handle(&self.handle) + } + #[doc(hidden)] + pub fn handle(&self) -> u32 { + _rt::Resource::handle(&self.handle) + } + } + unsafe impl _rt::WasmResource for ResponseOutparam { + #[inline] + unsafe fn drop(_handle: u32) { + #[cfg(not(target_arch = "wasm32"))] + unreachable!(); + #[cfg(target_arch = "wasm32")] + { + #[link(wasm_import_module = "wasi:http/types@0.2.0")] + unsafe extern "C" { + #[link_name = "[resource-drop]response-outparam"] + fn drop(_: u32); + } + unsafe { drop(_handle) }; + } + } + } + pub type StatusCode = u16; + #[derive(Debug)] + #[repr(transparent)] + pub struct IncomingResponse { + handle: _rt::Resource, + } + impl IncomingResponse { + #[doc(hidden)] + pub unsafe fn from_handle(handle: u32) -> Self { + Self { + handle: unsafe { _rt::Resource::from_handle(handle) }, + } + } + #[doc(hidden)] + pub fn take_handle(&self) -> u32 { + _rt::Resource::take_handle(&self.handle) + } + #[doc(hidden)] + pub fn handle(&self) -> u32 { + _rt::Resource::handle(&self.handle) + } + } + unsafe impl _rt::WasmResource for IncomingResponse { + #[inline] + unsafe fn drop(_handle: u32) { + #[cfg(not(target_arch = "wasm32"))] + unreachable!(); + #[cfg(target_arch = "wasm32")] + { + #[link(wasm_import_module = "wasi:http/types@0.2.0")] + unsafe extern "C" { + #[link_name = "[resource-drop]incoming-response"] + fn drop(_: u32); + } + unsafe { drop(_handle) }; + } + } + } + #[derive(Debug)] + #[repr(transparent)] + pub struct IncomingBody { + handle: _rt::Resource, + } + impl IncomingBody { + #[doc(hidden)] + pub unsafe fn from_handle(handle: u32) -> Self { + Self { + handle: unsafe { _rt::Resource::from_handle(handle) }, + } + } + #[doc(hidden)] + pub fn take_handle(&self) -> u32 { + _rt::Resource::take_handle(&self.handle) + } + #[doc(hidden)] + pub fn handle(&self) -> u32 { + _rt::Resource::handle(&self.handle) + } + } + unsafe impl _rt::WasmResource for IncomingBody { + #[inline] + unsafe fn drop(_handle: u32) { + #[cfg(not(target_arch = "wasm32"))] + unreachable!(); + #[cfg(target_arch = "wasm32")] + { + #[link(wasm_import_module = "wasi:http/types@0.2.0")] + unsafe extern "C" { + #[link_name = "[resource-drop]incoming-body"] + fn drop(_: u32); + } + unsafe { drop(_handle) }; + } + } + } + #[derive(Debug)] + #[repr(transparent)] + pub struct FutureTrailers { + handle: _rt::Resource, + } + impl FutureTrailers { + #[doc(hidden)] + pub unsafe fn from_handle(handle: u32) -> Self { + Self { + handle: unsafe { _rt::Resource::from_handle(handle) }, + } + } + #[doc(hidden)] + pub fn take_handle(&self) -> u32 { + _rt::Resource::take_handle(&self.handle) + } + #[doc(hidden)] + pub fn handle(&self) -> u32 { + _rt::Resource::handle(&self.handle) + } + } + unsafe impl _rt::WasmResource for FutureTrailers { + #[inline] + unsafe fn drop(_handle: u32) { + #[cfg(not(target_arch = "wasm32"))] + unreachable!(); + #[cfg(target_arch = "wasm32")] + { + #[link(wasm_import_module = "wasi:http/types@0.2.0")] + unsafe extern "C" { + #[link_name = "[resource-drop]future-trailers"] + fn drop(_: u32); + } + unsafe { drop(_handle) }; + } + } + } + #[derive(Debug)] + #[repr(transparent)] + pub struct OutgoingResponse { + handle: _rt::Resource, + } + impl OutgoingResponse { + #[doc(hidden)] + pub unsafe fn from_handle(handle: u32) -> Self { + Self { + handle: unsafe { _rt::Resource::from_handle(handle) }, + } + } + #[doc(hidden)] + pub fn take_handle(&self) -> u32 { + _rt::Resource::take_handle(&self.handle) + } + #[doc(hidden)] + pub fn handle(&self) -> u32 { + _rt::Resource::handle(&self.handle) + } + } + unsafe impl _rt::WasmResource for OutgoingResponse { + #[inline] + unsafe fn drop(_handle: u32) { + #[cfg(not(target_arch = "wasm32"))] + unreachable!(); + #[cfg(target_arch = "wasm32")] + { + #[link(wasm_import_module = "wasi:http/types@0.2.0")] + unsafe extern "C" { + #[link_name = "[resource-drop]outgoing-response"] + fn drop(_: u32); + } + unsafe { drop(_handle) }; + } + } + } + #[derive(Debug)] + #[repr(transparent)] + pub struct OutgoingBody { + handle: _rt::Resource, + } + impl OutgoingBody { + #[doc(hidden)] + pub unsafe fn from_handle(handle: u32) -> Self { + Self { + handle: unsafe { _rt::Resource::from_handle(handle) }, + } + } + #[doc(hidden)] + pub fn take_handle(&self) -> u32 { + _rt::Resource::take_handle(&self.handle) + } + #[doc(hidden)] + pub fn handle(&self) -> u32 { + _rt::Resource::handle(&self.handle) + } + } + unsafe impl _rt::WasmResource for OutgoingBody { + #[inline] + unsafe fn drop(_handle: u32) { + #[cfg(not(target_arch = "wasm32"))] + unreachable!(); + #[cfg(target_arch = "wasm32")] + { + #[link(wasm_import_module = "wasi:http/types@0.2.0")] + unsafe extern "C" { + #[link_name = "[resource-drop]outgoing-body"] + fn drop(_: u32); + } + unsafe { drop(_handle) }; + } + } + } + #[derive(Debug)] + #[repr(transparent)] + pub struct FutureIncomingResponse { + handle: _rt::Resource, + } + impl FutureIncomingResponse { + #[doc(hidden)] + pub unsafe fn from_handle(handle: u32) -> Self { + Self { + handle: unsafe { _rt::Resource::from_handle(handle) }, + } + } + #[doc(hidden)] + pub fn take_handle(&self) -> u32 { + _rt::Resource::take_handle(&self.handle) + } + #[doc(hidden)] + pub fn handle(&self) -> u32 { + _rt::Resource::handle(&self.handle) + } + } + unsafe impl _rt::WasmResource for FutureIncomingResponse { + #[inline] + unsafe fn drop(_handle: u32) { + #[cfg(not(target_arch = "wasm32"))] + unreachable!(); + #[cfg(target_arch = "wasm32")] + { + #[link(wasm_import_module = "wasi:http/types@0.2.0")] + unsafe extern "C" { + #[link_name = "[resource-drop]future-incoming-response"] + fn drop(_: u32); + } + unsafe { drop(_handle) }; + } + } + } + impl Fields { + #[allow(unused_unsafe, clippy::all)] + pub fn new() -> Self { + unsafe { + #[cfg(target_arch = "wasm32")] + #[link(wasm_import_module = "wasi:http/types@0.2.0")] + unsafe extern "C" { + #[link_name = "[constructor]fields"] + fn wit_import0() -> i32; + } + #[cfg(not(target_arch = "wasm32"))] + unsafe extern "C" fn wit_import0() -> i32 { + unreachable!() + } + let ret = unsafe { wit_import0() }; + unsafe { Fields::from_handle(ret as u32) } + } + } + } + impl Fields { + #[allow(unused_unsafe, clippy::all)] + pub fn from_list( + entries: &[(FieldKey, FieldValue)], + ) -> Result { + unsafe { + #[repr(align(4))] + struct RetArea([::core::mem::MaybeUninit; 8]); + let mut ret_area = RetArea( + [::core::mem::MaybeUninit::uninit(); 8], + ); + let vec3 = entries; + let len3 = vec3.len(); + let layout3 = _rt::alloc::Layout::from_size_align_unchecked( + vec3.len() * (4 * ::core::mem::size_of::<*const u8>()), + ::core::mem::size_of::<*const u8>(), + ); + let result3 = if layout3.size() != 0 { + let ptr = _rt::alloc::alloc(layout3).cast::(); + if ptr.is_null() { + _rt::alloc::handle_alloc_error(layout3); + } + ptr + } else { + ::core::ptr::null_mut() + }; + for (i, e) in vec3.into_iter().enumerate() { + let base = result3 + .add(i * (4 * ::core::mem::size_of::<*const u8>())); + { + let (t0_0, t0_1) = e; + let vec1 = t0_0; + let ptr1 = vec1.as_ptr().cast::(); + let len1 = vec1.len(); + *base + .add(::core::mem::size_of::<*const u8>()) + .cast::() = len1; + *base.add(0).cast::<*mut u8>() = ptr1.cast_mut(); + let vec2 = t0_1; + let ptr2 = vec2.as_ptr().cast::(); + let len2 = vec2.len(); + *base + .add(3 * ::core::mem::size_of::<*const u8>()) + .cast::() = len2; + *base + .add(2 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>() = ptr2.cast_mut(); + } + } + let ptr4 = ret_area.0.as_mut_ptr().cast::(); + #[cfg(target_arch = "wasm32")] + #[link(wasm_import_module = "wasi:http/types@0.2.0")] + unsafe extern "C" { + #[link_name = "[static]fields.from-list"] + fn wit_import5(_: *mut u8, _: usize, _: *mut u8); + } + #[cfg(not(target_arch = "wasm32"))] + unsafe extern "C" fn wit_import5( + _: *mut u8, + _: usize, + _: *mut u8, + ) { + unreachable!() + } + unsafe { wit_import5(result3, len3, ptr4) }; + let l6 = i32::from(*ptr4.add(0).cast::()); + let result10 = match l6 { + 0 => { + let e = { + let l7 = *ptr4.add(4).cast::(); + unsafe { Fields::from_handle(l7 as u32) } + }; + Ok(e) + } + 1 => { + let e = { + let l8 = i32::from(*ptr4.add(4).cast::()); + let v9 = match l8 { + 0 => HeaderError::InvalidSyntax, + 1 => HeaderError::Forbidden, + n => { + debug_assert_eq!(n, 2, "invalid enum discriminant"); + HeaderError::Immutable + } + }; + v9 + }; + Err(e) + } + _ => _rt::invalid_enum_discriminant(), + }; + if layout3.size() != 0 { + _rt::alloc::dealloc(result3.cast(), layout3); + } + result10 + } + } + } + impl Fields { + #[allow(unused_unsafe, clippy::all)] + pub fn get(&self, name: &str) -> _rt::Vec { + unsafe { + #[cfg_attr(target_pointer_width = "64", repr(align(8)))] + #[cfg_attr(target_pointer_width = "32", repr(align(4)))] + struct RetArea( + [::core::mem::MaybeUninit< + u8, + >; 2 * ::core::mem::size_of::<*const u8>()], + ); + let mut ret_area = RetArea( + [::core::mem::MaybeUninit::uninit(); 2 + * ::core::mem::size_of::<*const u8>()], + ); + let vec0 = name; + let ptr0 = vec0.as_ptr().cast::(); + let len0 = vec0.len(); + let ptr1 = ret_area.0.as_mut_ptr().cast::(); + #[cfg(target_arch = "wasm32")] + #[link(wasm_import_module = "wasi:http/types@0.2.0")] + unsafe extern "C" { + #[link_name = "[method]fields.get"] + fn wit_import2(_: i32, _: *mut u8, _: usize, _: *mut u8); + } + #[cfg(not(target_arch = "wasm32"))] + unsafe extern "C" fn wit_import2( + _: i32, + _: *mut u8, + _: usize, + _: *mut u8, + ) { + unreachable!() + } + unsafe { + wit_import2( + (self).handle() as i32, + ptr0.cast_mut(), + len0, + ptr1, + ) + }; + let l3 = *ptr1.add(0).cast::<*mut u8>(); + let l4 = *ptr1 + .add(::core::mem::size_of::<*const u8>()) + .cast::(); + let base8 = l3; + let len8 = l4; + let mut result8 = _rt::Vec::with_capacity(len8); + for i in 0..len8 { + let base = base8 + .add(i * (2 * ::core::mem::size_of::<*const u8>())); + let e8 = { + let l5 = *base.add(0).cast::<*mut u8>(); + let l6 = *base + .add(::core::mem::size_of::<*const u8>()) + .cast::(); + let len7 = l6; + _rt::Vec::from_raw_parts(l5.cast(), len7, len7) + }; + result8.push(e8); + } + _rt::cabi_dealloc( + base8, + len8 * (2 * ::core::mem::size_of::<*const u8>()), + ::core::mem::size_of::<*const u8>(), + ); + let result9 = result8; + result9 + } + } + } + impl Fields { + #[allow(unused_unsafe, clippy::all)] + pub fn has(&self, name: &str) -> bool { + unsafe { + let vec0 = name; + let ptr0 = vec0.as_ptr().cast::(); + let len0 = vec0.len(); + #[cfg(target_arch = "wasm32")] + #[link(wasm_import_module = "wasi:http/types@0.2.0")] + unsafe extern "C" { + #[link_name = "[method]fields.has"] + fn wit_import1(_: i32, _: *mut u8, _: usize) -> i32; + } + #[cfg(not(target_arch = "wasm32"))] + unsafe extern "C" fn wit_import1( + _: i32, + _: *mut u8, + _: usize, + ) -> i32 { + unreachable!() + } + let ret = unsafe { + wit_import1((self).handle() as i32, ptr0.cast_mut(), len0) + }; + _rt::bool_lift(ret as u8) + } + } + } + impl Fields { + #[allow(unused_unsafe, clippy::all)] + pub fn set( + &self, + name: &str, + value: &[FieldValue], + ) -> Result<(), HeaderError> { + unsafe { + #[repr(align(1))] + struct RetArea([::core::mem::MaybeUninit; 2]); + let mut ret_area = RetArea( + [::core::mem::MaybeUninit::uninit(); 2], + ); + let vec0 = name; + let ptr0 = vec0.as_ptr().cast::(); + let len0 = vec0.len(); + let vec2 = value; + let len2 = vec2.len(); + let layout2 = _rt::alloc::Layout::from_size_align_unchecked( + vec2.len() * (2 * ::core::mem::size_of::<*const u8>()), + ::core::mem::size_of::<*const u8>(), + ); + let result2 = if layout2.size() != 0 { + let ptr = _rt::alloc::alloc(layout2).cast::(); + if ptr.is_null() { + _rt::alloc::handle_alloc_error(layout2); + } + ptr + } else { + ::core::ptr::null_mut() + }; + for (i, e) in vec2.into_iter().enumerate() { + let base = result2 + .add(i * (2 * ::core::mem::size_of::<*const u8>())); + { + let vec1 = e; + let ptr1 = vec1.as_ptr().cast::(); + let len1 = vec1.len(); + *base + .add(::core::mem::size_of::<*const u8>()) + .cast::() = len1; + *base.add(0).cast::<*mut u8>() = ptr1.cast_mut(); + } + } + let ptr3 = ret_area.0.as_mut_ptr().cast::(); + #[cfg(target_arch = "wasm32")] + #[link(wasm_import_module = "wasi:http/types@0.2.0")] + unsafe extern "C" { + #[link_name = "[method]fields.set"] + fn wit_import4( + _: i32, + _: *mut u8, + _: usize, + _: *mut u8, + _: usize, + _: *mut u8, + ); + } + #[cfg(not(target_arch = "wasm32"))] + unsafe extern "C" fn wit_import4( + _: i32, + _: *mut u8, + _: usize, + _: *mut u8, + _: usize, + _: *mut u8, + ) { + unreachable!() + } + unsafe { + wit_import4( + (self).handle() as i32, + ptr0.cast_mut(), + len0, + result2, + len2, + ptr3, + ) + }; + let l5 = i32::from(*ptr3.add(0).cast::()); + let result8 = match l5 { + 0 => { + let e = (); + Ok(e) + } + 1 => { + let e = { + let l6 = i32::from(*ptr3.add(1).cast::()); + let v7 = match l6 { + 0 => HeaderError::InvalidSyntax, + 1 => HeaderError::Forbidden, + n => { + debug_assert_eq!(n, 2, "invalid enum discriminant"); + HeaderError::Immutable + } + }; + v7 + }; + Err(e) + } + _ => _rt::invalid_enum_discriminant(), + }; + if layout2.size() != 0 { + _rt::alloc::dealloc(result2.cast(), layout2); + } + result8 + } + } + } + impl Fields { + #[allow(unused_unsafe, clippy::all)] + pub fn delete(&self, name: &str) -> Result<(), HeaderError> { + unsafe { + #[repr(align(1))] + struct RetArea([::core::mem::MaybeUninit; 2]); + let mut ret_area = RetArea( + [::core::mem::MaybeUninit::uninit(); 2], + ); + let vec0 = name; + let ptr0 = vec0.as_ptr().cast::(); + let len0 = vec0.len(); + let ptr1 = ret_area.0.as_mut_ptr().cast::(); + #[cfg(target_arch = "wasm32")] + #[link(wasm_import_module = "wasi:http/types@0.2.0")] + unsafe extern "C" { + #[link_name = "[method]fields.delete"] + fn wit_import2(_: i32, _: *mut u8, _: usize, _: *mut u8); + } + #[cfg(not(target_arch = "wasm32"))] + unsafe extern "C" fn wit_import2( + _: i32, + _: *mut u8, + _: usize, + _: *mut u8, + ) { + unreachable!() + } + unsafe { + wit_import2( + (self).handle() as i32, + ptr0.cast_mut(), + len0, + ptr1, + ) + }; + let l3 = i32::from(*ptr1.add(0).cast::()); + let result6 = match l3 { + 0 => { + let e = (); + Ok(e) + } + 1 => { + let e = { + let l4 = i32::from(*ptr1.add(1).cast::()); + let v5 = match l4 { + 0 => HeaderError::InvalidSyntax, + 1 => HeaderError::Forbidden, + n => { + debug_assert_eq!(n, 2, "invalid enum discriminant"); + HeaderError::Immutable + } + }; + v5 + }; + Err(e) + } + _ => _rt::invalid_enum_discriminant(), + }; + result6 + } + } + } + impl Fields { + #[allow(unused_unsafe, clippy::all)] + pub fn append( + &self, + name: &str, + value: &[u8], + ) -> Result<(), HeaderError> { + unsafe { + #[repr(align(1))] + struct RetArea([::core::mem::MaybeUninit; 2]); + let mut ret_area = RetArea( + [::core::mem::MaybeUninit::uninit(); 2], + ); + let vec0 = name; + let ptr0 = vec0.as_ptr().cast::(); + let len0 = vec0.len(); + let vec1 = value; + let ptr1 = vec1.as_ptr().cast::(); + let len1 = vec1.len(); + let ptr2 = ret_area.0.as_mut_ptr().cast::(); + #[cfg(target_arch = "wasm32")] + #[link(wasm_import_module = "wasi:http/types@0.2.0")] + unsafe extern "C" { + #[link_name = "[method]fields.append"] + fn wit_import3( + _: i32, + _: *mut u8, + _: usize, + _: *mut u8, + _: usize, + _: *mut u8, + ); + } + #[cfg(not(target_arch = "wasm32"))] + unsafe extern "C" fn wit_import3( + _: i32, + _: *mut u8, + _: usize, + _: *mut u8, + _: usize, + _: *mut u8, + ) { + unreachable!() + } + unsafe { + wit_import3( + (self).handle() as i32, + ptr0.cast_mut(), + len0, + ptr1.cast_mut(), + len1, + ptr2, + ) + }; + let l4 = i32::from(*ptr2.add(0).cast::()); + let result7 = match l4 { + 0 => { + let e = (); + Ok(e) + } + 1 => { + let e = { + let l5 = i32::from(*ptr2.add(1).cast::()); + let v6 = match l5 { + 0 => HeaderError::InvalidSyntax, + 1 => HeaderError::Forbidden, + n => { + debug_assert_eq!(n, 2, "invalid enum discriminant"); + HeaderError::Immutable + } + }; + v6 + }; + Err(e) + } + _ => _rt::invalid_enum_discriminant(), + }; + result7 + } + } + } + impl Fields { + #[allow(unused_unsafe, clippy::all)] + pub fn entries(&self) -> _rt::Vec<(FieldKey, FieldValue)> { + unsafe { + #[cfg_attr(target_pointer_width = "64", repr(align(8)))] + #[cfg_attr(target_pointer_width = "32", repr(align(4)))] + struct RetArea( + [::core::mem::MaybeUninit< + u8, + >; 2 * ::core::mem::size_of::<*const u8>()], + ); + let mut ret_area = RetArea( + [::core::mem::MaybeUninit::uninit(); 2 + * ::core::mem::size_of::<*const u8>()], + ); + let ptr0 = ret_area.0.as_mut_ptr().cast::(); + #[cfg(target_arch = "wasm32")] + #[link(wasm_import_module = "wasi:http/types@0.2.0")] + unsafe extern "C" { + #[link_name = "[method]fields.entries"] + fn wit_import1(_: i32, _: *mut u8); + } + #[cfg(not(target_arch = "wasm32"))] + unsafe extern "C" fn wit_import1(_: i32, _: *mut u8) { + unreachable!() + } + unsafe { wit_import1((self).handle() as i32, ptr0) }; + let l2 = *ptr0.add(0).cast::<*mut u8>(); + let l3 = *ptr0 + .add(::core::mem::size_of::<*const u8>()) + .cast::(); + let base10 = l2; + let len10 = l3; + let mut result10 = _rt::Vec::with_capacity(len10); + for i in 0..len10 { + let base = base10 + .add(i * (4 * ::core::mem::size_of::<*const u8>())); + let e10 = { + let l4 = *base.add(0).cast::<*mut u8>(); + let l5 = *base + .add(::core::mem::size_of::<*const u8>()) + .cast::(); + let len6 = l5; + let bytes6 = _rt::Vec::from_raw_parts( + l4.cast(), + len6, + len6, + ); + let l7 = *base + .add(2 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l8 = *base + .add(3 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len9 = l8; + ( + _rt::string_lift(bytes6), + _rt::Vec::from_raw_parts(l7.cast(), len9, len9), + ) + }; + result10.push(e10); + } + _rt::cabi_dealloc( + base10, + len10 * (4 * ::core::mem::size_of::<*const u8>()), + ::core::mem::size_of::<*const u8>(), + ); + let result11 = result10; + result11 + } + } + } + impl Fields { + #[allow(unused_unsafe, clippy::all)] + pub fn clone(&self) -> Fields { + unsafe { + #[cfg(target_arch = "wasm32")] + #[link(wasm_import_module = "wasi:http/types@0.2.0")] + unsafe extern "C" { + #[link_name = "[method]fields.clone"] + fn wit_import0(_: i32) -> i32; + } + #[cfg(not(target_arch = "wasm32"))] + unsafe extern "C" fn wit_import0(_: i32) -> i32 { + unreachable!() + } + let ret = unsafe { wit_import0((self).handle() as i32) }; + unsafe { Fields::from_handle(ret as u32) } + } + } + } + impl IncomingRequest { + #[allow(unused_unsafe, clippy::all)] + pub fn method(&self) -> Method { + unsafe { + #[cfg_attr(target_pointer_width = "64", repr(align(8)))] + #[cfg_attr(target_pointer_width = "32", repr(align(4)))] + struct RetArea( + [::core::mem::MaybeUninit< + u8, + >; 3 * ::core::mem::size_of::<*const u8>()], + ); + let mut ret_area = RetArea( + [::core::mem::MaybeUninit::uninit(); 3 + * ::core::mem::size_of::<*const u8>()], + ); + let ptr0 = ret_area.0.as_mut_ptr().cast::(); + #[cfg(target_arch = "wasm32")] + #[link(wasm_import_module = "wasi:http/types@0.2.0")] + unsafe extern "C" { + #[link_name = "[method]incoming-request.method"] + fn wit_import1(_: i32, _: *mut u8); + } + #[cfg(not(target_arch = "wasm32"))] + unsafe extern "C" fn wit_import1(_: i32, _: *mut u8) { + unreachable!() + } + unsafe { wit_import1((self).handle() as i32, ptr0) }; + let l2 = i32::from(*ptr0.add(0).cast::()); + let v6 = match l2 { + 0 => Method::Get, + 1 => Method::Head, + 2 => Method::Post, + 3 => Method::Put, + 4 => Method::Delete, + 5 => Method::Connect, + 6 => Method::Options, + 7 => Method::Trace, + 8 => Method::Patch, + n => { + debug_assert_eq!(n, 9, "invalid enum discriminant"); + let e6 = { + let l3 = *ptr0 + .add(::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l4 = *ptr0 + .add(2 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len5 = l4; + let bytes5 = _rt::Vec::from_raw_parts( + l3.cast(), + len5, + len5, + ); + _rt::string_lift(bytes5) + }; + Method::Other(e6) + } + }; + let result7 = v6; + result7 + } + } + } + impl IncomingRequest { + #[allow(unused_unsafe, clippy::all)] + pub fn path_with_query(&self) -> Option<_rt::String> { + unsafe { + #[cfg_attr(target_pointer_width = "64", repr(align(8)))] + #[cfg_attr(target_pointer_width = "32", repr(align(4)))] + struct RetArea( + [::core::mem::MaybeUninit< + u8, + >; 3 * ::core::mem::size_of::<*const u8>()], + ); + let mut ret_area = RetArea( + [::core::mem::MaybeUninit::uninit(); 3 + * ::core::mem::size_of::<*const u8>()], + ); + let ptr0 = ret_area.0.as_mut_ptr().cast::(); + #[cfg(target_arch = "wasm32")] + #[link(wasm_import_module = "wasi:http/types@0.2.0")] + unsafe extern "C" { + #[link_name = "[method]incoming-request.path-with-query"] + fn wit_import1(_: i32, _: *mut u8); + } + #[cfg(not(target_arch = "wasm32"))] + unsafe extern "C" fn wit_import1(_: i32, _: *mut u8) { + unreachable!() + } + unsafe { wit_import1((self).handle() as i32, ptr0) }; + let l2 = i32::from(*ptr0.add(0).cast::()); + let result6 = match l2 { + 0 => None, + 1 => { + let e = { + let l3 = *ptr0 + .add(::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l4 = *ptr0 + .add(2 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len5 = l4; + let bytes5 = _rt::Vec::from_raw_parts( + l3.cast(), + len5, + len5, + ); + _rt::string_lift(bytes5) + }; + Some(e) + } + _ => _rt::invalid_enum_discriminant(), + }; + result6 + } + } + } + impl IncomingRequest { + #[allow(unused_unsafe, clippy::all)] + pub fn scheme(&self) -> Option { + unsafe { + #[cfg_attr(target_pointer_width = "64", repr(align(8)))] + #[cfg_attr(target_pointer_width = "32", repr(align(4)))] + struct RetArea( + [::core::mem::MaybeUninit< + u8, + >; 4 * ::core::mem::size_of::<*const u8>()], + ); + let mut ret_area = RetArea( + [::core::mem::MaybeUninit::uninit(); 4 + * ::core::mem::size_of::<*const u8>()], + ); + let ptr0 = ret_area.0.as_mut_ptr().cast::(); + #[cfg(target_arch = "wasm32")] + #[link(wasm_import_module = "wasi:http/types@0.2.0")] + unsafe extern "C" { + #[link_name = "[method]incoming-request.scheme"] + fn wit_import1(_: i32, _: *mut u8); + } + #[cfg(not(target_arch = "wasm32"))] + unsafe extern "C" fn wit_import1(_: i32, _: *mut u8) { + unreachable!() + } + unsafe { wit_import1((self).handle() as i32, ptr0) }; + let l2 = i32::from(*ptr0.add(0).cast::()); + let result8 = match l2 { + 0 => None, + 1 => { + let e = { + let l3 = i32::from( + *ptr0.add(::core::mem::size_of::<*const u8>()).cast::(), + ); + let v7 = match l3 { + 0 => Scheme::Http, + 1 => Scheme::Https, + n => { + debug_assert_eq!(n, 2, "invalid enum discriminant"); + let e7 = { + let l4 = *ptr0 + .add(2 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l5 = *ptr0 + .add(3 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len6 = l5; + let bytes6 = _rt::Vec::from_raw_parts( + l4.cast(), + len6, + len6, + ); + _rt::string_lift(bytes6) + }; + Scheme::Other(e7) + } + }; + v7 + }; + Some(e) + } + _ => _rt::invalid_enum_discriminant(), + }; + result8 + } + } + } + impl IncomingRequest { + #[allow(unused_unsafe, clippy::all)] + pub fn authority(&self) -> Option<_rt::String> { + unsafe { + #[cfg_attr(target_pointer_width = "64", repr(align(8)))] + #[cfg_attr(target_pointer_width = "32", repr(align(4)))] + struct RetArea( + [::core::mem::MaybeUninit< + u8, + >; 3 * ::core::mem::size_of::<*const u8>()], + ); + let mut ret_area = RetArea( + [::core::mem::MaybeUninit::uninit(); 3 + * ::core::mem::size_of::<*const u8>()], + ); + let ptr0 = ret_area.0.as_mut_ptr().cast::(); + #[cfg(target_arch = "wasm32")] + #[link(wasm_import_module = "wasi:http/types@0.2.0")] + unsafe extern "C" { + #[link_name = "[method]incoming-request.authority"] + fn wit_import1(_: i32, _: *mut u8); + } + #[cfg(not(target_arch = "wasm32"))] + unsafe extern "C" fn wit_import1(_: i32, _: *mut u8) { + unreachable!() + } + unsafe { wit_import1((self).handle() as i32, ptr0) }; + let l2 = i32::from(*ptr0.add(0).cast::()); + let result6 = match l2 { + 0 => None, + 1 => { + let e = { + let l3 = *ptr0 + .add(::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l4 = *ptr0 + .add(2 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len5 = l4; + let bytes5 = _rt::Vec::from_raw_parts( + l3.cast(), + len5, + len5, + ); + _rt::string_lift(bytes5) + }; + Some(e) + } + _ => _rt::invalid_enum_discriminant(), + }; + result6 + } + } + } + impl IncomingRequest { + #[allow(unused_unsafe, clippy::all)] + pub fn headers(&self) -> Headers { + unsafe { + #[cfg(target_arch = "wasm32")] + #[link(wasm_import_module = "wasi:http/types@0.2.0")] + unsafe extern "C" { + #[link_name = "[method]incoming-request.headers"] + fn wit_import0(_: i32) -> i32; + } + #[cfg(not(target_arch = "wasm32"))] + unsafe extern "C" fn wit_import0(_: i32) -> i32 { + unreachable!() + } + let ret = unsafe { wit_import0((self).handle() as i32) }; + unsafe { Fields::from_handle(ret as u32) } + } + } + } + impl IncomingRequest { + #[allow(unused_unsafe, clippy::all)] + pub fn consume(&self) -> Result { + unsafe { + #[repr(align(4))] + struct RetArea([::core::mem::MaybeUninit; 8]); + let mut ret_area = RetArea( + [::core::mem::MaybeUninit::uninit(); 8], + ); + let ptr0 = ret_area.0.as_mut_ptr().cast::(); + #[cfg(target_arch = "wasm32")] + #[link(wasm_import_module = "wasi:http/types@0.2.0")] + unsafe extern "C" { + #[link_name = "[method]incoming-request.consume"] + fn wit_import1(_: i32, _: *mut u8); + } + #[cfg(not(target_arch = "wasm32"))] + unsafe extern "C" fn wit_import1(_: i32, _: *mut u8) { + unreachable!() + } + unsafe { wit_import1((self).handle() as i32, ptr0) }; + let l2 = i32::from(*ptr0.add(0).cast::()); + let result4 = match l2 { + 0 => { + let e = { + let l3 = *ptr0.add(4).cast::(); + unsafe { IncomingBody::from_handle(l3 as u32) } + }; + Ok(e) + } + 1 => { + let e = (); + Err(e) + } + _ => _rt::invalid_enum_discriminant(), + }; + result4 + } + } + } + impl OutgoingRequest { + #[allow(unused_unsafe, clippy::all)] + pub fn new(headers: Headers) -> Self { + unsafe { + #[cfg(target_arch = "wasm32")] + #[link(wasm_import_module = "wasi:http/types@0.2.0")] + unsafe extern "C" { + #[link_name = "[constructor]outgoing-request"] + fn wit_import0(_: i32) -> i32; + } + #[cfg(not(target_arch = "wasm32"))] + unsafe extern "C" fn wit_import0(_: i32) -> i32 { + unreachable!() + } + let ret = unsafe { + wit_import0((&headers).take_handle() as i32) + }; + unsafe { OutgoingRequest::from_handle(ret as u32) } + } + } + } + impl OutgoingRequest { + #[allow(unused_unsafe, clippy::all)] + pub fn body(&self) -> Result { + unsafe { + #[repr(align(4))] + struct RetArea([::core::mem::MaybeUninit; 8]); + let mut ret_area = RetArea( + [::core::mem::MaybeUninit::uninit(); 8], + ); + let ptr0 = ret_area.0.as_mut_ptr().cast::(); + #[cfg(target_arch = "wasm32")] + #[link(wasm_import_module = "wasi:http/types@0.2.0")] + unsafe extern "C" { + #[link_name = "[method]outgoing-request.body"] + fn wit_import1(_: i32, _: *mut u8); + } + #[cfg(not(target_arch = "wasm32"))] + unsafe extern "C" fn wit_import1(_: i32, _: *mut u8) { + unreachable!() + } + unsafe { wit_import1((self).handle() as i32, ptr0) }; + let l2 = i32::from(*ptr0.add(0).cast::()); + let result4 = match l2 { + 0 => { + let e = { + let l3 = *ptr0.add(4).cast::(); + unsafe { OutgoingBody::from_handle(l3 as u32) } + }; + Ok(e) + } + 1 => { + let e = (); + Err(e) + } + _ => _rt::invalid_enum_discriminant(), + }; + result4 + } + } + } + impl OutgoingRequest { + #[allow(unused_unsafe, clippy::all)] + pub fn method(&self) -> Method { + unsafe { + #[cfg_attr(target_pointer_width = "64", repr(align(8)))] + #[cfg_attr(target_pointer_width = "32", repr(align(4)))] + struct RetArea( + [::core::mem::MaybeUninit< + u8, + >; 3 * ::core::mem::size_of::<*const u8>()], + ); + let mut ret_area = RetArea( + [::core::mem::MaybeUninit::uninit(); 3 + * ::core::mem::size_of::<*const u8>()], + ); + let ptr0 = ret_area.0.as_mut_ptr().cast::(); + #[cfg(target_arch = "wasm32")] + #[link(wasm_import_module = "wasi:http/types@0.2.0")] + unsafe extern "C" { + #[link_name = "[method]outgoing-request.method"] + fn wit_import1(_: i32, _: *mut u8); + } + #[cfg(not(target_arch = "wasm32"))] + unsafe extern "C" fn wit_import1(_: i32, _: *mut u8) { + unreachable!() + } + unsafe { wit_import1((self).handle() as i32, ptr0) }; + let l2 = i32::from(*ptr0.add(0).cast::()); + let v6 = match l2 { + 0 => Method::Get, + 1 => Method::Head, + 2 => Method::Post, + 3 => Method::Put, + 4 => Method::Delete, + 5 => Method::Connect, + 6 => Method::Options, + 7 => Method::Trace, + 8 => Method::Patch, + n => { + debug_assert_eq!(n, 9, "invalid enum discriminant"); + let e6 = { + let l3 = *ptr0 + .add(::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l4 = *ptr0 + .add(2 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len5 = l4; + let bytes5 = _rt::Vec::from_raw_parts( + l3.cast(), + len5, + len5, + ); + _rt::string_lift(bytes5) + }; + Method::Other(e6) + } + }; + let result7 = v6; + result7 + } + } + } + impl OutgoingRequest { + #[allow(unused_unsafe, clippy::all)] + pub fn set_method(&self, method: &Method) -> Result<(), ()> { + unsafe { + let (result1_0, result1_1, result1_2) = match method { + Method::Get => (0i32, ::core::ptr::null_mut(), 0usize), + Method::Head => (1i32, ::core::ptr::null_mut(), 0usize), + Method::Post => (2i32, ::core::ptr::null_mut(), 0usize), + Method::Put => (3i32, ::core::ptr::null_mut(), 0usize), + Method::Delete => (4i32, ::core::ptr::null_mut(), 0usize), + Method::Connect => (5i32, ::core::ptr::null_mut(), 0usize), + Method::Options => (6i32, ::core::ptr::null_mut(), 0usize), + Method::Trace => (7i32, ::core::ptr::null_mut(), 0usize), + Method::Patch => (8i32, ::core::ptr::null_mut(), 0usize), + Method::Other(e) => { + let vec0 = e; + let ptr0 = vec0.as_ptr().cast::(); + let len0 = vec0.len(); + (9i32, ptr0.cast_mut(), len0) + } + }; + #[cfg(target_arch = "wasm32")] + #[link(wasm_import_module = "wasi:http/types@0.2.0")] + unsafe extern "C" { + #[link_name = "[method]outgoing-request.set-method"] + fn wit_import2(_: i32, _: i32, _: *mut u8, _: usize) -> i32; + } + #[cfg(not(target_arch = "wasm32"))] + unsafe extern "C" fn wit_import2( + _: i32, + _: i32, + _: *mut u8, + _: usize, + ) -> i32 { + unreachable!() + } + let ret = unsafe { + wit_import2( + (self).handle() as i32, + result1_0, + result1_1, + result1_2, + ) + }; + match ret { + 0 => { + let e = (); + Ok(e) + } + 1 => { + let e = (); + Err(e) + } + _ => _rt::invalid_enum_discriminant(), + } + } + } + } + impl OutgoingRequest { + #[allow(unused_unsafe, clippy::all)] + pub fn path_with_query(&self) -> Option<_rt::String> { + unsafe { + #[cfg_attr(target_pointer_width = "64", repr(align(8)))] + #[cfg_attr(target_pointer_width = "32", repr(align(4)))] + struct RetArea( + [::core::mem::MaybeUninit< + u8, + >; 3 * ::core::mem::size_of::<*const u8>()], + ); + let mut ret_area = RetArea( + [::core::mem::MaybeUninit::uninit(); 3 + * ::core::mem::size_of::<*const u8>()], + ); + let ptr0 = ret_area.0.as_mut_ptr().cast::(); + #[cfg(target_arch = "wasm32")] + #[link(wasm_import_module = "wasi:http/types@0.2.0")] + unsafe extern "C" { + #[link_name = "[method]outgoing-request.path-with-query"] + fn wit_import1(_: i32, _: *mut u8); + } + #[cfg(not(target_arch = "wasm32"))] + unsafe extern "C" fn wit_import1(_: i32, _: *mut u8) { + unreachable!() + } + unsafe { wit_import1((self).handle() as i32, ptr0) }; + let l2 = i32::from(*ptr0.add(0).cast::()); + let result6 = match l2 { + 0 => None, + 1 => { + let e = { + let l3 = *ptr0 + .add(::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l4 = *ptr0 + .add(2 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len5 = l4; + let bytes5 = _rt::Vec::from_raw_parts( + l3.cast(), + len5, + len5, + ); + _rt::string_lift(bytes5) + }; + Some(e) + } + _ => _rt::invalid_enum_discriminant(), + }; + result6 + } + } + } + impl OutgoingRequest { + #[allow(unused_unsafe, clippy::all)] + pub fn set_path_with_query( + &self, + path_with_query: Option<&str>, + ) -> Result<(), ()> { + unsafe { + let (result1_0, result1_1, result1_2) = match path_with_query { + Some(e) => { + let vec0 = e; + let ptr0 = vec0.as_ptr().cast::(); + let len0 = vec0.len(); + (1i32, ptr0.cast_mut(), len0) + } + None => (0i32, ::core::ptr::null_mut(), 0usize), + }; + #[cfg(target_arch = "wasm32")] + #[link(wasm_import_module = "wasi:http/types@0.2.0")] + unsafe extern "C" { + #[link_name = "[method]outgoing-request.set-path-with-query"] + fn wit_import2(_: i32, _: i32, _: *mut u8, _: usize) -> i32; + } + #[cfg(not(target_arch = "wasm32"))] + unsafe extern "C" fn wit_import2( + _: i32, + _: i32, + _: *mut u8, + _: usize, + ) -> i32 { + unreachable!() + } + let ret = unsafe { + wit_import2( + (self).handle() as i32, + result1_0, + result1_1, + result1_2, + ) + }; + match ret { + 0 => { + let e = (); + Ok(e) + } + 1 => { + let e = (); + Err(e) + } + _ => _rt::invalid_enum_discriminant(), + } + } + } + } + impl OutgoingRequest { + #[allow(unused_unsafe, clippy::all)] + pub fn scheme(&self) -> Option { + unsafe { + #[cfg_attr(target_pointer_width = "64", repr(align(8)))] + #[cfg_attr(target_pointer_width = "32", repr(align(4)))] + struct RetArea( + [::core::mem::MaybeUninit< + u8, + >; 4 * ::core::mem::size_of::<*const u8>()], + ); + let mut ret_area = RetArea( + [::core::mem::MaybeUninit::uninit(); 4 + * ::core::mem::size_of::<*const u8>()], + ); + let ptr0 = ret_area.0.as_mut_ptr().cast::(); + #[cfg(target_arch = "wasm32")] + #[link(wasm_import_module = "wasi:http/types@0.2.0")] + unsafe extern "C" { + #[link_name = "[method]outgoing-request.scheme"] + fn wit_import1(_: i32, _: *mut u8); + } + #[cfg(not(target_arch = "wasm32"))] + unsafe extern "C" fn wit_import1(_: i32, _: *mut u8) { + unreachable!() + } + unsafe { wit_import1((self).handle() as i32, ptr0) }; + let l2 = i32::from(*ptr0.add(0).cast::()); + let result8 = match l2 { + 0 => None, + 1 => { + let e = { + let l3 = i32::from( + *ptr0.add(::core::mem::size_of::<*const u8>()).cast::(), + ); + let v7 = match l3 { + 0 => Scheme::Http, + 1 => Scheme::Https, + n => { + debug_assert_eq!(n, 2, "invalid enum discriminant"); + let e7 = { + let l4 = *ptr0 + .add(2 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l5 = *ptr0 + .add(3 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len6 = l5; + let bytes6 = _rt::Vec::from_raw_parts( + l4.cast(), + len6, + len6, + ); + _rt::string_lift(bytes6) + }; + Scheme::Other(e7) + } + }; + v7 + }; + Some(e) + } + _ => _rt::invalid_enum_discriminant(), + }; + result8 + } + } + } + impl OutgoingRequest { + #[allow(unused_unsafe, clippy::all)] + pub fn set_scheme(&self, scheme: Option<&Scheme>) -> Result<(), ()> { + unsafe { + let (result2_0, result2_1, result2_2, result2_3) = match scheme { + Some(e) => { + let (result1_0, result1_1, result1_2) = match e { + Scheme::Http => (0i32, ::core::ptr::null_mut(), 0usize), + Scheme::Https => (1i32, ::core::ptr::null_mut(), 0usize), + Scheme::Other(e) => { + let vec0 = e; + let ptr0 = vec0.as_ptr().cast::(); + let len0 = vec0.len(); + (2i32, ptr0.cast_mut(), len0) + } + }; + (1i32, result1_0, result1_1, result1_2) + } + None => (0i32, 0i32, ::core::ptr::null_mut(), 0usize), + }; + #[cfg(target_arch = "wasm32")] + #[link(wasm_import_module = "wasi:http/types@0.2.0")] + unsafe extern "C" { + #[link_name = "[method]outgoing-request.set-scheme"] + fn wit_import3( + _: i32, + _: i32, + _: i32, + _: *mut u8, + _: usize, + ) -> i32; + } + #[cfg(not(target_arch = "wasm32"))] + unsafe extern "C" fn wit_import3( + _: i32, + _: i32, + _: i32, + _: *mut u8, + _: usize, + ) -> i32 { + unreachable!() + } + let ret = unsafe { + wit_import3( + (self).handle() as i32, + result2_0, + result2_1, + result2_2, + result2_3, + ) + }; + match ret { + 0 => { + let e = (); + Ok(e) + } + 1 => { + let e = (); + Err(e) + } + _ => _rt::invalid_enum_discriminant(), + } + } + } + } + impl OutgoingRequest { + #[allow(unused_unsafe, clippy::all)] + pub fn authority(&self) -> Option<_rt::String> { + unsafe { + #[cfg_attr(target_pointer_width = "64", repr(align(8)))] + #[cfg_attr(target_pointer_width = "32", repr(align(4)))] + struct RetArea( + [::core::mem::MaybeUninit< + u8, + >; 3 * ::core::mem::size_of::<*const u8>()], + ); + let mut ret_area = RetArea( + [::core::mem::MaybeUninit::uninit(); 3 + * ::core::mem::size_of::<*const u8>()], + ); + let ptr0 = ret_area.0.as_mut_ptr().cast::(); + #[cfg(target_arch = "wasm32")] + #[link(wasm_import_module = "wasi:http/types@0.2.0")] + unsafe extern "C" { + #[link_name = "[method]outgoing-request.authority"] + fn wit_import1(_: i32, _: *mut u8); + } + #[cfg(not(target_arch = "wasm32"))] + unsafe extern "C" fn wit_import1(_: i32, _: *mut u8) { + unreachable!() + } + unsafe { wit_import1((self).handle() as i32, ptr0) }; + let l2 = i32::from(*ptr0.add(0).cast::()); + let result6 = match l2 { + 0 => None, + 1 => { + let e = { + let l3 = *ptr0 + .add(::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l4 = *ptr0 + .add(2 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len5 = l4; + let bytes5 = _rt::Vec::from_raw_parts( + l3.cast(), + len5, + len5, + ); + _rt::string_lift(bytes5) + }; + Some(e) + } + _ => _rt::invalid_enum_discriminant(), + }; + result6 + } + } + } + impl OutgoingRequest { + #[allow(unused_unsafe, clippy::all)] + pub fn set_authority(&self, authority: Option<&str>) -> Result<(), ()> { + unsafe { + let (result1_0, result1_1, result1_2) = match authority { + Some(e) => { + let vec0 = e; + let ptr0 = vec0.as_ptr().cast::(); + let len0 = vec0.len(); + (1i32, ptr0.cast_mut(), len0) + } + None => (0i32, ::core::ptr::null_mut(), 0usize), + }; + #[cfg(target_arch = "wasm32")] + #[link(wasm_import_module = "wasi:http/types@0.2.0")] + unsafe extern "C" { + #[link_name = "[method]outgoing-request.set-authority"] + fn wit_import2(_: i32, _: i32, _: *mut u8, _: usize) -> i32; + } + #[cfg(not(target_arch = "wasm32"))] + unsafe extern "C" fn wit_import2( + _: i32, + _: i32, + _: *mut u8, + _: usize, + ) -> i32 { + unreachable!() + } + let ret = unsafe { + wit_import2( + (self).handle() as i32, + result1_0, + result1_1, + result1_2, + ) + }; + match ret { + 0 => { + let e = (); + Ok(e) + } + 1 => { + let e = (); + Err(e) + } + _ => _rt::invalid_enum_discriminant(), + } + } + } + } + impl OutgoingRequest { + #[allow(unused_unsafe, clippy::all)] + pub fn headers(&self) -> Headers { + unsafe { + #[cfg(target_arch = "wasm32")] + #[link(wasm_import_module = "wasi:http/types@0.2.0")] + unsafe extern "C" { + #[link_name = "[method]outgoing-request.headers"] + fn wit_import0(_: i32) -> i32; + } + #[cfg(not(target_arch = "wasm32"))] + unsafe extern "C" fn wit_import0(_: i32) -> i32 { + unreachable!() + } + let ret = unsafe { wit_import0((self).handle() as i32) }; + unsafe { Fields::from_handle(ret as u32) } + } + } + } + impl RequestOptions { + #[allow(unused_unsafe, clippy::all)] + pub fn new() -> Self { + unsafe { + #[cfg(target_arch = "wasm32")] + #[link(wasm_import_module = "wasi:http/types@0.2.0")] + unsafe extern "C" { + #[link_name = "[constructor]request-options"] + fn wit_import0() -> i32; + } + #[cfg(not(target_arch = "wasm32"))] + unsafe extern "C" fn wit_import0() -> i32 { + unreachable!() + } + let ret = unsafe { wit_import0() }; + unsafe { RequestOptions::from_handle(ret as u32) } + } + } + } + impl RequestOptions { + #[allow(unused_unsafe, clippy::all)] + pub fn connect_timeout(&self) -> Option { + unsafe { + #[repr(align(8))] + struct RetArea([::core::mem::MaybeUninit; 16]); + let mut ret_area = RetArea( + [::core::mem::MaybeUninit::uninit(); 16], + ); + let ptr0 = ret_area.0.as_mut_ptr().cast::(); + #[cfg(target_arch = "wasm32")] + #[link(wasm_import_module = "wasi:http/types@0.2.0")] + unsafe extern "C" { + #[link_name = "[method]request-options.connect-timeout"] + fn wit_import1(_: i32, _: *mut u8); + } + #[cfg(not(target_arch = "wasm32"))] + unsafe extern "C" fn wit_import1(_: i32, _: *mut u8) { + unreachable!() + } + unsafe { wit_import1((self).handle() as i32, ptr0) }; + let l2 = i32::from(*ptr0.add(0).cast::()); + let result4 = match l2 { + 0 => None, + 1 => { + let e = { + let l3 = *ptr0.add(8).cast::(); + l3 as u64 + }; + Some(e) + } + _ => _rt::invalid_enum_discriminant(), + }; + result4 + } + } + } + impl RequestOptions { + #[allow(unused_unsafe, clippy::all)] + pub fn set_connect_timeout( + &self, + duration: Option, + ) -> Result<(), ()> { + unsafe { + let (result0_0, result0_1) = match duration { + Some(e) => (1i32, _rt::as_i64(e)), + None => (0i32, 0i64), + }; + #[cfg(target_arch = "wasm32")] + #[link(wasm_import_module = "wasi:http/types@0.2.0")] + unsafe extern "C" { + #[link_name = "[method]request-options.set-connect-timeout"] + fn wit_import1(_: i32, _: i32, _: i64) -> i32; + } + #[cfg(not(target_arch = "wasm32"))] + unsafe extern "C" fn wit_import1(_: i32, _: i32, _: i64) -> i32 { + unreachable!() + } + let ret = unsafe { + wit_import1((self).handle() as i32, result0_0, result0_1) + }; + match ret { + 0 => { + let e = (); + Ok(e) + } + 1 => { + let e = (); + Err(e) + } + _ => _rt::invalid_enum_discriminant(), + } + } + } + } + impl RequestOptions { + #[allow(unused_unsafe, clippy::all)] + pub fn first_byte_timeout(&self) -> Option { + unsafe { + #[repr(align(8))] + struct RetArea([::core::mem::MaybeUninit; 16]); + let mut ret_area = RetArea( + [::core::mem::MaybeUninit::uninit(); 16], + ); + let ptr0 = ret_area.0.as_mut_ptr().cast::(); + #[cfg(target_arch = "wasm32")] + #[link(wasm_import_module = "wasi:http/types@0.2.0")] + unsafe extern "C" { + #[link_name = "[method]request-options.first-byte-timeout"] + fn wit_import1(_: i32, _: *mut u8); + } + #[cfg(not(target_arch = "wasm32"))] + unsafe extern "C" fn wit_import1(_: i32, _: *mut u8) { + unreachable!() + } + unsafe { wit_import1((self).handle() as i32, ptr0) }; + let l2 = i32::from(*ptr0.add(0).cast::()); + let result4 = match l2 { + 0 => None, + 1 => { + let e = { + let l3 = *ptr0.add(8).cast::(); + l3 as u64 + }; + Some(e) + } + _ => _rt::invalid_enum_discriminant(), + }; + result4 + } + } + } + impl RequestOptions { + #[allow(unused_unsafe, clippy::all)] + pub fn set_first_byte_timeout( + &self, + duration: Option, + ) -> Result<(), ()> { + unsafe { + let (result0_0, result0_1) = match duration { + Some(e) => (1i32, _rt::as_i64(e)), + None => (0i32, 0i64), + }; + #[cfg(target_arch = "wasm32")] + #[link(wasm_import_module = "wasi:http/types@0.2.0")] + unsafe extern "C" { + #[link_name = "[method]request-options.set-first-byte-timeout"] + fn wit_import1(_: i32, _: i32, _: i64) -> i32; + } + #[cfg(not(target_arch = "wasm32"))] + unsafe extern "C" fn wit_import1(_: i32, _: i32, _: i64) -> i32 { + unreachable!() + } + let ret = unsafe { + wit_import1((self).handle() as i32, result0_0, result0_1) + }; + match ret { + 0 => { + let e = (); + Ok(e) + } + 1 => { + let e = (); + Err(e) + } + _ => _rt::invalid_enum_discriminant(), + } + } + } + } + impl RequestOptions { + #[allow(unused_unsafe, clippy::all)] + pub fn between_bytes_timeout(&self) -> Option { + unsafe { + #[repr(align(8))] + struct RetArea([::core::mem::MaybeUninit; 16]); + let mut ret_area = RetArea( + [::core::mem::MaybeUninit::uninit(); 16], + ); + let ptr0 = ret_area.0.as_mut_ptr().cast::(); + #[cfg(target_arch = "wasm32")] + #[link(wasm_import_module = "wasi:http/types@0.2.0")] + unsafe extern "C" { + #[link_name = "[method]request-options.between-bytes-timeout"] + fn wit_import1(_: i32, _: *mut u8); + } + #[cfg(not(target_arch = "wasm32"))] + unsafe extern "C" fn wit_import1(_: i32, _: *mut u8) { + unreachable!() + } + unsafe { wit_import1((self).handle() as i32, ptr0) }; + let l2 = i32::from(*ptr0.add(0).cast::()); + let result4 = match l2 { + 0 => None, + 1 => { + let e = { + let l3 = *ptr0.add(8).cast::(); + l3 as u64 + }; + Some(e) + } + _ => _rt::invalid_enum_discriminant(), + }; + result4 + } + } + } + impl RequestOptions { + #[allow(unused_unsafe, clippy::all)] + pub fn set_between_bytes_timeout( + &self, + duration: Option, + ) -> Result<(), ()> { + unsafe { + let (result0_0, result0_1) = match duration { + Some(e) => (1i32, _rt::as_i64(e)), + None => (0i32, 0i64), + }; + #[cfg(target_arch = "wasm32")] + #[link(wasm_import_module = "wasi:http/types@0.2.0")] + unsafe extern "C" { + #[link_name = "[method]request-options.set-between-bytes-timeout"] + fn wit_import1(_: i32, _: i32, _: i64) -> i32; + } + #[cfg(not(target_arch = "wasm32"))] + unsafe extern "C" fn wit_import1(_: i32, _: i32, _: i64) -> i32 { + unreachable!() + } + let ret = unsafe { + wit_import1((self).handle() as i32, result0_0, result0_1) + }; + match ret { + 0 => { + let e = (); + Ok(e) + } + 1 => { + let e = (); + Err(e) + } + _ => _rt::invalid_enum_discriminant(), + } + } + } + } + impl ResponseOutparam { + #[allow(unused_unsafe, clippy::all)] + pub fn set( + param: ResponseOutparam, + response: Result, + ) -> () { + unsafe { + let ( + result38_0, + result38_1, + result38_2, + result38_3, + result38_4, + result38_5, + result38_6, + result38_7, + ) = match &response { + Ok(e) => { + ( + 0i32, + (e).take_handle() as i32, + 0i32, + ::core::mem::MaybeUninit::::zeroed(), + ::core::ptr::null_mut(), + ::core::ptr::null_mut(), + 0usize, + 0i32, + ) + } + Err(e) => { + let ( + result37_0, + result37_1, + result37_2, + result37_3, + result37_4, + result37_5, + result37_6, + ) = match e { + ErrorCode::DnsTimeout => { + ( + 0i32, + 0i32, + ::core::mem::MaybeUninit::::zeroed(), + ::core::ptr::null_mut(), + ::core::ptr::null_mut(), + 0usize, + 0i32, + ) + } + ErrorCode::DnsError(e) => { + let DnsErrorPayload { + rcode: rcode0, + info_code: info_code0, + } = e; + let (result2_0, result2_1, result2_2) = match rcode0 { + Some(e) => { + let vec1 = e; + let ptr1 = vec1.as_ptr().cast::(); + let len1 = vec1.len(); + (1i32, ptr1.cast_mut(), len1) + } + None => (0i32, ::core::ptr::null_mut(), 0usize), + }; + let (result3_0, result3_1) = match info_code0 { + Some(e) => (1i32, _rt::as_i32(e)), + None => (0i32, 0i32), + }; + ( + 1i32, + result2_0, + { + let mut t = ::core::mem::MaybeUninit::::uninit(); + t.as_mut_ptr().cast::<*mut u8>().write(result2_1); + t + }, + result2_2 as *mut u8, + result3_0 as *mut u8, + result3_1 as usize, + 0i32, + ) + } + ErrorCode::DestinationNotFound => { + ( + 2i32, + 0i32, + ::core::mem::MaybeUninit::::zeroed(), + ::core::ptr::null_mut(), + ::core::ptr::null_mut(), + 0usize, + 0i32, + ) + } + ErrorCode::DestinationUnavailable => { + ( + 3i32, + 0i32, + ::core::mem::MaybeUninit::::zeroed(), + ::core::ptr::null_mut(), + ::core::ptr::null_mut(), + 0usize, + 0i32, + ) + } + ErrorCode::DestinationIpProhibited => { + ( + 4i32, + 0i32, + ::core::mem::MaybeUninit::::zeroed(), + ::core::ptr::null_mut(), + ::core::ptr::null_mut(), + 0usize, + 0i32, + ) + } + ErrorCode::DestinationIpUnroutable => { + ( + 5i32, + 0i32, + ::core::mem::MaybeUninit::::zeroed(), + ::core::ptr::null_mut(), + ::core::ptr::null_mut(), + 0usize, + 0i32, + ) + } + ErrorCode::ConnectionRefused => { + ( + 6i32, + 0i32, + ::core::mem::MaybeUninit::::zeroed(), + ::core::ptr::null_mut(), + ::core::ptr::null_mut(), + 0usize, + 0i32, + ) + } + ErrorCode::ConnectionTerminated => { + ( + 7i32, + 0i32, + ::core::mem::MaybeUninit::::zeroed(), + ::core::ptr::null_mut(), + ::core::ptr::null_mut(), + 0usize, + 0i32, + ) + } + ErrorCode::ConnectionTimeout => { + ( + 8i32, + 0i32, + ::core::mem::MaybeUninit::::zeroed(), + ::core::ptr::null_mut(), + ::core::ptr::null_mut(), + 0usize, + 0i32, + ) + } + ErrorCode::ConnectionReadTimeout => { + ( + 9i32, + 0i32, + ::core::mem::MaybeUninit::::zeroed(), + ::core::ptr::null_mut(), + ::core::ptr::null_mut(), + 0usize, + 0i32, + ) + } + ErrorCode::ConnectionWriteTimeout => { + ( + 10i32, + 0i32, + ::core::mem::MaybeUninit::::zeroed(), + ::core::ptr::null_mut(), + ::core::ptr::null_mut(), + 0usize, + 0i32, + ) + } + ErrorCode::ConnectionLimitReached => { + ( + 11i32, + 0i32, + ::core::mem::MaybeUninit::::zeroed(), + ::core::ptr::null_mut(), + ::core::ptr::null_mut(), + 0usize, + 0i32, + ) + } + ErrorCode::TlsProtocolError => { + ( + 12i32, + 0i32, + ::core::mem::MaybeUninit::::zeroed(), + ::core::ptr::null_mut(), + ::core::ptr::null_mut(), + 0usize, + 0i32, + ) + } + ErrorCode::TlsCertificateError => { + ( + 13i32, + 0i32, + ::core::mem::MaybeUninit::::zeroed(), + ::core::ptr::null_mut(), + ::core::ptr::null_mut(), + 0usize, + 0i32, + ) + } + ErrorCode::TlsAlertReceived(e) => { + let TlsAlertReceivedPayload { + alert_id: alert_id4, + alert_message: alert_message4, + } = e; + let (result5_0, result5_1) = match alert_id4 { + Some(e) => (1i32, _rt::as_i32(e)), + None => (0i32, 0i32), + }; + let (result7_0, result7_1, result7_2) = match alert_message4 { + Some(e) => { + let vec6 = e; + let ptr6 = vec6.as_ptr().cast::(); + let len6 = vec6.len(); + (1i32, ptr6.cast_mut(), len6) + } + None => (0i32, ::core::ptr::null_mut(), 0usize), + }; + ( + 14i32, + result5_0, + ::core::mem::MaybeUninit::new(i64::from(result5_1) as u64), + result7_0 as *mut u8, + result7_1, + result7_2, + 0i32, + ) + } + ErrorCode::HttpRequestDenied => { + ( + 15i32, + 0i32, + ::core::mem::MaybeUninit::::zeroed(), + ::core::ptr::null_mut(), + ::core::ptr::null_mut(), + 0usize, + 0i32, + ) + } + ErrorCode::HttpRequestLengthRequired => { + ( + 16i32, + 0i32, + ::core::mem::MaybeUninit::::zeroed(), + ::core::ptr::null_mut(), + ::core::ptr::null_mut(), + 0usize, + 0i32, + ) + } + ErrorCode::HttpRequestBodySize(e) => { + let (result8_0, result8_1) = match e { + Some(e) => (1i32, _rt::as_i64(e)), + None => (0i32, 0i64), + }; + ( + 17i32, + result8_0, + ::core::mem::MaybeUninit::new(result8_1 as u64), + ::core::ptr::null_mut(), + ::core::ptr::null_mut(), + 0usize, + 0i32, + ) + } + ErrorCode::HttpRequestMethodInvalid => { + ( + 18i32, + 0i32, + ::core::mem::MaybeUninit::::zeroed(), + ::core::ptr::null_mut(), + ::core::ptr::null_mut(), + 0usize, + 0i32, + ) + } + ErrorCode::HttpRequestUriInvalid => { + ( + 19i32, + 0i32, + ::core::mem::MaybeUninit::::zeroed(), + ::core::ptr::null_mut(), + ::core::ptr::null_mut(), + 0usize, + 0i32, + ) + } + ErrorCode::HttpRequestUriTooLong => { + ( + 20i32, + 0i32, + ::core::mem::MaybeUninit::::zeroed(), + ::core::ptr::null_mut(), + ::core::ptr::null_mut(), + 0usize, + 0i32, + ) + } + ErrorCode::HttpRequestHeaderSectionSize(e) => { + let (result9_0, result9_1) = match e { + Some(e) => (1i32, _rt::as_i32(e)), + None => (0i32, 0i32), + }; + ( + 21i32, + result9_0, + ::core::mem::MaybeUninit::new(i64::from(result9_1) as u64), + ::core::ptr::null_mut(), + ::core::ptr::null_mut(), + 0usize, + 0i32, + ) + } + ErrorCode::HttpRequestHeaderSize(e) => { + let ( + result14_0, + result14_1, + result14_2, + result14_3, + result14_4, + result14_5, + ) = match e { + Some(e) => { + let FieldSizePayload { + field_name: field_name10, + field_size: field_size10, + } = e; + let (result12_0, result12_1, result12_2) = match field_name10 { + Some(e) => { + let vec11 = e; + let ptr11 = vec11.as_ptr().cast::(); + let len11 = vec11.len(); + (1i32, ptr11.cast_mut(), len11) + } + None => (0i32, ::core::ptr::null_mut(), 0usize), + }; + let (result13_0, result13_1) = match field_size10 { + Some(e) => (1i32, _rt::as_i32(e)), + None => (0i32, 0i32), + }; + ( + 1i32, + result12_0, + result12_1, + result12_2, + result13_0, + result13_1, + ) + } + None => { + (0i32, 0i32, ::core::ptr::null_mut(), 0usize, 0i32, 0i32) + } + }; + ( + 22i32, + result14_0, + ::core::mem::MaybeUninit::new(i64::from(result14_1) as u64), + result14_2, + result14_3 as *mut u8, + result14_4 as usize, + result14_5, + ) + } + ErrorCode::HttpRequestTrailerSectionSize(e) => { + let (result15_0, result15_1) = match e { + Some(e) => (1i32, _rt::as_i32(e)), + None => (0i32, 0i32), + }; + ( + 23i32, + result15_0, + ::core::mem::MaybeUninit::new(i64::from(result15_1) as u64), + ::core::ptr::null_mut(), + ::core::ptr::null_mut(), + 0usize, + 0i32, + ) + } + ErrorCode::HttpRequestTrailerSize(e) => { + let FieldSizePayload { + field_name: field_name16, + field_size: field_size16, + } = e; + let (result18_0, result18_1, result18_2) = match field_name16 { + Some(e) => { + let vec17 = e; + let ptr17 = vec17.as_ptr().cast::(); + let len17 = vec17.len(); + (1i32, ptr17.cast_mut(), len17) + } + None => (0i32, ::core::ptr::null_mut(), 0usize), + }; + let (result19_0, result19_1) = match field_size16 { + Some(e) => (1i32, _rt::as_i32(e)), + None => (0i32, 0i32), + }; + ( + 24i32, + result18_0, + { + let mut t = ::core::mem::MaybeUninit::::uninit(); + t.as_mut_ptr().cast::<*mut u8>().write(result18_1); + t + }, + result18_2 as *mut u8, + result19_0 as *mut u8, + result19_1 as usize, + 0i32, + ) + } + ErrorCode::HttpResponseIncomplete => { + ( + 25i32, + 0i32, + ::core::mem::MaybeUninit::::zeroed(), + ::core::ptr::null_mut(), + ::core::ptr::null_mut(), + 0usize, + 0i32, + ) + } + ErrorCode::HttpResponseHeaderSectionSize(e) => { + let (result20_0, result20_1) = match e { + Some(e) => (1i32, _rt::as_i32(e)), + None => (0i32, 0i32), + }; + ( + 26i32, + result20_0, + ::core::mem::MaybeUninit::new(i64::from(result20_1) as u64), + ::core::ptr::null_mut(), + ::core::ptr::null_mut(), + 0usize, + 0i32, + ) + } + ErrorCode::HttpResponseHeaderSize(e) => { + let FieldSizePayload { + field_name: field_name21, + field_size: field_size21, + } = e; + let (result23_0, result23_1, result23_2) = match field_name21 { + Some(e) => { + let vec22 = e; + let ptr22 = vec22.as_ptr().cast::(); + let len22 = vec22.len(); + (1i32, ptr22.cast_mut(), len22) + } + None => (0i32, ::core::ptr::null_mut(), 0usize), + }; + let (result24_0, result24_1) = match field_size21 { + Some(e) => (1i32, _rt::as_i32(e)), + None => (0i32, 0i32), + }; + ( + 27i32, + result23_0, + { + let mut t = ::core::mem::MaybeUninit::::uninit(); + t.as_mut_ptr().cast::<*mut u8>().write(result23_1); + t + }, + result23_2 as *mut u8, + result24_0 as *mut u8, + result24_1 as usize, + 0i32, + ) + } + ErrorCode::HttpResponseBodySize(e) => { + let (result25_0, result25_1) = match e { + Some(e) => (1i32, _rt::as_i64(e)), + None => (0i32, 0i64), + }; + ( + 28i32, + result25_0, + ::core::mem::MaybeUninit::new(result25_1 as u64), + ::core::ptr::null_mut(), + ::core::ptr::null_mut(), + 0usize, + 0i32, + ) + } + ErrorCode::HttpResponseTrailerSectionSize(e) => { + let (result26_0, result26_1) = match e { + Some(e) => (1i32, _rt::as_i32(e)), + None => (0i32, 0i32), + }; + ( + 29i32, + result26_0, + ::core::mem::MaybeUninit::new(i64::from(result26_1) as u64), + ::core::ptr::null_mut(), + ::core::ptr::null_mut(), + 0usize, + 0i32, + ) + } + ErrorCode::HttpResponseTrailerSize(e) => { + let FieldSizePayload { + field_name: field_name27, + field_size: field_size27, + } = e; + let (result29_0, result29_1, result29_2) = match field_name27 { + Some(e) => { + let vec28 = e; + let ptr28 = vec28.as_ptr().cast::(); + let len28 = vec28.len(); + (1i32, ptr28.cast_mut(), len28) + } + None => (0i32, ::core::ptr::null_mut(), 0usize), + }; + let (result30_0, result30_1) = match field_size27 { + Some(e) => (1i32, _rt::as_i32(e)), + None => (0i32, 0i32), + }; + ( + 30i32, + result29_0, + { + let mut t = ::core::mem::MaybeUninit::::uninit(); + t.as_mut_ptr().cast::<*mut u8>().write(result29_1); + t + }, + result29_2 as *mut u8, + result30_0 as *mut u8, + result30_1 as usize, + 0i32, + ) + } + ErrorCode::HttpResponseTransferCoding(e) => { + let (result32_0, result32_1, result32_2) = match e { + Some(e) => { + let vec31 = e; + let ptr31 = vec31.as_ptr().cast::(); + let len31 = vec31.len(); + (1i32, ptr31.cast_mut(), len31) + } + None => (0i32, ::core::ptr::null_mut(), 0usize), + }; + ( + 31i32, + result32_0, + { + let mut t = ::core::mem::MaybeUninit::::uninit(); + t.as_mut_ptr().cast::<*mut u8>().write(result32_1); + t + }, + result32_2 as *mut u8, + ::core::ptr::null_mut(), + 0usize, + 0i32, + ) + } + ErrorCode::HttpResponseContentCoding(e) => { + let (result34_0, result34_1, result34_2) = match e { + Some(e) => { + let vec33 = e; + let ptr33 = vec33.as_ptr().cast::(); + let len33 = vec33.len(); + (1i32, ptr33.cast_mut(), len33) + } + None => (0i32, ::core::ptr::null_mut(), 0usize), + }; + ( + 32i32, + result34_0, + { + let mut t = ::core::mem::MaybeUninit::::uninit(); + t.as_mut_ptr().cast::<*mut u8>().write(result34_1); + t + }, + result34_2 as *mut u8, + ::core::ptr::null_mut(), + 0usize, + 0i32, + ) + } + ErrorCode::HttpResponseTimeout => { + ( + 33i32, + 0i32, + ::core::mem::MaybeUninit::::zeroed(), + ::core::ptr::null_mut(), + ::core::ptr::null_mut(), + 0usize, + 0i32, + ) + } + ErrorCode::HttpUpgradeFailed => { + ( + 34i32, + 0i32, + ::core::mem::MaybeUninit::::zeroed(), + ::core::ptr::null_mut(), + ::core::ptr::null_mut(), + 0usize, + 0i32, + ) + } + ErrorCode::HttpProtocolError => { + ( + 35i32, + 0i32, + ::core::mem::MaybeUninit::::zeroed(), + ::core::ptr::null_mut(), + ::core::ptr::null_mut(), + 0usize, + 0i32, + ) + } + ErrorCode::LoopDetected => { + ( + 36i32, + 0i32, + ::core::mem::MaybeUninit::::zeroed(), + ::core::ptr::null_mut(), + ::core::ptr::null_mut(), + 0usize, + 0i32, + ) + } + ErrorCode::ConfigurationError => { + ( + 37i32, + 0i32, + ::core::mem::MaybeUninit::::zeroed(), + ::core::ptr::null_mut(), + ::core::ptr::null_mut(), + 0usize, + 0i32, + ) + } + ErrorCode::InternalError(e) => { + let (result36_0, result36_1, result36_2) = match e { + Some(e) => { + let vec35 = e; + let ptr35 = vec35.as_ptr().cast::(); + let len35 = vec35.len(); + (1i32, ptr35.cast_mut(), len35) + } + None => (0i32, ::core::ptr::null_mut(), 0usize), + }; + ( + 38i32, + result36_0, + { + let mut t = ::core::mem::MaybeUninit::::uninit(); + t.as_mut_ptr().cast::<*mut u8>().write(result36_1); + t + }, + result36_2 as *mut u8, + ::core::ptr::null_mut(), + 0usize, + 0i32, + ) + } + }; + ( + 1i32, + result37_0, + result37_1, + result37_2, + result37_3, + result37_4, + result37_5, + result37_6, + ) + } + }; + #[cfg(target_arch = "wasm32")] + #[link(wasm_import_module = "wasi:http/types@0.2.0")] + unsafe extern "C" { + #[link_name = "[static]response-outparam.set"] + fn wit_import39( + _: i32, + _: i32, + _: i32, + _: i32, + _: ::core::mem::MaybeUninit, + _: *mut u8, + _: *mut u8, + _: usize, + _: i32, + ); + } + #[cfg(not(target_arch = "wasm32"))] + unsafe extern "C" fn wit_import39( + _: i32, + _: i32, + _: i32, + _: i32, + _: ::core::mem::MaybeUninit, + _: *mut u8, + _: *mut u8, + _: usize, + _: i32, + ) { + unreachable!() + } + unsafe { + wit_import39( + (¶m).take_handle() as i32, + result38_0, + result38_1, + result38_2, + result38_3, + result38_4, + result38_5, + result38_6, + result38_7, + ) + }; + } + } + } + impl IncomingResponse { + #[allow(unused_unsafe, clippy::all)] + pub fn status(&self) -> StatusCode { + unsafe { + #[cfg(target_arch = "wasm32")] + #[link(wasm_import_module = "wasi:http/types@0.2.0")] + unsafe extern "C" { + #[link_name = "[method]incoming-response.status"] + fn wit_import0(_: i32) -> i32; + } + #[cfg(not(target_arch = "wasm32"))] + unsafe extern "C" fn wit_import0(_: i32) -> i32 { + unreachable!() + } + let ret = unsafe { wit_import0((self).handle() as i32) }; + ret as u16 + } + } + } + impl IncomingResponse { + #[allow(unused_unsafe, clippy::all)] + pub fn headers(&self) -> Headers { + unsafe { + #[cfg(target_arch = "wasm32")] + #[link(wasm_import_module = "wasi:http/types@0.2.0")] + unsafe extern "C" { + #[link_name = "[method]incoming-response.headers"] + fn wit_import0(_: i32) -> i32; + } + #[cfg(not(target_arch = "wasm32"))] + unsafe extern "C" fn wit_import0(_: i32) -> i32 { + unreachable!() + } + let ret = unsafe { wit_import0((self).handle() as i32) }; + unsafe { Fields::from_handle(ret as u32) } + } + } + } + impl IncomingResponse { + #[allow(unused_unsafe, clippy::all)] + pub fn consume(&self) -> Result { + unsafe { + #[repr(align(4))] + struct RetArea([::core::mem::MaybeUninit; 8]); + let mut ret_area = RetArea( + [::core::mem::MaybeUninit::uninit(); 8], + ); + let ptr0 = ret_area.0.as_mut_ptr().cast::(); + #[cfg(target_arch = "wasm32")] + #[link(wasm_import_module = "wasi:http/types@0.2.0")] + unsafe extern "C" { + #[link_name = "[method]incoming-response.consume"] + fn wit_import1(_: i32, _: *mut u8); + } + #[cfg(not(target_arch = "wasm32"))] + unsafe extern "C" fn wit_import1(_: i32, _: *mut u8) { + unreachable!() + } + unsafe { wit_import1((self).handle() as i32, ptr0) }; + let l2 = i32::from(*ptr0.add(0).cast::()); + let result4 = match l2 { + 0 => { + let e = { + let l3 = *ptr0.add(4).cast::(); + unsafe { IncomingBody::from_handle(l3 as u32) } + }; + Ok(e) + } + 1 => { + let e = (); + Err(e) + } + _ => _rt::invalid_enum_discriminant(), + }; + result4 + } + } + } + impl IncomingBody { + #[allow(unused_unsafe, clippy::all)] + pub fn stream(&self) -> Result { + unsafe { + #[repr(align(4))] + struct RetArea([::core::mem::MaybeUninit; 8]); + let mut ret_area = RetArea( + [::core::mem::MaybeUninit::uninit(); 8], + ); + let ptr0 = ret_area.0.as_mut_ptr().cast::(); + #[cfg(target_arch = "wasm32")] + #[link(wasm_import_module = "wasi:http/types@0.2.0")] + unsafe extern "C" { + #[link_name = "[method]incoming-body.stream"] + fn wit_import1(_: i32, _: *mut u8); + } + #[cfg(not(target_arch = "wasm32"))] + unsafe extern "C" fn wit_import1(_: i32, _: *mut u8) { + unreachable!() + } + unsafe { wit_import1((self).handle() as i32, ptr0) }; + let l2 = i32::from(*ptr0.add(0).cast::()); + let result4 = match l2 { + 0 => { + let e = { + let l3 = *ptr0.add(4).cast::(); + unsafe { + super::super::super::wasi::io::streams::InputStream::from_handle( + l3 as u32, + ) + } + }; + Ok(e) + } + 1 => { + let e = (); + Err(e) + } + _ => _rt::invalid_enum_discriminant(), + }; + result4 + } + } + } + impl IncomingBody { + #[allow(unused_unsafe, clippy::all)] + pub fn finish(this: IncomingBody) -> FutureTrailers { + unsafe { + #[cfg(target_arch = "wasm32")] + #[link(wasm_import_module = "wasi:http/types@0.2.0")] + unsafe extern "C" { + #[link_name = "[static]incoming-body.finish"] + fn wit_import0(_: i32) -> i32; + } + #[cfg(not(target_arch = "wasm32"))] + unsafe extern "C" fn wit_import0(_: i32) -> i32 { + unreachable!() + } + let ret = unsafe { wit_import0((&this).take_handle() as i32) }; + unsafe { FutureTrailers::from_handle(ret as u32) } + } + } + } + impl FutureTrailers { + #[allow(unused_unsafe, clippy::all)] + pub fn subscribe(&self) -> Pollable { + unsafe { + #[cfg(target_arch = "wasm32")] + #[link(wasm_import_module = "wasi:http/types@0.2.0")] + unsafe extern "C" { + #[link_name = "[method]future-trailers.subscribe"] + fn wit_import0(_: i32) -> i32; + } + #[cfg(not(target_arch = "wasm32"))] + unsafe extern "C" fn wit_import0(_: i32) -> i32 { + unreachable!() + } + let ret = unsafe { wit_import0((self).handle() as i32) }; + unsafe { + super::super::super::wasi::io::poll::Pollable::from_handle( + ret as u32, + ) + } + } + } + } + impl FutureTrailers { + #[allow(unused_unsafe, clippy::all)] + pub fn get( + &self, + ) -> Option, ErrorCode>, ()>> { + unsafe { + #[repr(align(8))] + struct RetArea( + [::core::mem::MaybeUninit< + u8, + >; 40 + 4 * ::core::mem::size_of::<*const u8>()], + ); + let mut ret_area = RetArea( + [::core::mem::MaybeUninit::uninit(); 40 + + 4 * ::core::mem::size_of::<*const u8>()], + ); + let ptr0 = ret_area.0.as_mut_ptr().cast::(); + #[cfg(target_arch = "wasm32")] + #[link(wasm_import_module = "wasi:http/types@0.2.0")] + unsafe extern "C" { + #[link_name = "[method]future-trailers.get"] + fn wit_import1(_: i32, _: *mut u8); + } + #[cfg(not(target_arch = "wasm32"))] + unsafe extern "C" fn wit_import1(_: i32, _: *mut u8) { + unreachable!() + } + unsafe { wit_import1((self).handle() as i32, ptr0) }; + let l2 = i32::from(*ptr0.add(0).cast::()); + let result70 = match l2 { + 0 => None, + 1 => { + let e = { + let l3 = i32::from(*ptr0.add(8).cast::()); + match l3 { + 0 => { + let e = { + let l4 = i32::from(*ptr0.add(16).cast::()); + match l4 { + 0 => { + let e = { + let l5 = i32::from(*ptr0.add(24).cast::()); + match l5 { + 0 => None, + 1 => { + let e = { + let l6 = *ptr0.add(28).cast::(); + unsafe { Fields::from_handle(l6 as u32) } + }; + Some(e) + } + _ => _rt::invalid_enum_discriminant(), + } + }; + Ok(e) + } + 1 => { + let e = { + let l7 = i32::from(*ptr0.add(24).cast::()); + let v69 = match l7 { + 0 => ErrorCode::DnsTimeout, + 1 => { + let e69 = { + let l8 = i32::from(*ptr0.add(32).cast::()); + let l12 = i32::from( + *ptr0 + .add(32 + 3 * ::core::mem::size_of::<*const u8>()) + .cast::(), + ); + DnsErrorPayload { + rcode: match l8 { + 0 => None, + 1 => { + let e = { + let l9 = *ptr0 + .add(32 + 1 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l10 = *ptr0 + .add(32 + 2 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len11 = l10; + let bytes11 = _rt::Vec::from_raw_parts( + l9.cast(), + len11, + len11, + ); + _rt::string_lift(bytes11) + }; + Some(e) + } + _ => _rt::invalid_enum_discriminant(), + }, + info_code: match l12 { + 0 => None, + 1 => { + let e = { + let l13 = i32::from( + *ptr0 + .add(34 + 3 * ::core::mem::size_of::<*const u8>()) + .cast::(), + ); + l13 as u16 + }; + Some(e) + } + _ => _rt::invalid_enum_discriminant(), + }, + } + }; + ErrorCode::DnsError(e69) + } + 2 => ErrorCode::DestinationNotFound, + 3 => ErrorCode::DestinationUnavailable, + 4 => ErrorCode::DestinationIpProhibited, + 5 => ErrorCode::DestinationIpUnroutable, + 6 => ErrorCode::ConnectionRefused, + 7 => ErrorCode::ConnectionTerminated, + 8 => ErrorCode::ConnectionTimeout, + 9 => ErrorCode::ConnectionReadTimeout, + 10 => ErrorCode::ConnectionWriteTimeout, + 11 => ErrorCode::ConnectionLimitReached, + 12 => ErrorCode::TlsProtocolError, + 13 => ErrorCode::TlsCertificateError, + 14 => { + let e69 = { + let l14 = i32::from(*ptr0.add(32).cast::()); + let l16 = i32::from( + *ptr0 + .add(32 + 1 * ::core::mem::size_of::<*const u8>()) + .cast::(), + ); + TlsAlertReceivedPayload { + alert_id: match l14 { + 0 => None, + 1 => { + let e = { + let l15 = i32::from(*ptr0.add(33).cast::()); + l15 as u8 + }; + Some(e) + } + _ => _rt::invalid_enum_discriminant(), + }, + alert_message: match l16 { + 0 => None, + 1 => { + let e = { + let l17 = *ptr0 + .add(32 + 2 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l18 = *ptr0 + .add(32 + 3 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len19 = l18; + let bytes19 = _rt::Vec::from_raw_parts( + l17.cast(), + len19, + len19, + ); + _rt::string_lift(bytes19) + }; + Some(e) + } + _ => _rt::invalid_enum_discriminant(), + }, + } + }; + ErrorCode::TlsAlertReceived(e69) + } + 15 => ErrorCode::HttpRequestDenied, + 16 => ErrorCode::HttpRequestLengthRequired, + 17 => { + let e69 = { + let l20 = i32::from(*ptr0.add(32).cast::()); + match l20 { + 0 => None, + 1 => { + let e = { + let l21 = *ptr0.add(40).cast::(); + l21 as u64 + }; + Some(e) + } + _ => _rt::invalid_enum_discriminant(), + } + }; + ErrorCode::HttpRequestBodySize(e69) + } + 18 => ErrorCode::HttpRequestMethodInvalid, + 19 => ErrorCode::HttpRequestUriInvalid, + 20 => ErrorCode::HttpRequestUriTooLong, + 21 => { + let e69 = { + let l22 = i32::from(*ptr0.add(32).cast::()); + match l22 { + 0 => None, + 1 => { + let e = { + let l23 = *ptr0.add(36).cast::(); + l23 as u32 + }; + Some(e) + } + _ => _rt::invalid_enum_discriminant(), + } + }; + ErrorCode::HttpRequestHeaderSectionSize(e69) + } + 22 => { + let e69 = { + let l24 = i32::from(*ptr0.add(32).cast::()); + match l24 { + 0 => None, + 1 => { + let e = { + let l25 = i32::from( + *ptr0 + .add(32 + 1 * ::core::mem::size_of::<*const u8>()) + .cast::(), + ); + let l29 = i32::from( + *ptr0 + .add(32 + 4 * ::core::mem::size_of::<*const u8>()) + .cast::(), + ); + FieldSizePayload { + field_name: match l25 { + 0 => None, + 1 => { + let e = { + let l26 = *ptr0 + .add(32 + 2 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l27 = *ptr0 + .add(32 + 3 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len28 = l27; + let bytes28 = _rt::Vec::from_raw_parts( + l26.cast(), + len28, + len28, + ); + _rt::string_lift(bytes28) + }; + Some(e) + } + _ => _rt::invalid_enum_discriminant(), + }, + field_size: match l29 { + 0 => None, + 1 => { + let e = { + let l30 = *ptr0 + .add(36 + 4 * ::core::mem::size_of::<*const u8>()) + .cast::(); + l30 as u32 + }; + Some(e) + } + _ => _rt::invalid_enum_discriminant(), + }, + } + }; + Some(e) + } + _ => _rt::invalid_enum_discriminant(), + } + }; + ErrorCode::HttpRequestHeaderSize(e69) + } + 23 => { + let e69 = { + let l31 = i32::from(*ptr0.add(32).cast::()); + match l31 { + 0 => None, + 1 => { + let e = { + let l32 = *ptr0.add(36).cast::(); + l32 as u32 + }; + Some(e) + } + _ => _rt::invalid_enum_discriminant(), + } + }; + ErrorCode::HttpRequestTrailerSectionSize(e69) + } + 24 => { + let e69 = { + let l33 = i32::from(*ptr0.add(32).cast::()); + let l37 = i32::from( + *ptr0 + .add(32 + 3 * ::core::mem::size_of::<*const u8>()) + .cast::(), + ); + FieldSizePayload { + field_name: match l33 { + 0 => None, + 1 => { + let e = { + let l34 = *ptr0 + .add(32 + 1 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l35 = *ptr0 + .add(32 + 2 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len36 = l35; + let bytes36 = _rt::Vec::from_raw_parts( + l34.cast(), + len36, + len36, + ); + _rt::string_lift(bytes36) + }; + Some(e) + } + _ => _rt::invalid_enum_discriminant(), + }, + field_size: match l37 { + 0 => None, + 1 => { + let e = { + let l38 = *ptr0 + .add(36 + 3 * ::core::mem::size_of::<*const u8>()) + .cast::(); + l38 as u32 + }; + Some(e) + } + _ => _rt::invalid_enum_discriminant(), + }, + } + }; + ErrorCode::HttpRequestTrailerSize(e69) + } + 25 => ErrorCode::HttpResponseIncomplete, + 26 => { + let e69 = { + let l39 = i32::from(*ptr0.add(32).cast::()); + match l39 { + 0 => None, + 1 => { + let e = { + let l40 = *ptr0.add(36).cast::(); + l40 as u32 + }; + Some(e) + } + _ => _rt::invalid_enum_discriminant(), + } + }; + ErrorCode::HttpResponseHeaderSectionSize(e69) + } + 27 => { + let e69 = { + let l41 = i32::from(*ptr0.add(32).cast::()); + let l45 = i32::from( + *ptr0 + .add(32 + 3 * ::core::mem::size_of::<*const u8>()) + .cast::(), + ); + FieldSizePayload { + field_name: match l41 { + 0 => None, + 1 => { + let e = { + let l42 = *ptr0 + .add(32 + 1 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l43 = *ptr0 + .add(32 + 2 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len44 = l43; + let bytes44 = _rt::Vec::from_raw_parts( + l42.cast(), + len44, + len44, + ); + _rt::string_lift(bytes44) + }; + Some(e) + } + _ => _rt::invalid_enum_discriminant(), + }, + field_size: match l45 { + 0 => None, + 1 => { + let e = { + let l46 = *ptr0 + .add(36 + 3 * ::core::mem::size_of::<*const u8>()) + .cast::(); + l46 as u32 + }; + Some(e) + } + _ => _rt::invalid_enum_discriminant(), + }, + } + }; + ErrorCode::HttpResponseHeaderSize(e69) + } + 28 => { + let e69 = { + let l47 = i32::from(*ptr0.add(32).cast::()); + match l47 { + 0 => None, + 1 => { + let e = { + let l48 = *ptr0.add(40).cast::(); + l48 as u64 + }; + Some(e) + } + _ => _rt::invalid_enum_discriminant(), + } + }; + ErrorCode::HttpResponseBodySize(e69) + } + 29 => { + let e69 = { + let l49 = i32::from(*ptr0.add(32).cast::()); + match l49 { + 0 => None, + 1 => { + let e = { + let l50 = *ptr0.add(36).cast::(); + l50 as u32 + }; + Some(e) + } + _ => _rt::invalid_enum_discriminant(), + } + }; + ErrorCode::HttpResponseTrailerSectionSize(e69) + } + 30 => { + let e69 = { + let l51 = i32::from(*ptr0.add(32).cast::()); + let l55 = i32::from( + *ptr0 + .add(32 + 3 * ::core::mem::size_of::<*const u8>()) + .cast::(), + ); + FieldSizePayload { + field_name: match l51 { + 0 => None, + 1 => { + let e = { + let l52 = *ptr0 + .add(32 + 1 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l53 = *ptr0 + .add(32 + 2 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len54 = l53; + let bytes54 = _rt::Vec::from_raw_parts( + l52.cast(), + len54, + len54, + ); + _rt::string_lift(bytes54) + }; + Some(e) + } + _ => _rt::invalid_enum_discriminant(), + }, + field_size: match l55 { + 0 => None, + 1 => { + let e = { + let l56 = *ptr0 + .add(36 + 3 * ::core::mem::size_of::<*const u8>()) + .cast::(); + l56 as u32 + }; + Some(e) + } + _ => _rt::invalid_enum_discriminant(), + }, + } + }; + ErrorCode::HttpResponseTrailerSize(e69) + } + 31 => { + let e69 = { + let l57 = i32::from(*ptr0.add(32).cast::()); + match l57 { + 0 => None, + 1 => { + let e = { + let l58 = *ptr0 + .add(32 + 1 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l59 = *ptr0 + .add(32 + 2 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len60 = l59; + let bytes60 = _rt::Vec::from_raw_parts( + l58.cast(), + len60, + len60, + ); + _rt::string_lift(bytes60) + }; + Some(e) + } + _ => _rt::invalid_enum_discriminant(), + } + }; + ErrorCode::HttpResponseTransferCoding(e69) + } + 32 => { + let e69 = { + let l61 = i32::from(*ptr0.add(32).cast::()); + match l61 { + 0 => None, + 1 => { + let e = { + let l62 = *ptr0 + .add(32 + 1 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l63 = *ptr0 + .add(32 + 2 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len64 = l63; + let bytes64 = _rt::Vec::from_raw_parts( + l62.cast(), + len64, + len64, + ); + _rt::string_lift(bytes64) + }; + Some(e) + } + _ => _rt::invalid_enum_discriminant(), + } + }; + ErrorCode::HttpResponseContentCoding(e69) + } + 33 => ErrorCode::HttpResponseTimeout, + 34 => ErrorCode::HttpUpgradeFailed, + 35 => ErrorCode::HttpProtocolError, + 36 => ErrorCode::LoopDetected, + 37 => ErrorCode::ConfigurationError, + n => { + debug_assert_eq!(n, 38, "invalid enum discriminant"); + let e69 = { + let l65 = i32::from(*ptr0.add(32).cast::()); + match l65 { + 0 => None, + 1 => { + let e = { + let l66 = *ptr0 + .add(32 + 1 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l67 = *ptr0 + .add(32 + 2 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len68 = l67; + let bytes68 = _rt::Vec::from_raw_parts( + l66.cast(), + len68, + len68, + ); + _rt::string_lift(bytes68) + }; + Some(e) + } + _ => _rt::invalid_enum_discriminant(), + } + }; + ErrorCode::InternalError(e69) + } + }; + v69 + }; + Err(e) + } + _ => _rt::invalid_enum_discriminant(), + } + }; + Ok(e) + } + 1 => { + let e = (); + Err(e) + } + _ => _rt::invalid_enum_discriminant(), + } + }; + Some(e) + } + _ => _rt::invalid_enum_discriminant(), + }; + result70 + } + } + } + impl OutgoingResponse { + #[allow(unused_unsafe, clippy::all)] + pub fn new(headers: Headers) -> Self { + unsafe { + #[cfg(target_arch = "wasm32")] + #[link(wasm_import_module = "wasi:http/types@0.2.0")] + unsafe extern "C" { + #[link_name = "[constructor]outgoing-response"] + fn wit_import0(_: i32) -> i32; + } + #[cfg(not(target_arch = "wasm32"))] + unsafe extern "C" fn wit_import0(_: i32) -> i32 { + unreachable!() + } + let ret = unsafe { + wit_import0((&headers).take_handle() as i32) + }; + unsafe { OutgoingResponse::from_handle(ret as u32) } + } + } + } + impl OutgoingResponse { + #[allow(unused_unsafe, clippy::all)] + pub fn status_code(&self) -> StatusCode { + unsafe { + #[cfg(target_arch = "wasm32")] + #[link(wasm_import_module = "wasi:http/types@0.2.0")] + unsafe extern "C" { + #[link_name = "[method]outgoing-response.status-code"] + fn wit_import0(_: i32) -> i32; + } + #[cfg(not(target_arch = "wasm32"))] + unsafe extern "C" fn wit_import0(_: i32) -> i32 { + unreachable!() + } + let ret = unsafe { wit_import0((self).handle() as i32) }; + ret as u16 + } + } + } + impl OutgoingResponse { + #[allow(unused_unsafe, clippy::all)] + pub fn set_status_code( + &self, + status_code: StatusCode, + ) -> Result<(), ()> { + unsafe { + #[cfg(target_arch = "wasm32")] + #[link(wasm_import_module = "wasi:http/types@0.2.0")] + unsafe extern "C" { + #[link_name = "[method]outgoing-response.set-status-code"] + fn wit_import0(_: i32, _: i32) -> i32; + } + #[cfg(not(target_arch = "wasm32"))] + unsafe extern "C" fn wit_import0(_: i32, _: i32) -> i32 { + unreachable!() + } + let ret = unsafe { + wit_import0((self).handle() as i32, _rt::as_i32(status_code)) + }; + match ret { + 0 => { + let e = (); + Ok(e) + } + 1 => { + let e = (); + Err(e) + } + _ => _rt::invalid_enum_discriminant(), + } + } + } + } + impl OutgoingResponse { + #[allow(unused_unsafe, clippy::all)] + pub fn headers(&self) -> Headers { + unsafe { + #[cfg(target_arch = "wasm32")] + #[link(wasm_import_module = "wasi:http/types@0.2.0")] + unsafe extern "C" { + #[link_name = "[method]outgoing-response.headers"] + fn wit_import0(_: i32) -> i32; + } + #[cfg(not(target_arch = "wasm32"))] + unsafe extern "C" fn wit_import0(_: i32) -> i32 { + unreachable!() + } + let ret = unsafe { wit_import0((self).handle() as i32) }; + unsafe { Fields::from_handle(ret as u32) } + } + } + } + impl OutgoingResponse { + #[allow(unused_unsafe, clippy::all)] + pub fn body(&self) -> Result { + unsafe { + #[repr(align(4))] + struct RetArea([::core::mem::MaybeUninit; 8]); + let mut ret_area = RetArea( + [::core::mem::MaybeUninit::uninit(); 8], + ); + let ptr0 = ret_area.0.as_mut_ptr().cast::(); + #[cfg(target_arch = "wasm32")] + #[link(wasm_import_module = "wasi:http/types@0.2.0")] + unsafe extern "C" { + #[link_name = "[method]outgoing-response.body"] + fn wit_import1(_: i32, _: *mut u8); + } + #[cfg(not(target_arch = "wasm32"))] + unsafe extern "C" fn wit_import1(_: i32, _: *mut u8) { + unreachable!() + } + unsafe { wit_import1((self).handle() as i32, ptr0) }; + let l2 = i32::from(*ptr0.add(0).cast::()); + let result4 = match l2 { + 0 => { + let e = { + let l3 = *ptr0.add(4).cast::(); + unsafe { OutgoingBody::from_handle(l3 as u32) } + }; + Ok(e) + } + 1 => { + let e = (); + Err(e) + } + _ => _rt::invalid_enum_discriminant(), + }; + result4 + } + } + } + impl OutgoingBody { + #[allow(unused_unsafe, clippy::all)] + pub fn write(&self) -> Result { + unsafe { + #[repr(align(4))] + struct RetArea([::core::mem::MaybeUninit; 8]); + let mut ret_area = RetArea( + [::core::mem::MaybeUninit::uninit(); 8], + ); + let ptr0 = ret_area.0.as_mut_ptr().cast::(); + #[cfg(target_arch = "wasm32")] + #[link(wasm_import_module = "wasi:http/types@0.2.0")] + unsafe extern "C" { + #[link_name = "[method]outgoing-body.write"] + fn wit_import1(_: i32, _: *mut u8); + } + #[cfg(not(target_arch = "wasm32"))] + unsafe extern "C" fn wit_import1(_: i32, _: *mut u8) { + unreachable!() + } + unsafe { wit_import1((self).handle() as i32, ptr0) }; + let l2 = i32::from(*ptr0.add(0).cast::()); + let result4 = match l2 { + 0 => { + let e = { + let l3 = *ptr0.add(4).cast::(); + unsafe { + super::super::super::wasi::io::streams::OutputStream::from_handle( + l3 as u32, + ) + } + }; + Ok(e) + } + 1 => { + let e = (); + Err(e) + } + _ => _rt::invalid_enum_discriminant(), + }; + result4 + } + } + } + impl OutgoingBody { + #[allow(unused_unsafe, clippy::all)] + pub fn finish( + this: OutgoingBody, + trailers: Option, + ) -> Result<(), ErrorCode> { + unsafe { + #[repr(align(8))] + struct RetArea( + [::core::mem::MaybeUninit< + u8, + >; 24 + 4 * ::core::mem::size_of::<*const u8>()], + ); + let mut ret_area = RetArea( + [::core::mem::MaybeUninit::uninit(); 24 + + 4 * ::core::mem::size_of::<*const u8>()], + ); + let (result0_0, result0_1) = match &trailers { + Some(e) => (1i32, (e).take_handle() as i32), + None => (0i32, 0i32), + }; + let ptr1 = ret_area.0.as_mut_ptr().cast::(); + #[cfg(target_arch = "wasm32")] + #[link(wasm_import_module = "wasi:http/types@0.2.0")] + unsafe extern "C" { + #[link_name = "[static]outgoing-body.finish"] + fn wit_import2(_: i32, _: i32, _: i32, _: *mut u8); + } + #[cfg(not(target_arch = "wasm32"))] + unsafe extern "C" fn wit_import2( + _: i32, + _: i32, + _: i32, + _: *mut u8, + ) { + unreachable!() + } + unsafe { + wit_import2( + (&this).take_handle() as i32, + result0_0, + result0_1, + ptr1, + ) + }; + let l3 = i32::from(*ptr1.add(0).cast::()); + let result67 = match l3 { + 0 => { + let e = (); + Ok(e) + } + 1 => { + let e = { + let l4 = i32::from(*ptr1.add(8).cast::()); + let v66 = match l4 { + 0 => ErrorCode::DnsTimeout, + 1 => { + let e66 = { + let l5 = i32::from(*ptr1.add(16).cast::()); + let l9 = i32::from( + *ptr1 + .add(16 + 3 * ::core::mem::size_of::<*const u8>()) + .cast::(), + ); + DnsErrorPayload { + rcode: match l5 { + 0 => None, + 1 => { + let e = { + let l6 = *ptr1 + .add(16 + 1 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l7 = *ptr1 + .add(16 + 2 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len8 = l7; + let bytes8 = _rt::Vec::from_raw_parts( + l6.cast(), + len8, + len8, + ); + _rt::string_lift(bytes8) + }; + Some(e) + } + _ => _rt::invalid_enum_discriminant(), + }, + info_code: match l9 { + 0 => None, + 1 => { + let e = { + let l10 = i32::from( + *ptr1 + .add(18 + 3 * ::core::mem::size_of::<*const u8>()) + .cast::(), + ); + l10 as u16 + }; + Some(e) + } + _ => _rt::invalid_enum_discriminant(), + }, + } + }; + ErrorCode::DnsError(e66) + } + 2 => ErrorCode::DestinationNotFound, + 3 => ErrorCode::DestinationUnavailable, + 4 => ErrorCode::DestinationIpProhibited, + 5 => ErrorCode::DestinationIpUnroutable, + 6 => ErrorCode::ConnectionRefused, + 7 => ErrorCode::ConnectionTerminated, + 8 => ErrorCode::ConnectionTimeout, + 9 => ErrorCode::ConnectionReadTimeout, + 10 => ErrorCode::ConnectionWriteTimeout, + 11 => ErrorCode::ConnectionLimitReached, + 12 => ErrorCode::TlsProtocolError, + 13 => ErrorCode::TlsCertificateError, + 14 => { + let e66 = { + let l11 = i32::from(*ptr1.add(16).cast::()); + let l13 = i32::from( + *ptr1 + .add(16 + 1 * ::core::mem::size_of::<*const u8>()) + .cast::(), + ); + TlsAlertReceivedPayload { + alert_id: match l11 { + 0 => None, + 1 => { + let e = { + let l12 = i32::from(*ptr1.add(17).cast::()); + l12 as u8 + }; + Some(e) + } + _ => _rt::invalid_enum_discriminant(), + }, + alert_message: match l13 { + 0 => None, + 1 => { + let e = { + let l14 = *ptr1 + .add(16 + 2 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l15 = *ptr1 + .add(16 + 3 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len16 = l15; + let bytes16 = _rt::Vec::from_raw_parts( + l14.cast(), + len16, + len16, + ); + _rt::string_lift(bytes16) + }; + Some(e) + } + _ => _rt::invalid_enum_discriminant(), + }, + } + }; + ErrorCode::TlsAlertReceived(e66) + } + 15 => ErrorCode::HttpRequestDenied, + 16 => ErrorCode::HttpRequestLengthRequired, + 17 => { + let e66 = { + let l17 = i32::from(*ptr1.add(16).cast::()); + match l17 { + 0 => None, + 1 => { + let e = { + let l18 = *ptr1.add(24).cast::(); + l18 as u64 + }; + Some(e) + } + _ => _rt::invalid_enum_discriminant(), + } + }; + ErrorCode::HttpRequestBodySize(e66) + } + 18 => ErrorCode::HttpRequestMethodInvalid, + 19 => ErrorCode::HttpRequestUriInvalid, + 20 => ErrorCode::HttpRequestUriTooLong, + 21 => { + let e66 = { + let l19 = i32::from(*ptr1.add(16).cast::()); + match l19 { + 0 => None, + 1 => { + let e = { + let l20 = *ptr1.add(20).cast::(); + l20 as u32 + }; + Some(e) + } + _ => _rt::invalid_enum_discriminant(), + } + }; + ErrorCode::HttpRequestHeaderSectionSize(e66) + } + 22 => { + let e66 = { + let l21 = i32::from(*ptr1.add(16).cast::()); + match l21 { + 0 => None, + 1 => { + let e = { + let l22 = i32::from( + *ptr1 + .add(16 + 1 * ::core::mem::size_of::<*const u8>()) + .cast::(), + ); + let l26 = i32::from( + *ptr1 + .add(16 + 4 * ::core::mem::size_of::<*const u8>()) + .cast::(), + ); + FieldSizePayload { + field_name: match l22 { + 0 => None, + 1 => { + let e = { + let l23 = *ptr1 + .add(16 + 2 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l24 = *ptr1 + .add(16 + 3 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len25 = l24; + let bytes25 = _rt::Vec::from_raw_parts( + l23.cast(), + len25, + len25, + ); + _rt::string_lift(bytes25) + }; + Some(e) + } + _ => _rt::invalid_enum_discriminant(), + }, + field_size: match l26 { + 0 => None, + 1 => { + let e = { + let l27 = *ptr1 + .add(20 + 4 * ::core::mem::size_of::<*const u8>()) + .cast::(); + l27 as u32 + }; + Some(e) + } + _ => _rt::invalid_enum_discriminant(), + }, + } + }; + Some(e) + } + _ => _rt::invalid_enum_discriminant(), + } + }; + ErrorCode::HttpRequestHeaderSize(e66) + } + 23 => { + let e66 = { + let l28 = i32::from(*ptr1.add(16).cast::()); + match l28 { + 0 => None, + 1 => { + let e = { + let l29 = *ptr1.add(20).cast::(); + l29 as u32 + }; + Some(e) + } + _ => _rt::invalid_enum_discriminant(), + } + }; + ErrorCode::HttpRequestTrailerSectionSize(e66) + } + 24 => { + let e66 = { + let l30 = i32::from(*ptr1.add(16).cast::()); + let l34 = i32::from( + *ptr1 + .add(16 + 3 * ::core::mem::size_of::<*const u8>()) + .cast::(), + ); + FieldSizePayload { + field_name: match l30 { + 0 => None, + 1 => { + let e = { + let l31 = *ptr1 + .add(16 + 1 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l32 = *ptr1 + .add(16 + 2 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len33 = l32; + let bytes33 = _rt::Vec::from_raw_parts( + l31.cast(), + len33, + len33, + ); + _rt::string_lift(bytes33) + }; + Some(e) + } + _ => _rt::invalid_enum_discriminant(), + }, + field_size: match l34 { + 0 => None, + 1 => { + let e = { + let l35 = *ptr1 + .add(20 + 3 * ::core::mem::size_of::<*const u8>()) + .cast::(); + l35 as u32 + }; + Some(e) + } + _ => _rt::invalid_enum_discriminant(), + }, + } + }; + ErrorCode::HttpRequestTrailerSize(e66) + } + 25 => ErrorCode::HttpResponseIncomplete, + 26 => { + let e66 = { + let l36 = i32::from(*ptr1.add(16).cast::()); + match l36 { + 0 => None, + 1 => { + let e = { + let l37 = *ptr1.add(20).cast::(); + l37 as u32 + }; + Some(e) + } + _ => _rt::invalid_enum_discriminant(), + } + }; + ErrorCode::HttpResponseHeaderSectionSize(e66) + } + 27 => { + let e66 = { + let l38 = i32::from(*ptr1.add(16).cast::()); + let l42 = i32::from( + *ptr1 + .add(16 + 3 * ::core::mem::size_of::<*const u8>()) + .cast::(), + ); + FieldSizePayload { + field_name: match l38 { + 0 => None, + 1 => { + let e = { + let l39 = *ptr1 + .add(16 + 1 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l40 = *ptr1 + .add(16 + 2 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len41 = l40; + let bytes41 = _rt::Vec::from_raw_parts( + l39.cast(), + len41, + len41, + ); + _rt::string_lift(bytes41) + }; + Some(e) + } + _ => _rt::invalid_enum_discriminant(), + }, + field_size: match l42 { + 0 => None, + 1 => { + let e = { + let l43 = *ptr1 + .add(20 + 3 * ::core::mem::size_of::<*const u8>()) + .cast::(); + l43 as u32 + }; + Some(e) + } + _ => _rt::invalid_enum_discriminant(), + }, + } + }; + ErrorCode::HttpResponseHeaderSize(e66) + } + 28 => { + let e66 = { + let l44 = i32::from(*ptr1.add(16).cast::()); + match l44 { + 0 => None, + 1 => { + let e = { + let l45 = *ptr1.add(24).cast::(); + l45 as u64 + }; + Some(e) + } + _ => _rt::invalid_enum_discriminant(), + } + }; + ErrorCode::HttpResponseBodySize(e66) + } + 29 => { + let e66 = { + let l46 = i32::from(*ptr1.add(16).cast::()); + match l46 { + 0 => None, + 1 => { + let e = { + let l47 = *ptr1.add(20).cast::(); + l47 as u32 + }; + Some(e) + } + _ => _rt::invalid_enum_discriminant(), + } + }; + ErrorCode::HttpResponseTrailerSectionSize(e66) + } + 30 => { + let e66 = { + let l48 = i32::from(*ptr1.add(16).cast::()); + let l52 = i32::from( + *ptr1 + .add(16 + 3 * ::core::mem::size_of::<*const u8>()) + .cast::(), + ); + FieldSizePayload { + field_name: match l48 { + 0 => None, + 1 => { + let e = { + let l49 = *ptr1 + .add(16 + 1 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l50 = *ptr1 + .add(16 + 2 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len51 = l50; + let bytes51 = _rt::Vec::from_raw_parts( + l49.cast(), + len51, + len51, + ); + _rt::string_lift(bytes51) + }; + Some(e) + } + _ => _rt::invalid_enum_discriminant(), + }, + field_size: match l52 { + 0 => None, + 1 => { + let e = { + let l53 = *ptr1 + .add(20 + 3 * ::core::mem::size_of::<*const u8>()) + .cast::(); + l53 as u32 + }; + Some(e) + } + _ => _rt::invalid_enum_discriminant(), + }, + } + }; + ErrorCode::HttpResponseTrailerSize(e66) + } + 31 => { + let e66 = { + let l54 = i32::from(*ptr1.add(16).cast::()); + match l54 { + 0 => None, + 1 => { + let e = { + let l55 = *ptr1 + .add(16 + 1 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l56 = *ptr1 + .add(16 + 2 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len57 = l56; + let bytes57 = _rt::Vec::from_raw_parts( + l55.cast(), + len57, + len57, + ); + _rt::string_lift(bytes57) + }; + Some(e) + } + _ => _rt::invalid_enum_discriminant(), + } + }; + ErrorCode::HttpResponseTransferCoding(e66) + } + 32 => { + let e66 = { + let l58 = i32::from(*ptr1.add(16).cast::()); + match l58 { + 0 => None, + 1 => { + let e = { + let l59 = *ptr1 + .add(16 + 1 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l60 = *ptr1 + .add(16 + 2 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len61 = l60; + let bytes61 = _rt::Vec::from_raw_parts( + l59.cast(), + len61, + len61, + ); + _rt::string_lift(bytes61) + }; + Some(e) + } + _ => _rt::invalid_enum_discriminant(), + } + }; + ErrorCode::HttpResponseContentCoding(e66) + } + 33 => ErrorCode::HttpResponseTimeout, + 34 => ErrorCode::HttpUpgradeFailed, + 35 => ErrorCode::HttpProtocolError, + 36 => ErrorCode::LoopDetected, + 37 => ErrorCode::ConfigurationError, + n => { + debug_assert_eq!(n, 38, "invalid enum discriminant"); + let e66 = { + let l62 = i32::from(*ptr1.add(16).cast::()); + match l62 { + 0 => None, + 1 => { + let e = { + let l63 = *ptr1 + .add(16 + 1 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l64 = *ptr1 + .add(16 + 2 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len65 = l64; + let bytes65 = _rt::Vec::from_raw_parts( + l63.cast(), + len65, + len65, + ); + _rt::string_lift(bytes65) + }; + Some(e) + } + _ => _rt::invalid_enum_discriminant(), + } + }; + ErrorCode::InternalError(e66) + } + }; + v66 + }; + Err(e) + } + _ => _rt::invalid_enum_discriminant(), + }; + result67 + } + } + } + impl FutureIncomingResponse { + #[allow(unused_unsafe, clippy::all)] + pub fn subscribe(&self) -> Pollable { + unsafe { + #[cfg(target_arch = "wasm32")] + #[link(wasm_import_module = "wasi:http/types@0.2.0")] + unsafe extern "C" { + #[link_name = "[method]future-incoming-response.subscribe"] + fn wit_import0(_: i32) -> i32; + } + #[cfg(not(target_arch = "wasm32"))] + unsafe extern "C" fn wit_import0(_: i32) -> i32 { + unreachable!() + } + let ret = unsafe { wit_import0((self).handle() as i32) }; + unsafe { + super::super::super::wasi::io::poll::Pollable::from_handle( + ret as u32, + ) + } + } + } + } + impl FutureIncomingResponse { + #[allow(unused_unsafe, clippy::all)] + pub fn get( + &self, + ) -> Option, ()>> { + unsafe { + #[repr(align(8))] + struct RetArea( + [::core::mem::MaybeUninit< + u8, + >; 40 + 4 * ::core::mem::size_of::<*const u8>()], + ); + let mut ret_area = RetArea( + [::core::mem::MaybeUninit::uninit(); 40 + + 4 * ::core::mem::size_of::<*const u8>()], + ); + let ptr0 = ret_area.0.as_mut_ptr().cast::(); + #[cfg(target_arch = "wasm32")] + #[link(wasm_import_module = "wasi:http/types@0.2.0")] + unsafe extern "C" { + #[link_name = "[method]future-incoming-response.get"] + fn wit_import1(_: i32, _: *mut u8); + } + #[cfg(not(target_arch = "wasm32"))] + unsafe extern "C" fn wit_import1(_: i32, _: *mut u8) { + unreachable!() + } + unsafe { wit_import1((self).handle() as i32, ptr0) }; + let l2 = i32::from(*ptr0.add(0).cast::()); + let result69 = match l2 { + 0 => None, + 1 => { + let e = { + let l3 = i32::from(*ptr0.add(8).cast::()); + match l3 { + 0 => { + let e = { + let l4 = i32::from(*ptr0.add(16).cast::()); + match l4 { + 0 => { + let e = { + let l5 = *ptr0.add(24).cast::(); + unsafe { IncomingResponse::from_handle(l5 as u32) } + }; + Ok(e) + } + 1 => { + let e = { + let l6 = i32::from(*ptr0.add(24).cast::()); + let v68 = match l6 { + 0 => ErrorCode::DnsTimeout, + 1 => { + let e68 = { + let l7 = i32::from(*ptr0.add(32).cast::()); + let l11 = i32::from( + *ptr0 + .add(32 + 3 * ::core::mem::size_of::<*const u8>()) + .cast::(), + ); + DnsErrorPayload { + rcode: match l7 { + 0 => None, + 1 => { + let e = { + let l8 = *ptr0 + .add(32 + 1 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l9 = *ptr0 + .add(32 + 2 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len10 = l9; + let bytes10 = _rt::Vec::from_raw_parts( + l8.cast(), + len10, + len10, + ); + _rt::string_lift(bytes10) + }; + Some(e) + } + _ => _rt::invalid_enum_discriminant(), + }, + info_code: match l11 { + 0 => None, + 1 => { + let e = { + let l12 = i32::from( + *ptr0 + .add(34 + 3 * ::core::mem::size_of::<*const u8>()) + .cast::(), + ); + l12 as u16 + }; + Some(e) + } + _ => _rt::invalid_enum_discriminant(), + }, + } + }; + ErrorCode::DnsError(e68) + } + 2 => ErrorCode::DestinationNotFound, + 3 => ErrorCode::DestinationUnavailable, + 4 => ErrorCode::DestinationIpProhibited, + 5 => ErrorCode::DestinationIpUnroutable, + 6 => ErrorCode::ConnectionRefused, + 7 => ErrorCode::ConnectionTerminated, + 8 => ErrorCode::ConnectionTimeout, + 9 => ErrorCode::ConnectionReadTimeout, + 10 => ErrorCode::ConnectionWriteTimeout, + 11 => ErrorCode::ConnectionLimitReached, + 12 => ErrorCode::TlsProtocolError, + 13 => ErrorCode::TlsCertificateError, + 14 => { + let e68 = { + let l13 = i32::from(*ptr0.add(32).cast::()); + let l15 = i32::from( + *ptr0 + .add(32 + 1 * ::core::mem::size_of::<*const u8>()) + .cast::(), + ); + TlsAlertReceivedPayload { + alert_id: match l13 { + 0 => None, + 1 => { + let e = { + let l14 = i32::from(*ptr0.add(33).cast::()); + l14 as u8 + }; + Some(e) + } + _ => _rt::invalid_enum_discriminant(), + }, + alert_message: match l15 { + 0 => None, + 1 => { + let e = { + let l16 = *ptr0 + .add(32 + 2 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l17 = *ptr0 + .add(32 + 3 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len18 = l17; + let bytes18 = _rt::Vec::from_raw_parts( + l16.cast(), + len18, + len18, + ); + _rt::string_lift(bytes18) + }; + Some(e) + } + _ => _rt::invalid_enum_discriminant(), + }, + } + }; + ErrorCode::TlsAlertReceived(e68) + } + 15 => ErrorCode::HttpRequestDenied, + 16 => ErrorCode::HttpRequestLengthRequired, + 17 => { + let e68 = { + let l19 = i32::from(*ptr0.add(32).cast::()); + match l19 { + 0 => None, + 1 => { + let e = { + let l20 = *ptr0.add(40).cast::(); + l20 as u64 + }; + Some(e) + } + _ => _rt::invalid_enum_discriminant(), + } + }; + ErrorCode::HttpRequestBodySize(e68) + } + 18 => ErrorCode::HttpRequestMethodInvalid, + 19 => ErrorCode::HttpRequestUriInvalid, + 20 => ErrorCode::HttpRequestUriTooLong, + 21 => { + let e68 = { + let l21 = i32::from(*ptr0.add(32).cast::()); + match l21 { + 0 => None, + 1 => { + let e = { + let l22 = *ptr0.add(36).cast::(); + l22 as u32 + }; + Some(e) + } + _ => _rt::invalid_enum_discriminant(), + } + }; + ErrorCode::HttpRequestHeaderSectionSize(e68) + } + 22 => { + let e68 = { + let l23 = i32::from(*ptr0.add(32).cast::()); + match l23 { + 0 => None, + 1 => { + let e = { + let l24 = i32::from( + *ptr0 + .add(32 + 1 * ::core::mem::size_of::<*const u8>()) + .cast::(), + ); + let l28 = i32::from( + *ptr0 + .add(32 + 4 * ::core::mem::size_of::<*const u8>()) + .cast::(), + ); + FieldSizePayload { + field_name: match l24 { + 0 => None, + 1 => { + let e = { + let l25 = *ptr0 + .add(32 + 2 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l26 = *ptr0 + .add(32 + 3 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len27 = l26; + let bytes27 = _rt::Vec::from_raw_parts( + l25.cast(), + len27, + len27, + ); + _rt::string_lift(bytes27) + }; + Some(e) + } + _ => _rt::invalid_enum_discriminant(), + }, + field_size: match l28 { + 0 => None, + 1 => { + let e = { + let l29 = *ptr0 + .add(36 + 4 * ::core::mem::size_of::<*const u8>()) + .cast::(); + l29 as u32 + }; + Some(e) + } + _ => _rt::invalid_enum_discriminant(), + }, + } + }; + Some(e) + } + _ => _rt::invalid_enum_discriminant(), + } + }; + ErrorCode::HttpRequestHeaderSize(e68) + } + 23 => { + let e68 = { + let l30 = i32::from(*ptr0.add(32).cast::()); + match l30 { + 0 => None, + 1 => { + let e = { + let l31 = *ptr0.add(36).cast::(); + l31 as u32 + }; + Some(e) + } + _ => _rt::invalid_enum_discriminant(), + } + }; + ErrorCode::HttpRequestTrailerSectionSize(e68) + } + 24 => { + let e68 = { + let l32 = i32::from(*ptr0.add(32).cast::()); + let l36 = i32::from( + *ptr0 + .add(32 + 3 * ::core::mem::size_of::<*const u8>()) + .cast::(), + ); + FieldSizePayload { + field_name: match l32 { + 0 => None, + 1 => { + let e = { + let l33 = *ptr0 + .add(32 + 1 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l34 = *ptr0 + .add(32 + 2 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len35 = l34; + let bytes35 = _rt::Vec::from_raw_parts( + l33.cast(), + len35, + len35, + ); + _rt::string_lift(bytes35) + }; + Some(e) + } + _ => _rt::invalid_enum_discriminant(), + }, + field_size: match l36 { + 0 => None, + 1 => { + let e = { + let l37 = *ptr0 + .add(36 + 3 * ::core::mem::size_of::<*const u8>()) + .cast::(); + l37 as u32 + }; + Some(e) + } + _ => _rt::invalid_enum_discriminant(), + }, + } + }; + ErrorCode::HttpRequestTrailerSize(e68) + } + 25 => ErrorCode::HttpResponseIncomplete, + 26 => { + let e68 = { + let l38 = i32::from(*ptr0.add(32).cast::()); + match l38 { + 0 => None, + 1 => { + let e = { + let l39 = *ptr0.add(36).cast::(); + l39 as u32 + }; + Some(e) + } + _ => _rt::invalid_enum_discriminant(), + } + }; + ErrorCode::HttpResponseHeaderSectionSize(e68) + } + 27 => { + let e68 = { + let l40 = i32::from(*ptr0.add(32).cast::()); + let l44 = i32::from( + *ptr0 + .add(32 + 3 * ::core::mem::size_of::<*const u8>()) + .cast::(), + ); + FieldSizePayload { + field_name: match l40 { + 0 => None, + 1 => { + let e = { + let l41 = *ptr0 + .add(32 + 1 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l42 = *ptr0 + .add(32 + 2 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len43 = l42; + let bytes43 = _rt::Vec::from_raw_parts( + l41.cast(), + len43, + len43, + ); + _rt::string_lift(bytes43) + }; + Some(e) + } + _ => _rt::invalid_enum_discriminant(), + }, + field_size: match l44 { + 0 => None, + 1 => { + let e = { + let l45 = *ptr0 + .add(36 + 3 * ::core::mem::size_of::<*const u8>()) + .cast::(); + l45 as u32 + }; + Some(e) + } + _ => _rt::invalid_enum_discriminant(), + }, + } + }; + ErrorCode::HttpResponseHeaderSize(e68) + } + 28 => { + let e68 = { + let l46 = i32::from(*ptr0.add(32).cast::()); + match l46 { + 0 => None, + 1 => { + let e = { + let l47 = *ptr0.add(40).cast::(); + l47 as u64 + }; + Some(e) + } + _ => _rt::invalid_enum_discriminant(), + } + }; + ErrorCode::HttpResponseBodySize(e68) + } + 29 => { + let e68 = { + let l48 = i32::from(*ptr0.add(32).cast::()); + match l48 { + 0 => None, + 1 => { + let e = { + let l49 = *ptr0.add(36).cast::(); + l49 as u32 + }; + Some(e) + } + _ => _rt::invalid_enum_discriminant(), + } + }; + ErrorCode::HttpResponseTrailerSectionSize(e68) + } + 30 => { + let e68 = { + let l50 = i32::from(*ptr0.add(32).cast::()); + let l54 = i32::from( + *ptr0 + .add(32 + 3 * ::core::mem::size_of::<*const u8>()) + .cast::(), + ); + FieldSizePayload { + field_name: match l50 { + 0 => None, + 1 => { + let e = { + let l51 = *ptr0 + .add(32 + 1 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l52 = *ptr0 + .add(32 + 2 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len53 = l52; + let bytes53 = _rt::Vec::from_raw_parts( + l51.cast(), + len53, + len53, + ); + _rt::string_lift(bytes53) + }; + Some(e) + } + _ => _rt::invalid_enum_discriminant(), + }, + field_size: match l54 { + 0 => None, + 1 => { + let e = { + let l55 = *ptr0 + .add(36 + 3 * ::core::mem::size_of::<*const u8>()) + .cast::(); + l55 as u32 + }; + Some(e) + } + _ => _rt::invalid_enum_discriminant(), + }, + } + }; + ErrorCode::HttpResponseTrailerSize(e68) + } + 31 => { + let e68 = { + let l56 = i32::from(*ptr0.add(32).cast::()); + match l56 { + 0 => None, + 1 => { + let e = { + let l57 = *ptr0 + .add(32 + 1 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l58 = *ptr0 + .add(32 + 2 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len59 = l58; + let bytes59 = _rt::Vec::from_raw_parts( + l57.cast(), + len59, + len59, + ); + _rt::string_lift(bytes59) + }; + Some(e) + } + _ => _rt::invalid_enum_discriminant(), + } + }; + ErrorCode::HttpResponseTransferCoding(e68) + } + 32 => { + let e68 = { + let l60 = i32::from(*ptr0.add(32).cast::()); + match l60 { + 0 => None, + 1 => { + let e = { + let l61 = *ptr0 + .add(32 + 1 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l62 = *ptr0 + .add(32 + 2 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len63 = l62; + let bytes63 = _rt::Vec::from_raw_parts( + l61.cast(), + len63, + len63, + ); + _rt::string_lift(bytes63) + }; + Some(e) + } + _ => _rt::invalid_enum_discriminant(), + } + }; + ErrorCode::HttpResponseContentCoding(e68) + } + 33 => ErrorCode::HttpResponseTimeout, + 34 => ErrorCode::HttpUpgradeFailed, + 35 => ErrorCode::HttpProtocolError, + 36 => ErrorCode::LoopDetected, + 37 => ErrorCode::ConfigurationError, + n => { + debug_assert_eq!(n, 38, "invalid enum discriminant"); + let e68 = { + let l64 = i32::from(*ptr0.add(32).cast::()); + match l64 { + 0 => None, + 1 => { + let e = { + let l65 = *ptr0 + .add(32 + 1 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l66 = *ptr0 + .add(32 + 2 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len67 = l66; + let bytes67 = _rt::Vec::from_raw_parts( + l65.cast(), + len67, + len67, + ); + _rt::string_lift(bytes67) + }; + Some(e) + } + _ => _rt::invalid_enum_discriminant(), + } + }; + ErrorCode::InternalError(e68) + } + }; + v68 + }; + Err(e) + } + _ => _rt::invalid_enum_discriminant(), + } + }; + Ok(e) + } + 1 => { + let e = (); + Err(e) + } + _ => _rt::invalid_enum_discriminant(), + } + }; + Some(e) + } + _ => _rt::invalid_enum_discriminant(), + }; + result69 + } + } + } + #[allow(unused_unsafe, clippy::all)] + pub fn http_error_code(err: &IoError) -> Option { + unsafe { + #[repr(align(8))] + struct RetArea( + [::core::mem::MaybeUninit< + u8, + >; 24 + 4 * ::core::mem::size_of::<*const u8>()], + ); + let mut ret_area = RetArea( + [::core::mem::MaybeUninit::uninit(); 24 + + 4 * ::core::mem::size_of::<*const u8>()], + ); + let ptr0 = ret_area.0.as_mut_ptr().cast::(); + #[cfg(target_arch = "wasm32")] + #[link(wasm_import_module = "wasi:http/types@0.2.0")] + unsafe extern "C" { + #[link_name = "http-error-code"] + fn wit_import1(_: i32, _: *mut u8); + } + #[cfg(not(target_arch = "wasm32"))] + unsafe extern "C" fn wit_import1(_: i32, _: *mut u8) { + unreachable!() + } + unsafe { wit_import1((err).handle() as i32, ptr0) }; + let l2 = i32::from(*ptr0.add(0).cast::()); + let result66 = match l2 { + 0 => None, + 1 => { + let e = { + let l3 = i32::from(*ptr0.add(8).cast::()); + let v65 = match l3 { + 0 => ErrorCode::DnsTimeout, + 1 => { + let e65 = { + let l4 = i32::from(*ptr0.add(16).cast::()); + let l8 = i32::from( + *ptr0 + .add(16 + 3 * ::core::mem::size_of::<*const u8>()) + .cast::(), + ); + DnsErrorPayload { + rcode: match l4 { + 0 => None, + 1 => { + let e = { + let l5 = *ptr0 + .add(16 + 1 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l6 = *ptr0 + .add(16 + 2 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len7 = l6; + let bytes7 = _rt::Vec::from_raw_parts( + l5.cast(), + len7, + len7, + ); + _rt::string_lift(bytes7) + }; + Some(e) + } + _ => _rt::invalid_enum_discriminant(), + }, + info_code: match l8 { + 0 => None, + 1 => { + let e = { + let l9 = i32::from( + *ptr0 + .add(18 + 3 * ::core::mem::size_of::<*const u8>()) + .cast::(), + ); + l9 as u16 + }; + Some(e) + } + _ => _rt::invalid_enum_discriminant(), + }, + } + }; + ErrorCode::DnsError(e65) + } + 2 => ErrorCode::DestinationNotFound, + 3 => ErrorCode::DestinationUnavailable, + 4 => ErrorCode::DestinationIpProhibited, + 5 => ErrorCode::DestinationIpUnroutable, + 6 => ErrorCode::ConnectionRefused, + 7 => ErrorCode::ConnectionTerminated, + 8 => ErrorCode::ConnectionTimeout, + 9 => ErrorCode::ConnectionReadTimeout, + 10 => ErrorCode::ConnectionWriteTimeout, + 11 => ErrorCode::ConnectionLimitReached, + 12 => ErrorCode::TlsProtocolError, + 13 => ErrorCode::TlsCertificateError, + 14 => { + let e65 = { + let l10 = i32::from(*ptr0.add(16).cast::()); + let l12 = i32::from( + *ptr0 + .add(16 + 1 * ::core::mem::size_of::<*const u8>()) + .cast::(), + ); + TlsAlertReceivedPayload { + alert_id: match l10 { + 0 => None, + 1 => { + let e = { + let l11 = i32::from(*ptr0.add(17).cast::()); + l11 as u8 + }; + Some(e) + } + _ => _rt::invalid_enum_discriminant(), + }, + alert_message: match l12 { + 0 => None, + 1 => { + let e = { + let l13 = *ptr0 + .add(16 + 2 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l14 = *ptr0 + .add(16 + 3 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len15 = l14; + let bytes15 = _rt::Vec::from_raw_parts( + l13.cast(), + len15, + len15, + ); + _rt::string_lift(bytes15) + }; + Some(e) + } + _ => _rt::invalid_enum_discriminant(), + }, + } + }; + ErrorCode::TlsAlertReceived(e65) + } + 15 => ErrorCode::HttpRequestDenied, + 16 => ErrorCode::HttpRequestLengthRequired, + 17 => { + let e65 = { + let l16 = i32::from(*ptr0.add(16).cast::()); + match l16 { + 0 => None, + 1 => { + let e = { + let l17 = *ptr0.add(24).cast::(); + l17 as u64 + }; + Some(e) + } + _ => _rt::invalid_enum_discriminant(), + } + }; + ErrorCode::HttpRequestBodySize(e65) + } + 18 => ErrorCode::HttpRequestMethodInvalid, + 19 => ErrorCode::HttpRequestUriInvalid, + 20 => ErrorCode::HttpRequestUriTooLong, + 21 => { + let e65 = { + let l18 = i32::from(*ptr0.add(16).cast::()); + match l18 { + 0 => None, + 1 => { + let e = { + let l19 = *ptr0.add(20).cast::(); + l19 as u32 + }; + Some(e) + } + _ => _rt::invalid_enum_discriminant(), + } + }; + ErrorCode::HttpRequestHeaderSectionSize(e65) + } + 22 => { + let e65 = { + let l20 = i32::from(*ptr0.add(16).cast::()); + match l20 { + 0 => None, + 1 => { + let e = { + let l21 = i32::from( + *ptr0 + .add(16 + 1 * ::core::mem::size_of::<*const u8>()) + .cast::(), + ); + let l25 = i32::from( + *ptr0 + .add(16 + 4 * ::core::mem::size_of::<*const u8>()) + .cast::(), + ); + FieldSizePayload { + field_name: match l21 { + 0 => None, + 1 => { + let e = { + let l22 = *ptr0 + .add(16 + 2 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l23 = *ptr0 + .add(16 + 3 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len24 = l23; + let bytes24 = _rt::Vec::from_raw_parts( + l22.cast(), + len24, + len24, + ); + _rt::string_lift(bytes24) + }; + Some(e) + } + _ => _rt::invalid_enum_discriminant(), + }, + field_size: match l25 { + 0 => None, + 1 => { + let e = { + let l26 = *ptr0 + .add(20 + 4 * ::core::mem::size_of::<*const u8>()) + .cast::(); + l26 as u32 + }; + Some(e) + } + _ => _rt::invalid_enum_discriminant(), + }, + } + }; + Some(e) + } + _ => _rt::invalid_enum_discriminant(), + } + }; + ErrorCode::HttpRequestHeaderSize(e65) + } + 23 => { + let e65 = { + let l27 = i32::from(*ptr0.add(16).cast::()); + match l27 { + 0 => None, + 1 => { + let e = { + let l28 = *ptr0.add(20).cast::(); + l28 as u32 + }; + Some(e) + } + _ => _rt::invalid_enum_discriminant(), + } + }; + ErrorCode::HttpRequestTrailerSectionSize(e65) + } + 24 => { + let e65 = { + let l29 = i32::from(*ptr0.add(16).cast::()); + let l33 = i32::from( + *ptr0 + .add(16 + 3 * ::core::mem::size_of::<*const u8>()) + .cast::(), + ); + FieldSizePayload { + field_name: match l29 { + 0 => None, + 1 => { + let e = { + let l30 = *ptr0 + .add(16 + 1 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l31 = *ptr0 + .add(16 + 2 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len32 = l31; + let bytes32 = _rt::Vec::from_raw_parts( + l30.cast(), + len32, + len32, + ); + _rt::string_lift(bytes32) + }; + Some(e) + } + _ => _rt::invalid_enum_discriminant(), + }, + field_size: match l33 { + 0 => None, + 1 => { + let e = { + let l34 = *ptr0 + .add(20 + 3 * ::core::mem::size_of::<*const u8>()) + .cast::(); + l34 as u32 + }; + Some(e) + } + _ => _rt::invalid_enum_discriminant(), + }, + } + }; + ErrorCode::HttpRequestTrailerSize(e65) + } + 25 => ErrorCode::HttpResponseIncomplete, + 26 => { + let e65 = { + let l35 = i32::from(*ptr0.add(16).cast::()); + match l35 { + 0 => None, + 1 => { + let e = { + let l36 = *ptr0.add(20).cast::(); + l36 as u32 + }; + Some(e) + } + _ => _rt::invalid_enum_discriminant(), + } + }; + ErrorCode::HttpResponseHeaderSectionSize(e65) + } + 27 => { + let e65 = { + let l37 = i32::from(*ptr0.add(16).cast::()); + let l41 = i32::from( + *ptr0 + .add(16 + 3 * ::core::mem::size_of::<*const u8>()) + .cast::(), + ); + FieldSizePayload { + field_name: match l37 { + 0 => None, + 1 => { + let e = { + let l38 = *ptr0 + .add(16 + 1 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l39 = *ptr0 + .add(16 + 2 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len40 = l39; + let bytes40 = _rt::Vec::from_raw_parts( + l38.cast(), + len40, + len40, + ); + _rt::string_lift(bytes40) + }; + Some(e) + } + _ => _rt::invalid_enum_discriminant(), + }, + field_size: match l41 { + 0 => None, + 1 => { + let e = { + let l42 = *ptr0 + .add(20 + 3 * ::core::mem::size_of::<*const u8>()) + .cast::(); + l42 as u32 + }; + Some(e) + } + _ => _rt::invalid_enum_discriminant(), + }, + } + }; + ErrorCode::HttpResponseHeaderSize(e65) + } + 28 => { + let e65 = { + let l43 = i32::from(*ptr0.add(16).cast::()); + match l43 { + 0 => None, + 1 => { + let e = { + let l44 = *ptr0.add(24).cast::(); + l44 as u64 + }; + Some(e) + } + _ => _rt::invalid_enum_discriminant(), + } + }; + ErrorCode::HttpResponseBodySize(e65) + } + 29 => { + let e65 = { + let l45 = i32::from(*ptr0.add(16).cast::()); + match l45 { + 0 => None, + 1 => { + let e = { + let l46 = *ptr0.add(20).cast::(); + l46 as u32 + }; + Some(e) + } + _ => _rt::invalid_enum_discriminant(), + } + }; + ErrorCode::HttpResponseTrailerSectionSize(e65) + } + 30 => { + let e65 = { + let l47 = i32::from(*ptr0.add(16).cast::()); + let l51 = i32::from( + *ptr0 + .add(16 + 3 * ::core::mem::size_of::<*const u8>()) + .cast::(), + ); + FieldSizePayload { + field_name: match l47 { + 0 => None, + 1 => { + let e = { + let l48 = *ptr0 + .add(16 + 1 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l49 = *ptr0 + .add(16 + 2 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len50 = l49; + let bytes50 = _rt::Vec::from_raw_parts( + l48.cast(), + len50, + len50, + ); + _rt::string_lift(bytes50) + }; + Some(e) + } + _ => _rt::invalid_enum_discriminant(), + }, + field_size: match l51 { + 0 => None, + 1 => { + let e = { + let l52 = *ptr0 + .add(20 + 3 * ::core::mem::size_of::<*const u8>()) + .cast::(); + l52 as u32 + }; + Some(e) + } + _ => _rt::invalid_enum_discriminant(), + }, + } + }; + ErrorCode::HttpResponseTrailerSize(e65) + } + 31 => { + let e65 = { + let l53 = i32::from(*ptr0.add(16).cast::()); + match l53 { + 0 => None, + 1 => { + let e = { + let l54 = *ptr0 + .add(16 + 1 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l55 = *ptr0 + .add(16 + 2 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len56 = l55; + let bytes56 = _rt::Vec::from_raw_parts( + l54.cast(), + len56, + len56, + ); + _rt::string_lift(bytes56) + }; + Some(e) + } + _ => _rt::invalid_enum_discriminant(), + } + }; + ErrorCode::HttpResponseTransferCoding(e65) + } + 32 => { + let e65 = { + let l57 = i32::from(*ptr0.add(16).cast::()); + match l57 { + 0 => None, + 1 => { + let e = { + let l58 = *ptr0 + .add(16 + 1 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l59 = *ptr0 + .add(16 + 2 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len60 = l59; + let bytes60 = _rt::Vec::from_raw_parts( + l58.cast(), + len60, + len60, + ); + _rt::string_lift(bytes60) + }; + Some(e) + } + _ => _rt::invalid_enum_discriminant(), + } + }; + ErrorCode::HttpResponseContentCoding(e65) + } + 33 => ErrorCode::HttpResponseTimeout, + 34 => ErrorCode::HttpUpgradeFailed, + 35 => ErrorCode::HttpProtocolError, + 36 => ErrorCode::LoopDetected, + 37 => ErrorCode::ConfigurationError, + n => { + debug_assert_eq!(n, 38, "invalid enum discriminant"); + let e65 = { + let l61 = i32::from(*ptr0.add(16).cast::()); + match l61 { + 0 => None, + 1 => { + let e = { + let l62 = *ptr0 + .add(16 + 1 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l63 = *ptr0 + .add(16 + 2 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len64 = l63; + let bytes64 = _rt::Vec::from_raw_parts( + l62.cast(), + len64, + len64, + ); + _rt::string_lift(bytes64) + }; + Some(e) + } + _ => _rt::invalid_enum_discriminant(), + } + }; + ErrorCode::InternalError(e65) + } + }; + v65 + }; + Some(e) + } + _ => _rt::invalid_enum_discriminant(), + }; + result66 + } + } + } + #[allow(dead_code, async_fn_in_trait, unused_imports, clippy::all)] + pub mod outgoing_handler { + #[used] + #[doc(hidden)] + static __FORCE_SECTION_REF: fn() = super::super::super::__link_custom_section_describing_imports; + use super::super::super::_rt; + pub type OutgoingRequest = super::super::super::wasi::http::types::OutgoingRequest; + pub type RequestOptions = super::super::super::wasi::http::types::RequestOptions; + pub type FutureIncomingResponse = super::super::super::wasi::http::types::FutureIncomingResponse; + pub type ErrorCode = super::super::super::wasi::http::types::ErrorCode; + #[allow(unused_unsafe, clippy::all)] + pub fn handle( + request: OutgoingRequest, + options: Option, + ) -> Result { + unsafe { + #[repr(align(8))] + struct RetArea( + [::core::mem::MaybeUninit< + u8, + >; 24 + 4 * ::core::mem::size_of::<*const u8>()], + ); + let mut ret_area = RetArea( + [::core::mem::MaybeUninit::uninit(); 24 + + 4 * ::core::mem::size_of::<*const u8>()], + ); + let (result0_0, result0_1) = match &options { + Some(e) => (1i32, (e).take_handle() as i32), + None => (0i32, 0i32), + }; + let ptr1 = ret_area.0.as_mut_ptr().cast::(); + #[cfg(target_arch = "wasm32")] + #[link(wasm_import_module = "wasi:http/outgoing-handler@0.2.0")] + unsafe extern "C" { + #[link_name = "handle"] + fn wit_import2(_: i32, _: i32, _: i32, _: *mut u8); + } + #[cfg(not(target_arch = "wasm32"))] + unsafe extern "C" fn wit_import2( + _: i32, + _: i32, + _: i32, + _: *mut u8, + ) { + unreachable!() + } + unsafe { + wit_import2( + (&request).take_handle() as i32, + result0_0, + result0_1, + ptr1, + ) + }; + let l3 = i32::from(*ptr1.add(0).cast::()); + let result68 = match l3 { + 0 => { + let e = { + let l4 = *ptr1.add(8).cast::(); + unsafe { + super::super::super::wasi::http::types::FutureIncomingResponse::from_handle( + l4 as u32, + ) + } + }; + Ok(e) + } + 1 => { + let e = { + let l5 = i32::from(*ptr1.add(8).cast::()); + use super::super::super::wasi::http::types::ErrorCode as V67; + let v67 = match l5 { + 0 => V67::DnsTimeout, + 1 => { + let e67 = { + let l6 = i32::from(*ptr1.add(16).cast::()); + let l10 = i32::from( + *ptr1 + .add(16 + 3 * ::core::mem::size_of::<*const u8>()) + .cast::(), + ); + super::super::super::wasi::http::types::DnsErrorPayload { + rcode: match l6 { + 0 => None, + 1 => { + let e = { + let l7 = *ptr1 + .add(16 + 1 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l8 = *ptr1 + .add(16 + 2 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len9 = l8; + let bytes9 = _rt::Vec::from_raw_parts( + l7.cast(), + len9, + len9, + ); + _rt::string_lift(bytes9) + }; + Some(e) + } + _ => _rt::invalid_enum_discriminant(), + }, + info_code: match l10 { + 0 => None, + 1 => { + let e = { + let l11 = i32::from( + *ptr1 + .add(18 + 3 * ::core::mem::size_of::<*const u8>()) + .cast::(), + ); + l11 as u16 + }; + Some(e) + } + _ => _rt::invalid_enum_discriminant(), + }, + } + }; + V67::DnsError(e67) + } + 2 => V67::DestinationNotFound, + 3 => V67::DestinationUnavailable, + 4 => V67::DestinationIpProhibited, + 5 => V67::DestinationIpUnroutable, + 6 => V67::ConnectionRefused, + 7 => V67::ConnectionTerminated, + 8 => V67::ConnectionTimeout, + 9 => V67::ConnectionReadTimeout, + 10 => V67::ConnectionWriteTimeout, + 11 => V67::ConnectionLimitReached, + 12 => V67::TlsProtocolError, + 13 => V67::TlsCertificateError, + 14 => { + let e67 = { + let l12 = i32::from(*ptr1.add(16).cast::()); + let l14 = i32::from( + *ptr1 + .add(16 + 1 * ::core::mem::size_of::<*const u8>()) + .cast::(), + ); + super::super::super::wasi::http::types::TlsAlertReceivedPayload { + alert_id: match l12 { + 0 => None, + 1 => { + let e = { + let l13 = i32::from(*ptr1.add(17).cast::()); + l13 as u8 + }; + Some(e) + } + _ => _rt::invalid_enum_discriminant(), + }, + alert_message: match l14 { + 0 => None, + 1 => { + let e = { + let l15 = *ptr1 + .add(16 + 2 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l16 = *ptr1 + .add(16 + 3 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len17 = l16; + let bytes17 = _rt::Vec::from_raw_parts( + l15.cast(), + len17, + len17, + ); + _rt::string_lift(bytes17) + }; + Some(e) + } + _ => _rt::invalid_enum_discriminant(), + }, + } + }; + V67::TlsAlertReceived(e67) + } + 15 => V67::HttpRequestDenied, + 16 => V67::HttpRequestLengthRequired, + 17 => { + let e67 = { + let l18 = i32::from(*ptr1.add(16).cast::()); + match l18 { + 0 => None, + 1 => { + let e = { + let l19 = *ptr1.add(24).cast::(); + l19 as u64 + }; + Some(e) + } + _ => _rt::invalid_enum_discriminant(), + } + }; + V67::HttpRequestBodySize(e67) + } + 18 => V67::HttpRequestMethodInvalid, + 19 => V67::HttpRequestUriInvalid, + 20 => V67::HttpRequestUriTooLong, + 21 => { + let e67 = { + let l20 = i32::from(*ptr1.add(16).cast::()); + match l20 { + 0 => None, + 1 => { + let e = { + let l21 = *ptr1.add(20).cast::(); + l21 as u32 + }; + Some(e) + } + _ => _rt::invalid_enum_discriminant(), + } + }; + V67::HttpRequestHeaderSectionSize(e67) + } + 22 => { + let e67 = { + let l22 = i32::from(*ptr1.add(16).cast::()); + match l22 { + 0 => None, + 1 => { + let e = { + let l23 = i32::from( + *ptr1 + .add(16 + 1 * ::core::mem::size_of::<*const u8>()) + .cast::(), + ); + let l27 = i32::from( + *ptr1 + .add(16 + 4 * ::core::mem::size_of::<*const u8>()) + .cast::(), + ); + super::super::super::wasi::http::types::FieldSizePayload { + field_name: match l23 { + 0 => None, + 1 => { + let e = { + let l24 = *ptr1 + .add(16 + 2 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l25 = *ptr1 + .add(16 + 3 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len26 = l25; + let bytes26 = _rt::Vec::from_raw_parts( + l24.cast(), + len26, + len26, + ); + _rt::string_lift(bytes26) + }; + Some(e) + } + _ => _rt::invalid_enum_discriminant(), + }, + field_size: match l27 { + 0 => None, + 1 => { + let e = { + let l28 = *ptr1 + .add(20 + 4 * ::core::mem::size_of::<*const u8>()) + .cast::(); + l28 as u32 + }; + Some(e) + } + _ => _rt::invalid_enum_discriminant(), + }, + } + }; + Some(e) + } + _ => _rt::invalid_enum_discriminant(), + } + }; + V67::HttpRequestHeaderSize(e67) + } + 23 => { + let e67 = { + let l29 = i32::from(*ptr1.add(16).cast::()); + match l29 { + 0 => None, + 1 => { + let e = { + let l30 = *ptr1.add(20).cast::(); + l30 as u32 + }; + Some(e) + } + _ => _rt::invalid_enum_discriminant(), + } + }; + V67::HttpRequestTrailerSectionSize(e67) + } + 24 => { + let e67 = { + let l31 = i32::from(*ptr1.add(16).cast::()); + let l35 = i32::from( + *ptr1 + .add(16 + 3 * ::core::mem::size_of::<*const u8>()) + .cast::(), + ); + super::super::super::wasi::http::types::FieldSizePayload { + field_name: match l31 { + 0 => None, + 1 => { + let e = { + let l32 = *ptr1 + .add(16 + 1 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l33 = *ptr1 + .add(16 + 2 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len34 = l33; + let bytes34 = _rt::Vec::from_raw_parts( + l32.cast(), + len34, + len34, + ); + _rt::string_lift(bytes34) + }; + Some(e) + } + _ => _rt::invalid_enum_discriminant(), + }, + field_size: match l35 { + 0 => None, + 1 => { + let e = { + let l36 = *ptr1 + .add(20 + 3 * ::core::mem::size_of::<*const u8>()) + .cast::(); + l36 as u32 + }; + Some(e) + } + _ => _rt::invalid_enum_discriminant(), + }, + } + }; + V67::HttpRequestTrailerSize(e67) + } + 25 => V67::HttpResponseIncomplete, + 26 => { + let e67 = { + let l37 = i32::from(*ptr1.add(16).cast::()); + match l37 { + 0 => None, + 1 => { + let e = { + let l38 = *ptr1.add(20).cast::(); + l38 as u32 + }; + Some(e) + } + _ => _rt::invalid_enum_discriminant(), + } + }; + V67::HttpResponseHeaderSectionSize(e67) + } + 27 => { + let e67 = { + let l39 = i32::from(*ptr1.add(16).cast::()); + let l43 = i32::from( + *ptr1 + .add(16 + 3 * ::core::mem::size_of::<*const u8>()) + .cast::(), + ); + super::super::super::wasi::http::types::FieldSizePayload { + field_name: match l39 { + 0 => None, + 1 => { + let e = { + let l40 = *ptr1 + .add(16 + 1 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l41 = *ptr1 + .add(16 + 2 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len42 = l41; + let bytes42 = _rt::Vec::from_raw_parts( + l40.cast(), + len42, + len42, + ); + _rt::string_lift(bytes42) + }; + Some(e) + } + _ => _rt::invalid_enum_discriminant(), + }, + field_size: match l43 { + 0 => None, + 1 => { + let e = { + let l44 = *ptr1 + .add(20 + 3 * ::core::mem::size_of::<*const u8>()) + .cast::(); + l44 as u32 + }; + Some(e) + } + _ => _rt::invalid_enum_discriminant(), + }, + } + }; + V67::HttpResponseHeaderSize(e67) + } + 28 => { + let e67 = { + let l45 = i32::from(*ptr1.add(16).cast::()); + match l45 { + 0 => None, + 1 => { + let e = { + let l46 = *ptr1.add(24).cast::(); + l46 as u64 + }; + Some(e) + } + _ => _rt::invalid_enum_discriminant(), + } + }; + V67::HttpResponseBodySize(e67) + } + 29 => { + let e67 = { + let l47 = i32::from(*ptr1.add(16).cast::()); + match l47 { + 0 => None, + 1 => { + let e = { + let l48 = *ptr1.add(20).cast::(); + l48 as u32 + }; + Some(e) + } + _ => _rt::invalid_enum_discriminant(), + } + }; + V67::HttpResponseTrailerSectionSize(e67) + } + 30 => { + let e67 = { + let l49 = i32::from(*ptr1.add(16).cast::()); + let l53 = i32::from( + *ptr1 + .add(16 + 3 * ::core::mem::size_of::<*const u8>()) + .cast::(), + ); + super::super::super::wasi::http::types::FieldSizePayload { + field_name: match l49 { + 0 => None, + 1 => { + let e = { + let l50 = *ptr1 + .add(16 + 1 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l51 = *ptr1 + .add(16 + 2 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len52 = l51; + let bytes52 = _rt::Vec::from_raw_parts( + l50.cast(), + len52, + len52, + ); + _rt::string_lift(bytes52) + }; + Some(e) + } + _ => _rt::invalid_enum_discriminant(), + }, + field_size: match l53 { + 0 => None, + 1 => { + let e = { + let l54 = *ptr1 + .add(20 + 3 * ::core::mem::size_of::<*const u8>()) + .cast::(); + l54 as u32 + }; + Some(e) + } + _ => _rt::invalid_enum_discriminant(), + }, + } + }; + V67::HttpResponseTrailerSize(e67) + } + 31 => { + let e67 = { + let l55 = i32::from(*ptr1.add(16).cast::()); + match l55 { + 0 => None, + 1 => { + let e = { + let l56 = *ptr1 + .add(16 + 1 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l57 = *ptr1 + .add(16 + 2 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len58 = l57; + let bytes58 = _rt::Vec::from_raw_parts( + l56.cast(), + len58, + len58, + ); + _rt::string_lift(bytes58) + }; + Some(e) + } + _ => _rt::invalid_enum_discriminant(), + } + }; + V67::HttpResponseTransferCoding(e67) + } + 32 => { + let e67 = { + let l59 = i32::from(*ptr1.add(16).cast::()); + match l59 { + 0 => None, + 1 => { + let e = { + let l60 = *ptr1 + .add(16 + 1 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l61 = *ptr1 + .add(16 + 2 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len62 = l61; + let bytes62 = _rt::Vec::from_raw_parts( + l60.cast(), + len62, + len62, + ); + _rt::string_lift(bytes62) + }; + Some(e) + } + _ => _rt::invalid_enum_discriminant(), + } + }; + V67::HttpResponseContentCoding(e67) + } + 33 => V67::HttpResponseTimeout, + 34 => V67::HttpUpgradeFailed, + 35 => V67::HttpProtocolError, + 36 => V67::LoopDetected, + 37 => V67::ConfigurationError, + n => { + debug_assert_eq!(n, 38, "invalid enum discriminant"); + let e67 = { + let l63 = i32::from(*ptr1.add(16).cast::()); + match l63 { + 0 => None, + 1 => { + let e = { + let l64 = *ptr1 + .add(16 + 1 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l65 = *ptr1 + .add(16 + 2 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len66 = l65; + let bytes66 = _rt::Vec::from_raw_parts( + l64.cast(), + len66, + len66, + ); + _rt::string_lift(bytes66) + }; + Some(e) + } + _ => _rt::invalid_enum_discriminant(), + } + }; + V67::InternalError(e67) + } + }; + v67 + }; + Err(e) + } + _ => _rt::invalid_enum_discriminant(), + }; + result68 + } + } + } + } + pub mod io { + #[allow(dead_code, async_fn_in_trait, unused_imports, clippy::all)] + pub mod poll { + #[used] + #[doc(hidden)] + static __FORCE_SECTION_REF: fn() = super::super::super::__link_custom_section_describing_imports; + use super::super::super::_rt; + #[derive(Debug)] + #[repr(transparent)] + pub struct Pollable { + handle: _rt::Resource, + } + impl Pollable { + #[doc(hidden)] + pub unsafe fn from_handle(handle: u32) -> Self { + Self { + handle: unsafe { _rt::Resource::from_handle(handle) }, + } + } + #[doc(hidden)] + pub fn take_handle(&self) -> u32 { + _rt::Resource::take_handle(&self.handle) + } + #[doc(hidden)] + pub fn handle(&self) -> u32 { + _rt::Resource::handle(&self.handle) + } + } + unsafe impl _rt::WasmResource for Pollable { + #[inline] + unsafe fn drop(_handle: u32) { + #[cfg(not(target_arch = "wasm32"))] + unreachable!(); + #[cfg(target_arch = "wasm32")] + { + #[link(wasm_import_module = "wasi:io/poll@0.2.0")] + unsafe extern "C" { + #[link_name = "[resource-drop]pollable"] + fn drop(_: u32); + } + unsafe { drop(_handle) }; + } + } + } + impl Pollable { + #[allow(unused_unsafe, clippy::all)] + pub fn ready(&self) -> bool { + unsafe { + #[cfg(target_arch = "wasm32")] + #[link(wasm_import_module = "wasi:io/poll@0.2.0")] + unsafe extern "C" { + #[link_name = "[method]pollable.ready"] + fn wit_import0(_: i32) -> i32; + } + #[cfg(not(target_arch = "wasm32"))] + unsafe extern "C" fn wit_import0(_: i32) -> i32 { + unreachable!() + } + let ret = unsafe { wit_import0((self).handle() as i32) }; + _rt::bool_lift(ret as u8) + } + } + } + impl Pollable { + #[allow(unused_unsafe, clippy::all)] + pub fn block(&self) -> () { + unsafe { + #[cfg(target_arch = "wasm32")] + #[link(wasm_import_module = "wasi:io/poll@0.2.0")] + unsafe extern "C" { + #[link_name = "[method]pollable.block"] + fn wit_import0(_: i32); + } + #[cfg(not(target_arch = "wasm32"))] + unsafe extern "C" fn wit_import0(_: i32) { + unreachable!() + } + unsafe { wit_import0((self).handle() as i32) }; + } + } + } + #[allow(unused_unsafe, clippy::all)] + pub fn poll(in_: &[&Pollable]) -> _rt::Vec { + unsafe { + #[cfg_attr(target_pointer_width = "64", repr(align(8)))] + #[cfg_attr(target_pointer_width = "32", repr(align(4)))] + struct RetArea( + [::core::mem::MaybeUninit< + u8, + >; 2 * ::core::mem::size_of::<*const u8>()], + ); + let mut ret_area = RetArea( + [::core::mem::MaybeUninit::uninit(); 2 + * ::core::mem::size_of::<*const u8>()], + ); + let vec0 = in_; + let len0 = vec0.len(); + let layout0 = _rt::alloc::Layout::from_size_align_unchecked( + vec0.len() * 4, + 4, + ); + let result0 = if layout0.size() != 0 { + let ptr = _rt::alloc::alloc(layout0).cast::(); + if ptr.is_null() { + _rt::alloc::handle_alloc_error(layout0); + } + ptr + } else { + ::core::ptr::null_mut() + }; + for (i, e) in vec0.into_iter().enumerate() { + let base = result0.add(i * 4); + { + *base.add(0).cast::() = (e).handle() as i32; + } + } + let ptr1 = ret_area.0.as_mut_ptr().cast::(); + #[cfg(target_arch = "wasm32")] + #[link(wasm_import_module = "wasi:io/poll@0.2.0")] + unsafe extern "C" { + #[link_name = "poll"] + fn wit_import2(_: *mut u8, _: usize, _: *mut u8); + } + #[cfg(not(target_arch = "wasm32"))] + unsafe extern "C" fn wit_import2(_: *mut u8, _: usize, _: *mut u8) { + unreachable!() + } + unsafe { wit_import2(result0, len0, ptr1) }; + let l3 = *ptr1.add(0).cast::<*mut u8>(); + let l4 = *ptr1 + .add(::core::mem::size_of::<*const u8>()) + .cast::(); + let len5 = l4; + let result6 = _rt::Vec::from_raw_parts(l3.cast(), len5, len5); + if layout0.size() != 0 { + _rt::alloc::dealloc(result0.cast(), layout0); + } + result6 + } + } + } + #[allow(dead_code, async_fn_in_trait, unused_imports, clippy::all)] + pub mod error { + #[used] + #[doc(hidden)] + static __FORCE_SECTION_REF: fn() = super::super::super::__link_custom_section_describing_imports; + use super::super::super::_rt; + #[derive(Debug)] + #[repr(transparent)] + pub struct Error { + handle: _rt::Resource, + } + impl Error { + #[doc(hidden)] + pub unsafe fn from_handle(handle: u32) -> Self { + Self { + handle: unsafe { _rt::Resource::from_handle(handle) }, + } + } + #[doc(hidden)] + pub fn take_handle(&self) -> u32 { + _rt::Resource::take_handle(&self.handle) + } + #[doc(hidden)] + pub fn handle(&self) -> u32 { + _rt::Resource::handle(&self.handle) + } + } + unsafe impl _rt::WasmResource for Error { + #[inline] + unsafe fn drop(_handle: u32) { + #[cfg(not(target_arch = "wasm32"))] + unreachable!(); + #[cfg(target_arch = "wasm32")] + { + #[link(wasm_import_module = "wasi:io/error@0.2.0")] + unsafe extern "C" { + #[link_name = "[resource-drop]error"] + fn drop(_: u32); + } + unsafe { drop(_handle) }; + } + } + } + impl Error { + #[allow(unused_unsafe, clippy::all)] + pub fn to_debug_string(&self) -> _rt::String { + unsafe { + #[cfg_attr(target_pointer_width = "64", repr(align(8)))] + #[cfg_attr(target_pointer_width = "32", repr(align(4)))] + struct RetArea( + [::core::mem::MaybeUninit< + u8, + >; 2 * ::core::mem::size_of::<*const u8>()], + ); + let mut ret_area = RetArea( + [::core::mem::MaybeUninit::uninit(); 2 + * ::core::mem::size_of::<*const u8>()], + ); + let ptr0 = ret_area.0.as_mut_ptr().cast::(); + #[cfg(target_arch = "wasm32")] + #[link(wasm_import_module = "wasi:io/error@0.2.0")] + unsafe extern "C" { + #[link_name = "[method]error.to-debug-string"] + fn wit_import1(_: i32, _: *mut u8); + } + #[cfg(not(target_arch = "wasm32"))] + unsafe extern "C" fn wit_import1(_: i32, _: *mut u8) { + unreachable!() + } + unsafe { wit_import1((self).handle() as i32, ptr0) }; + let l2 = *ptr0.add(0).cast::<*mut u8>(); + let l3 = *ptr0 + .add(::core::mem::size_of::<*const u8>()) + .cast::(); + let len4 = l3; + let bytes4 = _rt::Vec::from_raw_parts(l2.cast(), len4, len4); + let result5 = _rt::string_lift(bytes4); + result5 + } + } + } + } + #[allow(dead_code, async_fn_in_trait, unused_imports, clippy::all)] + pub mod streams { + #[used] + #[doc(hidden)] + static __FORCE_SECTION_REF: fn() = super::super::super::__link_custom_section_describing_imports; + use super::super::super::_rt; + pub type Error = super::super::super::wasi::io::error::Error; + pub type Pollable = super::super::super::wasi::io::poll::Pollable; + pub enum StreamError { + LastOperationFailed(Error), + Closed, + } + impl ::core::fmt::Debug for StreamError { + fn fmt( + &self, + f: &mut ::core::fmt::Formatter<'_>, + ) -> ::core::fmt::Result { + match self { + StreamError::LastOperationFailed(e) => { + f.debug_tuple("StreamError::LastOperationFailed") + .field(e) + .finish() + } + StreamError::Closed => { + f.debug_tuple("StreamError::Closed").finish() + } + } + } + } + impl ::core::fmt::Display for StreamError { + fn fmt( + &self, + f: &mut ::core::fmt::Formatter<'_>, + ) -> ::core::fmt::Result { + write!(f, "{:?}", self) + } + } + impl std::error::Error for StreamError {} + #[derive(Debug)] + #[repr(transparent)] + pub struct InputStream { + handle: _rt::Resource, + } + impl InputStream { + #[doc(hidden)] + pub unsafe fn from_handle(handle: u32) -> Self { + Self { + handle: unsafe { _rt::Resource::from_handle(handle) }, + } + } + #[doc(hidden)] + pub fn take_handle(&self) -> u32 { + _rt::Resource::take_handle(&self.handle) + } + #[doc(hidden)] + pub fn handle(&self) -> u32 { + _rt::Resource::handle(&self.handle) + } + } + unsafe impl _rt::WasmResource for InputStream { + #[inline] + unsafe fn drop(_handle: u32) { + #[cfg(not(target_arch = "wasm32"))] + unreachable!(); + #[cfg(target_arch = "wasm32")] + { + #[link(wasm_import_module = "wasi:io/streams@0.2.0")] + unsafe extern "C" { + #[link_name = "[resource-drop]input-stream"] + fn drop(_: u32); + } + unsafe { drop(_handle) }; + } + } + } + #[derive(Debug)] + #[repr(transparent)] + pub struct OutputStream { + handle: _rt::Resource, + } + impl OutputStream { + #[doc(hidden)] + pub unsafe fn from_handle(handle: u32) -> Self { + Self { + handle: unsafe { _rt::Resource::from_handle(handle) }, + } + } + #[doc(hidden)] + pub fn take_handle(&self) -> u32 { + _rt::Resource::take_handle(&self.handle) + } + #[doc(hidden)] + pub fn handle(&self) -> u32 { + _rt::Resource::handle(&self.handle) + } + } + unsafe impl _rt::WasmResource for OutputStream { + #[inline] + unsafe fn drop(_handle: u32) { + #[cfg(not(target_arch = "wasm32"))] + unreachable!(); + #[cfg(target_arch = "wasm32")] + { + #[link(wasm_import_module = "wasi:io/streams@0.2.0")] + unsafe extern "C" { + #[link_name = "[resource-drop]output-stream"] + fn drop(_: u32); + } + unsafe { drop(_handle) }; + } + } + } + impl InputStream { + #[allow(unused_unsafe, clippy::all)] + pub fn read(&self, len: u64) -> Result<_rt::Vec, StreamError> { + unsafe { + #[cfg_attr(target_pointer_width = "64", repr(align(8)))] + #[cfg_attr(target_pointer_width = "32", repr(align(4)))] + struct RetArea( + [::core::mem::MaybeUninit< + u8, + >; 3 * ::core::mem::size_of::<*const u8>()], + ); + let mut ret_area = RetArea( + [::core::mem::MaybeUninit::uninit(); 3 + * ::core::mem::size_of::<*const u8>()], + ); + let ptr0 = ret_area.0.as_mut_ptr().cast::(); + #[cfg(target_arch = "wasm32")] + #[link(wasm_import_module = "wasi:io/streams@0.2.0")] + unsafe extern "C" { + #[link_name = "[method]input-stream.read"] + fn wit_import1(_: i32, _: i64, _: *mut u8); + } + #[cfg(not(target_arch = "wasm32"))] + unsafe extern "C" fn wit_import1(_: i32, _: i64, _: *mut u8) { + unreachable!() + } + unsafe { + wit_import1((self).handle() as i32, _rt::as_i64(&len), ptr0) + }; + let l2 = i32::from(*ptr0.add(0).cast::()); + let result9 = match l2 { + 0 => { + let e = { + let l3 = *ptr0 + .add(::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l4 = *ptr0 + .add(2 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len5 = l4; + _rt::Vec::from_raw_parts(l3.cast(), len5, len5) + }; + Ok(e) + } + 1 => { + let e = { + let l6 = i32::from( + *ptr0.add(::core::mem::size_of::<*const u8>()).cast::(), + ); + let v8 = match l6 { + 0 => { + let e8 = { + let l7 = *ptr0 + .add(4 + 1 * ::core::mem::size_of::<*const u8>()) + .cast::(); + unsafe { + super::super::super::wasi::io::error::Error::from_handle( + l7 as u32, + ) + } + }; + StreamError::LastOperationFailed(e8) + } + n => { + debug_assert_eq!(n, 1, "invalid enum discriminant"); + StreamError::Closed + } + }; + v8 + }; + Err(e) + } + _ => _rt::invalid_enum_discriminant(), + }; + result9 + } + } + } + impl InputStream { + #[allow(unused_unsafe, clippy::all)] + pub fn blocking_read( + &self, + len: u64, + ) -> Result<_rt::Vec, StreamError> { + unsafe { + #[cfg_attr(target_pointer_width = "64", repr(align(8)))] + #[cfg_attr(target_pointer_width = "32", repr(align(4)))] + struct RetArea( + [::core::mem::MaybeUninit< + u8, + >; 3 * ::core::mem::size_of::<*const u8>()], + ); + let mut ret_area = RetArea( + [::core::mem::MaybeUninit::uninit(); 3 + * ::core::mem::size_of::<*const u8>()], + ); + let ptr0 = ret_area.0.as_mut_ptr().cast::(); + #[cfg(target_arch = "wasm32")] + #[link(wasm_import_module = "wasi:io/streams@0.2.0")] + unsafe extern "C" { + #[link_name = "[method]input-stream.blocking-read"] + fn wit_import1(_: i32, _: i64, _: *mut u8); + } + #[cfg(not(target_arch = "wasm32"))] + unsafe extern "C" fn wit_import1(_: i32, _: i64, _: *mut u8) { + unreachable!() + } + unsafe { + wit_import1((self).handle() as i32, _rt::as_i64(&len), ptr0) + }; + let l2 = i32::from(*ptr0.add(0).cast::()); + let result9 = match l2 { + 0 => { + let e = { + let l3 = *ptr0 + .add(::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l4 = *ptr0 + .add(2 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len5 = l4; + _rt::Vec::from_raw_parts(l3.cast(), len5, len5) + }; + Ok(e) + } + 1 => { + let e = { + let l6 = i32::from( + *ptr0.add(::core::mem::size_of::<*const u8>()).cast::(), + ); + let v8 = match l6 { + 0 => { + let e8 = { + let l7 = *ptr0 + .add(4 + 1 * ::core::mem::size_of::<*const u8>()) + .cast::(); + unsafe { + super::super::super::wasi::io::error::Error::from_handle( + l7 as u32, + ) + } + }; + StreamError::LastOperationFailed(e8) + } + n => { + debug_assert_eq!(n, 1, "invalid enum discriminant"); + StreamError::Closed + } + }; + v8 + }; + Err(e) + } + _ => _rt::invalid_enum_discriminant(), + }; + result9 + } + } + } + impl InputStream { + #[allow(unused_unsafe, clippy::all)] + pub fn skip(&self, len: u64) -> Result { + unsafe { + #[repr(align(8))] + struct RetArea([::core::mem::MaybeUninit; 16]); + let mut ret_area = RetArea( + [::core::mem::MaybeUninit::uninit(); 16], + ); + let ptr0 = ret_area.0.as_mut_ptr().cast::(); + #[cfg(target_arch = "wasm32")] + #[link(wasm_import_module = "wasi:io/streams@0.2.0")] + unsafe extern "C" { + #[link_name = "[method]input-stream.skip"] + fn wit_import1(_: i32, _: i64, _: *mut u8); + } + #[cfg(not(target_arch = "wasm32"))] + unsafe extern "C" fn wit_import1(_: i32, _: i64, _: *mut u8) { + unreachable!() + } + unsafe { + wit_import1((self).handle() as i32, _rt::as_i64(&len), ptr0) + }; + let l2 = i32::from(*ptr0.add(0).cast::()); + let result7 = match l2 { + 0 => { + let e = { + let l3 = *ptr0.add(8).cast::(); + l3 as u64 + }; + Ok(e) + } + 1 => { + let e = { + let l4 = i32::from(*ptr0.add(8).cast::()); + let v6 = match l4 { + 0 => { + let e6 = { + let l5 = *ptr0.add(12).cast::(); + unsafe { + super::super::super::wasi::io::error::Error::from_handle( + l5 as u32, + ) + } + }; + StreamError::LastOperationFailed(e6) + } + n => { + debug_assert_eq!(n, 1, "invalid enum discriminant"); + StreamError::Closed + } + }; + v6 + }; + Err(e) + } + _ => _rt::invalid_enum_discriminant(), + }; + result7 + } + } + } + impl InputStream { + #[allow(unused_unsafe, clippy::all)] + pub fn blocking_skip(&self, len: u64) -> Result { + unsafe { + #[repr(align(8))] + struct RetArea([::core::mem::MaybeUninit; 16]); + let mut ret_area = RetArea( + [::core::mem::MaybeUninit::uninit(); 16], + ); + let ptr0 = ret_area.0.as_mut_ptr().cast::(); + #[cfg(target_arch = "wasm32")] + #[link(wasm_import_module = "wasi:io/streams@0.2.0")] + unsafe extern "C" { + #[link_name = "[method]input-stream.blocking-skip"] + fn wit_import1(_: i32, _: i64, _: *mut u8); + } + #[cfg(not(target_arch = "wasm32"))] + unsafe extern "C" fn wit_import1(_: i32, _: i64, _: *mut u8) { + unreachable!() + } + unsafe { + wit_import1((self).handle() as i32, _rt::as_i64(&len), ptr0) + }; + let l2 = i32::from(*ptr0.add(0).cast::()); + let result7 = match l2 { + 0 => { + let e = { + let l3 = *ptr0.add(8).cast::(); + l3 as u64 + }; + Ok(e) + } + 1 => { + let e = { + let l4 = i32::from(*ptr0.add(8).cast::()); + let v6 = match l4 { + 0 => { + let e6 = { + let l5 = *ptr0.add(12).cast::(); + unsafe { + super::super::super::wasi::io::error::Error::from_handle( + l5 as u32, + ) + } + }; + StreamError::LastOperationFailed(e6) + } + n => { + debug_assert_eq!(n, 1, "invalid enum discriminant"); + StreamError::Closed + } + }; + v6 + }; + Err(e) + } + _ => _rt::invalid_enum_discriminant(), + }; + result7 + } + } + } + impl InputStream { + #[allow(unused_unsafe, clippy::all)] + pub fn subscribe(&self) -> Pollable { + unsafe { + #[cfg(target_arch = "wasm32")] + #[link(wasm_import_module = "wasi:io/streams@0.2.0")] + unsafe extern "C" { + #[link_name = "[method]input-stream.subscribe"] + fn wit_import0(_: i32) -> i32; + } + #[cfg(not(target_arch = "wasm32"))] + unsafe extern "C" fn wit_import0(_: i32) -> i32 { + unreachable!() + } + let ret = unsafe { wit_import0((self).handle() as i32) }; + unsafe { + super::super::super::wasi::io::poll::Pollable::from_handle( + ret as u32, + ) + } + } + } + } + impl OutputStream { + #[allow(unused_unsafe, clippy::all)] + pub fn check_write(&self) -> Result { + unsafe { + #[repr(align(8))] + struct RetArea([::core::mem::MaybeUninit; 16]); + let mut ret_area = RetArea( + [::core::mem::MaybeUninit::uninit(); 16], + ); + let ptr0 = ret_area.0.as_mut_ptr().cast::(); + #[cfg(target_arch = "wasm32")] + #[link(wasm_import_module = "wasi:io/streams@0.2.0")] + unsafe extern "C" { + #[link_name = "[method]output-stream.check-write"] + fn wit_import1(_: i32, _: *mut u8); + } + #[cfg(not(target_arch = "wasm32"))] + unsafe extern "C" fn wit_import1(_: i32, _: *mut u8) { + unreachable!() + } + unsafe { wit_import1((self).handle() as i32, ptr0) }; + let l2 = i32::from(*ptr0.add(0).cast::()); + let result7 = match l2 { + 0 => { + let e = { + let l3 = *ptr0.add(8).cast::(); + l3 as u64 + }; + Ok(e) + } + 1 => { + let e = { + let l4 = i32::from(*ptr0.add(8).cast::()); + let v6 = match l4 { + 0 => { + let e6 = { + let l5 = *ptr0.add(12).cast::(); + unsafe { + super::super::super::wasi::io::error::Error::from_handle( + l5 as u32, + ) + } + }; + StreamError::LastOperationFailed(e6) + } + n => { + debug_assert_eq!(n, 1, "invalid enum discriminant"); + StreamError::Closed + } + }; + v6 + }; + Err(e) + } + _ => _rt::invalid_enum_discriminant(), + }; + result7 + } + } + } + impl OutputStream { + #[allow(unused_unsafe, clippy::all)] + pub fn write(&self, contents: &[u8]) -> Result<(), StreamError> { + unsafe { + #[repr(align(4))] + struct RetArea([::core::mem::MaybeUninit; 12]); + let mut ret_area = RetArea( + [::core::mem::MaybeUninit::uninit(); 12], + ); + let vec0 = contents; + let ptr0 = vec0.as_ptr().cast::(); + let len0 = vec0.len(); + let ptr1 = ret_area.0.as_mut_ptr().cast::(); + #[cfg(target_arch = "wasm32")] + #[link(wasm_import_module = "wasi:io/streams@0.2.0")] + unsafe extern "C" { + #[link_name = "[method]output-stream.write"] + fn wit_import2(_: i32, _: *mut u8, _: usize, _: *mut u8); + } + #[cfg(not(target_arch = "wasm32"))] + unsafe extern "C" fn wit_import2( + _: i32, + _: *mut u8, + _: usize, + _: *mut u8, + ) { + unreachable!() + } + unsafe { + wit_import2( + (self).handle() as i32, + ptr0.cast_mut(), + len0, + ptr1, + ) + }; + let l3 = i32::from(*ptr1.add(0).cast::()); + let result7 = match l3 { + 0 => { + let e = (); + Ok(e) + } + 1 => { + let e = { + let l4 = i32::from(*ptr1.add(4).cast::()); + let v6 = match l4 { + 0 => { + let e6 = { + let l5 = *ptr1.add(8).cast::(); + unsafe { + super::super::super::wasi::io::error::Error::from_handle( + l5 as u32, + ) + } + }; + StreamError::LastOperationFailed(e6) + } + n => { + debug_assert_eq!(n, 1, "invalid enum discriminant"); + StreamError::Closed + } + }; + v6 + }; + Err(e) + } + _ => _rt::invalid_enum_discriminant(), + }; + result7 + } + } + } + impl OutputStream { + #[allow(unused_unsafe, clippy::all)] + pub fn blocking_write_and_flush( + &self, + contents: &[u8], + ) -> Result<(), StreamError> { + unsafe { + #[repr(align(4))] + struct RetArea([::core::mem::MaybeUninit; 12]); + let mut ret_area = RetArea( + [::core::mem::MaybeUninit::uninit(); 12], + ); + let vec0 = contents; + let ptr0 = vec0.as_ptr().cast::(); + let len0 = vec0.len(); + let ptr1 = ret_area.0.as_mut_ptr().cast::(); + #[cfg(target_arch = "wasm32")] + #[link(wasm_import_module = "wasi:io/streams@0.2.0")] + unsafe extern "C" { + #[link_name = "[method]output-stream.blocking-write-and-flush"] + fn wit_import2(_: i32, _: *mut u8, _: usize, _: *mut u8); + } + #[cfg(not(target_arch = "wasm32"))] + unsafe extern "C" fn wit_import2( + _: i32, + _: *mut u8, + _: usize, + _: *mut u8, + ) { + unreachable!() + } + unsafe { + wit_import2( + (self).handle() as i32, + ptr0.cast_mut(), + len0, + ptr1, + ) + }; + let l3 = i32::from(*ptr1.add(0).cast::()); + let result7 = match l3 { + 0 => { + let e = (); + Ok(e) + } + 1 => { + let e = { + let l4 = i32::from(*ptr1.add(4).cast::()); + let v6 = match l4 { + 0 => { + let e6 = { + let l5 = *ptr1.add(8).cast::(); + unsafe { + super::super::super::wasi::io::error::Error::from_handle( + l5 as u32, + ) + } + }; + StreamError::LastOperationFailed(e6) + } + n => { + debug_assert_eq!(n, 1, "invalid enum discriminant"); + StreamError::Closed + } + }; + v6 + }; + Err(e) + } + _ => _rt::invalid_enum_discriminant(), + }; + result7 + } + } + } + impl OutputStream { + #[allow(unused_unsafe, clippy::all)] + pub fn flush(&self) -> Result<(), StreamError> { + unsafe { + #[repr(align(4))] + struct RetArea([::core::mem::MaybeUninit; 12]); + let mut ret_area = RetArea( + [::core::mem::MaybeUninit::uninit(); 12], + ); + let ptr0 = ret_area.0.as_mut_ptr().cast::(); + #[cfg(target_arch = "wasm32")] + #[link(wasm_import_module = "wasi:io/streams@0.2.0")] + unsafe extern "C" { + #[link_name = "[method]output-stream.flush"] + fn wit_import1(_: i32, _: *mut u8); + } + #[cfg(not(target_arch = "wasm32"))] + unsafe extern "C" fn wit_import1(_: i32, _: *mut u8) { + unreachable!() + } + unsafe { wit_import1((self).handle() as i32, ptr0) }; + let l2 = i32::from(*ptr0.add(0).cast::()); + let result6 = match l2 { + 0 => { + let e = (); + Ok(e) + } + 1 => { + let e = { + let l3 = i32::from(*ptr0.add(4).cast::()); + let v5 = match l3 { + 0 => { + let e5 = { + let l4 = *ptr0.add(8).cast::(); + unsafe { + super::super::super::wasi::io::error::Error::from_handle( + l4 as u32, + ) + } + }; + StreamError::LastOperationFailed(e5) + } + n => { + debug_assert_eq!(n, 1, "invalid enum discriminant"); + StreamError::Closed + } + }; + v5 + }; + Err(e) + } + _ => _rt::invalid_enum_discriminant(), + }; + result6 + } + } + } + impl OutputStream { + #[allow(unused_unsafe, clippy::all)] + pub fn blocking_flush(&self) -> Result<(), StreamError> { + unsafe { + #[repr(align(4))] + struct RetArea([::core::mem::MaybeUninit; 12]); + let mut ret_area = RetArea( + [::core::mem::MaybeUninit::uninit(); 12], + ); + let ptr0 = ret_area.0.as_mut_ptr().cast::(); + #[cfg(target_arch = "wasm32")] + #[link(wasm_import_module = "wasi:io/streams@0.2.0")] + unsafe extern "C" { + #[link_name = "[method]output-stream.blocking-flush"] + fn wit_import1(_: i32, _: *mut u8); + } + #[cfg(not(target_arch = "wasm32"))] + unsafe extern "C" fn wit_import1(_: i32, _: *mut u8) { + unreachable!() + } + unsafe { wit_import1((self).handle() as i32, ptr0) }; + let l2 = i32::from(*ptr0.add(0).cast::()); + let result6 = match l2 { + 0 => { + let e = (); + Ok(e) + } + 1 => { + let e = { + let l3 = i32::from(*ptr0.add(4).cast::()); + let v5 = match l3 { + 0 => { + let e5 = { + let l4 = *ptr0.add(8).cast::(); + unsafe { + super::super::super::wasi::io::error::Error::from_handle( + l4 as u32, + ) + } + }; + StreamError::LastOperationFailed(e5) + } + n => { + debug_assert_eq!(n, 1, "invalid enum discriminant"); + StreamError::Closed + } + }; + v5 + }; + Err(e) + } + _ => _rt::invalid_enum_discriminant(), + }; + result6 + } + } + } + impl OutputStream { + #[allow(unused_unsafe, clippy::all)] + pub fn subscribe(&self) -> Pollable { + unsafe { + #[cfg(target_arch = "wasm32")] + #[link(wasm_import_module = "wasi:io/streams@0.2.0")] + unsafe extern "C" { + #[link_name = "[method]output-stream.subscribe"] + fn wit_import0(_: i32) -> i32; + } + #[cfg(not(target_arch = "wasm32"))] + unsafe extern "C" fn wit_import0(_: i32) -> i32 { + unreachable!() + } + let ret = unsafe { wit_import0((self).handle() as i32) }; + unsafe { + super::super::super::wasi::io::poll::Pollable::from_handle( + ret as u32, + ) + } + } + } + } + impl OutputStream { + #[allow(unused_unsafe, clippy::all)] + pub fn write_zeroes(&self, len: u64) -> Result<(), StreamError> { + unsafe { + #[repr(align(4))] + struct RetArea([::core::mem::MaybeUninit; 12]); + let mut ret_area = RetArea( + [::core::mem::MaybeUninit::uninit(); 12], + ); + let ptr0 = ret_area.0.as_mut_ptr().cast::(); + #[cfg(target_arch = "wasm32")] + #[link(wasm_import_module = "wasi:io/streams@0.2.0")] + unsafe extern "C" { + #[link_name = "[method]output-stream.write-zeroes"] + fn wit_import1(_: i32, _: i64, _: *mut u8); + } + #[cfg(not(target_arch = "wasm32"))] + unsafe extern "C" fn wit_import1(_: i32, _: i64, _: *mut u8) { + unreachable!() + } + unsafe { + wit_import1((self).handle() as i32, _rt::as_i64(&len), ptr0) + }; + let l2 = i32::from(*ptr0.add(0).cast::()); + let result6 = match l2 { + 0 => { + let e = (); + Ok(e) + } + 1 => { + let e = { + let l3 = i32::from(*ptr0.add(4).cast::()); + let v5 = match l3 { + 0 => { + let e5 = { + let l4 = *ptr0.add(8).cast::(); + unsafe { + super::super::super::wasi::io::error::Error::from_handle( + l4 as u32, + ) + } + }; + StreamError::LastOperationFailed(e5) + } + n => { + debug_assert_eq!(n, 1, "invalid enum discriminant"); + StreamError::Closed + } + }; + v5 + }; + Err(e) + } + _ => _rt::invalid_enum_discriminant(), + }; + result6 + } + } + } + impl OutputStream { + #[allow(unused_unsafe, clippy::all)] + pub fn blocking_write_zeroes_and_flush( + &self, + len: u64, + ) -> Result<(), StreamError> { + unsafe { + #[repr(align(4))] + struct RetArea([::core::mem::MaybeUninit; 12]); + let mut ret_area = RetArea( + [::core::mem::MaybeUninit::uninit(); 12], + ); + let ptr0 = ret_area.0.as_mut_ptr().cast::(); + #[cfg(target_arch = "wasm32")] + #[link(wasm_import_module = "wasi:io/streams@0.2.0")] + unsafe extern "C" { + #[link_name = "[method]output-stream.blocking-write-zeroes-and-flush"] + fn wit_import1(_: i32, _: i64, _: *mut u8); + } + #[cfg(not(target_arch = "wasm32"))] + unsafe extern "C" fn wit_import1(_: i32, _: i64, _: *mut u8) { + unreachable!() + } + unsafe { + wit_import1((self).handle() as i32, _rt::as_i64(&len), ptr0) + }; + let l2 = i32::from(*ptr0.add(0).cast::()); + let result6 = match l2 { + 0 => { + let e = (); + Ok(e) + } + 1 => { + let e = { + let l3 = i32::from(*ptr0.add(4).cast::()); + let v5 = match l3 { + 0 => { + let e5 = { + let l4 = *ptr0.add(8).cast::(); + unsafe { + super::super::super::wasi::io::error::Error::from_handle( + l4 as u32, + ) + } + }; + StreamError::LastOperationFailed(e5) + } + n => { + debug_assert_eq!(n, 1, "invalid enum discriminant"); + StreamError::Closed + } + }; + v5 + }; + Err(e) + } + _ => _rt::invalid_enum_discriminant(), + }; + result6 + } + } + } + impl OutputStream { + #[allow(unused_unsafe, clippy::all)] + pub fn splice( + &self, + src: &InputStream, + len: u64, + ) -> Result { + unsafe { + #[repr(align(8))] + struct RetArea([::core::mem::MaybeUninit; 16]); + let mut ret_area = RetArea( + [::core::mem::MaybeUninit::uninit(); 16], + ); + let ptr0 = ret_area.0.as_mut_ptr().cast::(); + #[cfg(target_arch = "wasm32")] + #[link(wasm_import_module = "wasi:io/streams@0.2.0")] + unsafe extern "C" { + #[link_name = "[method]output-stream.splice"] + fn wit_import1(_: i32, _: i32, _: i64, _: *mut u8); + } + #[cfg(not(target_arch = "wasm32"))] + unsafe extern "C" fn wit_import1( + _: i32, + _: i32, + _: i64, + _: *mut u8, + ) { + unreachable!() + } + unsafe { + wit_import1( + (self).handle() as i32, + (src).handle() as i32, + _rt::as_i64(&len), + ptr0, + ) + }; + let l2 = i32::from(*ptr0.add(0).cast::()); + let result7 = match l2 { + 0 => { + let e = { + let l3 = *ptr0.add(8).cast::(); + l3 as u64 + }; + Ok(e) + } + 1 => { + let e = { + let l4 = i32::from(*ptr0.add(8).cast::()); + let v6 = match l4 { + 0 => { + let e6 = { + let l5 = *ptr0.add(12).cast::(); + unsafe { + super::super::super::wasi::io::error::Error::from_handle( + l5 as u32, + ) + } + }; + StreamError::LastOperationFailed(e6) + } + n => { + debug_assert_eq!(n, 1, "invalid enum discriminant"); + StreamError::Closed + } + }; + v6 + }; + Err(e) + } + _ => _rt::invalid_enum_discriminant(), + }; + result7 + } + } + } + impl OutputStream { + #[allow(unused_unsafe, clippy::all)] + pub fn blocking_splice( + &self, + src: &InputStream, + len: u64, + ) -> Result { + unsafe { + #[repr(align(8))] + struct RetArea([::core::mem::MaybeUninit; 16]); + let mut ret_area = RetArea( + [::core::mem::MaybeUninit::uninit(); 16], + ); + let ptr0 = ret_area.0.as_mut_ptr().cast::(); + #[cfg(target_arch = "wasm32")] + #[link(wasm_import_module = "wasi:io/streams@0.2.0")] + unsafe extern "C" { + #[link_name = "[method]output-stream.blocking-splice"] + fn wit_import1(_: i32, _: i32, _: i64, _: *mut u8); + } + #[cfg(not(target_arch = "wasm32"))] + unsafe extern "C" fn wit_import1( + _: i32, + _: i32, + _: i64, + _: *mut u8, + ) { + unreachable!() + } + unsafe { + wit_import1( + (self).handle() as i32, + (src).handle() as i32, + _rt::as_i64(&len), + ptr0, + ) + }; + let l2 = i32::from(*ptr0.add(0).cast::()); + let result7 = match l2 { + 0 => { + let e = { + let l3 = *ptr0.add(8).cast::(); + l3 as u64 + }; + Ok(e) + } + 1 => { + let e = { + let l4 = i32::from(*ptr0.add(8).cast::()); + let v6 = match l4 { + 0 => { + let e6 = { + let l5 = *ptr0.add(12).cast::(); + unsafe { + super::super::super::wasi::io::error::Error::from_handle( + l5 as u32, + ) + } + }; + StreamError::LastOperationFailed(e6) + } + n => { + debug_assert_eq!(n, 1, "invalid enum discriminant"); + StreamError::Closed + } + }; + v6 + }; + Err(e) + } + _ => _rt::invalid_enum_discriminant(), + }; + result7 + } + } + } + } + } + pub mod keyvalue { + #[allow(dead_code, async_fn_in_trait, unused_imports, clippy::all)] + pub mod store { + #[used] + #[doc(hidden)] + static __FORCE_SECTION_REF: fn() = super::super::super::__link_custom_section_describing_imports; + use super::super::super::_rt; + #[derive(Clone)] + pub enum Error { + NoSuchStore, + AccessDenied, + Other(_rt::String), + } + impl ::core::fmt::Debug for Error { + fn fmt( + &self, + f: &mut ::core::fmt::Formatter<'_>, + ) -> ::core::fmt::Result { + match self { + Error::NoSuchStore => { + f.debug_tuple("Error::NoSuchStore").finish() + } + Error::AccessDenied => { + f.debug_tuple("Error::AccessDenied").finish() + } + Error::Other(e) => { + f.debug_tuple("Error::Other").field(e).finish() + } + } + } + } + impl ::core::fmt::Display for Error { + fn fmt( + &self, + f: &mut ::core::fmt::Formatter<'_>, + ) -> ::core::fmt::Result { + write!(f, "{:?}", self) + } + } + impl std::error::Error for Error {} + #[derive(Clone)] + pub struct KeyResponse { + pub keys: _rt::Vec<_rt::String>, + pub cursor: Option<_rt::String>, + } + impl ::core::fmt::Debug for KeyResponse { + fn fmt( + &self, + f: &mut ::core::fmt::Formatter<'_>, + ) -> ::core::fmt::Result { + f.debug_struct("KeyResponse") + .field("keys", &self.keys) + .field("cursor", &self.cursor) + .finish() + } + } + #[derive(Debug)] + #[repr(transparent)] + pub struct Bucket { + handle: _rt::Resource, + } + impl Bucket { + #[doc(hidden)] + pub unsafe fn from_handle(handle: u32) -> Self { + Self { + handle: unsafe { _rt::Resource::from_handle(handle) }, + } + } + #[doc(hidden)] + pub fn take_handle(&self) -> u32 { + _rt::Resource::take_handle(&self.handle) + } + #[doc(hidden)] + pub fn handle(&self) -> u32 { + _rt::Resource::handle(&self.handle) + } + } + unsafe impl _rt::WasmResource for Bucket { + #[inline] + unsafe fn drop(_handle: u32) { + #[cfg(not(target_arch = "wasm32"))] + unreachable!(); + #[cfg(target_arch = "wasm32")] + { + #[link(wasm_import_module = "wasi:keyvalue/store@0.2.0-draft2")] + unsafe extern "C" { + #[link_name = "[resource-drop]bucket"] + fn drop(_: u32); + } + unsafe { drop(_handle) }; + } + } + } + impl Bucket { + #[allow(unused_unsafe, clippy::all)] + pub fn get(&self, key: &str) -> Result>, Error> { + unsafe { + #[cfg_attr(target_pointer_width = "64", repr(align(8)))] + #[cfg_attr(target_pointer_width = "32", repr(align(4)))] + struct RetArea( + [::core::mem::MaybeUninit< + u8, + >; 4 * ::core::mem::size_of::<*const u8>()], + ); + let mut ret_area = RetArea( + [::core::mem::MaybeUninit::uninit(); 4 + * ::core::mem::size_of::<*const u8>()], + ); + let vec0 = key; + let ptr0 = vec0.as_ptr().cast::(); + let len0 = vec0.len(); + let ptr1 = ret_area.0.as_mut_ptr().cast::(); + #[cfg(target_arch = "wasm32")] + #[link(wasm_import_module = "wasi:keyvalue/store@0.2.0-draft2")] + unsafe extern "C" { + #[link_name = "[method]bucket.get"] + fn wit_import2(_: i32, _: *mut u8, _: usize, _: *mut u8); + } + #[cfg(not(target_arch = "wasm32"))] + unsafe extern "C" fn wit_import2( + _: i32, + _: *mut u8, + _: usize, + _: *mut u8, + ) { + unreachable!() + } + unsafe { + wit_import2( + (self).handle() as i32, + ptr0.cast_mut(), + len0, + ptr1, + ) + }; + let l3 = i32::from(*ptr1.add(0).cast::()); + let result13 = match l3 { + 0 => { + let e = { + let l4 = i32::from( + *ptr1.add(::core::mem::size_of::<*const u8>()).cast::(), + ); + match l4 { + 0 => None, + 1 => { + let e = { + let l5 = *ptr1 + .add(2 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l6 = *ptr1 + .add(3 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len7 = l6; + _rt::Vec::from_raw_parts(l5.cast(), len7, len7) + }; + Some(e) + } + _ => _rt::invalid_enum_discriminant(), + } + }; + Ok(e) + } + 1 => { + let e = { + let l8 = i32::from( + *ptr1.add(::core::mem::size_of::<*const u8>()).cast::(), + ); + let v12 = match l8 { + 0 => Error::NoSuchStore, + 1 => Error::AccessDenied, + n => { + debug_assert_eq!(n, 2, "invalid enum discriminant"); + let e12 = { + let l9 = *ptr1 + .add(2 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l10 = *ptr1 + .add(3 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len11 = l10; + let bytes11 = _rt::Vec::from_raw_parts( + l9.cast(), + len11, + len11, + ); + _rt::string_lift(bytes11) + }; + Error::Other(e12) + } + }; + v12 + }; + Err(e) + } + _ => _rt::invalid_enum_discriminant(), + }; + result13 + } + } + } + impl Bucket { + #[allow(unused_unsafe, clippy::all)] + pub fn set(&self, key: &str, value: &[u8]) -> Result<(), Error> { + unsafe { + #[cfg_attr(target_pointer_width = "64", repr(align(8)))] + #[cfg_attr(target_pointer_width = "32", repr(align(4)))] + struct RetArea( + [::core::mem::MaybeUninit< + u8, + >; 4 * ::core::mem::size_of::<*const u8>()], + ); + let mut ret_area = RetArea( + [::core::mem::MaybeUninit::uninit(); 4 + * ::core::mem::size_of::<*const u8>()], + ); + let vec0 = key; + let ptr0 = vec0.as_ptr().cast::(); + let len0 = vec0.len(); + let vec1 = value; + let ptr1 = vec1.as_ptr().cast::(); + let len1 = vec1.len(); + let ptr2 = ret_area.0.as_mut_ptr().cast::(); + #[cfg(target_arch = "wasm32")] + #[link(wasm_import_module = "wasi:keyvalue/store@0.2.0-draft2")] + unsafe extern "C" { + #[link_name = "[method]bucket.set"] + fn wit_import3( + _: i32, + _: *mut u8, + _: usize, + _: *mut u8, + _: usize, + _: *mut u8, + ); + } + #[cfg(not(target_arch = "wasm32"))] + unsafe extern "C" fn wit_import3( + _: i32, + _: *mut u8, + _: usize, + _: *mut u8, + _: usize, + _: *mut u8, + ) { + unreachable!() + } + unsafe { + wit_import3( + (self).handle() as i32, + ptr0.cast_mut(), + len0, + ptr1.cast_mut(), + len1, + ptr2, + ) + }; + let l4 = i32::from(*ptr2.add(0).cast::()); + let result10 = match l4 { + 0 => { + let e = (); + Ok(e) + } + 1 => { + let e = { + let l5 = i32::from( + *ptr2.add(::core::mem::size_of::<*const u8>()).cast::(), + ); + let v9 = match l5 { + 0 => Error::NoSuchStore, + 1 => Error::AccessDenied, + n => { + debug_assert_eq!(n, 2, "invalid enum discriminant"); + let e9 = { + let l6 = *ptr2 + .add(2 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l7 = *ptr2 + .add(3 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len8 = l7; + let bytes8 = _rt::Vec::from_raw_parts( + l6.cast(), + len8, + len8, + ); + _rt::string_lift(bytes8) + }; + Error::Other(e9) + } + }; + v9 + }; + Err(e) + } + _ => _rt::invalid_enum_discriminant(), + }; + result10 + } + } + } + impl Bucket { + #[allow(unused_unsafe, clippy::all)] + pub fn delete(&self, key: &str) -> Result<(), Error> { + unsafe { + #[cfg_attr(target_pointer_width = "64", repr(align(8)))] + #[cfg_attr(target_pointer_width = "32", repr(align(4)))] + struct RetArea( + [::core::mem::MaybeUninit< + u8, + >; 4 * ::core::mem::size_of::<*const u8>()], + ); + let mut ret_area = RetArea( + [::core::mem::MaybeUninit::uninit(); 4 + * ::core::mem::size_of::<*const u8>()], + ); + let vec0 = key; + let ptr0 = vec0.as_ptr().cast::(); + let len0 = vec0.len(); + let ptr1 = ret_area.0.as_mut_ptr().cast::(); + #[cfg(target_arch = "wasm32")] + #[link(wasm_import_module = "wasi:keyvalue/store@0.2.0-draft2")] + unsafe extern "C" { + #[link_name = "[method]bucket.delete"] + fn wit_import2(_: i32, _: *mut u8, _: usize, _: *mut u8); + } + #[cfg(not(target_arch = "wasm32"))] + unsafe extern "C" fn wit_import2( + _: i32, + _: *mut u8, + _: usize, + _: *mut u8, + ) { + unreachable!() + } + unsafe { + wit_import2( + (self).handle() as i32, + ptr0.cast_mut(), + len0, + ptr1, + ) + }; + let l3 = i32::from(*ptr1.add(0).cast::()); + let result9 = match l3 { + 0 => { + let e = (); + Ok(e) + } + 1 => { + let e = { + let l4 = i32::from( + *ptr1.add(::core::mem::size_of::<*const u8>()).cast::(), + ); + let v8 = match l4 { + 0 => Error::NoSuchStore, + 1 => Error::AccessDenied, + n => { + debug_assert_eq!(n, 2, "invalid enum discriminant"); + let e8 = { + let l5 = *ptr1 + .add(2 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l6 = *ptr1 + .add(3 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len7 = l6; + let bytes7 = _rt::Vec::from_raw_parts( + l5.cast(), + len7, + len7, + ); + _rt::string_lift(bytes7) + }; + Error::Other(e8) + } + }; + v8 + }; + Err(e) + } + _ => _rt::invalid_enum_discriminant(), + }; + result9 + } + } + } + impl Bucket { + #[allow(unused_unsafe, clippy::all)] + pub fn exists(&self, key: &str) -> Result { + unsafe { + #[cfg_attr(target_pointer_width = "64", repr(align(8)))] + #[cfg_attr(target_pointer_width = "32", repr(align(4)))] + struct RetArea( + [::core::mem::MaybeUninit< + u8, + >; 4 * ::core::mem::size_of::<*const u8>()], + ); + let mut ret_area = RetArea( + [::core::mem::MaybeUninit::uninit(); 4 + * ::core::mem::size_of::<*const u8>()], + ); + let vec0 = key; + let ptr0 = vec0.as_ptr().cast::(); + let len0 = vec0.len(); + let ptr1 = ret_area.0.as_mut_ptr().cast::(); + #[cfg(target_arch = "wasm32")] + #[link(wasm_import_module = "wasi:keyvalue/store@0.2.0-draft2")] + unsafe extern "C" { + #[link_name = "[method]bucket.exists"] + fn wit_import2(_: i32, _: *mut u8, _: usize, _: *mut u8); + } + #[cfg(not(target_arch = "wasm32"))] + unsafe extern "C" fn wit_import2( + _: i32, + _: *mut u8, + _: usize, + _: *mut u8, + ) { + unreachable!() + } + unsafe { + wit_import2( + (self).handle() as i32, + ptr0.cast_mut(), + len0, + ptr1, + ) + }; + let l3 = i32::from(*ptr1.add(0).cast::()); + let result10 = match l3 { + 0 => { + let e = { + let l4 = i32::from( + *ptr1.add(::core::mem::size_of::<*const u8>()).cast::(), + ); + _rt::bool_lift(l4 as u8) + }; + Ok(e) + } + 1 => { + let e = { + let l5 = i32::from( + *ptr1.add(::core::mem::size_of::<*const u8>()).cast::(), + ); + let v9 = match l5 { + 0 => Error::NoSuchStore, + 1 => Error::AccessDenied, + n => { + debug_assert_eq!(n, 2, "invalid enum discriminant"); + let e9 = { + let l6 = *ptr1 + .add(2 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l7 = *ptr1 + .add(3 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len8 = l7; + let bytes8 = _rt::Vec::from_raw_parts( + l6.cast(), + len8, + len8, + ); + _rt::string_lift(bytes8) + }; + Error::Other(e9) + } + }; + v9 + }; + Err(e) + } + _ => _rt::invalid_enum_discriminant(), + }; + result10 + } + } + } + impl Bucket { + #[allow(unused_unsafe, clippy::all)] + pub fn list_keys( + &self, + cursor: Option<&str>, + ) -> Result { + unsafe { + #[cfg_attr(target_pointer_width = "64", repr(align(8)))] + #[cfg_attr(target_pointer_width = "32", repr(align(4)))] + struct RetArea( + [::core::mem::MaybeUninit< + u8, + >; 6 * ::core::mem::size_of::<*const u8>()], + ); + let mut ret_area = RetArea( + [::core::mem::MaybeUninit::uninit(); 6 + * ::core::mem::size_of::<*const u8>()], + ); + let (result1_0, result1_1, result1_2) = match cursor { + Some(e) => { + let vec0 = e; + let ptr0 = vec0.as_ptr().cast::(); + let len0 = vec0.len(); + (1i32, ptr0.cast_mut(), len0) + } + None => (0i32, ::core::ptr::null_mut(), 0usize), + }; + let ptr2 = ret_area.0.as_mut_ptr().cast::(); + #[cfg(target_arch = "wasm32")] + #[link(wasm_import_module = "wasi:keyvalue/store@0.2.0-draft2")] + unsafe extern "C" { + #[link_name = "[method]bucket.list-keys"] + fn wit_import3( + _: i32, + _: i32, + _: *mut u8, + _: usize, + _: *mut u8, + ); + } + #[cfg(not(target_arch = "wasm32"))] + unsafe extern "C" fn wit_import3( + _: i32, + _: i32, + _: *mut u8, + _: usize, + _: *mut u8, + ) { + unreachable!() + } + unsafe { + wit_import3( + (self).handle() as i32, + result1_0, + result1_1, + result1_2, + ptr2, + ) + }; + let l4 = i32::from(*ptr2.add(0).cast::()); + let result20 = match l4 { + 0 => { + let e = { + let l5 = *ptr2 + .add(::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l6 = *ptr2 + .add(2 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let base10 = l5; + let len10 = l6; + let mut result10 = _rt::Vec::with_capacity(len10); + for i in 0..len10 { + let base = base10 + .add(i * (2 * ::core::mem::size_of::<*const u8>())); + let e10 = { + let l7 = *base.add(0).cast::<*mut u8>(); + let l8 = *base + .add(::core::mem::size_of::<*const u8>()) + .cast::(); + let len9 = l8; + let bytes9 = _rt::Vec::from_raw_parts( + l7.cast(), + len9, + len9, + ); + _rt::string_lift(bytes9) + }; + result10.push(e10); + } + _rt::cabi_dealloc( + base10, + len10 * (2 * ::core::mem::size_of::<*const u8>()), + ::core::mem::size_of::<*const u8>(), + ); + let l11 = i32::from( + *ptr2 + .add(3 * ::core::mem::size_of::<*const u8>()) + .cast::(), + ); + KeyResponse { + keys: result10, + cursor: match l11 { + 0 => None, + 1 => { + let e = { + let l12 = *ptr2 + .add(4 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l13 = *ptr2 + .add(5 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len14 = l13; + let bytes14 = _rt::Vec::from_raw_parts( + l12.cast(), + len14, + len14, + ); + _rt::string_lift(bytes14) + }; + Some(e) + } + _ => _rt::invalid_enum_discriminant(), + }, + } + }; + Ok(e) + } + 1 => { + let e = { + let l15 = i32::from( + *ptr2.add(::core::mem::size_of::<*const u8>()).cast::(), + ); + let v19 = match l15 { + 0 => Error::NoSuchStore, + 1 => Error::AccessDenied, + n => { + debug_assert_eq!(n, 2, "invalid enum discriminant"); + let e19 = { + let l16 = *ptr2 + .add(2 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l17 = *ptr2 + .add(3 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len18 = l17; + let bytes18 = _rt::Vec::from_raw_parts( + l16.cast(), + len18, + len18, + ); + _rt::string_lift(bytes18) + }; + Error::Other(e19) + } + }; + v19 + }; + Err(e) + } + _ => _rt::invalid_enum_discriminant(), + }; + result20 + } + } + } + #[allow(unused_unsafe, clippy::all)] + pub fn open(identifier: &str) -> Result { + unsafe { + #[cfg_attr(target_pointer_width = "64", repr(align(8)))] + #[cfg_attr(target_pointer_width = "32", repr(align(4)))] + struct RetArea( + [::core::mem::MaybeUninit< + u8, + >; 4 * ::core::mem::size_of::<*const u8>()], + ); + let mut ret_area = RetArea( + [::core::mem::MaybeUninit::uninit(); 4 + * ::core::mem::size_of::<*const u8>()], + ); + let vec0 = identifier; + let ptr0 = vec0.as_ptr().cast::(); + let len0 = vec0.len(); + let ptr1 = ret_area.0.as_mut_ptr().cast::(); + #[cfg(target_arch = "wasm32")] + #[link(wasm_import_module = "wasi:keyvalue/store@0.2.0-draft2")] + unsafe extern "C" { + #[link_name = "open"] + fn wit_import2(_: *mut u8, _: usize, _: *mut u8); + } + #[cfg(not(target_arch = "wasm32"))] + unsafe extern "C" fn wit_import2(_: *mut u8, _: usize, _: *mut u8) { + unreachable!() + } + unsafe { wit_import2(ptr0.cast_mut(), len0, ptr1) }; + let l3 = i32::from(*ptr1.add(0).cast::()); + let result10 = match l3 { + 0 => { + let e = { + let l4 = *ptr1 + .add(::core::mem::size_of::<*const u8>()) + .cast::(); + unsafe { Bucket::from_handle(l4 as u32) } + }; + Ok(e) + } + 1 => { + let e = { + let l5 = i32::from( + *ptr1.add(::core::mem::size_of::<*const u8>()).cast::(), + ); + let v9 = match l5 { + 0 => Error::NoSuchStore, + 1 => Error::AccessDenied, + n => { + debug_assert_eq!(n, 2, "invalid enum discriminant"); + let e9 = { + let l6 = *ptr1 + .add(2 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l7 = *ptr1 + .add(3 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len8 = l7; + let bytes8 = _rt::Vec::from_raw_parts( + l6.cast(), + len8, + len8, + ); + _rt::string_lift(bytes8) + }; + Error::Other(e9) + } + }; + v9 + }; + Err(e) + } + _ => _rt::invalid_enum_discriminant(), + }; + result10 + } + } + } + #[allow(dead_code, async_fn_in_trait, unused_imports, clippy::all)] + pub mod atomics { + #[used] + #[doc(hidden)] + static __FORCE_SECTION_REF: fn() = super::super::super::__link_custom_section_describing_imports; + use super::super::super::_rt; + pub type Bucket = super::super::super::wasi::keyvalue::store::Bucket; + pub type Error = super::super::super::wasi::keyvalue::store::Error; + #[derive(Debug)] + #[repr(transparent)] + pub struct Cas { + handle: _rt::Resource, + } + impl Cas { + #[doc(hidden)] + pub unsafe fn from_handle(handle: u32) -> Self { + Self { + handle: unsafe { _rt::Resource::from_handle(handle) }, + } + } + #[doc(hidden)] + pub fn take_handle(&self) -> u32 { + _rt::Resource::take_handle(&self.handle) + } + #[doc(hidden)] + pub fn handle(&self) -> u32 { + _rt::Resource::handle(&self.handle) + } + } + unsafe impl _rt::WasmResource for Cas { + #[inline] + unsafe fn drop(_handle: u32) { + #[cfg(not(target_arch = "wasm32"))] + unreachable!(); + #[cfg(target_arch = "wasm32")] + { + #[link( + wasm_import_module = "wasi:keyvalue/atomics@0.2.0-draft2" + )] + unsafe extern "C" { + #[link_name = "[resource-drop]cas"] + fn drop(_: u32); + } + unsafe { drop(_handle) }; + } + } + } + pub enum CasError { + StoreError(Error), + CasFailed(Cas), + } + impl ::core::fmt::Debug for CasError { + fn fmt( + &self, + f: &mut ::core::fmt::Formatter<'_>, + ) -> ::core::fmt::Result { + match self { + CasError::StoreError(e) => { + f.debug_tuple("CasError::StoreError").field(e).finish() + } + CasError::CasFailed(e) => { + f.debug_tuple("CasError::CasFailed").field(e).finish() + } + } + } + } + impl ::core::fmt::Display for CasError { + fn fmt( + &self, + f: &mut ::core::fmt::Formatter<'_>, + ) -> ::core::fmt::Result { + write!(f, "{:?}", self) + } + } + impl std::error::Error for CasError {} + impl Cas { + #[allow(unused_unsafe, clippy::all)] + pub fn new(bucket: &Bucket, key: &str) -> Result { + unsafe { + #[cfg_attr(target_pointer_width = "64", repr(align(8)))] + #[cfg_attr(target_pointer_width = "32", repr(align(4)))] + struct RetArea( + [::core::mem::MaybeUninit< + u8, + >; 4 * ::core::mem::size_of::<*const u8>()], + ); + let mut ret_area = RetArea( + [::core::mem::MaybeUninit::uninit(); 4 + * ::core::mem::size_of::<*const u8>()], + ); + let vec0 = key; + let ptr0 = vec0.as_ptr().cast::(); + let len0 = vec0.len(); + let ptr1 = ret_area.0.as_mut_ptr().cast::(); + #[cfg(target_arch = "wasm32")] + #[link( + wasm_import_module = "wasi:keyvalue/atomics@0.2.0-draft2" + )] + unsafe extern "C" { + #[link_name = "[static]cas.new"] + fn wit_import2(_: i32, _: *mut u8, _: usize, _: *mut u8); + } + #[cfg(not(target_arch = "wasm32"))] + unsafe extern "C" fn wit_import2( + _: i32, + _: *mut u8, + _: usize, + _: *mut u8, + ) { + unreachable!() + } + unsafe { + wit_import2( + (bucket).handle() as i32, + ptr0.cast_mut(), + len0, + ptr1, + ) + }; + let l3 = i32::from(*ptr1.add(0).cast::()); + let result10 = match l3 { + 0 => { + let e = { + let l4 = *ptr1 + .add(::core::mem::size_of::<*const u8>()) + .cast::(); + unsafe { Cas::from_handle(l4 as u32) } + }; + Ok(e) + } + 1 => { + let e = { + let l5 = i32::from( + *ptr1.add(::core::mem::size_of::<*const u8>()).cast::(), + ); + use super::super::super::wasi::keyvalue::store::Error as V9; + let v9 = match l5 { + 0 => V9::NoSuchStore, + 1 => V9::AccessDenied, + n => { + debug_assert_eq!(n, 2, "invalid enum discriminant"); + let e9 = { + let l6 = *ptr1 + .add(2 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l7 = *ptr1 + .add(3 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len8 = l7; + let bytes8 = _rt::Vec::from_raw_parts( + l6.cast(), + len8, + len8, + ); + _rt::string_lift(bytes8) + }; + V9::Other(e9) + } + }; + v9 + }; + Err(e) + } + _ => _rt::invalid_enum_discriminant(), + }; + result10 + } + } + } + impl Cas { + #[allow(unused_unsafe, clippy::all)] + pub fn current(&self) -> Result>, Error> { + unsafe { + #[cfg_attr(target_pointer_width = "64", repr(align(8)))] + #[cfg_attr(target_pointer_width = "32", repr(align(4)))] + struct RetArea( + [::core::mem::MaybeUninit< + u8, + >; 4 * ::core::mem::size_of::<*const u8>()], + ); + let mut ret_area = RetArea( + [::core::mem::MaybeUninit::uninit(); 4 + * ::core::mem::size_of::<*const u8>()], + ); + let ptr0 = ret_area.0.as_mut_ptr().cast::(); + #[cfg(target_arch = "wasm32")] + #[link( + wasm_import_module = "wasi:keyvalue/atomics@0.2.0-draft2" + )] + unsafe extern "C" { + #[link_name = "[method]cas.current"] + fn wit_import1(_: i32, _: *mut u8); + } + #[cfg(not(target_arch = "wasm32"))] + unsafe extern "C" fn wit_import1(_: i32, _: *mut u8) { + unreachable!() + } + unsafe { wit_import1((self).handle() as i32, ptr0) }; + let l2 = i32::from(*ptr0.add(0).cast::()); + let result12 = match l2 { + 0 => { + let e = { + let l3 = i32::from( + *ptr0.add(::core::mem::size_of::<*const u8>()).cast::(), + ); + match l3 { + 0 => None, + 1 => { + let e = { + let l4 = *ptr0 + .add(2 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l5 = *ptr0 + .add(3 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len6 = l5; + _rt::Vec::from_raw_parts(l4.cast(), len6, len6) + }; + Some(e) + } + _ => _rt::invalid_enum_discriminant(), + } + }; + Ok(e) + } + 1 => { + let e = { + let l7 = i32::from( + *ptr0.add(::core::mem::size_of::<*const u8>()).cast::(), + ); + use super::super::super::wasi::keyvalue::store::Error as V11; + let v11 = match l7 { + 0 => V11::NoSuchStore, + 1 => V11::AccessDenied, + n => { + debug_assert_eq!(n, 2, "invalid enum discriminant"); + let e11 = { + let l8 = *ptr0 + .add(2 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l9 = *ptr0 + .add(3 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len10 = l9; + let bytes10 = _rt::Vec::from_raw_parts( + l8.cast(), + len10, + len10, + ); + _rt::string_lift(bytes10) + }; + V11::Other(e11) + } + }; + v11 + }; + Err(e) + } + _ => _rt::invalid_enum_discriminant(), + }; + result12 + } + } + } + #[allow(unused_unsafe, clippy::all)] + pub fn increment( + bucket: &Bucket, + key: &str, + delta: i64, + ) -> Result { + unsafe { + #[repr(align(8))] + struct RetArea( + [::core::mem::MaybeUninit< + u8, + >; 16 + 2 * ::core::mem::size_of::<*const u8>()], + ); + let mut ret_area = RetArea( + [::core::mem::MaybeUninit::uninit(); 16 + + 2 * ::core::mem::size_of::<*const u8>()], + ); + let vec0 = key; + let ptr0 = vec0.as_ptr().cast::(); + let len0 = vec0.len(); + let ptr1 = ret_area.0.as_mut_ptr().cast::(); + #[cfg(target_arch = "wasm32")] + #[link(wasm_import_module = "wasi:keyvalue/atomics@0.2.0-draft2")] + unsafe extern "C" { + #[link_name = "increment"] + fn wit_import2(_: i32, _: *mut u8, _: usize, _: i64, _: *mut u8); + } + #[cfg(not(target_arch = "wasm32"))] + unsafe extern "C" fn wit_import2( + _: i32, + _: *mut u8, + _: usize, + _: i64, + _: *mut u8, + ) { + unreachable!() + } + unsafe { + wit_import2( + (bucket).handle() as i32, + ptr0.cast_mut(), + len0, + _rt::as_i64(&delta), + ptr1, + ) + }; + let l3 = i32::from(*ptr1.add(0).cast::()); + let result10 = match l3 { + 0 => { + let e = { + let l4 = *ptr1.add(8).cast::(); + l4 + }; + Ok(e) + } + 1 => { + let e = { + let l5 = i32::from(*ptr1.add(8).cast::()); + use super::super::super::wasi::keyvalue::store::Error as V9; + let v9 = match l5 { + 0 => V9::NoSuchStore, + 1 => V9::AccessDenied, + n => { + debug_assert_eq!(n, 2, "invalid enum discriminant"); + let e9 = { + let l6 = *ptr1 + .add(8 + 1 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l7 = *ptr1 + .add(8 + 2 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len8 = l7; + let bytes8 = _rt::Vec::from_raw_parts( + l6.cast(), + len8, + len8, + ); + _rt::string_lift(bytes8) + }; + V9::Other(e9) + } + }; + v9 + }; + Err(e) + } + _ => _rt::invalid_enum_discriminant(), + }; + result10 + } + } + #[allow(unused_unsafe, clippy::all)] + pub fn swap(cas: Cas, value: &[u8]) -> Result<(), CasError> { + unsafe { + #[cfg_attr(target_pointer_width = "64", repr(align(8)))] + #[cfg_attr(target_pointer_width = "32", repr(align(4)))] + struct RetArea( + [::core::mem::MaybeUninit< + u8, + >; 5 * ::core::mem::size_of::<*const u8>()], + ); + let mut ret_area = RetArea( + [::core::mem::MaybeUninit::uninit(); 5 + * ::core::mem::size_of::<*const u8>()], + ); + let vec0 = value; + let ptr0 = vec0.as_ptr().cast::(); + let len0 = vec0.len(); + let ptr1 = ret_area.0.as_mut_ptr().cast::(); + #[cfg(target_arch = "wasm32")] + #[link(wasm_import_module = "wasi:keyvalue/atomics@0.2.0-draft2")] + unsafe extern "C" { + #[link_name = "swap"] + fn wit_import2(_: i32, _: *mut u8, _: usize, _: *mut u8); + } + #[cfg(not(target_arch = "wasm32"))] + unsafe extern "C" fn wit_import2( + _: i32, + _: *mut u8, + _: usize, + _: *mut u8, + ) { + unreachable!() + } + unsafe { + wit_import2( + (&cas).take_handle() as i32, + ptr0.cast_mut(), + len0, + ptr1, + ) + }; + let l3 = i32::from(*ptr1.add(0).cast::()); + let result12 = match l3 { + 0 => { + let e = (); + Ok(e) + } + 1 => { + let e = { + let l4 = i32::from( + *ptr1.add(::core::mem::size_of::<*const u8>()).cast::(), + ); + let v11 = match l4 { + 0 => { + let e11 = { + let l5 = i32::from( + *ptr1 + .add(2 * ::core::mem::size_of::<*const u8>()) + .cast::(), + ); + use super::super::super::wasi::keyvalue::store::Error as V9; + let v9 = match l5 { + 0 => V9::NoSuchStore, + 1 => V9::AccessDenied, + n => { + debug_assert_eq!(n, 2, "invalid enum discriminant"); + let e9 = { + let l6 = *ptr1 + .add(3 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l7 = *ptr1 + .add(4 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len8 = l7; + let bytes8 = _rt::Vec::from_raw_parts( + l6.cast(), + len8, + len8, + ); + _rt::string_lift(bytes8) + }; + V9::Other(e9) + } + }; + v9 + }; + CasError::StoreError(e11) + } + n => { + debug_assert_eq!(n, 1, "invalid enum discriminant"); + let e11 = { + let l10 = *ptr1 + .add(2 * ::core::mem::size_of::<*const u8>()) + .cast::(); + unsafe { Cas::from_handle(l10 as u32) } + }; + CasError::CasFailed(e11) + } + }; + v11 + }; + Err(e) + } + _ => _rt::invalid_enum_discriminant(), + }; + result12 + } + } + } + #[allow(dead_code, async_fn_in_trait, unused_imports, clippy::all)] + pub mod batch { + #[used] + #[doc(hidden)] + static __FORCE_SECTION_REF: fn() = super::super::super::__link_custom_section_describing_imports; + use super::super::super::_rt; + pub type Bucket = super::super::super::wasi::keyvalue::store::Bucket; + pub type Error = super::super::super::wasi::keyvalue::store::Error; + #[allow(unused_unsafe, clippy::all)] + pub fn get_many( + bucket: &Bucket, + keys: &[_rt::String], + ) -> Result<_rt::Vec)>>, Error> { + unsafe { + #[cfg_attr(target_pointer_width = "64", repr(align(8)))] + #[cfg_attr(target_pointer_width = "32", repr(align(4)))] + struct RetArea( + [::core::mem::MaybeUninit< + u8, + >; 4 * ::core::mem::size_of::<*const u8>()], + ); + let mut ret_area = RetArea( + [::core::mem::MaybeUninit::uninit(); 4 + * ::core::mem::size_of::<*const u8>()], + ); + let vec1 = keys; + let len1 = vec1.len(); + let layout1 = _rt::alloc::Layout::from_size_align_unchecked( + vec1.len() * (2 * ::core::mem::size_of::<*const u8>()), + ::core::mem::size_of::<*const u8>(), + ); + let result1 = if layout1.size() != 0 { + let ptr = _rt::alloc::alloc(layout1).cast::(); + if ptr.is_null() { + _rt::alloc::handle_alloc_error(layout1); + } + ptr + } else { + ::core::ptr::null_mut() + }; + for (i, e) in vec1.into_iter().enumerate() { + let base = result1 + .add(i * (2 * ::core::mem::size_of::<*const u8>())); + { + let vec0 = e; + let ptr0 = vec0.as_ptr().cast::(); + let len0 = vec0.len(); + *base + .add(::core::mem::size_of::<*const u8>()) + .cast::() = len0; + *base.add(0).cast::<*mut u8>() = ptr0.cast_mut(); + } + } + let ptr2 = ret_area.0.as_mut_ptr().cast::(); + #[cfg(target_arch = "wasm32")] + #[link(wasm_import_module = "wasi:keyvalue/batch@0.2.0-draft2")] + unsafe extern "C" { + #[link_name = "get-many"] + fn wit_import3(_: i32, _: *mut u8, _: usize, _: *mut u8); + } + #[cfg(not(target_arch = "wasm32"))] + unsafe extern "C" fn wit_import3( + _: i32, + _: *mut u8, + _: usize, + _: *mut u8, + ) { + unreachable!() + } + unsafe { + wit_import3((bucket).handle() as i32, result1, len1, ptr2) + }; + let l4 = i32::from(*ptr2.add(0).cast::()); + let result20 = match l4 { + 0 => { + let e = { + let l5 = *ptr2 + .add(::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l6 = *ptr2 + .add(2 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let base14 = l5; + let len14 = l6; + let mut result14 = _rt::Vec::with_capacity(len14); + for i in 0..len14 { + let base = base14 + .add(i * (5 * ::core::mem::size_of::<*const u8>())); + let e14 = { + let l7 = i32::from(*base.add(0).cast::()); + match l7 { + 0 => None, + 1 => { + let e = { + let l8 = *base + .add(::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l9 = *base + .add(2 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len10 = l9; + let bytes10 = _rt::Vec::from_raw_parts( + l8.cast(), + len10, + len10, + ); + let l11 = *base + .add(3 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l12 = *base + .add(4 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len13 = l12; + ( + _rt::string_lift(bytes10), + _rt::Vec::from_raw_parts(l11.cast(), len13, len13), + ) + }; + Some(e) + } + _ => _rt::invalid_enum_discriminant(), + } + }; + result14.push(e14); + } + _rt::cabi_dealloc( + base14, + len14 * (5 * ::core::mem::size_of::<*const u8>()), + ::core::mem::size_of::<*const u8>(), + ); + result14 + }; + Ok(e) + } + 1 => { + let e = { + let l15 = i32::from( + *ptr2.add(::core::mem::size_of::<*const u8>()).cast::(), + ); + use super::super::super::wasi::keyvalue::store::Error as V19; + let v19 = match l15 { + 0 => V19::NoSuchStore, + 1 => V19::AccessDenied, + n => { + debug_assert_eq!(n, 2, "invalid enum discriminant"); + let e19 = { + let l16 = *ptr2 + .add(2 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l17 = *ptr2 + .add(3 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len18 = l17; + let bytes18 = _rt::Vec::from_raw_parts( + l16.cast(), + len18, + len18, + ); + _rt::string_lift(bytes18) + }; + V19::Other(e19) + } + }; + v19 + }; + Err(e) + } + _ => _rt::invalid_enum_discriminant(), + }; + if layout1.size() != 0 { + _rt::alloc::dealloc(result1.cast(), layout1); + } + result20 + } + } + #[allow(unused_unsafe, clippy::all)] + pub fn set_many( + bucket: &Bucket, + key_values: &[(_rt::String, _rt::Vec)], + ) -> Result<(), Error> { + unsafe { + #[cfg_attr(target_pointer_width = "64", repr(align(8)))] + #[cfg_attr(target_pointer_width = "32", repr(align(4)))] + struct RetArea( + [::core::mem::MaybeUninit< + u8, + >; 4 * ::core::mem::size_of::<*const u8>()], + ); + let mut ret_area = RetArea( + [::core::mem::MaybeUninit::uninit(); 4 + * ::core::mem::size_of::<*const u8>()], + ); + let vec3 = key_values; + let len3 = vec3.len(); + let layout3 = _rt::alloc::Layout::from_size_align_unchecked( + vec3.len() * (4 * ::core::mem::size_of::<*const u8>()), + ::core::mem::size_of::<*const u8>(), + ); + let result3 = if layout3.size() != 0 { + let ptr = _rt::alloc::alloc(layout3).cast::(); + if ptr.is_null() { + _rt::alloc::handle_alloc_error(layout3); + } + ptr + } else { + ::core::ptr::null_mut() + }; + for (i, e) in vec3.into_iter().enumerate() { + let base = result3 + .add(i * (4 * ::core::mem::size_of::<*const u8>())); + { + let (t0_0, t0_1) = e; + let vec1 = t0_0; + let ptr1 = vec1.as_ptr().cast::(); + let len1 = vec1.len(); + *base + .add(::core::mem::size_of::<*const u8>()) + .cast::() = len1; + *base.add(0).cast::<*mut u8>() = ptr1.cast_mut(); + let vec2 = t0_1; + let ptr2 = vec2.as_ptr().cast::(); + let len2 = vec2.len(); + *base + .add(3 * ::core::mem::size_of::<*const u8>()) + .cast::() = len2; + *base + .add(2 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>() = ptr2.cast_mut(); + } + } + let ptr4 = ret_area.0.as_mut_ptr().cast::(); + #[cfg(target_arch = "wasm32")] + #[link(wasm_import_module = "wasi:keyvalue/batch@0.2.0-draft2")] + unsafe extern "C" { + #[link_name = "set-many"] + fn wit_import5(_: i32, _: *mut u8, _: usize, _: *mut u8); + } + #[cfg(not(target_arch = "wasm32"))] + unsafe extern "C" fn wit_import5( + _: i32, + _: *mut u8, + _: usize, + _: *mut u8, + ) { + unreachable!() + } + unsafe { + wit_import5((bucket).handle() as i32, result3, len3, ptr4) + }; + let l6 = i32::from(*ptr4.add(0).cast::()); + let result12 = match l6 { + 0 => { + let e = (); + Ok(e) + } + 1 => { + let e = { + let l7 = i32::from( + *ptr4.add(::core::mem::size_of::<*const u8>()).cast::(), + ); + use super::super::super::wasi::keyvalue::store::Error as V11; + let v11 = match l7 { + 0 => V11::NoSuchStore, + 1 => V11::AccessDenied, + n => { + debug_assert_eq!(n, 2, "invalid enum discriminant"); + let e11 = { + let l8 = *ptr4 + .add(2 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l9 = *ptr4 + .add(3 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len10 = l9; + let bytes10 = _rt::Vec::from_raw_parts( + l8.cast(), + len10, + len10, + ); + _rt::string_lift(bytes10) + }; + V11::Other(e11) + } + }; + v11 + }; + Err(e) + } + _ => _rt::invalid_enum_discriminant(), + }; + if layout3.size() != 0 { + _rt::alloc::dealloc(result3.cast(), layout3); + } + result12 + } + } + #[allow(unused_unsafe, clippy::all)] + pub fn delete_many( + bucket: &Bucket, + keys: &[_rt::String], + ) -> Result<(), Error> { + unsafe { + #[cfg_attr(target_pointer_width = "64", repr(align(8)))] + #[cfg_attr(target_pointer_width = "32", repr(align(4)))] + struct RetArea( + [::core::mem::MaybeUninit< + u8, + >; 4 * ::core::mem::size_of::<*const u8>()], + ); + let mut ret_area = RetArea( + [::core::mem::MaybeUninit::uninit(); 4 + * ::core::mem::size_of::<*const u8>()], + ); + let vec1 = keys; + let len1 = vec1.len(); + let layout1 = _rt::alloc::Layout::from_size_align_unchecked( + vec1.len() * (2 * ::core::mem::size_of::<*const u8>()), + ::core::mem::size_of::<*const u8>(), + ); + let result1 = if layout1.size() != 0 { + let ptr = _rt::alloc::alloc(layout1).cast::(); + if ptr.is_null() { + _rt::alloc::handle_alloc_error(layout1); + } + ptr + } else { + ::core::ptr::null_mut() + }; + for (i, e) in vec1.into_iter().enumerate() { + let base = result1 + .add(i * (2 * ::core::mem::size_of::<*const u8>())); + { + let vec0 = e; + let ptr0 = vec0.as_ptr().cast::(); + let len0 = vec0.len(); + *base + .add(::core::mem::size_of::<*const u8>()) + .cast::() = len0; + *base.add(0).cast::<*mut u8>() = ptr0.cast_mut(); + } + } + let ptr2 = ret_area.0.as_mut_ptr().cast::(); + #[cfg(target_arch = "wasm32")] + #[link(wasm_import_module = "wasi:keyvalue/batch@0.2.0-draft2")] + unsafe extern "C" { + #[link_name = "delete-many"] + fn wit_import3(_: i32, _: *mut u8, _: usize, _: *mut u8); + } + #[cfg(not(target_arch = "wasm32"))] + unsafe extern "C" fn wit_import3( + _: i32, + _: *mut u8, + _: usize, + _: *mut u8, + ) { + unreachable!() + } + unsafe { + wit_import3((bucket).handle() as i32, result1, len1, ptr2) + }; + let l4 = i32::from(*ptr2.add(0).cast::()); + let result10 = match l4 { + 0 => { + let e = (); + Ok(e) + } + 1 => { + let e = { + let l5 = i32::from( + *ptr2.add(::core::mem::size_of::<*const u8>()).cast::(), + ); + use super::super::super::wasi::keyvalue::store::Error as V9; + let v9 = match l5 { + 0 => V9::NoSuchStore, + 1 => V9::AccessDenied, + n => { + debug_assert_eq!(n, 2, "invalid enum discriminant"); + let e9 = { + let l6 = *ptr2 + .add(2 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l7 = *ptr2 + .add(3 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len8 = l7; + let bytes8 = _rt::Vec::from_raw_parts( + l6.cast(), + len8, + len8, + ); + _rt::string_lift(bytes8) + }; + V9::Other(e9) + } + }; + v9 + }; + Err(e) + } + _ => _rt::invalid_enum_discriminant(), + }; + if layout1.size() != 0 { + _rt::alloc::dealloc(result1.cast(), layout1); + } + result10 + } + } + } + } + pub mod random { + #[allow(dead_code, async_fn_in_trait, unused_imports, clippy::all)] + pub mod random { + #[used] + #[doc(hidden)] + static __FORCE_SECTION_REF: fn() = super::super::super::__link_custom_section_describing_imports; + use super::super::super::_rt; + #[allow(unused_unsafe, clippy::all)] + pub fn get_random_bytes(len: u64) -> _rt::Vec { + unsafe { + #[cfg_attr(target_pointer_width = "64", repr(align(8)))] + #[cfg_attr(target_pointer_width = "32", repr(align(4)))] + struct RetArea( + [::core::mem::MaybeUninit< + u8, + >; 2 * ::core::mem::size_of::<*const u8>()], + ); + let mut ret_area = RetArea( + [::core::mem::MaybeUninit::uninit(); 2 + * ::core::mem::size_of::<*const u8>()], + ); + let ptr0 = ret_area.0.as_mut_ptr().cast::(); + #[cfg(target_arch = "wasm32")] + #[link(wasm_import_module = "wasi:random/random@0.2.0")] + unsafe extern "C" { + #[link_name = "get-random-bytes"] + fn wit_import1(_: i64, _: *mut u8); + } + #[cfg(not(target_arch = "wasm32"))] + unsafe extern "C" fn wit_import1(_: i64, _: *mut u8) { + unreachable!() + } + unsafe { wit_import1(_rt::as_i64(&len), ptr0) }; + let l2 = *ptr0.add(0).cast::<*mut u8>(); + let l3 = *ptr0 + .add(::core::mem::size_of::<*const u8>()) + .cast::(); + let len4 = l3; + let result5 = _rt::Vec::from_raw_parts(l2.cast(), len4, len4); + result5 + } + } + #[allow(unused_unsafe, clippy::all)] + pub fn get_random_u64() -> u64 { + unsafe { + #[cfg(target_arch = "wasm32")] + #[link(wasm_import_module = "wasi:random/random@0.2.0")] + unsafe extern "C" { + #[link_name = "get-random-u64"] + fn wit_import0() -> i64; + } + #[cfg(not(target_arch = "wasm32"))] + unsafe extern "C" fn wit_import0() -> i64 { + unreachable!() + } + let ret = unsafe { wit_import0() }; + ret as u64 + } + } + } + #[allow(dead_code, async_fn_in_trait, unused_imports, clippy::all)] + pub mod insecure { + #[used] + #[doc(hidden)] + static __FORCE_SECTION_REF: fn() = super::super::super::__link_custom_section_describing_imports; + use super::super::super::_rt; + #[allow(unused_unsafe, clippy::all)] + pub fn get_insecure_random_bytes(len: u64) -> _rt::Vec { + unsafe { + #[cfg_attr(target_pointer_width = "64", repr(align(8)))] + #[cfg_attr(target_pointer_width = "32", repr(align(4)))] + struct RetArea( + [::core::mem::MaybeUninit< + u8, + >; 2 * ::core::mem::size_of::<*const u8>()], + ); + let mut ret_area = RetArea( + [::core::mem::MaybeUninit::uninit(); 2 + * ::core::mem::size_of::<*const u8>()], + ); + let ptr0 = ret_area.0.as_mut_ptr().cast::(); + #[cfg(target_arch = "wasm32")] + #[link(wasm_import_module = "wasi:random/insecure@0.2.0")] + unsafe extern "C" { + #[link_name = "get-insecure-random-bytes"] + fn wit_import1(_: i64, _: *mut u8); + } + #[cfg(not(target_arch = "wasm32"))] + unsafe extern "C" fn wit_import1(_: i64, _: *mut u8) { + unreachable!() + } + unsafe { wit_import1(_rt::as_i64(&len), ptr0) }; + let l2 = *ptr0.add(0).cast::<*mut u8>(); + let l3 = *ptr0 + .add(::core::mem::size_of::<*const u8>()) + .cast::(); + let len4 = l3; + let result5 = _rt::Vec::from_raw_parts(l2.cast(), len4, len4); + result5 + } + } + #[allow(unused_unsafe, clippy::all)] + pub fn get_insecure_random_u64() -> u64 { + unsafe { + #[cfg(target_arch = "wasm32")] + #[link(wasm_import_module = "wasi:random/insecure@0.2.0")] + unsafe extern "C" { + #[link_name = "get-insecure-random-u64"] + fn wit_import0() -> i64; + } + #[cfg(not(target_arch = "wasm32"))] + unsafe extern "C" fn wit_import0() -> i64 { + unreachable!() + } + let ret = unsafe { wit_import0() }; + ret as u64 + } + } + } + #[allow(dead_code, async_fn_in_trait, unused_imports, clippy::all)] + pub mod insecure_seed { + #[used] + #[doc(hidden)] + static __FORCE_SECTION_REF: fn() = super::super::super::__link_custom_section_describing_imports; + #[allow(unused_unsafe, clippy::all)] + pub fn insecure_seed() -> (u64, u64) { + unsafe { + #[repr(align(8))] + struct RetArea([::core::mem::MaybeUninit; 16]); + let mut ret_area = RetArea([::core::mem::MaybeUninit::uninit(); 16]); + let ptr0 = ret_area.0.as_mut_ptr().cast::(); + #[cfg(target_arch = "wasm32")] + #[link(wasm_import_module = "wasi:random/insecure-seed@0.2.0")] + unsafe extern "C" { + #[link_name = "insecure-seed"] + fn wit_import1(_: *mut u8); + } + #[cfg(not(target_arch = "wasm32"))] + unsafe extern "C" fn wit_import1(_: *mut u8) { + unreachable!() + } + unsafe { wit_import1(ptr0) }; + let l2 = *ptr0.add(0).cast::(); + let l3 = *ptr0.add(8).cast::(); + let result4 = (l2 as u64, l3 as u64); + result4 + } + } + } + } + pub mod sockets { + #[allow(dead_code, async_fn_in_trait, unused_imports, clippy::all)] + pub mod network { + #[used] + #[doc(hidden)] + static __FORCE_SECTION_REF: fn() = super::super::super::__link_custom_section_describing_imports; + use super::super::super::_rt; + #[derive(Debug)] + #[repr(transparent)] + pub struct Network { + handle: _rt::Resource, + } + impl Network { + #[doc(hidden)] + pub unsafe fn from_handle(handle: u32) -> Self { + Self { + handle: unsafe { _rt::Resource::from_handle(handle) }, + } + } + #[doc(hidden)] + pub fn take_handle(&self) -> u32 { + _rt::Resource::take_handle(&self.handle) + } + #[doc(hidden)] + pub fn handle(&self) -> u32 { + _rt::Resource::handle(&self.handle) + } + } + unsafe impl _rt::WasmResource for Network { + #[inline] + unsafe fn drop(_handle: u32) { + #[cfg(not(target_arch = "wasm32"))] + unreachable!(); + #[cfg(target_arch = "wasm32")] + { + #[link(wasm_import_module = "wasi:sockets/network@0.2.0")] + unsafe extern "C" { + #[link_name = "[resource-drop]network"] + fn drop(_: u32); + } + unsafe { drop(_handle) }; + } + } + } + #[repr(u8)] + #[derive(Clone, Copy, Eq, Ord, PartialEq, PartialOrd)] + pub enum ErrorCode { + Unknown, + AccessDenied, + NotSupported, + InvalidArgument, + OutOfMemory, + Timeout, + ConcurrencyConflict, + NotInProgress, + WouldBlock, + InvalidState, + NewSocketLimit, + AddressNotBindable, + AddressInUse, + RemoteUnreachable, + ConnectionRefused, + ConnectionReset, + ConnectionAborted, + DatagramTooLarge, + NameUnresolvable, + TemporaryResolverFailure, + PermanentResolverFailure, + } + impl ErrorCode { + pub fn name(&self) -> &'static str { + match self { + ErrorCode::Unknown => "unknown", + ErrorCode::AccessDenied => "access-denied", + ErrorCode::NotSupported => "not-supported", + ErrorCode::InvalidArgument => "invalid-argument", + ErrorCode::OutOfMemory => "out-of-memory", + ErrorCode::Timeout => "timeout", + ErrorCode::ConcurrencyConflict => "concurrency-conflict", + ErrorCode::NotInProgress => "not-in-progress", + ErrorCode::WouldBlock => "would-block", + ErrorCode::InvalidState => "invalid-state", + ErrorCode::NewSocketLimit => "new-socket-limit", + ErrorCode::AddressNotBindable => "address-not-bindable", + ErrorCode::AddressInUse => "address-in-use", + ErrorCode::RemoteUnreachable => "remote-unreachable", + ErrorCode::ConnectionRefused => "connection-refused", + ErrorCode::ConnectionReset => "connection-reset", + ErrorCode::ConnectionAborted => "connection-aborted", + ErrorCode::DatagramTooLarge => "datagram-too-large", + ErrorCode::NameUnresolvable => "name-unresolvable", + ErrorCode::TemporaryResolverFailure => { + "temporary-resolver-failure" + } + ErrorCode::PermanentResolverFailure => { + "permanent-resolver-failure" + } + } + } + pub fn message(&self) -> &'static str { + match self { + ErrorCode::Unknown => "", + ErrorCode::AccessDenied => "", + ErrorCode::NotSupported => "", + ErrorCode::InvalidArgument => "", + ErrorCode::OutOfMemory => "", + ErrorCode::Timeout => "", + ErrorCode::ConcurrencyConflict => "", + ErrorCode::NotInProgress => "", + ErrorCode::WouldBlock => "", + ErrorCode::InvalidState => "", + ErrorCode::NewSocketLimit => "", + ErrorCode::AddressNotBindable => "", + ErrorCode::AddressInUse => "", + ErrorCode::RemoteUnreachable => "", + ErrorCode::ConnectionRefused => "", + ErrorCode::ConnectionReset => "", + ErrorCode::ConnectionAborted => "", + ErrorCode::DatagramTooLarge => "", + ErrorCode::NameUnresolvable => "", + ErrorCode::TemporaryResolverFailure => "", + ErrorCode::PermanentResolverFailure => "", + } + } + } + impl ::core::fmt::Debug for ErrorCode { + fn fmt( + &self, + f: &mut ::core::fmt::Formatter<'_>, + ) -> ::core::fmt::Result { + f.debug_struct("ErrorCode") + .field("code", &(*self as i32)) + .field("name", &self.name()) + .field("message", &self.message()) + .finish() + } + } + impl ::core::fmt::Display for ErrorCode { + fn fmt( + &self, + f: &mut ::core::fmt::Formatter<'_>, + ) -> ::core::fmt::Result { + write!(f, "{} (error {})", self.name(), * self as i32) + } + } + impl std::error::Error for ErrorCode {} + impl ErrorCode { + #[doc(hidden)] + pub unsafe fn _lift(val: u8) -> ErrorCode { + if !cfg!(debug_assertions) { + return ::core::mem::transmute(val); + } + match val { + 0 => ErrorCode::Unknown, + 1 => ErrorCode::AccessDenied, + 2 => ErrorCode::NotSupported, + 3 => ErrorCode::InvalidArgument, + 4 => ErrorCode::OutOfMemory, + 5 => ErrorCode::Timeout, + 6 => ErrorCode::ConcurrencyConflict, + 7 => ErrorCode::NotInProgress, + 8 => ErrorCode::WouldBlock, + 9 => ErrorCode::InvalidState, + 10 => ErrorCode::NewSocketLimit, + 11 => ErrorCode::AddressNotBindable, + 12 => ErrorCode::AddressInUse, + 13 => ErrorCode::RemoteUnreachable, + 14 => ErrorCode::ConnectionRefused, + 15 => ErrorCode::ConnectionReset, + 16 => ErrorCode::ConnectionAborted, + 17 => ErrorCode::DatagramTooLarge, + 18 => ErrorCode::NameUnresolvable, + 19 => ErrorCode::TemporaryResolverFailure, + 20 => ErrorCode::PermanentResolverFailure, + _ => panic!("invalid enum discriminant"), + } + } + } + #[repr(u8)] + #[derive(Clone, Copy, Eq, Ord, PartialEq, PartialOrd)] + pub enum IpAddressFamily { + Ipv4, + Ipv6, + } + impl ::core::fmt::Debug for IpAddressFamily { + fn fmt( + &self, + f: &mut ::core::fmt::Formatter<'_>, + ) -> ::core::fmt::Result { + match self { + IpAddressFamily::Ipv4 => { + f.debug_tuple("IpAddressFamily::Ipv4").finish() + } + IpAddressFamily::Ipv6 => { + f.debug_tuple("IpAddressFamily::Ipv6").finish() + } + } + } + } + impl IpAddressFamily { + #[doc(hidden)] + pub unsafe fn _lift(val: u8) -> IpAddressFamily { + if !cfg!(debug_assertions) { + return ::core::mem::transmute(val); + } + match val { + 0 => IpAddressFamily::Ipv4, + 1 => IpAddressFamily::Ipv6, + _ => panic!("invalid enum discriminant"), + } + } + } + pub type Ipv4Address = (u8, u8, u8, u8); + pub type Ipv6Address = (u16, u16, u16, u16, u16, u16, u16, u16); + #[derive(Clone, Copy)] + pub enum IpAddress { + Ipv4(Ipv4Address), + Ipv6(Ipv6Address), + } + impl ::core::fmt::Debug for IpAddress { + fn fmt( + &self, + f: &mut ::core::fmt::Formatter<'_>, + ) -> ::core::fmt::Result { + match self { + IpAddress::Ipv4(e) => { + f.debug_tuple("IpAddress::Ipv4").field(e).finish() + } + IpAddress::Ipv6(e) => { + f.debug_tuple("IpAddress::Ipv6").field(e).finish() + } + } + } + } + #[repr(C)] + #[derive(Clone, Copy)] + pub struct Ipv4SocketAddress { + pub port: u16, + pub address: Ipv4Address, + } + impl ::core::fmt::Debug for Ipv4SocketAddress { + fn fmt( + &self, + f: &mut ::core::fmt::Formatter<'_>, + ) -> ::core::fmt::Result { + f.debug_struct("Ipv4SocketAddress") + .field("port", &self.port) + .field("address", &self.address) + .finish() + } + } + #[repr(C)] + #[derive(Clone, Copy)] + pub struct Ipv6SocketAddress { + pub port: u16, + pub flow_info: u32, + pub address: Ipv6Address, + pub scope_id: u32, + } + impl ::core::fmt::Debug for Ipv6SocketAddress { + fn fmt( + &self, + f: &mut ::core::fmt::Formatter<'_>, + ) -> ::core::fmt::Result { + f.debug_struct("Ipv6SocketAddress") + .field("port", &self.port) + .field("flow-info", &self.flow_info) + .field("address", &self.address) + .field("scope-id", &self.scope_id) + .finish() + } + } + #[derive(Clone, Copy)] + pub enum IpSocketAddress { + Ipv4(Ipv4SocketAddress), + Ipv6(Ipv6SocketAddress), + } + impl ::core::fmt::Debug for IpSocketAddress { + fn fmt( + &self, + f: &mut ::core::fmt::Formatter<'_>, + ) -> ::core::fmt::Result { + match self { + IpSocketAddress::Ipv4(e) => { + f.debug_tuple("IpSocketAddress::Ipv4").field(e).finish() + } + IpSocketAddress::Ipv6(e) => { + f.debug_tuple("IpSocketAddress::Ipv6").field(e).finish() + } + } + } + } + } + #[allow(dead_code, async_fn_in_trait, unused_imports, clippy::all)] + pub mod instance_network { + #[used] + #[doc(hidden)] + static __FORCE_SECTION_REF: fn() = super::super::super::__link_custom_section_describing_imports; + pub type Network = super::super::super::wasi::sockets::network::Network; + #[allow(unused_unsafe, clippy::all)] + pub fn instance_network() -> Network { + unsafe { + #[cfg(target_arch = "wasm32")] + #[link(wasm_import_module = "wasi:sockets/instance-network@0.2.0")] + unsafe extern "C" { + #[link_name = "instance-network"] + fn wit_import0() -> i32; + } + #[cfg(not(target_arch = "wasm32"))] + unsafe extern "C" fn wit_import0() -> i32 { + unreachable!() + } + let ret = unsafe { wit_import0() }; + unsafe { + super::super::super::wasi::sockets::network::Network::from_handle( + ret as u32, + ) + } + } + } + } + #[allow(dead_code, async_fn_in_trait, unused_imports, clippy::all)] + pub mod udp { + #[used] + #[doc(hidden)] + static __FORCE_SECTION_REF: fn() = super::super::super::__link_custom_section_describing_imports; + use super::super::super::_rt; + pub type Pollable = super::super::super::wasi::io::poll::Pollable; + pub type Network = super::super::super::wasi::sockets::network::Network; + pub type ErrorCode = super::super::super::wasi::sockets::network::ErrorCode; + pub type IpSocketAddress = super::super::super::wasi::sockets::network::IpSocketAddress; + pub type IpAddressFamily = super::super::super::wasi::sockets::network::IpAddressFamily; + #[derive(Clone)] + pub struct IncomingDatagram { + pub data: _rt::Vec, + pub remote_address: IpSocketAddress, + } + impl ::core::fmt::Debug for IncomingDatagram { + fn fmt( + &self, + f: &mut ::core::fmt::Formatter<'_>, + ) -> ::core::fmt::Result { + f.debug_struct("IncomingDatagram") + .field("data", &self.data) + .field("remote-address", &self.remote_address) + .finish() + } + } + #[derive(Clone)] + pub struct OutgoingDatagram { + pub data: _rt::Vec, + pub remote_address: Option, + } + impl ::core::fmt::Debug for OutgoingDatagram { + fn fmt( + &self, + f: &mut ::core::fmt::Formatter<'_>, + ) -> ::core::fmt::Result { + f.debug_struct("OutgoingDatagram") + .field("data", &self.data) + .field("remote-address", &self.remote_address) + .finish() + } + } + #[derive(Debug)] + #[repr(transparent)] + pub struct UdpSocket { + handle: _rt::Resource, + } + impl UdpSocket { + #[doc(hidden)] + pub unsafe fn from_handle(handle: u32) -> Self { + Self { + handle: unsafe { _rt::Resource::from_handle(handle) }, + } + } + #[doc(hidden)] + pub fn take_handle(&self) -> u32 { + _rt::Resource::take_handle(&self.handle) + } + #[doc(hidden)] + pub fn handle(&self) -> u32 { + _rt::Resource::handle(&self.handle) + } + } + unsafe impl _rt::WasmResource for UdpSocket { + #[inline] + unsafe fn drop(_handle: u32) { + #[cfg(not(target_arch = "wasm32"))] + unreachable!(); + #[cfg(target_arch = "wasm32")] + { + #[link(wasm_import_module = "wasi:sockets/udp@0.2.0")] + unsafe extern "C" { + #[link_name = "[resource-drop]udp-socket"] + fn drop(_: u32); + } + unsafe { drop(_handle) }; + } + } + } + #[derive(Debug)] + #[repr(transparent)] + pub struct IncomingDatagramStream { + handle: _rt::Resource, + } + impl IncomingDatagramStream { + #[doc(hidden)] + pub unsafe fn from_handle(handle: u32) -> Self { + Self { + handle: unsafe { _rt::Resource::from_handle(handle) }, + } + } + #[doc(hidden)] + pub fn take_handle(&self) -> u32 { + _rt::Resource::take_handle(&self.handle) + } + #[doc(hidden)] + pub fn handle(&self) -> u32 { + _rt::Resource::handle(&self.handle) + } + } + unsafe impl _rt::WasmResource for IncomingDatagramStream { + #[inline] + unsafe fn drop(_handle: u32) { + #[cfg(not(target_arch = "wasm32"))] + unreachable!(); + #[cfg(target_arch = "wasm32")] + { + #[link(wasm_import_module = "wasi:sockets/udp@0.2.0")] + unsafe extern "C" { + #[link_name = "[resource-drop]incoming-datagram-stream"] + fn drop(_: u32); + } + unsafe { drop(_handle) }; + } + } + } + #[derive(Debug)] + #[repr(transparent)] + pub struct OutgoingDatagramStream { + handle: _rt::Resource, + } + impl OutgoingDatagramStream { + #[doc(hidden)] + pub unsafe fn from_handle(handle: u32) -> Self { + Self { + handle: unsafe { _rt::Resource::from_handle(handle) }, + } + } + #[doc(hidden)] + pub fn take_handle(&self) -> u32 { + _rt::Resource::take_handle(&self.handle) + } + #[doc(hidden)] + pub fn handle(&self) -> u32 { + _rt::Resource::handle(&self.handle) + } + } + unsafe impl _rt::WasmResource for OutgoingDatagramStream { + #[inline] + unsafe fn drop(_handle: u32) { + #[cfg(not(target_arch = "wasm32"))] + unreachable!(); + #[cfg(target_arch = "wasm32")] + { + #[link(wasm_import_module = "wasi:sockets/udp@0.2.0")] + unsafe extern "C" { + #[link_name = "[resource-drop]outgoing-datagram-stream"] + fn drop(_: u32); + } + unsafe { drop(_handle) }; + } + } + } + impl UdpSocket { + #[allow(unused_unsafe, clippy::all)] + pub fn start_bind( + &self, + network: &Network, + local_address: IpSocketAddress, + ) -> Result<(), ErrorCode> { + unsafe { + #[repr(align(1))] + struct RetArea([::core::mem::MaybeUninit; 2]); + let mut ret_area = RetArea( + [::core::mem::MaybeUninit::uninit(); 2], + ); + use super::super::super::wasi::sockets::network::IpSocketAddress as V4; + let ( + result5_0, + result5_1, + result5_2, + result5_3, + result5_4, + result5_5, + result5_6, + result5_7, + result5_8, + result5_9, + result5_10, + result5_11, + ) = match local_address { + V4::Ipv4(e) => { + let super::super::super::wasi::sockets::network::Ipv4SocketAddress { + port: port0, + address: address0, + } = e; + let (t1_0, t1_1, t1_2, t1_3) = address0; + ( + 0i32, + _rt::as_i32(port0), + _rt::as_i32(t1_0), + _rt::as_i32(t1_1), + _rt::as_i32(t1_2), + _rt::as_i32(t1_3), + 0i32, + 0i32, + 0i32, + 0i32, + 0i32, + 0i32, + ) + } + V4::Ipv6(e) => { + let super::super::super::wasi::sockets::network::Ipv6SocketAddress { + port: port2, + flow_info: flow_info2, + address: address2, + scope_id: scope_id2, + } = e; + let (t3_0, t3_1, t3_2, t3_3, t3_4, t3_5, t3_6, t3_7) = address2; + ( + 1i32, + _rt::as_i32(port2), + _rt::as_i32(flow_info2), + _rt::as_i32(t3_0), + _rt::as_i32(t3_1), + _rt::as_i32(t3_2), + _rt::as_i32(t3_3), + _rt::as_i32(t3_4), + _rt::as_i32(t3_5), + _rt::as_i32(t3_6), + _rt::as_i32(t3_7), + _rt::as_i32(scope_id2), + ) + } + }; + let ptr6 = ret_area.0.as_mut_ptr().cast::(); + #[cfg(target_arch = "wasm32")] + #[link(wasm_import_module = "wasi:sockets/udp@0.2.0")] + unsafe extern "C" { + #[link_name = "[method]udp-socket.start-bind"] + fn wit_import7( + _: i32, + _: i32, + _: i32, + _: i32, + _: i32, + _: i32, + _: i32, + _: i32, + _: i32, + _: i32, + _: i32, + _: i32, + _: i32, + _: i32, + _: *mut u8, + ); + } + #[cfg(not(target_arch = "wasm32"))] + unsafe extern "C" fn wit_import7( + _: i32, + _: i32, + _: i32, + _: i32, + _: i32, + _: i32, + _: i32, + _: i32, + _: i32, + _: i32, + _: i32, + _: i32, + _: i32, + _: i32, + _: *mut u8, + ) { + unreachable!() + } + unsafe { + wit_import7( + (self).handle() as i32, + (network).handle() as i32, + result5_0, + result5_1, + result5_2, + result5_3, + result5_4, + result5_5, + result5_6, + result5_7, + result5_8, + result5_9, + result5_10, + result5_11, + ptr6, + ) + }; + let l8 = i32::from(*ptr6.add(0).cast::()); + let result10 = match l8 { + 0 => { + let e = (); + Ok(e) + } + 1 => { + let e = { + let l9 = i32::from(*ptr6.add(1).cast::()); + super::super::super::wasi::sockets::network::ErrorCode::_lift( + l9 as u8, + ) + }; + Err(e) + } + _ => _rt::invalid_enum_discriminant(), + }; + result10 + } + } + } + impl UdpSocket { + #[allow(unused_unsafe, clippy::all)] + pub fn finish_bind(&self) -> Result<(), ErrorCode> { + unsafe { + #[repr(align(1))] + struct RetArea([::core::mem::MaybeUninit; 2]); + let mut ret_area = RetArea( + [::core::mem::MaybeUninit::uninit(); 2], + ); + let ptr0 = ret_area.0.as_mut_ptr().cast::(); + #[cfg(target_arch = "wasm32")] + #[link(wasm_import_module = "wasi:sockets/udp@0.2.0")] + unsafe extern "C" { + #[link_name = "[method]udp-socket.finish-bind"] + fn wit_import1(_: i32, _: *mut u8); + } + #[cfg(not(target_arch = "wasm32"))] + unsafe extern "C" fn wit_import1(_: i32, _: *mut u8) { + unreachable!() + } + unsafe { wit_import1((self).handle() as i32, ptr0) }; + let l2 = i32::from(*ptr0.add(0).cast::()); + let result4 = match l2 { + 0 => { + let e = (); + Ok(e) + } + 1 => { + let e = { + let l3 = i32::from(*ptr0.add(1).cast::()); + super::super::super::wasi::sockets::network::ErrorCode::_lift( + l3 as u8, + ) + }; + Err(e) + } + _ => _rt::invalid_enum_discriminant(), + }; + result4 + } + } + } + impl UdpSocket { + #[allow(unused_unsafe, clippy::all)] + pub fn stream( + &self, + remote_address: Option, + ) -> Result< + (IncomingDatagramStream, OutgoingDatagramStream), + ErrorCode, + > { + unsafe { + #[repr(align(4))] + struct RetArea([::core::mem::MaybeUninit; 12]); + let mut ret_area = RetArea( + [::core::mem::MaybeUninit::uninit(); 12], + ); + let ( + result6_0, + result6_1, + result6_2, + result6_3, + result6_4, + result6_5, + result6_6, + result6_7, + result6_8, + result6_9, + result6_10, + result6_11, + result6_12, + ) = match remote_address { + Some(e) => { + use super::super::super::wasi::sockets::network::IpSocketAddress as V4; + let ( + result5_0, + result5_1, + result5_2, + result5_3, + result5_4, + result5_5, + result5_6, + result5_7, + result5_8, + result5_9, + result5_10, + result5_11, + ) = match e { + V4::Ipv4(e) => { + let super::super::super::wasi::sockets::network::Ipv4SocketAddress { + port: port0, + address: address0, + } = e; + let (t1_0, t1_1, t1_2, t1_3) = address0; + ( + 0i32, + _rt::as_i32(port0), + _rt::as_i32(t1_0), + _rt::as_i32(t1_1), + _rt::as_i32(t1_2), + _rt::as_i32(t1_3), + 0i32, + 0i32, + 0i32, + 0i32, + 0i32, + 0i32, + ) + } + V4::Ipv6(e) => { + let super::super::super::wasi::sockets::network::Ipv6SocketAddress { + port: port2, + flow_info: flow_info2, + address: address2, + scope_id: scope_id2, + } = e; + let (t3_0, t3_1, t3_2, t3_3, t3_4, t3_5, t3_6, t3_7) = address2; + ( + 1i32, + _rt::as_i32(port2), + _rt::as_i32(flow_info2), + _rt::as_i32(t3_0), + _rt::as_i32(t3_1), + _rt::as_i32(t3_2), + _rt::as_i32(t3_3), + _rt::as_i32(t3_4), + _rt::as_i32(t3_5), + _rt::as_i32(t3_6), + _rt::as_i32(t3_7), + _rt::as_i32(scope_id2), + ) + } + }; + ( + 1i32, + result5_0, + result5_1, + result5_2, + result5_3, + result5_4, + result5_5, + result5_6, + result5_7, + result5_8, + result5_9, + result5_10, + result5_11, + ) + } + None => { + ( + 0i32, + 0i32, + 0i32, + 0i32, + 0i32, + 0i32, + 0i32, + 0i32, + 0i32, + 0i32, + 0i32, + 0i32, + 0i32, + ) + } + }; + let ptr7 = ret_area.0.as_mut_ptr().cast::(); + #[cfg(target_arch = "wasm32")] + #[link(wasm_import_module = "wasi:sockets/udp@0.2.0")] + unsafe extern "C" { + #[link_name = "[method]udp-socket.stream"] + fn wit_import8( + _: i32, + _: i32, + _: i32, + _: i32, + _: i32, + _: i32, + _: i32, + _: i32, + _: i32, + _: i32, + _: i32, + _: i32, + _: i32, + _: i32, + _: *mut u8, + ); + } + #[cfg(not(target_arch = "wasm32"))] + unsafe extern "C" fn wit_import8( + _: i32, + _: i32, + _: i32, + _: i32, + _: i32, + _: i32, + _: i32, + _: i32, + _: i32, + _: i32, + _: i32, + _: i32, + _: i32, + _: i32, + _: *mut u8, + ) { + unreachable!() + } + unsafe { + wit_import8( + (self).handle() as i32, + result6_0, + result6_1, + result6_2, + result6_3, + result6_4, + result6_5, + result6_6, + result6_7, + result6_8, + result6_9, + result6_10, + result6_11, + result6_12, + ptr7, + ) + }; + let l9 = i32::from(*ptr7.add(0).cast::()); + let result13 = match l9 { + 0 => { + let e = { + let l10 = *ptr7.add(4).cast::(); + let l11 = *ptr7.add(8).cast::(); + ( + unsafe { IncomingDatagramStream::from_handle(l10 as u32) }, + unsafe { OutgoingDatagramStream::from_handle(l11 as u32) }, + ) + }; + Ok(e) + } + 1 => { + let e = { + let l12 = i32::from(*ptr7.add(4).cast::()); + super::super::super::wasi::sockets::network::ErrorCode::_lift( + l12 as u8, + ) + }; + Err(e) + } + _ => _rt::invalid_enum_discriminant(), + }; + result13 + } + } + } + impl UdpSocket { + #[allow(unused_unsafe, clippy::all)] + pub fn local_address(&self) -> Result { + unsafe { + #[repr(align(4))] + struct RetArea([::core::mem::MaybeUninit; 36]); + let mut ret_area = RetArea( + [::core::mem::MaybeUninit::uninit(); 36], + ); + let ptr0 = ret_area.0.as_mut_ptr().cast::(); + #[cfg(target_arch = "wasm32")] + #[link(wasm_import_module = "wasi:sockets/udp@0.2.0")] + unsafe extern "C" { + #[link_name = "[method]udp-socket.local-address"] + fn wit_import1(_: i32, _: *mut u8); + } + #[cfg(not(target_arch = "wasm32"))] + unsafe extern "C" fn wit_import1(_: i32, _: *mut u8) { + unreachable!() + } + unsafe { wit_import1((self).handle() as i32, ptr0) }; + let l2 = i32::from(*ptr0.add(0).cast::()); + let result22 = match l2 { + 0 => { + let e = { + let l3 = i32::from(*ptr0.add(4).cast::()); + use super::super::super::wasi::sockets::network::IpSocketAddress as V20; + let v20 = match l3 { + 0 => { + let e20 = { + let l4 = i32::from(*ptr0.add(8).cast::()); + let l5 = i32::from(*ptr0.add(10).cast::()); + let l6 = i32::from(*ptr0.add(11).cast::()); + let l7 = i32::from(*ptr0.add(12).cast::()); + let l8 = i32::from(*ptr0.add(13).cast::()); + super::super::super::wasi::sockets::network::Ipv4SocketAddress { + port: l4 as u16, + address: (l5 as u8, l6 as u8, l7 as u8, l8 as u8), + } + }; + V20::Ipv4(e20) + } + n => { + debug_assert_eq!(n, 1, "invalid enum discriminant"); + let e20 = { + let l9 = i32::from(*ptr0.add(8).cast::()); + let l10 = *ptr0.add(12).cast::(); + let l11 = i32::from(*ptr0.add(16).cast::()); + let l12 = i32::from(*ptr0.add(18).cast::()); + let l13 = i32::from(*ptr0.add(20).cast::()); + let l14 = i32::from(*ptr0.add(22).cast::()); + let l15 = i32::from(*ptr0.add(24).cast::()); + let l16 = i32::from(*ptr0.add(26).cast::()); + let l17 = i32::from(*ptr0.add(28).cast::()); + let l18 = i32::from(*ptr0.add(30).cast::()); + let l19 = *ptr0.add(32).cast::(); + super::super::super::wasi::sockets::network::Ipv6SocketAddress { + port: l9 as u16, + flow_info: l10 as u32, + address: ( + l11 as u16, + l12 as u16, + l13 as u16, + l14 as u16, + l15 as u16, + l16 as u16, + l17 as u16, + l18 as u16, + ), + scope_id: l19 as u32, + } + }; + V20::Ipv6(e20) + } + }; + v20 + }; + Ok(e) + } + 1 => { + let e = { + let l21 = i32::from(*ptr0.add(4).cast::()); + super::super::super::wasi::sockets::network::ErrorCode::_lift( + l21 as u8, + ) + }; + Err(e) + } + _ => _rt::invalid_enum_discriminant(), + }; + result22 + } + } + } + impl UdpSocket { + #[allow(unused_unsafe, clippy::all)] + pub fn remote_address(&self) -> Result { + unsafe { + #[repr(align(4))] + struct RetArea([::core::mem::MaybeUninit; 36]); + let mut ret_area = RetArea( + [::core::mem::MaybeUninit::uninit(); 36], + ); + let ptr0 = ret_area.0.as_mut_ptr().cast::(); + #[cfg(target_arch = "wasm32")] + #[link(wasm_import_module = "wasi:sockets/udp@0.2.0")] + unsafe extern "C" { + #[link_name = "[method]udp-socket.remote-address"] + fn wit_import1(_: i32, _: *mut u8); + } + #[cfg(not(target_arch = "wasm32"))] + unsafe extern "C" fn wit_import1(_: i32, _: *mut u8) { + unreachable!() + } + unsafe { wit_import1((self).handle() as i32, ptr0) }; + let l2 = i32::from(*ptr0.add(0).cast::()); + let result22 = match l2 { + 0 => { + let e = { + let l3 = i32::from(*ptr0.add(4).cast::()); + use super::super::super::wasi::sockets::network::IpSocketAddress as V20; + let v20 = match l3 { + 0 => { + let e20 = { + let l4 = i32::from(*ptr0.add(8).cast::()); + let l5 = i32::from(*ptr0.add(10).cast::()); + let l6 = i32::from(*ptr0.add(11).cast::()); + let l7 = i32::from(*ptr0.add(12).cast::()); + let l8 = i32::from(*ptr0.add(13).cast::()); + super::super::super::wasi::sockets::network::Ipv4SocketAddress { + port: l4 as u16, + address: (l5 as u8, l6 as u8, l7 as u8, l8 as u8), + } + }; + V20::Ipv4(e20) + } + n => { + debug_assert_eq!(n, 1, "invalid enum discriminant"); + let e20 = { + let l9 = i32::from(*ptr0.add(8).cast::()); + let l10 = *ptr0.add(12).cast::(); + let l11 = i32::from(*ptr0.add(16).cast::()); + let l12 = i32::from(*ptr0.add(18).cast::()); + let l13 = i32::from(*ptr0.add(20).cast::()); + let l14 = i32::from(*ptr0.add(22).cast::()); + let l15 = i32::from(*ptr0.add(24).cast::()); + let l16 = i32::from(*ptr0.add(26).cast::()); + let l17 = i32::from(*ptr0.add(28).cast::()); + let l18 = i32::from(*ptr0.add(30).cast::()); + let l19 = *ptr0.add(32).cast::(); + super::super::super::wasi::sockets::network::Ipv6SocketAddress { + port: l9 as u16, + flow_info: l10 as u32, + address: ( + l11 as u16, + l12 as u16, + l13 as u16, + l14 as u16, + l15 as u16, + l16 as u16, + l17 as u16, + l18 as u16, + ), + scope_id: l19 as u32, + } + }; + V20::Ipv6(e20) + } + }; + v20 + }; + Ok(e) + } + 1 => { + let e = { + let l21 = i32::from(*ptr0.add(4).cast::()); + super::super::super::wasi::sockets::network::ErrorCode::_lift( + l21 as u8, + ) + }; + Err(e) + } + _ => _rt::invalid_enum_discriminant(), + }; + result22 + } + } + } + impl UdpSocket { + #[allow(unused_unsafe, clippy::all)] + pub fn address_family(&self) -> IpAddressFamily { + unsafe { + #[cfg(target_arch = "wasm32")] + #[link(wasm_import_module = "wasi:sockets/udp@0.2.0")] + unsafe extern "C" { + #[link_name = "[method]udp-socket.address-family"] + fn wit_import0(_: i32) -> i32; + } + #[cfg(not(target_arch = "wasm32"))] + unsafe extern "C" fn wit_import0(_: i32) -> i32 { + unreachable!() + } + let ret = unsafe { wit_import0((self).handle() as i32) }; + super::super::super::wasi::sockets::network::IpAddressFamily::_lift( + ret as u8, + ) + } + } + } + impl UdpSocket { + #[allow(unused_unsafe, clippy::all)] + pub fn unicast_hop_limit(&self) -> Result { + unsafe { + #[repr(align(1))] + struct RetArea([::core::mem::MaybeUninit; 2]); + let mut ret_area = RetArea( + [::core::mem::MaybeUninit::uninit(); 2], + ); + let ptr0 = ret_area.0.as_mut_ptr().cast::(); + #[cfg(target_arch = "wasm32")] + #[link(wasm_import_module = "wasi:sockets/udp@0.2.0")] + unsafe extern "C" { + #[link_name = "[method]udp-socket.unicast-hop-limit"] + fn wit_import1(_: i32, _: *mut u8); + } + #[cfg(not(target_arch = "wasm32"))] + unsafe extern "C" fn wit_import1(_: i32, _: *mut u8) { + unreachable!() + } + unsafe { wit_import1((self).handle() as i32, ptr0) }; + let l2 = i32::from(*ptr0.add(0).cast::()); + let result5 = match l2 { + 0 => { + let e = { + let l3 = i32::from(*ptr0.add(1).cast::()); + l3 as u8 + }; + Ok(e) + } + 1 => { + let e = { + let l4 = i32::from(*ptr0.add(1).cast::()); + super::super::super::wasi::sockets::network::ErrorCode::_lift( + l4 as u8, + ) + }; + Err(e) + } + _ => _rt::invalid_enum_discriminant(), + }; + result5 + } + } + } + impl UdpSocket { + #[allow(unused_unsafe, clippy::all)] + pub fn set_unicast_hop_limit(&self, value: u8) -> Result<(), ErrorCode> { + unsafe { + #[repr(align(1))] + struct RetArea([::core::mem::MaybeUninit; 2]); + let mut ret_area = RetArea( + [::core::mem::MaybeUninit::uninit(); 2], + ); + let ptr0 = ret_area.0.as_mut_ptr().cast::(); + #[cfg(target_arch = "wasm32")] + #[link(wasm_import_module = "wasi:sockets/udp@0.2.0")] + unsafe extern "C" { + #[link_name = "[method]udp-socket.set-unicast-hop-limit"] + fn wit_import1(_: i32, _: i32, _: *mut u8); + } + #[cfg(not(target_arch = "wasm32"))] + unsafe extern "C" fn wit_import1(_: i32, _: i32, _: *mut u8) { + unreachable!() + } + unsafe { + wit_import1( + (self).handle() as i32, + _rt::as_i32(&value), + ptr0, + ) + }; + let l2 = i32::from(*ptr0.add(0).cast::()); + let result4 = match l2 { + 0 => { + let e = (); + Ok(e) + } + 1 => { + let e = { + let l3 = i32::from(*ptr0.add(1).cast::()); + super::super::super::wasi::sockets::network::ErrorCode::_lift( + l3 as u8, + ) + }; + Err(e) + } + _ => _rt::invalid_enum_discriminant(), + }; + result4 + } + } + } + impl UdpSocket { + #[allow(unused_unsafe, clippy::all)] + pub fn receive_buffer_size(&self) -> Result { + unsafe { + #[repr(align(8))] + struct RetArea([::core::mem::MaybeUninit; 16]); + let mut ret_area = RetArea( + [::core::mem::MaybeUninit::uninit(); 16], + ); + let ptr0 = ret_area.0.as_mut_ptr().cast::(); + #[cfg(target_arch = "wasm32")] + #[link(wasm_import_module = "wasi:sockets/udp@0.2.0")] + unsafe extern "C" { + #[link_name = "[method]udp-socket.receive-buffer-size"] + fn wit_import1(_: i32, _: *mut u8); + } + #[cfg(not(target_arch = "wasm32"))] + unsafe extern "C" fn wit_import1(_: i32, _: *mut u8) { + unreachable!() + } + unsafe { wit_import1((self).handle() as i32, ptr0) }; + let l2 = i32::from(*ptr0.add(0).cast::()); + let result5 = match l2 { + 0 => { + let e = { + let l3 = *ptr0.add(8).cast::(); + l3 as u64 + }; + Ok(e) + } + 1 => { + let e = { + let l4 = i32::from(*ptr0.add(8).cast::()); + super::super::super::wasi::sockets::network::ErrorCode::_lift( + l4 as u8, + ) + }; + Err(e) + } + _ => _rt::invalid_enum_discriminant(), + }; + result5 + } + } + } + impl UdpSocket { + #[allow(unused_unsafe, clippy::all)] + pub fn set_receive_buffer_size( + &self, + value: u64, + ) -> Result<(), ErrorCode> { + unsafe { + #[repr(align(1))] + struct RetArea([::core::mem::MaybeUninit; 2]); + let mut ret_area = RetArea( + [::core::mem::MaybeUninit::uninit(); 2], + ); + let ptr0 = ret_area.0.as_mut_ptr().cast::(); + #[cfg(target_arch = "wasm32")] + #[link(wasm_import_module = "wasi:sockets/udp@0.2.0")] + unsafe extern "C" { + #[link_name = "[method]udp-socket.set-receive-buffer-size"] + fn wit_import1(_: i32, _: i64, _: *mut u8); + } + #[cfg(not(target_arch = "wasm32"))] + unsafe extern "C" fn wit_import1(_: i32, _: i64, _: *mut u8) { + unreachable!() + } + unsafe { + wit_import1( + (self).handle() as i32, + _rt::as_i64(&value), + ptr0, + ) + }; + let l2 = i32::from(*ptr0.add(0).cast::()); + let result4 = match l2 { + 0 => { + let e = (); + Ok(e) + } + 1 => { + let e = { + let l3 = i32::from(*ptr0.add(1).cast::()); + super::super::super::wasi::sockets::network::ErrorCode::_lift( + l3 as u8, + ) + }; + Err(e) + } + _ => _rt::invalid_enum_discriminant(), + }; + result4 + } + } + } + impl UdpSocket { + #[allow(unused_unsafe, clippy::all)] + pub fn send_buffer_size(&self) -> Result { + unsafe { + #[repr(align(8))] + struct RetArea([::core::mem::MaybeUninit; 16]); + let mut ret_area = RetArea( + [::core::mem::MaybeUninit::uninit(); 16], + ); + let ptr0 = ret_area.0.as_mut_ptr().cast::(); + #[cfg(target_arch = "wasm32")] + #[link(wasm_import_module = "wasi:sockets/udp@0.2.0")] + unsafe extern "C" { + #[link_name = "[method]udp-socket.send-buffer-size"] + fn wit_import1(_: i32, _: *mut u8); + } + #[cfg(not(target_arch = "wasm32"))] + unsafe extern "C" fn wit_import1(_: i32, _: *mut u8) { + unreachable!() + } + unsafe { wit_import1((self).handle() as i32, ptr0) }; + let l2 = i32::from(*ptr0.add(0).cast::()); + let result5 = match l2 { + 0 => { + let e = { + let l3 = *ptr0.add(8).cast::(); + l3 as u64 + }; + Ok(e) + } + 1 => { + let e = { + let l4 = i32::from(*ptr0.add(8).cast::()); + super::super::super::wasi::sockets::network::ErrorCode::_lift( + l4 as u8, + ) + }; + Err(e) + } + _ => _rt::invalid_enum_discriminant(), + }; + result5 + } + } + } + impl UdpSocket { + #[allow(unused_unsafe, clippy::all)] + pub fn set_send_buffer_size(&self, value: u64) -> Result<(), ErrorCode> { + unsafe { + #[repr(align(1))] + struct RetArea([::core::mem::MaybeUninit; 2]); + let mut ret_area = RetArea( + [::core::mem::MaybeUninit::uninit(); 2], + ); + let ptr0 = ret_area.0.as_mut_ptr().cast::(); + #[cfg(target_arch = "wasm32")] + #[link(wasm_import_module = "wasi:sockets/udp@0.2.0")] + unsafe extern "C" { + #[link_name = "[method]udp-socket.set-send-buffer-size"] + fn wit_import1(_: i32, _: i64, _: *mut u8); + } + #[cfg(not(target_arch = "wasm32"))] + unsafe extern "C" fn wit_import1(_: i32, _: i64, _: *mut u8) { + unreachable!() + } + unsafe { + wit_import1( + (self).handle() as i32, + _rt::as_i64(&value), + ptr0, + ) + }; + let l2 = i32::from(*ptr0.add(0).cast::()); + let result4 = match l2 { + 0 => { + let e = (); + Ok(e) + } + 1 => { + let e = { + let l3 = i32::from(*ptr0.add(1).cast::()); + super::super::super::wasi::sockets::network::ErrorCode::_lift( + l3 as u8, + ) + }; + Err(e) + } + _ => _rt::invalid_enum_discriminant(), + }; + result4 + } + } + } + impl UdpSocket { + #[allow(unused_unsafe, clippy::all)] + pub fn subscribe(&self) -> Pollable { + unsafe { + #[cfg(target_arch = "wasm32")] + #[link(wasm_import_module = "wasi:sockets/udp@0.2.0")] + unsafe extern "C" { + #[link_name = "[method]udp-socket.subscribe"] + fn wit_import0(_: i32) -> i32; + } + #[cfg(not(target_arch = "wasm32"))] + unsafe extern "C" fn wit_import0(_: i32) -> i32 { + unreachable!() + } + let ret = unsafe { wit_import0((self).handle() as i32) }; + unsafe { + super::super::super::wasi::io::poll::Pollable::from_handle( + ret as u32, + ) + } + } + } + } + impl IncomingDatagramStream { + #[allow(unused_unsafe, clippy::all)] + pub fn receive( + &self, + max_results: u64, + ) -> Result<_rt::Vec, ErrorCode> { + unsafe { + #[cfg_attr(target_pointer_width = "64", repr(align(8)))] + #[cfg_attr(target_pointer_width = "32", repr(align(4)))] + struct RetArea( + [::core::mem::MaybeUninit< + u8, + >; 3 * ::core::mem::size_of::<*const u8>()], + ); + let mut ret_area = RetArea( + [::core::mem::MaybeUninit::uninit(); 3 + * ::core::mem::size_of::<*const u8>()], + ); + let ptr0 = ret_area.0.as_mut_ptr().cast::(); + #[cfg(target_arch = "wasm32")] + #[link(wasm_import_module = "wasi:sockets/udp@0.2.0")] + unsafe extern "C" { + #[link_name = "[method]incoming-datagram-stream.receive"] + fn wit_import1(_: i32, _: i64, _: *mut u8); + } + #[cfg(not(target_arch = "wasm32"))] + unsafe extern "C" fn wit_import1(_: i32, _: i64, _: *mut u8) { + unreachable!() + } + unsafe { + wit_import1( + (self).handle() as i32, + _rt::as_i64(&max_results), + ptr0, + ) + }; + let l2 = i32::from(*ptr0.add(0).cast::()); + let result28 = match l2 { + 0 => { + let e = { + let l3 = *ptr0 + .add(::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l4 = *ptr0 + .add(2 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let base26 = l3; + let len26 = l4; + let mut result26 = _rt::Vec::with_capacity(len26); + for i in 0..len26 { + let base = base26 + .add(i * (32 + 2 * ::core::mem::size_of::<*const u8>())); + let e26 = { + let l5 = *base.add(0).cast::<*mut u8>(); + let l6 = *base + .add(::core::mem::size_of::<*const u8>()) + .cast::(); + let len7 = l6; + let l8 = i32::from( + *base + .add(2 * ::core::mem::size_of::<*const u8>()) + .cast::(), + ); + use super::super::super::wasi::sockets::network::IpSocketAddress as V25; + let v25 = match l8 { + 0 => { + let e25 = { + let l9 = i32::from( + *base + .add(4 + 2 * ::core::mem::size_of::<*const u8>()) + .cast::(), + ); + let l10 = i32::from( + *base + .add(6 + 2 * ::core::mem::size_of::<*const u8>()) + .cast::(), + ); + let l11 = i32::from( + *base + .add(7 + 2 * ::core::mem::size_of::<*const u8>()) + .cast::(), + ); + let l12 = i32::from( + *base + .add(8 + 2 * ::core::mem::size_of::<*const u8>()) + .cast::(), + ); + let l13 = i32::from( + *base + .add(9 + 2 * ::core::mem::size_of::<*const u8>()) + .cast::(), + ); + super::super::super::wasi::sockets::network::Ipv4SocketAddress { + port: l9 as u16, + address: (l10 as u8, l11 as u8, l12 as u8, l13 as u8), + } + }; + V25::Ipv4(e25) + } + n => { + debug_assert_eq!(n, 1, "invalid enum discriminant"); + let e25 = { + let l14 = i32::from( + *base + .add(4 + 2 * ::core::mem::size_of::<*const u8>()) + .cast::(), + ); + let l15 = *base + .add(8 + 2 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let l16 = i32::from( + *base + .add(12 + 2 * ::core::mem::size_of::<*const u8>()) + .cast::(), + ); + let l17 = i32::from( + *base + .add(14 + 2 * ::core::mem::size_of::<*const u8>()) + .cast::(), + ); + let l18 = i32::from( + *base + .add(16 + 2 * ::core::mem::size_of::<*const u8>()) + .cast::(), + ); + let l19 = i32::from( + *base + .add(18 + 2 * ::core::mem::size_of::<*const u8>()) + .cast::(), + ); + let l20 = i32::from( + *base + .add(20 + 2 * ::core::mem::size_of::<*const u8>()) + .cast::(), + ); + let l21 = i32::from( + *base + .add(22 + 2 * ::core::mem::size_of::<*const u8>()) + .cast::(), + ); + let l22 = i32::from( + *base + .add(24 + 2 * ::core::mem::size_of::<*const u8>()) + .cast::(), + ); + let l23 = i32::from( + *base + .add(26 + 2 * ::core::mem::size_of::<*const u8>()) + .cast::(), + ); + let l24 = *base + .add(28 + 2 * ::core::mem::size_of::<*const u8>()) + .cast::(); + super::super::super::wasi::sockets::network::Ipv6SocketAddress { + port: l14 as u16, + flow_info: l15 as u32, + address: ( + l16 as u16, + l17 as u16, + l18 as u16, + l19 as u16, + l20 as u16, + l21 as u16, + l22 as u16, + l23 as u16, + ), + scope_id: l24 as u32, + } + }; + V25::Ipv6(e25) + } + }; + IncomingDatagram { + data: _rt::Vec::from_raw_parts(l5.cast(), len7, len7), + remote_address: v25, + } + }; + result26.push(e26); + } + _rt::cabi_dealloc( + base26, + len26 * (32 + 2 * ::core::mem::size_of::<*const u8>()), + ::core::mem::size_of::<*const u8>(), + ); + result26 + }; + Ok(e) + } + 1 => { + let e = { + let l27 = i32::from( + *ptr0.add(::core::mem::size_of::<*const u8>()).cast::(), + ); + super::super::super::wasi::sockets::network::ErrorCode::_lift( + l27 as u8, + ) + }; + Err(e) + } + _ => _rt::invalid_enum_discriminant(), + }; + result28 + } + } + } + impl IncomingDatagramStream { + #[allow(unused_unsafe, clippy::all)] + pub fn subscribe(&self) -> Pollable { + unsafe { + #[cfg(target_arch = "wasm32")] + #[link(wasm_import_module = "wasi:sockets/udp@0.2.0")] + unsafe extern "C" { + #[link_name = "[method]incoming-datagram-stream.subscribe"] + fn wit_import0(_: i32) -> i32; + } + #[cfg(not(target_arch = "wasm32"))] + unsafe extern "C" fn wit_import0(_: i32) -> i32 { + unreachable!() + } + let ret = unsafe { wit_import0((self).handle() as i32) }; + unsafe { + super::super::super::wasi::io::poll::Pollable::from_handle( + ret as u32, + ) + } + } + } + } + impl OutgoingDatagramStream { + #[allow(unused_unsafe, clippy::all)] + pub fn check_send(&self) -> Result { + unsafe { + #[repr(align(8))] + struct RetArea([::core::mem::MaybeUninit; 16]); + let mut ret_area = RetArea( + [::core::mem::MaybeUninit::uninit(); 16], + ); + let ptr0 = ret_area.0.as_mut_ptr().cast::(); + #[cfg(target_arch = "wasm32")] + #[link(wasm_import_module = "wasi:sockets/udp@0.2.0")] + unsafe extern "C" { + #[link_name = "[method]outgoing-datagram-stream.check-send"] + fn wit_import1(_: i32, _: *mut u8); + } + #[cfg(not(target_arch = "wasm32"))] + unsafe extern "C" fn wit_import1(_: i32, _: *mut u8) { + unreachable!() + } + unsafe { wit_import1((self).handle() as i32, ptr0) }; + let l2 = i32::from(*ptr0.add(0).cast::()); + let result5 = match l2 { + 0 => { + let e = { + let l3 = *ptr0.add(8).cast::(); + l3 as u64 + }; + Ok(e) + } + 1 => { + let e = { + let l4 = i32::from(*ptr0.add(8).cast::()); + super::super::super::wasi::sockets::network::ErrorCode::_lift( + l4 as u8, + ) + }; + Err(e) + } + _ => _rt::invalid_enum_discriminant(), + }; + result5 + } + } + } + impl OutgoingDatagramStream { + #[allow(unused_unsafe, clippy::all)] + pub fn send( + &self, + datagrams: &[OutgoingDatagram], + ) -> Result { + unsafe { + #[repr(align(8))] + struct RetArea([::core::mem::MaybeUninit; 16]); + let mut ret_area = RetArea( + [::core::mem::MaybeUninit::uninit(); 16], + ); + let vec7 = datagrams; + let len7 = vec7.len(); + let layout7 = _rt::alloc::Layout::from_size_align_unchecked( + vec7.len() * (32 + 3 * ::core::mem::size_of::<*const u8>()), + ::core::mem::size_of::<*const u8>(), + ); + let result7 = if layout7.size() != 0 { + let ptr = _rt::alloc::alloc(layout7).cast::(); + if ptr.is_null() { + _rt::alloc::handle_alloc_error(layout7); + } + ptr + } else { + ::core::ptr::null_mut() + }; + for (i, e) in vec7.into_iter().enumerate() { + let base = result7 + .add(i * (32 + 3 * ::core::mem::size_of::<*const u8>())); + { + let OutgoingDatagram { + data: data0, + remote_address: remote_address0, + } = e; + let vec1 = data0; + let ptr1 = vec1.as_ptr().cast::(); + let len1 = vec1.len(); + *base + .add(::core::mem::size_of::<*const u8>()) + .cast::() = len1; + *base.add(0).cast::<*mut u8>() = ptr1.cast_mut(); + match remote_address0 { + Some(e) => { + *base + .add(2 * ::core::mem::size_of::<*const u8>()) + .cast::() = (1i32) as u8; + use super::super::super::wasi::sockets::network::IpSocketAddress as V6; + match e { + V6::Ipv4(e) => { + *base + .add(4 + 2 * ::core::mem::size_of::<*const u8>()) + .cast::() = (0i32) as u8; + let super::super::super::wasi::sockets::network::Ipv4SocketAddress { + port: port2, + address: address2, + } = e; + *base + .add(8 + 2 * ::core::mem::size_of::<*const u8>()) + .cast::() = (_rt::as_i32(port2)) as u16; + let (t3_0, t3_1, t3_2, t3_3) = address2; + *base + .add(10 + 2 * ::core::mem::size_of::<*const u8>()) + .cast::() = (_rt::as_i32(t3_0)) as u8; + *base + .add(11 + 2 * ::core::mem::size_of::<*const u8>()) + .cast::() = (_rt::as_i32(t3_1)) as u8; + *base + .add(12 + 2 * ::core::mem::size_of::<*const u8>()) + .cast::() = (_rt::as_i32(t3_2)) as u8; + *base + .add(13 + 2 * ::core::mem::size_of::<*const u8>()) + .cast::() = (_rt::as_i32(t3_3)) as u8; + } + V6::Ipv6(e) => { + *base + .add(4 + 2 * ::core::mem::size_of::<*const u8>()) + .cast::() = (1i32) as u8; + let super::super::super::wasi::sockets::network::Ipv6SocketAddress { + port: port4, + flow_info: flow_info4, + address: address4, + scope_id: scope_id4, + } = e; + *base + .add(8 + 2 * ::core::mem::size_of::<*const u8>()) + .cast::() = (_rt::as_i32(port4)) as u16; + *base + .add(12 + 2 * ::core::mem::size_of::<*const u8>()) + .cast::() = _rt::as_i32(flow_info4); + let (t5_0, t5_1, t5_2, t5_3, t5_4, t5_5, t5_6, t5_7) = address4; + *base + .add(16 + 2 * ::core::mem::size_of::<*const u8>()) + .cast::() = (_rt::as_i32(t5_0)) as u16; + *base + .add(18 + 2 * ::core::mem::size_of::<*const u8>()) + .cast::() = (_rt::as_i32(t5_1)) as u16; + *base + .add(20 + 2 * ::core::mem::size_of::<*const u8>()) + .cast::() = (_rt::as_i32(t5_2)) as u16; + *base + .add(22 + 2 * ::core::mem::size_of::<*const u8>()) + .cast::() = (_rt::as_i32(t5_3)) as u16; + *base + .add(24 + 2 * ::core::mem::size_of::<*const u8>()) + .cast::() = (_rt::as_i32(t5_4)) as u16; + *base + .add(26 + 2 * ::core::mem::size_of::<*const u8>()) + .cast::() = (_rt::as_i32(t5_5)) as u16; + *base + .add(28 + 2 * ::core::mem::size_of::<*const u8>()) + .cast::() = (_rt::as_i32(t5_6)) as u16; + *base + .add(30 + 2 * ::core::mem::size_of::<*const u8>()) + .cast::() = (_rt::as_i32(t5_7)) as u16; + *base + .add(32 + 2 * ::core::mem::size_of::<*const u8>()) + .cast::() = _rt::as_i32(scope_id4); + } + } + } + None => { + *base + .add(2 * ::core::mem::size_of::<*const u8>()) + .cast::() = (0i32) as u8; + } + }; + } + } + let ptr8 = ret_area.0.as_mut_ptr().cast::(); + #[cfg(target_arch = "wasm32")] + #[link(wasm_import_module = "wasi:sockets/udp@0.2.0")] + unsafe extern "C" { + #[link_name = "[method]outgoing-datagram-stream.send"] + fn wit_import9(_: i32, _: *mut u8, _: usize, _: *mut u8); + } + #[cfg(not(target_arch = "wasm32"))] + unsafe extern "C" fn wit_import9( + _: i32, + _: *mut u8, + _: usize, + _: *mut u8, + ) { + unreachable!() + } + unsafe { + wit_import9((self).handle() as i32, result7, len7, ptr8) + }; + let l10 = i32::from(*ptr8.add(0).cast::()); + let result13 = match l10 { + 0 => { + let e = { + let l11 = *ptr8.add(8).cast::(); + l11 as u64 + }; + Ok(e) + } + 1 => { + let e = { + let l12 = i32::from(*ptr8.add(8).cast::()); + super::super::super::wasi::sockets::network::ErrorCode::_lift( + l12 as u8, + ) + }; + Err(e) + } + _ => _rt::invalid_enum_discriminant(), + }; + if layout7.size() != 0 { + _rt::alloc::dealloc(result7.cast(), layout7); + } + result13 + } + } + } + impl OutgoingDatagramStream { + #[allow(unused_unsafe, clippy::all)] + pub fn subscribe(&self) -> Pollable { + unsafe { + #[cfg(target_arch = "wasm32")] + #[link(wasm_import_module = "wasi:sockets/udp@0.2.0")] + unsafe extern "C" { + #[link_name = "[method]outgoing-datagram-stream.subscribe"] + fn wit_import0(_: i32) -> i32; + } + #[cfg(not(target_arch = "wasm32"))] + unsafe extern "C" fn wit_import0(_: i32) -> i32 { + unreachable!() + } + let ret = unsafe { wit_import0((self).handle() as i32) }; + unsafe { + super::super::super::wasi::io::poll::Pollable::from_handle( + ret as u32, + ) + } + } + } + } + } + #[allow(dead_code, async_fn_in_trait, unused_imports, clippy::all)] + pub mod udp_create_socket { + #[used] + #[doc(hidden)] + static __FORCE_SECTION_REF: fn() = super::super::super::__link_custom_section_describing_imports; + use super::super::super::_rt; + pub type ErrorCode = super::super::super::wasi::sockets::network::ErrorCode; + pub type IpAddressFamily = super::super::super::wasi::sockets::network::IpAddressFamily; + pub type UdpSocket = super::super::super::wasi::sockets::udp::UdpSocket; + #[allow(unused_unsafe, clippy::all)] + pub fn create_udp_socket( + address_family: IpAddressFamily, + ) -> Result { + unsafe { + #[repr(align(4))] + struct RetArea([::core::mem::MaybeUninit; 8]); + let mut ret_area = RetArea([::core::mem::MaybeUninit::uninit(); 8]); + let ptr0 = ret_area.0.as_mut_ptr().cast::(); + #[cfg(target_arch = "wasm32")] + #[link(wasm_import_module = "wasi:sockets/udp-create-socket@0.2.0")] + unsafe extern "C" { + #[link_name = "create-udp-socket"] + fn wit_import1(_: i32, _: *mut u8); + } + #[cfg(not(target_arch = "wasm32"))] + unsafe extern "C" fn wit_import1(_: i32, _: *mut u8) { + unreachable!() + } + unsafe { wit_import1(address_family.clone() as i32, ptr0) }; + let l2 = i32::from(*ptr0.add(0).cast::()); + let result5 = match l2 { + 0 => { + let e = { + let l3 = *ptr0.add(4).cast::(); + unsafe { + super::super::super::wasi::sockets::udp::UdpSocket::from_handle( + l3 as u32, + ) + } + }; + Ok(e) + } + 1 => { + let e = { + let l4 = i32::from(*ptr0.add(4).cast::()); + super::super::super::wasi::sockets::network::ErrorCode::_lift( + l4 as u8, + ) + }; + Err(e) + } + _ => _rt::invalid_enum_discriminant(), + }; + result5 + } + } + } + #[allow(dead_code, async_fn_in_trait, unused_imports, clippy::all)] + pub mod tcp { + #[used] + #[doc(hidden)] + static __FORCE_SECTION_REF: fn() = super::super::super::__link_custom_section_describing_imports; + use super::super::super::_rt; + pub type InputStream = super::super::super::wasi::io::streams::InputStream; + pub type OutputStream = super::super::super::wasi::io::streams::OutputStream; + pub type Pollable = super::super::super::wasi::io::poll::Pollable; + pub type Duration = super::super::super::wasi::clocks::monotonic_clock::Duration; + pub type Network = super::super::super::wasi::sockets::network::Network; + pub type ErrorCode = super::super::super::wasi::sockets::network::ErrorCode; + pub type IpSocketAddress = super::super::super::wasi::sockets::network::IpSocketAddress; + pub type IpAddressFamily = super::super::super::wasi::sockets::network::IpAddressFamily; + #[repr(u8)] + #[derive(Clone, Copy, Eq, Ord, PartialEq, PartialOrd)] + pub enum ShutdownType { + Receive, + Send, + Both, + } + impl ::core::fmt::Debug for ShutdownType { + fn fmt( + &self, + f: &mut ::core::fmt::Formatter<'_>, + ) -> ::core::fmt::Result { + match self { + ShutdownType::Receive => { + f.debug_tuple("ShutdownType::Receive").finish() + } + ShutdownType::Send => { + f.debug_tuple("ShutdownType::Send").finish() + } + ShutdownType::Both => { + f.debug_tuple("ShutdownType::Both").finish() + } + } + } + } + impl ShutdownType { + #[doc(hidden)] + pub unsafe fn _lift(val: u8) -> ShutdownType { + if !cfg!(debug_assertions) { + return ::core::mem::transmute(val); + } + match val { + 0 => ShutdownType::Receive, + 1 => ShutdownType::Send, + 2 => ShutdownType::Both, + _ => panic!("invalid enum discriminant"), + } + } + } + #[derive(Debug)] + #[repr(transparent)] + pub struct TcpSocket { + handle: _rt::Resource, + } + impl TcpSocket { + #[doc(hidden)] + pub unsafe fn from_handle(handle: u32) -> Self { + Self { + handle: unsafe { _rt::Resource::from_handle(handle) }, + } + } + #[doc(hidden)] + pub fn take_handle(&self) -> u32 { + _rt::Resource::take_handle(&self.handle) + } + #[doc(hidden)] + pub fn handle(&self) -> u32 { + _rt::Resource::handle(&self.handle) + } + } + unsafe impl _rt::WasmResource for TcpSocket { + #[inline] + unsafe fn drop(_handle: u32) { + #[cfg(not(target_arch = "wasm32"))] + unreachable!(); + #[cfg(target_arch = "wasm32")] + { + #[link(wasm_import_module = "wasi:sockets/tcp@0.2.0")] + unsafe extern "C" { + #[link_name = "[resource-drop]tcp-socket"] + fn drop(_: u32); + } + unsafe { drop(_handle) }; + } + } + } + impl TcpSocket { + #[allow(unused_unsafe, clippy::all)] + pub fn start_bind( + &self, + network: &Network, + local_address: IpSocketAddress, + ) -> Result<(), ErrorCode> { + unsafe { + #[repr(align(1))] + struct RetArea([::core::mem::MaybeUninit; 2]); + let mut ret_area = RetArea( + [::core::mem::MaybeUninit::uninit(); 2], + ); + use super::super::super::wasi::sockets::network::IpSocketAddress as V4; + let ( + result5_0, + result5_1, + result5_2, + result5_3, + result5_4, + result5_5, + result5_6, + result5_7, + result5_8, + result5_9, + result5_10, + result5_11, + ) = match local_address { + V4::Ipv4(e) => { + let super::super::super::wasi::sockets::network::Ipv4SocketAddress { + port: port0, + address: address0, + } = e; + let (t1_0, t1_1, t1_2, t1_3) = address0; + ( + 0i32, + _rt::as_i32(port0), + _rt::as_i32(t1_0), + _rt::as_i32(t1_1), + _rt::as_i32(t1_2), + _rt::as_i32(t1_3), + 0i32, + 0i32, + 0i32, + 0i32, + 0i32, + 0i32, + ) + } + V4::Ipv6(e) => { + let super::super::super::wasi::sockets::network::Ipv6SocketAddress { + port: port2, + flow_info: flow_info2, + address: address2, + scope_id: scope_id2, + } = e; + let (t3_0, t3_1, t3_2, t3_3, t3_4, t3_5, t3_6, t3_7) = address2; + ( + 1i32, + _rt::as_i32(port2), + _rt::as_i32(flow_info2), + _rt::as_i32(t3_0), + _rt::as_i32(t3_1), + _rt::as_i32(t3_2), + _rt::as_i32(t3_3), + _rt::as_i32(t3_4), + _rt::as_i32(t3_5), + _rt::as_i32(t3_6), + _rt::as_i32(t3_7), + _rt::as_i32(scope_id2), + ) + } + }; + let ptr6 = ret_area.0.as_mut_ptr().cast::(); + #[cfg(target_arch = "wasm32")] + #[link(wasm_import_module = "wasi:sockets/tcp@0.2.0")] + unsafe extern "C" { + #[link_name = "[method]tcp-socket.start-bind"] + fn wit_import7( + _: i32, + _: i32, + _: i32, + _: i32, + _: i32, + _: i32, + _: i32, + _: i32, + _: i32, + _: i32, + _: i32, + _: i32, + _: i32, + _: i32, + _: *mut u8, + ); + } + #[cfg(not(target_arch = "wasm32"))] + unsafe extern "C" fn wit_import7( + _: i32, + _: i32, + _: i32, + _: i32, + _: i32, + _: i32, + _: i32, + _: i32, + _: i32, + _: i32, + _: i32, + _: i32, + _: i32, + _: i32, + _: *mut u8, + ) { + unreachable!() + } + unsafe { + wit_import7( + (self).handle() as i32, + (network).handle() as i32, + result5_0, + result5_1, + result5_2, + result5_3, + result5_4, + result5_5, + result5_6, + result5_7, + result5_8, + result5_9, + result5_10, + result5_11, + ptr6, + ) + }; + let l8 = i32::from(*ptr6.add(0).cast::()); + let result10 = match l8 { + 0 => { + let e = (); + Ok(e) + } + 1 => { + let e = { + let l9 = i32::from(*ptr6.add(1).cast::()); + super::super::super::wasi::sockets::network::ErrorCode::_lift( + l9 as u8, + ) + }; + Err(e) + } + _ => _rt::invalid_enum_discriminant(), + }; + result10 + } + } + } + impl TcpSocket { + #[allow(unused_unsafe, clippy::all)] + pub fn finish_bind(&self) -> Result<(), ErrorCode> { + unsafe { + #[repr(align(1))] + struct RetArea([::core::mem::MaybeUninit; 2]); + let mut ret_area = RetArea( + [::core::mem::MaybeUninit::uninit(); 2], + ); + let ptr0 = ret_area.0.as_mut_ptr().cast::(); + #[cfg(target_arch = "wasm32")] + #[link(wasm_import_module = "wasi:sockets/tcp@0.2.0")] + unsafe extern "C" { + #[link_name = "[method]tcp-socket.finish-bind"] + fn wit_import1(_: i32, _: *mut u8); + } + #[cfg(not(target_arch = "wasm32"))] + unsafe extern "C" fn wit_import1(_: i32, _: *mut u8) { + unreachable!() + } + unsafe { wit_import1((self).handle() as i32, ptr0) }; + let l2 = i32::from(*ptr0.add(0).cast::()); + let result4 = match l2 { + 0 => { + let e = (); + Ok(e) + } + 1 => { + let e = { + let l3 = i32::from(*ptr0.add(1).cast::()); + super::super::super::wasi::sockets::network::ErrorCode::_lift( + l3 as u8, + ) + }; + Err(e) + } + _ => _rt::invalid_enum_discriminant(), + }; + result4 + } + } + } + impl TcpSocket { + #[allow(unused_unsafe, clippy::all)] + pub fn start_connect( + &self, + network: &Network, + remote_address: IpSocketAddress, + ) -> Result<(), ErrorCode> { + unsafe { + #[repr(align(1))] + struct RetArea([::core::mem::MaybeUninit; 2]); + let mut ret_area = RetArea( + [::core::mem::MaybeUninit::uninit(); 2], + ); + use super::super::super::wasi::sockets::network::IpSocketAddress as V4; + let ( + result5_0, + result5_1, + result5_2, + result5_3, + result5_4, + result5_5, + result5_6, + result5_7, + result5_8, + result5_9, + result5_10, + result5_11, + ) = match remote_address { + V4::Ipv4(e) => { + let super::super::super::wasi::sockets::network::Ipv4SocketAddress { + port: port0, + address: address0, + } = e; + let (t1_0, t1_1, t1_2, t1_3) = address0; + ( + 0i32, + _rt::as_i32(port0), + _rt::as_i32(t1_0), + _rt::as_i32(t1_1), + _rt::as_i32(t1_2), + _rt::as_i32(t1_3), + 0i32, + 0i32, + 0i32, + 0i32, + 0i32, + 0i32, + ) + } + V4::Ipv6(e) => { + let super::super::super::wasi::sockets::network::Ipv6SocketAddress { + port: port2, + flow_info: flow_info2, + address: address2, + scope_id: scope_id2, + } = e; + let (t3_0, t3_1, t3_2, t3_3, t3_4, t3_5, t3_6, t3_7) = address2; + ( + 1i32, + _rt::as_i32(port2), + _rt::as_i32(flow_info2), + _rt::as_i32(t3_0), + _rt::as_i32(t3_1), + _rt::as_i32(t3_2), + _rt::as_i32(t3_3), + _rt::as_i32(t3_4), + _rt::as_i32(t3_5), + _rt::as_i32(t3_6), + _rt::as_i32(t3_7), + _rt::as_i32(scope_id2), + ) + } + }; + let ptr6 = ret_area.0.as_mut_ptr().cast::(); + #[cfg(target_arch = "wasm32")] + #[link(wasm_import_module = "wasi:sockets/tcp@0.2.0")] + unsafe extern "C" { + #[link_name = "[method]tcp-socket.start-connect"] + fn wit_import7( + _: i32, + _: i32, + _: i32, + _: i32, + _: i32, + _: i32, + _: i32, + _: i32, + _: i32, + _: i32, + _: i32, + _: i32, + _: i32, + _: i32, + _: *mut u8, + ); + } + #[cfg(not(target_arch = "wasm32"))] + unsafe extern "C" fn wit_import7( + _: i32, + _: i32, + _: i32, + _: i32, + _: i32, + _: i32, + _: i32, + _: i32, + _: i32, + _: i32, + _: i32, + _: i32, + _: i32, + _: i32, + _: *mut u8, + ) { + unreachable!() + } + unsafe { + wit_import7( + (self).handle() as i32, + (network).handle() as i32, + result5_0, + result5_1, + result5_2, + result5_3, + result5_4, + result5_5, + result5_6, + result5_7, + result5_8, + result5_9, + result5_10, + result5_11, + ptr6, + ) + }; + let l8 = i32::from(*ptr6.add(0).cast::()); + let result10 = match l8 { + 0 => { + let e = (); + Ok(e) + } + 1 => { + let e = { + let l9 = i32::from(*ptr6.add(1).cast::()); + super::super::super::wasi::sockets::network::ErrorCode::_lift( + l9 as u8, + ) + }; + Err(e) + } + _ => _rt::invalid_enum_discriminant(), + }; + result10 + } + } + } + impl TcpSocket { + #[allow(unused_unsafe, clippy::all)] + pub fn finish_connect( + &self, + ) -> Result<(InputStream, OutputStream), ErrorCode> { + unsafe { + #[repr(align(4))] + struct RetArea([::core::mem::MaybeUninit; 12]); + let mut ret_area = RetArea( + [::core::mem::MaybeUninit::uninit(); 12], + ); + let ptr0 = ret_area.0.as_mut_ptr().cast::(); + #[cfg(target_arch = "wasm32")] + #[link(wasm_import_module = "wasi:sockets/tcp@0.2.0")] + unsafe extern "C" { + #[link_name = "[method]tcp-socket.finish-connect"] + fn wit_import1(_: i32, _: *mut u8); + } + #[cfg(not(target_arch = "wasm32"))] + unsafe extern "C" fn wit_import1(_: i32, _: *mut u8) { + unreachable!() + } + unsafe { wit_import1((self).handle() as i32, ptr0) }; + let l2 = i32::from(*ptr0.add(0).cast::()); + let result6 = match l2 { + 0 => { + let e = { + let l3 = *ptr0.add(4).cast::(); + let l4 = *ptr0.add(8).cast::(); + ( + unsafe { + super::super::super::wasi::io::streams::InputStream::from_handle( + l3 as u32, + ) + }, + unsafe { + super::super::super::wasi::io::streams::OutputStream::from_handle( + l4 as u32, + ) + }, + ) + }; + Ok(e) + } + 1 => { + let e = { + let l5 = i32::from(*ptr0.add(4).cast::()); + super::super::super::wasi::sockets::network::ErrorCode::_lift( + l5 as u8, + ) + }; + Err(e) + } + _ => _rt::invalid_enum_discriminant(), + }; + result6 + } + } + } + impl TcpSocket { + #[allow(unused_unsafe, clippy::all)] + pub fn start_listen(&self) -> Result<(), ErrorCode> { + unsafe { + #[repr(align(1))] + struct RetArea([::core::mem::MaybeUninit; 2]); + let mut ret_area = RetArea( + [::core::mem::MaybeUninit::uninit(); 2], + ); + let ptr0 = ret_area.0.as_mut_ptr().cast::(); + #[cfg(target_arch = "wasm32")] + #[link(wasm_import_module = "wasi:sockets/tcp@0.2.0")] + unsafe extern "C" { + #[link_name = "[method]tcp-socket.start-listen"] + fn wit_import1(_: i32, _: *mut u8); + } + #[cfg(not(target_arch = "wasm32"))] + unsafe extern "C" fn wit_import1(_: i32, _: *mut u8) { + unreachable!() + } + unsafe { wit_import1((self).handle() as i32, ptr0) }; + let l2 = i32::from(*ptr0.add(0).cast::()); + let result4 = match l2 { + 0 => { + let e = (); + Ok(e) + } + 1 => { + let e = { + let l3 = i32::from(*ptr0.add(1).cast::()); + super::super::super::wasi::sockets::network::ErrorCode::_lift( + l3 as u8, + ) + }; + Err(e) + } + _ => _rt::invalid_enum_discriminant(), + }; + result4 + } + } + } + impl TcpSocket { + #[allow(unused_unsafe, clippy::all)] + pub fn finish_listen(&self) -> Result<(), ErrorCode> { + unsafe { + #[repr(align(1))] + struct RetArea([::core::mem::MaybeUninit; 2]); + let mut ret_area = RetArea( + [::core::mem::MaybeUninit::uninit(); 2], + ); + let ptr0 = ret_area.0.as_mut_ptr().cast::(); + #[cfg(target_arch = "wasm32")] + #[link(wasm_import_module = "wasi:sockets/tcp@0.2.0")] + unsafe extern "C" { + #[link_name = "[method]tcp-socket.finish-listen"] + fn wit_import1(_: i32, _: *mut u8); + } + #[cfg(not(target_arch = "wasm32"))] + unsafe extern "C" fn wit_import1(_: i32, _: *mut u8) { + unreachable!() + } + unsafe { wit_import1((self).handle() as i32, ptr0) }; + let l2 = i32::from(*ptr0.add(0).cast::()); + let result4 = match l2 { + 0 => { + let e = (); + Ok(e) + } + 1 => { + let e = { + let l3 = i32::from(*ptr0.add(1).cast::()); + super::super::super::wasi::sockets::network::ErrorCode::_lift( + l3 as u8, + ) + }; + Err(e) + } + _ => _rt::invalid_enum_discriminant(), + }; + result4 + } + } + } + impl TcpSocket { + #[allow(unused_unsafe, clippy::all)] + pub fn accept( + &self, + ) -> Result<(TcpSocket, InputStream, OutputStream), ErrorCode> { + unsafe { + #[repr(align(4))] + struct RetArea([::core::mem::MaybeUninit; 16]); + let mut ret_area = RetArea( + [::core::mem::MaybeUninit::uninit(); 16], + ); + let ptr0 = ret_area.0.as_mut_ptr().cast::(); + #[cfg(target_arch = "wasm32")] + #[link(wasm_import_module = "wasi:sockets/tcp@0.2.0")] + unsafe extern "C" { + #[link_name = "[method]tcp-socket.accept"] + fn wit_import1(_: i32, _: *mut u8); + } + #[cfg(not(target_arch = "wasm32"))] + unsafe extern "C" fn wit_import1(_: i32, _: *mut u8) { + unreachable!() + } + unsafe { wit_import1((self).handle() as i32, ptr0) }; + let l2 = i32::from(*ptr0.add(0).cast::()); + let result7 = match l2 { + 0 => { + let e = { + let l3 = *ptr0.add(4).cast::(); + let l4 = *ptr0.add(8).cast::(); + let l5 = *ptr0.add(12).cast::(); + ( + unsafe { TcpSocket::from_handle(l3 as u32) }, + unsafe { + super::super::super::wasi::io::streams::InputStream::from_handle( + l4 as u32, + ) + }, + unsafe { + super::super::super::wasi::io::streams::OutputStream::from_handle( + l5 as u32, + ) + }, + ) + }; + Ok(e) + } + 1 => { + let e = { + let l6 = i32::from(*ptr0.add(4).cast::()); + super::super::super::wasi::sockets::network::ErrorCode::_lift( + l6 as u8, + ) + }; + Err(e) + } + _ => _rt::invalid_enum_discriminant(), + }; + result7 + } + } + } + impl TcpSocket { + #[allow(unused_unsafe, clippy::all)] + pub fn local_address(&self) -> Result { + unsafe { + #[repr(align(4))] + struct RetArea([::core::mem::MaybeUninit; 36]); + let mut ret_area = RetArea( + [::core::mem::MaybeUninit::uninit(); 36], + ); + let ptr0 = ret_area.0.as_mut_ptr().cast::(); + #[cfg(target_arch = "wasm32")] + #[link(wasm_import_module = "wasi:sockets/tcp@0.2.0")] + unsafe extern "C" { + #[link_name = "[method]tcp-socket.local-address"] + fn wit_import1(_: i32, _: *mut u8); + } + #[cfg(not(target_arch = "wasm32"))] + unsafe extern "C" fn wit_import1(_: i32, _: *mut u8) { + unreachable!() + } + unsafe { wit_import1((self).handle() as i32, ptr0) }; + let l2 = i32::from(*ptr0.add(0).cast::()); + let result22 = match l2 { + 0 => { + let e = { + let l3 = i32::from(*ptr0.add(4).cast::()); + use super::super::super::wasi::sockets::network::IpSocketAddress as V20; + let v20 = match l3 { + 0 => { + let e20 = { + let l4 = i32::from(*ptr0.add(8).cast::()); + let l5 = i32::from(*ptr0.add(10).cast::()); + let l6 = i32::from(*ptr0.add(11).cast::()); + let l7 = i32::from(*ptr0.add(12).cast::()); + let l8 = i32::from(*ptr0.add(13).cast::()); + super::super::super::wasi::sockets::network::Ipv4SocketAddress { + port: l4 as u16, + address: (l5 as u8, l6 as u8, l7 as u8, l8 as u8), + } + }; + V20::Ipv4(e20) + } + n => { + debug_assert_eq!(n, 1, "invalid enum discriminant"); + let e20 = { + let l9 = i32::from(*ptr0.add(8).cast::()); + let l10 = *ptr0.add(12).cast::(); + let l11 = i32::from(*ptr0.add(16).cast::()); + let l12 = i32::from(*ptr0.add(18).cast::()); + let l13 = i32::from(*ptr0.add(20).cast::()); + let l14 = i32::from(*ptr0.add(22).cast::()); + let l15 = i32::from(*ptr0.add(24).cast::()); + let l16 = i32::from(*ptr0.add(26).cast::()); + let l17 = i32::from(*ptr0.add(28).cast::()); + let l18 = i32::from(*ptr0.add(30).cast::()); + let l19 = *ptr0.add(32).cast::(); + super::super::super::wasi::sockets::network::Ipv6SocketAddress { + port: l9 as u16, + flow_info: l10 as u32, + address: ( + l11 as u16, + l12 as u16, + l13 as u16, + l14 as u16, + l15 as u16, + l16 as u16, + l17 as u16, + l18 as u16, + ), + scope_id: l19 as u32, + } + }; + V20::Ipv6(e20) + } + }; + v20 + }; + Ok(e) + } + 1 => { + let e = { + let l21 = i32::from(*ptr0.add(4).cast::()); + super::super::super::wasi::sockets::network::ErrorCode::_lift( + l21 as u8, + ) + }; + Err(e) + } + _ => _rt::invalid_enum_discriminant(), + }; + result22 + } + } + } + impl TcpSocket { + #[allow(unused_unsafe, clippy::all)] + pub fn remote_address(&self) -> Result { + unsafe { + #[repr(align(4))] + struct RetArea([::core::mem::MaybeUninit; 36]); + let mut ret_area = RetArea( + [::core::mem::MaybeUninit::uninit(); 36], + ); + let ptr0 = ret_area.0.as_mut_ptr().cast::(); + #[cfg(target_arch = "wasm32")] + #[link(wasm_import_module = "wasi:sockets/tcp@0.2.0")] + unsafe extern "C" { + #[link_name = "[method]tcp-socket.remote-address"] + fn wit_import1(_: i32, _: *mut u8); + } + #[cfg(not(target_arch = "wasm32"))] + unsafe extern "C" fn wit_import1(_: i32, _: *mut u8) { + unreachable!() + } + unsafe { wit_import1((self).handle() as i32, ptr0) }; + let l2 = i32::from(*ptr0.add(0).cast::()); + let result22 = match l2 { + 0 => { + let e = { + let l3 = i32::from(*ptr0.add(4).cast::()); + use super::super::super::wasi::sockets::network::IpSocketAddress as V20; + let v20 = match l3 { + 0 => { + let e20 = { + let l4 = i32::from(*ptr0.add(8).cast::()); + let l5 = i32::from(*ptr0.add(10).cast::()); + let l6 = i32::from(*ptr0.add(11).cast::()); + let l7 = i32::from(*ptr0.add(12).cast::()); + let l8 = i32::from(*ptr0.add(13).cast::()); + super::super::super::wasi::sockets::network::Ipv4SocketAddress { + port: l4 as u16, + address: (l5 as u8, l6 as u8, l7 as u8, l8 as u8), + } + }; + V20::Ipv4(e20) + } + n => { + debug_assert_eq!(n, 1, "invalid enum discriminant"); + let e20 = { + let l9 = i32::from(*ptr0.add(8).cast::()); + let l10 = *ptr0.add(12).cast::(); + let l11 = i32::from(*ptr0.add(16).cast::()); + let l12 = i32::from(*ptr0.add(18).cast::()); + let l13 = i32::from(*ptr0.add(20).cast::()); + let l14 = i32::from(*ptr0.add(22).cast::()); + let l15 = i32::from(*ptr0.add(24).cast::()); + let l16 = i32::from(*ptr0.add(26).cast::()); + let l17 = i32::from(*ptr0.add(28).cast::()); + let l18 = i32::from(*ptr0.add(30).cast::()); + let l19 = *ptr0.add(32).cast::(); + super::super::super::wasi::sockets::network::Ipv6SocketAddress { + port: l9 as u16, + flow_info: l10 as u32, + address: ( + l11 as u16, + l12 as u16, + l13 as u16, + l14 as u16, + l15 as u16, + l16 as u16, + l17 as u16, + l18 as u16, + ), + scope_id: l19 as u32, + } + }; + V20::Ipv6(e20) + } + }; + v20 + }; + Ok(e) + } + 1 => { + let e = { + let l21 = i32::from(*ptr0.add(4).cast::()); + super::super::super::wasi::sockets::network::ErrorCode::_lift( + l21 as u8, + ) + }; + Err(e) + } + _ => _rt::invalid_enum_discriminant(), + }; + result22 + } + } + } + impl TcpSocket { + #[allow(unused_unsafe, clippy::all)] + pub fn is_listening(&self) -> bool { + unsafe { + #[cfg(target_arch = "wasm32")] + #[link(wasm_import_module = "wasi:sockets/tcp@0.2.0")] + unsafe extern "C" { + #[link_name = "[method]tcp-socket.is-listening"] + fn wit_import0(_: i32) -> i32; + } + #[cfg(not(target_arch = "wasm32"))] + unsafe extern "C" fn wit_import0(_: i32) -> i32 { + unreachable!() + } + let ret = unsafe { wit_import0((self).handle() as i32) }; + _rt::bool_lift(ret as u8) + } + } + } + impl TcpSocket { + #[allow(unused_unsafe, clippy::all)] + pub fn address_family(&self) -> IpAddressFamily { + unsafe { + #[cfg(target_arch = "wasm32")] + #[link(wasm_import_module = "wasi:sockets/tcp@0.2.0")] + unsafe extern "C" { + #[link_name = "[method]tcp-socket.address-family"] + fn wit_import0(_: i32) -> i32; + } + #[cfg(not(target_arch = "wasm32"))] + unsafe extern "C" fn wit_import0(_: i32) -> i32 { + unreachable!() + } + let ret = unsafe { wit_import0((self).handle() as i32) }; + super::super::super::wasi::sockets::network::IpAddressFamily::_lift( + ret as u8, + ) + } + } + } + impl TcpSocket { + #[allow(unused_unsafe, clippy::all)] + pub fn set_listen_backlog_size( + &self, + value: u64, + ) -> Result<(), ErrorCode> { + unsafe { + #[repr(align(1))] + struct RetArea([::core::mem::MaybeUninit; 2]); + let mut ret_area = RetArea( + [::core::mem::MaybeUninit::uninit(); 2], + ); + let ptr0 = ret_area.0.as_mut_ptr().cast::(); + #[cfg(target_arch = "wasm32")] + #[link(wasm_import_module = "wasi:sockets/tcp@0.2.0")] + unsafe extern "C" { + #[link_name = "[method]tcp-socket.set-listen-backlog-size"] + fn wit_import1(_: i32, _: i64, _: *mut u8); + } + #[cfg(not(target_arch = "wasm32"))] + unsafe extern "C" fn wit_import1(_: i32, _: i64, _: *mut u8) { + unreachable!() + } + unsafe { + wit_import1( + (self).handle() as i32, + _rt::as_i64(&value), + ptr0, + ) + }; + let l2 = i32::from(*ptr0.add(0).cast::()); + let result4 = match l2 { + 0 => { + let e = (); + Ok(e) + } + 1 => { + let e = { + let l3 = i32::from(*ptr0.add(1).cast::()); + super::super::super::wasi::sockets::network::ErrorCode::_lift( + l3 as u8, + ) + }; + Err(e) + } + _ => _rt::invalid_enum_discriminant(), + }; + result4 + } + } + } + impl TcpSocket { + #[allow(unused_unsafe, clippy::all)] + pub fn keep_alive_enabled(&self) -> Result { + unsafe { + #[repr(align(1))] + struct RetArea([::core::mem::MaybeUninit; 2]); + let mut ret_area = RetArea( + [::core::mem::MaybeUninit::uninit(); 2], + ); + let ptr0 = ret_area.0.as_mut_ptr().cast::(); + #[cfg(target_arch = "wasm32")] + #[link(wasm_import_module = "wasi:sockets/tcp@0.2.0")] + unsafe extern "C" { + #[link_name = "[method]tcp-socket.keep-alive-enabled"] + fn wit_import1(_: i32, _: *mut u8); + } + #[cfg(not(target_arch = "wasm32"))] + unsafe extern "C" fn wit_import1(_: i32, _: *mut u8) { + unreachable!() + } + unsafe { wit_import1((self).handle() as i32, ptr0) }; + let l2 = i32::from(*ptr0.add(0).cast::()); + let result5 = match l2 { + 0 => { + let e = { + let l3 = i32::from(*ptr0.add(1).cast::()); + _rt::bool_lift(l3 as u8) + }; + Ok(e) + } + 1 => { + let e = { + let l4 = i32::from(*ptr0.add(1).cast::()); + super::super::super::wasi::sockets::network::ErrorCode::_lift( + l4 as u8, + ) + }; + Err(e) + } + _ => _rt::invalid_enum_discriminant(), + }; + result5 + } + } + } + impl TcpSocket { + #[allow(unused_unsafe, clippy::all)] + pub fn set_keep_alive_enabled( + &self, + value: bool, + ) -> Result<(), ErrorCode> { + unsafe { + #[repr(align(1))] + struct RetArea([::core::mem::MaybeUninit; 2]); + let mut ret_area = RetArea( + [::core::mem::MaybeUninit::uninit(); 2], + ); + let ptr0 = ret_area.0.as_mut_ptr().cast::(); + #[cfg(target_arch = "wasm32")] + #[link(wasm_import_module = "wasi:sockets/tcp@0.2.0")] + unsafe extern "C" { + #[link_name = "[method]tcp-socket.set-keep-alive-enabled"] + fn wit_import1(_: i32, _: i32, _: *mut u8); + } + #[cfg(not(target_arch = "wasm32"))] + unsafe extern "C" fn wit_import1(_: i32, _: i32, _: *mut u8) { + unreachable!() + } + unsafe { + wit_import1( + (self).handle() as i32, + match &value { + true => 1, + false => 0, + }, + ptr0, + ) + }; + let l2 = i32::from(*ptr0.add(0).cast::()); + let result4 = match l2 { + 0 => { + let e = (); + Ok(e) + } + 1 => { + let e = { + let l3 = i32::from(*ptr0.add(1).cast::()); + super::super::super::wasi::sockets::network::ErrorCode::_lift( + l3 as u8, + ) + }; + Err(e) + } + _ => _rt::invalid_enum_discriminant(), + }; + result4 + } + } + } + impl TcpSocket { + #[allow(unused_unsafe, clippy::all)] + pub fn keep_alive_idle_time(&self) -> Result { + unsafe { + #[repr(align(8))] + struct RetArea([::core::mem::MaybeUninit; 16]); + let mut ret_area = RetArea( + [::core::mem::MaybeUninit::uninit(); 16], + ); + let ptr0 = ret_area.0.as_mut_ptr().cast::(); + #[cfg(target_arch = "wasm32")] + #[link(wasm_import_module = "wasi:sockets/tcp@0.2.0")] + unsafe extern "C" { + #[link_name = "[method]tcp-socket.keep-alive-idle-time"] + fn wit_import1(_: i32, _: *mut u8); + } + #[cfg(not(target_arch = "wasm32"))] + unsafe extern "C" fn wit_import1(_: i32, _: *mut u8) { + unreachable!() + } + unsafe { wit_import1((self).handle() as i32, ptr0) }; + let l2 = i32::from(*ptr0.add(0).cast::()); + let result5 = match l2 { + 0 => { + let e = { + let l3 = *ptr0.add(8).cast::(); + l3 as u64 + }; + Ok(e) + } + 1 => { + let e = { + let l4 = i32::from(*ptr0.add(8).cast::()); + super::super::super::wasi::sockets::network::ErrorCode::_lift( + l4 as u8, + ) + }; + Err(e) + } + _ => _rt::invalid_enum_discriminant(), + }; + result5 + } + } + } + impl TcpSocket { + #[allow(unused_unsafe, clippy::all)] + pub fn set_keep_alive_idle_time( + &self, + value: Duration, + ) -> Result<(), ErrorCode> { + unsafe { + #[repr(align(1))] + struct RetArea([::core::mem::MaybeUninit; 2]); + let mut ret_area = RetArea( + [::core::mem::MaybeUninit::uninit(); 2], + ); + let ptr0 = ret_area.0.as_mut_ptr().cast::(); + #[cfg(target_arch = "wasm32")] + #[link(wasm_import_module = "wasi:sockets/tcp@0.2.0")] + unsafe extern "C" { + #[link_name = "[method]tcp-socket.set-keep-alive-idle-time"] + fn wit_import1(_: i32, _: i64, _: *mut u8); + } + #[cfg(not(target_arch = "wasm32"))] + unsafe extern "C" fn wit_import1(_: i32, _: i64, _: *mut u8) { + unreachable!() + } + unsafe { + wit_import1((self).handle() as i32, _rt::as_i64(value), ptr0) + }; + let l2 = i32::from(*ptr0.add(0).cast::()); + let result4 = match l2 { + 0 => { + let e = (); + Ok(e) + } + 1 => { + let e = { + let l3 = i32::from(*ptr0.add(1).cast::()); + super::super::super::wasi::sockets::network::ErrorCode::_lift( + l3 as u8, + ) + }; + Err(e) + } + _ => _rt::invalid_enum_discriminant(), + }; + result4 + } + } + } + impl TcpSocket { + #[allow(unused_unsafe, clippy::all)] + pub fn keep_alive_interval(&self) -> Result { + unsafe { + #[repr(align(8))] + struct RetArea([::core::mem::MaybeUninit; 16]); + let mut ret_area = RetArea( + [::core::mem::MaybeUninit::uninit(); 16], + ); + let ptr0 = ret_area.0.as_mut_ptr().cast::(); + #[cfg(target_arch = "wasm32")] + #[link(wasm_import_module = "wasi:sockets/tcp@0.2.0")] + unsafe extern "C" { + #[link_name = "[method]tcp-socket.keep-alive-interval"] + fn wit_import1(_: i32, _: *mut u8); + } + #[cfg(not(target_arch = "wasm32"))] + unsafe extern "C" fn wit_import1(_: i32, _: *mut u8) { + unreachable!() + } + unsafe { wit_import1((self).handle() as i32, ptr0) }; + let l2 = i32::from(*ptr0.add(0).cast::()); + let result5 = match l2 { + 0 => { + let e = { + let l3 = *ptr0.add(8).cast::(); + l3 as u64 + }; + Ok(e) + } + 1 => { + let e = { + let l4 = i32::from(*ptr0.add(8).cast::()); + super::super::super::wasi::sockets::network::ErrorCode::_lift( + l4 as u8, + ) + }; + Err(e) + } + _ => _rt::invalid_enum_discriminant(), + }; + result5 + } + } + } + impl TcpSocket { + #[allow(unused_unsafe, clippy::all)] + pub fn set_keep_alive_interval( + &self, + value: Duration, + ) -> Result<(), ErrorCode> { + unsafe { + #[repr(align(1))] + struct RetArea([::core::mem::MaybeUninit; 2]); + let mut ret_area = RetArea( + [::core::mem::MaybeUninit::uninit(); 2], + ); + let ptr0 = ret_area.0.as_mut_ptr().cast::(); + #[cfg(target_arch = "wasm32")] + #[link(wasm_import_module = "wasi:sockets/tcp@0.2.0")] + unsafe extern "C" { + #[link_name = "[method]tcp-socket.set-keep-alive-interval"] + fn wit_import1(_: i32, _: i64, _: *mut u8); + } + #[cfg(not(target_arch = "wasm32"))] + unsafe extern "C" fn wit_import1(_: i32, _: i64, _: *mut u8) { + unreachable!() + } + unsafe { + wit_import1((self).handle() as i32, _rt::as_i64(value), ptr0) + }; + let l2 = i32::from(*ptr0.add(0).cast::()); + let result4 = match l2 { + 0 => { + let e = (); + Ok(e) + } + 1 => { + let e = { + let l3 = i32::from(*ptr0.add(1).cast::()); + super::super::super::wasi::sockets::network::ErrorCode::_lift( + l3 as u8, + ) + }; + Err(e) + } + _ => _rt::invalid_enum_discriminant(), + }; + result4 + } + } + } + impl TcpSocket { + #[allow(unused_unsafe, clippy::all)] + pub fn keep_alive_count(&self) -> Result { + unsafe { + #[repr(align(4))] + struct RetArea([::core::mem::MaybeUninit; 8]); + let mut ret_area = RetArea( + [::core::mem::MaybeUninit::uninit(); 8], + ); + let ptr0 = ret_area.0.as_mut_ptr().cast::(); + #[cfg(target_arch = "wasm32")] + #[link(wasm_import_module = "wasi:sockets/tcp@0.2.0")] + unsafe extern "C" { + #[link_name = "[method]tcp-socket.keep-alive-count"] + fn wit_import1(_: i32, _: *mut u8); + } + #[cfg(not(target_arch = "wasm32"))] + unsafe extern "C" fn wit_import1(_: i32, _: *mut u8) { + unreachable!() + } + unsafe { wit_import1((self).handle() as i32, ptr0) }; + let l2 = i32::from(*ptr0.add(0).cast::()); + let result5 = match l2 { + 0 => { + let e = { + let l3 = *ptr0.add(4).cast::(); + l3 as u32 + }; + Ok(e) + } + 1 => { + let e = { + let l4 = i32::from(*ptr0.add(4).cast::()); + super::super::super::wasi::sockets::network::ErrorCode::_lift( + l4 as u8, + ) + }; + Err(e) + } + _ => _rt::invalid_enum_discriminant(), + }; + result5 + } + } + } + impl TcpSocket { + #[allow(unused_unsafe, clippy::all)] + pub fn set_keep_alive_count(&self, value: u32) -> Result<(), ErrorCode> { + unsafe { + #[repr(align(1))] + struct RetArea([::core::mem::MaybeUninit; 2]); + let mut ret_area = RetArea( + [::core::mem::MaybeUninit::uninit(); 2], + ); + let ptr0 = ret_area.0.as_mut_ptr().cast::(); + #[cfg(target_arch = "wasm32")] + #[link(wasm_import_module = "wasi:sockets/tcp@0.2.0")] + unsafe extern "C" { + #[link_name = "[method]tcp-socket.set-keep-alive-count"] + fn wit_import1(_: i32, _: i32, _: *mut u8); + } + #[cfg(not(target_arch = "wasm32"))] + unsafe extern "C" fn wit_import1(_: i32, _: i32, _: *mut u8) { + unreachable!() + } + unsafe { + wit_import1( + (self).handle() as i32, + _rt::as_i32(&value), + ptr0, + ) + }; + let l2 = i32::from(*ptr0.add(0).cast::()); + let result4 = match l2 { + 0 => { + let e = (); + Ok(e) + } + 1 => { + let e = { + let l3 = i32::from(*ptr0.add(1).cast::()); + super::super::super::wasi::sockets::network::ErrorCode::_lift( + l3 as u8, + ) + }; + Err(e) + } + _ => _rt::invalid_enum_discriminant(), + }; + result4 + } + } + } + impl TcpSocket { + #[allow(unused_unsafe, clippy::all)] + pub fn hop_limit(&self) -> Result { + unsafe { + #[repr(align(1))] + struct RetArea([::core::mem::MaybeUninit; 2]); + let mut ret_area = RetArea( + [::core::mem::MaybeUninit::uninit(); 2], + ); + let ptr0 = ret_area.0.as_mut_ptr().cast::(); + #[cfg(target_arch = "wasm32")] + #[link(wasm_import_module = "wasi:sockets/tcp@0.2.0")] + unsafe extern "C" { + #[link_name = "[method]tcp-socket.hop-limit"] + fn wit_import1(_: i32, _: *mut u8); + } + #[cfg(not(target_arch = "wasm32"))] + unsafe extern "C" fn wit_import1(_: i32, _: *mut u8) { + unreachable!() + } + unsafe { wit_import1((self).handle() as i32, ptr0) }; + let l2 = i32::from(*ptr0.add(0).cast::()); + let result5 = match l2 { + 0 => { + let e = { + let l3 = i32::from(*ptr0.add(1).cast::()); + l3 as u8 + }; + Ok(e) + } + 1 => { + let e = { + let l4 = i32::from(*ptr0.add(1).cast::()); + super::super::super::wasi::sockets::network::ErrorCode::_lift( + l4 as u8, + ) + }; + Err(e) + } + _ => _rt::invalid_enum_discriminant(), + }; + result5 + } + } + } + impl TcpSocket { + #[allow(unused_unsafe, clippy::all)] + pub fn set_hop_limit(&self, value: u8) -> Result<(), ErrorCode> { + unsafe { + #[repr(align(1))] + struct RetArea([::core::mem::MaybeUninit; 2]); + let mut ret_area = RetArea( + [::core::mem::MaybeUninit::uninit(); 2], + ); + let ptr0 = ret_area.0.as_mut_ptr().cast::(); + #[cfg(target_arch = "wasm32")] + #[link(wasm_import_module = "wasi:sockets/tcp@0.2.0")] + unsafe extern "C" { + #[link_name = "[method]tcp-socket.set-hop-limit"] + fn wit_import1(_: i32, _: i32, _: *mut u8); + } + #[cfg(not(target_arch = "wasm32"))] + unsafe extern "C" fn wit_import1(_: i32, _: i32, _: *mut u8) { + unreachable!() + } + unsafe { + wit_import1( + (self).handle() as i32, + _rt::as_i32(&value), + ptr0, + ) + }; + let l2 = i32::from(*ptr0.add(0).cast::()); + let result4 = match l2 { + 0 => { + let e = (); + Ok(e) + } + 1 => { + let e = { + let l3 = i32::from(*ptr0.add(1).cast::()); + super::super::super::wasi::sockets::network::ErrorCode::_lift( + l3 as u8, + ) + }; + Err(e) + } + _ => _rt::invalid_enum_discriminant(), + }; + result4 + } + } + } + impl TcpSocket { + #[allow(unused_unsafe, clippy::all)] + pub fn receive_buffer_size(&self) -> Result { + unsafe { + #[repr(align(8))] + struct RetArea([::core::mem::MaybeUninit; 16]); + let mut ret_area = RetArea( + [::core::mem::MaybeUninit::uninit(); 16], + ); + let ptr0 = ret_area.0.as_mut_ptr().cast::(); + #[cfg(target_arch = "wasm32")] + #[link(wasm_import_module = "wasi:sockets/tcp@0.2.0")] + unsafe extern "C" { + #[link_name = "[method]tcp-socket.receive-buffer-size"] + fn wit_import1(_: i32, _: *mut u8); + } + #[cfg(not(target_arch = "wasm32"))] + unsafe extern "C" fn wit_import1(_: i32, _: *mut u8) { + unreachable!() + } + unsafe { wit_import1((self).handle() as i32, ptr0) }; + let l2 = i32::from(*ptr0.add(0).cast::()); + let result5 = match l2 { + 0 => { + let e = { + let l3 = *ptr0.add(8).cast::(); + l3 as u64 + }; + Ok(e) + } + 1 => { + let e = { + let l4 = i32::from(*ptr0.add(8).cast::()); + super::super::super::wasi::sockets::network::ErrorCode::_lift( + l4 as u8, + ) + }; + Err(e) + } + _ => _rt::invalid_enum_discriminant(), + }; + result5 + } + } + } + impl TcpSocket { + #[allow(unused_unsafe, clippy::all)] + pub fn set_receive_buffer_size( + &self, + value: u64, + ) -> Result<(), ErrorCode> { + unsafe { + #[repr(align(1))] + struct RetArea([::core::mem::MaybeUninit; 2]); + let mut ret_area = RetArea( + [::core::mem::MaybeUninit::uninit(); 2], + ); + let ptr0 = ret_area.0.as_mut_ptr().cast::(); + #[cfg(target_arch = "wasm32")] + #[link(wasm_import_module = "wasi:sockets/tcp@0.2.0")] + unsafe extern "C" { + #[link_name = "[method]tcp-socket.set-receive-buffer-size"] + fn wit_import1(_: i32, _: i64, _: *mut u8); + } + #[cfg(not(target_arch = "wasm32"))] + unsafe extern "C" fn wit_import1(_: i32, _: i64, _: *mut u8) { + unreachable!() + } + unsafe { + wit_import1( + (self).handle() as i32, + _rt::as_i64(&value), + ptr0, + ) + }; + let l2 = i32::from(*ptr0.add(0).cast::()); + let result4 = match l2 { + 0 => { + let e = (); + Ok(e) + } + 1 => { + let e = { + let l3 = i32::from(*ptr0.add(1).cast::()); + super::super::super::wasi::sockets::network::ErrorCode::_lift( + l3 as u8, + ) + }; + Err(e) + } + _ => _rt::invalid_enum_discriminant(), + }; + result4 + } + } + } + impl TcpSocket { + #[allow(unused_unsafe, clippy::all)] + pub fn send_buffer_size(&self) -> Result { + unsafe { + #[repr(align(8))] + struct RetArea([::core::mem::MaybeUninit; 16]); + let mut ret_area = RetArea( + [::core::mem::MaybeUninit::uninit(); 16], + ); + let ptr0 = ret_area.0.as_mut_ptr().cast::(); + #[cfg(target_arch = "wasm32")] + #[link(wasm_import_module = "wasi:sockets/tcp@0.2.0")] + unsafe extern "C" { + #[link_name = "[method]tcp-socket.send-buffer-size"] + fn wit_import1(_: i32, _: *mut u8); + } + #[cfg(not(target_arch = "wasm32"))] + unsafe extern "C" fn wit_import1(_: i32, _: *mut u8) { + unreachable!() + } + unsafe { wit_import1((self).handle() as i32, ptr0) }; + let l2 = i32::from(*ptr0.add(0).cast::()); + let result5 = match l2 { + 0 => { + let e = { + let l3 = *ptr0.add(8).cast::(); + l3 as u64 + }; + Ok(e) + } + 1 => { + let e = { + let l4 = i32::from(*ptr0.add(8).cast::()); + super::super::super::wasi::sockets::network::ErrorCode::_lift( + l4 as u8, + ) + }; + Err(e) + } + _ => _rt::invalid_enum_discriminant(), + }; + result5 + } + } + } + impl TcpSocket { + #[allow(unused_unsafe, clippy::all)] + pub fn set_send_buffer_size(&self, value: u64) -> Result<(), ErrorCode> { + unsafe { + #[repr(align(1))] + struct RetArea([::core::mem::MaybeUninit; 2]); + let mut ret_area = RetArea( + [::core::mem::MaybeUninit::uninit(); 2], + ); + let ptr0 = ret_area.0.as_mut_ptr().cast::(); + #[cfg(target_arch = "wasm32")] + #[link(wasm_import_module = "wasi:sockets/tcp@0.2.0")] + unsafe extern "C" { + #[link_name = "[method]tcp-socket.set-send-buffer-size"] + fn wit_import1(_: i32, _: i64, _: *mut u8); + } + #[cfg(not(target_arch = "wasm32"))] + unsafe extern "C" fn wit_import1(_: i32, _: i64, _: *mut u8) { + unreachable!() + } + unsafe { + wit_import1( + (self).handle() as i32, + _rt::as_i64(&value), + ptr0, + ) + }; + let l2 = i32::from(*ptr0.add(0).cast::()); + let result4 = match l2 { + 0 => { + let e = (); + Ok(e) + } + 1 => { + let e = { + let l3 = i32::from(*ptr0.add(1).cast::()); + super::super::super::wasi::sockets::network::ErrorCode::_lift( + l3 as u8, + ) + }; + Err(e) + } + _ => _rt::invalid_enum_discriminant(), + }; + result4 + } + } + } + impl TcpSocket { + #[allow(unused_unsafe, clippy::all)] + pub fn subscribe(&self) -> Pollable { + unsafe { + #[cfg(target_arch = "wasm32")] + #[link(wasm_import_module = "wasi:sockets/tcp@0.2.0")] + unsafe extern "C" { + #[link_name = "[method]tcp-socket.subscribe"] + fn wit_import0(_: i32) -> i32; + } + #[cfg(not(target_arch = "wasm32"))] + unsafe extern "C" fn wit_import0(_: i32) -> i32 { + unreachable!() + } + let ret = unsafe { wit_import0((self).handle() as i32) }; + unsafe { + super::super::super::wasi::io::poll::Pollable::from_handle( + ret as u32, + ) + } + } + } + } + impl TcpSocket { + #[allow(unused_unsafe, clippy::all)] + pub fn shutdown( + &self, + shutdown_type: ShutdownType, + ) -> Result<(), ErrorCode> { + unsafe { + #[repr(align(1))] + struct RetArea([::core::mem::MaybeUninit; 2]); + let mut ret_area = RetArea( + [::core::mem::MaybeUninit::uninit(); 2], + ); + let ptr0 = ret_area.0.as_mut_ptr().cast::(); + #[cfg(target_arch = "wasm32")] + #[link(wasm_import_module = "wasi:sockets/tcp@0.2.0")] + unsafe extern "C" { + #[link_name = "[method]tcp-socket.shutdown"] + fn wit_import1(_: i32, _: i32, _: *mut u8); + } + #[cfg(not(target_arch = "wasm32"))] + unsafe extern "C" fn wit_import1(_: i32, _: i32, _: *mut u8) { + unreachable!() + } + unsafe { + wit_import1( + (self).handle() as i32, + shutdown_type.clone() as i32, + ptr0, + ) + }; + let l2 = i32::from(*ptr0.add(0).cast::()); + let result4 = match l2 { + 0 => { + let e = (); + Ok(e) + } + 1 => { + let e = { + let l3 = i32::from(*ptr0.add(1).cast::()); + super::super::super::wasi::sockets::network::ErrorCode::_lift( + l3 as u8, + ) + }; + Err(e) + } + _ => _rt::invalid_enum_discriminant(), + }; + result4 + } + } + } + } + #[allow(dead_code, async_fn_in_trait, unused_imports, clippy::all)] + pub mod tcp_create_socket { + #[used] + #[doc(hidden)] + static __FORCE_SECTION_REF: fn() = super::super::super::__link_custom_section_describing_imports; + use super::super::super::_rt; + pub type ErrorCode = super::super::super::wasi::sockets::network::ErrorCode; + pub type IpAddressFamily = super::super::super::wasi::sockets::network::IpAddressFamily; + pub type TcpSocket = super::super::super::wasi::sockets::tcp::TcpSocket; + #[allow(unused_unsafe, clippy::all)] + pub fn create_tcp_socket( + address_family: IpAddressFamily, + ) -> Result { + unsafe { + #[repr(align(4))] + struct RetArea([::core::mem::MaybeUninit; 8]); + let mut ret_area = RetArea([::core::mem::MaybeUninit::uninit(); 8]); + let ptr0 = ret_area.0.as_mut_ptr().cast::(); + #[cfg(target_arch = "wasm32")] + #[link(wasm_import_module = "wasi:sockets/tcp-create-socket@0.2.0")] + unsafe extern "C" { + #[link_name = "create-tcp-socket"] + fn wit_import1(_: i32, _: *mut u8); + } + #[cfg(not(target_arch = "wasm32"))] + unsafe extern "C" fn wit_import1(_: i32, _: *mut u8) { + unreachable!() + } + unsafe { wit_import1(address_family.clone() as i32, ptr0) }; + let l2 = i32::from(*ptr0.add(0).cast::()); + let result5 = match l2 { + 0 => { + let e = { + let l3 = *ptr0.add(4).cast::(); + unsafe { + super::super::super::wasi::sockets::tcp::TcpSocket::from_handle( + l3 as u32, + ) + } + }; + Ok(e) + } + 1 => { + let e = { + let l4 = i32::from(*ptr0.add(4).cast::()); + super::super::super::wasi::sockets::network::ErrorCode::_lift( + l4 as u8, + ) + }; + Err(e) + } + _ => _rt::invalid_enum_discriminant(), + }; + result5 + } + } + } + #[allow(dead_code, async_fn_in_trait, unused_imports, clippy::all)] + pub mod ip_name_lookup { + #[used] + #[doc(hidden)] + static __FORCE_SECTION_REF: fn() = super::super::super::__link_custom_section_describing_imports; + use super::super::super::_rt; + pub type Pollable = super::super::super::wasi::io::poll::Pollable; + pub type Network = super::super::super::wasi::sockets::network::Network; + pub type ErrorCode = super::super::super::wasi::sockets::network::ErrorCode; + pub type IpAddress = super::super::super::wasi::sockets::network::IpAddress; + #[derive(Debug)] + #[repr(transparent)] + pub struct ResolveAddressStream { + handle: _rt::Resource, + } + impl ResolveAddressStream { + #[doc(hidden)] + pub unsafe fn from_handle(handle: u32) -> Self { + Self { + handle: unsafe { _rt::Resource::from_handle(handle) }, + } + } + #[doc(hidden)] + pub fn take_handle(&self) -> u32 { + _rt::Resource::take_handle(&self.handle) + } + #[doc(hidden)] + pub fn handle(&self) -> u32 { + _rt::Resource::handle(&self.handle) + } + } + unsafe impl _rt::WasmResource for ResolveAddressStream { + #[inline] + unsafe fn drop(_handle: u32) { + #[cfg(not(target_arch = "wasm32"))] + unreachable!(); + #[cfg(target_arch = "wasm32")] + { + #[link(wasm_import_module = "wasi:sockets/ip-name-lookup@0.2.0")] + unsafe extern "C" { + #[link_name = "[resource-drop]resolve-address-stream"] + fn drop(_: u32); + } + unsafe { drop(_handle) }; + } + } + } + impl ResolveAddressStream { + #[allow(unused_unsafe, clippy::all)] + pub fn resolve_next_address( + &self, + ) -> Result, ErrorCode> { + unsafe { + #[repr(align(2))] + struct RetArea([::core::mem::MaybeUninit; 22]); + let mut ret_area = RetArea( + [::core::mem::MaybeUninit::uninit(); 22], + ); + let ptr0 = ret_area.0.as_mut_ptr().cast::(); + #[cfg(target_arch = "wasm32")] + #[link(wasm_import_module = "wasi:sockets/ip-name-lookup@0.2.0")] + unsafe extern "C" { + #[link_name = "[method]resolve-address-stream.resolve-next-address"] + fn wit_import1(_: i32, _: *mut u8); + } + #[cfg(not(target_arch = "wasm32"))] + unsafe extern "C" fn wit_import1(_: i32, _: *mut u8) { + unreachable!() + } + unsafe { wit_import1((self).handle() as i32, ptr0) }; + let l2 = i32::from(*ptr0.add(0).cast::()); + let result19 = match l2 { + 0 => { + let e = { + let l3 = i32::from(*ptr0.add(2).cast::()); + match l3 { + 0 => None, + 1 => { + let e = { + let l4 = i32::from(*ptr0.add(4).cast::()); + use super::super::super::wasi::sockets::network::IpAddress as V17; + let v17 = match l4 { + 0 => { + let e17 = { + let l5 = i32::from(*ptr0.add(6).cast::()); + let l6 = i32::from(*ptr0.add(7).cast::()); + let l7 = i32::from(*ptr0.add(8).cast::()); + let l8 = i32::from(*ptr0.add(9).cast::()); + (l5 as u8, l6 as u8, l7 as u8, l8 as u8) + }; + V17::Ipv4(e17) + } + n => { + debug_assert_eq!(n, 1, "invalid enum discriminant"); + let e17 = { + let l9 = i32::from(*ptr0.add(6).cast::()); + let l10 = i32::from(*ptr0.add(8).cast::()); + let l11 = i32::from(*ptr0.add(10).cast::()); + let l12 = i32::from(*ptr0.add(12).cast::()); + let l13 = i32::from(*ptr0.add(14).cast::()); + let l14 = i32::from(*ptr0.add(16).cast::()); + let l15 = i32::from(*ptr0.add(18).cast::()); + let l16 = i32::from(*ptr0.add(20).cast::()); + ( + l9 as u16, + l10 as u16, + l11 as u16, + l12 as u16, + l13 as u16, + l14 as u16, + l15 as u16, + l16 as u16, + ) + }; + V17::Ipv6(e17) + } + }; + v17 + }; + Some(e) + } + _ => _rt::invalid_enum_discriminant(), + } + }; + Ok(e) + } + 1 => { + let e = { + let l18 = i32::from(*ptr0.add(2).cast::()); + super::super::super::wasi::sockets::network::ErrorCode::_lift( + l18 as u8, + ) + }; + Err(e) + } + _ => _rt::invalid_enum_discriminant(), + }; + result19 + } + } + } + impl ResolveAddressStream { + #[allow(unused_unsafe, clippy::all)] + pub fn subscribe(&self) -> Pollable { + unsafe { + #[cfg(target_arch = "wasm32")] + #[link(wasm_import_module = "wasi:sockets/ip-name-lookup@0.2.0")] + unsafe extern "C" { + #[link_name = "[method]resolve-address-stream.subscribe"] + fn wit_import0(_: i32) -> i32; + } + #[cfg(not(target_arch = "wasm32"))] + unsafe extern "C" fn wit_import0(_: i32) -> i32 { + unreachable!() + } + let ret = unsafe { wit_import0((self).handle() as i32) }; + unsafe { + super::super::super::wasi::io::poll::Pollable::from_handle( + ret as u32, + ) + } + } + } + } + #[allow(unused_unsafe, clippy::all)] + pub fn resolve_addresses( + network: &Network, + name: &str, + ) -> Result { + unsafe { + #[repr(align(4))] + struct RetArea([::core::mem::MaybeUninit; 8]); + let mut ret_area = RetArea([::core::mem::MaybeUninit::uninit(); 8]); + let vec0 = name; + let ptr0 = vec0.as_ptr().cast::(); + let len0 = vec0.len(); + let ptr1 = ret_area.0.as_mut_ptr().cast::(); + #[cfg(target_arch = "wasm32")] + #[link(wasm_import_module = "wasi:sockets/ip-name-lookup@0.2.0")] + unsafe extern "C" { + #[link_name = "resolve-addresses"] + fn wit_import2(_: i32, _: *mut u8, _: usize, _: *mut u8); + } + #[cfg(not(target_arch = "wasm32"))] + unsafe extern "C" fn wit_import2( + _: i32, + _: *mut u8, + _: usize, + _: *mut u8, + ) { + unreachable!() + } + unsafe { + wit_import2( + (network).handle() as i32, + ptr0.cast_mut(), + len0, + ptr1, + ) + }; + let l3 = i32::from(*ptr1.add(0).cast::()); + let result6 = match l3 { + 0 => { + let e = { + let l4 = *ptr1.add(4).cast::(); + unsafe { ResolveAddressStream::from_handle(l4 as u32) } + }; + Ok(e) + } + 1 => { + let e = { + let l5 = i32::from(*ptr1.add(4).cast::()); + super::super::super::wasi::sockets::network::ErrorCode::_lift( + l5 as u8, + ) + }; + Err(e) + } + _ => _rt::invalid_enum_discriminant(), + }; + result6 + } + } + } + } +} +#[rustfmt::skip] +#[allow(dead_code, clippy::all)] +pub mod wavs { + pub mod aggregator { + #[allow(dead_code, async_fn_in_trait, unused_imports, clippy::all)] + pub mod aggregator { + #[used] + #[doc(hidden)] + static __FORCE_SECTION_REF: fn() = super::super::super::__link_custom_section_describing_imports; + use super::super::super::_rt; + pub type Duration = super::super::super::wavs::types::core::Duration; + pub type U128 = super::super::super::wavs::types::core::U128; + pub type Service = super::super::super::wavs::types::service::Service; + pub type WorkflowId = super::super::super::wavs::types::service::WorkflowId; + pub type SignatureKind = super::super::super::wavs::types::service::SignatureKind; + pub type ChainKey = super::super::super::wavs::types::chain::ChainKey; + pub type EvmAddress = super::super::super::wavs::types::chain::EvmAddress; + pub type TriggerData = super::super::super::wavs::types::events::TriggerData; + pub type EventId = super::super::super::wavs::types::events::EventId; + #[derive(Clone)] + pub struct Envelope { + pub event_id: EventId, + pub ordering: _rt::Vec, + pub payload: _rt::Vec, + } + impl ::core::fmt::Debug for Envelope { + fn fmt( + &self, + f: &mut ::core::fmt::Formatter<'_>, + ) -> ::core::fmt::Result { + f.debug_struct("Envelope") + .field("event-id", &self.event_id) + .field("ordering", &self.ordering) + .field("payload", &self.payload) + .finish() + } + } + #[derive(Clone)] + pub struct EnvelopeSignature { + pub data: _rt::Vec, + pub kind: SignatureKind, + } + impl ::core::fmt::Debug for EnvelopeSignature { + fn fmt( + &self, + f: &mut ::core::fmt::Formatter<'_>, + ) -> ::core::fmt::Result { + f.debug_struct("EnvelopeSignature") + .field("data", &self.data) + .field("kind", &self.kind) + .finish() + } + } + #[derive(Clone)] + pub struct Packet { + pub service: Service, + pub workflow_id: WorkflowId, + pub envelope: Envelope, + pub signature: EnvelopeSignature, + pub trigger_data: TriggerData, + } + impl ::core::fmt::Debug for Packet { + fn fmt( + &self, + f: &mut ::core::fmt::Formatter<'_>, + ) -> ::core::fmt::Result { + f.debug_struct("Packet") + .field("service", &self.service) + .field("workflow-id", &self.workflow_id) + .field("envelope", &self.envelope) + .field("signature", &self.signature) + .field("trigger-data", &self.trigger_data) + .finish() + } + } + #[repr(C)] + #[derive(Clone, Copy)] + pub struct TimerAction { + pub delay: Duration, + } + impl ::core::fmt::Debug for TimerAction { + fn fmt( + &self, + f: &mut ::core::fmt::Formatter<'_>, + ) -> ::core::fmt::Result { + f.debug_struct("TimerAction").field("delay", &self.delay).finish() + } + } + #[derive(Clone)] + pub struct SubmitAction { + pub chain: ChainKey, + pub contract_address: EvmAddress, + pub gas_price: Option, + } + impl ::core::fmt::Debug for SubmitAction { + fn fmt( + &self, + f: &mut ::core::fmt::Formatter<'_>, + ) -> ::core::fmt::Result { + f.debug_struct("SubmitAction") + .field("chain", &self.chain) + .field("contract-address", &self.contract_address) + .field("gas-price", &self.gas_price) + .finish() + } + } + #[derive(Clone)] + pub enum AggregatorAction { + Timer(TimerAction), + Submit(SubmitAction), + } + impl ::core::fmt::Debug for AggregatorAction { + fn fmt( + &self, + f: &mut ::core::fmt::Formatter<'_>, + ) -> ::core::fmt::Result { + match self { + AggregatorAction::Timer(e) => { + f.debug_tuple("AggregatorAction::Timer").field(e).finish() + } + AggregatorAction::Submit(e) => { + f.debug_tuple("AggregatorAction::Submit").field(e).finish() + } + } + } + } + } + } + pub mod types { + #[allow(dead_code, async_fn_in_trait, unused_imports, clippy::all)] + pub mod core { + #[used] + #[doc(hidden)] + static __FORCE_SECTION_REF: fn() = super::super::super::__link_custom_section_describing_imports; + use super::super::super::_rt; + pub type Digest = _rt::String; + #[repr(C)] + #[derive(Clone, Copy)] + pub struct Timestamp { + pub nanos: u64, + } + impl ::core::fmt::Debug for Timestamp { + fn fmt( + &self, + f: &mut ::core::fmt::Formatter<'_>, + ) -> ::core::fmt::Result { + f.debug_struct("Timestamp").field("nanos", &self.nanos).finish() + } + } + #[repr(C)] + #[derive(Clone, Copy)] + pub struct Duration { + pub secs: u64, + } + impl ::core::fmt::Debug for Duration { + fn fmt( + &self, + f: &mut ::core::fmt::Formatter<'_>, + ) -> ::core::fmt::Result { + f.debug_struct("Duration").field("secs", &self.secs).finish() + } + } + #[repr(C)] + #[derive(Clone, Copy)] + pub struct U128 { + pub value: (u64, u64), + } + impl ::core::fmt::Debug for U128 { + fn fmt( + &self, + f: &mut ::core::fmt::Formatter<'_>, + ) -> ::core::fmt::Result { + f.debug_struct("U128").field("value", &self.value).finish() + } + } + #[derive(Clone, Copy)] + pub enum LogLevel { + Error, + Warn, + Info, + Debug, + Trace, + } + impl ::core::fmt::Debug for LogLevel { + fn fmt( + &self, + f: &mut ::core::fmt::Formatter<'_>, + ) -> ::core::fmt::Result { + match self { + LogLevel::Error => f.debug_tuple("LogLevel::Error").finish(), + LogLevel::Warn => f.debug_tuple("LogLevel::Warn").finish(), + LogLevel::Info => f.debug_tuple("LogLevel::Info").finish(), + LogLevel::Debug => f.debug_tuple("LogLevel::Debug").finish(), + LogLevel::Trace => f.debug_tuple("LogLevel::Trace").finish(), + } + } + } + } + #[allow(dead_code, async_fn_in_trait, unused_imports, clippy::all)] + pub mod chain { + #[used] + #[doc(hidden)] + static __FORCE_SECTION_REF: fn() = super::super::super::__link_custom_section_describing_imports; + use super::super::super::_rt; + pub type ChainKey = _rt::String; + pub type EvmTxHash = _rt::Vec; + pub type CosmosTxHash = _rt::String; + #[derive(Clone)] + pub enum AnyTxHash { + Evm(EvmTxHash), + Cosmos(CosmosTxHash), + } + impl ::core::fmt::Debug for AnyTxHash { + fn fmt( + &self, + f: &mut ::core::fmt::Formatter<'_>, + ) -> ::core::fmt::Result { + match self { + AnyTxHash::Evm(e) => { + f.debug_tuple("AnyTxHash::Evm").field(e).finish() + } + AnyTxHash::Cosmos(e) => { + f.debug_tuple("AnyTxHash::Cosmos").field(e).finish() + } + } + } + } + #[derive(Clone)] + pub struct CosmosAddress { + pub bech32_addr: _rt::String, + pub prefix_len: u32, + } + impl ::core::fmt::Debug for CosmosAddress { + fn fmt( + &self, + f: &mut ::core::fmt::Formatter<'_>, + ) -> ::core::fmt::Result { + f.debug_struct("CosmosAddress") + .field("bech32-addr", &self.bech32_addr) + .field("prefix-len", &self.prefix_len) + .finish() + } + } + #[derive(Clone)] + pub struct CosmosEvent { + pub ty: _rt::String, + pub attributes: _rt::Vec<(_rt::String, _rt::String)>, + } + impl ::core::fmt::Debug for CosmosEvent { + fn fmt( + &self, + f: &mut ::core::fmt::Formatter<'_>, + ) -> ::core::fmt::Result { + f.debug_struct("CosmosEvent") + .field("ty", &self.ty) + .field("attributes", &self.attributes) + .finish() + } + } + #[derive(Clone)] + pub struct CosmosChainConfig { + pub chain_id: _rt::String, + pub rpc_endpoint: Option<_rt::String>, + pub grpc_endpoint: Option<_rt::String>, + pub grpc_web_endpoint: Option<_rt::String>, + pub gas_price: f32, + pub gas_denom: _rt::String, + pub bech32_prefix: _rt::String, + } + impl ::core::fmt::Debug for CosmosChainConfig { + fn fmt( + &self, + f: &mut ::core::fmt::Formatter<'_>, + ) -> ::core::fmt::Result { + f.debug_struct("CosmosChainConfig") + .field("chain-id", &self.chain_id) + .field("rpc-endpoint", &self.rpc_endpoint) + .field("grpc-endpoint", &self.grpc_endpoint) + .field("grpc-web-endpoint", &self.grpc_web_endpoint) + .field("gas-price", &self.gas_price) + .field("gas-denom", &self.gas_denom) + .field("bech32-prefix", &self.bech32_prefix) + .finish() + } + } + #[derive(Clone)] + pub struct EvmAddress { + pub raw_bytes: _rt::Vec, + } + impl ::core::fmt::Debug for EvmAddress { + fn fmt( + &self, + f: &mut ::core::fmt::Formatter<'_>, + ) -> ::core::fmt::Result { + f.debug_struct("EvmAddress") + .field("raw-bytes", &self.raw_bytes) + .finish() + } + } + #[derive(Clone)] + pub struct EvmEventLogData { + pub topics: _rt::Vec<_rt::Vec>, + pub data: _rt::Vec, + } + impl ::core::fmt::Debug for EvmEventLogData { + fn fmt( + &self, + f: &mut ::core::fmt::Formatter<'_>, + ) -> ::core::fmt::Result { + f.debug_struct("EvmEventLogData") + .field("topics", &self.topics) + .field("data", &self.data) + .finish() + } + } + #[derive(Clone)] + pub struct EvmEventLog { + pub address: EvmAddress, + pub data: EvmEventLogData, + pub tx_hash: EvmTxHash, + pub block_number: u64, + pub log_index: u64, + pub block_hash: _rt::Vec, + pub block_timestamp: Option, + pub tx_index: u64, + } + impl ::core::fmt::Debug for EvmEventLog { + fn fmt( + &self, + f: &mut ::core::fmt::Formatter<'_>, + ) -> ::core::fmt::Result { + f.debug_struct("EvmEventLog") + .field("address", &self.address) + .field("data", &self.data) + .field("tx-hash", &self.tx_hash) + .field("block-number", &self.block_number) + .field("log-index", &self.log_index) + .field("block-hash", &self.block_hash) + .field("block-timestamp", &self.block_timestamp) + .field("tx-index", &self.tx_index) + .finish() + } + } + #[derive(Clone)] + pub struct EvmChainConfig { + pub chain_id: _rt::String, + pub ws_endpoints: _rt::Vec<_rt::String>, + pub http_endpoint: Option<_rt::String>, + } + impl ::core::fmt::Debug for EvmChainConfig { + fn fmt( + &self, + f: &mut ::core::fmt::Formatter<'_>, + ) -> ::core::fmt::Result { + f.debug_struct("EvmChainConfig") + .field("chain-id", &self.chain_id) + .field("ws-endpoints", &self.ws_endpoints) + .field("http-endpoint", &self.http_endpoint) + .finish() + } + } + } + #[allow(dead_code, async_fn_in_trait, unused_imports, clippy::all)] + pub mod service { + #[used] + #[doc(hidden)] + static __FORCE_SECTION_REF: fn() = super::super::super::__link_custom_section_describing_imports; + use super::super::super::_rt; + pub type Digest = super::super::super::wavs::types::core::Digest; + pub type Timestamp = super::super::super::wavs::types::core::Timestamp; + pub type ChainKey = super::super::super::wavs::types::chain::ChainKey; + pub type EvmAddress = super::super::super::wavs::types::chain::EvmAddress; + pub type CosmosAddress = super::super::super::wavs::types::chain::CosmosAddress; + pub type WorkflowId = _rt::String; + pub type PackageRef = _rt::String; + pub type SemverVersion = _rt::String; + #[derive(Clone, Copy)] + pub enum ServiceStatus { + Active, + Paused, + } + impl ::core::fmt::Debug for ServiceStatus { + fn fmt( + &self, + f: &mut ::core::fmt::Formatter<'_>, + ) -> ::core::fmt::Result { + match self { + ServiceStatus::Active => { + f.debug_tuple("ServiceStatus::Active").finish() + } + ServiceStatus::Paused => { + f.debug_tuple("ServiceStatus::Paused").finish() + } + } + } + } + #[derive(Clone)] + pub struct EvmManager { + pub chain: ChainKey, + pub address: EvmAddress, + } + impl ::core::fmt::Debug for EvmManager { + fn fmt( + &self, + f: &mut ::core::fmt::Formatter<'_>, + ) -> ::core::fmt::Result { + f.debug_struct("EvmManager") + .field("chain", &self.chain) + .field("address", &self.address) + .finish() + } + } + #[derive(Clone)] + pub enum ServiceManager { + Evm(EvmManager), + } + impl ::core::fmt::Debug for ServiceManager { + fn fmt( + &self, + f: &mut ::core::fmt::Formatter<'_>, + ) -> ::core::fmt::Result { + match self { + ServiceManager::Evm(e) => { + f.debug_tuple("ServiceManager::Evm").field(e).finish() + } + } + } + } + #[derive(Clone)] + pub struct ComponentSourceDownload { + pub uri: _rt::String, + pub digest: Digest, + } + impl ::core::fmt::Debug for ComponentSourceDownload { + fn fmt( + &self, + f: &mut ::core::fmt::Formatter<'_>, + ) -> ::core::fmt::Result { + f.debug_struct("ComponentSourceDownload") + .field("uri", &self.uri) + .field("digest", &self.digest) + .finish() + } + } + #[derive(Clone)] + pub struct Registry { + pub digest: Digest, + pub domain: Option<_rt::String>, + pub version: Option, + pub pkg: PackageRef, + } + impl ::core::fmt::Debug for Registry { + fn fmt( + &self, + f: &mut ::core::fmt::Formatter<'_>, + ) -> ::core::fmt::Result { + f.debug_struct("Registry") + .field("digest", &self.digest) + .field("domain", &self.domain) + .field("version", &self.version) + .field("pkg", &self.pkg) + .finish() + } + } + #[derive(Clone)] + pub enum ComponentSource { + Download(ComponentSourceDownload), + Registry(Registry), + Digest(Digest), + } + impl ::core::fmt::Debug for ComponentSource { + fn fmt( + &self, + f: &mut ::core::fmt::Formatter<'_>, + ) -> ::core::fmt::Result { + match self { + ComponentSource::Download(e) => { + f.debug_tuple("ComponentSource::Download").field(e).finish() + } + ComponentSource::Registry(e) => { + f.debug_tuple("ComponentSource::Registry").field(e).finish() + } + ComponentSource::Digest(e) => { + f.debug_tuple("ComponentSource::Digest").field(e).finish() + } + } + } + } + #[derive(Clone)] + pub enum AllowedHostPermission { + All, + Only(_rt::Vec<_rt::String>), + None, + } + impl ::core::fmt::Debug for AllowedHostPermission { + fn fmt( + &self, + f: &mut ::core::fmt::Formatter<'_>, + ) -> ::core::fmt::Result { + match self { + AllowedHostPermission::All => { + f.debug_tuple("AllowedHostPermission::All").finish() + } + AllowedHostPermission::Only(e) => { + f.debug_tuple("AllowedHostPermission::Only") + .field(e) + .finish() + } + AllowedHostPermission::None => { + f.debug_tuple("AllowedHostPermission::None").finish() + } + } + } + } + #[derive(Clone)] + pub struct Permissions { + pub allowed_http_hosts: AllowedHostPermission, + pub file_system: bool, + } + impl ::core::fmt::Debug for Permissions { + fn fmt( + &self, + f: &mut ::core::fmt::Formatter<'_>, + ) -> ::core::fmt::Result { + f.debug_struct("Permissions") + .field("allowed-http-hosts", &self.allowed_http_hosts) + .field("file-system", &self.file_system) + .finish() + } + } + #[derive(Clone)] + pub struct Component { + pub source: ComponentSource, + pub permissions: Permissions, + pub fuel_limit: Option, + pub time_limit_seconds: Option, + pub config: _rt::Vec<(_rt::String, _rt::String)>, + pub env_keys: _rt::Vec<_rt::String>, + } + impl ::core::fmt::Debug for Component { + fn fmt( + &self, + f: &mut ::core::fmt::Formatter<'_>, + ) -> ::core::fmt::Result { + f.debug_struct("Component") + .field("source", &self.source) + .field("permissions", &self.permissions) + .field("fuel-limit", &self.fuel_limit) + .field("time-limit-seconds", &self.time_limit_seconds) + .field("config", &self.config) + .field("env-keys", &self.env_keys) + .finish() + } + } + #[derive(Clone)] + pub struct TriggerEvmContractEvent { + pub address: EvmAddress, + pub chain: ChainKey, + pub event_hash: _rt::Vec, + } + impl ::core::fmt::Debug for TriggerEvmContractEvent { + fn fmt( + &self, + f: &mut ::core::fmt::Formatter<'_>, + ) -> ::core::fmt::Result { + f.debug_struct("TriggerEvmContractEvent") + .field("address", &self.address) + .field("chain", &self.chain) + .field("event-hash", &self.event_hash) + .finish() + } + } + #[derive(Clone)] + pub struct TriggerCosmosContractEvent { + pub address: CosmosAddress, + pub chain: ChainKey, + pub event_type: _rt::String, + } + impl ::core::fmt::Debug for TriggerCosmosContractEvent { + fn fmt( + &self, + f: &mut ::core::fmt::Formatter<'_>, + ) -> ::core::fmt::Result { + f.debug_struct("TriggerCosmosContractEvent") + .field("address", &self.address) + .field("chain", &self.chain) + .field("event-type", &self.event_type) + .finish() + } + } + #[derive(Clone)] + pub struct TriggerBlockInterval { + pub chain: ChainKey, + pub n_blocks: u32, + pub start_block: Option, + pub end_block: Option, + } + impl ::core::fmt::Debug for TriggerBlockInterval { + fn fmt( + &self, + f: &mut ::core::fmt::Formatter<'_>, + ) -> ::core::fmt::Result { + f.debug_struct("TriggerBlockInterval") + .field("chain", &self.chain) + .field("n-blocks", &self.n_blocks) + .field("start-block", &self.start_block) + .field("end-block", &self.end_block) + .finish() + } + } + #[derive(Clone)] + pub struct TriggerCron { + pub schedule: _rt::String, + pub start_time: Option, + pub end_time: Option, + } + impl ::core::fmt::Debug for TriggerCron { + fn fmt( + &self, + f: &mut ::core::fmt::Formatter<'_>, + ) -> ::core::fmt::Result { + f.debug_struct("TriggerCron") + .field("schedule", &self.schedule) + .field("start-time", &self.start_time) + .field("end-time", &self.end_time) + .finish() + } + } + #[derive(Clone)] + pub enum Trigger { + EvmContractEvent(TriggerEvmContractEvent), + CosmosContractEvent(TriggerCosmosContractEvent), + BlockInterval(TriggerBlockInterval), + Cron(TriggerCron), + Manual, + } + impl ::core::fmt::Debug for Trigger { + fn fmt( + &self, + f: &mut ::core::fmt::Formatter<'_>, + ) -> ::core::fmt::Result { + match self { + Trigger::EvmContractEvent(e) => { + f.debug_tuple("Trigger::EvmContractEvent").field(e).finish() + } + Trigger::CosmosContractEvent(e) => { + f.debug_tuple("Trigger::CosmosContractEvent") + .field(e) + .finish() + } + Trigger::BlockInterval(e) => { + f.debug_tuple("Trigger::BlockInterval").field(e).finish() + } + Trigger::Cron(e) => { + f.debug_tuple("Trigger::Cron").field(e).finish() + } + Trigger::Manual => f.debug_tuple("Trigger::Manual").finish(), + } + } + } + #[derive(Clone, Copy)] + pub enum SignatureAlgorithm { + Secp256k1, + } + impl ::core::fmt::Debug for SignatureAlgorithm { + fn fmt( + &self, + f: &mut ::core::fmt::Formatter<'_>, + ) -> ::core::fmt::Result { + match self { + SignatureAlgorithm::Secp256k1 => { + f.debug_tuple("SignatureAlgorithm::Secp256k1").finish() + } + } + } + } + #[derive(Clone, Copy)] + pub enum SignaturePrefix { + Eip191, + } + impl ::core::fmt::Debug for SignaturePrefix { + fn fmt( + &self, + f: &mut ::core::fmt::Formatter<'_>, + ) -> ::core::fmt::Result { + match self { + SignaturePrefix::Eip191 => { + f.debug_tuple("SignaturePrefix::Eip191").finish() + } + } + } + } + #[repr(C)] + #[derive(Clone, Copy)] + pub struct SignatureKind { + pub algorithm: SignatureAlgorithm, + pub prefix: Option, + } + impl ::core::fmt::Debug for SignatureKind { + fn fmt( + &self, + f: &mut ::core::fmt::Formatter<'_>, + ) -> ::core::fmt::Result { + f.debug_struct("SignatureKind") + .field("algorithm", &self.algorithm) + .field("prefix", &self.prefix) + .finish() + } + } + #[derive(Clone)] + pub struct AggregatorSubmit { + pub url: _rt::String, + pub component: Component, + pub signature_kind: SignatureKind, + } + impl ::core::fmt::Debug for AggregatorSubmit { + fn fmt( + &self, + f: &mut ::core::fmt::Formatter<'_>, + ) -> ::core::fmt::Result { + f.debug_struct("AggregatorSubmit") + .field("url", &self.url) + .field("component", &self.component) + .field("signature-kind", &self.signature_kind) + .finish() + } + } + #[derive(Clone)] + pub enum Submit { + None, + Aggregator(AggregatorSubmit), + } + impl ::core::fmt::Debug for Submit { + fn fmt( + &self, + f: &mut ::core::fmt::Formatter<'_>, + ) -> ::core::fmt::Result { + match self { + Submit::None => f.debug_tuple("Submit::None").finish(), + Submit::Aggregator(e) => { + f.debug_tuple("Submit::Aggregator").field(e).finish() + } + } + } + } + #[derive(Clone)] + pub struct Workflow { + pub trigger: Trigger, + pub component: Component, + pub submit: Submit, + } + impl ::core::fmt::Debug for Workflow { + fn fmt( + &self, + f: &mut ::core::fmt::Formatter<'_>, + ) -> ::core::fmt::Result { + f.debug_struct("Workflow") + .field("trigger", &self.trigger) + .field("component", &self.component) + .field("submit", &self.submit) + .finish() + } + } + #[derive(Clone)] + pub struct Service { + pub name: _rt::String, + pub workflows: _rt::Vec<(WorkflowId, Workflow)>, + pub status: ServiceStatus, + pub manager: ServiceManager, + } + impl ::core::fmt::Debug for Service { + fn fmt( + &self, + f: &mut ::core::fmt::Formatter<'_>, + ) -> ::core::fmt::Result { + f.debug_struct("Service") + .field("name", &self.name) + .field("workflows", &self.workflows) + .field("status", &self.status) + .field("manager", &self.manager) + .finish() + } + } + #[derive(Clone)] + pub struct ServiceAndWorkflowId { + pub service: Service, + pub workflow_id: WorkflowId, + } + impl ::core::fmt::Debug for ServiceAndWorkflowId { + fn fmt( + &self, + f: &mut ::core::fmt::Formatter<'_>, + ) -> ::core::fmt::Result { + f.debug_struct("ServiceAndWorkflowId") + .field("service", &self.service) + .field("workflow-id", &self.workflow_id) + .finish() + } + } + #[derive(Clone)] + pub struct WorkflowAndWorkflowId { + pub workflow: Workflow, + pub workflow_id: WorkflowId, + } + impl ::core::fmt::Debug for WorkflowAndWorkflowId { + fn fmt( + &self, + f: &mut ::core::fmt::Formatter<'_>, + ) -> ::core::fmt::Result { + f.debug_struct("WorkflowAndWorkflowId") + .field("workflow", &self.workflow) + .field("workflow-id", &self.workflow_id) + .finish() + } + } + } + #[allow(dead_code, async_fn_in_trait, unused_imports, clippy::all)] + pub mod events { + #[used] + #[doc(hidden)] + static __FORCE_SECTION_REF: fn() = super::super::super::__link_custom_section_describing_imports; + use super::super::super::_rt; + pub type ChainKey = super::super::super::wavs::types::chain::ChainKey; + pub type EvmEventLog = super::super::super::wavs::types::chain::EvmEventLog; + pub type CosmosAddress = super::super::super::wavs::types::chain::CosmosAddress; + pub type CosmosEvent = super::super::super::wavs::types::chain::CosmosEvent; + pub type Timestamp = super::super::super::wavs::types::core::Timestamp; + pub type EventId = _rt::Vec; + #[derive(Clone)] + pub struct TriggerDataEvmContractEvent { + pub chain: ChainKey, + pub log: EvmEventLog, + } + impl ::core::fmt::Debug for TriggerDataEvmContractEvent { + fn fmt( + &self, + f: &mut ::core::fmt::Formatter<'_>, + ) -> ::core::fmt::Result { + f.debug_struct("TriggerDataEvmContractEvent") + .field("chain", &self.chain) + .field("log", &self.log) + .finish() + } + } + #[derive(Clone)] + pub struct TriggerDataCosmosContractEvent { + pub contract_address: CosmosAddress, + pub chain: ChainKey, + pub event: CosmosEvent, + pub event_index: u64, + pub block_height: u64, + } + impl ::core::fmt::Debug for TriggerDataCosmosContractEvent { + fn fmt( + &self, + f: &mut ::core::fmt::Formatter<'_>, + ) -> ::core::fmt::Result { + f.debug_struct("TriggerDataCosmosContractEvent") + .field("contract-address", &self.contract_address) + .field("chain", &self.chain) + .field("event", &self.event) + .field("event-index", &self.event_index) + .field("block-height", &self.block_height) + .finish() + } + } + #[derive(Clone)] + pub struct TriggerDataBlockInterval { + pub chain: ChainKey, + pub block_height: u64, + } + impl ::core::fmt::Debug for TriggerDataBlockInterval { + fn fmt( + &self, + f: &mut ::core::fmt::Formatter<'_>, + ) -> ::core::fmt::Result { + f.debug_struct("TriggerDataBlockInterval") + .field("chain", &self.chain) + .field("block-height", &self.block_height) + .finish() + } + } + #[repr(C)] + #[derive(Clone, Copy)] + pub struct TriggerDataCron { + pub trigger_time: Timestamp, + } + impl ::core::fmt::Debug for TriggerDataCron { + fn fmt( + &self, + f: &mut ::core::fmt::Formatter<'_>, + ) -> ::core::fmt::Result { + f.debug_struct("TriggerDataCron") + .field("trigger-time", &self.trigger_time) + .finish() + } + } + #[derive(Clone)] + pub enum TriggerData { + EvmContractEvent(TriggerDataEvmContractEvent), + CosmosContractEvent(TriggerDataCosmosContractEvent), + BlockInterval(TriggerDataBlockInterval), + Cron(TriggerDataCron), + Raw(_rt::Vec), + } + impl ::core::fmt::Debug for TriggerData { + fn fmt( + &self, + f: &mut ::core::fmt::Formatter<'_>, + ) -> ::core::fmt::Result { + match self { + TriggerData::EvmContractEvent(e) => { + f.debug_tuple("TriggerData::EvmContractEvent") + .field(e) + .finish() + } + TriggerData::CosmosContractEvent(e) => { + f.debug_tuple("TriggerData::CosmosContractEvent") + .field(e) + .finish() + } + TriggerData::BlockInterval(e) => { + f.debug_tuple("TriggerData::BlockInterval").field(e).finish() + } + TriggerData::Cron(e) => { + f.debug_tuple("TriggerData::Cron").field(e).finish() + } + TriggerData::Raw(e) => { + f.debug_tuple("TriggerData::Raw").field(e).finish() + } + } + } + } + } + } +} +#[allow(dead_code, async_fn_in_trait, unused_imports, clippy::all)] +pub mod host { + #[used] + #[doc(hidden)] + static __FORCE_SECTION_REF: fn() = super::__link_custom_section_describing_imports; + use super::_rt; + pub type EvmChainConfig = super::wavs::types::chain::EvmChainConfig; + pub type CosmosChainConfig = super::wavs::types::chain::CosmosChainConfig; + pub type LogLevel = super::wavs::types::core::LogLevel; + pub type ServiceAndWorkflowId = super::wavs::types::service::ServiceAndWorkflowId; + pub type WorkflowAndWorkflowId = super::wavs::types::service::WorkflowAndWorkflowId; + pub type EventId = super::wavs::types::events::EventId; + #[allow(unused_unsafe, clippy::all)] + pub fn get_evm_chain_config(chain_key: &str) -> Option { + unsafe { + #[cfg_attr(target_pointer_width = "64", repr(align(8)))] + #[cfg_attr(target_pointer_width = "32", repr(align(4)))] + struct RetArea( + [::core::mem::MaybeUninit; 8 * ::core::mem::size_of::<*const u8>()], + ); + let mut ret_area = RetArea( + [::core::mem::MaybeUninit::uninit(); 8 + * ::core::mem::size_of::<*const u8>()], + ); + let vec0 = chain_key; + let ptr0 = vec0.as_ptr().cast::(); + let len0 = vec0.len(); + let ptr1 = ret_area.0.as_mut_ptr().cast::(); + #[cfg(target_arch = "wasm32")] + #[link(wasm_import_module = "host")] + unsafe extern "C" { + #[link_name = "get-evm-chain-config"] + fn wit_import2(_: *mut u8, _: usize, _: *mut u8); + } + #[cfg(not(target_arch = "wasm32"))] + unsafe extern "C" fn wit_import2(_: *mut u8, _: usize, _: *mut u8) { + unreachable!() + } + unsafe { wit_import2(ptr0.cast_mut(), len0, ptr1) }; + let l3 = i32::from(*ptr1.add(0).cast::()); + let result17 = match l3 { + 0 => None, + 1 => { + let e = { + let l4 = *ptr1 + .add(::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l5 = *ptr1 + .add(2 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len6 = l5; + let bytes6 = _rt::Vec::from_raw_parts(l4.cast(), len6, len6); + let l7 = *ptr1 + .add(3 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l8 = *ptr1 + .add(4 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let base12 = l7; + let len12 = l8; + let mut result12 = _rt::Vec::with_capacity(len12); + for i in 0..len12 { + let base = base12 + .add(i * (2 * ::core::mem::size_of::<*const u8>())); + let e12 = { + let l9 = *base.add(0).cast::<*mut u8>(); + let l10 = *base + .add(::core::mem::size_of::<*const u8>()) + .cast::(); + let len11 = l10; + let bytes11 = _rt::Vec::from_raw_parts( + l9.cast(), + len11, + len11, + ); + _rt::string_lift(bytes11) + }; + result12.push(e12); + } + _rt::cabi_dealloc( + base12, + len12 * (2 * ::core::mem::size_of::<*const u8>()), + ::core::mem::size_of::<*const u8>(), + ); + let l13 = i32::from( + *ptr1 + .add(5 * ::core::mem::size_of::<*const u8>()) + .cast::(), + ); + super::wavs::types::chain::EvmChainConfig { + chain_id: _rt::string_lift(bytes6), + ws_endpoints: result12, + http_endpoint: match l13 { + 0 => None, + 1 => { + let e = { + let l14 = *ptr1 + .add(6 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l15 = *ptr1 + .add(7 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len16 = l15; + let bytes16 = _rt::Vec::from_raw_parts( + l14.cast(), + len16, + len16, + ); + _rt::string_lift(bytes16) + }; + Some(e) + } + _ => _rt::invalid_enum_discriminant(), + }, + } + }; + Some(e) + } + _ => _rt::invalid_enum_discriminant(), + }; + result17 + } + } + #[allow(unused_unsafe, clippy::all)] + pub fn get_cosmos_chain_config(chain_key: &str) -> Option { + unsafe { + #[cfg_attr(target_pointer_width = "64", repr(align(8)))] + #[cfg_attr(target_pointer_width = "32", repr(align(4)))] + struct RetArea( + [::core::mem::MaybeUninit; 17 * ::core::mem::size_of::<*const u8>()], + ); + let mut ret_area = RetArea( + [::core::mem::MaybeUninit::uninit(); 17 + * ::core::mem::size_of::<*const u8>()], + ); + let vec0 = chain_key; + let ptr0 = vec0.as_ptr().cast::(); + let len0 = vec0.len(); + let ptr1 = ret_area.0.as_mut_ptr().cast::(); + #[cfg(target_arch = "wasm32")] + #[link(wasm_import_module = "host")] + unsafe extern "C" { + #[link_name = "get-cosmos-chain-config"] + fn wit_import2(_: *mut u8, _: usize, _: *mut u8); + } + #[cfg(not(target_arch = "wasm32"))] + unsafe extern "C" fn wit_import2(_: *mut u8, _: usize, _: *mut u8) { + unreachable!() + } + unsafe { wit_import2(ptr0.cast_mut(), len0, ptr1) }; + let l3 = i32::from(*ptr1.add(0).cast::()); + let result26 = match l3 { + 0 => None, + 1 => { + let e = { + let l4 = *ptr1 + .add(::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l5 = *ptr1 + .add(2 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len6 = l5; + let bytes6 = _rt::Vec::from_raw_parts(l4.cast(), len6, len6); + let l7 = i32::from( + *ptr1 + .add(3 * ::core::mem::size_of::<*const u8>()) + .cast::(), + ); + let l11 = i32::from( + *ptr1 + .add(6 * ::core::mem::size_of::<*const u8>()) + .cast::(), + ); + let l15 = i32::from( + *ptr1 + .add(9 * ::core::mem::size_of::<*const u8>()) + .cast::(), + ); + let l19 = *ptr1 + .add(12 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let l20 = *ptr1 + .add(13 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l21 = *ptr1 + .add(14 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len22 = l21; + let bytes22 = _rt::Vec::from_raw_parts(l20.cast(), len22, len22); + let l23 = *ptr1 + .add(15 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l24 = *ptr1 + .add(16 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len25 = l24; + let bytes25 = _rt::Vec::from_raw_parts(l23.cast(), len25, len25); + super::wavs::types::chain::CosmosChainConfig { + chain_id: _rt::string_lift(bytes6), + rpc_endpoint: match l7 { + 0 => None, + 1 => { + let e = { + let l8 = *ptr1 + .add(4 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l9 = *ptr1 + .add(5 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len10 = l9; + let bytes10 = _rt::Vec::from_raw_parts( + l8.cast(), + len10, + len10, + ); + _rt::string_lift(bytes10) + }; + Some(e) + } + _ => _rt::invalid_enum_discriminant(), + }, + grpc_endpoint: match l11 { + 0 => None, + 1 => { + let e = { + let l12 = *ptr1 + .add(7 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l13 = *ptr1 + .add(8 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len14 = l13; + let bytes14 = _rt::Vec::from_raw_parts( + l12.cast(), + len14, + len14, + ); + _rt::string_lift(bytes14) + }; + Some(e) + } + _ => _rt::invalid_enum_discriminant(), + }, + grpc_web_endpoint: match l15 { + 0 => None, + 1 => { + let e = { + let l16 = *ptr1 + .add(10 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l17 = *ptr1 + .add(11 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len18 = l17; + let bytes18 = _rt::Vec::from_raw_parts( + l16.cast(), + len18, + len18, + ); + _rt::string_lift(bytes18) + }; + Some(e) + } + _ => _rt::invalid_enum_discriminant(), + }, + gas_price: l19, + gas_denom: _rt::string_lift(bytes22), + bech32_prefix: _rt::string_lift(bytes25), + } + }; + Some(e) + } + _ => _rt::invalid_enum_discriminant(), + }; + result26 + } + } + #[allow(unused_unsafe, clippy::all)] + pub fn config_var(key: &str) -> Option<_rt::String> { + unsafe { + #[cfg_attr(target_pointer_width = "64", repr(align(8)))] + #[cfg_attr(target_pointer_width = "32", repr(align(4)))] + struct RetArea( + [::core::mem::MaybeUninit; 3 * ::core::mem::size_of::<*const u8>()], + ); + let mut ret_area = RetArea( + [::core::mem::MaybeUninit::uninit(); 3 + * ::core::mem::size_of::<*const u8>()], + ); + let vec0 = key; + let ptr0 = vec0.as_ptr().cast::(); + let len0 = vec0.len(); + let ptr1 = ret_area.0.as_mut_ptr().cast::(); + #[cfg(target_arch = "wasm32")] + #[link(wasm_import_module = "host")] + unsafe extern "C" { + #[link_name = "config-var"] + fn wit_import2(_: *mut u8, _: usize, _: *mut u8); + } + #[cfg(not(target_arch = "wasm32"))] + unsafe extern "C" fn wit_import2(_: *mut u8, _: usize, _: *mut u8) { + unreachable!() + } + unsafe { wit_import2(ptr0.cast_mut(), len0, ptr1) }; + let l3 = i32::from(*ptr1.add(0).cast::()); + let result7 = match l3 { + 0 => None, + 1 => { + let e = { + let l4 = *ptr1 + .add(::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l5 = *ptr1 + .add(2 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len6 = l5; + let bytes6 = _rt::Vec::from_raw_parts(l4.cast(), len6, len6); + _rt::string_lift(bytes6) + }; + Some(e) + } + _ => _rt::invalid_enum_discriminant(), + }; + result7 + } + } + #[allow(unused_unsafe, clippy::all)] + pub fn log(level: LogLevel, message: &str) -> () { + unsafe { + use super::wavs::types::core::LogLevel as V0; + let result1 = match level { + V0::Error => 0i32, + V0::Warn => 1i32, + V0::Info => 2i32, + V0::Debug => 3i32, + V0::Trace => 4i32, + }; + let vec2 = message; + let ptr2 = vec2.as_ptr().cast::(); + let len2 = vec2.len(); + #[cfg(target_arch = "wasm32")] + #[link(wasm_import_module = "host")] + unsafe extern "C" { + #[link_name = "log"] + fn wit_import3(_: i32, _: *mut u8, _: usize); + } + #[cfg(not(target_arch = "wasm32"))] + unsafe extern "C" fn wit_import3(_: i32, _: *mut u8, _: usize) { + unreachable!() + } + unsafe { wit_import3(result1, ptr2.cast_mut(), len2) }; + } + } + #[allow(unused_unsafe, clippy::all)] + /// gets the service and workflow id that called this component + pub fn get_service() -> ServiceAndWorkflowId { + unsafe { + #[cfg_attr(target_pointer_width = "64", repr(align(8)))] + #[cfg_attr(target_pointer_width = "32", repr(align(4)))] + struct RetArea( + [::core::mem::MaybeUninit; 12 * ::core::mem::size_of::<*const u8>()], + ); + let mut ret_area = RetArea( + [::core::mem::MaybeUninit::uninit(); 12 + * ::core::mem::size_of::<*const u8>()], + ); + let ptr0 = ret_area.0.as_mut_ptr().cast::(); + #[cfg(target_arch = "wasm32")] + #[link(wasm_import_module = "host")] + unsafe extern "C" { + #[link_name = "get-service"] + fn wit_import1(_: *mut u8); + } + #[cfg(not(target_arch = "wasm32"))] + unsafe extern "C" fn wit_import1(_: *mut u8) { + unreachable!() + } + unsafe { wit_import1(ptr0) }; + let l2 = *ptr0.add(0).cast::<*mut u8>(); + let l3 = *ptr0.add(::core::mem::size_of::<*const u8>()).cast::(); + let len4 = l3; + let bytes4 = _rt::Vec::from_raw_parts(l2.cast(), len4, len4); + let l5 = *ptr0 + .add(2 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l6 = *ptr0.add(3 * ::core::mem::size_of::<*const u8>()).cast::(); + let base162 = l5; + let len162 = l6; + let mut result162 = _rt::Vec::with_capacity(len162); + for i in 0..len162 { + let base = base162 + .add(i * (144 + 42 * ::core::mem::size_of::<*const u8>())); + let e162 = { + let l7 = *base.add(0).cast::<*mut u8>(); + let l8 = *base + .add(::core::mem::size_of::<*const u8>()) + .cast::(); + let len9 = l8; + let bytes9 = _rt::Vec::from_raw_parts(l7.cast(), len9, len9); + let l10 = i32::from( + *base.add(2 * ::core::mem::size_of::<*const u8>()).cast::(), + ); + use super::wavs::types::service::Trigger as V45; + let v45 = match l10 { + 0 => { + let e45 = { + let l11 = *base + .add(8 + 2 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l12 = *base + .add(8 + 3 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len13 = l12; + let l14 = *base + .add(8 + 4 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l15 = *base + .add(8 + 5 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len16 = l15; + let bytes16 = _rt::Vec::from_raw_parts( + l14.cast(), + len16, + len16, + ); + let l17 = *base + .add(8 + 6 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l18 = *base + .add(8 + 7 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len19 = l18; + super::wavs::types::service::TriggerEvmContractEvent { + address: super::wavs::types::chain::EvmAddress { + raw_bytes: _rt::Vec::from_raw_parts( + l11.cast(), + len13, + len13, + ), + }, + chain: _rt::string_lift(bytes16), + event_hash: _rt::Vec::from_raw_parts( + l17.cast(), + len19, + len19, + ), + } + }; + V45::EvmContractEvent(e45) + } + 1 => { + let e45 = { + let l20 = *base + .add(8 + 2 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l21 = *base + .add(8 + 3 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len22 = l21; + let bytes22 = _rt::Vec::from_raw_parts( + l20.cast(), + len22, + len22, + ); + let l23 = *base + .add(8 + 4 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let l24 = *base + .add(8 + 5 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l25 = *base + .add(8 + 6 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len26 = l25; + let bytes26 = _rt::Vec::from_raw_parts( + l24.cast(), + len26, + len26, + ); + let l27 = *base + .add(8 + 7 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l28 = *base + .add(8 + 8 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len29 = l28; + let bytes29 = _rt::Vec::from_raw_parts( + l27.cast(), + len29, + len29, + ); + super::wavs::types::service::TriggerCosmosContractEvent { + address: super::wavs::types::chain::CosmosAddress { + bech32_addr: _rt::string_lift(bytes22), + prefix_len: l23 as u32, + }, + chain: _rt::string_lift(bytes26), + event_type: _rt::string_lift(bytes29), + } + }; + V45::CosmosContractEvent(e45) + } + 2 => { + let e45 = { + let l30 = *base + .add(8 + 2 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l31 = *base + .add(8 + 3 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len32 = l31; + let bytes32 = _rt::Vec::from_raw_parts( + l30.cast(), + len32, + len32, + ); + let l33 = *base + .add(8 + 4 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let l34 = i32::from( + *base + .add(16 + 4 * ::core::mem::size_of::<*const u8>()) + .cast::(), + ); + let l36 = i32::from( + *base + .add(32 + 4 * ::core::mem::size_of::<*const u8>()) + .cast::(), + ); + super::wavs::types::service::TriggerBlockInterval { + chain: _rt::string_lift(bytes32), + n_blocks: l33 as u32, + start_block: match l34 { + 0 => None, + 1 => { + let e = { + let l35 = *base + .add(24 + 4 * ::core::mem::size_of::<*const u8>()) + .cast::(); + l35 as u64 + }; + Some(e) + } + _ => _rt::invalid_enum_discriminant(), + }, + end_block: match l36 { + 0 => None, + 1 => { + let e = { + let l37 = *base + .add(40 + 4 * ::core::mem::size_of::<*const u8>()) + .cast::(); + l37 as u64 + }; + Some(e) + } + _ => _rt::invalid_enum_discriminant(), + }, + } + }; + V45::BlockInterval(e45) + } + 3 => { + let e45 = { + let l38 = *base + .add(8 + 2 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l39 = *base + .add(8 + 3 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len40 = l39; + let bytes40 = _rt::Vec::from_raw_parts( + l38.cast(), + len40, + len40, + ); + let l41 = i32::from( + *base + .add(8 + 4 * ::core::mem::size_of::<*const u8>()) + .cast::(), + ); + let l43 = i32::from( + *base + .add(24 + 4 * ::core::mem::size_of::<*const u8>()) + .cast::(), + ); + super::wavs::types::service::TriggerCron { + schedule: _rt::string_lift(bytes40), + start_time: match l41 { + 0 => None, + 1 => { + let e = { + let l42 = *base + .add(16 + 4 * ::core::mem::size_of::<*const u8>()) + .cast::(); + super::wavs::types::core::Timestamp { + nanos: l42 as u64, + } + }; + Some(e) + } + _ => _rt::invalid_enum_discriminant(), + }, + end_time: match l43 { + 0 => None, + 1 => { + let e = { + let l44 = *base + .add(32 + 4 * ::core::mem::size_of::<*const u8>()) + .cast::(); + super::wavs::types::core::Timestamp { + nanos: l44 as u64, + } + }; + Some(e) + } + _ => _rt::invalid_enum_discriminant(), + }, + } + }; + V45::Cron(e45) + } + n => { + debug_assert_eq!(n, 4, "invalid enum discriminant"); + V45::Manual + } + }; + let l46 = i32::from( + *base + .add(48 + 4 * ::core::mem::size_of::<*const u8>()) + .cast::(), + ); + use super::wavs::types::service::ComponentSource as V70; + let v70 = match l46 { + 0 => { + let e70 = { + let l47 = *base + .add(48 + 5 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l48 = *base + .add(48 + 6 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len49 = l48; + let bytes49 = _rt::Vec::from_raw_parts( + l47.cast(), + len49, + len49, + ); + let l50 = *base + .add(48 + 7 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l51 = *base + .add(48 + 8 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len52 = l51; + let bytes52 = _rt::Vec::from_raw_parts( + l50.cast(), + len52, + len52, + ); + super::wavs::types::service::ComponentSourceDownload { + uri: _rt::string_lift(bytes49), + digest: _rt::string_lift(bytes52), + } + }; + V70::Download(e70) + } + 1 => { + let e70 = { + let l53 = *base + .add(48 + 5 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l54 = *base + .add(48 + 6 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len55 = l54; + let bytes55 = _rt::Vec::from_raw_parts( + l53.cast(), + len55, + len55, + ); + let l56 = i32::from( + *base + .add(48 + 7 * ::core::mem::size_of::<*const u8>()) + .cast::(), + ); + let l60 = i32::from( + *base + .add(48 + 10 * ::core::mem::size_of::<*const u8>()) + .cast::(), + ); + let l64 = *base + .add(48 + 13 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l65 = *base + .add(48 + 14 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len66 = l65; + let bytes66 = _rt::Vec::from_raw_parts( + l64.cast(), + len66, + len66, + ); + super::wavs::types::service::Registry { + digest: _rt::string_lift(bytes55), + domain: match l56 { + 0 => None, + 1 => { + let e = { + let l57 = *base + .add(48 + 8 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l58 = *base + .add(48 + 9 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len59 = l58; + let bytes59 = _rt::Vec::from_raw_parts( + l57.cast(), + len59, + len59, + ); + _rt::string_lift(bytes59) + }; + Some(e) + } + _ => _rt::invalid_enum_discriminant(), + }, + version: match l60 { + 0 => None, + 1 => { + let e = { + let l61 = *base + .add(48 + 11 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l62 = *base + .add(48 + 12 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len63 = l62; + let bytes63 = _rt::Vec::from_raw_parts( + l61.cast(), + len63, + len63, + ); + _rt::string_lift(bytes63) + }; + Some(e) + } + _ => _rt::invalid_enum_discriminant(), + }, + pkg: _rt::string_lift(bytes66), + } + }; + V70::Registry(e70) + } + n => { + debug_assert_eq!(n, 2, "invalid enum discriminant"); + let e70 = { + let l67 = *base + .add(48 + 5 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l68 = *base + .add(48 + 6 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len69 = l68; + let bytes69 = _rt::Vec::from_raw_parts( + l67.cast(), + len69, + len69, + ); + _rt::string_lift(bytes69) + }; + V70::Digest(e70) + } + }; + let l71 = i32::from( + *base + .add(48 + 15 * ::core::mem::size_of::<*const u8>()) + .cast::(), + ); + use super::wavs::types::service::AllowedHostPermission as V78; + let v78 = match l71 { + 0 => V78::All, + 1 => { + let e78 = { + let l72 = *base + .add(48 + 16 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l73 = *base + .add(48 + 17 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let base77 = l72; + let len77 = l73; + let mut result77 = _rt::Vec::with_capacity(len77); + for i in 0..len77 { + let base = base77 + .add(i * (2 * ::core::mem::size_of::<*const u8>())); + let e77 = { + let l74 = *base.add(0).cast::<*mut u8>(); + let l75 = *base + .add(::core::mem::size_of::<*const u8>()) + .cast::(); + let len76 = l75; + let bytes76 = _rt::Vec::from_raw_parts( + l74.cast(), + len76, + len76, + ); + _rt::string_lift(bytes76) + }; + result77.push(e77); + } + _rt::cabi_dealloc( + base77, + len77 * (2 * ::core::mem::size_of::<*const u8>()), + ::core::mem::size_of::<*const u8>(), + ); + result77 + }; + V78::Only(e78) + } + n => { + debug_assert_eq!(n, 2, "invalid enum discriminant"); + V78::None + } + }; + let l79 = i32::from( + *base + .add(48 + 18 * ::core::mem::size_of::<*const u8>()) + .cast::(), + ); + let l80 = i32::from( + *base + .add(56 + 18 * ::core::mem::size_of::<*const u8>()) + .cast::(), + ); + let l82 = i32::from( + *base + .add(72 + 18 * ::core::mem::size_of::<*const u8>()) + .cast::(), + ); + let l84 = *base + .add(88 + 18 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l85 = *base + .add(88 + 19 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let base92 = l84; + let len92 = l85; + let mut result92 = _rt::Vec::with_capacity(len92); + for i in 0..len92 { + let base = base92 + .add(i * (4 * ::core::mem::size_of::<*const u8>())); + let e92 = { + let l86 = *base.add(0).cast::<*mut u8>(); + let l87 = *base + .add(::core::mem::size_of::<*const u8>()) + .cast::(); + let len88 = l87; + let bytes88 = _rt::Vec::from_raw_parts( + l86.cast(), + len88, + len88, + ); + let l89 = *base + .add(2 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l90 = *base + .add(3 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len91 = l90; + let bytes91 = _rt::Vec::from_raw_parts( + l89.cast(), + len91, + len91, + ); + (_rt::string_lift(bytes88), _rt::string_lift(bytes91)) + }; + result92.push(e92); + } + _rt::cabi_dealloc( + base92, + len92 * (4 * ::core::mem::size_of::<*const u8>()), + ::core::mem::size_of::<*const u8>(), + ); + let l93 = *base + .add(88 + 20 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l94 = *base + .add(88 + 21 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let base98 = l93; + let len98 = l94; + let mut result98 = _rt::Vec::with_capacity(len98); + for i in 0..len98 { + let base = base98 + .add(i * (2 * ::core::mem::size_of::<*const u8>())); + let e98 = { + let l95 = *base.add(0).cast::<*mut u8>(); + let l96 = *base + .add(::core::mem::size_of::<*const u8>()) + .cast::(); + let len97 = l96; + let bytes97 = _rt::Vec::from_raw_parts( + l95.cast(), + len97, + len97, + ); + _rt::string_lift(bytes97) + }; + result98.push(e98); + } + _rt::cabi_dealloc( + base98, + len98 * (2 * ::core::mem::size_of::<*const u8>()), + ::core::mem::size_of::<*const u8>(), + ); + let l99 = i32::from( + *base + .add(88 + 22 * ::core::mem::size_of::<*const u8>()) + .cast::(), + ); + use super::wavs::types::service::Submit as V161; + let v161 = match l99 { + 0 => V161::None, + n => { + debug_assert_eq!(n, 1, "invalid enum discriminant"); + let e161 = { + let l100 = *base + .add(96 + 22 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l101 = *base + .add(96 + 23 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len102 = l101; + let bytes102 = _rt::Vec::from_raw_parts( + l100.cast(), + len102, + len102, + ); + let l103 = i32::from( + *base + .add(96 + 24 * ::core::mem::size_of::<*const u8>()) + .cast::(), + ); + use super::wavs::types::service::ComponentSource as V127; + let v127 = match l103 { + 0 => { + let e127 = { + let l104 = *base + .add(96 + 25 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l105 = *base + .add(96 + 26 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len106 = l105; + let bytes106 = _rt::Vec::from_raw_parts( + l104.cast(), + len106, + len106, + ); + let l107 = *base + .add(96 + 27 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l108 = *base + .add(96 + 28 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len109 = l108; + let bytes109 = _rt::Vec::from_raw_parts( + l107.cast(), + len109, + len109, + ); + super::wavs::types::service::ComponentSourceDownload { + uri: _rt::string_lift(bytes106), + digest: _rt::string_lift(bytes109), + } + }; + V127::Download(e127) + } + 1 => { + let e127 = { + let l110 = *base + .add(96 + 25 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l111 = *base + .add(96 + 26 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len112 = l111; + let bytes112 = _rt::Vec::from_raw_parts( + l110.cast(), + len112, + len112, + ); + let l113 = i32::from( + *base + .add(96 + 27 * ::core::mem::size_of::<*const u8>()) + .cast::(), + ); + let l117 = i32::from( + *base + .add(96 + 30 * ::core::mem::size_of::<*const u8>()) + .cast::(), + ); + let l121 = *base + .add(96 + 33 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l122 = *base + .add(96 + 34 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len123 = l122; + let bytes123 = _rt::Vec::from_raw_parts( + l121.cast(), + len123, + len123, + ); + super::wavs::types::service::Registry { + digest: _rt::string_lift(bytes112), + domain: match l113 { + 0 => None, + 1 => { + let e = { + let l114 = *base + .add(96 + 28 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l115 = *base + .add(96 + 29 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len116 = l115; + let bytes116 = _rt::Vec::from_raw_parts( + l114.cast(), + len116, + len116, + ); + _rt::string_lift(bytes116) + }; + Some(e) + } + _ => _rt::invalid_enum_discriminant(), + }, + version: match l117 { + 0 => None, + 1 => { + let e = { + let l118 = *base + .add(96 + 31 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l119 = *base + .add(96 + 32 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len120 = l119; + let bytes120 = _rt::Vec::from_raw_parts( + l118.cast(), + len120, + len120, + ); + _rt::string_lift(bytes120) + }; + Some(e) + } + _ => _rt::invalid_enum_discriminant(), + }, + pkg: _rt::string_lift(bytes123), + } + }; + V127::Registry(e127) + } + n => { + debug_assert_eq!(n, 2, "invalid enum discriminant"); + let e127 = { + let l124 = *base + .add(96 + 25 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l125 = *base + .add(96 + 26 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len126 = l125; + let bytes126 = _rt::Vec::from_raw_parts( + l124.cast(), + len126, + len126, + ); + _rt::string_lift(bytes126) + }; + V127::Digest(e127) + } + }; + let l128 = i32::from( + *base + .add(96 + 35 * ::core::mem::size_of::<*const u8>()) + .cast::(), + ); + use super::wavs::types::service::AllowedHostPermission as V135; + let v135 = match l128 { + 0 => V135::All, + 1 => { + let e135 = { + let l129 = *base + .add(96 + 36 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l130 = *base + .add(96 + 37 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let base134 = l129; + let len134 = l130; + let mut result134 = _rt::Vec::with_capacity(len134); + for i in 0..len134 { + let base = base134 + .add(i * (2 * ::core::mem::size_of::<*const u8>())); + let e134 = { + let l131 = *base.add(0).cast::<*mut u8>(); + let l132 = *base + .add(::core::mem::size_of::<*const u8>()) + .cast::(); + let len133 = l132; + let bytes133 = _rt::Vec::from_raw_parts( + l131.cast(), + len133, + len133, + ); + _rt::string_lift(bytes133) + }; + result134.push(e134); + } + _rt::cabi_dealloc( + base134, + len134 * (2 * ::core::mem::size_of::<*const u8>()), + ::core::mem::size_of::<*const u8>(), + ); + result134 + }; + V135::Only(e135) + } + n => { + debug_assert_eq!(n, 2, "invalid enum discriminant"); + V135::None + } + }; + let l136 = i32::from( + *base + .add(96 + 38 * ::core::mem::size_of::<*const u8>()) + .cast::(), + ); + let l137 = i32::from( + *base + .add(104 + 38 * ::core::mem::size_of::<*const u8>()) + .cast::(), + ); + let l139 = i32::from( + *base + .add(120 + 38 * ::core::mem::size_of::<*const u8>()) + .cast::(), + ); + let l141 = *base + .add(136 + 38 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l142 = *base + .add(136 + 39 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let base149 = l141; + let len149 = l142; + let mut result149 = _rt::Vec::with_capacity(len149); + for i in 0..len149 { + let base = base149 + .add(i * (4 * ::core::mem::size_of::<*const u8>())); + let e149 = { + let l143 = *base.add(0).cast::<*mut u8>(); + let l144 = *base + .add(::core::mem::size_of::<*const u8>()) + .cast::(); + let len145 = l144; + let bytes145 = _rt::Vec::from_raw_parts( + l143.cast(), + len145, + len145, + ); + let l146 = *base + .add(2 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l147 = *base + .add(3 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len148 = l147; + let bytes148 = _rt::Vec::from_raw_parts( + l146.cast(), + len148, + len148, + ); + (_rt::string_lift(bytes145), _rt::string_lift(bytes148)) + }; + result149.push(e149); + } + _rt::cabi_dealloc( + base149, + len149 * (4 * ::core::mem::size_of::<*const u8>()), + ::core::mem::size_of::<*const u8>(), + ); + let l150 = *base + .add(136 + 40 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l151 = *base + .add(136 + 41 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let base155 = l150; + let len155 = l151; + let mut result155 = _rt::Vec::with_capacity(len155); + for i in 0..len155 { + let base = base155 + .add(i * (2 * ::core::mem::size_of::<*const u8>())); + let e155 = { + let l152 = *base.add(0).cast::<*mut u8>(); + let l153 = *base + .add(::core::mem::size_of::<*const u8>()) + .cast::(); + let len154 = l153; + let bytes154 = _rt::Vec::from_raw_parts( + l152.cast(), + len154, + len154, + ); + _rt::string_lift(bytes154) + }; + result155.push(e155); + } + _rt::cabi_dealloc( + base155, + len155 * (2 * ::core::mem::size_of::<*const u8>()), + ::core::mem::size_of::<*const u8>(), + ); + let l156 = i32::from( + *base + .add(136 + 42 * ::core::mem::size_of::<*const u8>()) + .cast::(), + ); + use super::wavs::types::service::SignatureAlgorithm as V157; + let v157 = match l156 { + n => { + debug_assert_eq!(n, 0, "invalid enum discriminant"); + V157::Secp256k1 + } + }; + let l158 = i32::from( + *base + .add(137 + 42 * ::core::mem::size_of::<*const u8>()) + .cast::(), + ); + super::wavs::types::service::AggregatorSubmit { + url: _rt::string_lift(bytes102), + component: super::wavs::types::service::Component { + source: v127, + permissions: super::wavs::types::service::Permissions { + allowed_http_hosts: v135, + file_system: _rt::bool_lift(l136 as u8), + }, + fuel_limit: match l137 { + 0 => None, + 1 => { + let e = { + let l138 = *base + .add(112 + 38 * ::core::mem::size_of::<*const u8>()) + .cast::(); + l138 as u64 + }; + Some(e) + } + _ => _rt::invalid_enum_discriminant(), + }, + time_limit_seconds: match l139 { + 0 => None, + 1 => { + let e = { + let l140 = *base + .add(128 + 38 * ::core::mem::size_of::<*const u8>()) + .cast::(); + l140 as u64 + }; + Some(e) + } + _ => _rt::invalid_enum_discriminant(), + }, + config: result149, + env_keys: result155, + }, + signature_kind: super::wavs::types::service::SignatureKind { + algorithm: v157, + prefix: match l158 { + 0 => None, + 1 => { + let e = { + let l159 = i32::from( + *base + .add(138 + 42 * ::core::mem::size_of::<*const u8>()) + .cast::(), + ); + use super::wavs::types::service::SignaturePrefix as V160; + let v160 = match l159 { + n => { + debug_assert_eq!(n, 0, "invalid enum discriminant"); + V160::Eip191 + } + }; + v160 + }; + Some(e) + } + _ => _rt::invalid_enum_discriminant(), + }, + }, + } + }; + V161::Aggregator(e161) + } + }; + ( + _rt::string_lift(bytes9), + super::wavs::types::service::Workflow { + trigger: v45, + component: super::wavs::types::service::Component { + source: v70, + permissions: super::wavs::types::service::Permissions { + allowed_http_hosts: v78, + file_system: _rt::bool_lift(l79 as u8), + }, + fuel_limit: match l80 { + 0 => None, + 1 => { + let e = { + let l81 = *base + .add(64 + 18 * ::core::mem::size_of::<*const u8>()) + .cast::(); + l81 as u64 + }; + Some(e) + } + _ => _rt::invalid_enum_discriminant(), + }, + time_limit_seconds: match l82 { + 0 => None, + 1 => { + let e = { + let l83 = *base + .add(80 + 18 * ::core::mem::size_of::<*const u8>()) + .cast::(); + l83 as u64 + }; + Some(e) + } + _ => _rt::invalid_enum_discriminant(), + }, + config: result92, + env_keys: result98, + }, + submit: v161, + }, + ) + }; + result162.push(e162); + } + _rt::cabi_dealloc( + base162, + len162 * (144 + 42 * ::core::mem::size_of::<*const u8>()), + 8, + ); + let l163 = i32::from( + *ptr0.add(4 * ::core::mem::size_of::<*const u8>()).cast::(), + ); + use super::wavs::types::service::ServiceStatus as V164; + let v164 = match l163 { + 0 => V164::Active, + n => { + debug_assert_eq!(n, 1, "invalid enum discriminant"); + V164::Paused + } + }; + let l165 = i32::from( + *ptr0.add(5 * ::core::mem::size_of::<*const u8>()).cast::(), + ); + use super::wavs::types::service::ServiceManager as V172; + let v172 = match l165 { + n => { + debug_assert_eq!(n, 0, "invalid enum discriminant"); + let e172 = { + let l166 = *ptr0 + .add(6 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l167 = *ptr0 + .add(7 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len168 = l167; + let bytes168 = _rt::Vec::from_raw_parts( + l166.cast(), + len168, + len168, + ); + let l169 = *ptr0 + .add(8 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l170 = *ptr0 + .add(9 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len171 = l170; + super::wavs::types::service::EvmManager { + chain: _rt::string_lift(bytes168), + address: super::wavs::types::chain::EvmAddress { + raw_bytes: _rt::Vec::from_raw_parts( + l169.cast(), + len171, + len171, + ), + }, + } + }; + V172::Evm(e172) + } + }; + let l173 = *ptr0 + .add(10 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l174 = *ptr0 + .add(11 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len175 = l174; + let bytes175 = _rt::Vec::from_raw_parts(l173.cast(), len175, len175); + let result176 = super::wavs::types::service::ServiceAndWorkflowId { + service: super::wavs::types::service::Service { + name: _rt::string_lift(bytes4), + workflows: result162, + status: v164, + manager: v172, + }, + workflow_id: _rt::string_lift(bytes175), + }; + result176 + } + } + #[allow(unused_unsafe, clippy::all)] + /// convenience function to get the workflow without having to walk service.workflows + pub fn get_workflow() -> WorkflowAndWorkflowId { + unsafe { + #[repr(align(8))] + struct RetArea( + [::core::mem::MaybeUninit< + u8, + >; 144 + 42 * ::core::mem::size_of::<*const u8>()], + ); + let mut ret_area = RetArea( + [::core::mem::MaybeUninit::uninit(); 144 + + 42 * ::core::mem::size_of::<*const u8>()], + ); + let ptr0 = ret_area.0.as_mut_ptr().cast::(); + #[cfg(target_arch = "wasm32")] + #[link(wasm_import_module = "host")] + unsafe extern "C" { + #[link_name = "get-workflow"] + fn wit_import1(_: *mut u8); + } + #[cfg(not(target_arch = "wasm32"))] + unsafe extern "C" fn wit_import1(_: *mut u8) { + unreachable!() + } + unsafe { wit_import1(ptr0) }; + let l2 = i32::from(*ptr0.add(0).cast::()); + use super::wavs::types::service::Trigger as V37; + let v37 = match l2 { + 0 => { + let e37 = { + let l3 = *ptr0.add(8).cast::<*mut u8>(); + let l4 = *ptr0 + .add(8 + 1 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len5 = l4; + let l6 = *ptr0 + .add(8 + 2 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l7 = *ptr0 + .add(8 + 3 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len8 = l7; + let bytes8 = _rt::Vec::from_raw_parts(l6.cast(), len8, len8); + let l9 = *ptr0 + .add(8 + 4 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l10 = *ptr0 + .add(8 + 5 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len11 = l10; + super::wavs::types::service::TriggerEvmContractEvent { + address: super::wavs::types::chain::EvmAddress { + raw_bytes: _rt::Vec::from_raw_parts(l3.cast(), len5, len5), + }, + chain: _rt::string_lift(bytes8), + event_hash: _rt::Vec::from_raw_parts(l9.cast(), len11, len11), + } + }; + V37::EvmContractEvent(e37) + } + 1 => { + let e37 = { + let l12 = *ptr0.add(8).cast::<*mut u8>(); + let l13 = *ptr0 + .add(8 + 1 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len14 = l13; + let bytes14 = _rt::Vec::from_raw_parts(l12.cast(), len14, len14); + let l15 = *ptr0 + .add(8 + 2 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let l16 = *ptr0 + .add(8 + 3 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l17 = *ptr0 + .add(8 + 4 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len18 = l17; + let bytes18 = _rt::Vec::from_raw_parts(l16.cast(), len18, len18); + let l19 = *ptr0 + .add(8 + 5 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l20 = *ptr0 + .add(8 + 6 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len21 = l20; + let bytes21 = _rt::Vec::from_raw_parts(l19.cast(), len21, len21); + super::wavs::types::service::TriggerCosmosContractEvent { + address: super::wavs::types::chain::CosmosAddress { + bech32_addr: _rt::string_lift(bytes14), + prefix_len: l15 as u32, + }, + chain: _rt::string_lift(bytes18), + event_type: _rt::string_lift(bytes21), + } + }; + V37::CosmosContractEvent(e37) + } + 2 => { + let e37 = { + let l22 = *ptr0.add(8).cast::<*mut u8>(); + let l23 = *ptr0 + .add(8 + 1 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len24 = l23; + let bytes24 = _rt::Vec::from_raw_parts(l22.cast(), len24, len24); + let l25 = *ptr0 + .add(8 + 2 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let l26 = i32::from( + *ptr0 + .add(16 + 2 * ::core::mem::size_of::<*const u8>()) + .cast::(), + ); + let l28 = i32::from( + *ptr0 + .add(32 + 2 * ::core::mem::size_of::<*const u8>()) + .cast::(), + ); + super::wavs::types::service::TriggerBlockInterval { + chain: _rt::string_lift(bytes24), + n_blocks: l25 as u32, + start_block: match l26 { + 0 => None, + 1 => { + let e = { + let l27 = *ptr0 + .add(24 + 2 * ::core::mem::size_of::<*const u8>()) + .cast::(); + l27 as u64 + }; + Some(e) + } + _ => _rt::invalid_enum_discriminant(), + }, + end_block: match l28 { + 0 => None, + 1 => { + let e = { + let l29 = *ptr0 + .add(40 + 2 * ::core::mem::size_of::<*const u8>()) + .cast::(); + l29 as u64 + }; + Some(e) + } + _ => _rt::invalid_enum_discriminant(), + }, + } + }; + V37::BlockInterval(e37) + } + 3 => { + let e37 = { + let l30 = *ptr0.add(8).cast::<*mut u8>(); + let l31 = *ptr0 + .add(8 + 1 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len32 = l31; + let bytes32 = _rt::Vec::from_raw_parts(l30.cast(), len32, len32); + let l33 = i32::from( + *ptr0 + .add(8 + 2 * ::core::mem::size_of::<*const u8>()) + .cast::(), + ); + let l35 = i32::from( + *ptr0 + .add(24 + 2 * ::core::mem::size_of::<*const u8>()) + .cast::(), + ); + super::wavs::types::service::TriggerCron { + schedule: _rt::string_lift(bytes32), + start_time: match l33 { + 0 => None, + 1 => { + let e = { + let l34 = *ptr0 + .add(16 + 2 * ::core::mem::size_of::<*const u8>()) + .cast::(); + super::wavs::types::core::Timestamp { + nanos: l34 as u64, + } + }; + Some(e) + } + _ => _rt::invalid_enum_discriminant(), + }, + end_time: match l35 { + 0 => None, + 1 => { + let e = { + let l36 = *ptr0 + .add(32 + 2 * ::core::mem::size_of::<*const u8>()) + .cast::(); + super::wavs::types::core::Timestamp { + nanos: l36 as u64, + } + }; + Some(e) + } + _ => _rt::invalid_enum_discriminant(), + }, + } + }; + V37::Cron(e37) + } + n => { + debug_assert_eq!(n, 4, "invalid enum discriminant"); + V37::Manual + } + }; + let l38 = i32::from( + *ptr0.add(48 + 2 * ::core::mem::size_of::<*const u8>()).cast::(), + ); + use super::wavs::types::service::ComponentSource as V62; + let v62 = match l38 { + 0 => { + let e62 = { + let l39 = *ptr0 + .add(48 + 3 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l40 = *ptr0 + .add(48 + 4 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len41 = l40; + let bytes41 = _rt::Vec::from_raw_parts(l39.cast(), len41, len41); + let l42 = *ptr0 + .add(48 + 5 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l43 = *ptr0 + .add(48 + 6 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len44 = l43; + let bytes44 = _rt::Vec::from_raw_parts(l42.cast(), len44, len44); + super::wavs::types::service::ComponentSourceDownload { + uri: _rt::string_lift(bytes41), + digest: _rt::string_lift(bytes44), + } + }; + V62::Download(e62) + } + 1 => { + let e62 = { + let l45 = *ptr0 + .add(48 + 3 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l46 = *ptr0 + .add(48 + 4 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len47 = l46; + let bytes47 = _rt::Vec::from_raw_parts(l45.cast(), len47, len47); + let l48 = i32::from( + *ptr0 + .add(48 + 5 * ::core::mem::size_of::<*const u8>()) + .cast::(), + ); + let l52 = i32::from( + *ptr0 + .add(48 + 8 * ::core::mem::size_of::<*const u8>()) + .cast::(), + ); + let l56 = *ptr0 + .add(48 + 11 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l57 = *ptr0 + .add(48 + 12 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len58 = l57; + let bytes58 = _rt::Vec::from_raw_parts(l56.cast(), len58, len58); + super::wavs::types::service::Registry { + digest: _rt::string_lift(bytes47), + domain: match l48 { + 0 => None, + 1 => { + let e = { + let l49 = *ptr0 + .add(48 + 6 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l50 = *ptr0 + .add(48 + 7 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len51 = l50; + let bytes51 = _rt::Vec::from_raw_parts( + l49.cast(), + len51, + len51, + ); + _rt::string_lift(bytes51) + }; + Some(e) + } + _ => _rt::invalid_enum_discriminant(), + }, + version: match l52 { + 0 => None, + 1 => { + let e = { + let l53 = *ptr0 + .add(48 + 9 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l54 = *ptr0 + .add(48 + 10 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len55 = l54; + let bytes55 = _rt::Vec::from_raw_parts( + l53.cast(), + len55, + len55, + ); + _rt::string_lift(bytes55) + }; + Some(e) + } + _ => _rt::invalid_enum_discriminant(), + }, + pkg: _rt::string_lift(bytes58), + } + }; + V62::Registry(e62) + } + n => { + debug_assert_eq!(n, 2, "invalid enum discriminant"); + let e62 = { + let l59 = *ptr0 + .add(48 + 3 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l60 = *ptr0 + .add(48 + 4 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len61 = l60; + let bytes61 = _rt::Vec::from_raw_parts(l59.cast(), len61, len61); + _rt::string_lift(bytes61) + }; + V62::Digest(e62) + } + }; + let l63 = i32::from( + *ptr0.add(48 + 13 * ::core::mem::size_of::<*const u8>()).cast::(), + ); + use super::wavs::types::service::AllowedHostPermission as V70; + let v70 = match l63 { + 0 => V70::All, + 1 => { + let e70 = { + let l64 = *ptr0 + .add(48 + 14 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l65 = *ptr0 + .add(48 + 15 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let base69 = l64; + let len69 = l65; + let mut result69 = _rt::Vec::with_capacity(len69); + for i in 0..len69 { + let base = base69 + .add(i * (2 * ::core::mem::size_of::<*const u8>())); + let e69 = { + let l66 = *base.add(0).cast::<*mut u8>(); + let l67 = *base + .add(::core::mem::size_of::<*const u8>()) + .cast::(); + let len68 = l67; + let bytes68 = _rt::Vec::from_raw_parts( + l66.cast(), + len68, + len68, + ); + _rt::string_lift(bytes68) + }; + result69.push(e69); + } + _rt::cabi_dealloc( + base69, + len69 * (2 * ::core::mem::size_of::<*const u8>()), + ::core::mem::size_of::<*const u8>(), + ); + result69 + }; + V70::Only(e70) + } + n => { + debug_assert_eq!(n, 2, "invalid enum discriminant"); + V70::None + } + }; + let l71 = i32::from( + *ptr0.add(48 + 16 * ::core::mem::size_of::<*const u8>()).cast::(), + ); + let l72 = i32::from( + *ptr0.add(56 + 16 * ::core::mem::size_of::<*const u8>()).cast::(), + ); + let l74 = i32::from( + *ptr0.add(72 + 16 * ::core::mem::size_of::<*const u8>()).cast::(), + ); + let l76 = *ptr0 + .add(88 + 16 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l77 = *ptr0 + .add(88 + 17 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let base84 = l76; + let len84 = l77; + let mut result84 = _rt::Vec::with_capacity(len84); + for i in 0..len84 { + let base = base84.add(i * (4 * ::core::mem::size_of::<*const u8>())); + let e84 = { + let l78 = *base.add(0).cast::<*mut u8>(); + let l79 = *base + .add(::core::mem::size_of::<*const u8>()) + .cast::(); + let len80 = l79; + let bytes80 = _rt::Vec::from_raw_parts(l78.cast(), len80, len80); + let l81 = *base + .add(2 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l82 = *base + .add(3 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len83 = l82; + let bytes83 = _rt::Vec::from_raw_parts(l81.cast(), len83, len83); + (_rt::string_lift(bytes80), _rt::string_lift(bytes83)) + }; + result84.push(e84); + } + _rt::cabi_dealloc( + base84, + len84 * (4 * ::core::mem::size_of::<*const u8>()), + ::core::mem::size_of::<*const u8>(), + ); + let l85 = *ptr0 + .add(88 + 18 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l86 = *ptr0 + .add(88 + 19 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let base90 = l85; + let len90 = l86; + let mut result90 = _rt::Vec::with_capacity(len90); + for i in 0..len90 { + let base = base90.add(i * (2 * ::core::mem::size_of::<*const u8>())); + let e90 = { + let l87 = *base.add(0).cast::<*mut u8>(); + let l88 = *base + .add(::core::mem::size_of::<*const u8>()) + .cast::(); + let len89 = l88; + let bytes89 = _rt::Vec::from_raw_parts(l87.cast(), len89, len89); + _rt::string_lift(bytes89) + }; + result90.push(e90); + } + _rt::cabi_dealloc( + base90, + len90 * (2 * ::core::mem::size_of::<*const u8>()), + ::core::mem::size_of::<*const u8>(), + ); + let l91 = i32::from( + *ptr0.add(88 + 20 * ::core::mem::size_of::<*const u8>()).cast::(), + ); + use super::wavs::types::service::Submit as V153; + let v153 = match l91 { + 0 => V153::None, + n => { + debug_assert_eq!(n, 1, "invalid enum discriminant"); + let e153 = { + let l92 = *ptr0 + .add(96 + 20 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l93 = *ptr0 + .add(96 + 21 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len94 = l93; + let bytes94 = _rt::Vec::from_raw_parts(l92.cast(), len94, len94); + let l95 = i32::from( + *ptr0 + .add(96 + 22 * ::core::mem::size_of::<*const u8>()) + .cast::(), + ); + use super::wavs::types::service::ComponentSource as V119; + let v119 = match l95 { + 0 => { + let e119 = { + let l96 = *ptr0 + .add(96 + 23 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l97 = *ptr0 + .add(96 + 24 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len98 = l97; + let bytes98 = _rt::Vec::from_raw_parts( + l96.cast(), + len98, + len98, + ); + let l99 = *ptr0 + .add(96 + 25 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l100 = *ptr0 + .add(96 + 26 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len101 = l100; + let bytes101 = _rt::Vec::from_raw_parts( + l99.cast(), + len101, + len101, + ); + super::wavs::types::service::ComponentSourceDownload { + uri: _rt::string_lift(bytes98), + digest: _rt::string_lift(bytes101), + } + }; + V119::Download(e119) + } + 1 => { + let e119 = { + let l102 = *ptr0 + .add(96 + 23 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l103 = *ptr0 + .add(96 + 24 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len104 = l103; + let bytes104 = _rt::Vec::from_raw_parts( + l102.cast(), + len104, + len104, + ); + let l105 = i32::from( + *ptr0 + .add(96 + 25 * ::core::mem::size_of::<*const u8>()) + .cast::(), + ); + let l109 = i32::from( + *ptr0 + .add(96 + 28 * ::core::mem::size_of::<*const u8>()) + .cast::(), + ); + let l113 = *ptr0 + .add(96 + 31 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l114 = *ptr0 + .add(96 + 32 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len115 = l114; + let bytes115 = _rt::Vec::from_raw_parts( + l113.cast(), + len115, + len115, + ); + super::wavs::types::service::Registry { + digest: _rt::string_lift(bytes104), + domain: match l105 { + 0 => None, + 1 => { + let e = { + let l106 = *ptr0 + .add(96 + 26 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l107 = *ptr0 + .add(96 + 27 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len108 = l107; + let bytes108 = _rt::Vec::from_raw_parts( + l106.cast(), + len108, + len108, + ); + _rt::string_lift(bytes108) + }; + Some(e) + } + _ => _rt::invalid_enum_discriminant(), + }, + version: match l109 { + 0 => None, + 1 => { + let e = { + let l110 = *ptr0 + .add(96 + 29 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l111 = *ptr0 + .add(96 + 30 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len112 = l111; + let bytes112 = _rt::Vec::from_raw_parts( + l110.cast(), + len112, + len112, + ); + _rt::string_lift(bytes112) + }; + Some(e) + } + _ => _rt::invalid_enum_discriminant(), + }, + pkg: _rt::string_lift(bytes115), + } + }; + V119::Registry(e119) + } + n => { + debug_assert_eq!(n, 2, "invalid enum discriminant"); + let e119 = { + let l116 = *ptr0 + .add(96 + 23 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l117 = *ptr0 + .add(96 + 24 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len118 = l117; + let bytes118 = _rt::Vec::from_raw_parts( + l116.cast(), + len118, + len118, + ); + _rt::string_lift(bytes118) + }; + V119::Digest(e119) + } + }; + let l120 = i32::from( + *ptr0 + .add(96 + 33 * ::core::mem::size_of::<*const u8>()) + .cast::(), + ); + use super::wavs::types::service::AllowedHostPermission as V127; + let v127 = match l120 { + 0 => V127::All, + 1 => { + let e127 = { + let l121 = *ptr0 + .add(96 + 34 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l122 = *ptr0 + .add(96 + 35 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let base126 = l121; + let len126 = l122; + let mut result126 = _rt::Vec::with_capacity(len126); + for i in 0..len126 { + let base = base126 + .add(i * (2 * ::core::mem::size_of::<*const u8>())); + let e126 = { + let l123 = *base.add(0).cast::<*mut u8>(); + let l124 = *base + .add(::core::mem::size_of::<*const u8>()) + .cast::(); + let len125 = l124; + let bytes125 = _rt::Vec::from_raw_parts( + l123.cast(), + len125, + len125, + ); + _rt::string_lift(bytes125) + }; + result126.push(e126); + } + _rt::cabi_dealloc( + base126, + len126 * (2 * ::core::mem::size_of::<*const u8>()), + ::core::mem::size_of::<*const u8>(), + ); + result126 + }; + V127::Only(e127) + } + n => { + debug_assert_eq!(n, 2, "invalid enum discriminant"); + V127::None + } + }; + let l128 = i32::from( + *ptr0 + .add(96 + 36 * ::core::mem::size_of::<*const u8>()) + .cast::(), + ); + let l129 = i32::from( + *ptr0 + .add(104 + 36 * ::core::mem::size_of::<*const u8>()) + .cast::(), + ); + let l131 = i32::from( + *ptr0 + .add(120 + 36 * ::core::mem::size_of::<*const u8>()) + .cast::(), + ); + let l133 = *ptr0 + .add(136 + 36 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l134 = *ptr0 + .add(136 + 37 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let base141 = l133; + let len141 = l134; + let mut result141 = _rt::Vec::with_capacity(len141); + for i in 0..len141 { + let base = base141 + .add(i * (4 * ::core::mem::size_of::<*const u8>())); + let e141 = { + let l135 = *base.add(0).cast::<*mut u8>(); + let l136 = *base + .add(::core::mem::size_of::<*const u8>()) + .cast::(); + let len137 = l136; + let bytes137 = _rt::Vec::from_raw_parts( + l135.cast(), + len137, + len137, + ); + let l138 = *base + .add(2 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l139 = *base + .add(3 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len140 = l139; + let bytes140 = _rt::Vec::from_raw_parts( + l138.cast(), + len140, + len140, + ); + (_rt::string_lift(bytes137), _rt::string_lift(bytes140)) + }; + result141.push(e141); + } + _rt::cabi_dealloc( + base141, + len141 * (4 * ::core::mem::size_of::<*const u8>()), + ::core::mem::size_of::<*const u8>(), + ); + let l142 = *ptr0 + .add(136 + 38 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l143 = *ptr0 + .add(136 + 39 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let base147 = l142; + let len147 = l143; + let mut result147 = _rt::Vec::with_capacity(len147); + for i in 0..len147 { + let base = base147 + .add(i * (2 * ::core::mem::size_of::<*const u8>())); + let e147 = { + let l144 = *base.add(0).cast::<*mut u8>(); + let l145 = *base + .add(::core::mem::size_of::<*const u8>()) + .cast::(); + let len146 = l145; + let bytes146 = _rt::Vec::from_raw_parts( + l144.cast(), + len146, + len146, + ); + _rt::string_lift(bytes146) + }; + result147.push(e147); + } + _rt::cabi_dealloc( + base147, + len147 * (2 * ::core::mem::size_of::<*const u8>()), + ::core::mem::size_of::<*const u8>(), + ); + let l148 = i32::from( + *ptr0 + .add(136 + 40 * ::core::mem::size_of::<*const u8>()) + .cast::(), + ); + use super::wavs::types::service::SignatureAlgorithm as V149; + let v149 = match l148 { + n => { + debug_assert_eq!(n, 0, "invalid enum discriminant"); + V149::Secp256k1 + } + }; + let l150 = i32::from( + *ptr0 + .add(137 + 40 * ::core::mem::size_of::<*const u8>()) + .cast::(), + ); + super::wavs::types::service::AggregatorSubmit { + url: _rt::string_lift(bytes94), + component: super::wavs::types::service::Component { + source: v119, + permissions: super::wavs::types::service::Permissions { + allowed_http_hosts: v127, + file_system: _rt::bool_lift(l128 as u8), + }, + fuel_limit: match l129 { + 0 => None, + 1 => { + let e = { + let l130 = *ptr0 + .add(112 + 36 * ::core::mem::size_of::<*const u8>()) + .cast::(); + l130 as u64 + }; + Some(e) + } + _ => _rt::invalid_enum_discriminant(), + }, + time_limit_seconds: match l131 { + 0 => None, + 1 => { + let e = { + let l132 = *ptr0 + .add(128 + 36 * ::core::mem::size_of::<*const u8>()) + .cast::(); + l132 as u64 + }; + Some(e) + } + _ => _rt::invalid_enum_discriminant(), + }, + config: result141, + env_keys: result147, + }, + signature_kind: super::wavs::types::service::SignatureKind { + algorithm: v149, + prefix: match l150 { + 0 => None, + 1 => { + let e = { + let l151 = i32::from( + *ptr0 + .add(138 + 40 * ::core::mem::size_of::<*const u8>()) + .cast::(), + ); + use super::wavs::types::service::SignaturePrefix as V152; + let v152 = match l151 { + n => { + debug_assert_eq!(n, 0, "invalid enum discriminant"); + V152::Eip191 + } + }; + v152 + }; + Some(e) + } + _ => _rt::invalid_enum_discriminant(), + }, + }, + } + }; + V153::Aggregator(e153) + } + }; + let l154 = *ptr0 + .add(144 + 40 * ::core::mem::size_of::<*const u8>()) + .cast::<*mut u8>(); + let l155 = *ptr0 + .add(144 + 41 * ::core::mem::size_of::<*const u8>()) + .cast::(); + let len156 = l155; + let bytes156 = _rt::Vec::from_raw_parts(l154.cast(), len156, len156); + let result157 = super::wavs::types::service::WorkflowAndWorkflowId { + workflow: super::wavs::types::service::Workflow { + trigger: v37, + component: super::wavs::types::service::Component { + source: v62, + permissions: super::wavs::types::service::Permissions { + allowed_http_hosts: v70, + file_system: _rt::bool_lift(l71 as u8), + }, + fuel_limit: match l72 { + 0 => None, + 1 => { + let e = { + let l73 = *ptr0 + .add(64 + 16 * ::core::mem::size_of::<*const u8>()) + .cast::(); + l73 as u64 + }; + Some(e) + } + _ => _rt::invalid_enum_discriminant(), + }, + time_limit_seconds: match l74 { + 0 => None, + 1 => { + let e = { + let l75 = *ptr0 + .add(80 + 16 * ::core::mem::size_of::<*const u8>()) + .cast::(); + l75 as u64 + }; + Some(e) + } + _ => _rt::invalid_enum_discriminant(), + }, + config: result84, + env_keys: result90, + }, + submit: v153, + }, + workflow_id: _rt::string_lift(bytes156), + }; + result157 + } + } + #[allow(unused_unsafe, clippy::all)] + /// convenience function to get the event-id + pub fn get_event_id() -> EventId { + unsafe { + #[cfg_attr(target_pointer_width = "64", repr(align(8)))] + #[cfg_attr(target_pointer_width = "32", repr(align(4)))] + struct RetArea( + [::core::mem::MaybeUninit; 2 * ::core::mem::size_of::<*const u8>()], + ); + let mut ret_area = RetArea( + [::core::mem::MaybeUninit::uninit(); 2 + * ::core::mem::size_of::<*const u8>()], + ); + let ptr0 = ret_area.0.as_mut_ptr().cast::(); + #[cfg(target_arch = "wasm32")] + #[link(wasm_import_module = "host")] + unsafe extern "C" { + #[link_name = "get-event-id"] + fn wit_import1(_: *mut u8); + } + #[cfg(not(target_arch = "wasm32"))] + unsafe extern "C" fn wit_import1(_: *mut u8) { + unreachable!() + } + unsafe { wit_import1(ptr0) }; + let l2 = *ptr0.add(0).cast::<*mut u8>(); + let l3 = *ptr0.add(::core::mem::size_of::<*const u8>()).cast::(); + let len4 = l3; + let result5 = _rt::Vec::from_raw_parts(l2.cast(), len4, len4); + result5 + } + } +} +#[rustfmt::skip] +mod _rt { + #![allow(dead_code, clippy::all)] + pub use alloc_crate::string::String; + pub use alloc_crate::vec::Vec; + use core::fmt; + use core::marker; + use core::sync::atomic::{AtomicU32, Ordering::Relaxed}; + /// A type which represents a component model resource, either imported or + /// exported into this component. + /// + /// This is a low-level wrapper which handles the lifetime of the resource + /// (namely this has a destructor). The `T` provided defines the component model + /// intrinsics that this wrapper uses. + /// + /// One of the chief purposes of this type is to provide `Deref` implementations + /// to access the underlying data when it is owned. + /// + /// This type is primarily used in generated code for exported and imported + /// resources. + #[repr(transparent)] + pub struct Resource { + handle: AtomicU32, + _marker: marker::PhantomData, + } + /// A trait which all wasm resources implement, namely providing the ability to + /// drop a resource. + /// + /// This generally is implemented by generated code, not user-facing code. + #[allow(clippy::missing_safety_doc)] + pub unsafe trait WasmResource { + /// Invokes the `[resource-drop]...` intrinsic. + unsafe fn drop(handle: u32); + } + impl Resource { + #[doc(hidden)] + pub unsafe fn from_handle(handle: u32) -> Self { + debug_assert!(handle != u32::MAX); + Self { + handle: AtomicU32::new(handle), + _marker: marker::PhantomData, + } + } + /// Takes ownership of the handle owned by `resource`. + /// + /// Note that this ideally would be `into_handle` taking `Resource` by + /// ownership. The code generator does not enable that in all situations, + /// unfortunately, so this is provided instead. + /// + /// Also note that `take_handle` is in theory only ever called on values + /// owned by a generated function. For example a generated function might + /// take `Resource` as an argument but then call `take_handle` on a + /// reference to that argument. In that sense the dynamic nature of + /// `take_handle` should only be exposed internally to generated code, not + /// to user code. + #[doc(hidden)] + pub fn take_handle(resource: &Resource) -> u32 { + resource.handle.swap(u32::MAX, Relaxed) + } + #[doc(hidden)] + pub fn handle(resource: &Resource) -> u32 { + resource.handle.load(Relaxed) + } + } + impl fmt::Debug for Resource { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + f.debug_struct("Resource").field("handle", &self.handle).finish() + } + } + impl Drop for Resource { + fn drop(&mut self) { + unsafe { + match self.handle.load(Relaxed) { + u32::MAX => {} + other => T::drop(other), + } + } + } + } + pub unsafe fn bool_lift(val: u8) -> bool { + if cfg!(debug_assertions) { + match val { + 0 => false, + 1 => true, + _ => panic!("invalid bool discriminant"), + } + } else { + val != 0 + } + } + pub use alloc_crate::alloc; + pub fn as_i64(t: T) -> i64 { + t.as_i64() + } + pub trait AsI64 { + fn as_i64(self) -> i64; + } + impl<'a, T: Copy + AsI64> AsI64 for &'a T { + fn as_i64(self) -> i64 { + (*self).as_i64() + } + } + impl AsI64 for i64 { + #[inline] + fn as_i64(self) -> i64 { + self as i64 + } + } + impl AsI64 for u64 { + #[inline] + fn as_i64(self) -> i64 { + self as i64 + } + } + pub unsafe fn string_lift(bytes: Vec) -> String { + if cfg!(debug_assertions) { + String::from_utf8(bytes).unwrap() + } else { + String::from_utf8_unchecked(bytes) + } + } + pub unsafe fn invalid_enum_discriminant() -> T { + if cfg!(debug_assertions) { + panic!("invalid enum discriminant") + } else { + unsafe { core::hint::unreachable_unchecked() } + } + } + pub unsafe fn cabi_dealloc(ptr: *mut u8, size: usize, align: usize) { + if size == 0 { + return; + } + let layout = alloc::Layout::from_size_align_unchecked(size, align); + alloc::dealloc(ptr, layout); + } + pub fn as_i32(t: T) -> i32 { + t.as_i32() + } + pub trait AsI32 { + fn as_i32(self) -> i32; + } + impl<'a, T: Copy + AsI32> AsI32 for &'a T { + fn as_i32(self) -> i32 { + (*self).as_i32() + } + } + impl AsI32 for i32 { + #[inline] + fn as_i32(self) -> i32 { + self as i32 + } + } + impl AsI32 for u32 { + #[inline] + fn as_i32(self) -> i32 { + self as i32 + } + } + impl AsI32 for i16 { + #[inline] + fn as_i32(self) -> i32 { + self as i32 + } + } + impl AsI32 for u16 { + #[inline] + fn as_i32(self) -> i32 { + self as i32 + } + } + impl AsI32 for i8 { + #[inline] + fn as_i32(self) -> i32 { + self as i32 + } + } + impl AsI32 for u8 { + #[inline] + fn as_i32(self) -> i32 { + self as i32 + } + } + impl AsI32 for char { + #[inline] + fn as_i32(self) -> i32 { + self as i32 + } + } + impl AsI32 for usize { + #[inline] + fn as_i32(self) -> i32 { + self as i32 + } + } + #[cfg(target_arch = "wasm32")] + pub fn run_ctors_once() { + wit_bindgen_rt::run_ctors_once(); + } + extern crate alloc as alloc_crate; +} +/// Generates `#[unsafe(no_mangle)]` functions to export the specified type as +/// the root implementation of all generated traits. +/// +/// For more information see the documentation of `wit_bindgen::generate!`. +/// +/// ```rust +/// # macro_rules! export{ ($($t:tt)*) => (); } +/// # trait Guest {} +/// struct MyType; +/// +/// impl Guest for MyType { +/// // ... +/// } +/// +/// export!(MyType); +/// ``` +#[allow(unused_macros)] +#[doc(hidden)] +macro_rules! __export_aggregator_world_impl { + ($ty:ident) => { + self::export!($ty with_types_in self); + }; + ($ty:ident with_types_in $($path_to_types_root:tt)*) => { + $($path_to_types_root)*:: __export_world_aggregator_world_cabi!($ty with_types_in + $($path_to_types_root)*); + }; +} +#[doc(inline)] +pub(crate) use __export_aggregator_world_impl as export; +#[cfg(target_arch = "wasm32")] +#[unsafe( + link_section = "component-type:wit-bindgen:0.41.0:wavs:aggregator@1.3.0:aggregator-world:encoded world" +)] +#[doc(hidden)] +#[allow(clippy::octal_escapes)] +pub static __WIT_BINDGEN_COMPONENT_TYPE: [u8; 20948] = *b"\ +\0asm\x0d\0\x01\0\0\x19\x16wit-component-encoding\x04\0\x07\xcc\xa2\x01\x01A\x02\ +\x01A\x85\x01\x01B\x0b\x01s\x04\0\x06digest\x03\0\0\x01r\x01\x05nanosw\x04\0\x09\ +timestamp\x03\0\x02\x01r\x01\x04secsw\x04\0\x08duration\x03\0\x04\x01o\x02ww\x01\ +r\x01\x05value\x06\x04\0\x04u128\x03\0\x07\x01q\x05\x05error\0\0\x04warn\0\0\x04\ +info\0\0\x05debug\0\0\x05trace\0\0\x04\0\x09log-level\x03\0\x09\x03\0\x15wavs:ty\ +pes/core@1.3.0\x05\0\x01B\x1d\x01s\x04\0\x09chain-key\x03\0\0\x01p}\x04\0\x0bevm\ +-tx-hash\x03\0\x02\x01s\x04\0\x0ecosmos-tx-hash\x03\0\x04\x01q\x02\x03evm\x01\x03\ +\0\x06cosmos\x01\x05\0\x04\0\x0bany-tx-hash\x03\0\x06\x01r\x02\x0bbech32-addrs\x0a\ +prefix-leny\x04\0\x0ecosmos-address\x03\0\x08\x01o\x02ss\x01p\x0a\x01r\x02\x02ty\ +s\x0aattributes\x0b\x04\0\x0ccosmos-event\x03\0\x0c\x01ks\x01r\x07\x08chain-ids\x0c\ +rpc-endpoint\x0e\x0dgrpc-endpoint\x0e\x11grpc-web-endpoint\x0e\x09gas-pricev\x09\ +gas-denoms\x0dbech32-prefixs\x04\0\x13cosmos-chain-config\x03\0\x0f\x01p}\x01r\x01\ +\x09raw-bytes\x11\x04\0\x0bevm-address\x03\0\x12\x01p\x11\x01r\x02\x06topics\x14\ +\x04data\x11\x04\0\x12evm-event-log-data\x03\0\x15\x01kw\x01r\x08\x07address\x13\ +\x04data\x16\x07tx-hash\x03\x0cblock-numberw\x09log-indexw\x0ablock-hash\x11\x0f\ +block-timestamp\x17\x08tx-indexw\x04\0\x0devm-event-log\x03\0\x18\x01ps\x01r\x03\ +\x08chain-ids\x0cws-endpoints\x1a\x0dhttp-endpoint\x0e\x04\0\x10evm-chain-config\ +\x03\0\x1b\x03\0\x16wavs:types/chain@1.3.0\x05\x01\x02\x03\0\0\x06digest\x02\x03\ +\0\0\x09timestamp\x02\x03\0\x01\x09chain-key\x02\x03\0\x01\x0bevm-address\x02\x03\ +\0\x01\x0ecosmos-address\x01BO\x02\x03\x02\x01\x02\x04\0\x06digest\x03\0\0\x02\x03\ +\x02\x01\x03\x04\0\x09timestamp\x03\0\x02\x02\x03\x02\x01\x04\x04\0\x09chain-key\ +\x03\0\x04\x02\x03\x02\x01\x05\x04\0\x0bevm-address\x03\0\x06\x02\x03\x02\x01\x06\ +\x04\0\x0ecosmos-address\x03\0\x08\x01s\x04\0\x0aservice-id\x03\0\x0a\x01s\x04\0\ +\x0bworkflow-id\x03\0\x0c\x01s\x04\0\x0bpackage-ref\x03\0\x0e\x01s\x04\0\x0esemv\ +er-version\x03\0\x10\x01q\x02\x06active\0\0\x06paused\0\0\x04\0\x0eservice-statu\ +s\x03\0\x12\x01r\x02\x05chain\x05\x07address\x07\x04\0\x0bevm-manager\x03\0\x14\x01\ +q\x01\x03evm\x01\x15\0\x04\0\x0fservice-manager\x03\0\x16\x01r\x02\x03uris\x06di\ +gest\x01\x04\0\x19component-source-download\x03\0\x18\x01ks\x01k\x11\x01r\x04\x06\ +digest\x01\x06domain\x1a\x07version\x1b\x03pkg\x0f\x04\0\x08registry\x03\0\x1c\x01\ +q\x03\x08download\x01\x19\0\x08registry\x01\x1d\0\x06digest\x01\x01\0\x04\0\x10c\ +omponent-source\x03\0\x1e\x01ps\x01q\x03\x03all\0\0\x04only\x01\x20\0\x04none\0\0\ +\x04\0\x17allowed-host-permission\x03\0!\x01r\x02\x12allowed-http-hosts\"\x0bfil\ +e-system\x7f\x04\0\x0bpermissions\x03\0#\x01kw\x01o\x02ss\x01p&\x01r\x06\x06sour\ +ce\x1f\x0bpermissions$\x0afuel-limit%\x12time-limit-seconds%\x06config'\x08env-k\ +eys\x20\x04\0\x09component\x03\0(\x01p}\x01r\x03\x07address\x07\x05chain\x05\x0a\ +event-hash*\x04\0\x1atrigger-evm-contract-event\x03\0+\x01r\x03\x07address\x09\x05\ +chain\x05\x0aevent-types\x04\0\x1dtrigger-cosmos-contract-event\x03\0-\x01r\x04\x05\ +chain\x05\x08n-blocksy\x0bstart-block%\x09end-block%\x04\0\x16trigger-block-inte\ +rval\x03\0/\x01k\x03\x01r\x03\x08schedules\x0astart-time1\x08end-time1\x04\0\x0c\ +trigger-cron\x03\02\x01q\x05\x12evm-contract-event\x01,\0\x15cosmos-contract-eve\ +nt\x01.\0\x0eblock-interval\x010\0\x04cron\x013\0\x06manual\0\0\x04\0\x07trigger\ +\x03\04\x01q\x01\x09secp256k1\0\0\x04\0\x13signature-algorithm\x03\06\x01q\x01\x06\ +eip191\0\0\x04\0\x10signature-prefix\x03\08\x01k9\x01r\x02\x09algorithm7\x06pref\ +ix:\x04\0\x0esignature-kind\x03\0;\x01r\x03\x03urls\x09component)\x0esignature-k\ +ind<\x04\0\x11aggregator-submit\x03\0=\x01q\x02\x04none\0\0\x0aaggregator\x01>\0\ +\x04\0\x06submit\x03\0?\x01r\x03\x07trigger5\x09component)\x06submit\xc0\0\x04\0\ +\x08workflow\x03\0A\x01o\x02\x0d\xc2\0\x01p\xc3\0\x01r\x04\x04names\x09workflows\ +\xc4\0\x06status\x13\x07manager\x17\x04\0\x07service\x03\0E\x01r\x03\x05chain\x05\ +\x07address\x07\x07max-gas%\x04\0\x17evm-contract-submission\x03\0G\x01q\x01\x03\ +evm\x01\xc8\0\0\x04\0\x0aaggregator\x03\0I\x01r\x02\x07service\xc6\0\x0bworkflow\ +-id\x0d\x04\0\x17service-and-workflow-id\x03\0K\x01r\x02\x08workflow\xc2\0\x0bwo\ +rkflow-id\x0d\x04\0\x18workflow-and-workflow-id\x03\0M\x03\0\x18wavs:types/servi\ +ce@1.3.0\x05\x07\x02\x03\0\x01\x0devm-event-log\x02\x03\0\x01\x0ccosmos-event\x01\ +B\x19\x02\x03\x02\x01\x04\x04\0\x09chain-key\x03\0\0\x02\x03\x02\x01\x05\x04\0\x0b\ +evm-address\x03\0\x02\x02\x03\x02\x01\x08\x04\0\x0devm-event-log\x03\0\x04\x02\x03\ +\x02\x01\x06\x04\0\x0ecosmos-address\x03\0\x06\x02\x03\x02\x01\x09\x04\0\x0ccosm\ +os-event\x03\0\x08\x02\x03\x02\x01\x03\x04\0\x09timestamp\x03\0\x0a\x01p}\x04\0\x08\ +event-id\x03\0\x0c\x01r\x02\x05chain\x01\x03log\x05\x04\0\x1ftrigger-data-evm-co\ +ntract-event\x03\0\x0e\x01r\x05\x10contract-address\x07\x05chain\x01\x05event\x09\ +\x0bevent-indexw\x0cblock-heightw\x04\0\"trigger-data-cosmos-contract-event\x03\0\ +\x10\x01r\x02\x05chain\x01\x0cblock-heightw\x04\0\x1btrigger-data-block-interval\ +\x03\0\x12\x01r\x01\x0ctrigger-time\x0b\x04\0\x11trigger-data-cron\x03\0\x14\x01\ +p}\x01q\x05\x12evm-contract-event\x01\x0f\0\x15cosmos-contract-event\x01\x11\0\x0e\ +block-interval\x01\x13\0\x04cron\x01\x15\0\x03raw\x01\x16\0\x04\0\x0ctrigger-dat\ +a\x03\0\x17\x03\0\x17wavs:types/events@1.3.0\x05\x0a\x02\x03\0\0\x08duration\x02\ +\x03\0\0\x04u128\x02\x03\0\x02\x07service\x02\x03\0\x02\x0bworkflow-id\x02\x03\0\ +\x02\x0esignature-kind\x02\x03\0\x03\x0ctrigger-data\x02\x03\0\x03\x08event-id\x01\ +B\x20\x02\x03\x02\x01\x0b\x04\0\x08duration\x03\0\0\x02\x03\x02\x01\x0c\x04\0\x04\ +u128\x03\0\x02\x02\x03\x02\x01\x0d\x04\0\x07service\x03\0\x04\x02\x03\x02\x01\x0e\ +\x04\0\x0bworkflow-id\x03\0\x06\x02\x03\x02\x01\x0f\x04\0\x0esignature-kind\x03\0\ +\x08\x02\x03\x02\x01\x04\x04\0\x09chain-key\x03\0\x0a\x02\x03\x02\x01\x05\x04\0\x0b\ +evm-address\x03\0\x0c\x02\x03\x02\x01\x10\x04\0\x0ctrigger-data\x03\0\x0e\x02\x03\ +\x02\x01\x11\x04\0\x08event-id\x03\0\x10\x01p}\x01r\x03\x08event-id\x11\x08order\ +ing\x12\x07payload\x12\x04\0\x08envelope\x03\0\x13\x01r\x02\x04data\x12\x04kind\x09\ +\x04\0\x12envelope-signature\x03\0\x15\x01r\x05\x07service\x05\x0bworkflow-id\x07\ +\x08envelope\x14\x09signature\x16\x0ctrigger-data\x0f\x04\0\x06packet\x03\0\x17\x01\ +r\x01\x05delay\x01\x04\0\x0ctimer-action\x03\0\x19\x01k\x03\x01r\x03\x05chain\x0b\ +\x10contract-address\x0d\x09gas-price\x1b\x04\0\x0dsubmit-action\x03\0\x1c\x01q\x02\ +\x05timer\x01\x1a\0\x06submit\x01\x1d\0\x04\0\x11aggregator-action\x03\0\x1e\x03\ +\0\x20wavs:aggregator/aggregator@1.3.0\x05\x12\x02\x03\0\x04\x06packet\x03\0\x06\ +packet\x03\0\x13\x02\x03\0\x04\x11aggregator-action\x03\0\x11aggregator-action\x03\ +\0\x15\x02\x03\0\x01\x0bany-tx-hash\x03\0\x0bany-tx-hash\x03\0\x17\x01B\x0a\x04\0\ +\x08pollable\x03\x01\x01h\0\x01@\x01\x04self\x01\0\x7f\x04\0\x16[method]pollable\ +.ready\x01\x02\x01@\x01\x04self\x01\x01\0\x04\0\x16[method]pollable.block\x01\x03\ +\x01p\x01\x01py\x01@\x01\x02in\x04\0\x05\x04\0\x04poll\x01\x06\x03\0\x12wasi:io/\ +poll@0.2.0\x05\x19\x02\x03\0\x05\x08pollable\x01B\x0f\x02\x03\x02\x01\x1a\x04\0\x08\ +pollable\x03\0\0\x01w\x04\0\x07instant\x03\0\x02\x01w\x04\0\x08duration\x03\0\x04\ +\x01@\0\0\x03\x04\0\x03now\x01\x06\x01@\0\0\x05\x04\0\x0aresolution\x01\x07\x01i\ +\x01\x01@\x01\x04when\x03\0\x08\x04\0\x11subscribe-instant\x01\x09\x01@\x01\x04w\ +hen\x05\0\x08\x04\0\x12subscribe-duration\x01\x0a\x03\0!wasi:clocks/monotonic-cl\ +ock@0.2.0\x05\x1b\x01B\x04\x04\0\x05error\x03\x01\x01h\0\x01@\x01\x04self\x01\0s\ +\x04\0\x1d[method]error.to-debug-string\x01\x02\x03\0\x13wasi:io/error@0.2.0\x05\ +\x1c\x02\x03\0\x07\x05error\x01B(\x02\x03\x02\x01\x1d\x04\0\x05error\x03\0\0\x02\ +\x03\x02\x01\x1a\x04\0\x08pollable\x03\0\x02\x01i\x01\x01q\x02\x15last-operation\ +-failed\x01\x04\0\x06closed\0\0\x04\0\x0cstream-error\x03\0\x05\x04\0\x0cinput-s\ +tream\x03\x01\x04\0\x0doutput-stream\x03\x01\x01h\x07\x01p}\x01j\x01\x0a\x01\x06\ +\x01@\x02\x04self\x09\x03lenw\0\x0b\x04\0\x19[method]input-stream.read\x01\x0c\x04\ +\0\"[method]input-stream.blocking-read\x01\x0c\x01j\x01w\x01\x06\x01@\x02\x04sel\ +f\x09\x03lenw\0\x0d\x04\0\x19[method]input-stream.skip\x01\x0e\x04\0\"[method]in\ +put-stream.blocking-skip\x01\x0e\x01i\x03\x01@\x01\x04self\x09\0\x0f\x04\0\x1e[m\ +ethod]input-stream.subscribe\x01\x10\x01h\x08\x01@\x01\x04self\x11\0\x0d\x04\0![\ +method]output-stream.check-write\x01\x12\x01j\0\x01\x06\x01@\x02\x04self\x11\x08\ +contents\x0a\0\x13\x04\0\x1b[method]output-stream.write\x01\x14\x04\0.[method]ou\ +tput-stream.blocking-write-and-flush\x01\x14\x01@\x01\x04self\x11\0\x13\x04\0\x1b\ +[method]output-stream.flush\x01\x15\x04\0$[method]output-stream.blocking-flush\x01\ +\x15\x01@\x01\x04self\x11\0\x0f\x04\0\x1f[method]output-stream.subscribe\x01\x16\ +\x01@\x02\x04self\x11\x03lenw\0\x13\x04\0\"[method]output-stream.write-zeroes\x01\ +\x17\x04\05[method]output-stream.blocking-write-zeroes-and-flush\x01\x17\x01@\x03\ +\x04self\x11\x03src\x09\x03lenw\0\x0d\x04\0\x1c[method]output-stream.splice\x01\x18\ +\x04\0%[method]output-stream.blocking-splice\x01\x18\x03\0\x15wasi:io/streams@0.\ +2.0\x05\x1e\x02\x03\0\x06\x08duration\x02\x03\0\x08\x0cinput-stream\x02\x03\0\x08\ +\x0doutput-stream\x01B\xc0\x01\x02\x03\x02\x01\x1f\x04\0\x08duration\x03\0\0\x02\ +\x03\x02\x01\x20\x04\0\x0cinput-stream\x03\0\x02\x02\x03\x02\x01!\x04\0\x0doutpu\ +t-stream\x03\0\x04\x02\x03\x02\x01\x1d\x04\0\x08io-error\x03\0\x06\x02\x03\x02\x01\ +\x1a\x04\0\x08pollable\x03\0\x08\x01q\x0a\x03get\0\0\x04head\0\0\x04post\0\0\x03\ +put\0\0\x06delete\0\0\x07connect\0\0\x07options\0\0\x05trace\0\0\x05patch\0\0\x05\ +other\x01s\0\x04\0\x06method\x03\0\x0a\x01q\x03\x04HTTP\0\0\x05HTTPS\0\0\x05othe\ +r\x01s\0\x04\0\x06scheme\x03\0\x0c\x01ks\x01k{\x01r\x02\x05rcode\x0e\x09info-cod\ +e\x0f\x04\0\x11DNS-error-payload\x03\0\x10\x01k}\x01r\x02\x08alert-id\x12\x0dale\ +rt-message\x0e\x04\0\x1aTLS-alert-received-payload\x03\0\x13\x01ky\x01r\x02\x0af\ +ield-name\x0e\x0afield-size\x15\x04\0\x12field-size-payload\x03\0\x16\x01kw\x01k\ +\x17\x01q'\x0bDNS-timeout\0\0\x09DNS-error\x01\x11\0\x15destination-not-found\0\0\ +\x17destination-unavailable\0\0\x19destination-IP-prohibited\0\0\x19destination-\ +IP-unroutable\0\0\x12connection-refused\0\0\x15connection-terminated\0\0\x12conn\ +ection-timeout\0\0\x17connection-read-timeout\0\0\x18connection-write-timeout\0\0\ +\x18connection-limit-reached\0\0\x12TLS-protocol-error\0\0\x15TLS-certificate-er\ +ror\0\0\x12TLS-alert-received\x01\x14\0\x13HTTP-request-denied\0\0\x1cHTTP-reque\ +st-length-required\0\0\x16HTTP-request-body-size\x01\x18\0\x1bHTTP-request-metho\ +d-invalid\0\0\x18HTTP-request-URI-invalid\0\0\x19HTTP-request-URI-too-long\0\0\x20\ +HTTP-request-header-section-size\x01\x15\0\x18HTTP-request-header-size\x01\x19\0\ +!HTTP-request-trailer-section-size\x01\x15\0\x19HTTP-request-trailer-size\x01\x17\ +\0\x18HTTP-response-incomplete\0\0!HTTP-response-header-section-size\x01\x15\0\x19\ +HTTP-response-header-size\x01\x17\0\x17HTTP-response-body-size\x01\x18\0\"HTTP-r\ +esponse-trailer-section-size\x01\x15\0\x1aHTTP-response-trailer-size\x01\x17\0\x1d\ +HTTP-response-transfer-coding\x01\x0e\0\x1cHTTP-response-content-coding\x01\x0e\0\ +\x15HTTP-response-timeout\0\0\x13HTTP-upgrade-failed\0\0\x13HTTP-protocol-error\0\ +\0\x0dloop-detected\0\0\x13configuration-error\0\0\x0einternal-error\x01\x0e\0\x04\ +\0\x0aerror-code\x03\0\x1a\x01q\x03\x0einvalid-syntax\0\0\x09forbidden\0\0\x09im\ +mutable\0\0\x04\0\x0cheader-error\x03\0\x1c\x01s\x04\0\x09field-key\x03\0\x1e\x01\ +p}\x04\0\x0bfield-value\x03\0\x20\x04\0\x06fields\x03\x01\x04\0\x07headers\x03\0\ +\"\x04\0\x08trailers\x03\0\"\x04\0\x10incoming-request\x03\x01\x04\0\x10outgoing\ +-request\x03\x01\x04\0\x0frequest-options\x03\x01\x04\0\x11response-outparam\x03\ +\x01\x01{\x04\0\x0bstatus-code\x03\0)\x04\0\x11incoming-response\x03\x01\x04\0\x0d\ +incoming-body\x03\x01\x04\0\x0ffuture-trailers\x03\x01\x04\0\x11outgoing-respons\ +e\x03\x01\x04\0\x0doutgoing-body\x03\x01\x04\0\x18future-incoming-response\x03\x01\ +\x01i\"\x01@\0\01\x04\0\x13[constructor]fields\x012\x01o\x02\x1f!\x01p3\x01j\x01\ +1\x01\x1d\x01@\x01\x07entries4\05\x04\0\x18[static]fields.from-list\x016\x01h\"\x01\ +p!\x01@\x02\x04self7\x04name\x1f\08\x04\0\x12[method]fields.get\x019\x01@\x02\x04\ +self7\x04name\x1f\0\x7f\x04\0\x12[method]fields.has\x01:\x01j\0\x01\x1d\x01@\x03\ +\x04self7\x04name\x1f\x05value8\0;\x04\0\x12[method]fields.set\x01<\x01@\x02\x04\ +self7\x04name\x1f\0;\x04\0\x15[method]fields.delete\x01=\x01@\x03\x04self7\x04na\ +me\x1f\x05value!\0;\x04\0\x15[method]fields.append\x01>\x01@\x01\x04self7\04\x04\ +\0\x16[method]fields.entries\x01?\x01@\x01\x04self7\01\x04\0\x14[method]fields.c\ +lone\x01@\x01h%\x01@\x01\x04self\xc1\0\0\x0b\x04\0\x1f[method]incoming-request.m\ +ethod\x01B\x01@\x01\x04self\xc1\0\0\x0e\x04\0([method]incoming-request.path-with\ +-query\x01C\x01k\x0d\x01@\x01\x04self\xc1\0\0\xc4\0\x04\0\x1f[method]incoming-re\ +quest.scheme\x01E\x04\0\"[method]incoming-request.authority\x01C\x01i#\x01@\x01\x04\ +self\xc1\0\0\xc6\0\x04\0\x20[method]incoming-request.headers\x01G\x01i,\x01j\x01\ +\xc8\0\0\x01@\x01\x04self\xc1\0\0\xc9\0\x04\0\x20[method]incoming-request.consum\ +e\x01J\x01i&\x01@\x01\x07headers\xc6\0\0\xcb\0\x04\0\x1d[constructor]outgoing-re\ +quest\x01L\x01h&\x01i/\x01j\x01\xce\0\0\x01@\x01\x04self\xcd\0\0\xcf\0\x04\0\x1d\ +[method]outgoing-request.body\x01P\x01@\x01\x04self\xcd\0\0\x0b\x04\0\x1f[method\ +]outgoing-request.method\x01Q\x01j\0\0\x01@\x02\x04self\xcd\0\x06method\x0b\0\xd2\ +\0\x04\0#[method]outgoing-request.set-method\x01S\x01@\x01\x04self\xcd\0\0\x0e\x04\ +\0([method]outgoing-request.path-with-query\x01T\x01@\x02\x04self\xcd\0\x0fpath-\ +with-query\x0e\0\xd2\0\x04\0,[method]outgoing-request.set-path-with-query\x01U\x01\ +@\x01\x04self\xcd\0\0\xc4\0\x04\0\x1f[method]outgoing-request.scheme\x01V\x01@\x02\ +\x04self\xcd\0\x06scheme\xc4\0\0\xd2\0\x04\0#[method]outgoing-request.set-scheme\ +\x01W\x04\0\"[method]outgoing-request.authority\x01T\x01@\x02\x04self\xcd\0\x09a\ +uthority\x0e\0\xd2\0\x04\0&[method]outgoing-request.set-authority\x01X\x01@\x01\x04\ +self\xcd\0\0\xc6\0\x04\0\x20[method]outgoing-request.headers\x01Y\x01i'\x01@\0\0\ +\xda\0\x04\0\x1c[constructor]request-options\x01[\x01h'\x01k\x01\x01@\x01\x04sel\ +f\xdc\0\0\xdd\0\x04\0'[method]request-options.connect-timeout\x01^\x01@\x02\x04s\ +elf\xdc\0\x08duration\xdd\0\0\xd2\0\x04\0+[method]request-options.set-connect-ti\ +meout\x01_\x04\0*[method]request-options.first-byte-timeout\x01^\x04\0.[method]r\ +equest-options.set-first-byte-timeout\x01_\x04\0-[method]request-options.between\ +-bytes-timeout\x01^\x04\01[method]request-options.set-between-bytes-timeout\x01_\ +\x01i(\x01i.\x01j\x01\xe1\0\x01\x1b\x01@\x02\x05param\xe0\0\x08response\xe2\0\x01\ +\0\x04\0\x1d[static]response-outparam.set\x01c\x01h+\x01@\x01\x04self\xe4\0\0*\x04\ +\0\x20[method]incoming-response.status\x01e\x01@\x01\x04self\xe4\0\0\xc6\0\x04\0\ +![method]incoming-response.headers\x01f\x01@\x01\x04self\xe4\0\0\xc9\0\x04\0![me\ +thod]incoming-response.consume\x01g\x01h,\x01i\x03\x01j\x01\xe9\0\0\x01@\x01\x04\ +self\xe8\0\0\xea\0\x04\0\x1c[method]incoming-body.stream\x01k\x01i-\x01@\x01\x04\ +this\xc8\0\0\xec\0\x04\0\x1c[static]incoming-body.finish\x01m\x01h-\x01i\x09\x01\ +@\x01\x04self\xee\0\0\xef\0\x04\0![method]future-trailers.subscribe\x01p\x01i$\x01\ +k\xf1\0\x01j\x01\xf2\0\x01\x1b\x01j\x01\xf3\0\0\x01k\xf4\0\x01@\x01\x04self\xee\0\ +\0\xf5\0\x04\0\x1b[method]future-trailers.get\x01v\x01@\x01\x07headers\xc6\0\0\xe1\ +\0\x04\0\x1e[constructor]outgoing-response\x01w\x01h.\x01@\x01\x04self\xf8\0\0*\x04\ +\0%[method]outgoing-response.status-code\x01y\x01@\x02\x04self\xf8\0\x0bstatus-c\ +ode*\0\xd2\0\x04\0)[method]outgoing-response.set-status-code\x01z\x01@\x01\x04se\ +lf\xf8\0\0\xc6\0\x04\0![method]outgoing-response.headers\x01{\x01@\x01\x04self\xf8\ +\0\0\xcf\0\x04\0\x1e[method]outgoing-response.body\x01|\x01h/\x01i\x05\x01j\x01\xfe\ +\0\0\x01@\x01\x04self\xfd\0\0\xff\0\x04\0\x1b[method]outgoing-body.write\x01\x80\ +\x01\x01j\0\x01\x1b\x01@\x02\x04this\xce\0\x08trailers\xf2\0\0\x81\x01\x04\0\x1c\ +[static]outgoing-body.finish\x01\x82\x01\x01h0\x01@\x01\x04self\x83\x01\0\xef\0\x04\ +\0*[method]future-incoming-response.subscribe\x01\x84\x01\x01i+\x01j\x01\x85\x01\ +\x01\x1b\x01j\x01\x86\x01\0\x01k\x87\x01\x01@\x01\x04self\x83\x01\0\x88\x01\x04\0\ +$[method]future-incoming-response.get\x01\x89\x01\x01h\x07\x01k\x1b\x01@\x01\x03\ +err\x8a\x01\0\x8b\x01\x04\0\x0fhttp-error-code\x01\x8c\x01\x03\0\x15wasi:http/ty\ +pes@0.2.0\x05\"\x02\x03\0\x09\x10outgoing-request\x02\x03\0\x09\x0frequest-optio\ +ns\x02\x03\0\x09\x18future-incoming-response\x02\x03\0\x09\x0aerror-code\x01B\x0f\ +\x02\x03\x02\x01#\x04\0\x10outgoing-request\x03\0\0\x02\x03\x02\x01$\x04\0\x0fre\ +quest-options\x03\0\x02\x02\x03\x02\x01%\x04\0\x18future-incoming-response\x03\0\ +\x04\x02\x03\x02\x01&\x04\0\x0aerror-code\x03\0\x06\x01i\x01\x01i\x03\x01k\x09\x01\ +i\x05\x01j\x01\x0b\x01\x07\x01@\x02\x07request\x08\x07options\x0a\0\x0c\x04\0\x06\ +handle\x01\x0d\x03\0\x20wasi:http/outgoing-handler@0.2.0\x05'\x02\x03\0\x01\x10e\ +vm-chain-config\x02\x03\0\x01\x13cosmos-chain-config\x02\x03\0\0\x09log-level\x02\ +\x03\0\x02\x17service-and-workflow-id\x02\x03\0\x02\x18workflow-and-workflow-id\x01\ +B\x1d\x02\x03\x02\x01(\x04\0\x10evm-chain-config\x03\0\0\x02\x03\x02\x01)\x04\0\x13\ +cosmos-chain-config\x03\0\x02\x02\x03\x02\x01*\x04\0\x09log-level\x03\0\x04\x02\x03\ +\x02\x01+\x04\0\x17service-and-workflow-id\x03\0\x06\x02\x03\x02\x01,\x04\0\x18w\ +orkflow-and-workflow-id\x03\0\x08\x02\x03\x02\x01\x11\x04\0\x08event-id\x03\0\x0a\ +\x01k\x01\x01@\x01\x09chain-keys\0\x0c\x04\0\x14get-evm-chain-config\x01\x0d\x01\ +k\x03\x01@\x01\x09chain-keys\0\x0e\x04\0\x17get-cosmos-chain-config\x01\x0f\x01k\ +s\x01@\x01\x03keys\0\x10\x04\0\x0aconfig-var\x01\x11\x01@\x02\x05level\x05\x07me\ +ssages\x01\0\x04\0\x03log\x01\x12\x01@\0\0\x07\x04\0\x0bget-service\x01\x13\x01@\ +\0\0\x09\x04\0\x0cget-workflow\x01\x14\x01@\0\0\x0b\x04\0\x0cget-event-id\x01\x15\ +\x03\0\x04host\x05-\x01B\x0a\x01o\x02ss\x01p\0\x01@\0\0\x01\x04\0\x0fget-environ\ +ment\x01\x02\x01ps\x01@\0\0\x03\x04\0\x0dget-arguments\x01\x04\x01ks\x01@\0\0\x05\ +\x04\0\x0binitial-cwd\x01\x06\x03\0\x1awasi:cli/environment@0.2.0\x05.\x01B\x03\x01\ +j\0\0\x01@\x01\x06status\0\x01\0\x04\0\x04exit\x01\x01\x03\0\x13wasi:cli/exit@0.\ +2.0\x05/\x01B\x05\x02\x03\x02\x01\x20\x04\0\x0cinput-stream\x03\0\0\x01i\x01\x01\ +@\0\0\x02\x04\0\x09get-stdin\x01\x03\x03\0\x14wasi:cli/stdin@0.2.0\x050\x01B\x05\ +\x02\x03\x02\x01!\x04\0\x0doutput-stream\x03\0\0\x01i\x01\x01@\0\0\x02\x04\0\x0a\ +get-stdout\x01\x03\x03\0\x15wasi:cli/stdout@0.2.0\x051\x01B\x05\x02\x03\x02\x01!\ +\x04\0\x0doutput-stream\x03\0\0\x01i\x01\x01@\0\0\x02\x04\0\x0aget-stderr\x01\x03\ +\x03\0\x15wasi:cli/stderr@0.2.0\x052\x01B\x01\x04\0\x0eterminal-input\x03\x01\x03\ +\0\x1dwasi:cli/terminal-input@0.2.0\x053\x01B\x01\x04\0\x0fterminal-output\x03\x01\ +\x03\0\x1ewasi:cli/terminal-output@0.2.0\x054\x02\x03\0\x11\x0eterminal-input\x01\ +B\x06\x02\x03\x02\x015\x04\0\x0eterminal-input\x03\0\0\x01i\x01\x01k\x02\x01@\0\0\ +\x03\x04\0\x12get-terminal-stdin\x01\x04\x03\0\x1dwasi:cli/terminal-stdin@0.2.0\x05\ +6\x02\x03\0\x12\x0fterminal-output\x01B\x06\x02\x03\x02\x017\x04\0\x0fterminal-o\ +utput\x03\0\0\x01i\x01\x01k\x02\x01@\0\0\x03\x04\0\x13get-terminal-stdout\x01\x04\ +\x03\0\x1ewasi:cli/terminal-stdout@0.2.0\x058\x01B\x06\x02\x03\x02\x017\x04\0\x0f\ +terminal-output\x03\0\0\x01i\x01\x01k\x02\x01@\0\0\x03\x04\0\x13get-terminal-std\ +err\x01\x04\x03\0\x1ewasi:cli/terminal-stderr@0.2.0\x059\x01B\x05\x01r\x02\x07se\ +condsw\x0bnanosecondsy\x04\0\x08datetime\x03\0\0\x01@\0\0\x01\x04\0\x03now\x01\x02\ +\x04\0\x0aresolution\x01\x02\x03\0\x1cwasi:clocks/wall-clock@0.2.0\x05:\x02\x03\0\ +\x08\x05error\x02\x03\0\x16\x08datetime\x01Br\x02\x03\x02\x01\x20\x04\0\x0cinput\ +-stream\x03\0\0\x02\x03\x02\x01!\x04\0\x0doutput-stream\x03\0\x02\x02\x03\x02\x01\ +;\x04\0\x05error\x03\0\x04\x02\x03\x02\x01<\x04\0\x08datetime\x03\0\x06\x01w\x04\ +\0\x08filesize\x03\0\x08\x01m\x08\x07unknown\x0cblock-device\x10character-device\ +\x09directory\x04fifo\x0dsymbolic-link\x0cregular-file\x06socket\x04\0\x0fdescri\ +ptor-type\x03\0\x0a\x01n\x06\x04read\x05write\x13file-integrity-sync\x13data-int\ +egrity-sync\x14requested-write-sync\x10mutate-directory\x04\0\x10descriptor-flag\ +s\x03\0\x0c\x01n\x01\x0esymlink-follow\x04\0\x0apath-flags\x03\0\x0e\x01n\x04\x06\ +create\x09directory\x09exclusive\x08truncate\x04\0\x0aopen-flags\x03\0\x10\x01w\x04\ +\0\x0alink-count\x03\0\x12\x01k\x07\x01r\x06\x04type\x0b\x0alink-count\x13\x04si\ +ze\x09\x15data-access-timestamp\x14\x1bdata-modification-timestamp\x14\x17status\ +-change-timestamp\x14\x04\0\x0fdescriptor-stat\x03\0\x15\x01q\x03\x09no-change\0\ +\0\x03now\0\0\x09timestamp\x01\x07\0\x04\0\x0dnew-timestamp\x03\0\x17\x01r\x02\x04\ +type\x0b\x04names\x04\0\x0fdirectory-entry\x03\0\x19\x01m%\x06access\x0bwould-bl\ +ock\x07already\x0ebad-descriptor\x04busy\x08deadlock\x05quota\x05exist\x0efile-t\ +oo-large\x15illegal-byte-sequence\x0bin-progress\x0binterrupted\x07invalid\x02io\ +\x0cis-directory\x04loop\x0etoo-many-links\x0cmessage-size\x0dname-too-long\x09n\ +o-device\x08no-entry\x07no-lock\x13insufficient-memory\x12insufficient-space\x0d\ +not-directory\x09not-empty\x0fnot-recoverable\x0bunsupported\x06no-tty\x0eno-suc\ +h-device\x08overflow\x0dnot-permitted\x04pipe\x09read-only\x0cinvalid-seek\x0ete\ +xt-file-busy\x0ccross-device\x04\0\x0aerror-code\x03\0\x1b\x01m\x06\x06normal\x0a\ +sequential\x06random\x09will-need\x09dont-need\x08no-reuse\x04\0\x06advice\x03\0\ +\x1d\x01r\x02\x05lowerw\x05upperw\x04\0\x13metadata-hash-value\x03\0\x1f\x04\0\x0a\ +descriptor\x03\x01\x04\0\x16directory-entry-stream\x03\x01\x01h!\x01i\x01\x01j\x01\ +$\x01\x1c\x01@\x02\x04self#\x06offset\x09\0%\x04\0\"[method]descriptor.read-via-\ +stream\x01&\x01i\x03\x01j\x01'\x01\x1c\x01@\x02\x04self#\x06offset\x09\0(\x04\0#\ +[method]descriptor.write-via-stream\x01)\x01@\x01\x04self#\0(\x04\0$[method]desc\ +riptor.append-via-stream\x01*\x01j\0\x01\x1c\x01@\x04\x04self#\x06offset\x09\x06\ +length\x09\x06advice\x1e\0+\x04\0\x19[method]descriptor.advise\x01,\x01@\x01\x04\ +self#\0+\x04\0\x1c[method]descriptor.sync-data\x01-\x01j\x01\x0d\x01\x1c\x01@\x01\ +\x04self#\0.\x04\0\x1c[method]descriptor.get-flags\x01/\x01j\x01\x0b\x01\x1c\x01\ +@\x01\x04self#\00\x04\0\x1b[method]descriptor.get-type\x011\x01@\x02\x04self#\x04\ +size\x09\0+\x04\0\x1b[method]descriptor.set-size\x012\x01@\x03\x04self#\x15data-\ +access-timestamp\x18\x1bdata-modification-timestamp\x18\0+\x04\0\x1c[method]desc\ +riptor.set-times\x013\x01p}\x01o\x024\x7f\x01j\x015\x01\x1c\x01@\x03\x04self#\x06\ +length\x09\x06offset\x09\06\x04\0\x17[method]descriptor.read\x017\x01j\x01\x09\x01\ +\x1c\x01@\x03\x04self#\x06buffer4\x06offset\x09\08\x04\0\x18[method]descriptor.w\ +rite\x019\x01i\"\x01j\x01:\x01\x1c\x01@\x01\x04self#\0;\x04\0![method]descriptor\ +.read-directory\x01<\x04\0\x17[method]descriptor.sync\x01-\x01@\x02\x04self#\x04\ +paths\0+\x04\0&[method]descriptor.create-directory-at\x01=\x01j\x01\x16\x01\x1c\x01\ +@\x01\x04self#\0>\x04\0\x17[method]descriptor.stat\x01?\x01@\x03\x04self#\x0apat\ +h-flags\x0f\x04paths\0>\x04\0\x1a[method]descriptor.stat-at\x01@\x01@\x05\x04sel\ +f#\x0apath-flags\x0f\x04paths\x15data-access-timestamp\x18\x1bdata-modification-\ +timestamp\x18\0+\x04\0\x1f[method]descriptor.set-times-at\x01A\x01@\x05\x04self#\ +\x0eold-path-flags\x0f\x08old-paths\x0enew-descriptor#\x08new-paths\0+\x04\0\x1a\ +[method]descriptor.link-at\x01B\x01i!\x01j\x01\xc3\0\x01\x1c\x01@\x05\x04self#\x0a\ +path-flags\x0f\x04paths\x0aopen-flags\x11\x05flags\x0d\0\xc4\0\x04\0\x1a[method]\ +descriptor.open-at\x01E\x01j\x01s\x01\x1c\x01@\x02\x04self#\x04paths\0\xc6\0\x04\ +\0\x1e[method]descriptor.readlink-at\x01G\x04\0&[method]descriptor.remove-direct\ +ory-at\x01=\x01@\x04\x04self#\x08old-paths\x0enew-descriptor#\x08new-paths\0+\x04\ +\0\x1c[method]descriptor.rename-at\x01H\x01@\x03\x04self#\x08old-paths\x08new-pa\ +ths\0+\x04\0\x1d[method]descriptor.symlink-at\x01I\x04\0![method]descriptor.unli\ +nk-file-at\x01=\x01@\x02\x04self#\x05other#\0\x7f\x04\0![method]descriptor.is-sa\ +me-object\x01J\x01j\x01\x20\x01\x1c\x01@\x01\x04self#\0\xcb\0\x04\0\x20[method]d\ +escriptor.metadata-hash\x01L\x01@\x03\x04self#\x0apath-flags\x0f\x04paths\0\xcb\0\ +\x04\0#[method]descriptor.metadata-hash-at\x01M\x01h\"\x01k\x1a\x01j\x01\xcf\0\x01\ +\x1c\x01@\x01\x04self\xce\0\0\xd0\0\x04\03[method]directory-entry-stream.read-di\ +rectory-entry\x01Q\x01h\x05\x01k\x1c\x01@\x01\x03err\xd2\0\0\xd3\0\x04\0\x15file\ +system-error-code\x01T\x03\0\x1bwasi:filesystem/types@0.2.0\x05=\x02\x03\0\x17\x0a\ +descriptor\x01B\x07\x02\x03\x02\x01>\x04\0\x0adescriptor\x03\0\0\x01i\x01\x01o\x02\ +\x02s\x01p\x03\x01@\0\0\x04\x04\0\x0fget-directories\x01\x05\x03\0\x1ewasi:files\ +ystem/preopens@0.2.0\x05?\x01B\x11\x04\0\x07network\x03\x01\x01m\x15\x07unknown\x0d\ +access-denied\x0dnot-supported\x10invalid-argument\x0dout-of-memory\x07timeout\x14\ +concurrency-conflict\x0fnot-in-progress\x0bwould-block\x0dinvalid-state\x10new-s\ +ocket-limit\x14address-not-bindable\x0eaddress-in-use\x12remote-unreachable\x12c\ +onnection-refused\x10connection-reset\x12connection-aborted\x12datagram-too-larg\ +e\x11name-unresolvable\x1atemporary-resolver-failure\x1apermanent-resolver-failu\ +re\x04\0\x0aerror-code\x03\0\x01\x01m\x02\x04ipv4\x04ipv6\x04\0\x11ip-address-fa\ +mily\x03\0\x03\x01o\x04}}}}\x04\0\x0cipv4-address\x03\0\x05\x01o\x08{{{{{{{{\x04\ +\0\x0cipv6-address\x03\0\x07\x01q\x02\x04ipv4\x01\x06\0\x04ipv6\x01\x08\0\x04\0\x0a\ +ip-address\x03\0\x09\x01r\x02\x04port{\x07address\x06\x04\0\x13ipv4-socket-addre\ +ss\x03\0\x0b\x01r\x04\x04port{\x09flow-infoy\x07address\x08\x08scope-idy\x04\0\x13\ +ipv6-socket-address\x03\0\x0d\x01q\x02\x04ipv4\x01\x0c\0\x04ipv6\x01\x0e\0\x04\0\ +\x11ip-socket-address\x03\0\x0f\x03\0\x1awasi:sockets/network@0.2.0\x05@\x02\x03\ +\0\x19\x07network\x01B\x05\x02\x03\x02\x01A\x04\0\x07network\x03\0\0\x01i\x01\x01\ +@\0\0\x02\x04\0\x10instance-network\x01\x03\x03\0#wasi:sockets/instance-network@\ +0.2.0\x05B\x02\x03\0\x19\x0aerror-code\x02\x03\0\x19\x11ip-socket-address\x02\x03\ +\0\x19\x11ip-address-family\x01BD\x02\x03\x02\x01\x1a\x04\0\x08pollable\x03\0\0\x02\ +\x03\x02\x01A\x04\0\x07network\x03\0\x02\x02\x03\x02\x01C\x04\0\x0aerror-code\x03\ +\0\x04\x02\x03\x02\x01D\x04\0\x11ip-socket-address\x03\0\x06\x02\x03\x02\x01E\x04\ +\0\x11ip-address-family\x03\0\x08\x01p}\x01r\x02\x04data\x0a\x0eremote-address\x07\ +\x04\0\x11incoming-datagram\x03\0\x0b\x01k\x07\x01r\x02\x04data\x0a\x0eremote-ad\ +dress\x0d\x04\0\x11outgoing-datagram\x03\0\x0e\x04\0\x0audp-socket\x03\x01\x04\0\ +\x18incoming-datagram-stream\x03\x01\x04\0\x18outgoing-datagram-stream\x03\x01\x01\ +h\x10\x01h\x03\x01j\0\x01\x05\x01@\x03\x04self\x13\x07network\x14\x0dlocal-addre\ +ss\x07\0\x15\x04\0\x1d[method]udp-socket.start-bind\x01\x16\x01@\x01\x04self\x13\ +\0\x15\x04\0\x1e[method]udp-socket.finish-bind\x01\x17\x01i\x11\x01i\x12\x01o\x02\ +\x18\x19\x01j\x01\x1a\x01\x05\x01@\x02\x04self\x13\x0eremote-address\x0d\0\x1b\x04\ +\0\x19[method]udp-socket.stream\x01\x1c\x01j\x01\x07\x01\x05\x01@\x01\x04self\x13\ +\0\x1d\x04\0\x20[method]udp-socket.local-address\x01\x1e\x04\0![method]udp-socke\ +t.remote-address\x01\x1e\x01@\x01\x04self\x13\0\x09\x04\0![method]udp-socket.add\ +ress-family\x01\x1f\x01j\x01}\x01\x05\x01@\x01\x04self\x13\0\x20\x04\0$[method]u\ +dp-socket.unicast-hop-limit\x01!\x01@\x02\x04self\x13\x05value}\0\x15\x04\0([met\ +hod]udp-socket.set-unicast-hop-limit\x01\"\x01j\x01w\x01\x05\x01@\x01\x04self\x13\ +\0#\x04\0&[method]udp-socket.receive-buffer-size\x01$\x01@\x02\x04self\x13\x05va\ +luew\0\x15\x04\0*[method]udp-socket.set-receive-buffer-size\x01%\x04\0#[method]u\ +dp-socket.send-buffer-size\x01$\x04\0'[method]udp-socket.set-send-buffer-size\x01\ +%\x01i\x01\x01@\x01\x04self\x13\0&\x04\0\x1c[method]udp-socket.subscribe\x01'\x01\ +h\x11\x01p\x0c\x01j\x01)\x01\x05\x01@\x02\x04self(\x0bmax-resultsw\0*\x04\0([met\ +hod]incoming-datagram-stream.receive\x01+\x01@\x01\x04self(\0&\x04\0*[method]inc\ +oming-datagram-stream.subscribe\x01,\x01h\x12\x01@\x01\x04self-\0#\x04\0+[method\ +]outgoing-datagram-stream.check-send\x01.\x01p\x0f\x01@\x02\x04self-\x09datagram\ +s/\0#\x04\0%[method]outgoing-datagram-stream.send\x010\x01@\x01\x04self-\0&\x04\0\ +*[method]outgoing-datagram-stream.subscribe\x011\x03\0\x16wasi:sockets/udp@0.2.0\ +\x05F\x02\x03\0\x1b\x0audp-socket\x01B\x0c\x02\x03\x02\x01A\x04\0\x07network\x03\ +\0\0\x02\x03\x02\x01C\x04\0\x0aerror-code\x03\0\x02\x02\x03\x02\x01E\x04\0\x11ip\ +-address-family\x03\0\x04\x02\x03\x02\x01G\x04\0\x0audp-socket\x03\0\x06\x01i\x07\ +\x01j\x01\x08\x01\x03\x01@\x01\x0eaddress-family\x05\0\x09\x04\0\x11create-udp-s\ +ocket\x01\x0a\x03\0$wasi:sockets/udp-create-socket@0.2.0\x05H\x01BT\x02\x03\x02\x01\ +\x20\x04\0\x0cinput-stream\x03\0\0\x02\x03\x02\x01!\x04\0\x0doutput-stream\x03\0\ +\x02\x02\x03\x02\x01\x1a\x04\0\x08pollable\x03\0\x04\x02\x03\x02\x01\x1f\x04\0\x08\ +duration\x03\0\x06\x02\x03\x02\x01A\x04\0\x07network\x03\0\x08\x02\x03\x02\x01C\x04\ +\0\x0aerror-code\x03\0\x0a\x02\x03\x02\x01D\x04\0\x11ip-socket-address\x03\0\x0c\ +\x02\x03\x02\x01E\x04\0\x11ip-address-family\x03\0\x0e\x01m\x03\x07receive\x04se\ +nd\x04both\x04\0\x0dshutdown-type\x03\0\x10\x04\0\x0atcp-socket\x03\x01\x01h\x12\ +\x01h\x09\x01j\0\x01\x0b\x01@\x03\x04self\x13\x07network\x14\x0dlocal-address\x0d\ +\0\x15\x04\0\x1d[method]tcp-socket.start-bind\x01\x16\x01@\x01\x04self\x13\0\x15\ +\x04\0\x1e[method]tcp-socket.finish-bind\x01\x17\x01@\x03\x04self\x13\x07network\ +\x14\x0eremote-address\x0d\0\x15\x04\0\x20[method]tcp-socket.start-connect\x01\x18\ +\x01i\x01\x01i\x03\x01o\x02\x19\x1a\x01j\x01\x1b\x01\x0b\x01@\x01\x04self\x13\0\x1c\ +\x04\0![method]tcp-socket.finish-connect\x01\x1d\x04\0\x1f[method]tcp-socket.sta\ +rt-listen\x01\x17\x04\0\x20[method]tcp-socket.finish-listen\x01\x17\x01i\x12\x01\ +o\x03\x1e\x19\x1a\x01j\x01\x1f\x01\x0b\x01@\x01\x04self\x13\0\x20\x04\0\x19[meth\ +od]tcp-socket.accept\x01!\x01j\x01\x0d\x01\x0b\x01@\x01\x04self\x13\0\"\x04\0\x20\ +[method]tcp-socket.local-address\x01#\x04\0![method]tcp-socket.remote-address\x01\ +#\x01@\x01\x04self\x13\0\x7f\x04\0\x1f[method]tcp-socket.is-listening\x01$\x01@\x01\ +\x04self\x13\0\x0f\x04\0![method]tcp-socket.address-family\x01%\x01@\x02\x04self\ +\x13\x05valuew\0\x15\x04\0*[method]tcp-socket.set-listen-backlog-size\x01&\x01j\x01\ +\x7f\x01\x0b\x01@\x01\x04self\x13\0'\x04\0%[method]tcp-socket.keep-alive-enabled\ +\x01(\x01@\x02\x04self\x13\x05value\x7f\0\x15\x04\0)[method]tcp-socket.set-keep-\ +alive-enabled\x01)\x01j\x01\x07\x01\x0b\x01@\x01\x04self\x13\0*\x04\0'[method]tc\ +p-socket.keep-alive-idle-time\x01+\x01@\x02\x04self\x13\x05value\x07\0\x15\x04\0\ ++[method]tcp-socket.set-keep-alive-idle-time\x01,\x04\0&[method]tcp-socket.keep-\ +alive-interval\x01+\x04\0*[method]tcp-socket.set-keep-alive-interval\x01,\x01j\x01\ +y\x01\x0b\x01@\x01\x04self\x13\0-\x04\0#[method]tcp-socket.keep-alive-count\x01.\ +\x01@\x02\x04self\x13\x05valuey\0\x15\x04\0'[method]tcp-socket.set-keep-alive-co\ +unt\x01/\x01j\x01}\x01\x0b\x01@\x01\x04self\x13\00\x04\0\x1c[method]tcp-socket.h\ +op-limit\x011\x01@\x02\x04self\x13\x05value}\0\x15\x04\0\x20[method]tcp-socket.s\ +et-hop-limit\x012\x01j\x01w\x01\x0b\x01@\x01\x04self\x13\03\x04\0&[method]tcp-so\ +cket.receive-buffer-size\x014\x04\0*[method]tcp-socket.set-receive-buffer-size\x01\ +&\x04\0#[method]tcp-socket.send-buffer-size\x014\x04\0'[method]tcp-socket.set-se\ +nd-buffer-size\x01&\x01i\x05\x01@\x01\x04self\x13\05\x04\0\x1c[method]tcp-socket\ +.subscribe\x016\x01@\x02\x04self\x13\x0dshutdown-type\x11\0\x15\x04\0\x1b[method\ +]tcp-socket.shutdown\x017\x03\0\x16wasi:sockets/tcp@0.2.0\x05I\x02\x03\0\x1d\x0a\ +tcp-socket\x01B\x0c\x02\x03\x02\x01A\x04\0\x07network\x03\0\0\x02\x03\x02\x01C\x04\ +\0\x0aerror-code\x03\0\x02\x02\x03\x02\x01E\x04\0\x11ip-address-family\x03\0\x04\ +\x02\x03\x02\x01J\x04\0\x0atcp-socket\x03\0\x06\x01i\x07\x01j\x01\x08\x01\x03\x01\ +@\x01\x0eaddress-family\x05\0\x09\x04\0\x11create-tcp-socket\x01\x0a\x03\0$wasi:\ +sockets/tcp-create-socket@0.2.0\x05K\x02\x03\0\x19\x0aip-address\x01B\x16\x02\x03\ +\x02\x01\x1a\x04\0\x08pollable\x03\0\0\x02\x03\x02\x01A\x04\0\x07network\x03\0\x02\ +\x02\x03\x02\x01C\x04\0\x0aerror-code\x03\0\x04\x02\x03\x02\x01L\x04\0\x0aip-add\ +ress\x03\0\x06\x04\0\x16resolve-address-stream\x03\x01\x01h\x08\x01k\x07\x01j\x01\ +\x0a\x01\x05\x01@\x01\x04self\x09\0\x0b\x04\03[method]resolve-address-stream.res\ +olve-next-address\x01\x0c\x01i\x01\x01@\x01\x04self\x09\0\x0d\x04\0([method]reso\ +lve-address-stream.subscribe\x01\x0e\x01h\x03\x01i\x08\x01j\x01\x10\x01\x05\x01@\ +\x02\x07network\x0f\x04names\0\x11\x04\0\x11resolve-addresses\x01\x12\x03\0!wasi\ +:sockets/ip-name-lookup@0.2.0\x05M\x01B\x05\x01p}\x01@\x01\x03lenw\0\0\x04\0\x10\ +get-random-bytes\x01\x01\x01@\0\0w\x04\0\x0eget-random-u64\x01\x02\x03\0\x18wasi\ +:random/random@0.2.0\x05N\x01B\x05\x01p}\x01@\x01\x03lenw\0\0\x04\0\x19get-insec\ +ure-random-bytes\x01\x01\x01@\0\0w\x04\0\x17get-insecure-random-u64\x01\x02\x03\0\ +\x1awasi:random/insecure@0.2.0\x05O\x01B\x03\x01o\x02ww\x01@\0\0\0\x04\0\x0dinse\ +cure-seed\x01\x01\x03\0\x1fwasi:random/insecure-seed@0.2.0\x05P\x01B\x1c\x01q\x03\ +\x0dno-such-store\0\0\x0daccess-denied\0\0\x05other\x01s\0\x04\0\x05error\x03\0\0\ +\x01ps\x01ks\x01r\x02\x04keys\x02\x06cursor\x03\x04\0\x0ckey-response\x03\0\x04\x04\ +\0\x06bucket\x03\x01\x01h\x06\x01p}\x01k\x08\x01j\x01\x09\x01\x01\x01@\x02\x04se\ +lf\x07\x03keys\0\x0a\x04\0\x12[method]bucket.get\x01\x0b\x01j\0\x01\x01\x01@\x03\ +\x04self\x07\x03keys\x05value\x08\0\x0c\x04\0\x12[method]bucket.set\x01\x0d\x01@\ +\x02\x04self\x07\x03keys\0\x0c\x04\0\x15[method]bucket.delete\x01\x0e\x01j\x01\x7f\ +\x01\x01\x01@\x02\x04self\x07\x03keys\0\x0f\x04\0\x15[method]bucket.exists\x01\x10\ +\x01j\x01\x05\x01\x01\x01@\x02\x04self\x07\x06cursor\x03\0\x11\x04\0\x18[method]\ +bucket.list-keys\x01\x12\x01i\x06\x01j\x01\x13\x01\x01\x01@\x01\x0aidentifiers\0\ +\x14\x04\0\x04open\x01\x15\x03\0\x20wasi:keyvalue/store@0.2.0-draft2\x05Q\x02\x03\ +\0#\x06bucket\x02\x03\0#\x05error\x01B\x18\x02\x03\x02\x01R\x04\0\x06bucket\x03\0\ +\0\x02\x03\x02\x01S\x04\0\x05error\x03\0\x02\x04\0\x03cas\x03\x01\x01i\x04\x01q\x02\ +\x0bstore-error\x01\x03\0\x0acas-failed\x01\x05\0\x04\0\x09cas-error\x03\0\x06\x01\ +h\x01\x01j\x01\x05\x01\x03\x01@\x02\x06bucket\x08\x03keys\0\x09\x04\0\x0f[static\ +]cas.new\x01\x0a\x01h\x04\x01p}\x01k\x0c\x01j\x01\x0d\x01\x03\x01@\x01\x04self\x0b\ +\0\x0e\x04\0\x13[method]cas.current\x01\x0f\x01j\x01x\x01\x03\x01@\x03\x06bucket\ +\x08\x03keys\x05deltax\0\x10\x04\0\x09increment\x01\x11\x01j\0\x01\x07\x01@\x02\x03\ +cas\x05\x05value\x0c\0\x12\x04\0\x04swap\x01\x13\x03\0\"wasi:keyvalue/atomics@0.\ +2.0-draft2\x05T\x01B\x13\x02\x03\x02\x01R\x04\0\x06bucket\x03\0\0\x02\x03\x02\x01\ +S\x04\0\x05error\x03\0\x02\x01h\x01\x01ps\x01p}\x01o\x02s\x06\x01k\x07\x01p\x08\x01\ +j\x01\x09\x01\x03\x01@\x02\x06bucket\x04\x04keys\x05\0\x0a\x04\0\x08get-many\x01\ +\x0b\x01p\x07\x01j\0\x01\x03\x01@\x02\x06bucket\x04\x0akey-values\x0c\0\x0d\x04\0\ +\x08set-many\x01\x0e\x01@\x02\x06bucket\x04\x04keys\x05\0\x0d\x04\0\x0bdelete-ma\ +ny\x01\x0f\x03\0\x20wasi:keyvalue/batch@0.2.0-draft2\x05U\x01p\x16\x01j\x01\xd6\0\ +\x01s\x01@\x01\x06packet\x14\0\xd7\0\x04\0\x0eprocess-packet\x01X\x04\0\x15handl\ +e-timer-callback\x01X\x01j\x01\x18\x01s\x01j\0\x01s\x01@\x02\x06packet\x14\x09tx\ +-result\xd9\0\0\xda\0\x04\0\x16handle-submit-callback\x01[\x04\0&wavs:aggregator\ +/aggregator-world@1.3.0\x04\0\x0b\x16\x01\0\x10aggregator-world\x03\0\0\0G\x09pr\ +oducers\x01\x0cprocessed-by\x02\x0dwit-component\x070.227.1\x10wit-bindgen-rust\x06\ +0.41.0"; +#[inline(never)] +#[doc(hidden)] +pub fn __link_custom_section_describing_imports() { + wit_bindgen_rt::maybe_link_cabi_realloc(); +} diff --git a/components/aggregator/src/gas_oracle.rs b/components/aggregator/src/gas_oracle.rs new file mode 100644 index 00000000..99d440f4 --- /dev/null +++ b/components/aggregator/src/gas_oracle.rs @@ -0,0 +1,67 @@ +use serde::Deserialize; +use wavs_wasi_utils::http::{fetch_json, http_request_get}; +use wstd::runtime::block_on; + +use crate::bindings::host::{self, LogLevel}; + +pub const ETHERSCAN_API_KEY_ENV: &str = "WAVS_ENV_ETHERSCAN_API_KEY"; + +#[derive(Deserialize)] +struct EtherscanGasOracleResponse { + result: GasOracleResult, +} + +#[derive(Deserialize)] +struct GasOracleResult { + #[serde(rename = "SafeGasPrice")] + safe_gas_price: String, + #[serde(rename = "ProposeGasPrice")] + propose_gas_price: String, + #[serde(rename = "FastGasPrice")] + fast_gas_price: String, +} + +pub fn get_gas_price() -> Result, String> { + let api_key = match std::env::var(ETHERSCAN_API_KEY_ENV) { + Ok(key) if !key.is_empty() => key, + _ => return Ok(None), + }; + + let strategy = host::config_var("gas_strategy").unwrap_or_else(|| "standard".to_string()); + + host::log( + LogLevel::Info, + &format!("Fetching gas price from Etherscan with strategy: {strategy}"), + ); + + let url = + format!("https://api.etherscan.io/api?module=gastracker&action=gasoracle&apikey={api_key}"); + + let response: EtherscanGasOracleResponse = block_on(async move { + fetch_json(http_request_get(&url).map_err(|e| format!("Failed to create request: {e}"))?) + .await + .map_err(|e| format!("Failed to fetch gas price from Etherscan: {e}")) + })?; + + let gas_price_str = match strategy.as_str() { + "fast" => &response.result.fast_gas_price, + "slow" | "safe" => &response.result.safe_gas_price, + _ => &response.result.propose_gas_price, + }; + + let gas_price_gwei: f64 = + gas_price_str.parse().map_err(|e| format!("Invalid gas price from Etherscan: {e}"))?; + + if !(0.1..=10000.0).contains(&gas_price_gwei) { + return Err(format!("Unreasonable gas price from Etherscan: {gas_price_gwei} Gwei")); + } + + let gas_price_wei = (gas_price_gwei * 1_000_000_000.0) as u128; + + host::log( + LogLevel::Info, + &format!("Successfully fetched gas price: {gas_price_gwei} Gwei ({gas_price_wei} Wei)"), + ); + + Ok(Some(gas_price_wei)) +} diff --git a/components/aggregator/src/lib.rs b/components/aggregator/src/lib.rs new file mode 100644 index 00000000..db6429b2 --- /dev/null +++ b/components/aggregator/src/lib.rs @@ -0,0 +1,105 @@ +#[allow(warnings)] +#[rustfmt::skip] +mod bindings; + +mod gas_oracle; +mod utils; + +use wavs_wasi_utils::impl_u128_conversions; + +use crate::bindings::{ + export, host, + wavs::{ + aggregator::aggregator::{EvmAddress, SubmitAction, TimerAction, U128}, + types::{core::Duration, service::Submit}, + }, + AggregatorAction, AnyTxHash, Guest, Packet, +}; + +impl_u128_conversions!(U128); + +struct Component; + +impl Guest for Component { + fn process_packet(packet: Packet) -> Result, String> { + let timer_delay_secs = host::config_var("timer_delay_secs") + .map(|delay_str| { + delay_str.parse().map_err(|e| format!("Failed to parse timer_delay_secs: {e}")) + }) + .transpose()?; + + match timer_delay_secs { + Some(secs) => { + // Use timer delay if specified + let timer_action = TimerAction { delay: Duration { secs } }; + Ok(vec![AggregatorAction::Timer(timer_action)]) + } + None => { + // No timer delay - process immediately (skip tx validation) + process_submission(packet, false) + } + } + } + + fn handle_timer_callback(packet: Packet) -> Result, String> { + process_submission(packet, true) + } + + fn handle_submit_callback( + _packet: Packet, + tx_result: Result, + ) -> Result<(), String> { + match tx_result { + Ok(_) => Ok(()), + Err(_) => Ok(()), + } + } +} + +fn process_submission(packet: Packet, validate_tx: bool) -> Result, String> { + let workflow = host::get_workflow().workflow; + + let submit_config = match workflow.submit { + Submit::None => unreachable!(), + Submit::Aggregator(aggregator_submit) => aggregator_submit.component.config, + }; + + if submit_config.is_empty() { + return Err("Workflow submit component config is empty".to_string()); + } + + let mut actions = Vec::new(); + + if validate_tx && !utils::is_valid_tx(packet.trigger_data)? { + return Ok(actions); + } + + for (chain_key, service_handler_address) in submit_config { + if host::get_evm_chain_config(&chain_key).is_some() { + let address: alloy_primitives::Address = service_handler_address + .parse() + .map_err(|e| format!("Failed to parse address for '{chain_key}': {e}"))?; + + // Get gas price from Etherscan if configured. + // Will fail the entire operation if API key is configured but fetching fails. + let gas_price = gas_oracle::get_gas_price()?; + + let submit_action = SubmitAction { + chain: chain_key.to_string(), + contract_address: EvmAddress { raw_bytes: address.to_vec() }, + gas_price: gas_price.map(|x| x.into()), + }; + + actions.push(AggregatorAction::Submit(submit_action)); + } else if host::get_cosmos_chain_config(&chain_key).is_some() { + todo!("Cosmos support coming soon...") + } else { + // Not a chain config key — skip (config may contain non-chain values) + continue; + } + } + + Ok(actions) +} + +export!(Component with_types_in bindings); diff --git a/components/aggregator/src/utils.rs b/components/aggregator/src/utils.rs new file mode 100644 index 00000000..497c74a5 --- /dev/null +++ b/components/aggregator/src/utils.rs @@ -0,0 +1,46 @@ +use alloy_network::Ethereum; +use alloy_provider::Provider; +use wavs_wasi_utils::evm::new_evm_provider; +use wstd::runtime::block_on; + +use crate::bindings::{ + host, + wavs::{aggregator::aggregator::TriggerData, types::events::TriggerDataEvmContractEvent}, +}; + +pub fn is_valid_tx(trigger_data: TriggerData) -> Result { + match trigger_data { + TriggerData::EvmContractEvent(TriggerDataEvmContractEvent { chain, log }) => { + let chain_config = host::get_evm_chain_config(&chain) + .ok_or(format!("Could not get evm chain config for {chain}"))?; + let provider = new_evm_provider::( + chain_config + .http_endpoint + .ok_or(format!("Could not get http endpoint for {chain}"))?, + ); + + let sized_hash: [u8; 32] = log + .tx_hash + .try_into() + .map_err(|_| "Could not convert tx hash to FixedBytes<32>")?; + + let maybe_tx = + block_on(async move { provider.get_transaction_by_hash(sized_hash.into()).await }) + .map_err(|e| format!("Could not query transaction via RPC {e}"))?; + + if let Some(tx) = maybe_tx { + if let Some(block_hash) = tx.block_hash { + let sized_hash: [u8; 32] = log + .block_hash + .try_into() + .map_err(|_| "Could not convert block hash to FixedBytes<32>")?; + + return Ok(block_hash == sized_hash); + } + } + + Ok(false) + } + _ => Ok(true), + } +} diff --git a/config/components.json b/config/components.json index 5f65c31a..be351911 100644 --- a/config/components.json +++ b/config/components.json @@ -4,11 +4,19 @@ "filename": "evm_price_oracle.wasm", "package_name": "evmpriceoracle", "package_version": "0.1.0", - "trigger_event": "NewTrigger(bytes)", - "trigger_json_path": "evmpriceoracle_trigger.deployedTo", - "submit_json_path": "evmpriceoracle_submit.deployedTo", - "config_values": { - "chain_name": "${CHAIN_NAME}" + "trigger": { + "event": { + "contract_json_path": "evmpriceoracle_trigger.deployedTo", + "event": "NewTrigger(bytes)" + } + }, + "submit": { + "contract_json_path": "evmpriceoracle_submit.deployedTo" + }, + "config": { + "values": { + "chain_name": "${getEnv(triggerChain)}" + } }, "env_variables": [] } @@ -18,8 +26,10 @@ "filename": "aggregator.wasm", "package_name": "aggregator", "package_version": "0.1.0", - "config_values": { - "timer_delay_secs": "${AGGREGATOR_TIMER_DELAYER_SECS}" + "config": { + "values": { + "timer_delay_secs": "${getEnv(aggregatorTimerDelaySeconds)}" + } }, "env_variables": ["WAVS_ENV_ETHERSCAN_API_KEY"] } diff --git a/deploy/build-service.ts b/deploy/build-service.ts new file mode 100644 index 00000000..62851416 --- /dev/null +++ b/deploy/build-service.ts @@ -0,0 +1,442 @@ +/** + * Build the service.json file. + * + * Usage: + * ``` + * pnpm deploy:build-service + * ``` + * + * When setting a component's config values, there are a few different ways to + * substitute values from the deployment context: + * + * 1. Use ${VAR_NAME} to substitute the environment variable VAR_NAME. + * 2. Use ${get(json.path.to.key)} to get a value from the deployment summary + * JSON file. + * 3. Use ${getEnv(field)} to get a value from the deployment environment + * defined in `./env.ts`, such as `aggregatorTimerDelaySeconds`. + */ + +import chalk from 'chalk' +import { Command } from 'commander' + +import { + processComponentConfigFile, + processComponentConfigValues, +} from './config' +import { WAVS_DOCKER_IMAGE } from './constants' +import { initProgram } from './env' +import { ComponentsConfigFile } from './types' +import { + exec, + execSilently, + expandArrayUnwraps, + keccak256, + readJson, + readJsonKey, +} from './utils' + +const program = new Command('build-service') + .description('Build the service.json') + .option( + '-e, --env ', + 'The deploy environment (dev or prod) (default: $DEPLOY_ENV from .env)' + ) + .option( + '-c, --component-config-file ', + 'The component configuration file for the service', + 'config/components.json' + ) + .option( + '-o, --output ', + 'The output file for the service.json', + '.docker/service.json' + ) + .option( + '-s, --service-manager-address ', + 'The WAVS service manager address (defaults to addresses.POAStakeRegistry from .nodes/poa_deploy.json)' + ) + .option( + '-a, --aggregator-url ', + 'The aggregator URL for the service', + 'http://127.0.0.1:8040' + ) + .option( + '--fuel-limit ', + 'The fuel limit for the service', + '1000000000000' + ) + +const main = async () => { + const { + env, + options: { + componentConfigFile, + output, + serviceManagerAddress, + aggregatorUrl, + fuelLimit, + }, + } = initProgram(program) + + console.log(chalk.blueBright(`🚀 Building ${output}...`)) + + const { + components, + aggregator_components: [aggregatorComponent], + } = readJson(componentConfigFile) + + // Read deployment summary to expand array unwraps + const deploymentSummary = readJson>( + '.docker/deployment_summary.json' + ) + + // Expand components that use array[] unwrap syntax + const expandedComponents = components.flatMap((component) => + expandArrayUnwraps(component, deploymentSummary) + ) + + const BASE_CMD = [ + 'docker', + 'run', + '--rm', + '--network', + 'host', + '-w', + '/data', + '-v', + '.:/data', + WAVS_DOCKER_IMAGE, + 'wavs-cli', + 'service', + '--json', + 'true', + '--home', + '/data', + '--file', + `/data/${output}`, + ] + + await execSilently(...BASE_CMD, 'init', '--name', env.serviceName) + + for (const component of expandedComponents) { + if (component.disabled) { + continue + } + + const arrayUnwrapInfo = component._arrayUnwraps + ? ` (${Object.entries(component._arrayUnwraps) + .map(([k, v]) => `${k}[${v}]`) + .join(', ')})` + : '' + + console.log( + chalk.greenBright( + `\nBuilding workflow for component: ${component.filename}${arrayUnwrapInfo}` + ) + ) + + const submitAddress = readJsonKey( + '.docker/deployment_summary.json', + component.submit.contract_json_path + ) + + if (!submitAddress) { + console.log( + chalk.yellowBright( + `Skipping because submit address (${component.submit.contract_json_path}) is not set` + ) + ) + continue + } + + const workflowId = JSON.parse( + await execSilently(...BASE_CMD, 'workflow', 'add') + )['workflow_id'] + + console.log(chalk.greenBright(` Workflow ID: ${workflowId}`)) + + // Trigger + + if ('block_interval' in component.trigger) { + const triggerChain = + component.trigger.block_interval.chain ?? env.triggerChain + await execSilently( + ...BASE_CMD, + 'workflow', + 'trigger', + '--id', + workflowId, + 'set-block-interval', + '--chain', + triggerChain, + '--n-blocks', + BigInt(component.trigger.block_interval.blocks).toString() + ) + console.log( + chalk.greenBright( + ` Trigger block interval: ${component.trigger.block_interval.blocks} on chain ${triggerChain}` + ) + ) + } else if ('cron' in component.trigger) { + await execSilently( + ...BASE_CMD, + 'workflow', + 'trigger', + '--id', + workflowId, + 'set-cron', + '--schedule', + component.trigger.cron.schedule, + '--start-time', + component.trigger.cron.start_time, + '--end-time', + component.trigger.cron.end_time + ) + console.log( + chalk.greenBright( + ` Trigger cron: ${component.trigger.cron.schedule}` + ) + ) + } else if ('event' in component.trigger) { + const triggerChain = component.trigger.event.chain ?? env.triggerChain + const triggerAddress = readJsonKey( + '.docker/deployment_summary.json', + component.trigger.event.contract_json_path + ) + const triggerEventHash = keccak256(component.trigger.event.event) + await execSilently( + ...BASE_CMD, + 'workflow', + 'trigger', + '--id', + workflowId, + 'set-evm', + '--chain', + triggerChain, + '--address', + triggerAddress, + '--event-hash', + triggerEventHash + ) + console.log( + chalk.greenBright( + ` Trigger event: ${component.trigger.event.event} from contract ${triggerAddress} on chain ${triggerChain}` + ) + ) + } + + // Component + + await execSilently( + ...BASE_CMD, + 'workflow', + 'component', + '--id', + workflowId, + 'set-source-registry', + '--domain', + new URL(env.registry).host, + '--package', + `${env.wasiNamespace}:${component.package_name}`, + '--version', + component.package_version + ) + + await execSilently( + ...BASE_CMD, + 'workflow', + 'component', + '--id', + workflowId, + 'permissions', + '--http-hosts', + '*', + '--file-system', + 'true' + ) + + await execSilently( + ...BASE_CMD, + 'workflow', + 'component', + '--id', + workflowId, + 'fuel-limit', + '--fuel', + fuelLimit + ) + + await execSilently( + ...BASE_CMD, + 'workflow', + 'component', + '--id', + workflowId, + 'time-limit', + '--seconds', + '30' + ) + + if (component.config) { + await execSilently( + ...BASE_CMD, + 'workflow', + 'component', + '--id', + workflowId, + 'config', + ...('file' in component.config + ? processComponentConfigFile(component.config.file, { + env, + arrayUnwraps: component._arrayUnwraps, + }) + : processComponentConfigValues( + component.config.values, + component.filename, + { env, arrayUnwraps: component._arrayUnwraps } + ) + ).flatMap(([key, value]) => ['--values', `${key}=${value}`]) + ) + } + + if (component.env_variables) { + await execSilently( + ...BASE_CMD, + 'workflow', + 'component', + '--id', + workflowId, + 'env', + ...component.env_variables.flatMap((envVar: string) => [ + '--values', + envVar, + ]) + ) + } + + // Submit (aggregator) + + await execSilently( + ...BASE_CMD, + 'workflow', + 'submit', + '--id', + workflowId, + 'set-aggregator', + '--url', + aggregatorUrl + ) + + console.log(chalk.greenBright(` Aggregator URL: ${aggregatorUrl}`)) + + await execSilently( + ...BASE_CMD, + 'workflow', + 'submit', + '--id', + workflowId, + 'component', + 'set-source-registry', + '--domain', + new URL(env.registry).host, + '--package', + `${env.wasiNamespace}:${aggregatorComponent.package_name}`, + '--version', + aggregatorComponent.package_version + ) + + await execSilently( + ...BASE_CMD, + 'workflow', + 'submit', + '--id', + workflowId, + 'component', + 'permissions', + '--http-hosts', + '*', + '--file-system', + 'true' + ) + + await execSilently( + ...BASE_CMD, + 'workflow', + 'submit', + '--id', + workflowId, + 'component', + 'config', + ...(aggregatorComponent.config + ? 'file' in aggregatorComponent.config + ? processComponentConfigFile(aggregatorComponent.config.file, { + env, + extraValues: { + [env.submitChain]: submitAddress, + }, + arrayUnwraps: component._arrayUnwraps, + }) + : processComponentConfigValues( + aggregatorComponent.config.values, + aggregatorComponent.filename, + { + env, + extraValues: { [env.submitChain]: submitAddress }, + arrayUnwraps: component._arrayUnwraps, + } + ) + : [[env.submitChain, submitAddress]] + ).flatMap(([key, value]) => ['--values', `${key}=${value}`]) + ) + + console.log( + chalk.greenBright( + ` Submit address: ${submitAddress} on chain ${env.submitChain}` + ) + ) + + if (aggregatorComponent.env_variables) { + await execSilently( + ...BASE_CMD, + 'workflow', + 'submit', + '--id', + workflowId, + 'component', + 'env', + ...aggregatorComponent.env_variables.flatMap((envVar) => [ + '--values', + envVar, + ]) + ) + } + } + + await execSilently( + ...BASE_CMD, + 'manager', + 'set-evm', + '--chain', + env.submitChain, + '--address', + serviceManagerAddress + ) + + console.log() + await exec(...BASE_CMD, 'validate') +} + +main().catch((err) => { + console.error(chalk.redBright(err.message)) + process.exit(1) +}) + +process.on('SIGINT', () => { + console.error(chalk.redBright('SIGINT received. Shutting down...')) + process.exit(1) +}) + +process.on('SIGTERM', () => { + console.error(chalk.redBright('SIGTERM received. Shutting down...')) + process.exit(1) +}) diff --git a/deploy/config.ts b/deploy/config.ts new file mode 100644 index 00000000..b42e7ac6 --- /dev/null +++ b/deploy/config.ts @@ -0,0 +1,103 @@ +import path from 'path' + +import { IEnv, ProcessConfigOptions } from './types' +import { readJson, readJsonKey } from './utils' + +/** + * Process component config file and return list of keys and values. + * + * @param file - The component config file to read + * @param options - Processing options + * @returns The list of keys and values + */ +export const processComponentConfigFile = ( + file: string, + options: ProcessConfigOptions +): [string, unknown][] => { + const config = processComponentConfigValues( + readJson( + path.resolve(path.join(__dirname, `../config/${file}.template.json`)) + ), + file, + options + ) + + return config +} + +/** + * Process component config values and return list of keys and values. + * + * Supports the following substitution patterns: + * - `${VAR_NAME}` — environment variable + * - `${get(json.path.to.key)}` — value from deployment summary JSON + * - `${join(json.path.to.array)}` — comma-joined array from deployment summary JSON + * - `${getEnv(field)}` — value from the IEnv deployment environment object + * + * @param config - The component config values + * @param name - The name/file of the component, for error messages + * @param options - Processing options + * @returns The list of keys and values + */ +export const processComponentConfigValues = ( + config: Record, + name: string, + options: ProcessConfigOptions +): [string, unknown][] => + Object.entries({ ...config, ...options.extraValues }).map(([key, value]) => { + return [ + key, + typeof value === 'string' + ? value + // Replace array[] patterns with array.{index} based on arrayUnwraps context. + .replaceAll(/\${(\w+)\[\]}/g, (_, arrayKey) => { + const index = options.arrayUnwraps?.[arrayKey] + if (index === undefined) { + throw new Error( + `Array unwrap "${arrayKey}[]" used in component "${name}" config value "${key}" but no index provided` + ) + } + return `${arrayKey}.${index}` + }) + // Replace all ${get(json.path.to.key)} patterns with the value from deployment summary. + .replaceAll(/\${get\(([^)]+)\)}/g, (_, p1) => + readJsonKey('.docker/deployment_summary.json', p1) + ) + // Replace all ${join(json.path.to.array)} patterns with comma-separated values. + .replaceAll(/\${join\(([^)]+)\)}/g, (_, p1) => { + const arr = readJsonKey('.docker/deployment_summary.json', p1) + if (!Array.isArray(arr)) { + throw new Error( + `join() expects an array but got ${typeof arr} for path "${p1}" in component "${name}" config value "${key}"` + ) + } + return arr.join(',') + }) + // Replace all ${getEnv(field)} patterns with the value from the deployment environment. + .replaceAll(/\${getEnv\(([^)]+)\)}/g, (_, p1) => { + if (!(p1 in options.env)) { + throw new Error( + `Invalid environment key: ${p1} not found in env.` + ) + } + const envVar = options.env[p1 as keyof IEnv] + if (envVar === undefined) { + throw new Error( + `Env field ${p1} does not exist in deployment environment but is needed for component "${name}" config value "${key}"` + ) + } + return envVar.toString() + }) + // Replace all ${VAR_NAME} patterns with their environment variable values. + .replaceAll(/\${\s*([^{}]+)\s*}/g, (_, p1) => { + const envVar = process.env[p1] + if (!envVar) { + throw new Error( + `Environment variable ${p1} is not set but needed for component "${name}" config value "${key}"` + ) + } + return envVar + }) + : value, + ] + }) diff --git a/deploy/constants.ts b/deploy/constants.ts new file mode 100644 index 00000000..a33da105 --- /dev/null +++ b/deploy/constants.ts @@ -0,0 +1,14 @@ +/** + * Deployment summary JSON file. + */ +export const DEPLOYMENT_SUMMARY_FILE = '.docker/deployment_summary.json' + +/** + * The WAVS Docker image. + */ +export const WAVS_DOCKER_IMAGE = 'ghcr.io/lay3rlabs/wavs:1.5.1' + +/** + * The POA Middleware Docker image. + */ +export const POA_MIDDLEWARE_IMAGE = 'ghcr.io/lay3rlabs/poa-middleware:1.0.1' diff --git a/deploy/create-aggregator.ts b/deploy/create-aggregator.ts new file mode 100644 index 00000000..7c8d83e8 --- /dev/null +++ b/deploy/create-aggregator.ts @@ -0,0 +1,218 @@ +/** + * Create a new aggregator. + * + * Usage: + * ``` + * pnpm deploy:create-aggregator + * ``` + */ + +import fs from 'fs' +import path from 'path' +import readline from 'readline' + +import chalk from 'chalk' +import { Command } from 'commander' +import { + Hex, + createPublicClient, + formatEther, + http, + parseEther, + toHex, +} from 'viem' +import { english, generateMnemonic, mnemonicToAccount } from 'viem/accounts' + +import { WAVS_DOCKER_IMAGE } from './constants' +import { initProgram } from './env' +import { execSilently, sleep } from './utils' + +const program = new Command('create-aggregator') + .description('Create a new aggregator') + .argument('[index]', 'The aggregator index (default: 1)') + .option( + '-e, --env ', + 'The deploy environment (dev or prod) (default: $DEPLOY_ENV from .env)' + ) + .option( + '-r, --rpc-url ', + 'The RPC URL for the chain (default: $RPC_URL from .env)' + ) + .option('-i, --index ', 'The aggregator index (default: 1)', (i) => + parseInt(i) + ) + .option('-f, --force', 'Override existing aggregator without confirming') + +const main = async () => { + const { + envName, + options: { index: _index, rpcUrl, force }, + } = initProgram(program) + + const client = createPublicClient({ + transport: http(rpcUrl), + }) + + if (program.args[0] !== undefined && _index !== undefined) { + throw new Error( + '❌ Cannot provide two indexes. Please only provide via -i (--index) or the first positional argument.' + ) + } + + const index = program.args[0] + ? parseInt(program.args[0]) + : _index === undefined + ? 1 + : _index + if (typeof index !== 'number' || isNaN(index) || index < 0) { + throw new Error('❌ Invalid index. Please provide a valid positive number.') + } + + console.log(chalk.blueBright(`🤖 Creating aggregator ${index}...`)) + + if (!fs.existsSync('.docker')) { + fs.mkdirSync('.docker') + } + + const containerName = `wavs-aggregator-${index}` + const readableAggregatorLocation = `infra/aggregator-${index}` + const aggregatorLocation = path.join( + __dirname, + `../${readableAggregatorLocation}` + ) + + if (fs.existsSync(aggregatorLocation)) { + if (force) { + console.log( + chalk.blueBright( + `đŸ”Ĩ Destroying existing aggregator at ${readableAggregatorLocation}...` + ) + ) + + // Kill the aggregator container if running, ignore errors + await execSilently('docker', 'kill', containerName).catch(() => {}) + + fs.rmSync(aggregatorLocation, { recursive: true }) + } else { + throw new Error( + `❌ Aggregator already exists at ${readableAggregatorLocation}. Use -f (--force) to override.` + ) + } + } + + fs.mkdirSync(aggregatorLocation, { recursive: true }) + + // If prod deployment, prompt for mnemonic + let mnemonic + if (envName === 'prod') { + const rl = readline.createInterface({ + input: process.stdin, + output: process.stdout, + }) + + mnemonic = await new Promise((resolve) => + rl.question( + 'Enter aggregator mnemonic (leave blank to generate a new one): ', + resolve + ) + ) + } + + if (!mnemonic) { + console.log(chalk.blueBright('🔑 Generating new mnemonic...')) + mnemonic = generateMnemonic(english) + } + + const account = mnemonicToAccount(mnemonic) + const privateKey = toHex(account.getHdKey().privateKey!) + + console.log( + chalk.cyanBright(`💸 Aggregator wallet address: ${account.address}`) + ) + + // Update aggregator env file with new mnemonic and private key. + fs.writeFileSync( + path.join(aggregatorLocation, '.env'), + fs + .readFileSync(path.join(__dirname, './templates/aggregator.env'), 'utf8') + .replace('INSERT_MNEMONIC_HERE', mnemonic) + .replace('INSERT_PRIVATE_KEY_HERE', privateKey) + ) + + // Create startup script + fs.writeFileSync( + path.join(aggregatorLocation, 'start.sh'), + fs + .readFileSync( + path.join(__dirname, './templates/aggregator.start.sh'), + 'utf8' + ) + .replace('INSERT_IMAGE_HERE', WAVS_DOCKER_IMAGE) + .replace('INSERT_INSTANCE_NAME_HERE', containerName) + ) + + // Copy WAVS config file if it exists + const wavsTomlSrc = path.join(__dirname, '../wavs.toml') + if (fs.existsSync(wavsTomlSrc)) { + fs.copyFileSync(wavsTomlSrc, path.join(aggregatorLocation, 'wavs.toml')) + } + + // Fund aggregator on dev + if (envName === 'dev') { + console.log(chalk.blueBright(`💸 Funding aggregator...`)) + + await client.request({ + method: 'anvil_setBalance' as any, + params: [account.address, ('0x' + parseEther('15').toString(16)) as Hex], + }) + await sleep(1) + + const balance = await client.getBalance({ + address: account.address, + }) + + console.log( + chalk.greenBright(`💰 Aggregator funded with ${formatEther(balance)} ETH`) + ) + } else { + console.log(chalk.yellowBright(`🔄 Waiting for aggregator to be funded...`)) + + while (true) { + const balance = await client.getBalance({ + address: account.address, + }) + + if (balance !== 0n) { + console.log( + chalk.greenBright( + `💰 Aggregator funded with ${formatEther(balance)} ETH` + ) + ) + break + } + + await sleep(3) + } + } + + console.log( + chalk.greenBright( + `✅ Aggregator ${index} created successfully at ${readableAggregatorLocation}` + ) + ) +} + +main().catch((err) => { + console.error(chalk.redBright(err.message)) + process.exit(1) +}) + +process.on('SIGINT', () => { + console.error(chalk.redBright('SIGINT received. Shutting down...')) + process.exit(1) +}) + +process.on('SIGTERM', () => { + console.error(chalk.redBright('SIGTERM received. Shutting down...')) + process.exit(1) +}) diff --git a/deploy/create-deployer.ts b/deploy/create-deployer.ts new file mode 100644 index 00000000..8e783a26 --- /dev/null +++ b/deploy/create-deployer.ts @@ -0,0 +1,127 @@ +/** + * Create and fund a new deployer wallet. + * + * Usage: + * ``` + * pnpm deploy:create-deployer + * ``` + */ + +import fs from 'fs' + +import chalk from 'chalk' +import { Command } from 'commander' +import { Hex, createPublicClient, formatEther, http, parseEther } from 'viem' +import { generatePrivateKey, privateKeyToAddress } from 'viem/accounts' + +import { initProgram } from './env' +import { sleep } from './utils' + +const program = new Command('create-deployer') + .description('Create and fund a new deployer wallet') + .option( + '-e, --env ', + 'The deploy environment (dev or prod) (default: $DEPLOY_ENV from .env)' + ) + .option( + '-r, --rpc-url ', + 'The RPC URL for the chain (default: $RPC_URL from .env)' + ) + +const main = async () => { + const { + envName, + options: { rpcUrl }, + dotenv: { FUNDED_KEY }, + } = initProgram(program) + + const client = createPublicClient({ + transport: http(rpcUrl), + }) + + if (!fs.existsSync('.docker')) { + fs.mkdirSync('.docker') + } + + // Create deployer key if on dev, or if one doesn't exist. + let fundedKey + if (envName === 'dev' || !FUNDED_KEY) { + console.log( + chalk.blueBright( + '🔑 Creating new deployer key and saving as FUNDED_KEY in .env...' + ) + ) + fundedKey = generatePrivateKey() + fs.writeFileSync( + '.env', + fs + .readFileSync('.env', 'utf8') + .replace(/FUNDED_KEY=[^\n]*(\n|$)/, `FUNDED_KEY=${fundedKey}\n`) + ) + } else { + console.log(chalk.blueBright('🔑 Using existing FUNDED_KEY from .env...')) + fundedKey = FUNDED_KEY + } + + if (!fundedKey) { + throw new Error('FUNDED_KEY is not set') + } + + const deployerAddress = privateKeyToAddress(fundedKey as Hex) + console.log( + chalk.cyanBright(`đŸĻ Deployer wallet address: ${deployerAddress}`) + ) + + // Fund deployer on dev + if (envName === 'dev') { + console.log(chalk.blueBright(`💸 Funding deployer...`)) + + await client.request({ + method: 'anvil_setBalance' as any, + params: [deployerAddress, ('0x' + parseEther('15').toString(16)) as Hex], + }) + await sleep(1) + + const balance = await client.getBalance({ + address: deployerAddress, + }) + + console.log( + chalk.greenBright(`✅ Deployer funded with ${formatEther(balance)} ETH`) + ) + } else { + console.log(chalk.yellowBright(`🔄 Waiting for deployer to be funded...`)) + + while (true) { + const balance = await client.getBalance({ + address: deployerAddress, + }) + + if (balance !== 0n) { + console.log( + chalk.greenBright( + `✅ Deployer funded with ${formatEther(balance)} ETH` + ) + ) + break + } + + await sleep(3) + } + } +} + +main().catch((err) => { + console.error(chalk.redBright(err.message)) + process.exit(1) +}) + +process.on('SIGINT', () => { + console.error(chalk.redBright('SIGINT received. Shutting down...')) + process.exit(1) +}) + +process.on('SIGTERM', () => { + console.error(chalk.redBright('SIGTERM received. Shutting down...')) + process.exit(1) +}) diff --git a/deploy/create-operator.ts b/deploy/create-operator.ts new file mode 100644 index 00000000..0f3049b8 --- /dev/null +++ b/deploy/create-operator.ts @@ -0,0 +1,165 @@ +/** + * Create a new operator. + * + * Usage: + * ``` + * pnpm deploy:create-operator + * ``` + */ + +import fs from 'fs' +import path from 'path' +import readline from 'readline' + +import chalk from 'chalk' +import { Command } from 'commander' +import { toHex } from 'viem' +import { english, generateMnemonic, mnemonicToAccount } from 'viem/accounts' + +import { WAVS_DOCKER_IMAGE } from './constants' +import { initProgram } from './env' +import { execSilently } from './utils' + +const program = new Command('create-operator') + .description('Create a new operator') + .argument('[index]', 'The operator index (default: 1)') + .option( + '-e, --env ', + 'The deploy environment (dev or prod) (default: $DEPLOY_ENV from .env)' + ) + .option('-i, --index ', 'The operator index (default: 1)', (i) => + parseInt(i) + ) + .option('-f, --force', 'Override existing operator without confirming') + +const main = async () => { + const { + envName, + options: { index: _index, force }, + } = initProgram(program) + + if (program.args[0] !== undefined && _index !== undefined) { + throw new Error( + '❌ Cannot provide two indexes. Please only provide via -i (--index) or the first positional argument.' + ) + } + + const index = program.args[0] + ? parseInt(program.args[0]) + : _index === undefined + ? 1 + : _index + if (typeof index !== 'number' || isNaN(index) || index < 0) { + throw new Error('❌ Invalid index. Please provide a valid positive number.') + } + + console.log(chalk.blueBright(`🤖 Creating operator ${index}...`)) + + if (!fs.existsSync('.docker')) { + fs.mkdirSync('.docker') + } + + const containerName = `wavs-${index}` + const readableOperatorLocation = `infra/${containerName}` + const operatorLocation = path.join( + __dirname, + `../${readableOperatorLocation}` + ) + + if (fs.existsSync(operatorLocation)) { + if (force) { + console.log( + chalk.blueBright( + `đŸ”Ĩ Destroying existing operator at ${readableOperatorLocation}...` + ) + ) + + // Kill the operator container if running, ignore errors + await execSilently('docker', 'kill', containerName).catch(() => {}) + + fs.rmSync(operatorLocation, { recursive: true }) + } else { + throw new Error( + `❌ Operator already exists at ${readableOperatorLocation}. Use -f (--force) to override.` + ) + } + } + + fs.mkdirSync(operatorLocation, { recursive: true }) + + // If prod deployment, prompt for mnemonic + let mnemonic + if (envName === 'prod') { + const rl = readline.createInterface({ + input: process.stdin, + output: process.stdout, + }) + + mnemonic = await new Promise((resolve) => + rl.question( + 'Enter operator mnemonic (leave blank to generate a new one): ', + resolve + ) + ) + } + + if (!mnemonic) { + console.log(chalk.blueBright('🔑 Generating new mnemonic...')) + mnemonic = generateMnemonic(english) + } + + const account = mnemonicToAccount(mnemonic) + const privateKey = toHex(account.getHdKey().privateKey!) + + console.log( + chalk.cyanBright(`💸 Operator wallet address: ${account.address}`) + ) + + // Update operator env file with new mnemonic and private key. + fs.writeFileSync( + path.join(operatorLocation, '.env'), + fs + .readFileSync(path.join(__dirname, './templates/operator.env'), 'utf8') + .replace('INSERT_MNEMONIC_HERE', mnemonic) + .replace('INSERT_PRIVATE_KEY_HERE', privateKey) + ) + + // Create startup script + fs.writeFileSync( + path.join(operatorLocation, 'start.sh'), + fs + .readFileSync( + path.join(__dirname, './templates/operator.start.sh'), + 'utf8' + ) + .replace('INSERT_IMAGE_HERE', WAVS_DOCKER_IMAGE) + .replace('INSERT_INSTANCE_NAME_HERE', containerName) + ) + + // Copy WAVS config file if it exists + const wavsTomlSrc = path.join(__dirname, '../wavs.toml') + if (fs.existsSync(wavsTomlSrc)) { + fs.copyFileSync(wavsTomlSrc, path.join(operatorLocation, 'wavs.toml')) + } + + console.log( + chalk.greenBright( + `✅ Operator ${index} created successfully at ${readableOperatorLocation}` + ) + ) +} + +main().catch((err) => { + console.error(chalk.redBright(err.message)) + process.exit(1) +}) + +process.on('SIGINT', () => { + console.error(chalk.redBright('SIGINT received. Shutting down...')) + process.exit(1) +}) + +process.on('SIGTERM', () => { + console.error(chalk.redBright('SIGTERM received. Shutting down...')) + process.exit(1) +}) diff --git a/deploy/deploy-contracts.ts b/deploy/deploy-contracts.ts new file mode 100644 index 00000000..019def4e --- /dev/null +++ b/deploy/deploy-contracts.ts @@ -0,0 +1,150 @@ +/** + * Deploy SimpleSubmit and SimpleTrigger contracts to the chain. + * + * Usage: + * ``` + * pnpm deploy:contracts + * ``` + */ + +import fs from 'fs' + +import chalk from 'chalk' +import { Command } from 'commander' + +import { DEPLOYMENT_SUMMARY_FILE } from './constants' +import { initProgram } from './env' +import { execFull } from './utils' + +const program = new Command('deploy-contracts') + .description('Deploy SimpleSubmit and SimpleTrigger contracts to the chain') + .option( + '-e, --env ', + 'The deploy environment (dev or prod) (default: $DEPLOY_ENV from .env)' + ) + .option( + '-s, --service-manager-address ', + 'The WAVS service manager address (defaults to addresses.POAStakeRegistry from .nodes/poa_deploy.json)' + ) + .option( + '-k, --funded-key ', + 'The funded private key for the deployer (default: $FUNDED_KEY from .env)' + ) + .option( + '-r, --rpc-url ', + 'The RPC URL for the chain (default: $RPC_URL from .env)' + ) + +const main = async () => { + const { + env, + options: { fundedKey, serviceManagerAddress }, + } = initProgram(program) + + if (!serviceManagerAddress) { + throw new Error( + 'Service manager address is required. Deploy POA middleware first or provide --service-manager-address.' + ) + } + + if (!fundedKey) { + throw new Error( + 'Funded key is required. Provide --funded-key or set FUNDED_KEY in .env.' + ) + } + + // Build contracts + console.log(chalk.blueBright('🔨 Building contracts...')) + await execFull({ cmd: ['forge', 'build'], log: 'all' }) + + fs.mkdirSync('.docker', { recursive: true }) + + // Deploy SimpleSubmit + console.log(chalk.blueBright('🚀 Deploying SimpleSubmit...')) + const submitOutput = await execFull({ + cmd: [ + 'forge', + 'create', + 'SimpleSubmit', + '--json', + '--broadcast', + '--rpc-url', + env.rpcUrl, + '--private-key', + '"$FUNDED_KEY"', + '--constructor-args', + serviceManagerAddress, + ], + log: 'cmd', + shell: true, + env: { FUNDED_KEY: fundedKey }, + }) + + const submitJson = JSON.parse(submitOutput.trim()) + fs.writeFileSync('.docker/submit.json', JSON.stringify(submitJson, null, 2)) + console.log( + chalk.greenBright(`✅ SimpleSubmit deployed to ${submitJson.deployedTo}`) + ) + + // Deploy SimpleTrigger + console.log(chalk.blueBright('🚀 Deploying SimpleTrigger...')) + const triggerOutput = await execFull({ + cmd: [ + 'forge', + 'create', + 'SimpleTrigger', + '--json', + '--broadcast', + '--rpc-url', + env.rpcUrl, + '--private-key', + '"$FUNDED_KEY"', + '--constructor-args', + serviceManagerAddress, + ], + log: 'cmd', + shell: true, + env: { FUNDED_KEY: fundedKey }, + }) + + const triggerJson = JSON.parse(triggerOutput.trim()) + fs.writeFileSync('.docker/trigger.json', JSON.stringify(triggerJson, null, 2)) + console.log( + chalk.greenBright(`✅ SimpleTrigger deployed to ${triggerJson.deployedTo}`) + ) + + // Write deployment summary + const deploymentSummary = { + service_id: '', + rpc_url: env.rpcUrl, + wavs_service_manager: serviceManagerAddress, + evmpriceoracle_submit: submitJson, + evmpriceoracle_trigger: triggerJson, + } + + fs.writeFileSync( + DEPLOYMENT_SUMMARY_FILE, + JSON.stringify(deploymentSummary, null, 2) + ) + + console.log( + chalk.greenBright( + '🎉 All contracts deployed successfully! Deployment summary saved to .docker/deployment_summary.json' + ) + ) +} + +main().catch((err) => { + console.error(chalk.redBright(err.message)) + process.exit(1) +}) + +process.on('SIGINT', () => { + console.error(chalk.redBright('SIGINT received. Shutting down...')) + process.exit(1) +}) + +process.on('SIGTERM', () => { + console.error(chalk.redBright('SIGTERM received. Shutting down...')) + process.exit(1) +}) diff --git a/deploy/deploy-script.ts b/deploy/deploy-script.ts new file mode 100644 index 00000000..50f209db --- /dev/null +++ b/deploy/deploy-script.ts @@ -0,0 +1,342 @@ +/** + * Deploy the entire WAVS stack. + * + * Usage: + * ``` + * pnpm deploy:full + * ``` + */ + +import fs from 'fs' +import path from 'path' +import readline from 'readline' + +import chalk from 'chalk' +import { Command } from 'commander' + +import { DEPLOYMENT_SUMMARY_FILE, POA_MIDDLEWARE_IMAGE } from './constants' +import { DEFAULT_OPTIONS, initProgram } from './env' +import { exec, execFull, loadDotenv, readJson, sleep } from './utils' + +const program = new Command('deploy-script') + .description('Deploy the entire WAVS stack.') + .option( + '-e, --env ', + 'The deploy environment (dev or prod) (default: $DEPLOY_ENV from .env)' + ) + .option('--no-component-upload', "Don't upload components") + .option('--no-contract-upload', "Don't upload contracts") + .option( + '-r, --rpc-url ', + 'The RPC URL for the chain (default: $RPC_URL from .env)' + ) + .option( + '-w, --wavs-url ', + 'The WAVS operator URL for the service', + 'http://127.0.0.1:8041' + ) + .option( + '-a, --aggregator-url ', + 'The aggregator URL for the service', + 'http://127.0.0.1:8040' + ) + .option( + '-t, --stake-threshold ', + 'The POA stake weight threshold', + (t) => parseInt(t), + 1000 + ) + .option( + '-q, --quorum ', + 'The POA quorum as a fraction (e.g. 1/2)', + '2/3' + ) + .option('-g, --ipfs-gateway ', 'The IPFS gateway to use') + +const main = async () => { + const { + envName, + env, + options: { + componentUpload, + contractUpload, + rpcUrl, + wavsUrl, + aggregatorUrl, + stakeThreshold, + quorum: _quorum, + }, + } = initProgram(program) + + const quorum = (_quorum as string) + .match(/^\s*(\d+)\s*\/\s*(\d+)\s*$/) + ?.slice(1) + if (!quorum || quorum.length !== 2 || Number(quorum[0]) > Number(quorum[1])) { + throw new Error( + "Quorum is invalid. Please ensure it's a valid fraction less than or equal to 1, like `1/2`." + ) + } + + console.log(chalk.blueBright('🚀 Starting complete WAVS deployment...')) + + // Start component upload in background + const componentUploadPromise = componentUpload + ? execFull({ + cmd: ['pnpm', 'deploy:upload-components'], + logColor: chalk.cyanBright, + }) + : null + + // Create deployer, which sets FUNDED_KEY in .env + await exec('pnpm', 'deploy:create-deployer') + + // Update FUNDED_KEY environment variable so other processes we spawn see the new one + process.env.FUNDED_KEY = loadDotenv().FUNDED_KEY + + // Deploy service manager + if (contractUpload) { + console.log(chalk.blueBright('🚀 Deploying POA Service Manager...')) + + const poaMiddlewareBase = + `docker run --rm --network host -v ./.nodes:/root/.nodes --env-file .env ${POA_MIDDLEWARE_IMAGE}`.split( + ' ' + ) + + await execFull({ + cmd: [...poaMiddlewareBase, 'deploy'], + env: { + RPC_URL: rpcUrl, + }, + }) + await sleep(1) + + await execFull({ + cmd: [ + ...poaMiddlewareBase, + 'owner_operation', + 'updateStakeThreshold', + stakeThreshold, + ], + env: { + RPC_URL: rpcUrl, + }, + }) + await sleep(1) + + await execFull({ + cmd: [...poaMiddlewareBase, 'owner_operation', 'updateQuorum', ...quorum], + env: { + RPC_URL: rpcUrl, + }, + }) + await sleep(1) + + console.log(chalk.greenBright('✅ Deployed POA Service Manager')) + } + + // Fetch service manager that we just deployed + const serviceManagerAddress = DEFAULT_OPTIONS['serviceManagerAddress']() + if (!serviceManagerAddress) { + throw new Error('Failed to retrieve service manager address.') + } + console.log( + `â„šī¸ Using WAVS service manager address: ${serviceManagerAddress}` + ) + + if (envName === 'dev') { + // Mine a block to ensure checkpoints are up to date + await exec('cast', 'rpc', 'anvil_mine', '--rpc-url', rpcUrl) + } + + // Deploy contracts + if (contractUpload) { + await exec('pnpm', 'deploy:contracts') + await sleep(1) + } + + // Wait for component upload to finish + if (componentUploadPromise) { + console.log('âŗ Waiting up to 3 minutes for component upload to finish...') + await new Promise((resolve, reject) => { + // Reject in 3 minutes if component upload not finished. + const bail = setTimeout( + () => + reject( + new Error( + '❌ Component upload not finished after 3 minutes, bailing.' + ) + ), + 3 * 60 * 1_000 + ) + + componentUploadPromise + .then(resolve) + .catch(reject) + .finally(() => clearTimeout(bail)) + }) + + console.log( + '✅ All components uploaded successfully, waiting 7 seconds for registry to update...' + ) + await sleep(7) + } + + // Build service.json + await exec('pnpm', 'deploy:build-service') + await sleep(1) + + // Wait for user to confirm service.json before uploading on prod + if (envName === 'prod') { + const rl = readline.createInterface({ + input: process.stdin, + output: process.stdout, + }) + + await new Promise((resolve) => + rl.question( + 'Make any changes you want to the service.json now. Press [Enter] to continue upload to IPFS...', + resolve + ) + ) + } + + // Upload service.json + const serviceJsonCidOutputFile = path.resolve('.docker/service-cid') + await exec('pnpm', 'deploy:upload-service', '-o', serviceJsonCidOutputFile) + await sleep(1) + + const serviceJsonCid = fs.readFileSync(serviceJsonCidOutputFile) + if (!serviceJsonCid) { + throw new Error( + `❌ service.json CID not found in ${serviceJsonCidOutputFile}` + ) + } + + // Create and start aggregator + await exec('pnpm', 'deploy:create-aggregator', '1', '-f') + await execFull({ + cmd: ['bash', './infra/aggregator-1/start.sh'], + env: { + IPFS_GATEWAY: env.ipfs.gateway, + }, + }) + await sleep(3) + + // Register service on aggregator + const res = await fetch(aggregatorUrl + '/services', { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + }, + body: JSON.stringify({ + service_manager: { + evm: { + chain: env.submitChain, + address: serviceManagerAddress, + }, + }, + }), + }) + if (!res.ok) { + throw new Error( + `❌ Failed to register service on aggregator: ${res.statusText} (${(await res.text().catch(() => '')) || ''})` + ) + } + + // Create and start operator + await exec('pnpm', 'deploy:create-operator', '1', '-f') + await execFull({ + cmd: ['bash', './infra/wavs-1/start.sh'], + env: { + IPFS_GATEWAY: env.ipfs.gateway, + }, + }) + await sleep(3) + + // Deploy the service.json to WAVS + await execFull({ + cmd: ['task', 'deploy:service'], + env: { + WAVS_ENDPOINT: wavsUrl, + SERVICE_URL: `ipfs://${serviceJsonCid}`, + IPFS_GATEWAY: env.ipfs.gateway, + }, + }) + await sleep(3) + + // Get the service ID from WAVS + const servicesRes = await fetch(wavsUrl + '/services') + if (!servicesRes.ok) { + throw new Error( + `❌ Failed to fetch services from operator: ${servicesRes.statusText} (${(await servicesRes.text().catch(() => '')) || ''})` + ) + } + + const { service_ids } = await servicesRes.json() + if ( + !service_ids || + !Array.isArray(service_ids) || + !service_ids.length || + !service_ids[0] + ) { + throw new Error('❌ WAVS operator unexpectedly returned no services') + } + + const serviceId = service_ids[0] + console.log(chalk.greenBright(`✅ Service ID: ${serviceId}`)) + + // Update the service ID in the deployment summary + const deploymentSummary = readJson(DEPLOYMENT_SUMMARY_FILE) + deploymentSummary.service_id = serviceId + fs.writeFileSync( + DEPLOYMENT_SUMMARY_FILE, + JSON.stringify(deploymentSummary, null, 2) + ) + + // Register service-specific operator + await execFull({ + cmd: ['task', 'setup-avs-signing'], + env: { + SERVICE_ID: serviceId, + HD_INDEX: '1', + }, + }) + + // Reset registry + await exec('warg', 'reset', '--registry', env.registry).catch((err) => + console.log( + chalk.yellowBright(`âš ī¸ Failed to reset registry (non-critical): ${err}`) + ) + ) + + // Run post-deploy script if it exists + const postDeployScript = path.join(__dirname, './post-deploy.sh') + if (fs.existsSync(postDeployScript)) { + console.log(chalk.blueBright(`âš™ī¸ Running ${postDeployScript}...`)) + await exec('bash', postDeployScript) + console.log(chalk.greenBright(`✅ Post-deploy script complete!`)) + } + + // On dev, set up single operator POA + if (envName === 'dev') { + console.log(chalk.blueBright('âš™ī¸ Setting up single operator POA...')) + await exec('task', 'deploy:single-operator-poa-local') + } + + console.log(chalk.greenBright('🎉🎉🎉 Deployment complete! 🎉🎉🎉')) +} + +main().catch((err) => { + console.error(chalk.redBright(err.message)) + process.exit(1) +}) + +process.on('SIGINT', () => { + console.error(chalk.redBright('SIGINT received. Shutting down...')) + process.exit(1) +}) + +process.on('SIGTERM', () => { + console.error(chalk.redBright('SIGTERM received. Shutting down...')) + process.exit(1) +}) diff --git a/deploy/env.ts b/deploy/env.ts new file mode 100644 index 00000000..1b3e7b4e --- /dev/null +++ b/deploy/env.ts @@ -0,0 +1,287 @@ +import fs from 'fs' +import path from 'path' + +import { Command } from 'commander' + +import { EnvName, EnvOverrides, IEnv, ProgramContext } from './types' +import { loadDotenv, readJsonKeyIfFileExists } from './utils' + +type NonFunctionPropertyNames = { + [K in keyof T]: T[K] extends Function ? never : K +}[keyof T] + +type OmitFunctions = Pick> + +abstract class EnvBase implements IEnv { + rpcUrl: string + registry: string + serviceName: string + wasiNamespace: string + triggerChain: string + submitChain: string + ipfs: { + pinApi: string + gateway: string + } + aggregatorTimerDelaySeconds: number + + constructor(options: OmitFunctions) { + this.rpcUrl = options.rpcUrl + this.registry = options.registry + this.serviceName = options.serviceName + this.wasiNamespace = options.wasiNamespace + this.triggerChain = options.triggerChain + this.submitChain = options.submitChain + this.ipfs = options.ipfs + this.aggregatorTimerDelaySeconds = options.aggregatorTimerDelaySeconds + } + + static get(envName: EnvName | string, overrides: EnvOverrides = {}): IEnv { + switch (envName.toLowerCase()) { + case 'dev': + return new DevEnv(overrides) + case 'prod': + return new ProdEnv(overrides) + } + + throw new Error(`Invalid environment: ${envName}`) + } + + /** + * Uploads a file to IPFS and returns the CID. + */ + abstract uploadToIpfs(file: string, apiKey?: string): Promise + + /** + * Query IPFS for a CID and return the content. + */ + async queryIpfs(uriOrCid: string): Promise { + const cid = uriOrCid.replace('ipfs://', '') + const response = await fetch(this.ipfs.gateway + cid) + + if (!response.ok) { + throw new Error( + `Failed to query IPFS: ${response.status} ${response.statusText}. Body: ${await response.text().catch(() => '')}` + ) + } + + return response.text() + } +} + +export class DevEnv extends EnvBase { + constructor({ + rpcUrl = 'http://127.0.0.1:8545', + ipfsGateway = 'http://127.0.0.1:8080/ipfs/', + }: EnvOverrides) { + super({ + rpcUrl, + registry: 'http://localhost:8090', + serviceName: 'wavs-foundry-template', + wasiNamespace: 'example', + triggerChain: 'evm:31337', + submitChain: 'evm:31337', + ipfs: { + pinApi: 'http://127.0.0.1:5001/api/v0/add?pin=true', + gateway: ipfsGateway, + }, + aggregatorTimerDelaySeconds: 0, + }) + } + + async uploadToIpfs(file: string, _apiKey?: string): Promise { + const filePath = path.resolve(file) + if (!fs.existsSync(filePath)) { + throw new Error(`File ${filePath} does not exist`) + } + + const formData = new FormData() + formData.append( + 'file', + new Blob([new Uint8Array(fs.readFileSync(filePath))]) + ) + + const response = await fetch(this.ipfs.pinApi, { + method: 'POST', + body: formData, + }) + + if (!response.ok) { + throw new Error( + `Failed to upload file to IPFS: ${response.status} ${response.statusText}. Body: ${await response.text().catch(() => '')}` + ) + } + + const { Hash } = await response.json() + + // Verify the upload by querying IPFS for the file and checking the content exists. + let error + for (let i = 0; i < 5; i++) { + try { + const content = await this.queryIpfs(Hash) + if (content) { + return Hash + } else { + throw new Error('Uploaded file content empty.') + } + } catch (err) { + await new Promise((resolve) => setTimeout(resolve, 1000)) + error = err + } + } + + throw new Error(`Failed to verify IPFS upload: ${error}`) + } +} + +export class ProdEnv extends EnvBase { + constructor({ + rpcUrl = 'https://ethereum-sepolia-rpc.publicnode.com', + ipfsGateway = 'https://gateway.pinata.cloud/ipfs/', + }: EnvOverrides) { + super({ + rpcUrl, + registry: 'https://wa.dev', + serviceName: 'wavs-foundry-template', + wasiNamespace: 'wavs-foundry', + triggerChain: 'evm:11155111', // Sepolia + submitChain: 'evm:11155111', + ipfs: { + pinApi: 'https://uploads.pinata.cloud/v3/files', + gateway: ipfsGateway, + }, + aggregatorTimerDelaySeconds: 3, + }) + } + + async uploadToIpfs(file: string, apiKey?: string): Promise { + if (!apiKey) { + throw new Error('API key is required for IPFS uploads') + } + + const filePath = path.resolve(file) + if (!fs.existsSync(filePath)) { + throw new Error(`File ${filePath} does not exist`) + } + + const formData = new FormData() + formData.append( + 'file', + new Blob([new Uint8Array(fs.readFileSync(filePath))]) + ) + formData.append('network', 'public') + formData.append('name', `service-${Date.now()}.json`) + + const response = await fetch(this.ipfs.pinApi, { + method: 'POST', + body: formData, + headers: { Authorization: `Bearer ${apiKey}` }, + }) + + if (!response.ok) { + throw new Error( + `Failed to upload file to IPFS: ${response.status} ${response.statusText}. Body: ${await response.text().catch(() => '')}` + ) + } + + const { + data: { cid }, + } = await response.json() + + // Verify the upload by querying IPFS for the file and checking the content exists. + let error + for (let i = 0; i < 5; i++) { + try { + const content = await this.queryIpfs(cid) + if (content) { + return cid + } else { + throw new Error('Uploaded file content empty.') + } + } catch (err) { + await new Promise((resolve) => setTimeout(resolve, 1000)) + error = err + } + } + + throw new Error(`Failed to verify IPFS upload: ${error}`) + } +} + +/** + * Default option values. + */ +export const DEFAULT_OPTIONS: Record string | undefined> = { + rpcUrl: () => process.env.RPC_URL, + fundedKey: () => process.env.FUNDED_KEY, + ipfsApiKey: () => process.env.WAVS_ENV_PINATA_API_KEY, + serviceManagerAddress: () => + readJsonKeyIfFileExists( + '.nodes/poa_deploy.json', + 'addresses.POAStakeRegistry' + ), +} + +/** + * Initialize the program by parsing the arguments and returning the relevant + * environment and options. + */ +export const initProgram = (program: Command): ProgramContext => { + // Copy wavs.toml from example if it doesn't exist and example exists + const wavsTomlFile = path.resolve(path.join(__dirname, '../wavs.toml')) + const exampleWavsTomlFile = path.resolve( + path.join(__dirname, '../wavs.toml.example') + ) + if (!fs.existsSync(wavsTomlFile) && fs.existsSync(exampleWavsTomlFile)) { + fs.copyFileSync(exampleWavsTomlFile, wavsTomlFile) + } + + const dotenv = loadDotenv() + + program.parse(process.argv) + + const options = program.opts() + // Set default environment before applying default options. + // Normalize legacy bash env names (LOCAL→dev, TESTNET→prod) to TypeScript names. + if (!options.env) { + const rawEnv = process.env.DEPLOY_ENV?.toLowerCase() || 'dev' + options.env = + rawEnv === 'local' ? 'dev' : rawEnv === 'testnet' ? 'prod' : rawEnv + } + + const appliedOptions = applyDefaultOptions(options) + const env = getEnv(options.env, options) + + return { + envName: options.env, + env, + options: appliedOptions, + dotenv, + } +} + +/** + * Gets the environment for the given environment name. + */ +export const getEnv = ( + envName: EnvName, + overrides: EnvOverrides = {} +): IEnv => { + const env = EnvBase.get(envName, overrides) + if (!env) { + throw new Error(`Invalid environment: ${envName}`) + } + + return env +} + +/** + * Apply default option values. + */ +export const applyDefaultOptions = (options: Record) => + Object.entries(DEFAULT_OPTIONS).reduce((acc, [key, value]) => { + if (!options[key]) { + acc[key] = value() + } + return acc + }, options) diff --git a/deploy/templates/aggregator.env b/deploy/templates/aggregator.env new file mode 100644 index 00000000..efac00c1 --- /dev/null +++ b/deploy/templates/aggregator.env @@ -0,0 +1,4 @@ +# Mnemonic for reference: INSERT_MNEMONIC_HERE +WAVS_AGGREGATOR_DATA=~/wavs/aggregator +WAVS_AGGREGATOR_CREDENTIAL="INSERT_PRIVATE_KEY_HERE" +WAVS_AGGREGATOR_HD_INDEX=0 diff --git a/deploy/templates/aggregator.start.sh b/deploy/templates/aggregator.start.sh new file mode 100644 index 00000000..1d55b25d --- /dev/null +++ b/deploy/templates/aggregator.start.sh @@ -0,0 +1,22 @@ +#!/bin/bash + +cd $(dirname "$0") || return + +IMAGE=INSERT_IMAGE_HERE +INSTANCE=INSERT_INSTANCE_NAME_HERE +IPFS_GATEWAY=${IPFS_GATEWAY:-"https://gateway.pinata.cloud/ipfs/"} + +docker kill ${INSTANCE} > /dev/null 2>&1 || true +docker rm ${INSTANCE} > /dev/null 2>&1 || true + +docker run -d --name ${INSTANCE} --network host --stop-signal SIGKILL --env-file .env -v .:/wavs -v ./data:/root/wavs ${IMAGE} wavs-aggregator --log-level info --host 0.0.0.0 --ipfs-gateway ${IPFS_GATEWAY} + +# if first argument is "log", tail the logs immediately +if [ "$1" = "log" ]; then + echo "Tailing logs for ${INSTANCE}..." + docker logs -f ${INSTANCE} +else + # otherwise give WAVS a chance to start up & health check + echo "Giving WAVS aggregator 1 second to start up & health check..." + sleep 1 +fi diff --git a/deploy/templates/operator.env b/deploy/templates/operator.env new file mode 100644 index 00000000..3c63d558 --- /dev/null +++ b/deploy/templates/operator.env @@ -0,0 +1,16 @@ +# == PROJECT == +WAVS_ENV_YOURKEYHERE="00000000000000000000000000000000" + +# WAVS +WAVS_DATA=~/wavs/data +WAVS_LOG_LEVEL="info, wavs_aggregator=debug" +WAVS_SUBMISSION_MNEMONIC="INSERT_MNEMONIC_HERE" +#WAVS_COSMOS_SUBMISSION_MNEMONIC="cosmos mnemonic here" + +# WAVS CLI +WAVS_CLI_DATA=~/wavs/cli +WAVS_CLI_LOG_LEVEL="info, wavs_cli=info, wavs_aggregator=debug" +WAVS_CLI_EVM_CREDENTIAL="INSERT_PRIVATE_KEY_HERE" +#WAVS_CLI_COSMOS_CREDENTIAL="cosmos mnemonic here" + +WAVS_ENV_PINATA_API_KEY= diff --git a/deploy/templates/operator.start.sh b/deploy/templates/operator.start.sh new file mode 100644 index 00000000..d80ae943 --- /dev/null +++ b/deploy/templates/operator.start.sh @@ -0,0 +1,28 @@ +#!/bin/bash + +cd $(dirname "$0") || return + +IMAGE=INSERT_IMAGE_HERE +INSTANCE=INSERT_INSTANCE_NAME_HERE +IPFS_GATEWAY=${IPFS_GATEWAY:-"https://gateway.pinata.cloud/ipfs/"} + +docker kill ${INSTANCE} > /dev/null 2>&1 || true +docker rm ${INSTANCE} > /dev/null 2>&1 || true + +docker run -d --name ${INSTANCE} --network host --env-file .env -v .:/root/wavs ${IMAGE} wavs --home /root/wavs --ipfs-gateway ${IPFS_GATEWAY} --host 0.0.0.0 --log-level info +sleep 0.25 + +if [ ! "$(docker ps -q -f name=${INSTANCE})" ]; then + echo "Container ${INSTANCE} is not running. Reason:" + docker run --name ${INSTANCE} --network host --env-file .env -v .:/root/wavs ${IMAGE} wavs --home /root/wavs --ipfs-gateway ${IPFS_GATEWAY} --host 0.0.0.0 --log-level info +fi + +# if first argument is "log", tail the logs immediately +if [ "$1" = "log" ]; then + echo "Tailing logs for ${INSTANCE}..." + docker logs -f ${INSTANCE} +else + # otherwise give WAVS a chance to start up & health check + echo "Giving WAVS operator 3 seconds to start up & health check..." + sleep 3 +fi diff --git a/deploy/types.ts b/deploy/types.ts new file mode 100644 index 00000000..4aba3c5c --- /dev/null +++ b/deploy/types.ts @@ -0,0 +1,100 @@ +import { DotenvParseOutput } from 'dotenv' + +export type ComponentsConfigFile = { + components: { + disabled?: boolean + filename: string + package_name: string + package_version: string + trigger: + | { + event: { + contract_json_path: string + event: string + chain?: string + } + } + | { + block_interval: { + blocks: number + chain?: string + } + } + | { + cron: { + schedule: string + start_time: string + end_time: string + } + } + submit: { + contract_json_path: string + chain?: string + } + config?: + | { + file: string + } + | { + values: Record + } + env_variables?: string[] + }[] + aggregator_components: { + disabled?: boolean + filename: string + package_name: string + package_version: string + config?: + | { + file: string + } + | { + values: Record + } + env_variables?: string[] + }[] +} + +export type EnvName = 'dev' | 'prod' + +export type IEnv = { + rpcUrl: string + registry: string + serviceName: string + wasiNamespace: string + triggerChain: string + submitChain: string + ipfs: { + pinApi: string + gateway: string + } + aggregatorTimerDelaySeconds: number + uploadToIpfs: (file: string, apiKey?: string) => Promise +} + +export type EnvOverrides = { + rpcUrl?: string + ipfsGateway?: string +} + +export type ProgramContext = { + /** The environment name */ + envName: EnvName + /** The environment context */ + env: IEnv + /** Passed in options */ + options: Record + /** The environment variables loaded from the .env file */ + dotenv: DotenvParseOutput +} + +export type ProcessConfigOptions = { + env: IEnv + extraValues?: Record + arrayUnwraps?: Record // e.g., { "networks": 0 } +} + +export type ExpandedComponent = ComponentsConfigFile['components'][number] & { + _arrayUnwraps?: Record +} diff --git a/deploy/upload-components.ts b/deploy/upload-components.ts new file mode 100644 index 00000000..605c1479 --- /dev/null +++ b/deploy/upload-components.ts @@ -0,0 +1,230 @@ +/** + * Upload components to the registry. + * + * Usage: + * ``` + * pnpm deploy:upload-components + * ``` + */ + +import fs from 'fs' +import path from 'path' + +import chalk from 'chalk' +import { Command } from 'commander' + +import { initProgram } from './env' +import { ComponentsConfigFile } from './types' +import { exec, execFull, execSilently, readJson } from './utils' + +const program = new Command('upload-components') + .description('Upload components to the registry') + .option( + '-e, --env ', + 'The deploy environment (dev or prod) (default: $DEPLOY_ENV from .env)' + ) + .option( + '-f, --folder ', + 'The folder of compiled component WASM files', + 'compiled' + ) + .option( + '-c, --component-config-file ', + 'The component configuration file for the service', + 'config/components.json' + ) + .option( + '-s, --status-file ', + 'The file to store the status of the upload' + ) + +const tempHomes = new Set() +let statusFilePath: string | null = null + +const cleanupTempHomes = () => { + for (const tempHome of tempHomes) { + fs.rmSync(tempHome, { + recursive: true, + force: true, + }) + } +} + +const main = async () => { + const { + env, + options: { componentConfigFile, folder, statusFile: _statusFile }, + } = initProgram(program) + + statusFilePath = _statusFile ? path.resolve(_statusFile) : null + if (statusFilePath) { + fs.writeFileSync(statusFilePath, 'UPLOADING') + } + + const compiledFolder = path.resolve(folder) + if (!fs.existsSync(compiledFolder)) { + throw new Error( + `Compiled folder not found: ${compiledFolder}. Run \`task build:wasi\` to build the components or correct the folder path.` + ) + } + + const { components, aggregator_components } = + readJson(componentConfigFile) + + const componentFiles = [ + ...new Set( + [...components, ...aggregator_components] + .filter((c) => !c.disabled) + .map((component) => component.filename) + ), + ] + + let componentsNeedingBuild = componentFiles.filter( + (filename) => !fs.existsSync(path.join(compiledFolder, filename)) + ) + + if (componentsNeedingBuild.length > 0) { + console.log(chalk.yellowBright(`\n🔧 Building components...`)) + await exec('task', 'build:wasi') + } + + componentsNeedingBuild = componentFiles.filter( + (filename) => !fs.existsSync(path.join(compiledFolder, filename)) + ) + + if (componentsNeedingBuild.length > 0) { + throw new Error( + `Components still missing after build: ${componentsNeedingBuild.join(', ')}` + ) + } + + const componentsToUpload = componentFiles.map( + (filename) => + components.find((c) => c.filename === filename)! || + aggregator_components.find((c) => c.filename === filename)! + ) + + const results = await Promise.allSettled( + componentsToUpload.map(async (component) => { + try { + const componentWasmPath = path.join(compiledFolder, component.filename) + if (!fs.existsSync(componentWasmPath)) { + throw new Error( + `Component file not found: ${componentWasmPath}. This should not happen.` + ) + } + + const fullName = `${env.wasiNamespace}:${component.package_name}@${component.package_version}` + console.log( + chalk.greenBright( + `🚀 Uploading ${component.filename} as ${fullName} to ${env.registry}...` + ) + ) + + // Use temporary warg home to bypass locks from other uploads + const tempHome = ( + await execSilently('mktemp', '-d', '-t', 'warg_home_XXXXXX') + ).trim() + tempHomes.add(tempHome) + + await execFull({ + cmd: ['warg', 'config', '--registry', env.registry], + env: { + WARG_HOME: tempHome, + }, + }) + + let output + try { + output = await execFull({ + cmd: [ + 'warg', + 'publish', + 'release', + '--name', + `${env.wasiNamespace}:${component.package_name}`, + '--version', + component.package_version, + componentWasmPath, + ], + log: 'none', + env: { + WARG_HOME: tempHome, + }, + }) + } catch (error) { + output = (error as Error).message + } + + await execSilently('rm', '-rf', tempHome) + + if (output.includes('Unauthorized')) { + throw new Error(`❌ ${fullName} failed: ${output}`) + } + + if ( + output.includes('already released') || + output.includes('failed to prove inclusion') + ) { + console.log( + chalk.yellowBright( + `✅ ${fullName} already released (did not re-upload)` + ) + ) + return + } + + if ( + output.includes('submitted record') || + output.includes('published version') + ) { + console.log(chalk.blueBright(`✅ ${fullName} uploaded`)) + return + } + + throw new Error(`❌ ${fullName} failed: ${output}`) + } catch (error) { + console.error(chalk.redBright(error)) + throw error + } + }) + ) + + const successful = results.filter((result) => result.status === 'fulfilled') + const failed = results.filter((result) => result.status === 'rejected') + + console.log( + chalk.greenBright( + `\n📊 Results: ✅ ${successful.length} success, ❌ ${failed.length} failed` + ) + ) + + if (failed.length > 0) { + throw new Error(`❌ ${failed.length} components failed to upload`) + } + + console.log(chalk.blueBright(`🎉 All components uploaded successfully`)) + + if (statusFilePath) { + fs.writeFileSync(statusFilePath, 'COMPLETED') + } +} + +main().catch((err) => { + console.error(chalk.redBright(err.message)) + if (statusFilePath) { + fs.writeFileSync(statusFilePath, 'ERROR') + } + cleanupTempHomes() + process.exit(1) +}) + +process.on('SIGINT', () => { + console.error(chalk.redBright('SIGINT received. Shutting down...')) + process.exit(1) +}) + +process.on('SIGTERM', () => { + console.error(chalk.redBright('SIGTERM received. Shutting down...')) + process.exit(1) +}) diff --git a/deploy/upload-service.ts b/deploy/upload-service.ts new file mode 100644 index 00000000..cabf680f --- /dev/null +++ b/deploy/upload-service.ts @@ -0,0 +1,121 @@ +/** + * Upload the service.json to IPFS and optionally set the service URI on WAVS. + * + * Usage: + * ``` + * pnpm deploy:upload-service + * ``` + */ + +import fs from 'fs' +import path from 'path' + +import chalk from 'chalk' +import { Command } from 'commander' + +import { initProgram } from './env' +import { execFull } from './utils' + +const program = new Command('upload-service') + .description( + 'Upload the service.json to IPFS and optionally set the service URI on WAVS' + ) + .option('--no-wavs', 'Do not set the service URI on WAVS') + .option( + '-e, --env ', + 'The deploy environment (dev or prod) (default: $DEPLOY_ENV from .env)' + ) + .option( + '-f, --service-file ', + 'The service.json file to upload', + '.docker/service.json' + ) + .option('-g, --ipfs-gateway ', 'The IPFS gateway to use') + .option( + '-a, --ipfs-api-key ', + 'The API key to use for the IPFS upload (defaults to $WAVS_ENV_PINATA_API_KEY from .env)' + ) + .option( + '-k, --funded-key ', + 'The funded private key for the deployer (default: $FUNDED_KEY from .env)' + ) + .option( + '-r, --rpc-url ', + 'The RPC URL for the chain (default: $RPC_URL from .env)' + ) + .option( + '-s, --service-manager-address ', + 'The WAVS service manager address (defaults to addresses.POAStakeRegistry from .nodes/poa_deploy.json)' + ) + .option('-o, --output ', 'Save the CID to a file') + +const main = async () => { + const { + env, + options: { + serviceFile, + ipfsApiKey, + fundedKey, + serviceManagerAddress, + // inverse of --no-wavs presence + wavs, + output, + }, + } = initProgram(program) + + console.log(chalk.blueBright(`🚀 Uploading ${serviceFile} to IPFS...`)) + + const cid = await env.uploadToIpfs(serviceFile, ipfsApiKey) + + // Save to output file if set + if (output) { + fs.writeFileSync(path.resolve(output), cid) + } + + console.log(chalk.greenBright(`✅ Service uploaded to IPFS: ipfs://${cid}`)) + + if (wavs) { + console.log(chalk.greenBright('Setting service URI on service manager...')) + + if (!fundedKey) { + console.error(chalk.redBright('❌ Error: FUNDED_KEY is not set')) + process.exit(1) + } + + await execFull({ + cmd: [ + 'cast', + 'send', + serviceManagerAddress, + '"setServiceURI(string)"', + `"ipfs://${cid}"`, + '--rpc-url', + env.rpcUrl, + '--private-key', + '"$FUNDED_KEY"', + ], + log: 'all', + shell: true, + env: { + FUNDED_KEY: fundedKey, + }, + }) + + console.log(chalk.greenBright('✅ Service URI updated')) + } +} + +main().catch((err) => { + console.error(chalk.redBright(err.message)) + process.exit(1) +}) + +process.on('SIGINT', () => { + console.error(chalk.redBright('SIGINT received. Shutting down...')) + process.exit(1) +}) + +process.on('SIGTERM', () => { + console.error(chalk.redBright('SIGTERM received. Shutting down...')) + process.exit(1) +}) diff --git a/deploy/utils.ts b/deploy/utils.ts new file mode 100644 index 00000000..218b1277 --- /dev/null +++ b/deploy/utils.ts @@ -0,0 +1,232 @@ +import { spawn } from 'child_process' +import fs from 'fs' +import path from 'path' + +import { keccak_256 } from '@noble/hashes/sha3.js' +import chalk, { ChalkInstance } from 'chalk' +import dotenv, { DotenvParseOutput } from 'dotenv' + +import { ComponentsConfigFile, ExpandedComponent } from './types' + +/** + * Simple dot-notation path getter (replaces lodash.get for simple paths). + */ +const getByPath = (obj: any, pathStr: string): any => + pathStr.split('.').reduce((acc: any, key: string) => acc?.[key], obj) + +/** + * Loads the environment variables from the .env file, creating from the + * .env.example file if it doesn't exist. + */ +export const loadDotenv = (): DotenvParseOutput => { + const envFile = path.resolve(path.join(__dirname, '../.env')) + if (!fs.existsSync(envFile)) { + const exampleEnvFile = path.resolve(path.join(__dirname, '../.env.example')) + if (!fs.existsSync(exampleEnvFile)) { + throw new Error( + `Example environment file ${exampleEnvFile} does not exist.` + ) + } + fs.copyFileSync(exampleEnvFile, envFile) + } + + const { error, parsed } = dotenv.config({ path: envFile }) + if (error) { + throw new Error(`Error loading .env file: ${error.message}`) + } + if (!parsed) { + throw new Error('No environment variables loaded from .env file') + } + + return parsed +} + +/** + * Reads a file and returns the contents as a string. + */ +export const readFile = (file: string): string => { + const filePath = path.resolve(file) + + if (!fs.existsSync(filePath)) { + throw new Error(`File ${filePath} does not exist`) + } + + return fs.readFileSync(filePath, 'utf8') +} + +/** + * Reads a JSON file and returns the object. Throws an error if the file does + * not exist. + */ +export const readJson = (file: string): T => JSON.parse(readFile(file)) + +/** + * Reads a JSON file and returns the object. Returns undefined if the file does + * not exist. + */ +export const readJsonIfFileExists = (file: string): T | undefined => + fs.existsSync(file) ? readJson(file) : undefined + +/** + * Reads a JSON file and returns the value of a key from the object. + * The key is a dot-notation path. + */ +export const readJsonKey = (file: string, keyPath: string): T => { + const json = readJson(file) + return getByPath(json, keyPath) as T +} + +/** + * Reads a JSON file (if it exists) and returns the value of a key from the + * object. Returns undefined if the file does not exist. + */ +export const readJsonKeyIfFileExists = ( + file: string, + keyPath: string +): T | undefined => { + const json = readJsonIfFileExists(file) + if (json) { + return getByPath(json, keyPath) as T + } + return undefined +} + +/** + * Executes a command and returns a promise that resolves when the command + * completes (with the stdout) or rejects with the status code if the command + * fails. + */ +export const execFull = ({ + cmd, + log = 'all', + logColor = chalk.blueBright, + env, + shell = false, +}: { + cmd: string[] + log?: 'cmd' | 'all' | 'none' + logColor?: ChalkInstance + env?: Record + shell?: boolean +}): Promise => + new Promise((resolve, reject) => { + const command = cmd[0] + const args = cmd.slice(1) + + if (log === 'cmd' || log === 'all') { + console.log(chalk.gray(`$ ${cmd.join(' ')}`)) + } + + const childProcess = spawn(command, args, { + stdio: 'pipe', + env: { + ...process.env, + ...env, + }, + shell, + }) + + let stdout = '' + childProcess.stdout.on('data', (data) => { + const line = data.toString() + stdout += line + if (log === 'all') { + process.stdout.write(logColor(line)) + } + }) + + let stderr = '' + childProcess.stderr.on('data', (data) => { + const line = data.toString() + stderr += line + if (log === 'all') { + process.stdout.write(chalk.redBright(line)) + } + }) + + childProcess.on('close', (code) => { + if (code === 0) { + resolve(stdout) + } else { + reject( + new Error( + `Command \`${cmd.join(' ')}\` failed with code ${code}:\n${stdout}\n${stderr}` + ) + ) + } + }) + }) + +/** + * Executes a command, logging all output to the console. + */ +export const exec = (...cmd: string[]): Promise => + execFull({ cmd, log: 'all' }) + +/** + * Executes a command silently, capturing stdout without printing. + */ +export const execSilently = (...cmd: string[]): Promise => + execFull({ cmd, log: 'none' }) + +/** + * Computes the keccak256 hash of a string and returns it as a hex string. + */ +export const keccak256 = (str: string): string => + Buffer.from(keccak_256(new TextEncoder().encode(str))).toString('hex') + +/** + * Sleep for a number of seconds. + */ +export const sleep = (seconds: number) => + new Promise((resolve) => setTimeout(resolve, seconds * 1_000)) + +/** + * Detect array unwrap patterns (e.g., "networks[]") in a component. + */ +const detectArrayUnwraps = (component: object): string[] => { + const matches = JSON.stringify(component).matchAll(/\${(\w+)\[\]}/g) + return [...new Set([...matches].map((m) => m[1]))] +} + +/** + * Expand a component for all elements of arrays using the [] unwrap syntax. + */ +export const expandArrayUnwraps = ( + component: ComponentsConfigFile['components'][number], + deploymentSummary: Record +): ExpandedComponent[] => { + if (component.disabled) { + return [component] + } + + const arrayKeys = detectArrayUnwraps(component) + if (arrayKeys.length === 0) { + return [component] + } + + if (arrayKeys.length > 1) { + throw new Error( + `Multiple array unwraps not supported yet: ${arrayKeys.join(', ')}` + ) + } + + const arrayKey = arrayKeys[0] + const array = deploymentSummary[arrayKey] as unknown[] + + if (!Array.isArray(array)) { + throw new Error( + `Array unwrap "${arrayKey}[]" used but "${arrayKey}" is not an array in deployment summary` + ) + } + + return array.map((_, index) => ({ + ...JSON.parse( + JSON.stringify(component).replaceAll( + `\${${arrayKey}[]}`, + `${arrayKey}.${index}` + ) + ), + _arrayUnwraps: { [arrayKey]: index }, + })) +} diff --git a/package-lock.json b/package-lock.json deleted file mode 100644 index 586a605a..00000000 --- a/package-lock.json +++ /dev/null @@ -1,4007 +0,0 @@ -{ - "name": "wavs-foundry-template", - "version": "0.4.0", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "wavs-foundry-template", - "version": "0.4.0", - "license": "MIT", - "dependencies": { - "@commitlint/cli": "19.3.0", - "@commitlint/config-conventional": "19.2.2", - "@defi-wonderland/natspec-smells": "1.1.6", - "@openzeppelin/contracts": "^5.2.0", - "@wavs/solidity": "0.5.0-beta.10", - "forge-std": "github:foundry-rs/forge-std#v1.9.6", - "lint-staged": ">=10", - "solhint-community": "4.0.0", - "sort-package-json": "2.10.0" - } - }, - "node_modules/@babel/code-frame": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz", - "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==", - "license": "MIT", - "dependencies": { - "@babel/helper-validator-identifier": "^7.27.1", - "js-tokens": "^4.0.0", - "picocolors": "^1.1.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz", - "integrity": "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==", - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@commitlint/cli": { - "version": "19.3.0", - "resolved": "https://registry.npmjs.org/@commitlint/cli/-/cli-19.3.0.tgz", - "integrity": "sha512-LgYWOwuDR7BSTQ9OLZ12m7F/qhNY+NpAyPBgo4YNMkACE7lGuUnuQq1yi9hz1KA4+3VqpOYl8H1rY/LYK43v7g==", - "dependencies": { - "@commitlint/format": "^19.3.0", - "@commitlint/lint": "^19.2.2", - "@commitlint/load": "^19.2.0", - "@commitlint/read": "^19.2.1", - "@commitlint/types": "^19.0.3", - "execa": "^8.0.1", - "yargs": "^17.0.0" - }, - "bin": { - "commitlint": "cli.js" - }, - "engines": { - "node": ">=v18" - } - }, - "node_modules/@commitlint/config-conventional": { - "version": "19.2.2", - "resolved": "https://registry.npmjs.org/@commitlint/config-conventional/-/config-conventional-19.2.2.tgz", - "integrity": "sha512-mLXjsxUVLYEGgzbxbxicGPggDuyWNkf25Ht23owXIH+zV2pv1eJuzLK3t1gDY5Gp6pxdE60jZnWUY5cvgL3ufw==", - "dependencies": { - "@commitlint/types": "^19.0.3", - "conventional-changelog-conventionalcommits": "^7.0.2" - }, - "engines": { - "node": ">=v18" - } - }, - "node_modules/@commitlint/config-validator": { - "version": "19.8.0", - "resolved": "https://registry.npmjs.org/@commitlint/config-validator/-/config-validator-19.8.0.tgz", - "integrity": "sha512-+r5ZvD/0hQC3w5VOHJhGcCooiAVdynFlCe2d6I9dU+PvXdV3O+fU4vipVg+6hyLbQUuCH82mz3HnT/cBQTYYuA==", - "dependencies": { - "@commitlint/types": "^19.8.0", - "ajv": "^8.11.0" - }, - "engines": { - "node": ">=v18" - } - }, - "node_modules/@commitlint/ensure": { - "version": "19.8.0", - "resolved": "https://registry.npmjs.org/@commitlint/ensure/-/ensure-19.8.0.tgz", - "integrity": "sha512-kNiNU4/bhEQ/wutI1tp1pVW1mQ0QbAjfPRo5v8SaxoVV+ARhkB8Wjg3BSseNYECPzWWfg/WDqQGIfV1RaBFQZg==", - "dependencies": { - "@commitlint/types": "^19.8.0", - "lodash.camelcase": "^4.3.0", - "lodash.kebabcase": "^4.1.1", - "lodash.snakecase": "^4.1.1", - "lodash.startcase": "^4.4.0", - "lodash.upperfirst": "^4.3.1" - }, - "engines": { - "node": ">=v18" - } - }, - "node_modules/@commitlint/execute-rule": { - "version": "19.8.0", - "resolved": "https://registry.npmjs.org/@commitlint/execute-rule/-/execute-rule-19.8.0.tgz", - "integrity": "sha512-fuLeI+EZ9x2v/+TXKAjplBJWI9CNrHnyi5nvUQGQt4WRkww/d95oVRsc9ajpt4xFrFmqMZkd/xBQHZDvALIY7A==", - "engines": { - "node": ">=v18" - } - }, - "node_modules/@commitlint/format": { - "version": "19.8.0", - "resolved": "https://registry.npmjs.org/@commitlint/format/-/format-19.8.0.tgz", - "integrity": "sha512-EOpA8IERpQstxwp/WGnDArA7S+wlZDeTeKi98WMOvaDLKbjptuHWdOYYr790iO7kTCif/z971PKPI2PkWMfOxg==", - "dependencies": { - "@commitlint/types": "^19.8.0", - "chalk": "^5.3.0" - }, - "engines": { - "node": ">=v18" - } - }, - "node_modules/@commitlint/is-ignored": { - "version": "19.8.0", - "resolved": "https://registry.npmjs.org/@commitlint/is-ignored/-/is-ignored-19.8.0.tgz", - "integrity": "sha512-L2Jv9yUg/I+jF3zikOV0rdiHUul9X3a/oU5HIXhAJLE2+TXTnEBfqYP9G5yMw/Yb40SnR764g4fyDK6WR2xtpw==", - "dependencies": { - "@commitlint/types": "^19.8.0", - "semver": "^7.6.0" - }, - "engines": { - "node": ">=v18" - } - }, - "node_modules/@commitlint/lint": { - "version": "19.8.0", - "resolved": "https://registry.npmjs.org/@commitlint/lint/-/lint-19.8.0.tgz", - "integrity": "sha512-+/NZKyWKSf39FeNpqhfMebmaLa1P90i1Nrb1SrA7oSU5GNN/lksA4z6+ZTnsft01YfhRZSYMbgGsARXvkr/VLQ==", - "dependencies": { - "@commitlint/is-ignored": "^19.8.0", - "@commitlint/parse": "^19.8.0", - "@commitlint/rules": "^19.8.0", - "@commitlint/types": "^19.8.0" - }, - "engines": { - "node": ">=v18" - } - }, - "node_modules/@commitlint/load": { - "version": "19.8.0", - "resolved": "https://registry.npmjs.org/@commitlint/load/-/load-19.8.0.tgz", - "integrity": "sha512-4rvmm3ff81Sfb+mcWT5WKlyOa+Hd33WSbirTVUer0wjS1Hv/Hzr07Uv1ULIV9DkimZKNyOwXn593c+h8lsDQPQ==", - "dependencies": { - "@commitlint/config-validator": "^19.8.0", - "@commitlint/execute-rule": "^19.8.0", - "@commitlint/resolve-extends": "^19.8.0", - "@commitlint/types": "^19.8.0", - "chalk": "^5.3.0", - "cosmiconfig": "^9.0.0", - "cosmiconfig-typescript-loader": "^6.1.0", - "lodash.isplainobject": "^4.0.6", - "lodash.merge": "^4.6.2", - "lodash.uniq": "^4.5.0" - }, - "engines": { - "node": ">=v18" - } - }, - "node_modules/@commitlint/message": { - "version": "19.8.0", - "resolved": "https://registry.npmjs.org/@commitlint/message/-/message-19.8.0.tgz", - "integrity": "sha512-qs/5Vi9bYjf+ZV40bvdCyBn5DvbuelhR6qewLE8Bh476F7KnNyLfdM/ETJ4cp96WgeeHo6tesA2TMXS0sh5X4A==", - "engines": { - "node": ">=v18" - } - }, - "node_modules/@commitlint/parse": { - "version": "19.8.0", - "resolved": "https://registry.npmjs.org/@commitlint/parse/-/parse-19.8.0.tgz", - "integrity": "sha512-YNIKAc4EXvNeAvyeEnzgvm1VyAe0/b3Wax7pjJSwXuhqIQ1/t2hD3OYRXb6D5/GffIvaX82RbjD+nWtMZCLL7Q==", - "dependencies": { - "@commitlint/types": "^19.8.0", - "conventional-changelog-angular": "^7.0.0", - "conventional-commits-parser": "^5.0.0" - }, - "engines": { - "node": ">=v18" - } - }, - "node_modules/@commitlint/read": { - "version": "19.8.0", - "resolved": "https://registry.npmjs.org/@commitlint/read/-/read-19.8.0.tgz", - "integrity": "sha512-6ywxOGYajcxK1y1MfzrOnwsXO6nnErna88gRWEl3qqOOP8MDu/DTeRkGLXBFIZuRZ7mm5yyxU5BmeUvMpNte5w==", - "dependencies": { - "@commitlint/top-level": "^19.8.0", - "@commitlint/types": "^19.8.0", - "git-raw-commits": "^4.0.0", - "minimist": "^1.2.8", - "tinyexec": "^0.3.0" - }, - "engines": { - "node": ">=v18" - } - }, - "node_modules/@commitlint/resolve-extends": { - "version": "19.8.0", - "resolved": "https://registry.npmjs.org/@commitlint/resolve-extends/-/resolve-extends-19.8.0.tgz", - "integrity": "sha512-CLanRQwuG2LPfFVvrkTrBR/L/DMy3+ETsgBqW1OvRxmzp/bbVJW0Xw23LnnExgYcsaFtos967lul1CsbsnJlzQ==", - "dependencies": { - "@commitlint/config-validator": "^19.8.0", - "@commitlint/types": "^19.8.0", - "global-directory": "^4.0.1", - "import-meta-resolve": "^4.0.0", - "lodash.mergewith": "^4.6.2", - "resolve-from": "^5.0.0" - }, - "engines": { - "node": ">=v18" - } - }, - "node_modules/@commitlint/rules": { - "version": "19.8.0", - "resolved": "https://registry.npmjs.org/@commitlint/rules/-/rules-19.8.0.tgz", - "integrity": "sha512-IZ5IE90h6DSWNuNK/cwjABLAKdy8tP8OgGVGbXe1noBEX5hSsu00uRlLu6JuruiXjWJz2dZc+YSw3H0UZyl/mA==", - "dependencies": { - "@commitlint/ensure": "^19.8.0", - "@commitlint/message": "^19.8.0", - "@commitlint/to-lines": "^19.8.0", - "@commitlint/types": "^19.8.0" - }, - "engines": { - "node": ">=v18" - } - }, - "node_modules/@commitlint/to-lines": { - "version": "19.8.0", - "resolved": "https://registry.npmjs.org/@commitlint/to-lines/-/to-lines-19.8.0.tgz", - "integrity": "sha512-3CKLUw41Cur8VMjh16y8LcsOaKbmQjAKCWlXx6B0vOUREplp6em9uIVhI8Cv934qiwkbi2+uv+mVZPnXJi1o9A==", - "engines": { - "node": ">=v18" - } - }, - "node_modules/@commitlint/top-level": { - "version": "19.8.0", - "resolved": "https://registry.npmjs.org/@commitlint/top-level/-/top-level-19.8.0.tgz", - "integrity": "sha512-Rphgoc/omYZisoNkcfaBRPQr4myZEHhLPx2/vTXNLjiCw4RgfPR1wEgUpJ9OOmDCiv5ZyIExhprNLhteqH4FuQ==", - "dependencies": { - "find-up": "^7.0.0" - }, - "engines": { - "node": ">=v18" - } - }, - "node_modules/@commitlint/types": { - "version": "19.8.0", - "resolved": "https://registry.npmjs.org/@commitlint/types/-/types-19.8.0.tgz", - "integrity": "sha512-LRjP623jPyf3Poyfb0ohMj8I3ORyBDOwXAgxxVPbSD0unJuW2mJWeiRfaQinjtccMqC5Wy1HOMfa4btKjbNxbg==", - "dependencies": { - "@types/conventional-commits-parser": "^5.0.0", - "chalk": "^5.3.0" - }, - "engines": { - "node": ">=v18" - } - }, - "node_modules/@defi-wonderland/natspec-smells": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/@defi-wonderland/natspec-smells/-/natspec-smells-1.1.6.tgz", - "integrity": "sha512-HTdZLEdBs3UakW0JQZ7vO8pb6YCoU3CPQNfLxa0Z9PWAwmgKhSZJbF8dm/okkJEJGRa0dCoOxviJw5jeK+kDiQ==", - "dependencies": { - "fast-glob": "3.3.2", - "solc-typed-ast": "18.2.4", - "yargs": "17.7.2" - }, - "bin": { - "natspec-smells": "lib/main.js" - } - }, - "node_modules/@humanwhocodes/momoa": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@humanwhocodes/momoa/-/momoa-2.0.4.tgz", - "integrity": "sha512-RE815I4arJFtt+FVeU1Tgp9/Xvecacji8w/V6XtXsWWH/wz/eNkNbhb+ny/+PlVZjV0rxQpRSQKNKE3lcktHEA==", - "license": "Apache-2.0", - "engines": { - "node": ">=10.10.0" - } - }, - "node_modules/@noble/curves": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.4.2.tgz", - "integrity": "sha512-TavHr8qycMChk8UwMld0ZDRvatedkzWfH8IiaeGCfymOP5i0hSCozz9vHOL0nkwk7HRMlFnAiKpS2jrUmSybcw==", - "dependencies": { - "@noble/hashes": "1.4.0" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/@noble/hashes": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.4.0.tgz", - "integrity": "sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==", - "engines": { - "node": ">= 16" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@openzeppelin/contracts": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@openzeppelin/contracts/-/contracts-5.3.0.tgz", - "integrity": "sha512-zj/KGoW7zxWUE8qOI++rUM18v+VeLTTzKs/DJFkSzHpQFPD/jKKF0TrMxBfGLl3kpdELCNccvB3zmofSzm4nlA==" - }, - "node_modules/@pnpm/config.env-replace": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@pnpm/config.env-replace/-/config.env-replace-1.1.0.tgz", - "integrity": "sha512-htyl8TWnKL7K/ESFa1oW2UB5lVDxuF5DpM7tBi6Hu2LNL3mWkIzNLG6N4zoCUP1lCKNxWy/3iu8mS8MvToGd6w==", - "license": "MIT", - "engines": { - "node": ">=12.22.0" - } - }, - "node_modules/@pnpm/network.ca-file": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@pnpm/network.ca-file/-/network.ca-file-1.0.2.tgz", - "integrity": "sha512-YcPQ8a0jwYU9bTdJDpXjMi7Brhkr1mXsXrUJvjqM2mQDgkRiz8jFaQGOdaLxgjtUfQgZhKy/O3cG/YwmgKaxLA==", - "license": "MIT", - "dependencies": { - "graceful-fs": "4.2.10" - }, - "engines": { - "node": ">=12.22.0" - } - }, - "node_modules/@pnpm/network.ca-file/node_modules/graceful-fs": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", - "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", - "license": "ISC" - }, - "node_modules/@pnpm/npm-conf": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@pnpm/npm-conf/-/npm-conf-2.3.1.tgz", - "integrity": "sha512-c83qWb22rNRuB0UaVCI0uRPNRr8Z0FWnEIvT47jiHAmOIUHbBOg5XvV7pM5x+rKn9HRpjxquDbXYSXr3fAKFcw==", - "license": "MIT", - "dependencies": { - "@pnpm/config.env-replace": "^1.1.0", - "@pnpm/network.ca-file": "^1.0.1", - "config-chain": "^1.1.11" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@scure/base": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.9.tgz", - "integrity": "sha512-8YKhl8GHiNI/pU2VMaofa2Tor7PJRAjwQLBBuilkJ9L5+13yVbC7JO/wS7piioAvPSwR3JKM1IJ/u4xQzbcXKg==", - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/@scure/bip32": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.4.0.tgz", - "integrity": "sha512-sVUpc0Vq3tXCkDGYVWGIZTRfnvu8LoTDaev7vbwh0omSvVORONr960MQWdKqJDCReIEmTj3PAr73O3aoxz7OPg==", - "dependencies": { - "@noble/curves": "~1.4.0", - "@noble/hashes": "~1.4.0", - "@scure/base": "~1.1.6" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/@scure/bip39": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.3.0.tgz", - "integrity": "sha512-disdg7gHuTDZtY+ZdkmLpPCk7fxZSu3gBiEGuoC1XYxv9cGx3Z6cpTggCgW6odSOOIXCiDjuGejW+aJKCY/pIQ==", - "dependencies": { - "@noble/hashes": "~1.4.0", - "@scure/base": "~1.1.6" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/@sindresorhus/is": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-5.6.0.tgz", - "integrity": "sha512-TV7t8GKYaJWsn00tFDqBw8+Uqmr8A0fRU1tvTQhyZzGv0sJCGRQL3JGMI3ucuKo3XIZdUP+Lx7/gh2t3lewy7g==", - "license": "MIT", - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sindresorhus/is?sponsor=1" - } - }, - "node_modules/@solidity-parser/parser": { - "version": "0.16.2", - "resolved": "https://registry.npmjs.org/@solidity-parser/parser/-/parser-0.16.2.tgz", - "integrity": "sha512-PI9NfoA3P8XK2VBkK5oIfRgKDsicwDZfkVq9ZTBCQYGOP1N2owgY2dyLGyU5/J/hQs8KRk55kdmvTLjy3Mu3vg==", - "dependencies": { - "antlr4ts": "^0.5.0-alpha.4" - } - }, - "node_modules/@szmarczak/http-timer": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-5.0.1.tgz", - "integrity": "sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw==", - "license": "MIT", - "dependencies": { - "defer-to-connect": "^2.0.1" - }, - "engines": { - "node": ">=14.16" - } - }, - "node_modules/@types/conventional-commits-parser": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@types/conventional-commits-parser/-/conventional-commits-parser-5.0.1.tgz", - "integrity": "sha512-7uz5EHdzz2TqoMfV7ee61Egf5y6NkcO4FB/1iCCQnbeiI1F3xzv3vK5dBCXUCLQgGYS+mUeigK1iKQzvED+QnQ==", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/http-cache-semantics": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.4.tgz", - "integrity": "sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==", - "license": "MIT" - }, - "node_modules/@types/node": { - "version": "22.15.3", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.15.3.tgz", - "integrity": "sha512-lX7HFZeHf4QG/J7tBZqrCAXwz9J5RD56Y6MpP0eJkka8p+K0RY/yBTW7CYFJ4VGCclxqOLKmiGP5juQc6MKgcw==", - "dependencies": { - "undici-types": "~6.21.0" - } - }, - "node_modules/@wavs/solidity": { - "version": "0.5.0-beta.10", - "resolved": "https://registry.npmjs.org/@wavs/solidity/-/solidity-0.5.0-beta.10.tgz", - "integrity": "sha512-59TCS2waA/mw/W6EHMY5DxyJ6x5epmBQeoAa6ce9of/SdOijTSk8c9zYpwq44I4Lgzsw6bnNp8YO80/Q3igUVw==", - "license": "MIT", - "dependencies": { - "solhint": "^6.0.0" - } - }, - "node_modules/abitype": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/abitype/-/abitype-0.7.1.tgz", - "integrity": "sha512-VBkRHTDZf9Myaek/dO3yMmOzB/y2s3Zo6nVU7yaw1G+TvCHAjwaJzNGN9yo4K5D8bU/VZXKP1EJpRhFr862PlQ==", - "peerDependencies": { - "typescript": ">=4.9.4", - "zod": "^3 >=3.19.1" - }, - "peerDependenciesMeta": { - "zod": { - "optional": true - } - } - }, - "node_modules/ajv": { - "version": "8.17.1", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", - "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", - "dependencies": { - "fast-deep-equal": "^3.1.3", - "fast-uri": "^3.0.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/ajv-errors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/ajv-errors/-/ajv-errors-1.0.1.tgz", - "integrity": "sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==", - "license": "MIT", - "peerDependencies": { - "ajv": ">=5.0.0" - } - }, - "node_modules/ansi-escapes": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-7.0.0.tgz", - "integrity": "sha512-GdYO7a61mR0fOlAsvC9/rIHf7L96sBc6dEWzeOu+KAea5bZyQRPIpojrVoI4AXGJS/ycu/fBTdLrUkA4ODrvjw==", - "dependencies": { - "environment": "^1.0.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ansi-regex": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", - "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/ansi-styles": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", - "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/antlr4": { - "version": "4.13.2", - "resolved": "https://registry.npmjs.org/antlr4/-/antlr4-4.13.2.tgz", - "integrity": "sha512-QiVbZhyy4xAZ17UPEuG3YTOt8ZaoeOR1CvEAqrEsDBsOqINslaB147i9xqljZqoyf5S+EUlGStaj+t22LT9MOg==", - "engines": { - "node": ">=16" - } - }, - "node_modules/antlr4ts": { - "version": "0.5.0-alpha.4", - "resolved": "https://registry.npmjs.org/antlr4ts/-/antlr4ts-0.5.0-alpha.4.tgz", - "integrity": "sha512-WPQDt1B74OfPv/IMS2ekXAKkTZIHl88uMetg6q3OTqgFxZ/dxDXI0EWLyZid/1Pe6hTftyg5N7gel5wNAGxXyQ==" - }, - "node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" - }, - "node_modules/array-ify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-ify/-/array-ify-1.0.0.tgz", - "integrity": "sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng==" - }, - "node_modules/ast-parents": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/ast-parents/-/ast-parents-0.0.1.tgz", - "integrity": "sha512-XHusKxKz3zoYk1ic8Un640joHbFMhbqneyoZfoKnEGtf2ey9Uh/IdpcQplODdO/kENaMIWsD0nJm4+wX3UNLHA==" - }, - "node_modules/astral-regex": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", - "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" - }, - "node_modules/available-typed-arrays": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", - "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", - "dependencies": { - "possible-typed-array-names": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/axios": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.9.0.tgz", - "integrity": "sha512-re4CqKTJaURpzbLHtIi6XpDv20/CnpXOtjRY5/CU32L8gU8ek9UIivcfvSWvmKEngmVbrUtPpdDwWDWL7DNHvg==", - "dependencies": { - "follow-redirects": "^1.15.6", - "form-data": "^4.0.0", - "proxy-from-env": "^1.1.0" - } - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" - }, - "node_modules/better-ajv-errors": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/better-ajv-errors/-/better-ajv-errors-2.0.2.tgz", - "integrity": "sha512-1cLrJXEq46n0hjV8dDYwg9LKYjDb3KbeW7nZTv4kvfoDD9c2DXHIE31nxM+Y/cIfXMggLUfmxbm6h/JoM/yotA==", - "license": "Apache-2.0", - "dependencies": { - "@babel/code-frame": "^7.27.1", - "@humanwhocodes/momoa": "^2.0.4", - "chalk": "^4.1.2", - "jsonpointer": "^5.0.1", - "leven": "^3.1.0 < 4" - }, - "engines": { - "node": ">= 18.20.6" - }, - "peerDependencies": { - "ajv": "4.11.8 - 8" - } - }, - "node_modules/better-ajv-errors/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/better-ajv-errors/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/braces": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", - "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", - "dependencies": { - "fill-range": "^7.1.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cacheable-lookup": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-7.0.0.tgz", - "integrity": "sha512-+qJyx4xiKra8mZrcwhjMRMUhD5NR1R8esPkzIYxX96JiecFoxAXFuz/GpR3+ev4PE1WamHip78wV0vcmPQtp8w==", - "license": "MIT", - "engines": { - "node": ">=14.16" - } - }, - "node_modules/cacheable-request": { - "version": "10.2.14", - "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-10.2.14.tgz", - "integrity": "sha512-zkDT5WAF4hSSoUgyfg5tFIxz8XQK+25W/TLVojJTMKBaxevLBBtLxgqguAuVQB8PVW79FVjHcU+GJ9tVbDZ9mQ==", - "license": "MIT", - "dependencies": { - "@types/http-cache-semantics": "^4.0.2", - "get-stream": "^6.0.1", - "http-cache-semantics": "^4.1.1", - "keyv": "^4.5.3", - "mimic-response": "^4.0.0", - "normalize-url": "^8.0.0", - "responselike": "^3.0.0" - }, - "engines": { - "node": ">=14.16" - } - }, - "node_modules/cacheable-request/node_modules/get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/call-bind": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz", - "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==", - "dependencies": { - "call-bind-apply-helpers": "^1.0.0", - "es-define-property": "^1.0.0", - "get-intrinsic": "^1.2.4", - "set-function-length": "^1.2.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/call-bind-apply-helpers": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", - "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", - "dependencies": { - "es-errors": "^1.3.0", - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/call-bound": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", - "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", - "dependencies": { - "call-bind-apply-helpers": "^1.0.2", - "get-intrinsic": "^1.3.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "engines": { - "node": ">=6" - } - }, - "node_modules/chalk": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.4.1.tgz", - "integrity": "sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w==", - "engines": { - "node": "^12.17.0 || ^14.13 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/cli-cursor": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-5.0.0.tgz", - "integrity": "sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==", - "dependencies": { - "restore-cursor": "^5.0.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/cli-truncate": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-4.0.0.tgz", - "integrity": "sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA==", - "dependencies": { - "slice-ansi": "^5.0.0", - "string-width": "^7.0.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/cliui": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", - "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/cliui/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/cliui/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/cliui/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" - }, - "node_modules/cliui/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "engines": { - "node": ">=8" - } - }, - "node_modules/cliui/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cliui/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cliui/node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "node_modules/colorette": { - "version": "2.0.20", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", - "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==" - }, - "node_modules/combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dependencies": { - "delayed-stream": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/command-exists": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/command-exists/-/command-exists-1.2.9.tgz", - "integrity": "sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w==" - }, - "node_modules/commander": { - "version": "13.1.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-13.1.0.tgz", - "integrity": "sha512-/rFeCpNJQbhSZjGVwO9RFV3xPqbnERS8MmIQzCtD/zl6gpJuV/bMLuN92oG3F7d8oDEHHRrujSXNUr8fpjntKw==", - "engines": { - "node": ">=18" - } - }, - "node_modules/compare-func": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/compare-func/-/compare-func-2.0.0.tgz", - "integrity": "sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==", - "dependencies": { - "array-ify": "^1.0.0", - "dot-prop": "^5.1.0" - } - }, - "node_modules/config-chain": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz", - "integrity": "sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==", - "license": "MIT", - "dependencies": { - "ini": "^1.3.4", - "proto-list": "~1.2.1" - } - }, - "node_modules/config-chain/node_modules/ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", - "license": "ISC" - }, - "node_modules/conventional-changelog-angular": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-7.0.0.tgz", - "integrity": "sha512-ROjNchA9LgfNMTTFSIWPzebCwOGFdgkEq45EnvvrmSLvCtAw0HSmrCs7/ty+wAeYUZyNay0YMUNYFTRL72PkBQ==", - "dependencies": { - "compare-func": "^2.0.0" - }, - "engines": { - "node": ">=16" - } - }, - "node_modules/conventional-changelog-conventionalcommits": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/conventional-changelog-conventionalcommits/-/conventional-changelog-conventionalcommits-7.0.2.tgz", - "integrity": "sha512-NKXYmMR/Hr1DevQegFB4MwfM5Vv0m4UIxKZTTYuD98lpTknaZlSRrDOG4X7wIXpGkfsYxZTghUN+Qq+T0YQI7w==", - "dependencies": { - "compare-func": "^2.0.0" - }, - "engines": { - "node": ">=16" - } - }, - "node_modules/conventional-commits-parser": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-5.0.0.tgz", - "integrity": "sha512-ZPMl0ZJbw74iS9LuX9YIAiW8pfM5p3yh2o/NbXHbkFuZzY5jvdi5jFycEOkmBW5H5I7nA+D6f3UcsCLP2vvSEA==", - "dependencies": { - "is-text-path": "^2.0.0", - "JSONStream": "^1.3.5", - "meow": "^12.0.1", - "split2": "^4.0.0" - }, - "bin": { - "conventional-commits-parser": "cli.mjs" - }, - "engines": { - "node": ">=16" - } - }, - "node_modules/cosmiconfig": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-9.0.0.tgz", - "integrity": "sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==", - "dependencies": { - "env-paths": "^2.2.1", - "import-fresh": "^3.3.0", - "js-yaml": "^4.1.0", - "parse-json": "^5.2.0" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/d-fischer" - }, - "peerDependencies": { - "typescript": ">=4.9.5" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/cosmiconfig-typescript-loader": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/cosmiconfig-typescript-loader/-/cosmiconfig-typescript-loader-6.1.0.tgz", - "integrity": "sha512-tJ1w35ZRUiM5FeTzT7DtYWAFFv37ZLqSRkGi2oeCK1gPhvaWjkAtfXvLmvE1pRfxxp9aQo6ba/Pvg1dKj05D4g==", - "dependencies": { - "jiti": "^2.4.1" - }, - "engines": { - "node": ">=v18" - }, - "peerDependencies": { - "@types/node": "*", - "cosmiconfig": ">=9", - "typescript": ">=5" - } - }, - "node_modules/cross-spawn": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", - "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/dargs": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/dargs/-/dargs-8.1.0.tgz", - "integrity": "sha512-wAV9QHOsNbwnWdNW2FYvE1P56wtgSbM+3SZcdGiWQILwVjACCXDCI3Ai8QlCjMDB8YK5zySiXZYBiwGmNY3lnw==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/debug": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", - "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/decimal.js": { - "version": "10.5.0", - "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.5.0.tgz", - "integrity": "sha512-8vDa8Qxvr/+d94hSh5P3IJwI5t8/c0KsMp+g8bNw9cY2icONa5aPfvKeieW1WlG0WQYwwhJ7mjui2xtiePQSXw==" - }, - "node_modules/decompress-response": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", - "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", - "license": "MIT", - "dependencies": { - "mimic-response": "^3.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/decompress-response/node_modules/mimic-response": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", - "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/deep-extend": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", - "license": "MIT", - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/defer-to-connect": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz", - "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==", - "license": "MIT", - "engines": { - "node": ">=10" - } - }, - "node_modules/define-data-property": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", - "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", - "dependencies": { - "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "gopd": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/detect-file": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz", - "integrity": "sha512-DtCOLG98P007x7wiiOmfI0fi3eIKyWiLTGJ2MDnVi/E04lWGbf+JzrRHMm0rgIIZJGtHpKpbVgLWHrv8xXpc3Q==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/detect-indent": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-7.0.1.tgz", - "integrity": "sha512-Mc7QhQ8s+cLrnUfU/Ji94vG/r8M26m8f++vyres4ZoojaRDpZ1eSIh/EpzLNwlWuvzSZ3UbDFspjFvTDXe6e/g==", - "engines": { - "node": ">=12.20" - } - }, - "node_modules/detect-newline": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-4.0.1.tgz", - "integrity": "sha512-qE3Veg1YXzGHQhlA6jzebZN2qVf6NX+A7m7qlhCGG30dJixrAQhYOsJjsnBjJkCSmuOPpCk30145fr8FV0bzog==", - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dependencies": { - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/dot-prop": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", - "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", - "dependencies": { - "is-obj": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/dunder-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", - "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", - "dependencies": { - "call-bind-apply-helpers": "^1.0.1", - "es-errors": "^1.3.0", - "gopd": "^1.2.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/emoji-regex": { - "version": "10.4.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.4.0.tgz", - "integrity": "sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==" - }, - "node_modules/env-paths": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", - "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", - "engines": { - "node": ">=6" - } - }, - "node_modules/environment": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/environment/-/environment-1.1.0.tgz", - "integrity": "sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dependencies": { - "is-arrayish": "^0.2.1" - } - }, - "node_modules/es-define-property": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", - "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-errors": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", - "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-object-atoms": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", - "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", - "dependencies": { - "es-errors": "^1.3.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-set-tostringtag": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", - "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", - "dependencies": { - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.6", - "has-tostringtag": "^1.0.2", - "hasown": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/escalade": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", - "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", - "engines": { - "node": ">=6" - } - }, - "node_modules/ethereum-cryptography": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-2.2.1.tgz", - "integrity": "sha512-r/W8lkHSiTLxUxW8Rf3u4HGB0xQweG2RyETjywylKZSzLWoWAijRz8WCuOtJ6wah+avllXBqZuk29HCCvhEIRg==", - "dependencies": { - "@noble/curves": "1.4.2", - "@noble/hashes": "1.4.0", - "@scure/bip32": "1.4.0", - "@scure/bip39": "1.3.0" - } - }, - "node_modules/eventemitter3": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", - "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==" - }, - "node_modules/execa": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz", - "integrity": "sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==", - "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^8.0.1", - "human-signals": "^5.0.0", - "is-stream": "^3.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^5.1.0", - "onetime": "^6.0.0", - "signal-exit": "^4.1.0", - "strip-final-newline": "^3.0.0" - }, - "engines": { - "node": ">=16.17" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "node_modules/expand-tilde": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", - "integrity": "sha512-A5EmesHW6rfnZ9ysHQjPdJRni0SRar0tjtG5MNtm9n5TUvsYU8oozprtRD4AqHxcZWWlVuAmQo2nWKfN9oyjTw==", - "dependencies": { - "homedir-polyfill": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" - }, - "node_modules/fast-diff": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz", - "integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==" - }, - "node_modules/fast-glob": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", - "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - }, - "engines": { - "node": ">=8.6.0" - } - }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" - }, - "node_modules/fast-uri": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.6.tgz", - "integrity": "sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/fastify" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/fastify" - } - ] - }, - "node_modules/fastq": { - "version": "1.19.1", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz", - "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==", - "dependencies": { - "reusify": "^1.0.4" - } - }, - "node_modules/fill-range": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", - "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/find-up": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-7.0.0.tgz", - "integrity": "sha512-YyZM99iHrqLKjmt4LJDj58KI+fYyufRLBSYcqycxf//KpBk9FoewoGX0450m9nB44qrZnovzC2oeP5hUibxc/g==", - "dependencies": { - "locate-path": "^7.2.0", - "path-exists": "^5.0.0", - "unicorn-magic": "^0.1.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/findup-sync": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-5.0.0.tgz", - "integrity": "sha512-MzwXju70AuyflbgeOhzvQWAvvQdo1XL0A9bVvlXsYcFEBM87WR4OakL4OfZq+QRmr+duJubio+UtNQCPsVESzQ==", - "dependencies": { - "detect-file": "^1.0.0", - "is-glob": "^4.0.3", - "micromatch": "^4.0.4", - "resolve-dir": "^1.0.1" - }, - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/follow-redirects": { - "version": "1.15.9", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.9.tgz", - "integrity": "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==", - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/RubenVerborgh" - } - ], - "engines": { - "node": ">=4.0" - }, - "peerDependenciesMeta": { - "debug": { - "optional": true - } - } - }, - "node_modules/for-each": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.5.tgz", - "integrity": "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==", - "dependencies": { - "is-callable": "^1.2.7" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/forge-std": { - "version": "1.9.6", - "resolved": "git+ssh://git@github.com/foundry-rs/forge-std.git#3b20d60d14b343ee4f908cb8079495c07f5e8981" - }, - "node_modules/form-data": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.2.tgz", - "integrity": "sha512-hGfm/slu0ZabnNt4oaRZ6uREyfCj6P4fT/n6A1rGV+Z0VdGXjfOhVUpkn6qVQONHGIFwmveGXyDs75+nr6FM8w==", - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "es-set-tostringtag": "^2.1.0", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/form-data-encoder": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-2.1.4.tgz", - "integrity": "sha512-yDYSgNMraqvnxiEXO4hi88+YZxaHC6QKzb5N84iRCTDeRO7ZALpir/lVmf/uXUhnwUr2O4HU8s/n6x+yNjQkHw==", - "license": "MIT", - "engines": { - "node": ">= 14.17" - } - }, - "node_modules/fs-extra": { - "version": "11.3.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.0.tgz", - "integrity": "sha512-Z4XaCL6dUDHfP/jT25jJKMmtxvuwbkrD1vNSMFlo9lNLY2c5FHYSQgHPRZUjAB26TpDEoW9HCOgplrdbaPV/ew==", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=14.14" - } - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" - }, - "node_modules/function-bind": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", - "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "engines": { - "node": "6.* || 8.* || >= 10.*" - } - }, - "node_modules/get-east-asian-width": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.3.0.tgz", - "integrity": "sha512-vpeMIQKxczTD/0s2CdEWHcb0eeJe6TFjxb+J5xgX7hScxqrGuyjmv4c1D4A/gelKfyox0gJJwIHF+fLjeaM8kQ==", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/get-intrinsic": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", - "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", - "dependencies": { - "call-bind-apply-helpers": "^1.0.2", - "es-define-property": "^1.0.1", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.1.1", - "function-bind": "^1.1.2", - "get-proto": "^1.0.1", - "gopd": "^1.2.0", - "has-symbols": "^1.1.0", - "hasown": "^2.0.2", - "math-intrinsics": "^1.1.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", - "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", - "dependencies": { - "dunder-proto": "^1.0.1", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/get-stdin": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-9.0.0.tgz", - "integrity": "sha512-dVKBjfWisLAicarI2Sf+JuBE/DghV4UzNAVe9yhEJuzeREd3JhOTE9cUaJTeSa77fsbQUK3pcOpJfM59+VKZaA==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/get-stream": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-8.0.1.tgz", - "integrity": "sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==", - "engines": { - "node": ">=16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/git-hooks-list": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/git-hooks-list/-/git-hooks-list-3.2.0.tgz", - "integrity": "sha512-ZHG9a1gEhUMX1TvGrLdyWb9kDopCBbTnI8z4JgRMYxsijWipgjSEYoPWqBuIB0DnRnvqlQSEeVmzpeuPm7NdFQ==", - "funding": { - "url": "https://github.com/fisker/git-hooks-list?sponsor=1" - } - }, - "node_modules/git-raw-commits": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/git-raw-commits/-/git-raw-commits-4.0.0.tgz", - "integrity": "sha512-ICsMM1Wk8xSGMowkOmPrzo2Fgmfo4bMHLNX6ytHjajRJUqvHOw/TFapQ+QG75c3X/tTDDhOSRPGC52dDbNM8FQ==", - "dependencies": { - "dargs": "^8.0.0", - "meow": "^12.0.1", - "split2": "^4.0.0" - }, - "bin": { - "git-raw-commits": "cli.mjs" - }, - "engines": { - "node": ">=16" - } - }, - "node_modules/glob": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", - "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", - "deprecated": "Glob versions prior to v9 are no longer supported", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^5.0.1", - "once": "^1.3.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/global-directory": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/global-directory/-/global-directory-4.0.1.tgz", - "integrity": "sha512-wHTUcDUoZ1H5/0iVqEudYW4/kAlN5cZ3j/bXn0Dpbizl9iaUVeWSHqiOjsgk6OW2bkLclbBjzewBz6weQ1zA2Q==", - "dependencies": { - "ini": "4.1.1" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/global-modules": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz", - "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==", - "dependencies": { - "global-prefix": "^1.0.1", - "is-windows": "^1.0.1", - "resolve-dir": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/global-prefix": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz", - "integrity": "sha512-5lsx1NUDHtSjfg0eHlmYvZKv8/nVqX4ckFbM+FrGcQ+04KWcWFo9P5MxPZYSzUvyzmdTbI7Eix8Q4IbELDqzKg==", - "dependencies": { - "expand-tilde": "^2.0.2", - "homedir-polyfill": "^1.0.1", - "ini": "^1.3.4", - "is-windows": "^1.0.1", - "which": "^1.2.14" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/global-prefix/node_modules/ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" - }, - "node_modules/global-prefix/node_modules/which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "which": "bin/which" - } - }, - "node_modules/globby": { - "version": "13.2.2", - "resolved": "https://registry.npmjs.org/globby/-/globby-13.2.2.tgz", - "integrity": "sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==", - "dependencies": { - "dir-glob": "^3.0.1", - "fast-glob": "^3.3.0", - "ignore": "^5.2.4", - "merge2": "^1.4.1", - "slash": "^4.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/gopd": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", - "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/got": { - "version": "12.6.1", - "resolved": "https://registry.npmjs.org/got/-/got-12.6.1.tgz", - "integrity": "sha512-mThBblvlAF1d4O5oqyvN+ZxLAYwIJK7bpMxgYqPD9okW0C3qm5FFn7k811QrcuEBwaogR3ngOFoCfs6mRv7teQ==", - "license": "MIT", - "dependencies": { - "@sindresorhus/is": "^5.2.0", - "@szmarczak/http-timer": "^5.0.1", - "cacheable-lookup": "^7.0.0", - "cacheable-request": "^10.2.8", - "decompress-response": "^6.0.0", - "form-data-encoder": "^2.1.2", - "get-stream": "^6.0.1", - "http2-wrapper": "^2.1.10", - "lowercase-keys": "^3.0.0", - "p-cancelable": "^3.0.0", - "responselike": "^3.0.0" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sindresorhus/got?sponsor=1" - } - }, - "node_modules/got/node_modules/get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" - }, - "node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/has-property-descriptors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", - "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", - "dependencies": { - "es-define-property": "^1.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-symbols": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", - "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-tostringtag": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", - "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", - "dependencies": { - "has-symbols": "^1.0.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/hasown": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", - "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", - "dependencies": { - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/homedir-polyfill": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz", - "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==", - "dependencies": { - "parse-passwd": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/http-cache-semantics": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.2.0.tgz", - "integrity": "sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ==", - "license": "BSD-2-Clause" - }, - "node_modules/http2-wrapper": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-2.2.1.tgz", - "integrity": "sha512-V5nVw1PAOgfI3Lmeaj2Exmeg7fenjhRUgz1lPSezy1CuhPYbgQtbQj4jZfEAEMlaL+vupsvhjqCyjzob0yxsmQ==", - "license": "MIT", - "dependencies": { - "quick-lru": "^5.1.1", - "resolve-alpn": "^1.2.0" - }, - "engines": { - "node": ">=10.19.0" - } - }, - "node_modules/human-signals": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-5.0.0.tgz", - "integrity": "sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==", - "engines": { - "node": ">=16.17.0" - } - }, - "node_modules/ignore": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", - "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", - "engines": { - "node": ">= 4" - } - }, - "node_modules/import-fresh": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", - "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", - "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/import-fresh/node_modules/resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "engines": { - "node": ">=4" - } - }, - "node_modules/import-meta-resolve": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/import-meta-resolve/-/import-meta-resolve-4.1.0.tgz", - "integrity": "sha512-I6fiaX09Xivtk+THaMfAwnA3MVA5Big1WHF1Dfx9hFuvNIWpXnorlkzhcQf6ehrqQiiZECRt1poOAkPmer3ruw==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "node_modules/ini": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.1.tgz", - "integrity": "sha512-QQnnxNyfvmHFIsj7gkPcYymR8Jdw/o7mp5ZFihxn6h8Ci6fh3Dx4E1gPjpQEpIuPo9XVNY/ZUwh4BPMjGyL01g==", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/is-arguments": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.2.0.tgz", - "integrity": "sha512-7bVbi0huj/wrIAOzb8U1aszg9kdi3KN/CyU19CTI7tAoZYEZoL9yCDXpbXN+uPsuWnP02cyug1gleqq+TU+YCA==", - "dependencies": { - "call-bound": "^1.0.2", - "has-tostringtag": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==" - }, - "node_modules/is-callable": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", - "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-fullwidth-code-point": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz", - "integrity": "sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-generator-function": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.1.0.tgz", - "integrity": "sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ==", - "dependencies": { - "call-bound": "^1.0.3", - "get-proto": "^1.0.0", - "has-tostringtag": "^1.0.2", - "safe-regex-test": "^1.1.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-obj": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", - "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", - "engines": { - "node": ">=8" - } - }, - "node_modules/is-plain-obj": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", - "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-regex": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz", - "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==", - "dependencies": { - "call-bound": "^1.0.2", - "gopd": "^1.2.0", - "has-tostringtag": "^1.0.2", - "hasown": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", - "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-text-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-text-path/-/is-text-path-2.0.0.tgz", - "integrity": "sha512-+oDTluR6WEjdXEJMnC2z6A4FRwFoYuvShVVEGsS7ewc0UTi2QtAKMDJuL4BDEVt+5T7MjFo12RP8ghOM75oKJw==", - "dependencies": { - "text-extensions": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-typed-array": { - "version": "1.1.15", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.15.tgz", - "integrity": "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==", - "dependencies": { - "which-typed-array": "^1.1.16" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-windows": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" - }, - "node_modules/jiti": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.4.2.tgz", - "integrity": "sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A==", - "bin": { - "jiti": "lib/jiti-cli.mjs" - } - }, - "node_modules/js-sha3": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz", - "integrity": "sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==" - }, - "node_modules/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" - }, - "node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/jsel": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/jsel/-/jsel-1.1.6.tgz", - "integrity": "sha512-7E6r8kVzjmKhwXR/82Z+43edfOJGRvLvx6cJZ+SS2MGAPPtYZGnaIsFHpQMA1IbIPA9twDProkob4IIAJ0ZqSw==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/json-buffer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", - "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", - "license": "MIT" - }, - "node_modules/json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" - }, - "node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" - }, - "node_modules/jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/jsonparse": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", - "integrity": "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==", - "engines": [ - "node >= 0.2.0" - ] - }, - "node_modules/jsonpointer": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-5.0.1.tgz", - "integrity": "sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/JSONStream": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", - "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==", - "dependencies": { - "jsonparse": "^1.2.0", - "through": ">=2.2.7 <3" - }, - "bin": { - "JSONStream": "bin.js" - }, - "engines": { - "node": "*" - } - }, - "node_modules/keyv": { - "version": "4.5.4", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", - "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", - "license": "MIT", - "dependencies": { - "json-buffer": "3.0.1" - } - }, - "node_modules/latest-version": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-7.0.0.tgz", - "integrity": "sha512-KvNT4XqAMzdcL6ka6Tl3i2lYeFDgXNCuIX+xNx6ZMVR1dFq+idXd9FLKNMOIx0t9mJ9/HudyX4oZWXZQ0UJHeg==", - "license": "MIT", - "dependencies": { - "package-json": "^8.1.0" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/leven": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", - "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/lilconfig": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz", - "integrity": "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==", - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/antonk52" - } - }, - "node_modules/lines-and-columns": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" - }, - "node_modules/lint-staged": { - "version": "15.5.1", - "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-15.5.1.tgz", - "integrity": "sha512-6m7u8mue4Xn6wK6gZvSCQwBvMBR36xfY24nF5bMTf2MHDYG6S3yhJuOgdYVw99hsjyDt2d4z168b3naI8+NWtQ==", - "dependencies": { - "chalk": "^5.4.1", - "commander": "^13.1.0", - "debug": "^4.4.0", - "execa": "^8.0.1", - "lilconfig": "^3.1.3", - "listr2": "^8.2.5", - "micromatch": "^4.0.8", - "pidtree": "^0.6.0", - "string-argv": "^0.3.2", - "yaml": "^2.7.0" - }, - "bin": { - "lint-staged": "bin/lint-staged.js" - }, - "engines": { - "node": ">=18.12.0" - }, - "funding": { - "url": "https://opencollective.com/lint-staged" - } - }, - "node_modules/listr2": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/listr2/-/listr2-8.3.2.tgz", - "integrity": "sha512-vsBzcU4oE+v0lj4FhVLzr9dBTv4/fHIa57l+GCwovP8MoFNZJTOhGU8PXd4v2VJCbECAaijBiHntiekFMLvo0g==", - "dependencies": { - "cli-truncate": "^4.0.0", - "colorette": "^2.0.20", - "eventemitter3": "^5.0.1", - "log-update": "^6.1.0", - "rfdc": "^1.4.1", - "wrap-ansi": "^9.0.0" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/locate-path": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.2.0.tgz", - "integrity": "sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==", - "dependencies": { - "p-locate": "^6.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" - }, - "node_modules/lodash.camelcase": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", - "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==" - }, - "node_modules/lodash.isplainobject": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", - "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==" - }, - "node_modules/lodash.kebabcase": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lodash.kebabcase/-/lodash.kebabcase-4.1.1.tgz", - "integrity": "sha512-N8XRTIMMqqDgSy4VLKPnJ/+hpGZN+PHQiJnSenYqPaVV/NCqEogTnAdZLQiGKhxX+JCs8waWq2t1XHWKOmlY8g==" - }, - "node_modules/lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==" - }, - "node_modules/lodash.mergewith": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.mergewith/-/lodash.mergewith-4.6.2.tgz", - "integrity": "sha512-GK3g5RPZWTRSeLSpgP8Xhra+pnjBC56q9FZYe1d5RN3TJ35dbkGy3YqBSMbyCrlbi+CM9Z3Jk5yTL7RCsqboyQ==" - }, - "node_modules/lodash.snakecase": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lodash.snakecase/-/lodash.snakecase-4.1.1.tgz", - "integrity": "sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw==" - }, - "node_modules/lodash.startcase": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.startcase/-/lodash.startcase-4.4.0.tgz", - "integrity": "sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==" - }, - "node_modules/lodash.truncate": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", - "integrity": "sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==" - }, - "node_modules/lodash.uniq": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", - "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==" - }, - "node_modules/lodash.upperfirst": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/lodash.upperfirst/-/lodash.upperfirst-4.3.1.tgz", - "integrity": "sha512-sReKOYJIJf74dhJONhU4e0/shzi1trVbSWDOhKYE5XV2O+H7Sb2Dihwuc7xWxVl+DgFPyTqIN3zMfT9cq5iWDg==" - }, - "node_modules/log-update": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/log-update/-/log-update-6.1.0.tgz", - "integrity": "sha512-9ie8ItPR6tjY5uYJh8K/Zrv/RMZ5VOlOWvtZdEHYSTFKZfIBPQa9tOAEeAWhd+AnIneLJ22w5fjOYtoutpWq5w==", - "dependencies": { - "ansi-escapes": "^7.0.0", - "cli-cursor": "^5.0.0", - "slice-ansi": "^7.1.0", - "strip-ansi": "^7.1.0", - "wrap-ansi": "^9.0.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/log-update/node_modules/is-fullwidth-code-point": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-5.0.0.tgz", - "integrity": "sha512-OVa3u9kkBbw7b8Xw5F9P+D/T9X+Z4+JruYVNapTjPYZYUznQ5YfWeFkOj606XYYW8yugTfC8Pj0hYqvi4ryAhA==", - "dependencies": { - "get-east-asian-width": "^1.0.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/log-update/node_modules/slice-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-7.1.0.tgz", - "integrity": "sha512-bSiSngZ/jWeX93BqeIAbImyTbEihizcwNjFoRUIY/T1wWQsfsm2Vw1agPKylXvQTU7iASGdHhyqRlqQzfz+Htg==", - "dependencies": { - "ansi-styles": "^6.2.1", - "is-fullwidth-code-point": "^5.0.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/chalk/slice-ansi?sponsor=1" - } - }, - "node_modules/lowercase-keys": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-3.0.0.tgz", - "integrity": "sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ==", - "license": "MIT", - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/math-intrinsics": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", - "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/memorystream": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz", - "integrity": "sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==", - "engines": { - "node": ">= 0.10.0" - } - }, - "node_modules/meow": { - "version": "12.1.1", - "resolved": "https://registry.npmjs.org/meow/-/meow-12.1.1.tgz", - "integrity": "sha512-BhXM0Au22RwUneMPwSCnyhTOizdWoIEPU9sp0Aqa1PnDMR5Wv2FGXYDjuzJEIX+Eo2Rb8xuYe5jrnm5QowQFkw==", - "engines": { - "node": ">=16.10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" - }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "engines": { - "node": ">= 8" - } - }, - "node_modules/micromatch": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", - "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", - "dependencies": { - "braces": "^3.0.3", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mimic-fn": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", - "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/mimic-function": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/mimic-function/-/mimic-function-5.0.1.tgz", - "integrity": "sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/mimic-response": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-4.0.0.tgz", - "integrity": "sha512-e5ISH9xMYU0DzrT+jl8q2ze9D6eWBto+I8CNpe+VI+K2J/F/k3PdkdTdz4wvGVH4NTpo+NRYTVIuMQEMMcsLqg==", - "license": "MIT", - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/minimatch": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", - "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/minimist": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" - }, - "node_modules/normalize-url": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-8.1.0.tgz", - "integrity": "sha512-X06Mfd/5aKsRHc0O0J5CUedwnPmnDtLF2+nq+KN9KSDlJHkPuh0JUviWjEWMe0SW/9TDdSLVPuk7L5gGTIA1/w==", - "license": "MIT", - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/npm-run-path": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.3.0.tgz", - "integrity": "sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==", - "dependencies": { - "path-key": "^4.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/npm-run-path/node_modules/path-key": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", - "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/onetime": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", - "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", - "dependencies": { - "mimic-fn": "^4.0.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/p-cancelable": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-3.0.0.tgz", - "integrity": "sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw==", - "license": "MIT", - "engines": { - "node": ">=12.20" - } - }, - "node_modules/p-limit": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", - "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", - "dependencies": { - "yocto-queue": "^1.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-locate": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz", - "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==", - "dependencies": { - "p-limit": "^4.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/package-json": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/package-json/-/package-json-8.1.1.tgz", - "integrity": "sha512-cbH9IAIJHNj9uXi196JVsRlt7cHKak6u/e6AkL/bkRelZ7rlL3X1YKxsZwa36xipOEKAsdtmaG6aAJoM1fx2zA==", - "license": "MIT", - "dependencies": { - "got": "^12.1.0", - "registry-auth-token": "^5.0.1", - "registry-url": "^6.0.0", - "semver": "^7.3.7" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dependencies": { - "callsites": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/parse-json": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", - "dependencies": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/parse-passwd": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", - "integrity": "sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-exists": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz", - "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==", - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - } - }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "engines": { - "node": ">=8" - } - }, - "node_modules/picocolors": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", - "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==" - }, - "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/pidtree": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.6.0.tgz", - "integrity": "sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==", - "bin": { - "pidtree": "bin/pidtree.js" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/pluralize": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-8.0.0.tgz", - "integrity": "sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==", - "engines": { - "node": ">=4" - } - }, - "node_modules/possible-typed-array-names": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz", - "integrity": "sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/prettier": { - "version": "2.8.8", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz", - "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==", - "optional": true, - "bin": { - "prettier": "bin-prettier.js" - }, - "engines": { - "node": ">=10.13.0" - }, - "funding": { - "url": "https://github.com/prettier/prettier?sponsor=1" - } - }, - "node_modules/proto-list": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", - "integrity": "sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==", - "license": "ISC" - }, - "node_modules/proxy-from-env": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", - "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" - }, - "node_modules/punycode": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", - "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", - "engines": { - "node": ">=6" - } - }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/quick-lru": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", - "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/rc": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", - "license": "(BSD-2-Clause OR MIT OR Apache-2.0)", - "dependencies": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - }, - "bin": { - "rc": "cli.js" - } - }, - "node_modules/rc/node_modules/ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", - "license": "ISC" - }, - "node_modules/registry-auth-token": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-5.1.0.tgz", - "integrity": "sha512-GdekYuwLXLxMuFTwAPg5UKGLW/UXzQrZvH/Zj791BQif5T05T0RsaLfHc9q3ZOKi7n+BoprPD9mJ0O0k4xzUlw==", - "license": "MIT", - "dependencies": { - "@pnpm/npm-conf": "^2.1.0" - }, - "engines": { - "node": ">=14" - } - }, - "node_modules/registry-url": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-6.0.1.tgz", - "integrity": "sha512-+crtS5QjFRqFCoQmvGduwYWEBng99ZvmFvF+cUJkGYF1L1BfU8C6Zp9T7f5vPAwyLkUExpvK+ANVZmGU49qi4Q==", - "license": "MIT", - "dependencies": { - "rc": "1.2.8" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/resolve-alpn": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz", - "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==", - "license": "MIT" - }, - "node_modules/resolve-dir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz", - "integrity": "sha512-R7uiTjECzvOsWSfdM0QKFNBVFcK27aHOUwdvK53BcW8zqnGdYp0Fbj82cy54+2A4P2tFM22J5kRfe1R+lM/1yg==", - "dependencies": { - "expand-tilde": "^2.0.0", - "global-modules": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "engines": { - "node": ">=8" - } - }, - "node_modules/responselike": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/responselike/-/responselike-3.0.0.tgz", - "integrity": "sha512-40yHxbNcl2+rzXvZuVkrYohathsSJlMTXKryG5y8uciHv1+xDLHQpgjG64JUO9nrEq2jGLH6IZ8BcZyw3wrweg==", - "license": "MIT", - "dependencies": { - "lowercase-keys": "^3.0.0" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/restore-cursor": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-5.1.0.tgz", - "integrity": "sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==", - "dependencies": { - "onetime": "^7.0.0", - "signal-exit": "^4.1.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/restore-cursor/node_modules/onetime": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-7.0.0.tgz", - "integrity": "sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==", - "dependencies": { - "mimic-function": "^5.0.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/reusify": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", - "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/rfdc": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.4.1.tgz", - "integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==" - }, - "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, - "node_modules/safe-regex-test": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.1.0.tgz", - "integrity": "sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==", - "dependencies": { - "call-bound": "^1.0.2", - "es-errors": "^1.3.0", - "is-regex": "^1.2.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/semver": { - "version": "7.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", - "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/set-function-length": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", - "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", - "dependencies": { - "define-data-property": "^1.1.4", - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.4", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "engines": { - "node": ">=8" - } - }, - "node_modules/signal-exit": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/slash": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", - "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/slice-ansi": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-5.0.0.tgz", - "integrity": "sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==", - "dependencies": { - "ansi-styles": "^6.0.0", - "is-fullwidth-code-point": "^4.0.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/slice-ansi?sponsor=1" - } - }, - "node_modules/solc": { - "version": "0.8.25", - "resolved": "https://registry.npmjs.org/solc/-/solc-0.8.25.tgz", - "integrity": "sha512-7P0TF8gPeudl1Ko3RGkyY6XVCxe2SdD/qQhtns1vl3yAbK/PDifKDLHGtx1t7mX3LgR7ojV7Fg/Kc6Q9D2T8UQ==", - "dependencies": { - "command-exists": "^1.2.8", - "commander": "^8.1.0", - "follow-redirects": "^1.12.1", - "js-sha3": "0.8.0", - "memorystream": "^0.3.1", - "semver": "^5.5.0", - "tmp": "0.0.33" - }, - "bin": { - "solcjs": "solc.js" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/solc-typed-ast": { - "version": "18.2.4", - "resolved": "https://registry.npmjs.org/solc-typed-ast/-/solc-typed-ast-18.2.4.tgz", - "integrity": "sha512-HTkr6b2WMSJ3pgVRf5us/UWjCvfSlvE1yUcHna+miSPerkyppGnZQaJWqrcECa7ZjxmSV7H2buUDKux9hR4ivg==", - "dependencies": { - "axios": "^1.6.8", - "commander": "^12.0.0", - "decimal.js": "^10.4.3", - "findup-sync": "^5.0.0", - "fs-extra": "^11.2.0", - "jsel": "^1.1.6", - "semver": "^7.6.0", - "solc": "0.8.25", - "src-location": "^1.1.0", - "web3-eth-abi": "^4.2.0" - }, - "bin": { - "sol-ast-compile": "dist/bin/compile.js" - } - }, - "node_modules/solc-typed-ast/node_modules/commander": { - "version": "12.1.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-12.1.0.tgz", - "integrity": "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==", - "engines": { - "node": ">=18" - } - }, - "node_modules/solc/node_modules/commander": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", - "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", - "engines": { - "node": ">= 12" - } - }, - "node_modules/solc/node_modules/semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/solhint": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/solhint/-/solhint-6.0.1.tgz", - "integrity": "sha512-Lew5nhmkXqHPybzBzkMzvvWkpOJSSLTkfTZwRriWvfR2naS4YW2PsjVGaoX9tZFmHh7SuS+e2GEGo5FPYYmJ8g==", - "license": "MIT", - "dependencies": { - "@solidity-parser/parser": "^0.20.2", - "ajv": "^6.12.6", - "ajv-errors": "^1.0.1", - "antlr4": "^4.13.1-patch-1", - "ast-parents": "^0.0.1", - "better-ajv-errors": "^2.0.2", - "chalk": "^4.1.2", - "commander": "^10.0.0", - "cosmiconfig": "^8.0.0", - "fast-diff": "^1.2.0", - "glob": "^8.0.3", - "ignore": "^5.2.4", - "js-yaml": "^4.1.0", - "latest-version": "^7.0.0", - "lodash": "^4.17.21", - "pluralize": "^8.0.0", - "semver": "^7.5.2", - "table": "^6.8.1", - "text-table": "^0.2.0" - }, - "bin": { - "solhint": "solhint.js" - }, - "optionalDependencies": { - "prettier": "^2.8.3" - } - }, - "node_modules/solhint-community": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/solhint-community/-/solhint-community-4.0.0.tgz", - "integrity": "sha512-BERw3qYzkJE64EwvYrp2+iiTN8yAZOJ74FCiL4bTBp7v0JFUvRYCEGZKAqfHcfi/koKkzM6qThsJUceKm9vvfg==", - "dependencies": { - "@solidity-parser/parser": "^0.16.0", - "ajv": "^6.12.6", - "antlr4": "^4.11.0", - "ast-parents": "^0.0.1", - "chalk": "^4.1.2", - "commander": "^11.1.0", - "cosmiconfig": "^8.0.0", - "fast-diff": "^1.2.0", - "glob": "^8.0.3", - "ignore": "^5.2.4", - "js-yaml": "^4.1.0", - "lodash": "^4.17.21", - "pluralize": "^8.0.0", - "semver": "^6.3.0", - "strip-ansi": "^6.0.1", - "table": "^6.8.1", - "text-table": "^0.2.0" - }, - "bin": { - "solhint": "solhint.js" - }, - "optionalDependencies": { - "prettier": "^2.8.3" - } - }, - "node_modules/solhint-community/node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/solhint-community/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/solhint-community/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/solhint-community/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/solhint-community/node_modules/commander": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-11.1.0.tgz", - "integrity": "sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==", - "engines": { - "node": ">=16" - } - }, - "node_modules/solhint-community/node_modules/cosmiconfig": { - "version": "8.3.6", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.3.6.tgz", - "integrity": "sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==", - "dependencies": { - "import-fresh": "^3.3.0", - "js-yaml": "^4.1.0", - "parse-json": "^5.2.0", - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/d-fischer" - }, - "peerDependencies": { - "typescript": ">=4.9.5" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/solhint-community/node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" - }, - "node_modules/solhint-community/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/solhint-community/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/solhint/node_modules/@solidity-parser/parser": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@solidity-parser/parser/-/parser-0.20.2.tgz", - "integrity": "sha512-rbu0bzwNvMcwAjH86hiEAcOeRI2EeK8zCkHDrFykh/Al8mvJeFmjy3UrE7GYQjNwOgbGUUtCn5/k8CB8zIu7QA==", - "license": "MIT" - }, - "node_modules/solhint/node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/solhint/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/solhint/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/solhint/node_modules/commander": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", - "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", - "license": "MIT", - "engines": { - "node": ">=14" - } - }, - "node_modules/solhint/node_modules/cosmiconfig": { - "version": "8.3.6", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.3.6.tgz", - "integrity": "sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==", - "license": "MIT", - "dependencies": { - "import-fresh": "^3.3.0", - "js-yaml": "^4.1.0", - "parse-json": "^5.2.0", - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/d-fischer" - }, - "peerDependencies": { - "typescript": ">=4.9.5" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/solhint/node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "license": "MIT" - }, - "node_modules/sort-object-keys": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/sort-object-keys/-/sort-object-keys-1.1.3.tgz", - "integrity": "sha512-855pvK+VkU7PaKYPc+Jjnmt4EzejQHyhhF33q31qG8x7maDzkeFhAAThdCYay11CISO+qAMwjOBP+fPZe0IPyg==" - }, - "node_modules/sort-package-json": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/sort-package-json/-/sort-package-json-2.10.0.tgz", - "integrity": "sha512-MYecfvObMwJjjJskhxYfuOADkXp1ZMMnCFC8yhp+9HDsk7HhR336hd7eiBs96lTXfiqmUNI+WQCeCMRBhl251g==", - "dependencies": { - "detect-indent": "^7.0.1", - "detect-newline": "^4.0.0", - "get-stdin": "^9.0.0", - "git-hooks-list": "^3.0.0", - "globby": "^13.1.2", - "is-plain-obj": "^4.1.0", - "semver": "^7.6.0", - "sort-object-keys": "^1.1.3" - }, - "bin": { - "sort-package-json": "cli.js" - } - }, - "node_modules/split2": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz", - "integrity": "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==", - "engines": { - "node": ">= 10.x" - } - }, - "node_modules/src-location": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/src-location/-/src-location-1.1.0.tgz", - "integrity": "sha512-idBVZgLZGzB3B2Et317AFDQto7yRgp1tOuFd+VKIH2dw1jO1b6p07zNjtQoVhkW+CY6oGTp9Y5UIfbJoZRsoFQ==" - }, - "node_modules/string-argv": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.2.tgz", - "integrity": "sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==", - "engines": { - "node": ">=0.6.19" - } - }, - "node_modules/string-width": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", - "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", - "dependencies": { - "emoji-regex": "^10.3.0", - "get-east-asian-width": "^1.0.0", - "strip-ansi": "^7.1.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/strip-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, - "node_modules/strip-final-newline": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", - "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/table": { - "version": "6.9.0", - "resolved": "https://registry.npmjs.org/table/-/table-6.9.0.tgz", - "integrity": "sha512-9kY+CygyYM6j02t5YFHbNz2FN5QmYGv9zAjVp4lCDjlCw7amdckXlEt/bjMhUIfj4ThGRE4gCUH5+yGnNuPo5A==", - "dependencies": { - "ajv": "^8.0.1", - "lodash.truncate": "^4.4.2", - "slice-ansi": "^4.0.0", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/table/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/table/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/table/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" - }, - "node_modules/table/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "engines": { - "node": ">=8" - } - }, - "node_modules/table/node_modules/slice-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", - "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", - "dependencies": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/slice-ansi?sponsor=1" - } - }, - "node_modules/table/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/table/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/text-extensions": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/text-extensions/-/text-extensions-2.4.0.tgz", - "integrity": "sha512-te/NtwBwfiNRLf9Ijqx3T0nlqZiQ2XrrtBvu+cLL8ZRrGkO0NHTug8MYFKyoSrv/sHTaSKfilUkizV6XhxMJ3g==", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==" - }, - "node_modules/through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==" - }, - "node_modules/tinyexec": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-0.3.2.tgz", - "integrity": "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==" - }, - "node_modules/tmp": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", - "dependencies": { - "os-tmpdir": "~1.0.2" - }, - "engines": { - "node": ">=0.6.0" - } - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/typescript": { - "version": "5.8.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz", - "integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==", - "peer": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=14.17" - } - }, - "node_modules/undici-types": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", - "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==" - }, - "node_modules/unicorn-magic": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.1.0.tgz", - "integrity": "sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/universalify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", - "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/util": { - "version": "0.12.5", - "resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz", - "integrity": "sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==", - "dependencies": { - "inherits": "^2.0.3", - "is-arguments": "^1.0.4", - "is-generator-function": "^1.0.7", - "is-typed-array": "^1.1.3", - "which-typed-array": "^1.1.2" - } - }, - "node_modules/web3-errors": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/web3-errors/-/web3-errors-1.3.1.tgz", - "integrity": "sha512-w3NMJujH+ZSW4ltIZZKtdbkbyQEvBzyp3JRn59Ckli0Nz4VMsVq8aF1bLWM7A2kuQ+yVEm3ySeNU+7mSRwx7RQ==", - "dependencies": { - "web3-types": "^1.10.0" - }, - "engines": { - "node": ">=14", - "npm": ">=6.12.0" - } - }, - "node_modules/web3-eth-abi": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/web3-eth-abi/-/web3-eth-abi-4.4.1.tgz", - "integrity": "sha512-60ecEkF6kQ9zAfbTY04Nc9q4eEYM0++BySpGi8wZ2PD1tw/c0SDvsKhV6IKURxLJhsDlb08dATc3iD6IbtWJmg==", - "dependencies": { - "abitype": "0.7.1", - "web3-errors": "^1.3.1", - "web3-types": "^1.10.0", - "web3-utils": "^4.3.3", - "web3-validator": "^2.0.6" - }, - "engines": { - "node": ">=14", - "npm": ">=6.12.0" - } - }, - "node_modules/web3-types": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/web3-types/-/web3-types-1.10.0.tgz", - "integrity": "sha512-0IXoaAFtFc8Yin7cCdQfB9ZmjafrbP6BO0f0KT/khMhXKUpoJ6yShrVhiNpyRBo8QQjuOagsWzwSK2H49I7sbw==", - "engines": { - "node": ">=14", - "npm": ">=6.12.0" - } - }, - "node_modules/web3-utils": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-4.3.3.tgz", - "integrity": "sha512-kZUeCwaQm+RNc2Bf1V3BYbF29lQQKz28L0y+FA4G0lS8IxtJVGi5SeDTUkpwqqkdHHC7JcapPDnyyzJ1lfWlOw==", - "dependencies": { - "ethereum-cryptography": "^2.0.0", - "eventemitter3": "^5.0.1", - "web3-errors": "^1.3.1", - "web3-types": "^1.10.0", - "web3-validator": "^2.0.6" - }, - "engines": { - "node": ">=14", - "npm": ">=6.12.0" - } - }, - "node_modules/web3-validator": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/web3-validator/-/web3-validator-2.0.6.tgz", - "integrity": "sha512-qn9id0/l1bWmvH4XfnG/JtGKKwut2Vokl6YXP5Kfg424npysmtRLe9DgiNBM9Op7QL/aSiaA0TVXibuIuWcizg==", - "dependencies": { - "ethereum-cryptography": "^2.0.0", - "util": "^0.12.5", - "web3-errors": "^1.2.0", - "web3-types": "^1.6.0", - "zod": "^3.21.4" - }, - "engines": { - "node": ">=14", - "npm": ">=6.12.0" - } - }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/which-typed-array": { - "version": "1.1.19", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.19.tgz", - "integrity": "sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw==", - "dependencies": { - "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.8", - "call-bound": "^1.0.4", - "for-each": "^0.3.5", - "get-proto": "^1.0.1", - "gopd": "^1.2.0", - "has-tostringtag": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/wrap-ansi": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.0.tgz", - "integrity": "sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q==", - "dependencies": { - "ansi-styles": "^6.2.1", - "string-width": "^7.0.0", - "strip-ansi": "^7.1.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" - }, - "node_modules/y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "engines": { - "node": ">=10" - } - }, - "node_modules/yaml": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.7.1.tgz", - "integrity": "sha512-10ULxpnOCQXxJvBgxsn9ptjq6uviG/htZKk9veJGhlqn3w/DxQ631zFF+nlQXLwmImeS5amR2dl2U8sg6U9jsQ==", - "bin": { - "yaml": "bin.mjs" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/yargs": { - "version": "17.7.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", - "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", - "dependencies": { - "cliui": "^8.0.1", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", - "y18n": "^5.0.5", - "yargs-parser": "^21.1.1" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/yargs-parser": { - "version": "21.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", - "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", - "engines": { - "node": ">=12" - } - }, - "node_modules/yargs/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/yargs/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" - }, - "node_modules/yargs/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "engines": { - "node": ">=8" - } - }, - "node_modules/yargs/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/yargs/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/yocto-queue": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.2.1.tgz", - "integrity": "sha512-AyeEbWOu/TAXdxlV9wmGcR0+yh2j3vYPGOECcIj2S7MkrLyC7ne+oye2BKTItt0ii2PHk4cDy+95+LshzbXnGg==", - "engines": { - "node": ">=12.20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/zod": { - "version": "3.24.3", - "resolved": "https://registry.npmjs.org/zod/-/zod-3.24.3.tgz", - "integrity": "sha512-HhY1oqzWCQWuUqvBFnsyrtZRhyPeR7SUGv+C4+MsisMuVfSPx8HpwWqH8tRahSlt6M3PiFAcoeFhZAqIXTxoSg==", - "funding": { - "url": "https://github.com/sponsors/colinhacks" - } - } - } -} diff --git a/package.json b/package.json index b854a0c9..75625de8 100644 --- a/package.json +++ b/package.json @@ -1,13 +1,21 @@ { "name": "wavs-foundry-template", - "version": "0.4.0", + "version": "0.5.0", "license": "MIT", "scripts": { + "preinstall": "npx only-allow pnpm", "build": "forge build", "coverage": "forge coverage --report summary --report lcov --match-path 'test/unit/*'", - "deploy:local": "forge script Deploy ${SERVICE_MANAGER} --sig 'run(string)' --rpc-url http://localhost:8545 --broadcast -vvvvv", - "lint:check": "yarn lint:sol && forge fmt --check", - "lint:fix": "sort-package-json && forge fmt && yarn lint:sol --fix", + "deploy:full": "tsx deploy/deploy-script.ts", + "deploy:build-service": "tsx deploy/build-service.ts", + "deploy:contracts": "tsx deploy/deploy-contracts.ts", + "deploy:upload-components": "tsx deploy/upload-components.ts", + "deploy:upload-service": "tsx deploy/upload-service.ts", + "deploy:create-deployer": "tsx deploy/create-deployer.ts", + "deploy:create-operator": "tsx deploy/create-operator.ts", + "deploy:create-aggregator": "tsx deploy/create-aggregator.ts", + "lint:check": "pnpm run lint:sol && forge fmt --check", + "lint:fix": "sort-package-json && forge fmt && pnpm run lint:sol -- --fix", "lint:natspec": "npx @defi-wonderland/natspec-smells --config natspec-smells.config.js", "lint:sol": "solhint 'src/**/*.sol' 'script/**/*.sol' 'test/**/*.sol'", "test": "forge test -vvv", @@ -18,18 +26,25 @@ }, "lint-staged": { "*.{js,css,md,ts,sol}": "forge fmt", - "(src|test|script)/**/*.sol": "yarn lint:sol", + "(src|test|script)/**/*.sol": "pnpm run lint:sol", "package.json": "sort-package-json" }, "dependencies": { "@commitlint/cli": "19.3.0", "@commitlint/config-conventional": "19.2.2", "@defi-wonderland/natspec-smells": "1.1.6", + "@noble/hashes": "^2.0.1", "@openzeppelin/contracts": "^5.2.0", - "forge-std": "github:foundry-rs/forge-std#v1.9.6", "@wavs/solidity": "0.5.0-beta.10", + "chalk": "^5.6.2", + "commander": "^14.0.2", + "dotenv": "^17.2.3", + "forge-std": "github:foundry-rs/forge-std#v1.9.6", "lint-staged": ">=10", "solhint-community": "4.0.0", - "sort-package-json": "2.10.0" - } + "sort-package-json": "2.10.0", + "tsx": "^4.20.6", + "viem": "^2.39.0" + }, + "packageManager": "pnpm@10.18.3+sha512.bbd16e6d7286fd7e01f6b3c0b3c932cda2965c06a908328f74663f10a9aea51f1129eea615134bf992831b009eabe167ecb7008b597f40ff9bc75946aadfb08d" } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml new file mode 100644 index 00000000..922e6734 --- /dev/null +++ b/pnpm-lock.yaml @@ -0,0 +1,3172 @@ +lockfileVersion: '9.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +importers: + + .: + dependencies: + '@commitlint/cli': + specifier: 19.3.0 + version: 19.3.0(@types/node@25.3.0)(typescript@5.9.3) + '@commitlint/config-conventional': + specifier: 19.2.2 + version: 19.2.2 + '@defi-wonderland/natspec-smells': + specifier: 1.1.6 + version: 1.1.6(typescript@5.9.3)(zod@3.25.76) + '@noble/hashes': + specifier: ^2.0.1 + version: 2.0.1 + '@openzeppelin/contracts': + specifier: ^5.2.0 + version: 5.4.0 + '@wavs/solidity': + specifier: 0.5.0-beta.10 + version: 0.5.0-beta.10(typescript@5.9.3) + chalk: + specifier: ^5.6.2 + version: 5.6.2 + commander: + specifier: ^14.0.2 + version: 14.0.3 + dotenv: + specifier: ^17.2.3 + version: 17.3.1 + forge-std: + specifier: github:foundry-rs/forge-std#v1.9.6 + version: https://codeload.github.com/foundry-rs/forge-std/tar.gz/3b20d60d14b343ee4f908cb8079495c07f5e8981 + lint-staged: + specifier: '>=10' + version: 16.2.7 + solhint-community: + specifier: 4.0.0 + version: 4.0.0(typescript@5.9.3) + sort-package-json: + specifier: 2.10.0 + version: 2.10.0 + tsx: + specifier: ^4.20.6 + version: 4.21.0 + viem: + specifier: ^2.39.0 + version: 2.46.2(typescript@5.9.3)(zod@3.25.76) + +packages: + + '@adraffy/ens-normalize@1.11.1': + resolution: {integrity: sha512-nhCBV3quEgesuf7c7KYfperqSS14T8bYuvJ8PcLJp6znkZpFc0AuW4qBtr8eKVyPPe/8RSr7sglCWPU5eaxwKQ==} + + '@babel/code-frame@7.29.0': + resolution: {integrity: sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-validator-identifier@7.28.5': + resolution: {integrity: sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==} + engines: {node: '>=6.9.0'} + + '@commitlint/cli@19.3.0': + resolution: {integrity: sha512-LgYWOwuDR7BSTQ9OLZ12m7F/qhNY+NpAyPBgo4YNMkACE7lGuUnuQq1yi9hz1KA4+3VqpOYl8H1rY/LYK43v7g==} + engines: {node: '>=v18'} + hasBin: true + + '@commitlint/config-conventional@19.2.2': + resolution: {integrity: sha512-mLXjsxUVLYEGgzbxbxicGPggDuyWNkf25Ht23owXIH+zV2pv1eJuzLK3t1gDY5Gp6pxdE60jZnWUY5cvgL3ufw==} + engines: {node: '>=v18'} + + '@commitlint/config-validator@19.8.1': + resolution: {integrity: sha512-0jvJ4u+eqGPBIzzSdqKNX1rvdbSU1lPNYlfQQRIFnBgLy26BtC0cFnr7c/AyuzExMxWsMOte6MkTi9I3SQ3iGQ==} + engines: {node: '>=v18'} + + '@commitlint/ensure@19.8.1': + resolution: {integrity: sha512-mXDnlJdvDzSObafjYrOSvZBwkD01cqB4gbnnFuVyNpGUM5ijwU/r/6uqUmBXAAOKRfyEjpkGVZxaDsCVnHAgyw==} + engines: {node: '>=v18'} + + '@commitlint/execute-rule@19.8.1': + resolution: {integrity: sha512-YfJyIqIKWI64Mgvn/sE7FXvVMQER/Cd+s3hZke6cI1xgNT/f6ZAz5heND0QtffH+KbcqAwXDEE1/5niYayYaQA==} + engines: {node: '>=v18'} + + '@commitlint/format@19.8.1': + resolution: {integrity: sha512-kSJj34Rp10ItP+Eh9oCItiuN/HwGQMXBnIRk69jdOwEW9llW9FlyqcWYbHPSGofmjsqeoxa38UaEA5tsbm2JWw==} + engines: {node: '>=v18'} + + '@commitlint/is-ignored@19.8.1': + resolution: {integrity: sha512-AceOhEhekBUQ5dzrVhDDsbMaY5LqtN8s1mqSnT2Kz1ERvVZkNihrs3Sfk1Je/rxRNbXYFzKZSHaPsEJJDJV8dg==} + engines: {node: '>=v18'} + + '@commitlint/lint@19.8.1': + resolution: {integrity: sha512-52PFbsl+1EvMuokZXLRlOsdcLHf10isTPlWwoY1FQIidTsTvjKXVXYb7AvtpWkDzRO2ZsqIgPK7bI98x8LRUEw==} + engines: {node: '>=v18'} + + '@commitlint/load@19.8.1': + resolution: {integrity: sha512-9V99EKG3u7z+FEoe4ikgq7YGRCSukAcvmKQuTtUyiYPnOd9a2/H9Ak1J9nJA1HChRQp9OA/sIKPugGS+FK/k1A==} + engines: {node: '>=v18'} + + '@commitlint/message@19.8.1': + resolution: {integrity: sha512-+PMLQvjRXiU+Ae0Wc+p99EoGEutzSXFVwQfa3jRNUZLNW5odZAyseb92OSBTKCu+9gGZiJASt76Cj3dLTtcTdg==} + engines: {node: '>=v18'} + + '@commitlint/parse@19.8.1': + resolution: {integrity: sha512-mmAHYcMBmAgJDKWdkjIGq50X4yB0pSGpxyOODwYmoexxxiUCy5JJT99t1+PEMK7KtsCtzuWYIAXYAiKR+k+/Jw==} + engines: {node: '>=v18'} + + '@commitlint/read@19.8.1': + resolution: {integrity: sha512-03Jbjb1MqluaVXKHKRuGhcKWtSgh3Jizqy2lJCRbRrnWpcM06MYm8th59Xcns8EqBYvo0Xqb+2DoZFlga97uXQ==} + engines: {node: '>=v18'} + + '@commitlint/resolve-extends@19.8.1': + resolution: {integrity: sha512-GM0mAhFk49I+T/5UCYns5ayGStkTt4XFFrjjf0L4S26xoMTSkdCf9ZRO8en1kuopC4isDFuEm7ZOm/WRVeElVg==} + engines: {node: '>=v18'} + + '@commitlint/rules@19.8.1': + resolution: {integrity: sha512-Hnlhd9DyvGiGwjfjfToMi1dsnw1EXKGJNLTcsuGORHz6SS9swRgkBsou33MQ2n51/boIDrbsg4tIBbRpEWK2kw==} + engines: {node: '>=v18'} + + '@commitlint/to-lines@19.8.1': + resolution: {integrity: sha512-98Mm5inzbWTKuZQr2aW4SReY6WUukdWXuZhrqf1QdKPZBCCsXuG87c+iP0bwtD6DBnmVVQjgp4whoHRVixyPBg==} + engines: {node: '>=v18'} + + '@commitlint/top-level@19.8.1': + resolution: {integrity: sha512-Ph8IN1IOHPSDhURCSXBz44+CIu+60duFwRsg6HqaISFHQHbmBtxVw4ZrFNIYUzEP7WwrNPxa2/5qJ//NK1FGcw==} + engines: {node: '>=v18'} + + '@commitlint/types@19.8.1': + resolution: {integrity: sha512-/yCrWGCoA1SVKOks25EGadP9Pnj0oAIHGpl2wH2M2Y46dPM2ueb8wyCVOD7O3WCTkaJ0IkKvzhl1JY7+uCT2Dw==} + engines: {node: '>=v18'} + + '@defi-wonderland/natspec-smells@1.1.6': + resolution: {integrity: sha512-HTdZLEdBs3UakW0JQZ7vO8pb6YCoU3CPQNfLxa0Z9PWAwmgKhSZJbF8dm/okkJEJGRa0dCoOxviJw5jeK+kDiQ==} + hasBin: true + + '@esbuild/aix-ppc64@0.27.3': + resolution: {integrity: sha512-9fJMTNFTWZMh5qwrBItuziu834eOCUcEqymSH7pY+zoMVEZg3gcPuBNxH1EvfVYe9h0x/Ptw8KBzv7qxb7l8dg==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [aix] + + '@esbuild/android-arm64@0.27.3': + resolution: {integrity: sha512-YdghPYUmj/FX2SYKJ0OZxf+iaKgMsKHVPF1MAq/P8WirnSpCStzKJFjOjzsW0QQ7oIAiccHdcqjbHmJxRb/dmg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [android] + + '@esbuild/android-arm@0.27.3': + resolution: {integrity: sha512-i5D1hPY7GIQmXlXhs2w8AWHhenb00+GxjxRncS2ZM7YNVGNfaMxgzSGuO8o8SJzRc/oZwU2bcScvVERk03QhzA==} + engines: {node: '>=18'} + cpu: [arm] + os: [android] + + '@esbuild/android-x64@0.27.3': + resolution: {integrity: sha512-IN/0BNTkHtk8lkOM8JWAYFg4ORxBkZQf9zXiEOfERX/CzxW3Vg1ewAhU7QSWQpVIzTW+b8Xy+lGzdYXV6UZObQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [android] + + '@esbuild/darwin-arm64@0.27.3': + resolution: {integrity: sha512-Re491k7ByTVRy0t3EKWajdLIr0gz2kKKfzafkth4Q8A5n1xTHrkqZgLLjFEHVD+AXdUGgQMq+Godfq45mGpCKg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [darwin] + + '@esbuild/darwin-x64@0.27.3': + resolution: {integrity: sha512-vHk/hA7/1AckjGzRqi6wbo+jaShzRowYip6rt6q7VYEDX4LEy1pZfDpdxCBnGtl+A5zq8iXDcyuxwtv3hNtHFg==} + engines: {node: '>=18'} + cpu: [x64] + os: [darwin] + + '@esbuild/freebsd-arm64@0.27.3': + resolution: {integrity: sha512-ipTYM2fjt3kQAYOvo6vcxJx3nBYAzPjgTCk7QEgZG8AUO3ydUhvelmhrbOheMnGOlaSFUoHXB6un+A7q4ygY9w==} + engines: {node: '>=18'} + cpu: [arm64] + os: [freebsd] + + '@esbuild/freebsd-x64@0.27.3': + resolution: {integrity: sha512-dDk0X87T7mI6U3K9VjWtHOXqwAMJBNN2r7bejDsc+j03SEjtD9HrOl8gVFByeM0aJksoUuUVU9TBaZa2rgj0oA==} + engines: {node: '>=18'} + cpu: [x64] + os: [freebsd] + + '@esbuild/linux-arm64@0.27.3': + resolution: {integrity: sha512-sZOuFz/xWnZ4KH3YfFrKCf1WyPZHakVzTiqji3WDc0BCl2kBwiJLCXpzLzUBLgmp4veFZdvN5ChW4Eq/8Fc2Fg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [linux] + + '@esbuild/linux-arm@0.27.3': + resolution: {integrity: sha512-s6nPv2QkSupJwLYyfS+gwdirm0ukyTFNl3KTgZEAiJDd+iHZcbTPPcWCcRYH+WlNbwChgH2QkE9NSlNrMT8Gfw==} + engines: {node: '>=18'} + cpu: [arm] + os: [linux] + + '@esbuild/linux-ia32@0.27.3': + resolution: {integrity: sha512-yGlQYjdxtLdh0a3jHjuwOrxQjOZYD/C9PfdbgJJF3TIZWnm/tMd/RcNiLngiu4iwcBAOezdnSLAwQDPqTmtTYg==} + engines: {node: '>=18'} + cpu: [ia32] + os: [linux] + + '@esbuild/linux-loong64@0.27.3': + resolution: {integrity: sha512-WO60Sn8ly3gtzhyjATDgieJNet/KqsDlX5nRC5Y3oTFcS1l0KWba+SEa9Ja1GfDqSF1z6hif/SkpQJbL63cgOA==} + engines: {node: '>=18'} + cpu: [loong64] + os: [linux] + + '@esbuild/linux-mips64el@0.27.3': + resolution: {integrity: sha512-APsymYA6sGcZ4pD6k+UxbDjOFSvPWyZhjaiPyl/f79xKxwTnrn5QUnXR5prvetuaSMsb4jgeHewIDCIWljrSxw==} + engines: {node: '>=18'} + cpu: [mips64el] + os: [linux] + + '@esbuild/linux-ppc64@0.27.3': + resolution: {integrity: sha512-eizBnTeBefojtDb9nSh4vvVQ3V9Qf9Df01PfawPcRzJH4gFSgrObw+LveUyDoKU3kxi5+9RJTCWlj4FjYXVPEA==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [linux] + + '@esbuild/linux-riscv64@0.27.3': + resolution: {integrity: sha512-3Emwh0r5wmfm3ssTWRQSyVhbOHvqegUDRd0WhmXKX2mkHJe1SFCMJhagUleMq+Uci34wLSipf8Lagt4LlpRFWQ==} + engines: {node: '>=18'} + cpu: [riscv64] + os: [linux] + + '@esbuild/linux-s390x@0.27.3': + resolution: {integrity: sha512-pBHUx9LzXWBc7MFIEEL0yD/ZVtNgLytvx60gES28GcWMqil8ElCYR4kvbV2BDqsHOvVDRrOxGySBM9Fcv744hw==} + engines: {node: '>=18'} + cpu: [s390x] + os: [linux] + + '@esbuild/linux-x64@0.27.3': + resolution: {integrity: sha512-Czi8yzXUWIQYAtL/2y6vogER8pvcsOsk5cpwL4Gk5nJqH5UZiVByIY8Eorm5R13gq+DQKYg0+JyQoytLQas4dA==} + engines: {node: '>=18'} + cpu: [x64] + os: [linux] + + '@esbuild/netbsd-arm64@0.27.3': + resolution: {integrity: sha512-sDpk0RgmTCR/5HguIZa9n9u+HVKf40fbEUt+iTzSnCaGvY9kFP0YKBWZtJaraonFnqef5SlJ8/TiPAxzyS+UoA==} + engines: {node: '>=18'} + cpu: [arm64] + os: [netbsd] + + '@esbuild/netbsd-x64@0.27.3': + resolution: {integrity: sha512-P14lFKJl/DdaE00LItAukUdZO5iqNH7+PjoBm+fLQjtxfcfFE20Xf5CrLsmZdq5LFFZzb5JMZ9grUwvtVYzjiA==} + engines: {node: '>=18'} + cpu: [x64] + os: [netbsd] + + '@esbuild/openbsd-arm64@0.27.3': + resolution: {integrity: sha512-AIcMP77AvirGbRl/UZFTq5hjXK+2wC7qFRGoHSDrZ5v5b8DK/GYpXW3CPRL53NkvDqb9D+alBiC/dV0Fb7eJcw==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openbsd] + + '@esbuild/openbsd-x64@0.27.3': + resolution: {integrity: sha512-DnW2sRrBzA+YnE70LKqnM3P+z8vehfJWHXECbwBmH/CU51z6FiqTQTHFenPlHmo3a8UgpLyH3PT+87OViOh1AQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [openbsd] + + '@esbuild/openharmony-arm64@0.27.3': + resolution: {integrity: sha512-NinAEgr/etERPTsZJ7aEZQvvg/A6IsZG/LgZy+81wON2huV7SrK3e63dU0XhyZP4RKGyTm7aOgmQk0bGp0fy2g==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openharmony] + + '@esbuild/sunos-x64@0.27.3': + resolution: {integrity: sha512-PanZ+nEz+eWoBJ8/f8HKxTTD172SKwdXebZ0ndd953gt1HRBbhMsaNqjTyYLGLPdoWHy4zLU7bDVJztF5f3BHA==} + engines: {node: '>=18'} + cpu: [x64] + os: [sunos] + + '@esbuild/win32-arm64@0.27.3': + resolution: {integrity: sha512-B2t59lWWYrbRDw/tjiWOuzSsFh1Y/E95ofKz7rIVYSQkUYBjfSgf6oeYPNWHToFRr2zx52JKApIcAS/D5TUBnA==} + engines: {node: '>=18'} + cpu: [arm64] + os: [win32] + + '@esbuild/win32-ia32@0.27.3': + resolution: {integrity: sha512-QLKSFeXNS8+tHW7tZpMtjlNb7HKau0QDpwm49u0vUp9y1WOF+PEzkU84y9GqYaAVW8aH8f3GcBck26jh54cX4Q==} + engines: {node: '>=18'} + cpu: [ia32] + os: [win32] + + '@esbuild/win32-x64@0.27.3': + resolution: {integrity: sha512-4uJGhsxuptu3OcpVAzli+/gWusVGwZZHTlS63hh++ehExkVT8SgiEf7/uC/PclrPPkLhZqGgCTjd0VWLo6xMqA==} + engines: {node: '>=18'} + cpu: [x64] + os: [win32] + + '@humanwhocodes/momoa@2.0.4': + resolution: {integrity: sha512-RE815I4arJFtt+FVeU1Tgp9/Xvecacji8w/V6XtXsWWH/wz/eNkNbhb+ny/+PlVZjV0rxQpRSQKNKE3lcktHEA==} + engines: {node: '>=10.10.0'} + + '@noble/ciphers@1.3.0': + resolution: {integrity: sha512-2I0gnIVPtfnMw9ee9h1dJG7tp81+8Ob3OJb3Mv37rx5L40/b0i7djjCVvGOVqc9AEIQyvyu1i6ypKdFw8R8gQw==} + engines: {node: ^14.21.3 || >=16} + + '@noble/curves@1.4.2': + resolution: {integrity: sha512-TavHr8qycMChk8UwMld0ZDRvatedkzWfH8IiaeGCfymOP5i0hSCozz9vHOL0nkwk7HRMlFnAiKpS2jrUmSybcw==} + + '@noble/curves@1.9.1': + resolution: {integrity: sha512-k11yZxZg+t+gWvBbIswW0yoJlu8cHOC7dhunwOzoWH/mXGBiYyR4YY6hAEK/3EUs4UpB8la1RfdRpeGsFHkWsA==} + engines: {node: ^14.21.3 || >=16} + + '@noble/hashes@1.4.0': + resolution: {integrity: sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==} + engines: {node: '>= 16'} + + '@noble/hashes@1.8.0': + resolution: {integrity: sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A==} + engines: {node: ^14.21.3 || >=16} + + '@noble/hashes@2.0.1': + resolution: {integrity: sha512-XlOlEbQcE9fmuXxrVTXCTlG2nlRXa9Rj3rr5Ue/+tX+nmkgbX720YHh0VR3hBF9xDvwnb8D2shVGOwNx+ulArw==} + engines: {node: '>= 20.19.0'} + + '@nodelib/fs.scandir@2.1.5': + resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} + engines: {node: '>= 8'} + + '@nodelib/fs.stat@2.0.5': + resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} + engines: {node: '>= 8'} + + '@nodelib/fs.walk@1.2.8': + resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} + engines: {node: '>= 8'} + + '@openzeppelin/contracts@5.4.0': + resolution: {integrity: sha512-eCYgWnLg6WO+X52I16TZt8uEjbtdkgLC0SUX/xnAksjjrQI4Xfn4iBRoI5j55dmlOhDv1Y7BoR3cU7e3WWhC6A==} + + '@pnpm/config.env-replace@1.1.0': + resolution: {integrity: sha512-htyl8TWnKL7K/ESFa1oW2UB5lVDxuF5DpM7tBi6Hu2LNL3mWkIzNLG6N4zoCUP1lCKNxWy/3iu8mS8MvToGd6w==} + engines: {node: '>=12.22.0'} + + '@pnpm/network.ca-file@1.0.2': + resolution: {integrity: sha512-YcPQ8a0jwYU9bTdJDpXjMi7Brhkr1mXsXrUJvjqM2mQDgkRiz8jFaQGOdaLxgjtUfQgZhKy/O3cG/YwmgKaxLA==} + engines: {node: '>=12.22.0'} + + '@pnpm/npm-conf@3.0.2': + resolution: {integrity: sha512-h104Kh26rR8tm+a3Qkc5S4VLYint3FE48as7+/5oCEcKR2idC/pF1G6AhIXKI+eHPJa/3J9i5z0Al47IeGHPkA==} + engines: {node: '>=12'} + + '@scure/base@1.1.9': + resolution: {integrity: sha512-8YKhl8GHiNI/pU2VMaofa2Tor7PJRAjwQLBBuilkJ9L5+13yVbC7JO/wS7piioAvPSwR3JKM1IJ/u4xQzbcXKg==} + + '@scure/base@1.2.6': + resolution: {integrity: sha512-g/nm5FgUa//MCj1gV09zTJTaM6KBAHqLN907YVQqf7zC49+DcO4B1so4ZX07Ef10Twr6nuqYEH9GEggFXA4Fmg==} + + '@scure/bip32@1.4.0': + resolution: {integrity: sha512-sVUpc0Vq3tXCkDGYVWGIZTRfnvu8LoTDaev7vbwh0omSvVORONr960MQWdKqJDCReIEmTj3PAr73O3aoxz7OPg==} + + '@scure/bip32@1.7.0': + resolution: {integrity: sha512-E4FFX/N3f4B80AKWp5dP6ow+flD1LQZo/w8UnLGYZO674jS6YnYeepycOOksv+vLPSpgN35wgKgy+ybfTb2SMw==} + + '@scure/bip39@1.3.0': + resolution: {integrity: sha512-disdg7gHuTDZtY+ZdkmLpPCk7fxZSu3gBiEGuoC1XYxv9cGx3Z6cpTggCgW6odSOOIXCiDjuGejW+aJKCY/pIQ==} + + '@scure/bip39@1.6.0': + resolution: {integrity: sha512-+lF0BbLiJNwVlev4eKelw1WWLaiKXw7sSl8T6FvBlWkdX+94aGJ4o8XjUdlyhTCjd8c+B3KT3JfS8P0bLRNU6A==} + + '@sindresorhus/is@5.6.0': + resolution: {integrity: sha512-TV7t8GKYaJWsn00tFDqBw8+Uqmr8A0fRU1tvTQhyZzGv0sJCGRQL3JGMI3ucuKo3XIZdUP+Lx7/gh2t3lewy7g==} + engines: {node: '>=14.16'} + + '@solidity-parser/parser@0.16.2': + resolution: {integrity: sha512-PI9NfoA3P8XK2VBkK5oIfRgKDsicwDZfkVq9ZTBCQYGOP1N2owgY2dyLGyU5/J/hQs8KRk55kdmvTLjy3Mu3vg==} + + '@solidity-parser/parser@0.20.2': + resolution: {integrity: sha512-rbu0bzwNvMcwAjH86hiEAcOeRI2EeK8zCkHDrFykh/Al8mvJeFmjy3UrE7GYQjNwOgbGUUtCn5/k8CB8zIu7QA==} + + '@szmarczak/http-timer@5.0.1': + resolution: {integrity: sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw==} + engines: {node: '>=14.16'} + + '@types/conventional-commits-parser@5.0.2': + resolution: {integrity: sha512-BgT2szDXnVypgpNxOK8aL5SGjUdaQbC++WZNjF1Qge3Og2+zhHj+RWhmehLhYyvQwqAmvezruVfOf8+3m74W+g==} + + '@types/http-cache-semantics@4.2.0': + resolution: {integrity: sha512-L3LgimLHXtGkWikKnsPg0/VFx9OGZaC+eN1u4r+OB1XRqH3meBIAVC2zr1WdMH+RHmnRkqliQAOHNJ/E0j/e0Q==} + + '@types/node@25.3.0': + resolution: {integrity: sha512-4K3bqJpXpqfg2XKGK9bpDTc6xO/xoUP/RBWS7AtRMug6zZFaRekiLzjVtAoZMquxoAbzBvy5nxQ7veS5eYzf8A==} + + '@wavs/solidity@0.5.0-beta.10': + resolution: {integrity: sha512-59TCS2waA/mw/W6EHMY5DxyJ6x5epmBQeoAa6ce9of/SdOijTSk8c9zYpwq44I4Lgzsw6bnNp8YO80/Q3igUVw==} + + JSONStream@1.3.5: + resolution: {integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==} + hasBin: true + + abitype@0.7.1: + resolution: {integrity: sha512-VBkRHTDZf9Myaek/dO3yMmOzB/y2s3Zo6nVU7yaw1G+TvCHAjwaJzNGN9yo4K5D8bU/VZXKP1EJpRhFr862PlQ==} + peerDependencies: + typescript: '>=4.9.4' + zod: ^3 >=3.19.1 + peerDependenciesMeta: + zod: + optional: true + + abitype@1.2.3: + resolution: {integrity: sha512-Ofer5QUnuUdTFsBRwARMoWKOH1ND5ehwYhJ3OJ/BQO+StkwQjHw0XyVh4vDttzHB7QOFhPHa/o413PJ82gU/Tg==} + peerDependencies: + typescript: '>=5.0.4' + zod: ^3.22.0 || ^4.0.0 + peerDependenciesMeta: + typescript: + optional: true + zod: + optional: true + + ajv-errors@1.0.1: + resolution: {integrity: sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==} + peerDependencies: + ajv: '>=5.0.0' + + ajv@6.12.6: + resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} + + ajv@8.18.0: + resolution: {integrity: sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A==} + + ansi-escapes@7.3.0: + resolution: {integrity: sha512-BvU8nYgGQBxcmMuEeUEmNTvrMVjJNSH7RgW24vXexN4Ven6qCvy4TntnvlnwnMLTVlcRQQdbRY8NKnaIoeWDNg==} + engines: {node: '>=18'} + + ansi-regex@5.0.1: + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} + engines: {node: '>=8'} + + ansi-regex@6.2.2: + resolution: {integrity: sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==} + engines: {node: '>=12'} + + ansi-styles@4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} + + ansi-styles@6.2.3: + resolution: {integrity: sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==} + engines: {node: '>=12'} + + antlr4@4.13.2: + resolution: {integrity: sha512-QiVbZhyy4xAZ17UPEuG3YTOt8ZaoeOR1CvEAqrEsDBsOqINslaB147i9xqljZqoyf5S+EUlGStaj+t22LT9MOg==} + engines: {node: '>=16'} + + antlr4ts@0.5.0-alpha.4: + resolution: {integrity: sha512-WPQDt1B74OfPv/IMS2ekXAKkTZIHl88uMetg6q3OTqgFxZ/dxDXI0EWLyZid/1Pe6hTftyg5N7gel5wNAGxXyQ==} + + argparse@2.0.1: + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + + array-ify@1.0.0: + resolution: {integrity: sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng==} + + ast-parents@0.0.1: + resolution: {integrity: sha512-XHusKxKz3zoYk1ic8Un640joHbFMhbqneyoZfoKnEGtf2ey9Uh/IdpcQplODdO/kENaMIWsD0nJm4+wX3UNLHA==} + + astral-regex@2.0.0: + resolution: {integrity: sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==} + engines: {node: '>=8'} + + asynckit@0.4.0: + resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} + + available-typed-arrays@1.0.7: + resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} + engines: {node: '>= 0.4'} + + axios@1.13.5: + resolution: {integrity: sha512-cz4ur7Vb0xS4/KUN0tPWe44eqxrIu31me+fbang3ijiNscE129POzipJJA6zniq2C/Z6sJCjMimjS8Lc/GAs8Q==} + + balanced-match@1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + + better-ajv-errors@2.0.3: + resolution: {integrity: sha512-t1vxUP+vYKsaYi/BbKo2K98nEAZmfi4sjwvmRT8aOPDzPJeAtLurfoIDazVkLILxO4K+Sw4YrLYnBQ46l6pePg==} + engines: {node: '>= 18.20.6'} + peerDependencies: + ajv: 4.11.8 - 8 + + brace-expansion@2.0.2: + resolution: {integrity: sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==} + + braces@3.0.3: + resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} + engines: {node: '>=8'} + + cacheable-lookup@7.0.0: + resolution: {integrity: sha512-+qJyx4xiKra8mZrcwhjMRMUhD5NR1R8esPkzIYxX96JiecFoxAXFuz/GpR3+ev4PE1WamHip78wV0vcmPQtp8w==} + engines: {node: '>=14.16'} + + cacheable-request@10.2.14: + resolution: {integrity: sha512-zkDT5WAF4hSSoUgyfg5tFIxz8XQK+25W/TLVojJTMKBaxevLBBtLxgqguAuVQB8PVW79FVjHcU+GJ9tVbDZ9mQ==} + engines: {node: '>=14.16'} + + call-bind-apply-helpers@1.0.2: + resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==} + engines: {node: '>= 0.4'} + + call-bind@1.0.8: + resolution: {integrity: sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==} + engines: {node: '>= 0.4'} + + call-bound@1.0.4: + resolution: {integrity: sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==} + engines: {node: '>= 0.4'} + + callsites@3.1.0: + resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} + engines: {node: '>=6'} + + chalk@4.1.2: + resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} + engines: {node: '>=10'} + + chalk@5.6.2: + resolution: {integrity: sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==} + engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} + + cli-cursor@5.0.0: + resolution: {integrity: sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==} + engines: {node: '>=18'} + + cli-truncate@5.1.1: + resolution: {integrity: sha512-SroPvNHxUnk+vIW/dOSfNqdy1sPEFkrTk6TUtqLCnBlo3N7TNYYkzzN7uSD6+jVjrdO4+p8nH7JzH6cIvUem6A==} + engines: {node: '>=20'} + + cliui@8.0.1: + resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} + engines: {node: '>=12'} + + color-convert@2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} + + color-name@1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + + colorette@2.0.20: + resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==} + + combined-stream@1.0.8: + resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} + engines: {node: '>= 0.8'} + + command-exists@1.2.9: + resolution: {integrity: sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w==} + + commander@10.0.1: + resolution: {integrity: sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==} + engines: {node: '>=14'} + + commander@11.1.0: + resolution: {integrity: sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==} + engines: {node: '>=16'} + + commander@12.1.0: + resolution: {integrity: sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==} + engines: {node: '>=18'} + + commander@14.0.3: + resolution: {integrity: sha512-H+y0Jo/T1RZ9qPP4Eh1pkcQcLRglraJaSLoyOtHxu6AapkjWVCy2Sit1QQ4x3Dng8qDlSsZEet7g5Pq06MvTgw==} + engines: {node: '>=20'} + + commander@8.3.0: + resolution: {integrity: sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==} + engines: {node: '>= 12'} + + compare-func@2.0.0: + resolution: {integrity: sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==} + + config-chain@1.1.13: + resolution: {integrity: sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==} + + conventional-changelog-angular@7.0.0: + resolution: {integrity: sha512-ROjNchA9LgfNMTTFSIWPzebCwOGFdgkEq45EnvvrmSLvCtAw0HSmrCs7/ty+wAeYUZyNay0YMUNYFTRL72PkBQ==} + engines: {node: '>=16'} + + conventional-changelog-conventionalcommits@7.0.2: + resolution: {integrity: sha512-NKXYmMR/Hr1DevQegFB4MwfM5Vv0m4UIxKZTTYuD98lpTknaZlSRrDOG4X7wIXpGkfsYxZTghUN+Qq+T0YQI7w==} + engines: {node: '>=16'} + + conventional-commits-parser@5.0.0: + resolution: {integrity: sha512-ZPMl0ZJbw74iS9LuX9YIAiW8pfM5p3yh2o/NbXHbkFuZzY5jvdi5jFycEOkmBW5H5I7nA+D6f3UcsCLP2vvSEA==} + engines: {node: '>=16'} + hasBin: true + + cosmiconfig-typescript-loader@6.2.0: + resolution: {integrity: sha512-GEN39v7TgdxgIoNcdkRE3uiAzQt3UXLyHbRHD6YoL048XAeOomyxaP+Hh/+2C6C2wYjxJ2onhJcsQp+L4YEkVQ==} + engines: {node: '>=v18'} + peerDependencies: + '@types/node': '*' + cosmiconfig: '>=9' + typescript: '>=5' + + cosmiconfig@8.3.6: + resolution: {integrity: sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==} + engines: {node: '>=14'} + peerDependencies: + typescript: '>=4.9.5' + peerDependenciesMeta: + typescript: + optional: true + + cosmiconfig@9.0.0: + resolution: {integrity: sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==} + engines: {node: '>=14'} + peerDependencies: + typescript: '>=4.9.5' + peerDependenciesMeta: + typescript: + optional: true + + cross-spawn@7.0.6: + resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} + engines: {node: '>= 8'} + + dargs@8.1.0: + resolution: {integrity: sha512-wAV9QHOsNbwnWdNW2FYvE1P56wtgSbM+3SZcdGiWQILwVjACCXDCI3Ai8QlCjMDB8YK5zySiXZYBiwGmNY3lnw==} + engines: {node: '>=12'} + + decimal.js@10.6.0: + resolution: {integrity: sha512-YpgQiITW3JXGntzdUmyUR1V812Hn8T1YVXhCu+wO3OpS4eU9l4YdD3qjyiKdV6mvV29zapkMeD390UVEf2lkUg==} + + decompress-response@6.0.0: + resolution: {integrity: sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==} + engines: {node: '>=10'} + + deep-extend@0.6.0: + resolution: {integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==} + engines: {node: '>=4.0.0'} + + defer-to-connect@2.0.1: + resolution: {integrity: sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==} + engines: {node: '>=10'} + + define-data-property@1.1.4: + resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} + engines: {node: '>= 0.4'} + + delayed-stream@1.0.0: + resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} + engines: {node: '>=0.4.0'} + + detect-file@1.0.0: + resolution: {integrity: sha512-DtCOLG98P007x7wiiOmfI0fi3eIKyWiLTGJ2MDnVi/E04lWGbf+JzrRHMm0rgIIZJGtHpKpbVgLWHrv8xXpc3Q==} + engines: {node: '>=0.10.0'} + + detect-indent@7.0.2: + resolution: {integrity: sha512-y+8xyqdGLL+6sh0tVeHcfP/QDd8gUgbasolJJpY7NgeQGSZ739bDtSiaiDgtoicy+mtYB81dKLxO9xRhCyIB3A==} + engines: {node: '>=12.20'} + + detect-newline@4.0.1: + resolution: {integrity: sha512-qE3Veg1YXzGHQhlA6jzebZN2qVf6NX+A7m7qlhCGG30dJixrAQhYOsJjsnBjJkCSmuOPpCk30145fr8FV0bzog==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + dir-glob@3.0.1: + resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} + engines: {node: '>=8'} + + dot-prop@5.3.0: + resolution: {integrity: sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==} + engines: {node: '>=8'} + + dotenv@17.3.1: + resolution: {integrity: sha512-IO8C/dzEb6O3F9/twg6ZLXz164a2fhTnEWb95H23Dm4OuN+92NmEAlTrupP9VW6Jm3sO26tQlqyvyi4CsnY9GA==} + engines: {node: '>=12'} + + dunder-proto@1.0.1: + resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} + engines: {node: '>= 0.4'} + + emoji-regex@10.6.0: + resolution: {integrity: sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==} + + emoji-regex@8.0.0: + resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + + env-paths@2.2.1: + resolution: {integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==} + engines: {node: '>=6'} + + environment@1.1.0: + resolution: {integrity: sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==} + engines: {node: '>=18'} + + error-ex@1.3.4: + resolution: {integrity: sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ==} + + es-define-property@1.0.1: + resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==} + engines: {node: '>= 0.4'} + + es-errors@1.3.0: + resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} + engines: {node: '>= 0.4'} + + es-object-atoms@1.1.1: + resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==} + engines: {node: '>= 0.4'} + + es-set-tostringtag@2.1.0: + resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==} + engines: {node: '>= 0.4'} + + esbuild@0.27.3: + resolution: {integrity: sha512-8VwMnyGCONIs6cWue2IdpHxHnAjzxnw2Zr7MkVxB2vjmQ2ivqGFb4LEG3SMnv0Gb2F/G/2yA8zUaiL1gywDCCg==} + engines: {node: '>=18'} + hasBin: true + + escalade@3.2.0: + resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} + engines: {node: '>=6'} + + ethereum-cryptography@2.2.1: + resolution: {integrity: sha512-r/W8lkHSiTLxUxW8Rf3u4HGB0xQweG2RyETjywylKZSzLWoWAijRz8WCuOtJ6wah+avllXBqZuk29HCCvhEIRg==} + + eventemitter3@5.0.1: + resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==} + + eventemitter3@5.0.4: + resolution: {integrity: sha512-mlsTRyGaPBjPedk6Bvw+aqbsXDtoAyAzm5MO7JgU+yVRyMQ5O8bD4Kcci7BS85f93veegeCPkL8R4GLClnjLFw==} + + execa@8.0.1: + resolution: {integrity: sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==} + engines: {node: '>=16.17'} + + expand-tilde@2.0.2: + resolution: {integrity: sha512-A5EmesHW6rfnZ9ysHQjPdJRni0SRar0tjtG5MNtm9n5TUvsYU8oozprtRD4AqHxcZWWlVuAmQo2nWKfN9oyjTw==} + engines: {node: '>=0.10.0'} + + fast-deep-equal@3.1.3: + resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} + + fast-diff@1.3.0: + resolution: {integrity: sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==} + + fast-glob@3.3.2: + resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} + engines: {node: '>=8.6.0'} + + fast-glob@3.3.3: + resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==} + engines: {node: '>=8.6.0'} + + fast-json-stable-stringify@2.1.0: + resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} + + fast-uri@3.1.0: + resolution: {integrity: sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==} + + fastq@1.20.1: + resolution: {integrity: sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==} + + fill-range@7.1.1: + resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} + engines: {node: '>=8'} + + find-up@7.0.0: + resolution: {integrity: sha512-YyZM99iHrqLKjmt4LJDj58KI+fYyufRLBSYcqycxf//KpBk9FoewoGX0450m9nB44qrZnovzC2oeP5hUibxc/g==} + engines: {node: '>=18'} + + findup-sync@5.0.0: + resolution: {integrity: sha512-MzwXju70AuyflbgeOhzvQWAvvQdo1XL0A9bVvlXsYcFEBM87WR4OakL4OfZq+QRmr+duJubio+UtNQCPsVESzQ==} + engines: {node: '>= 10.13.0'} + + follow-redirects@1.15.11: + resolution: {integrity: sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==} + engines: {node: '>=4.0'} + peerDependencies: + debug: '*' + peerDependenciesMeta: + debug: + optional: true + + for-each@0.3.5: + resolution: {integrity: sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==} + engines: {node: '>= 0.4'} + + forge-std@https://codeload.github.com/foundry-rs/forge-std/tar.gz/3b20d60d14b343ee4f908cb8079495c07f5e8981: + resolution: {tarball: https://codeload.github.com/foundry-rs/forge-std/tar.gz/3b20d60d14b343ee4f908cb8079495c07f5e8981} + version: 1.9.6 + + form-data-encoder@2.1.4: + resolution: {integrity: sha512-yDYSgNMraqvnxiEXO4hi88+YZxaHC6QKzb5N84iRCTDeRO7ZALpir/lVmf/uXUhnwUr2O4HU8s/n6x+yNjQkHw==} + engines: {node: '>= 14.17'} + + form-data@4.0.5: + resolution: {integrity: sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==} + engines: {node: '>= 6'} + + fs-extra@11.3.3: + resolution: {integrity: sha512-VWSRii4t0AFm6ixFFmLLx1t7wS1gh+ckoa84aOeapGum0h+EZd1EhEumSB+ZdDLnEPuucsVB9oB7cxJHap6Afg==} + engines: {node: '>=14.14'} + + fs.realpath@1.0.0: + resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} + + fsevents@2.3.3: + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + + function-bind@1.1.2: + resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + + generator-function@2.0.1: + resolution: {integrity: sha512-SFdFmIJi+ybC0vjlHN0ZGVGHc3lgE0DxPAT0djjVg+kjOnSqclqmj0KQ7ykTOLP6YxoqOvuAODGdcHJn+43q3g==} + engines: {node: '>= 0.4'} + + get-caller-file@2.0.5: + resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} + engines: {node: 6.* || 8.* || >= 10.*} + + get-east-asian-width@1.5.0: + resolution: {integrity: sha512-CQ+bEO+Tva/qlmw24dCejulK5pMzVnUOFOijVogd3KQs07HnRIgp8TGipvCCRT06xeYEbpbgwaCxglFyiuIcmA==} + engines: {node: '>=18'} + + get-intrinsic@1.3.0: + resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==} + engines: {node: '>= 0.4'} + + get-proto@1.0.1: + resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} + engines: {node: '>= 0.4'} + + get-stdin@9.0.0: + resolution: {integrity: sha512-dVKBjfWisLAicarI2Sf+JuBE/DghV4UzNAVe9yhEJuzeREd3JhOTE9cUaJTeSa77fsbQUK3pcOpJfM59+VKZaA==} + engines: {node: '>=12'} + + get-stream@6.0.1: + resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} + engines: {node: '>=10'} + + get-stream@8.0.1: + resolution: {integrity: sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==} + engines: {node: '>=16'} + + get-tsconfig@4.13.6: + resolution: {integrity: sha512-shZT/QMiSHc/YBLxxOkMtgSid5HFoauqCE3/exfsEcwg1WkeqjG+V40yBbBrsD+jW2HDXcs28xOfcbm2jI8Ddw==} + + git-hooks-list@3.2.0: + resolution: {integrity: sha512-ZHG9a1gEhUMX1TvGrLdyWb9kDopCBbTnI8z4JgRMYxsijWipgjSEYoPWqBuIB0DnRnvqlQSEeVmzpeuPm7NdFQ==} + + git-raw-commits@4.0.0: + resolution: {integrity: sha512-ICsMM1Wk8xSGMowkOmPrzo2Fgmfo4bMHLNX6ytHjajRJUqvHOw/TFapQ+QG75c3X/tTDDhOSRPGC52dDbNM8FQ==} + engines: {node: '>=16'} + hasBin: true + + glob-parent@5.1.2: + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} + engines: {node: '>= 6'} + + glob@8.1.0: + resolution: {integrity: sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==} + engines: {node: '>=12'} + deprecated: Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me + + global-directory@4.0.1: + resolution: {integrity: sha512-wHTUcDUoZ1H5/0iVqEudYW4/kAlN5cZ3j/bXn0Dpbizl9iaUVeWSHqiOjsgk6OW2bkLclbBjzewBz6weQ1zA2Q==} + engines: {node: '>=18'} + + global-modules@1.0.0: + resolution: {integrity: sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==} + engines: {node: '>=0.10.0'} + + global-prefix@1.0.2: + resolution: {integrity: sha512-5lsx1NUDHtSjfg0eHlmYvZKv8/nVqX4ckFbM+FrGcQ+04KWcWFo9P5MxPZYSzUvyzmdTbI7Eix8Q4IbELDqzKg==} + engines: {node: '>=0.10.0'} + + globby@13.2.2: + resolution: {integrity: sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + gopd@1.2.0: + resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} + engines: {node: '>= 0.4'} + + got@12.6.1: + resolution: {integrity: sha512-mThBblvlAF1d4O5oqyvN+ZxLAYwIJK7bpMxgYqPD9okW0C3qm5FFn7k811QrcuEBwaogR3ngOFoCfs6mRv7teQ==} + engines: {node: '>=14.16'} + + graceful-fs@4.2.10: + resolution: {integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==} + + graceful-fs@4.2.11: + resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} + + has-flag@4.0.0: + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} + engines: {node: '>=8'} + + has-property-descriptors@1.0.2: + resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} + + has-symbols@1.1.0: + resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==} + engines: {node: '>= 0.4'} + + has-tostringtag@1.0.2: + resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} + engines: {node: '>= 0.4'} + + hasown@2.0.2: + resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} + engines: {node: '>= 0.4'} + + homedir-polyfill@1.0.3: + resolution: {integrity: sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==} + engines: {node: '>=0.10.0'} + + http-cache-semantics@4.2.0: + resolution: {integrity: sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ==} + + http2-wrapper@2.2.1: + resolution: {integrity: sha512-V5nVw1PAOgfI3Lmeaj2Exmeg7fenjhRUgz1lPSezy1CuhPYbgQtbQj4jZfEAEMlaL+vupsvhjqCyjzob0yxsmQ==} + engines: {node: '>=10.19.0'} + + human-signals@5.0.0: + resolution: {integrity: sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==} + engines: {node: '>=16.17.0'} + + ignore@5.3.2: + resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} + engines: {node: '>= 4'} + + import-fresh@3.3.1: + resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==} + engines: {node: '>=6'} + + import-meta-resolve@4.2.0: + resolution: {integrity: sha512-Iqv2fzaTQN28s/FwZAoFq0ZSs/7hMAHJVX+w8PZl3cY19Pxk6jFFalxQoIfW2826i/fDLXv8IiEZRIT0lDuWcg==} + + inflight@1.0.6: + resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} + deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. + + inherits@2.0.4: + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + + ini@1.3.8: + resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} + + ini@4.1.1: + resolution: {integrity: sha512-QQnnxNyfvmHFIsj7gkPcYymR8Jdw/o7mp5ZFihxn6h8Ci6fh3Dx4E1gPjpQEpIuPo9XVNY/ZUwh4BPMjGyL01g==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + + is-arguments@1.2.0: + resolution: {integrity: sha512-7bVbi0huj/wrIAOzb8U1aszg9kdi3KN/CyU19CTI7tAoZYEZoL9yCDXpbXN+uPsuWnP02cyug1gleqq+TU+YCA==} + engines: {node: '>= 0.4'} + + is-arrayish@0.2.1: + resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} + + is-callable@1.2.7: + resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} + engines: {node: '>= 0.4'} + + is-extglob@2.1.1: + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} + + is-fullwidth-code-point@3.0.0: + resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} + engines: {node: '>=8'} + + is-fullwidth-code-point@5.1.0: + resolution: {integrity: sha512-5XHYaSyiqADb4RnZ1Bdad6cPp8Toise4TzEjcOYDHZkTCbKgiUl7WTUCpNWHuxmDt91wnsZBc9xinNzopv3JMQ==} + engines: {node: '>=18'} + + is-generator-function@1.1.2: + resolution: {integrity: sha512-upqt1SkGkODW9tsGNG5mtXTXtECizwtS2kA161M+gJPc1xdb/Ax629af6YrTwcOeQHbewrPNlE5Dx7kzvXTizA==} + engines: {node: '>= 0.4'} + + is-glob@4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} + + is-number@7.0.0: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} + + is-obj@2.0.0: + resolution: {integrity: sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==} + engines: {node: '>=8'} + + is-plain-obj@4.1.0: + resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==} + engines: {node: '>=12'} + + is-regex@1.2.1: + resolution: {integrity: sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==} + engines: {node: '>= 0.4'} + + is-stream@3.0.0: + resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + is-text-path@2.0.0: + resolution: {integrity: sha512-+oDTluR6WEjdXEJMnC2z6A4FRwFoYuvShVVEGsS7ewc0UTi2QtAKMDJuL4BDEVt+5T7MjFo12RP8ghOM75oKJw==} + engines: {node: '>=8'} + + is-typed-array@1.1.15: + resolution: {integrity: sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==} + engines: {node: '>= 0.4'} + + is-windows@1.0.2: + resolution: {integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==} + engines: {node: '>=0.10.0'} + + isexe@2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + + isows@1.0.7: + resolution: {integrity: sha512-I1fSfDCZL5P0v33sVqeTDSpcstAg/N+wF5HS033mogOVIp4B+oHC7oOCsA3axAbBSGTJ8QubbNmnIRN/h8U7hg==} + peerDependencies: + ws: '*' + + jiti@2.6.1: + resolution: {integrity: sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==} + hasBin: true + + js-sha3@0.8.0: + resolution: {integrity: sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==} + + js-tokens@4.0.0: + resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + + js-yaml@4.1.1: + resolution: {integrity: sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==} + hasBin: true + + jsel@1.1.6: + resolution: {integrity: sha512-7E6r8kVzjmKhwXR/82Z+43edfOJGRvLvx6cJZ+SS2MGAPPtYZGnaIsFHpQMA1IbIPA9twDProkob4IIAJ0ZqSw==} + engines: {node: '>=0.10.0'} + + json-buffer@3.0.1: + resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} + + json-parse-even-better-errors@2.3.1: + resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} + + json-schema-traverse@0.4.1: + resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} + + json-schema-traverse@1.0.0: + resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} + + jsonfile@6.2.0: + resolution: {integrity: sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==} + + jsonparse@1.3.1: + resolution: {integrity: sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==} + engines: {'0': node >= 0.2.0} + + jsonpointer@5.0.1: + resolution: {integrity: sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==} + engines: {node: '>=0.10.0'} + + keyv@4.5.4: + resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} + + latest-version@7.0.0: + resolution: {integrity: sha512-KvNT4XqAMzdcL6ka6Tl3i2lYeFDgXNCuIX+xNx6ZMVR1dFq+idXd9FLKNMOIx0t9mJ9/HudyX4oZWXZQ0UJHeg==} + engines: {node: '>=14.16'} + + leven@3.1.0: + resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==} + engines: {node: '>=6'} + + lines-and-columns@1.2.4: + resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} + + lint-staged@16.2.7: + resolution: {integrity: sha512-lDIj4RnYmK7/kXMya+qJsmkRFkGolciXjrsZ6PC25GdTfWOAWetR0ZbsNXRAj1EHHImRSalc+whZFg56F5DVow==} + engines: {node: '>=20.17'} + hasBin: true + + listr2@9.0.5: + resolution: {integrity: sha512-ME4Fb83LgEgwNw96RKNvKV4VTLuXfoKudAmm2lP8Kk87KaMK0/Xrx/aAkMWmT8mDb+3MlFDspfbCs7adjRxA2g==} + engines: {node: '>=20.0.0'} + + locate-path@7.2.0: + resolution: {integrity: sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + lodash.camelcase@4.3.0: + resolution: {integrity: sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==} + + lodash.isplainobject@4.0.6: + resolution: {integrity: sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==} + + lodash.kebabcase@4.1.1: + resolution: {integrity: sha512-N8XRTIMMqqDgSy4VLKPnJ/+hpGZN+PHQiJnSenYqPaVV/NCqEogTnAdZLQiGKhxX+JCs8waWq2t1XHWKOmlY8g==} + + lodash.merge@4.6.2: + resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} + + lodash.mergewith@4.6.2: + resolution: {integrity: sha512-GK3g5RPZWTRSeLSpgP8Xhra+pnjBC56q9FZYe1d5RN3TJ35dbkGy3YqBSMbyCrlbi+CM9Z3Jk5yTL7RCsqboyQ==} + + lodash.snakecase@4.1.1: + resolution: {integrity: sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw==} + + lodash.startcase@4.4.0: + resolution: {integrity: sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==} + + lodash.truncate@4.4.2: + resolution: {integrity: sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==} + + lodash.uniq@4.5.0: + resolution: {integrity: sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==} + + lodash.upperfirst@4.3.1: + resolution: {integrity: sha512-sReKOYJIJf74dhJONhU4e0/shzi1trVbSWDOhKYE5XV2O+H7Sb2Dihwuc7xWxVl+DgFPyTqIN3zMfT9cq5iWDg==} + + lodash@4.17.23: + resolution: {integrity: sha512-LgVTMpQtIopCi79SJeDiP0TfWi5CNEc/L/aRdTh3yIvmZXTnheWpKjSZhnvMl8iXbC1tFg9gdHHDMLoV7CnG+w==} + + log-update@6.1.0: + resolution: {integrity: sha512-9ie8ItPR6tjY5uYJh8K/Zrv/RMZ5VOlOWvtZdEHYSTFKZfIBPQa9tOAEeAWhd+AnIneLJ22w5fjOYtoutpWq5w==} + engines: {node: '>=18'} + + lowercase-keys@3.0.0: + resolution: {integrity: sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + math-intrinsics@1.1.0: + resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} + engines: {node: '>= 0.4'} + + memorystream@0.3.1: + resolution: {integrity: sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==} + engines: {node: '>= 0.10.0'} + + meow@12.1.1: + resolution: {integrity: sha512-BhXM0Au22RwUneMPwSCnyhTOizdWoIEPU9sp0Aqa1PnDMR5Wv2FGXYDjuzJEIX+Eo2Rb8xuYe5jrnm5QowQFkw==} + engines: {node: '>=16.10'} + + merge-stream@2.0.0: + resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} + + merge2@1.4.1: + resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} + engines: {node: '>= 8'} + + micromatch@4.0.8: + resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} + engines: {node: '>=8.6'} + + mime-db@1.52.0: + resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} + engines: {node: '>= 0.6'} + + mime-types@2.1.35: + resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} + engines: {node: '>= 0.6'} + + mimic-fn@4.0.0: + resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==} + engines: {node: '>=12'} + + mimic-function@5.0.1: + resolution: {integrity: sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==} + engines: {node: '>=18'} + + mimic-response@3.1.0: + resolution: {integrity: sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==} + engines: {node: '>=10'} + + mimic-response@4.0.0: + resolution: {integrity: sha512-e5ISH9xMYU0DzrT+jl8q2ze9D6eWBto+I8CNpe+VI+K2J/F/k3PdkdTdz4wvGVH4NTpo+NRYTVIuMQEMMcsLqg==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + minimatch@5.1.6: + resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==} + engines: {node: '>=10'} + + minimist@1.2.8: + resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} + + nano-spawn@2.0.0: + resolution: {integrity: sha512-tacvGzUY5o2D8CBh2rrwxyNojUsZNU2zjNTzKQrkgGJQTbGAfArVWXSKMBokBeeg6C7OLRGUEyoFlYbfeWQIqw==} + engines: {node: '>=20.17'} + + normalize-url@8.1.1: + resolution: {integrity: sha512-JYc0DPlpGWB40kH5g07gGTrYuMqV653k3uBKY6uITPWds3M0ov3GaWGp9lbE3Bzngx8+XkfzgvASb9vk9JDFXQ==} + engines: {node: '>=14.16'} + + npm-run-path@5.3.0: + resolution: {integrity: sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + once@1.4.0: + resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + + onetime@6.0.0: + resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==} + engines: {node: '>=12'} + + onetime@7.0.0: + resolution: {integrity: sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==} + engines: {node: '>=18'} + + os-tmpdir@1.0.2: + resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==} + engines: {node: '>=0.10.0'} + + ox@0.12.4: + resolution: {integrity: sha512-+P+C7QzuwPV8lu79dOwjBKfB2CbnbEXe/hfyyrff1drrO1nOOj3Hc87svHfcW1yneRr3WXaKr6nz11nq+/DF9Q==} + peerDependencies: + typescript: '>=5.4.0' + peerDependenciesMeta: + typescript: + optional: true + + p-cancelable@3.0.0: + resolution: {integrity: sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw==} + engines: {node: '>=12.20'} + + p-limit@4.0.0: + resolution: {integrity: sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + p-locate@6.0.0: + resolution: {integrity: sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + package-json@8.1.1: + resolution: {integrity: sha512-cbH9IAIJHNj9uXi196JVsRlt7cHKak6u/e6AkL/bkRelZ7rlL3X1YKxsZwa36xipOEKAsdtmaG6aAJoM1fx2zA==} + engines: {node: '>=14.16'} + + parent-module@1.0.1: + resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} + engines: {node: '>=6'} + + parse-json@5.2.0: + resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} + engines: {node: '>=8'} + + parse-passwd@1.0.0: + resolution: {integrity: sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q==} + engines: {node: '>=0.10.0'} + + path-exists@5.0.0: + resolution: {integrity: sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + path-key@3.1.1: + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} + engines: {node: '>=8'} + + path-key@4.0.0: + resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==} + engines: {node: '>=12'} + + path-type@4.0.0: + resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} + engines: {node: '>=8'} + + picocolors@1.1.1: + resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} + + picomatch@2.3.1: + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + engines: {node: '>=8.6'} + + pidtree@0.6.0: + resolution: {integrity: sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==} + engines: {node: '>=0.10'} + hasBin: true + + pluralize@8.0.0: + resolution: {integrity: sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==} + engines: {node: '>=4'} + + possible-typed-array-names@1.1.0: + resolution: {integrity: sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==} + engines: {node: '>= 0.4'} + + prettier@2.8.8: + resolution: {integrity: sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==} + engines: {node: '>=10.13.0'} + hasBin: true + + proto-list@1.2.4: + resolution: {integrity: sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==} + + proxy-from-env@1.1.0: + resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} + + punycode@2.3.1: + resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} + engines: {node: '>=6'} + + queue-microtask@1.2.3: + resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + + quick-lru@5.1.1: + resolution: {integrity: sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==} + engines: {node: '>=10'} + + rc@1.2.8: + resolution: {integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==} + hasBin: true + + registry-auth-token@5.1.1: + resolution: {integrity: sha512-P7B4+jq8DeD2nMsAcdfaqHbssgHtZ7Z5+++a5ask90fvmJ8p5je4mOa+wzu+DB4vQ5tdJV/xywY+UnVFeQLV5Q==} + engines: {node: '>=14'} + + registry-url@6.0.1: + resolution: {integrity: sha512-+crtS5QjFRqFCoQmvGduwYWEBng99ZvmFvF+cUJkGYF1L1BfU8C6Zp9T7f5vPAwyLkUExpvK+ANVZmGU49qi4Q==} + engines: {node: '>=12'} + + require-directory@2.1.1: + resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} + engines: {node: '>=0.10.0'} + + require-from-string@2.0.2: + resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} + engines: {node: '>=0.10.0'} + + resolve-alpn@1.2.1: + resolution: {integrity: sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==} + + resolve-dir@1.0.1: + resolution: {integrity: sha512-R7uiTjECzvOsWSfdM0QKFNBVFcK27aHOUwdvK53BcW8zqnGdYp0Fbj82cy54+2A4P2tFM22J5kRfe1R+lM/1yg==} + engines: {node: '>=0.10.0'} + + resolve-from@4.0.0: + resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} + engines: {node: '>=4'} + + resolve-from@5.0.0: + resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} + engines: {node: '>=8'} + + resolve-pkg-maps@1.0.0: + resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} + + responselike@3.0.0: + resolution: {integrity: sha512-40yHxbNcl2+rzXvZuVkrYohathsSJlMTXKryG5y8uciHv1+xDLHQpgjG64JUO9nrEq2jGLH6IZ8BcZyw3wrweg==} + engines: {node: '>=14.16'} + + restore-cursor@5.1.0: + resolution: {integrity: sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==} + engines: {node: '>=18'} + + reusify@1.1.0: + resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==} + engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + + rfdc@1.4.1: + resolution: {integrity: sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==} + + run-parallel@1.2.0: + resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + + safe-regex-test@1.1.0: + resolution: {integrity: sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==} + engines: {node: '>= 0.4'} + + semver@5.7.2: + resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==} + hasBin: true + + semver@6.3.1: + resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} + hasBin: true + + semver@7.7.4: + resolution: {integrity: sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==} + engines: {node: '>=10'} + hasBin: true + + set-function-length@1.2.2: + resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} + engines: {node: '>= 0.4'} + + shebang-command@2.0.0: + resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} + engines: {node: '>=8'} + + shebang-regex@3.0.0: + resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} + engines: {node: '>=8'} + + signal-exit@4.1.0: + resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} + engines: {node: '>=14'} + + slash@4.0.0: + resolution: {integrity: sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==} + engines: {node: '>=12'} + + slice-ansi@4.0.0: + resolution: {integrity: sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==} + engines: {node: '>=10'} + + slice-ansi@7.1.2: + resolution: {integrity: sha512-iOBWFgUX7caIZiuutICxVgX1SdxwAVFFKwt1EvMYYec/NWO5meOJ6K5uQxhrYBdQJne4KxiqZc+KptFOWFSI9w==} + engines: {node: '>=18'} + + solc-typed-ast@18.2.4: + resolution: {integrity: sha512-HTkr6b2WMSJ3pgVRf5us/UWjCvfSlvE1yUcHna+miSPerkyppGnZQaJWqrcECa7ZjxmSV7H2buUDKux9hR4ivg==} + hasBin: true + + solc@0.8.25: + resolution: {integrity: sha512-7P0TF8gPeudl1Ko3RGkyY6XVCxe2SdD/qQhtns1vl3yAbK/PDifKDLHGtx1t7mX3LgR7ojV7Fg/Kc6Q9D2T8UQ==} + engines: {node: '>=10.0.0'} + hasBin: true + + solhint-community@4.0.0: + resolution: {integrity: sha512-BERw3qYzkJE64EwvYrp2+iiTN8yAZOJ74FCiL4bTBp7v0JFUvRYCEGZKAqfHcfi/koKkzM6qThsJUceKm9vvfg==} + hasBin: true + + solhint@6.0.3: + resolution: {integrity: sha512-LYiy1bN8X9eUsti13mbS4fY6ILVxhP6VoOgqbHxCsHl5VPnxOWf7U1V9ZvgizxdInKBMW82D1FNJO+daAcWHbA==} + hasBin: true + + sort-object-keys@1.1.3: + resolution: {integrity: sha512-855pvK+VkU7PaKYPc+Jjnmt4EzejQHyhhF33q31qG8x7maDzkeFhAAThdCYay11CISO+qAMwjOBP+fPZe0IPyg==} + + sort-package-json@2.10.0: + resolution: {integrity: sha512-MYecfvObMwJjjJskhxYfuOADkXp1ZMMnCFC8yhp+9HDsk7HhR336hd7eiBs96lTXfiqmUNI+WQCeCMRBhl251g==} + hasBin: true + + split2@4.2.0: + resolution: {integrity: sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==} + engines: {node: '>= 10.x'} + + src-location@1.1.0: + resolution: {integrity: sha512-idBVZgLZGzB3B2Et317AFDQto7yRgp1tOuFd+VKIH2dw1jO1b6p07zNjtQoVhkW+CY6oGTp9Y5UIfbJoZRsoFQ==} + + string-argv@0.3.2: + resolution: {integrity: sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==} + engines: {node: '>=0.6.19'} + + string-width@4.2.3: + resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} + engines: {node: '>=8'} + + string-width@7.2.0: + resolution: {integrity: sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==} + engines: {node: '>=18'} + + string-width@8.2.0: + resolution: {integrity: sha512-6hJPQ8N0V0P3SNmP6h2J99RLuzrWz2gvT7VnK5tKvrNqJoyS9W4/Fb8mo31UiPvy00z7DQXkP2hnKBVav76thw==} + engines: {node: '>=20'} + + strip-ansi@6.0.1: + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} + engines: {node: '>=8'} + + strip-ansi@7.1.2: + resolution: {integrity: sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==} + engines: {node: '>=12'} + + strip-final-newline@3.0.0: + resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==} + engines: {node: '>=12'} + + strip-json-comments@2.0.1: + resolution: {integrity: sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==} + engines: {node: '>=0.10.0'} + + supports-color@7.2.0: + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} + engines: {node: '>=8'} + + table@6.9.0: + resolution: {integrity: sha512-9kY+CygyYM6j02t5YFHbNz2FN5QmYGv9zAjVp4lCDjlCw7amdckXlEt/bjMhUIfj4ThGRE4gCUH5+yGnNuPo5A==} + engines: {node: '>=10.0.0'} + + text-extensions@2.4.0: + resolution: {integrity: sha512-te/NtwBwfiNRLf9Ijqx3T0nlqZiQ2XrrtBvu+cLL8ZRrGkO0NHTug8MYFKyoSrv/sHTaSKfilUkizV6XhxMJ3g==} + engines: {node: '>=8'} + + text-table@0.2.0: + resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} + + through@2.3.8: + resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} + + tinyexec@1.0.2: + resolution: {integrity: sha512-W/KYk+NFhkmsYpuHq5JykngiOCnxeVL8v8dFnqxSD8qEEdRfXk1SDM6JzNqcERbcGYj9tMrDQBYV9cjgnunFIg==} + engines: {node: '>=18'} + + tmp@0.0.33: + resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==} + engines: {node: '>=0.6.0'} + + to-regex-range@5.0.1: + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} + + tsx@4.21.0: + resolution: {integrity: sha512-5C1sg4USs1lfG0GFb2RLXsdpXqBSEhAaA/0kPL01wxzpMqLILNxIxIOKiILz+cdg/pLnOUxFYOR5yhHU666wbw==} + engines: {node: '>=18.0.0'} + hasBin: true + + typescript@5.9.3: + resolution: {integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==} + engines: {node: '>=14.17'} + hasBin: true + + undici-types@7.18.2: + resolution: {integrity: sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w==} + + unicorn-magic@0.1.0: + resolution: {integrity: sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==} + engines: {node: '>=18'} + + universalify@2.0.1: + resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} + engines: {node: '>= 10.0.0'} + + uri-js@4.4.1: + resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + + util@0.12.5: + resolution: {integrity: sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==} + + viem@2.46.2: + resolution: {integrity: sha512-w8Qv5Vyo7TfXcH3vgmxRa1NRvzJCDy2aSGSRsJn3503nC/qVbgEQ+n3aj/CkqWXbloudZh97h5o5aQrQSVGy0w==} + peerDependencies: + typescript: '>=5.0.4' + peerDependenciesMeta: + typescript: + optional: true + + web3-errors@1.3.1: + resolution: {integrity: sha512-w3NMJujH+ZSW4ltIZZKtdbkbyQEvBzyp3JRn59Ckli0Nz4VMsVq8aF1bLWM7A2kuQ+yVEm3ySeNU+7mSRwx7RQ==} + engines: {node: '>=14', npm: '>=6.12.0'} + + web3-eth-abi@4.4.1: + resolution: {integrity: sha512-60ecEkF6kQ9zAfbTY04Nc9q4eEYM0++BySpGi8wZ2PD1tw/c0SDvsKhV6IKURxLJhsDlb08dATc3iD6IbtWJmg==} + engines: {node: '>=14', npm: '>=6.12.0'} + + web3-types@1.10.0: + resolution: {integrity: sha512-0IXoaAFtFc8Yin7cCdQfB9ZmjafrbP6BO0f0KT/khMhXKUpoJ6yShrVhiNpyRBo8QQjuOagsWzwSK2H49I7sbw==} + engines: {node: '>=14', npm: '>=6.12.0'} + + web3-utils@4.3.3: + resolution: {integrity: sha512-kZUeCwaQm+RNc2Bf1V3BYbF29lQQKz28L0y+FA4G0lS8IxtJVGi5SeDTUkpwqqkdHHC7JcapPDnyyzJ1lfWlOw==} + engines: {node: '>=14', npm: '>=6.12.0'} + + web3-validator@2.0.6: + resolution: {integrity: sha512-qn9id0/l1bWmvH4XfnG/JtGKKwut2Vokl6YXP5Kfg424npysmtRLe9DgiNBM9Op7QL/aSiaA0TVXibuIuWcizg==} + engines: {node: '>=14', npm: '>=6.12.0'} + + which-typed-array@1.1.20: + resolution: {integrity: sha512-LYfpUkmqwl0h9A2HL09Mms427Q1RZWuOHsukfVcKRq9q95iQxdw0ix1JQrqbcDR9PH1QDwf5Qo8OZb5lksZ8Xg==} + engines: {node: '>= 0.4'} + + which@1.3.1: + resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==} + hasBin: true + + which@2.0.2: + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} + hasBin: true + + wrap-ansi@7.0.0: + resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} + engines: {node: '>=10'} + + wrap-ansi@9.0.2: + resolution: {integrity: sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==} + engines: {node: '>=18'} + + wrappy@1.0.2: + resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + + ws@8.18.3: + resolution: {integrity: sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==} + engines: {node: '>=10.0.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: '>=5.0.2' + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + + y18n@5.0.8: + resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} + engines: {node: '>=10'} + + yaml@2.8.2: + resolution: {integrity: sha512-mplynKqc1C2hTVYxd0PU2xQAc22TI1vShAYGksCCfxbn/dFwnHTNi1bvYsBTkhdUNtGIf5xNOg938rrSSYvS9A==} + engines: {node: '>= 14.6'} + hasBin: true + + yargs-parser@21.1.1: + resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} + engines: {node: '>=12'} + + yargs@17.7.2: + resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} + engines: {node: '>=12'} + + yocto-queue@1.2.2: + resolution: {integrity: sha512-4LCcse/U2MHZ63HAJVE+v71o7yOdIe4cZ70Wpf8D/IyjDKYQLV5GD46B+hSTjJsvV5PztjvHoU580EftxjDZFQ==} + engines: {node: '>=12.20'} + + zod@3.25.76: + resolution: {integrity: sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==} + +snapshots: + + '@adraffy/ens-normalize@1.11.1': {} + + '@babel/code-frame@7.29.0': + dependencies: + '@babel/helper-validator-identifier': 7.28.5 + js-tokens: 4.0.0 + picocolors: 1.1.1 + + '@babel/helper-validator-identifier@7.28.5': {} + + '@commitlint/cli@19.3.0(@types/node@25.3.0)(typescript@5.9.3)': + dependencies: + '@commitlint/format': 19.8.1 + '@commitlint/lint': 19.8.1 + '@commitlint/load': 19.8.1(@types/node@25.3.0)(typescript@5.9.3) + '@commitlint/read': 19.8.1 + '@commitlint/types': 19.8.1 + execa: 8.0.1 + yargs: 17.7.2 + transitivePeerDependencies: + - '@types/node' + - typescript + + '@commitlint/config-conventional@19.2.2': + dependencies: + '@commitlint/types': 19.8.1 + conventional-changelog-conventionalcommits: 7.0.2 + + '@commitlint/config-validator@19.8.1': + dependencies: + '@commitlint/types': 19.8.1 + ajv: 8.18.0 + + '@commitlint/ensure@19.8.1': + dependencies: + '@commitlint/types': 19.8.1 + lodash.camelcase: 4.3.0 + lodash.kebabcase: 4.1.1 + lodash.snakecase: 4.1.1 + lodash.startcase: 4.4.0 + lodash.upperfirst: 4.3.1 + + '@commitlint/execute-rule@19.8.1': {} + + '@commitlint/format@19.8.1': + dependencies: + '@commitlint/types': 19.8.1 + chalk: 5.6.2 + + '@commitlint/is-ignored@19.8.1': + dependencies: + '@commitlint/types': 19.8.1 + semver: 7.7.4 + + '@commitlint/lint@19.8.1': + dependencies: + '@commitlint/is-ignored': 19.8.1 + '@commitlint/parse': 19.8.1 + '@commitlint/rules': 19.8.1 + '@commitlint/types': 19.8.1 + + '@commitlint/load@19.8.1(@types/node@25.3.0)(typescript@5.9.3)': + dependencies: + '@commitlint/config-validator': 19.8.1 + '@commitlint/execute-rule': 19.8.1 + '@commitlint/resolve-extends': 19.8.1 + '@commitlint/types': 19.8.1 + chalk: 5.6.2 + cosmiconfig: 9.0.0(typescript@5.9.3) + cosmiconfig-typescript-loader: 6.2.0(@types/node@25.3.0)(cosmiconfig@9.0.0(typescript@5.9.3))(typescript@5.9.3) + lodash.isplainobject: 4.0.6 + lodash.merge: 4.6.2 + lodash.uniq: 4.5.0 + transitivePeerDependencies: + - '@types/node' + - typescript + + '@commitlint/message@19.8.1': {} + + '@commitlint/parse@19.8.1': + dependencies: + '@commitlint/types': 19.8.1 + conventional-changelog-angular: 7.0.0 + conventional-commits-parser: 5.0.0 + + '@commitlint/read@19.8.1': + dependencies: + '@commitlint/top-level': 19.8.1 + '@commitlint/types': 19.8.1 + git-raw-commits: 4.0.0 + minimist: 1.2.8 + tinyexec: 1.0.2 + + '@commitlint/resolve-extends@19.8.1': + dependencies: + '@commitlint/config-validator': 19.8.1 + '@commitlint/types': 19.8.1 + global-directory: 4.0.1 + import-meta-resolve: 4.2.0 + lodash.mergewith: 4.6.2 + resolve-from: 5.0.0 + + '@commitlint/rules@19.8.1': + dependencies: + '@commitlint/ensure': 19.8.1 + '@commitlint/message': 19.8.1 + '@commitlint/to-lines': 19.8.1 + '@commitlint/types': 19.8.1 + + '@commitlint/to-lines@19.8.1': {} + + '@commitlint/top-level@19.8.1': + dependencies: + find-up: 7.0.0 + + '@commitlint/types@19.8.1': + dependencies: + '@types/conventional-commits-parser': 5.0.2 + chalk: 5.6.2 + + '@defi-wonderland/natspec-smells@1.1.6(typescript@5.9.3)(zod@3.25.76)': + dependencies: + fast-glob: 3.3.2 + solc-typed-ast: 18.2.4(typescript@5.9.3)(zod@3.25.76) + yargs: 17.7.2 + transitivePeerDependencies: + - debug + - typescript + - zod + + '@esbuild/aix-ppc64@0.27.3': + optional: true + + '@esbuild/android-arm64@0.27.3': + optional: true + + '@esbuild/android-arm@0.27.3': + optional: true + + '@esbuild/android-x64@0.27.3': + optional: true + + '@esbuild/darwin-arm64@0.27.3': + optional: true + + '@esbuild/darwin-x64@0.27.3': + optional: true + + '@esbuild/freebsd-arm64@0.27.3': + optional: true + + '@esbuild/freebsd-x64@0.27.3': + optional: true + + '@esbuild/linux-arm64@0.27.3': + optional: true + + '@esbuild/linux-arm@0.27.3': + optional: true + + '@esbuild/linux-ia32@0.27.3': + optional: true + + '@esbuild/linux-loong64@0.27.3': + optional: true + + '@esbuild/linux-mips64el@0.27.3': + optional: true + + '@esbuild/linux-ppc64@0.27.3': + optional: true + + '@esbuild/linux-riscv64@0.27.3': + optional: true + + '@esbuild/linux-s390x@0.27.3': + optional: true + + '@esbuild/linux-x64@0.27.3': + optional: true + + '@esbuild/netbsd-arm64@0.27.3': + optional: true + + '@esbuild/netbsd-x64@0.27.3': + optional: true + + '@esbuild/openbsd-arm64@0.27.3': + optional: true + + '@esbuild/openbsd-x64@0.27.3': + optional: true + + '@esbuild/openharmony-arm64@0.27.3': + optional: true + + '@esbuild/sunos-x64@0.27.3': + optional: true + + '@esbuild/win32-arm64@0.27.3': + optional: true + + '@esbuild/win32-ia32@0.27.3': + optional: true + + '@esbuild/win32-x64@0.27.3': + optional: true + + '@humanwhocodes/momoa@2.0.4': {} + + '@noble/ciphers@1.3.0': {} + + '@noble/curves@1.4.2': + dependencies: + '@noble/hashes': 1.4.0 + + '@noble/curves@1.9.1': + dependencies: + '@noble/hashes': 1.8.0 + + '@noble/hashes@1.4.0': {} + + '@noble/hashes@1.8.0': {} + + '@noble/hashes@2.0.1': {} + + '@nodelib/fs.scandir@2.1.5': + dependencies: + '@nodelib/fs.stat': 2.0.5 + run-parallel: 1.2.0 + + '@nodelib/fs.stat@2.0.5': {} + + '@nodelib/fs.walk@1.2.8': + dependencies: + '@nodelib/fs.scandir': 2.1.5 + fastq: 1.20.1 + + '@openzeppelin/contracts@5.4.0': {} + + '@pnpm/config.env-replace@1.1.0': {} + + '@pnpm/network.ca-file@1.0.2': + dependencies: + graceful-fs: 4.2.10 + + '@pnpm/npm-conf@3.0.2': + dependencies: + '@pnpm/config.env-replace': 1.1.0 + '@pnpm/network.ca-file': 1.0.2 + config-chain: 1.1.13 + + '@scure/base@1.1.9': {} + + '@scure/base@1.2.6': {} + + '@scure/bip32@1.4.0': + dependencies: + '@noble/curves': 1.4.2 + '@noble/hashes': 1.4.0 + '@scure/base': 1.1.9 + + '@scure/bip32@1.7.0': + dependencies: + '@noble/curves': 1.9.1 + '@noble/hashes': 1.8.0 + '@scure/base': 1.2.6 + + '@scure/bip39@1.3.0': + dependencies: + '@noble/hashes': 1.4.0 + '@scure/base': 1.1.9 + + '@scure/bip39@1.6.0': + dependencies: + '@noble/hashes': 1.8.0 + '@scure/base': 1.2.6 + + '@sindresorhus/is@5.6.0': {} + + '@solidity-parser/parser@0.16.2': + dependencies: + antlr4ts: 0.5.0-alpha.4 + + '@solidity-parser/parser@0.20.2': {} + + '@szmarczak/http-timer@5.0.1': + dependencies: + defer-to-connect: 2.0.1 + + '@types/conventional-commits-parser@5.0.2': + dependencies: + '@types/node': 25.3.0 + + '@types/http-cache-semantics@4.2.0': {} + + '@types/node@25.3.0': + dependencies: + undici-types: 7.18.2 + + '@wavs/solidity@0.5.0-beta.10(typescript@5.9.3)': + dependencies: + solhint: 6.0.3(typescript@5.9.3) + transitivePeerDependencies: + - typescript + + JSONStream@1.3.5: + dependencies: + jsonparse: 1.3.1 + through: 2.3.8 + + abitype@0.7.1(typescript@5.9.3)(zod@3.25.76): + dependencies: + typescript: 5.9.3 + optionalDependencies: + zod: 3.25.76 + + abitype@1.2.3(typescript@5.9.3)(zod@3.25.76): + optionalDependencies: + typescript: 5.9.3 + zod: 3.25.76 + + ajv-errors@1.0.1(ajv@6.12.6): + dependencies: + ajv: 6.12.6 + + ajv@6.12.6: + dependencies: + fast-deep-equal: 3.1.3 + fast-json-stable-stringify: 2.1.0 + json-schema-traverse: 0.4.1 + uri-js: 4.4.1 + + ajv@8.18.0: + dependencies: + fast-deep-equal: 3.1.3 + fast-uri: 3.1.0 + json-schema-traverse: 1.0.0 + require-from-string: 2.0.2 + + ansi-escapes@7.3.0: + dependencies: + environment: 1.1.0 + + ansi-regex@5.0.1: {} + + ansi-regex@6.2.2: {} + + ansi-styles@4.3.0: + dependencies: + color-convert: 2.0.1 + + ansi-styles@6.2.3: {} + + antlr4@4.13.2: {} + + antlr4ts@0.5.0-alpha.4: {} + + argparse@2.0.1: {} + + array-ify@1.0.0: {} + + ast-parents@0.0.1: {} + + astral-regex@2.0.0: {} + + asynckit@0.4.0: {} + + available-typed-arrays@1.0.7: + dependencies: + possible-typed-array-names: 1.1.0 + + axios@1.13.5: + dependencies: + follow-redirects: 1.15.11 + form-data: 4.0.5 + proxy-from-env: 1.1.0 + transitivePeerDependencies: + - debug + + balanced-match@1.0.2: {} + + better-ajv-errors@2.0.3(ajv@6.12.6): + dependencies: + '@babel/code-frame': 7.29.0 + '@humanwhocodes/momoa': 2.0.4 + ajv: 6.12.6 + chalk: 4.1.2 + jsonpointer: 5.0.1 + leven: 3.1.0 + + brace-expansion@2.0.2: + dependencies: + balanced-match: 1.0.2 + + braces@3.0.3: + dependencies: + fill-range: 7.1.1 + + cacheable-lookup@7.0.0: {} + + cacheable-request@10.2.14: + dependencies: + '@types/http-cache-semantics': 4.2.0 + get-stream: 6.0.1 + http-cache-semantics: 4.2.0 + keyv: 4.5.4 + mimic-response: 4.0.0 + normalize-url: 8.1.1 + responselike: 3.0.0 + + call-bind-apply-helpers@1.0.2: + dependencies: + es-errors: 1.3.0 + function-bind: 1.1.2 + + call-bind@1.0.8: + dependencies: + call-bind-apply-helpers: 1.0.2 + es-define-property: 1.0.1 + get-intrinsic: 1.3.0 + set-function-length: 1.2.2 + + call-bound@1.0.4: + dependencies: + call-bind-apply-helpers: 1.0.2 + get-intrinsic: 1.3.0 + + callsites@3.1.0: {} + + chalk@4.1.2: + dependencies: + ansi-styles: 4.3.0 + supports-color: 7.2.0 + + chalk@5.6.2: {} + + cli-cursor@5.0.0: + dependencies: + restore-cursor: 5.1.0 + + cli-truncate@5.1.1: + dependencies: + slice-ansi: 7.1.2 + string-width: 8.2.0 + + cliui@8.0.1: + dependencies: + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi: 7.0.0 + + color-convert@2.0.1: + dependencies: + color-name: 1.1.4 + + color-name@1.1.4: {} + + colorette@2.0.20: {} + + combined-stream@1.0.8: + dependencies: + delayed-stream: 1.0.0 + + command-exists@1.2.9: {} + + commander@10.0.1: {} + + commander@11.1.0: {} + + commander@12.1.0: {} + + commander@14.0.3: {} + + commander@8.3.0: {} + + compare-func@2.0.0: + dependencies: + array-ify: 1.0.0 + dot-prop: 5.3.0 + + config-chain@1.1.13: + dependencies: + ini: 1.3.8 + proto-list: 1.2.4 + + conventional-changelog-angular@7.0.0: + dependencies: + compare-func: 2.0.0 + + conventional-changelog-conventionalcommits@7.0.2: + dependencies: + compare-func: 2.0.0 + + conventional-commits-parser@5.0.0: + dependencies: + JSONStream: 1.3.5 + is-text-path: 2.0.0 + meow: 12.1.1 + split2: 4.2.0 + + cosmiconfig-typescript-loader@6.2.0(@types/node@25.3.0)(cosmiconfig@9.0.0(typescript@5.9.3))(typescript@5.9.3): + dependencies: + '@types/node': 25.3.0 + cosmiconfig: 9.0.0(typescript@5.9.3) + jiti: 2.6.1 + typescript: 5.9.3 + + cosmiconfig@8.3.6(typescript@5.9.3): + dependencies: + import-fresh: 3.3.1 + js-yaml: 4.1.1 + parse-json: 5.2.0 + path-type: 4.0.0 + optionalDependencies: + typescript: 5.9.3 + + cosmiconfig@9.0.0(typescript@5.9.3): + dependencies: + env-paths: 2.2.1 + import-fresh: 3.3.1 + js-yaml: 4.1.1 + parse-json: 5.2.0 + optionalDependencies: + typescript: 5.9.3 + + cross-spawn@7.0.6: + dependencies: + path-key: 3.1.1 + shebang-command: 2.0.0 + which: 2.0.2 + + dargs@8.1.0: {} + + decimal.js@10.6.0: {} + + decompress-response@6.0.0: + dependencies: + mimic-response: 3.1.0 + + deep-extend@0.6.0: {} + + defer-to-connect@2.0.1: {} + + define-data-property@1.1.4: + dependencies: + es-define-property: 1.0.1 + es-errors: 1.3.0 + gopd: 1.2.0 + + delayed-stream@1.0.0: {} + + detect-file@1.0.0: {} + + detect-indent@7.0.2: {} + + detect-newline@4.0.1: {} + + dir-glob@3.0.1: + dependencies: + path-type: 4.0.0 + + dot-prop@5.3.0: + dependencies: + is-obj: 2.0.0 + + dotenv@17.3.1: {} + + dunder-proto@1.0.1: + dependencies: + call-bind-apply-helpers: 1.0.2 + es-errors: 1.3.0 + gopd: 1.2.0 + + emoji-regex@10.6.0: {} + + emoji-regex@8.0.0: {} + + env-paths@2.2.1: {} + + environment@1.1.0: {} + + error-ex@1.3.4: + dependencies: + is-arrayish: 0.2.1 + + es-define-property@1.0.1: {} + + es-errors@1.3.0: {} + + es-object-atoms@1.1.1: + dependencies: + es-errors: 1.3.0 + + es-set-tostringtag@2.1.0: + dependencies: + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + has-tostringtag: 1.0.2 + hasown: 2.0.2 + + esbuild@0.27.3: + optionalDependencies: + '@esbuild/aix-ppc64': 0.27.3 + '@esbuild/android-arm': 0.27.3 + '@esbuild/android-arm64': 0.27.3 + '@esbuild/android-x64': 0.27.3 + '@esbuild/darwin-arm64': 0.27.3 + '@esbuild/darwin-x64': 0.27.3 + '@esbuild/freebsd-arm64': 0.27.3 + '@esbuild/freebsd-x64': 0.27.3 + '@esbuild/linux-arm': 0.27.3 + '@esbuild/linux-arm64': 0.27.3 + '@esbuild/linux-ia32': 0.27.3 + '@esbuild/linux-loong64': 0.27.3 + '@esbuild/linux-mips64el': 0.27.3 + '@esbuild/linux-ppc64': 0.27.3 + '@esbuild/linux-riscv64': 0.27.3 + '@esbuild/linux-s390x': 0.27.3 + '@esbuild/linux-x64': 0.27.3 + '@esbuild/netbsd-arm64': 0.27.3 + '@esbuild/netbsd-x64': 0.27.3 + '@esbuild/openbsd-arm64': 0.27.3 + '@esbuild/openbsd-x64': 0.27.3 + '@esbuild/openharmony-arm64': 0.27.3 + '@esbuild/sunos-x64': 0.27.3 + '@esbuild/win32-arm64': 0.27.3 + '@esbuild/win32-ia32': 0.27.3 + '@esbuild/win32-x64': 0.27.3 + + escalade@3.2.0: {} + + ethereum-cryptography@2.2.1: + dependencies: + '@noble/curves': 1.4.2 + '@noble/hashes': 1.4.0 + '@scure/bip32': 1.4.0 + '@scure/bip39': 1.3.0 + + eventemitter3@5.0.1: {} + + eventemitter3@5.0.4: {} + + execa@8.0.1: + dependencies: + cross-spawn: 7.0.6 + get-stream: 8.0.1 + human-signals: 5.0.0 + is-stream: 3.0.0 + merge-stream: 2.0.0 + npm-run-path: 5.3.0 + onetime: 6.0.0 + signal-exit: 4.1.0 + strip-final-newline: 3.0.0 + + expand-tilde@2.0.2: + dependencies: + homedir-polyfill: 1.0.3 + + fast-deep-equal@3.1.3: {} + + fast-diff@1.3.0: {} + + fast-glob@3.3.2: + dependencies: + '@nodelib/fs.stat': 2.0.5 + '@nodelib/fs.walk': 1.2.8 + glob-parent: 5.1.2 + merge2: 1.4.1 + micromatch: 4.0.8 + + fast-glob@3.3.3: + dependencies: + '@nodelib/fs.stat': 2.0.5 + '@nodelib/fs.walk': 1.2.8 + glob-parent: 5.1.2 + merge2: 1.4.1 + micromatch: 4.0.8 + + fast-json-stable-stringify@2.1.0: {} + + fast-uri@3.1.0: {} + + fastq@1.20.1: + dependencies: + reusify: 1.1.0 + + fill-range@7.1.1: + dependencies: + to-regex-range: 5.0.1 + + find-up@7.0.0: + dependencies: + locate-path: 7.2.0 + path-exists: 5.0.0 + unicorn-magic: 0.1.0 + + findup-sync@5.0.0: + dependencies: + detect-file: 1.0.0 + is-glob: 4.0.3 + micromatch: 4.0.8 + resolve-dir: 1.0.1 + + follow-redirects@1.15.11: {} + + for-each@0.3.5: + dependencies: + is-callable: 1.2.7 + + forge-std@https://codeload.github.com/foundry-rs/forge-std/tar.gz/3b20d60d14b343ee4f908cb8079495c07f5e8981: {} + + form-data-encoder@2.1.4: {} + + form-data@4.0.5: + dependencies: + asynckit: 0.4.0 + combined-stream: 1.0.8 + es-set-tostringtag: 2.1.0 + hasown: 2.0.2 + mime-types: 2.1.35 + + fs-extra@11.3.3: + dependencies: + graceful-fs: 4.2.11 + jsonfile: 6.2.0 + universalify: 2.0.1 + + fs.realpath@1.0.0: {} + + fsevents@2.3.3: + optional: true + + function-bind@1.1.2: {} + + generator-function@2.0.1: {} + + get-caller-file@2.0.5: {} + + get-east-asian-width@1.5.0: {} + + get-intrinsic@1.3.0: + dependencies: + call-bind-apply-helpers: 1.0.2 + es-define-property: 1.0.1 + es-errors: 1.3.0 + es-object-atoms: 1.1.1 + function-bind: 1.1.2 + get-proto: 1.0.1 + gopd: 1.2.0 + has-symbols: 1.1.0 + hasown: 2.0.2 + math-intrinsics: 1.1.0 + + get-proto@1.0.1: + dependencies: + dunder-proto: 1.0.1 + es-object-atoms: 1.1.1 + + get-stdin@9.0.0: {} + + get-stream@6.0.1: {} + + get-stream@8.0.1: {} + + get-tsconfig@4.13.6: + dependencies: + resolve-pkg-maps: 1.0.0 + + git-hooks-list@3.2.0: {} + + git-raw-commits@4.0.0: + dependencies: + dargs: 8.1.0 + meow: 12.1.1 + split2: 4.2.0 + + glob-parent@5.1.2: + dependencies: + is-glob: 4.0.3 + + glob@8.1.0: + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 5.1.6 + once: 1.4.0 + + global-directory@4.0.1: + dependencies: + ini: 4.1.1 + + global-modules@1.0.0: + dependencies: + global-prefix: 1.0.2 + is-windows: 1.0.2 + resolve-dir: 1.0.1 + + global-prefix@1.0.2: + dependencies: + expand-tilde: 2.0.2 + homedir-polyfill: 1.0.3 + ini: 1.3.8 + is-windows: 1.0.2 + which: 1.3.1 + + globby@13.2.2: + dependencies: + dir-glob: 3.0.1 + fast-glob: 3.3.3 + ignore: 5.3.2 + merge2: 1.4.1 + slash: 4.0.0 + + gopd@1.2.0: {} + + got@12.6.1: + dependencies: + '@sindresorhus/is': 5.6.0 + '@szmarczak/http-timer': 5.0.1 + cacheable-lookup: 7.0.0 + cacheable-request: 10.2.14 + decompress-response: 6.0.0 + form-data-encoder: 2.1.4 + get-stream: 6.0.1 + http2-wrapper: 2.2.1 + lowercase-keys: 3.0.0 + p-cancelable: 3.0.0 + responselike: 3.0.0 + + graceful-fs@4.2.10: {} + + graceful-fs@4.2.11: {} + + has-flag@4.0.0: {} + + has-property-descriptors@1.0.2: + dependencies: + es-define-property: 1.0.1 + + has-symbols@1.1.0: {} + + has-tostringtag@1.0.2: + dependencies: + has-symbols: 1.1.0 + + hasown@2.0.2: + dependencies: + function-bind: 1.1.2 + + homedir-polyfill@1.0.3: + dependencies: + parse-passwd: 1.0.0 + + http-cache-semantics@4.2.0: {} + + http2-wrapper@2.2.1: + dependencies: + quick-lru: 5.1.1 + resolve-alpn: 1.2.1 + + human-signals@5.0.0: {} + + ignore@5.3.2: {} + + import-fresh@3.3.1: + dependencies: + parent-module: 1.0.1 + resolve-from: 4.0.0 + + import-meta-resolve@4.2.0: {} + + inflight@1.0.6: + dependencies: + once: 1.4.0 + wrappy: 1.0.2 + + inherits@2.0.4: {} + + ini@1.3.8: {} + + ini@4.1.1: {} + + is-arguments@1.2.0: + dependencies: + call-bound: 1.0.4 + has-tostringtag: 1.0.2 + + is-arrayish@0.2.1: {} + + is-callable@1.2.7: {} + + is-extglob@2.1.1: {} + + is-fullwidth-code-point@3.0.0: {} + + is-fullwidth-code-point@5.1.0: + dependencies: + get-east-asian-width: 1.5.0 + + is-generator-function@1.1.2: + dependencies: + call-bound: 1.0.4 + generator-function: 2.0.1 + get-proto: 1.0.1 + has-tostringtag: 1.0.2 + safe-regex-test: 1.1.0 + + is-glob@4.0.3: + dependencies: + is-extglob: 2.1.1 + + is-number@7.0.0: {} + + is-obj@2.0.0: {} + + is-plain-obj@4.1.0: {} + + is-regex@1.2.1: + dependencies: + call-bound: 1.0.4 + gopd: 1.2.0 + has-tostringtag: 1.0.2 + hasown: 2.0.2 + + is-stream@3.0.0: {} + + is-text-path@2.0.0: + dependencies: + text-extensions: 2.4.0 + + is-typed-array@1.1.15: + dependencies: + which-typed-array: 1.1.20 + + is-windows@1.0.2: {} + + isexe@2.0.0: {} + + isows@1.0.7(ws@8.18.3): + dependencies: + ws: 8.18.3 + + jiti@2.6.1: {} + + js-sha3@0.8.0: {} + + js-tokens@4.0.0: {} + + js-yaml@4.1.1: + dependencies: + argparse: 2.0.1 + + jsel@1.1.6: {} + + json-buffer@3.0.1: {} + + json-parse-even-better-errors@2.3.1: {} + + json-schema-traverse@0.4.1: {} + + json-schema-traverse@1.0.0: {} + + jsonfile@6.2.0: + dependencies: + universalify: 2.0.1 + optionalDependencies: + graceful-fs: 4.2.11 + + jsonparse@1.3.1: {} + + jsonpointer@5.0.1: {} + + keyv@4.5.4: + dependencies: + json-buffer: 3.0.1 + + latest-version@7.0.0: + dependencies: + package-json: 8.1.1 + + leven@3.1.0: {} + + lines-and-columns@1.2.4: {} + + lint-staged@16.2.7: + dependencies: + commander: 14.0.3 + listr2: 9.0.5 + micromatch: 4.0.8 + nano-spawn: 2.0.0 + pidtree: 0.6.0 + string-argv: 0.3.2 + yaml: 2.8.2 + + listr2@9.0.5: + dependencies: + cli-truncate: 5.1.1 + colorette: 2.0.20 + eventemitter3: 5.0.4 + log-update: 6.1.0 + rfdc: 1.4.1 + wrap-ansi: 9.0.2 + + locate-path@7.2.0: + dependencies: + p-locate: 6.0.0 + + lodash.camelcase@4.3.0: {} + + lodash.isplainobject@4.0.6: {} + + lodash.kebabcase@4.1.1: {} + + lodash.merge@4.6.2: {} + + lodash.mergewith@4.6.2: {} + + lodash.snakecase@4.1.1: {} + + lodash.startcase@4.4.0: {} + + lodash.truncate@4.4.2: {} + + lodash.uniq@4.5.0: {} + + lodash.upperfirst@4.3.1: {} + + lodash@4.17.23: {} + + log-update@6.1.0: + dependencies: + ansi-escapes: 7.3.0 + cli-cursor: 5.0.0 + slice-ansi: 7.1.2 + strip-ansi: 7.1.2 + wrap-ansi: 9.0.2 + + lowercase-keys@3.0.0: {} + + math-intrinsics@1.1.0: {} + + memorystream@0.3.1: {} + + meow@12.1.1: {} + + merge-stream@2.0.0: {} + + merge2@1.4.1: {} + + micromatch@4.0.8: + dependencies: + braces: 3.0.3 + picomatch: 2.3.1 + + mime-db@1.52.0: {} + + mime-types@2.1.35: + dependencies: + mime-db: 1.52.0 + + mimic-fn@4.0.0: {} + + mimic-function@5.0.1: {} + + mimic-response@3.1.0: {} + + mimic-response@4.0.0: {} + + minimatch@5.1.6: + dependencies: + brace-expansion: 2.0.2 + + minimist@1.2.8: {} + + nano-spawn@2.0.0: {} + + normalize-url@8.1.1: {} + + npm-run-path@5.3.0: + dependencies: + path-key: 4.0.0 + + once@1.4.0: + dependencies: + wrappy: 1.0.2 + + onetime@6.0.0: + dependencies: + mimic-fn: 4.0.0 + + onetime@7.0.0: + dependencies: + mimic-function: 5.0.1 + + os-tmpdir@1.0.2: {} + + ox@0.12.4(typescript@5.9.3)(zod@3.25.76): + dependencies: + '@adraffy/ens-normalize': 1.11.1 + '@noble/ciphers': 1.3.0 + '@noble/curves': 1.9.1 + '@noble/hashes': 1.8.0 + '@scure/bip32': 1.7.0 + '@scure/bip39': 1.6.0 + abitype: 1.2.3(typescript@5.9.3)(zod@3.25.76) + eventemitter3: 5.0.1 + optionalDependencies: + typescript: 5.9.3 + transitivePeerDependencies: + - zod + + p-cancelable@3.0.0: {} + + p-limit@4.0.0: + dependencies: + yocto-queue: 1.2.2 + + p-locate@6.0.0: + dependencies: + p-limit: 4.0.0 + + package-json@8.1.1: + dependencies: + got: 12.6.1 + registry-auth-token: 5.1.1 + registry-url: 6.0.1 + semver: 7.7.4 + + parent-module@1.0.1: + dependencies: + callsites: 3.1.0 + + parse-json@5.2.0: + dependencies: + '@babel/code-frame': 7.29.0 + error-ex: 1.3.4 + json-parse-even-better-errors: 2.3.1 + lines-and-columns: 1.2.4 + + parse-passwd@1.0.0: {} + + path-exists@5.0.0: {} + + path-key@3.1.1: {} + + path-key@4.0.0: {} + + path-type@4.0.0: {} + + picocolors@1.1.1: {} + + picomatch@2.3.1: {} + + pidtree@0.6.0: {} + + pluralize@8.0.0: {} + + possible-typed-array-names@1.1.0: {} + + prettier@2.8.8: + optional: true + + proto-list@1.2.4: {} + + proxy-from-env@1.1.0: {} + + punycode@2.3.1: {} + + queue-microtask@1.2.3: {} + + quick-lru@5.1.1: {} + + rc@1.2.8: + dependencies: + deep-extend: 0.6.0 + ini: 1.3.8 + minimist: 1.2.8 + strip-json-comments: 2.0.1 + + registry-auth-token@5.1.1: + dependencies: + '@pnpm/npm-conf': 3.0.2 + + registry-url@6.0.1: + dependencies: + rc: 1.2.8 + + require-directory@2.1.1: {} + + require-from-string@2.0.2: {} + + resolve-alpn@1.2.1: {} + + resolve-dir@1.0.1: + dependencies: + expand-tilde: 2.0.2 + global-modules: 1.0.0 + + resolve-from@4.0.0: {} + + resolve-from@5.0.0: {} + + resolve-pkg-maps@1.0.0: {} + + responselike@3.0.0: + dependencies: + lowercase-keys: 3.0.0 + + restore-cursor@5.1.0: + dependencies: + onetime: 7.0.0 + signal-exit: 4.1.0 + + reusify@1.1.0: {} + + rfdc@1.4.1: {} + + run-parallel@1.2.0: + dependencies: + queue-microtask: 1.2.3 + + safe-regex-test@1.1.0: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + is-regex: 1.2.1 + + semver@5.7.2: {} + + semver@6.3.1: {} + + semver@7.7.4: {} + + set-function-length@1.2.2: + dependencies: + define-data-property: 1.1.4 + es-errors: 1.3.0 + function-bind: 1.1.2 + get-intrinsic: 1.3.0 + gopd: 1.2.0 + has-property-descriptors: 1.0.2 + + shebang-command@2.0.0: + dependencies: + shebang-regex: 3.0.0 + + shebang-regex@3.0.0: {} + + signal-exit@4.1.0: {} + + slash@4.0.0: {} + + slice-ansi@4.0.0: + dependencies: + ansi-styles: 4.3.0 + astral-regex: 2.0.0 + is-fullwidth-code-point: 3.0.0 + + slice-ansi@7.1.2: + dependencies: + ansi-styles: 6.2.3 + is-fullwidth-code-point: 5.1.0 + + solc-typed-ast@18.2.4(typescript@5.9.3)(zod@3.25.76): + dependencies: + axios: 1.13.5 + commander: 12.1.0 + decimal.js: 10.6.0 + findup-sync: 5.0.0 + fs-extra: 11.3.3 + jsel: 1.1.6 + semver: 7.7.4 + solc: 0.8.25 + src-location: 1.1.0 + web3-eth-abi: 4.4.1(typescript@5.9.3)(zod@3.25.76) + transitivePeerDependencies: + - debug + - typescript + - zod + + solc@0.8.25: + dependencies: + command-exists: 1.2.9 + commander: 8.3.0 + follow-redirects: 1.15.11 + js-sha3: 0.8.0 + memorystream: 0.3.1 + semver: 5.7.2 + tmp: 0.0.33 + transitivePeerDependencies: + - debug + + solhint-community@4.0.0(typescript@5.9.3): + dependencies: + '@solidity-parser/parser': 0.16.2 + ajv: 6.12.6 + antlr4: 4.13.2 + ast-parents: 0.0.1 + chalk: 4.1.2 + commander: 11.1.0 + cosmiconfig: 8.3.6(typescript@5.9.3) + fast-diff: 1.3.0 + glob: 8.1.0 + ignore: 5.3.2 + js-yaml: 4.1.1 + lodash: 4.17.23 + pluralize: 8.0.0 + semver: 6.3.1 + strip-ansi: 6.0.1 + table: 6.9.0 + text-table: 0.2.0 + optionalDependencies: + prettier: 2.8.8 + transitivePeerDependencies: + - typescript + + solhint@6.0.3(typescript@5.9.3): + dependencies: + '@solidity-parser/parser': 0.20.2 + ajv: 6.12.6 + ajv-errors: 1.0.1(ajv@6.12.6) + ast-parents: 0.0.1 + better-ajv-errors: 2.0.3(ajv@6.12.6) + chalk: 4.1.2 + commander: 10.0.1 + cosmiconfig: 8.3.6(typescript@5.9.3) + fast-diff: 1.3.0 + glob: 8.1.0 + ignore: 5.3.2 + js-yaml: 4.1.1 + latest-version: 7.0.0 + lodash: 4.17.23 + pluralize: 8.0.0 + semver: 7.7.4 + table: 6.9.0 + text-table: 0.2.0 + optionalDependencies: + prettier: 2.8.8 + transitivePeerDependencies: + - typescript + + sort-object-keys@1.1.3: {} + + sort-package-json@2.10.0: + dependencies: + detect-indent: 7.0.2 + detect-newline: 4.0.1 + get-stdin: 9.0.0 + git-hooks-list: 3.2.0 + globby: 13.2.2 + is-plain-obj: 4.1.0 + semver: 7.7.4 + sort-object-keys: 1.1.3 + + split2@4.2.0: {} + + src-location@1.1.0: {} + + string-argv@0.3.2: {} + + string-width@4.2.3: + dependencies: + emoji-regex: 8.0.0 + is-fullwidth-code-point: 3.0.0 + strip-ansi: 6.0.1 + + string-width@7.2.0: + dependencies: + emoji-regex: 10.6.0 + get-east-asian-width: 1.5.0 + strip-ansi: 7.1.2 + + string-width@8.2.0: + dependencies: + get-east-asian-width: 1.5.0 + strip-ansi: 7.1.2 + + strip-ansi@6.0.1: + dependencies: + ansi-regex: 5.0.1 + + strip-ansi@7.1.2: + dependencies: + ansi-regex: 6.2.2 + + strip-final-newline@3.0.0: {} + + strip-json-comments@2.0.1: {} + + supports-color@7.2.0: + dependencies: + has-flag: 4.0.0 + + table@6.9.0: + dependencies: + ajv: 8.18.0 + lodash.truncate: 4.4.2 + slice-ansi: 4.0.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + + text-extensions@2.4.0: {} + + text-table@0.2.0: {} + + through@2.3.8: {} + + tinyexec@1.0.2: {} + + tmp@0.0.33: + dependencies: + os-tmpdir: 1.0.2 + + to-regex-range@5.0.1: + dependencies: + is-number: 7.0.0 + + tsx@4.21.0: + dependencies: + esbuild: 0.27.3 + get-tsconfig: 4.13.6 + optionalDependencies: + fsevents: 2.3.3 + + typescript@5.9.3: {} + + undici-types@7.18.2: {} + + unicorn-magic@0.1.0: {} + + universalify@2.0.1: {} + + uri-js@4.4.1: + dependencies: + punycode: 2.3.1 + + util@0.12.5: + dependencies: + inherits: 2.0.4 + is-arguments: 1.2.0 + is-generator-function: 1.1.2 + is-typed-array: 1.1.15 + which-typed-array: 1.1.20 + + viem@2.46.2(typescript@5.9.3)(zod@3.25.76): + dependencies: + '@noble/curves': 1.9.1 + '@noble/hashes': 1.8.0 + '@scure/bip32': 1.7.0 + '@scure/bip39': 1.6.0 + abitype: 1.2.3(typescript@5.9.3)(zod@3.25.76) + isows: 1.0.7(ws@8.18.3) + ox: 0.12.4(typescript@5.9.3)(zod@3.25.76) + ws: 8.18.3 + optionalDependencies: + typescript: 5.9.3 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + - zod + + web3-errors@1.3.1: + dependencies: + web3-types: 1.10.0 + + web3-eth-abi@4.4.1(typescript@5.9.3)(zod@3.25.76): + dependencies: + abitype: 0.7.1(typescript@5.9.3)(zod@3.25.76) + web3-errors: 1.3.1 + web3-types: 1.10.0 + web3-utils: 4.3.3 + web3-validator: 2.0.6 + transitivePeerDependencies: + - typescript + - zod + + web3-types@1.10.0: {} + + web3-utils@4.3.3: + dependencies: + ethereum-cryptography: 2.2.1 + eventemitter3: 5.0.4 + web3-errors: 1.3.1 + web3-types: 1.10.0 + web3-validator: 2.0.6 + + web3-validator@2.0.6: + dependencies: + ethereum-cryptography: 2.2.1 + util: 0.12.5 + web3-errors: 1.3.1 + web3-types: 1.10.0 + zod: 3.25.76 + + which-typed-array@1.1.20: + dependencies: + available-typed-arrays: 1.0.7 + call-bind: 1.0.8 + call-bound: 1.0.4 + for-each: 0.3.5 + get-proto: 1.0.1 + gopd: 1.2.0 + has-tostringtag: 1.0.2 + + which@1.3.1: + dependencies: + isexe: 2.0.0 + + which@2.0.2: + dependencies: + isexe: 2.0.0 + + wrap-ansi@7.0.0: + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + + wrap-ansi@9.0.2: + dependencies: + ansi-styles: 6.2.3 + string-width: 7.2.0 + strip-ansi: 7.1.2 + + wrappy@1.0.2: {} + + ws@8.18.3: {} + + y18n@5.0.8: {} + + yaml@2.8.2: {} + + yargs-parser@21.1.1: {} + + yargs@17.7.2: + dependencies: + cliui: 8.0.1 + escalade: 3.2.0 + get-caller-file: 2.0.5 + require-directory: 2.1.1 + string-width: 4.2.3 + y18n: 5.0.8 + yargs-parser: 21.1.1 + + yocto-queue@1.2.2: {} + + zod@3.25.76: {} diff --git a/script/build-service.sh b/script/build-service.sh deleted file mode 100644 index d5002056..00000000 --- a/script/build-service.sh +++ /dev/null @@ -1,283 +0,0 @@ -#!/bin/bash - -# set -x - -: ''' -# Run: - -sh ./build_service.sh - -# Overrides: -- FILE_LOCATION: The save location of the configuration file -- TRIGGER_EVENT: The event to trigger the service (e.g. "NewTrigger(bytes)") -- FUEL_LIMIT: The fuel limit (wasm compute metering) for the service -- MAX_GAS: The maximum chain gas for the submission Tx -- AGGREGATOR_URL: The URL of the aggregator service -''' - -# == Defaults == - -FUEL_LIMIT=${FUEL_LIMIT:-1000000000000} -MAX_GAS=${MAX_GAS:-5000000} -FILE_LOCATION=${FILE_LOCATION:-".docker/service.json"} -TRIGGER_CHAIN=${TRIGGER_CHAIN:-"evm:31337"} -SUBMIT_CHAIN=${SUBMIT_CHAIN:-"evm:31337"} -AGGREGATOR_URL=${AGGREGATOR_URL:-""} -DEPLOY_ENV=${DEPLOY_ENV:-""} -REGISTRY=${REGISTRY:-"wa.dev"} -WAVS_SERVICE_MANAGER_ADDRESS=${WAVS_SERVICE_MANAGER_ADDRESS:-`task config:service-manager-address`} - -# Function to substitute variables in config values -substitute_config_vars() { - local config_str="$1" - - # Replace all ${VAR_NAME} patterns with their environment variable values - while [[ "$config_str" =~ \$\{([^}]+)\} ]]; do - var_name="${BASH_REMATCH[1]}" - var_value="${!var_name}" - if [ -z "$var_value" ]; then - echo "âš ī¸ Warning: Variable ${var_name} is not set, using empty string" >&2 - var_value="" - fi - config_str="${config_str//\$\{${var_name}\}/${var_value}}" - done - - echo "$config_str" -} - -# Function to build config arguments from JSON object -build_config_args() { - local config_json="$1" - local args="" - - if [ -n "$config_json" ] && [ "$config_json" != "null" ] && [ "$config_json" != "{}" ]; then - # Process each key-value pair - echo "$config_json" | jq -c 'to_entries[]' | while IFS= read -r line; do - key=$(echo "$line" | jq -r '.key') - value=$(echo "$line" | jq -r '.value') - # Substitute variables in the value - value=$(substitute_config_vars "$value") - args="${args} --values \"${key}=${value}\"" - done - fi - - echo "$args" -} - -# Function to build environment variable arguments -build_env_args() { - local env_json="$1" - local args="" - - if [ -n "$env_json" ] && [ "$env_json" != "null" ] && [ "$env_json" != "[]" ]; then - # Process each environment variable - echo "$env_json" | jq -c '.[]' | while IFS= read -r env_var; do - env_var=$(echo "$env_var" | jq -r '.') - args="${args} --values \"${env_var}\"" - done - fi - - echo "$args" -} - -BASE_CMD="docker run --rm --network host -w /data -v $(pwd):/data ghcr.io/lay3rlabs/wavs:1.4.1 wavs-cli service --json true --home /data --file /data/${FILE_LOCATION}" - -if [ -z "$WAVS_SERVICE_MANAGER_ADDRESS" ]; then - export WAVS_SERVICE_MANAGER_ADDRESS=$(jq -r '.contract' .docker/poa_sm_deploy.json) - if [ -z "$WAVS_SERVICE_MANAGER_ADDRESS" ]; then - echo "WAVS_SERVICE_MANAGER_ADDRESS is not set. Please set it to the address of the service manager." - return - fi -fi - -if [ -z "$DEPLOY_ENV" ]; then - DEPLOY_ENV=$(task get-deploy-status) -fi - -# === Core === - -# Get PKG_NAMESPACE -if [ -z "$PKG_NAMESPACE" ]; then - export PKG_NAMESPACE=`task get-wasi-namespace` - if [ -z "$PKG_NAMESPACE" ]; then - echo "PKG_NAMESPACE is not set. Please set the PKG_NAMESPACE environment variable." - exit 1 - fi -fi - -eval "${BASE_CMD} init --name en0va" - -# Process component configurations from JSON file -if [ -z "${COMPONENT_CONFIGS_FILE}" ] || [ ! -f "${COMPONENT_CONFIGS_FILE}" ]; then - # Try default location - COMPONENT_CONFIGS_FILE="config/components.json" - if [ ! -f "${COMPONENT_CONFIGS_FILE}" ]; then - # Try .docker location - COMPONENT_CONFIGS_FILE=".docker/components-config.json" - if [ ! -f "${COMPONENT_CONFIGS_FILE}" ]; then - echo "❌ Component configuration file not found" - echo "Please specify COMPONENT_CONFIGS_FILE or ensure config/components.json or .docker/components-config.json exists" - exit 1 - fi - fi -fi - -echo "Reading component configurations from: ${COMPONENT_CONFIGS_FILE}" - -# Function to get aggregator component configuration -get_aggregator_config() { - local config_file="$1" - local config_json="{}" - - if [ -f "$config_file" ]; then - config_json=$(jq '.aggregator_components[0] // {}' "$config_file") - fi - - echo "$config_json" -} - -# Get aggregator component configuration -AGGREGATOR_COMPONENT=$(get_aggregator_config "${COMPONENT_CONFIGS_FILE}") -AGG_PKG_NAME=$(echo "$AGGREGATOR_COMPONENT" | jq -r '.package_name // "aggregator"') -AGG_PKG_VERSION=$(echo "$AGGREGATOR_COMPONENT" | jq -r '.package_version // "0.1.0"') -AGG_CONFIG_VALUES=$(echo "$AGGREGATOR_COMPONENT" | jq '.config_values // {}') -AGG_ENV_VARIABLES=$(echo "$AGGREGATOR_COMPONENT" | jq '.env_variables // []') - -# Export all required variables that might be used in config value substitutions -# These should be set by deploy-script.sh before calling this script -# echo "📋 Available configuration variables:" -# [ -n "${CHAIN_NAME}" ] && echo " CHAIN_NAME: ${CHAIN_NAME}" -echo "" - -jq -c '.components[]' "${COMPONENT_CONFIGS_FILE}" | while IFS= read -r component; do - COMP_DISABLED=$(echo "$component" | jq -r '.disabled // false') - if [ "$COMP_DISABLED" = "true" ]; then - continue - fi - - COMP_FILENAME=$(echo "$component" | jq -r '.filename') - COMP_PKG_NAME=$(echo "$component" | jq -r '.package_name') - COMP_PKG_VERSION=$(echo "$component" | jq -r '.package_version') - COMP_SUBMIT_JSON_PATH=$(echo "$component" | jq -r '.submit_json_path') - COMP_TRIGGER_BLOCK_INTERVAL=$(echo "$component" | jq -r '.trigger_block_interval // ""') - COMP_TRIGGER_CRON_SCHEDULE=$(echo "$component" | jq -r '.trigger_cron.schedule // ""') - COMP_TRIGGER_CRON_START_TIME=$(echo "$component" | jq -r '.trigger_cron.start_time // ""') - COMP_TRIGGER_CRON_END_TIME=$(echo "$component" | jq -r '.trigger_cron.end_time // ""') - - # Extract component-specific config values and env variables - COMP_CONFIG_VALUES=$(echo "$component" | jq '.config_values // {}') - COMP_ENV_VARIABLES=$(echo "$component" | jq '.env_variables // []') - - echo "Creating workflow for component: ${COMP_FILENAME}" - WORKFLOW_ID=`eval "$BASE_CMD workflow add" | jq -r .workflow_id` - - echo " Workflow ID: ${WORKFLOW_ID}" - echo " Package: ${PKG_NAMESPACE}:${COMP_PKG_NAME}@${COMP_PKG_VERSION}" - echo " Submit: ${COMP_SUBMIT_ADDRESS}" - - if [ -n "$COMP_TRIGGER_BLOCK_INTERVAL" ]; then - eval "$BASE_CMD workflow trigger --id ${WORKFLOW_ID} set-block-interval --chain ${TRIGGER_CHAIN} --n-blocks ${COMP_TRIGGER_BLOCK_INTERVAL}" > /dev/null - - echo " Trigger block interval: ${COMP_TRIGGER_BLOCK_INTERVAL}" - elif [ -n "$COMP_TRIGGER_CRON_SCHEDULE" ]; then - # Build cron command arguments - CRON_CMD_ARGS="--schedule '${COMP_TRIGGER_CRON_SCHEDULE}'" - - if [ "$COMP_TRIGGER_CRON_START_TIME" != "null" ] && [ -n "$COMP_TRIGGER_CRON_START_TIME" ]; then - CRON_CMD_ARGS="${CRON_CMD_ARGS} --start-time ${COMP_TRIGGER_CRON_START_TIME}" - fi - - if [ "$COMP_TRIGGER_CRON_END_TIME" != "null" ] && [ -n "$COMP_TRIGGER_CRON_END_TIME" ]; then - CRON_CMD_ARGS="${CRON_CMD_ARGS} --end-time ${COMP_TRIGGER_CRON_END_TIME}" - fi - - eval "$BASE_CMD workflow trigger --id ${WORKFLOW_ID} set-cron ${CRON_CMD_ARGS}" > /dev/null - - echo " Trigger cron: ${COMP_TRIGGER_CRON_SCHEDULE}" - if [ "$COMP_TRIGGER_CRON_START_TIME" != "null" ] && [ -n "$COMP_TRIGGER_CRON_START_TIME" ]; then - echo " Start time: ${COMP_TRIGGER_CRON_START_TIME}" - fi - if [ "$COMP_TRIGGER_CRON_END_TIME" != "null" ] && [ -n "$COMP_TRIGGER_CRON_END_TIME" ]; then - echo " End time: ${COMP_TRIGGER_CRON_END_TIME}" - fi - else - COMP_TRIGGER_EVENT=$(echo "$component" | jq -r '.trigger_event') - COMP_TRIGGER_JSON_PATH=$(echo "$component" | jq -r '.trigger_json_path') - - # Extract addresses from JSON paths - COMP_TRIGGER_ADDRESS=`jq -r ".${COMP_TRIGGER_JSON_PATH}" .docker/deployment_summary.json` - COMP_SUBMIT_ADDRESS=`jq -r ".${COMP_SUBMIT_JSON_PATH}" .docker/deployment_summary.json` - - # Validate addresses - if [ -z "$COMP_TRIGGER_ADDRESS" ] || [ "$COMP_TRIGGER_ADDRESS" = "null" ]; then - echo "❌ Trigger address not found for component: ${COMP_FILENAME} at path: ${COMP_TRIGGER_JSON_PATH}" - exit 1 - fi - if [ -z "$COMP_SUBMIT_ADDRESS" ] || [ "$COMP_SUBMIT_ADDRESS" = "null" ]; then - echo "❌ Submit address not found for component: ${COMP_FILENAME} at path: ${COMP_SUBMIT_JSON_PATH}" - exit 1 - fi - - COMP_TRIGGER_EVENT_HASH=`cast keccak ${COMP_TRIGGER_EVENT}` - - echo " Trigger: ${COMP_TRIGGER_ADDRESS} (${COMP_TRIGGER_EVENT})" - - eval "$BASE_CMD workflow trigger --id ${WORKFLOW_ID} set-evm --address ${COMP_TRIGGER_ADDRESS} --chain ${TRIGGER_CHAIN} --event-hash ${COMP_TRIGGER_EVENT_HASH}" > /dev/null - fi - - # Set submit to use aggregator component - if [ -n "$AGGREGATOR_URL" ]; then - eval "$BASE_CMD workflow submit --id ${WORKFLOW_ID} set-aggregator --url ${AGGREGATOR_URL}" > /dev/null - - # Configure aggregator component for this workflow - echo " 📋 Configuring aggregator component" - eval "$BASE_CMD workflow submit --id ${WORKFLOW_ID} component set-source-registry --domain ${REGISTRY} --package ${PKG_NAMESPACE}:${AGG_PKG_NAME} --version ${AGG_PKG_VERSION}" > /dev/null - eval "$BASE_CMD workflow submit --id ${WORKFLOW_ID} component permissions --http-hosts '*' --file-system true" > /dev/null - - # Set aggregator component environment variables - AGG_ENV_ARGS=$(build_env_args "$AGG_ENV_VARIABLES") - if [ -n "$AGG_ENV_ARGS" ]; then - eval "$BASE_CMD workflow submit --id ${WORKFLOW_ID} component env ${AGG_ENV_ARGS}" > /dev/null - fi - - # Set aggregator component configuration routing - # (( --values is found in ${AGG_CONFIG_ARGS} already )) - AGG_CONFIG_ARGS=$(build_config_args "$AGG_CONFIG_VALUES") - if [ -n "$AGG_CONFIG_ARGS" ]; then - echo " 📋 Configuring aggregator (vars: ${AGG_CONFIG_ARGS})" - fi - eval "$BASE_CMD workflow submit --id ${WORKFLOW_ID} component config --values \"${SUBMIT_CHAIN}=${COMP_SUBMIT_ADDRESS}\" ${AGG_CONFIG_ARGS}" > /dev/null - else - eval "$BASE_CMD workflow submit --id ${WORKFLOW_ID} set-none" > /dev/null - fi - eval "$BASE_CMD workflow component --id ${WORKFLOW_ID} set-source-registry --domain ${REGISTRY} --package ${PKG_NAMESPACE}:${COMP_PKG_NAME} --version ${COMP_PKG_VERSION}" - - eval "$BASE_CMD workflow component --id ${WORKFLOW_ID} permissions --http-hosts '*' --file-system true" > /dev/null - eval "$BASE_CMD workflow component --id ${WORKFLOW_ID} time-limit --seconds 30" > /dev/null - - # Set component-specific environment variables - ENV_ARGS=$(build_env_args "$COMP_ENV_VARIABLES") - if [ -n "$ENV_ARGS" ]; then - echo " 📋 Setting environment variables" - eval "$BASE_CMD workflow component --id ${WORKFLOW_ID} env ${ENV_ARGS}" > /dev/null - fi - - # Set component-specific config values - CONFIG_ARGS=$(build_config_args "$COMP_CONFIG_VALUES") - if [ -n "$CONFIG_ARGS" ]; then - echo " 📋 Configuring component" - eval "$BASE_CMD workflow component --id ${WORKFLOW_ID} config ${CONFIG_ARGS}" > /dev/null - # else - # echo " âš ī¸ No configuration values specified for ${COMP_FILENAME}" - fi - - eval "$BASE_CMD workflow component --id ${WORKFLOW_ID} fuel-limit --fuel ${FUEL_LIMIT}" > /dev/null - - echo " ✅ Workflow configured for ${COMP_FILENAME}" - echo "" -done - -eval "$BASE_CMD manager set-evm --chain ${SUBMIT_CHAIN} --address `cast --to-checksum ${WAVS_SERVICE_MANAGER_ADDRESS}`" > /dev/null -eval "$BASE_CMD validate" > /dev/null - -echo "Configuration file created ${FILE_LOCATION}. Watching events from '${TRIGGER_CHAIN}' & submitting to '${SUBMIT_CHAIN}'." diff --git a/script/create-aggregator.sh b/script/create-aggregator.sh deleted file mode 100644 index 91dad30c..00000000 --- a/script/create-aggregator.sh +++ /dev/null @@ -1,103 +0,0 @@ -#!/usr/bin/bash - -# set -x - -# have an optional argument $1, if set, use it as the agg index -# otherwise, use the default of 1 -if [ -n "$1" ]; then - AGGREGATOR_INDEX=$1 -fi -if [ -z "$AGGREGATOR_INDEX" ]; then - AGGREGATOR_INDEX=1 -fi - -if [ -z "$DEPLOY_ENV" ]; then - DEPLOY_ENV=$(task get-deploy-status) -fi -if [ -z "$RPC_URL" ]; then - RPC_URL=`task get-rpc` -fi - -SP=""; if [[ "$(uname)" == *"Darwin"* ]]; then SP=" "; fi - -cd $(git rev-parse --show-toplevel) || return - -mkdir -p .docker - -# == Generate a new aggregator == -TEMP_FILENAME=".docker/tmp.json" -cast wallet new-mnemonic --json > ${TEMP_FILENAME} -export AGG_MNEMONIC=`jq -r .mnemonic ${TEMP_FILENAME}` -export AGG_PK=`jq -r .accounts[0].private_key ${TEMP_FILENAME}` - -# if its not a LOCAL deploy, we will see if the user wants to override. if they do, we do. -if [ "$DEPLOY_ENV" != "LOCAL" ]; then - read -p "Enter aggregator mnemonic (leave blank to generate a new one): " INPUT_MNEMONIC - if [ ! -z "$INPUT_MNEMONIC" ]; then - export AGG_MNEMONIC="$INPUT_MNEMONIC" - else - echo "Generating new mnemonic..." - fi - - export AGG_PK=$(cast wallet private-key --mnemonic "$AGG_MNEMONIC") -fi -AGGREGATOR_ADDR=`cast wallet address $AGG_PK` - -# == infra files == -AGG_LOC=infra/aggregator-${AGGREGATOR_INDEX} - -if [ -d "${AGG_LOC}" ] && [ "$(ls -A ${AGG_LOC})" ]; then - echo -e "\nRemoving ${AGG_LOC}" - docker kill wavs-${AGG_LOC} > /dev/null 2>&1 || true - echo "Removing dir ${AGG_LOC} ((may prompt for password))" - sudo rm -rf ${AGG_LOC} -fi -mkdir -p ${AGG_LOC} - -ENV_FILENAME="${AGG_LOC}/.env" -cp ./script/template/.env.example.aggregator ${ENV_FILENAME} - -sed -i${SP}'' -e "s/^WAVS_AGGREGATOR_CREDENTIAL=.*$/WAVS_AGGREGATOR_CREDENTIAL=\"$AGG_PK\"/" ${ENV_FILENAME} -sed -i${SP}'' -e "s/.%%MNEMONIC_REFERENCE%%$/ $AGG_MNEMONIC/" ${ENV_FILENAME} - -cat > "${AGG_LOC}/start.sh" << EOF -#!/bin/bash -cd \$(dirname "\$0") || return - -IMAGE=ghcr.io/lay3rlabs/wavs:1.4.1 -INSTANCE=wavs-aggregator-${AGGREGATOR_INDEX} -IPFS_GATEWAY=\${IPFS_GATEWAY:-"https://gateway.pinata.cloud/ipfs/"} - -docker kill \${INSTANCE} > /dev/null 2>&1 || true -docker rm \${INSTANCE} > /dev/null 2>&1 || true - -docker run -d --name \${INSTANCE} --network host --stop-signal SIGKILL --env-file .env -v .:/wavs \\ - \${IMAGE} wavs-aggregator --log-level debug --host 0.0.0.0 --port 8001 --ipfs-gateway \${IPFS_GATEWAY} - -# give it a chance to start up -sleep 1 -EOF - -cp wavs.toml ${AGG_LOC}/wavs.toml - -if [ "$DEPLOY_ENV" = "LOCAL" ]; then - # Good DevEx, auto fund the deployer - cast rpc anvil_setBalance "${AGGREGATOR_ADDR}" '15000000000000000000' --rpc-url ${RPC_URL} > /dev/null - - BAL=`cast balance --ether $AGGREGATOR_ADDR --rpc-url=${RPC_URL}` - echo "Local aggregator \`${AGGREGATOR_ADDR}\` funded with ${BAL}ether" -else - # New account on testnet, must be funded externally (i.e. metamask) - echo "Fund aggregator ${AGGREGATOR_ADDR} with some ETH, or change this value in ${ENV_FILENAME}" - sleep 5 - - while true; do - BALANCE=`cast balance --ether $AGGREGATOR_ADDR --rpc-url=${RPC_URL}` - if [ "$BALANCE" != "0.000000000000000000" ]; then - echo "Account balance is now $BALANCE" - break - fi - echo " [!] Waiting for balance to be funded by another account to this account..." - sleep 5 - done -fi diff --git a/script/create-deployer.sh b/script/create-deployer.sh deleted file mode 100644 index 5e4f8738..00000000 --- a/script/create-deployer.sh +++ /dev/null @@ -1,76 +0,0 @@ -#!/usr/bin/bash -# set -e -SP=""; if [[ "$(uname)" == *"Darwin"* ]]; then SP=" "; fi - -# if DEPLOY_ENV is not set, grab it from the `task get-deploy-status` -if [ -z "$DEPLOY_ENV" ]; then - DEPLOY_ENV=$(task get-deploy-status) -fi -if [ -z "$RPC_URL" ]; then - RPC_URL=`task get-rpc` -fi - -if [ ! -f .env ]; then - echo ".env file not found, attempting to copy create" - cp .env.example .env - if [ $? -ne 0 ]; then - echo "Failed to copy .env.example to .env" - return - fi -fi - -mkdir -p .docker - -# Create new deployer (if required) -create_funded_key() { - echo "Creating new FUNDED_KEY..." - export FUNDED_KEY=$(cast wallet new-mnemonic --json | jq -r '.accounts[0].private_key') - sed -i${SP}'' -e "s/^FUNDED_KEY=.*$/FUNDED_KEY=$FUNDED_KEY/" .env -} - -# Setup deployer key based on environment -if [ "$DEPLOY_ENV" = "LOCAL" ]; then - echo "Setting up LOCAL environment deployer" - create_funded_key -else - # Check for existing key in non-local environments - export FUNDED_KEY=$(task config:funded-key) - - if [ -z "$FUNDED_KEY" ]; then - echo "No FUNDED_KEY found in .env, creating new one" - create_funded_key - else - echo "Using existing FUNDED_KEY from .env" - fi -fi - -# Get deployer address -export DEPLOYER_ADDRESS=$(cast wallet address "$FUNDED_KEY") - -# Fund deployer based on environment -if [ "$DEPLOY_ENV" = "LOCAL" ]; then - # Auto-fund deployer in local environment - echo "Funding local deployer..." - cast rpc anvil_setBalance "$DEPLOYER_ADDRESS" '15000000000000000000' --rpc-url "$RPC_URL" > /dev/null - - BALANCE=$(cast balance --ether "$DEPLOYER_ADDRESS" --rpc-url="$RPC_URL") - echo "Local deployer $DEPLOYER_ADDRESS funded with ${BALANCE} ETH" -else - # Wait for external funding in testnet/mainnet - echo "Please fund deployer $DEPLOYER_ADDRESS with ETH" - echo "You can change this address in the .env file if needed" - sleep 5 - - echo "Waiting for funding..." - while true; do - BALANCE=$(cast balance --ether "$DEPLOYER_ADDRESS" --rpc-url="$RPC_URL") - - if [ "$BALANCE" != "0.000000000000000000" ]; then - echo "Deployer funded! Balance: $BALANCE ETH for $DEPLOYER_ADDRESS" - break - fi - - echo " [!] Waiting for balance increase $DEPLOYER_ADDRESS... (current: $BALANCE ETH)" - sleep 5 - done -fi diff --git a/script/create-operator.sh b/script/create-operator.sh deleted file mode 100644 index 7f75e3a3..00000000 --- a/script/create-operator.sh +++ /dev/null @@ -1,90 +0,0 @@ -#!/bin/bash - -SP=""; if [[ "$(uname)" == *"Darwin"* ]]; then SP=" "; fi - -cd $(git rev-parse --show-toplevel) || return - -mkdir -p .docker - -# require a number input as argument 1, if not, require OPERATOR_INDEX env variable -export OPERATOR_INDEX=${OPERATOR_INDEX:-$1} -if [ -z "$OPERATOR_INDEX" ]; then - echo "Please provide an operator index as the first argument or set OPERATOR_INDEX environment variable." - return -fi - -OPERATOR_LOC=infra/wavs-${OPERATOR_INDEX} - - -if [ -d "${OPERATOR_LOC}" ] && [ "$(ls -A ${OPERATOR_LOC})" ]; then - # read -p "Directory ${OPERATOR_LOC} already exists and is not empty. Do you want to remove it? (y/n): " -n 1 -r - # if [[ $REPLY =~ ^[Yy]$ ]]; then - echo -e "\nRemoving ${OPERATOR_LOC}" - docker kill wavs-${OPERATOR_INDEX} > /dev/null 2>&1 || true - - echo "Removing dir ${OPERATOR_LOC} ((may prompt for password))" - sudo rm -rf ${OPERATOR_LOC} - # else - # echo -e "\nExiting without changes." - # return - # fi -fi - -mkdir -p ${OPERATOR_LOC} - - -ENV_FILENAME="${OPERATOR_LOC}/.env" -cp ./script/template/.env.example.operator ${ENV_FILENAME} - - -TEMP_FILENAME=".docker/tmp.json" - -# creates a new wallet no matter what -cast wallet new-mnemonic --json > ${TEMP_FILENAME} -export OPERATOR_MNEMONIC=`jq -r .mnemonic ${TEMP_FILENAME}` -export OPERATOR_PK=`jq -r .accounts[0].private_key ${TEMP_FILENAME}` - -# if its not a LOCAL deploy, we will see if the user wants to override. if they do, we do. -if [ "$(task get-deploy-status)" != "LOCAL" ]; then - read -p "Enter operator mnemonic (leave blank to generate a new one): " INPUT_MNEMONIC - if [ ! -z "$INPUT_MNEMONIC" ]; then - export OPERATOR_MNEMONIC="$INPUT_MNEMONIC" - else - echo "Generating new mnemonic..." - fi - - export OPERATOR_PK=$(cast wallet private-key --mnemonic "$OPERATOR_MNEMONIC") -fi - -sed -i${SP}'' -e "s/^WAVS_SUBMISSION_MNEMONIC=.*$/WAVS_SUBMISSION_MNEMONIC=\"$OPERATOR_MNEMONIC\"/" ${ENV_FILENAME} -sed -i${SP}'' -e "s/^WAVS_CLI_EVM_CREDENTIAL=.*$/WAVS_CLI_EVM_CREDENTIAL=\"$OPERATOR_PK\"/" ${ENV_FILENAME} - -rm ${TEMP_FILENAME} - -# Create startup script -cat > "${OPERATOR_LOC}/start.sh" << EOF -#!/bin/bash -cd \$(dirname "\$0") || return - -IMAGE=ghcr.io/lay3rlabs/wavs:1.4.1 -WAVS_INSTANCE=wavs-${OPERATOR_INDEX} -IPFS_GATEWAY=\${IPFS_GATEWAY:-"https://gateway.pinata.cloud/ipfs/"} - -docker kill \${WAVS_INSTANCE} > /dev/null 2>&1 || true -docker rm \${WAVS_INSTANCE} > /dev/null 2>&1 || true - -docker run -d --rm --name \${WAVS_INSTANCE} --network host --env-file .env -v \$(pwd):/root/wavs \${IMAGE} wavs --home /root/wavs --ipfs-gateway \${IPFS_GATEWAY} --host 0.0.0.0 --log-level info -sleep 0.25 - -if [ ! "\$(docker ps -q -f name=\${WAVS_INSTANCE})" ]; then - echo "Container \${WAVS_INSTANCE} is not running. Reason:" - docker run --rm --name \${WAVS_INSTANCE} --network host --env-file .env -v \$(pwd):/root/wavs \${IMAGE} wavs --home /root/wavs --ipfs-gateway \${IPFS_GATEWAY} --host 0.0.0.0 --log-level info -fi - -# give wavs a chance to start up & health check -sleep 3 -EOF - -cp wavs.toml ${OPERATOR_LOC}/wavs.toml - -echo "Operator ${OPERATOR_INDEX} created at ${OPERATOR_LOC}" diff --git a/script/deploy-script.sh b/script/deploy-script.sh deleted file mode 100644 index fc2b6711..00000000 --- a/script/deploy-script.sh +++ /dev/null @@ -1,282 +0,0 @@ -#!/bin/bash -set -e -# set -x - -STATUS_FILE=".docker/component-upload-status" - -# Store the PID of the background process -if [[ "${SKIP_COMPONENT_UPLOAD}" != "true" ]]; then - bash script/upload-components-background.sh & - UPLOAD_PID=$! -fi - -# Function to clean up on exit -cleanup() { - echo "Cleaning up..." - # Kill the background upload process if it's still running - if [ -n "$UPLOAD_PID" ] && kill -0 $UPLOAD_PID 2>/dev/null; then - echo "Terminating background upload process (PID: $UPLOAD_PID)..." - kill -TERM $UPLOAD_PID 2>/dev/null - # Give it a moment to terminate gracefully, then force kill if needed - sleep 1 - kill -9 $UPLOAD_PID 2>/dev/null || true - fi - # Clean up the status file - rm -f "$STATUS_FILE" - echo "Cleanup complete" - exit 1 -} - -# Set up trap to handle Ctrl+C (SIGINT) and other termination signals -trap cleanup INT TERM EXIT - -# if RPC_URL is not set, use default by calling command -if [ -z "$RPC_URL" ]; then - export RPC_URL=$(task get-rpc) -fi -if [ -z "$AGGREGATOR_URL" ]; then - export AGGREGATOR_URL=http://127.0.0.1:8001 -fi - -# local: create deployer & auto fund. testnet: create & iterate check balance -bash ./script/create-deployer.sh -export FUNDED_KEY=$(task config:funded-key) - -if [[ "${SKIP_CONTRACT_UPLOAD}" != "true" ]]; then - echo "đŸŸĸ Deploying POA Service Manager..." - POA_MIDDLEWARE="docker run --rm --network host -v ./.nodes:/root/.nodes --env-file .env ghcr.io/lay3rlabs/poa-middleware:1.0.1" - $POA_MIDDLEWARE deploy - sleep 1 # for Base - $POA_MIDDLEWARE owner_operation updateStakeThreshold 1000 - sleep 1 # for Base - $POA_MIDDLEWARE owner_operation updateQuorum 2 3 -fi - -if [ "$(task get-deploy-status)" = "LOCAL" ]; then - # required for the checkpoint stuff, ref: aurtur / https://github.com/Lay3rLabs/EN0VA/pull/31/commits/d205e9c65f91fb5b0b5bca672d8d28d6c7f672f9#diff-e3d8246ec3421fa3a204fe7a8f0586acfad4888ae82f5b8c6d130cb907705c80R75-R78 - cast rpc anvil_mine --rpc-url $(task get-rpc) -fi - -WAVS_SERVICE_MANAGER_ADDRESS=`task config:service-manager-address` -echo "â„šī¸ Using WAVS Service Manager address: ${WAVS_SERVICE_MANAGER_ADDRESS}" - -### === Deploy Contract === ### - -# TODO: remove deploy-contracts.sh once this works -export DEPLOY_ENV=`task get-deploy-status` -if [[ "${SKIP_CONTRACT_UPLOAD}" != "true" ]]; then - echo "🚀 Starting contract deployment..." - - # Build the contracts - echo "Building contracts..." - forge build - - echo "🔧 Configuration:" - echo " RPC_URL: ${RPC_URL}" - echo " WAVS_SERVICE_MANAGER_ADDRESS: ${WAVS_SERVICE_MANAGER_ADDRESS}" - - mkdir -p .docker - echo "đŸ“Ļ Deploying contracts..." - - # TODO: we can probably put this in the components.json to simple and make it scale right? - forge create SimpleSubmit --json --broadcast \ - --rpc-url $RPC_URL \ - --private-key $FUNDED_KEY \ - --constructor-args "${WAVS_SERVICE_MANAGER_ADDRESS}" > .docker/submit.json - - forge create SimpleTrigger --json --broadcast \ - --rpc-url $RPC_URL \ - --private-key $FUNDED_KEY \ - --constructor-args "${WAVS_SERVICE_MANAGER_ADDRESS}" > .docker/trigger.json - - # Create simplified deployment summary - jq -n \ - --arg service_id "" \ - --arg rpc_url "${RPC_URL}" \ - --arg wavs_service_manager "${WAVS_SERVICE_MANAGER_ADDRESS}" \ - --slurpfile submit .docker/submit.json \ - --slurpfile trigger .docker/trigger.json \ - '{ - service_id: $service_id, - rpc_url: $rpc_url, - wavs_service_manager: $wavs_service_manager, - evmpriceoracle_submit: $submit[0], - evmpriceoracle_trigger: $trigger[0], - }' \ - > .docker/deployment_summary.json - - sleep 1 -fi - -### === Deploy Services === - -# Require component configuration file -COMPONENT_CONFIGS_FILE="config/components.json" - -if [ ! -f "$COMPONENT_CONFIGS_FILE" ]; then - echo "❌ Component configuration file not found: $COMPONENT_CONFIGS_FILE" - echo "Please run 'script/configure-components.sh init' to create the configuration." - exit 1 -fi - -echo "Using component configuration from: $COMPONENT_CONFIGS_FILE" - -# Testnet: set values (default: local if not set) -if [ "$(task get-deploy-status)" = "TESTNET" ]; then - export TRIGGER_CHAIN=evm:$(task get-chain-id) - export SUBMIT_CHAIN=evm:$(task get-chain-id) -fi - -# Determine chain name based on deployment environment -if [ "$(task get-deploy-status)" = "TESTNET" ]; then - export CHAIN_NAME=evm:$(task get-chain-id) - export AGGREGATOR_TIMER_DELAYER_SECS=3 # base wait ~1 block -else - export CHAIN_NAME=evm:31337 # local - export AGGREGATOR_TIMER_DELAYER_SECS=0 -fi -echo "✅ Chain Name: ${CHAIN_NAME}" - -echo "📋 All configuration variables exported for component-specific substitution" - -# wait for STATUS_FILE to contain the status COMPLETED in its content, check every 0.5 seconds for up to 60 seconds then error -if [[ "${SKIP_COMPONENT_UPLOAD}" != "true" ]]; then - echo "Waiting for component uploads to complete..." - timeout 300 bash -c " - trap 'exit 130' INT TERM - while ! grep -q 'COMPLETED' '$STATUS_FILE' 2>/dev/null; do - sleep 0.5 - done - " - if [ $? -ne 0 ]; then - echo "❌ Component uploads did not complete in time or failed." - exit 1 - fi - echo "✅ All components uploaded successfully" - # clear tmp file - rm -f $STATUS_FILE - - seconds=2 - echo "Waiting for ${seconds} seconds for registry to update..." - sleep ${seconds} -fi - -# Create service with multiple workflows -echo "Creating service with multiple component workflows..." -export COMPONENT_CONFIGS_FILE="$COMPONENT_CONFIGS_FILE" -# All required variables are now exported for component-specific substitution -REGISTRY=$(task get-registry) source ./script/build-service.sh -sleep 1 - -# === Upload service.json to IPFS === -# local: 127.0.0.1:5001 | testnet: https://app.pinata.cloud/. set PINATA_API_KEY to JWT token in .env -echo "Uploading to IPFS..." - -export PINATA_API_KEY=$(grep ^WAVS_ENV_PINATA_API_KEY= .env | cut -d '=' -f2-) -# if not LOCAL, ensure PINATA_API_KEY is set or PINATA_API_KEY. If neither, require input -if [ "$(task get-deploy-status)" != "LOCAL" ]; then - if [ -z "$PINATA_API_KEY" ]; then - read -p "Enter your Pinata JWT API Key (or set WAVS_ENV_PINATA_API_KEY in .env): " PINATA_API_KEY - if [ -z "$PINATA_API_KEY" ]; then - echo "❌ Pinata API Key is required for TESTNET deployments." - exit 1 - fi - export PINATA_API_KEY - fi - - read -p "Make any changes you want to the service.json now. Press [Enter] to continue upload to IPFS..." -fi - -export ipfs_cid=`SERVICE_FILE=.docker/service.json make upload-to-ipfs` -# LOCAL: http://127.0.0.1:8080 | TESTNET: https://gateway.pinata.cloud/ -export IPFS_GATEWAY="$(task get-ipfs-gateway)" -export IPFS_URI="ipfs://${ipfs_cid}" -IPFS_URL="${IPFS_GATEWAY}${ipfs_cid}" -echo "IPFS_URL=${IPFS_URL}" - -echo "Querying to verify IPFS upload... (120 second timeout)" -curl ${IPFS_URL} --connect-timeout 120 --max-time 120 --show-error --fail -while [ $? -ne 0 ]; do - echo "IPFS upload not yet available. Please ensure the CID is correct and try again." - read -p "Enter the IPFS URI (e.g., ipfs://bafkreicglpmavzsomzghbmemauv4i4jkxgaxsqefruxtplulul7o2sg33e): " IPFS_URI - ipfs_cid=$(echo $IPFS_URI | sed 's|ipfs://||') - IPFS_URL="${IPFS_GATEWAY}${ipfs_cid}" - curl ${IPFS_URL} --connect-timeout 120 --max-time 120 --show-error --fail -done - - -if [ "$FUNDED_KEY" ]; then - echo "" - echo "Setting service URI on WAVS Service Manager..." - # if ` Error: Failed to estimate gas: server returned an error response: error code 3: execution reverted, data: "0x"`, then ServiceManager upload failed. retry - cast send ${WAVS_SERVICE_MANAGER_ADDRESS} 'setServiceURI(string)' "${IPFS_URI}" -r ${RPC_URL} --private-key ${FUNDED_KEY} -fi - -echo "IPFS_GATEWAY=${IPFS_GATEWAY}" -echo "IPFS_URI=${IPFS_URI}" - -sleep 1 - -### === Create Aggregator === - -bash ./script/create-aggregator.sh 1 -IPFS_GATEWAY=${IPFS_GATEWAY} bash ./infra/aggregator-1/start.sh -sleep 3 -curl -s -X POST -H "Content-Type: application/json" -d "{ - \"service_manager\": { - \"evm\": { - \"chain\": \"${CHAIN_NAME}\", - \"address\": \"${WAVS_SERVICE_MANAGER_ADDRESS}\" - } - } -}" ${AGGREGATOR_URL}/services - -### === Start WAVS === -bash ./script/create-operator.sh 1 -IPFS_GATEWAY=${IPFS_GATEWAY} bash ./infra/wavs-1/start.sh -sleep 3 - -# Deploy the service JSON to WAVS so it now watches and submits. -# 'opt in' for WAVS to watch (this is before we register to Eigenlayer) -WAVS_ENDPOINT=http://127.0.0.1:8000 SERVICE_URL=${IPFS_URI} IPFS_GATEWAY=${IPFS_GATEWAY} make deploy-service -sleep 3 - -export SERVICE_ID=${SERVICE_ID:-`task config:service-id`} -if [ -z "$SERVICE_ID" ]; then - echo "❌ Failed to retrieve service ID" - exit 1 -fi -echo "✅ Service ID: ${SERVICE_ID}" - -# Update the deployment summary with the service ID -jq ".service_id = \"${SERVICE_ID}\"" .docker/deployment_summary.json > .docker/deployment_summary.json.tmp -mv .docker/deployment_summary.json.tmp .docker/deployment_summary.json - -### === Register service specific operator === - -# OPERATOR_PRIVATE_KEY, AVS_SIGNING_ADDRESS -eval "$(task setup-avs-signing HD_INDEX=1 | tail -4)" - -# Reset registry after deployment is complete -echo "Cleaning up registry data..." -REGISTRY=$(task get-registry) -if [ -n "$REGISTRY" ]; then - PROTOCOL="https" - if [[ "$REGISTRY" == *"localhost"* ]] || [[ "$REGISTRY" == *"127.0.0.1"* ]]; then - PROTOCOL="http" - fi - warg reset --registry ${PROTOCOL}://${REGISTRY} || echo "Registry reset failed (non-critical)" -fi - -# Remove trap for normal exit -trap - INT TERM EXIT - -echo "✅ Deployment complete!" - -# if post-deploy.sh exists, run it -if [ -f "script/post-deploy.sh" ]; then - echo "Running post-deploy.sh..." - bash script/post-deploy.sh - - echo "✅ post-deploy.sh completed!" -fi diff --git a/script/upload-components-background.sh b/script/upload-components-background.sh deleted file mode 100755 index ab6c20db..00000000 --- a/script/upload-components-background.sh +++ /dev/null @@ -1,209 +0,0 @@ -#!/bin/bash - -log() { - echo "🔧 [Upload] $1" -} - -log "Starting component upload..." - -REPO_ROOT=$(git rev-parse --show-toplevel) || exit 1 -cd "$REPO_ROOT" || exit 1 - -STATUS_FILE=${STATUS_FILE:-".docker/component-upload-status"} -COMPONENT_CONFIGS_FILE="config/components.json" - -mkdir -p .docker -echo "UPLOADING" > "$STATUS_FILE" - -cleanup_on_error() { - log "❌ Upload failed" - echo "ERROR" > "$STATUS_FILE" - # Clean up any remaining temp directories - find /tmp -maxdepth 1 -name "warg_home_*" -type d -exec rm -rf {} + 2>/dev/null || true - # Kill background jobs - jobs -p | xargs -r kill 2>/dev/null || true - exit 1 -} - -trap cleanup_on_error INT TERM - -if [ ! -f "$COMPONENT_CONFIGS_FILE" ]; then - log "❌ Config file not found: $COMPONENT_CONFIGS_FILE" - echo "ERROR" > "$STATUS_FILE" - exit 1 -fi - -log "đŸ“Ļ Building components if needed..." - -# Function to get modified components from git status -get_modified_components() { - git status --porcelain | grep -v "bindings.rs" | grep "^.* components/" | \ - sed 's|^.* components/||' | cut -d'/' -f1 | sort -u -} - -# Function to build specific component -build_component() { - local component="$1" - local component_dir="components/$component" - - if [ -f "$component_dir/Makefile" ] && grep -q "^wasi-build:" "$component_dir/Makefile" 2>/dev/null; then - log "Building component: $component" - make -s -C "$component_dir" wasi-build - return $? - else - log "âš ī¸ No wasi-build target found for component : $component" - return 1 - fi -} - -# Check if compiled directory exists or is empty -if [ ! -d compiled/ ] || [ -z "$(find compiled/ -name '*.wasm')" ]; then - log "Building all components (compiled/ missing or empty)..." - warg reset || echo "warg reset failed (warg server not started), continuing..." - task build:wasi -else - # Check for modified components - modified_components=$(get_modified_components) - - if [ -n "$modified_components" ]; then - log "Changes detected in components: $(echo $modified_components | tr '\n' ' ')" - warg reset || echo "warg reset failed (warg server not started), continuing..." - - # Build only modified components - build_failed=0 - for component in $modified_components; do - if ! build_component "$component"; then - build_failed=1 - log "❌ Failed to build component: $component" - fi - done - - if [ $build_failed -eq 1 ]; then - log "âš ī¸ Some components failed to build, falling back to full build..." - task build:wasi - fi - else - log "✅ No component changes detected, skipping build" - fi -fi - -upload_package() { - local component_json="$1" - local num="$2" - - local DISABLED=$(echo "$component_json" | jq -r '.disabled // false') - local PKG_NAME=$(echo "$component_json" | jq -r '.package_name') - - if [ "$DISABLED" = "true" ]; then - log "[$num] âš ī¸ ${PKG_NAME} is disabled, skipping upload" - return 0 - fi - - local COMPONENT_FILENAME=$(echo "$component_json" | jq -r '.filename') - local PKG_VERSION=$(echo "$component_json" | jq -r '.package_version') - local component_file="./compiled/${COMPONENT_FILENAME}" - - if [ ! -f "$component_file" ]; then - log "[$num] ❌ File not found: $component_file" - return 1 - fi - - local REGISTRY=$(task get-registry) - local PKG_NAMESPACE=$(task get-wasi-namespace REGISTRY="$REGISTRY") - - if [ -z "$REGISTRY" ] || [ -z "$PKG_NAMESPACE" ]; then - log "[$num] ❌ Registry config missing for ${PKG_NAME}" - return 1 - fi - - local PROTOCOL="https" - if [[ "$REGISTRY" == *"localhost"* ]] || [[ "$REGISTRY" == *"127.0.0.1"* ]]; then - PROTOCOL="http" - fi - - local REGISTRY_URL="${PROTOCOL}://${REGISTRY}" - local FULL_PKG_NAME="${PKG_NAMESPACE}:${PKG_NAME}" - - # Create unique temp directory for warg storage (bypasses locking) - local temp_home=$(mktemp -d -t warg_home_XXXXXX) - - log "[$num] 🚀 Uploading ${PKG_NAME} (${FULL_PKG_NAME}@${PKG_VERSION}) to ${REGISTRY_URL}..." - - # Set environment to use isolated storage (avoids .lock files) - export WARG_HOME="${temp_home}" - local output=$(warg config --registry "${REGISTRY_URL}" 2>&1 && \ - warg publish release --name "${FULL_PKG_NAME}" --version "${PKG_VERSION}" "${component_file}" --no-wait 2>&1) - local exit_code=$? - rm -rf "${temp_home}" - - if [ $exit_code -eq 0 ] || [[ "$output" =~ "already released" ]] || [[ "$output" =~ "failed to prove inclusion" ]]; then - log "[$num] ✅ ${PKG_NAME} uploaded" - return 0 - else - log "[$num] ❌ ${PKG_NAME} failed: ${output}" - return 1 - fi -} - -log "📤 Starting component uploads..." - -if ! command -v warg >/dev/null 2>&1; then - log "❌ warg command not found" - echo "ERROR" > "$STATUS_FILE" - exit 1 -fi - -TOTAL_COMPONENTS=$(jq -r '.components | length' "$COMPONENT_CONFIGS_FILE") -TOTAL_AGGREGATOR_COMPONENTS=$(jq -r '.aggregator_components | length' "$COMPONENT_CONFIGS_FILE") - -if [ $TOTAL_COMPONENTS -eq 0 ] && [ $TOTAL_AGGREGATOR_COMPONENTS -eq 0 ]; then - log "❌ No components found" - echo "ERROR" > "$STATUS_FILE" - exit 1 -fi - -log "📊 Found $TOTAL_COMPONENTS components and $TOTAL_AGGREGATOR_COMPONENTS aggregator components" - -# Upload components in parallel -pids=() -component_num=0 - -# Upload regular components -while IFS= read -r component; do - component_num=$((component_num + 1)) - upload_package "$component" "$component_num" & - pids+=($!) -done < <(jq -r '.components | unique_by(.filename)[] | @json' "$COMPONENT_CONFIGS_FILE") - -# Upload aggregator components -while IFS= read -r component; do - component_num=$((component_num + 1)) - upload_package "$component" "$component_num" & - pids+=($!) -done < <(jq -r '.aggregator_components | unique_by(.filename)[] | @json' "$COMPONENT_CONFIGS_FILE") - -# Wait for all uploads -successful=0 -failed=0 - -for pid in "${pids[@]}"; do - if wait $pid 2>/dev/null; then - successful=$((successful + 1)) - else - failed=$((failed + 1)) - fi -done - -log "" -log "📊 Results: ✅ ${successful} success, ❌ ${failed} failed" - -if [ $failed -eq 0 ]; then - log "🎉 All uploads completed!" - log "(( if this hangs it's the solidity, not the uploads! Wait a lil bit buddy... ))" - echo "COMPLETED" > "$STATUS_FILE" - exit 0 -else - log "âš ī¸ Some uploads failed" - echo "ERROR" > "$STATUS_FILE" - exit 1 -fi diff --git a/taskfile/config.yml b/taskfile/config.yml index c0272e5b..4fb23d8c 100644 --- a/taskfile/config.yml +++ b/taskfile/config.yml @@ -36,22 +36,22 @@ vars: sh: test -n "{{.FUNDED_KEY}}" && cast wallet address "{{.FUNDED_KEY}}" 2>/dev/null || echo "" # Docker images - WAVS_DOCKER_IMAGE: "ghcr.io/lay3rlabs/wavs:1.4.1" + WAVS_DOCKER_IMAGE: "ghcr.io/lay3rlabs/wavs:1.5.1" MIDDLEWARE_DOCKER_IMAGE: "ghcr.io/lay3rlabs/wavs-middleware:0.5.0-beta.10" # Service endpoints - IPFS_ENDPOINT: "http://localhost:5001" - IPFS_GATEWAY: "http://localhost:8080/ipfs/" + IPFS_ENDPOINT: "http://127.0.0.1:5001" + IPFS_GATEWAY: "http://127.0.0.1:8080/ipfs/" RPC_URL: "http://127.0.0.1:8545" - WAVS_ENDPOINT: "http://127.0.0.1:8000" - AGGREGATOR_URL: "http://localhost:8001" + WAVS_ENDPOINT: "http://127.0.0.1:8041" + AGGREGATOR_URL: "http://127.0.0.1:8040" # Deployment summary path DEPLOY_SUMMARY: ".docker/deployment_summary.json" SERVICE_INDEX: '{{.SERVICE_INDEX | default "0"}}' SERVICE_ID: - sh: curl -s http://localhost:8000/services | jq -r ".service_ids[{{.SERVICE_INDEX}}]" + sh: curl -s http://localhost:8041/services | jq -r ".service_ids[{{.SERVICE_INDEX}}]" WAVS_SERVICE_MANAGER_ADDRESS: sh: | if [ -n "${WAVS_SERVICE_MANAGER_ADDRESS}" ]; then @@ -61,8 +61,7 @@ vars: if [ -n "$addr" ] && [ "$addr" != "null" ]; then echo "$addr" else - # writes to stderr - echo "âš ī¸ WAVS Service Manager address not found (looked in \$WAVS_SERVICE_MANAGER_ADDRESS env and .nodes/poa_deploy.json file)" 1>&2; + echo "âš ī¸ WAVS Service Manager address not found (looked in \$WAVS_SERVICE_MANAGER_ADDRESS env and .nodes/poa_deploy.json file)" >&2 echo "" fi fi diff --git a/taskfile/deploy.yml b/taskfile/deploy.yml index cda6b6a0..71b58d16 100644 --- a/taskfile/deploy.yml +++ b/taskfile/deploy.yml @@ -3,14 +3,8 @@ version: "3" tasks: full: desc: "Complete WAVS deployment pipeline" - vars: - PRIVATE_KEY: '{{.PRIVATE_KEY | default "0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80"}}' cmds: - - | - echo "🚀 Starting complete WAVS deployment..." - export RPC_URL=$(task get-rpc) - export AGGREGATOR_URL={{.AGGREGATOR_URL}} - bash ./script/deploy-script.sh + - pnpm run deploy:full ipfs: desc: "Upload service config to IPFS" @@ -78,7 +72,7 @@ tasks: {{.DOCKER_SUDO}} docker run --rm --network host \ $(test -f .env && echo "--env-file ./.env") \ -v $(pwd):/data {{.DOCKER_IMAGE}} wavs-cli \ - deploy-service --service-url {{.SERVICE_URL}} \ + deploy-service --service-uri {{.SERVICE_URL}} \ --log-level=debug --data /data/.docker --home /data \ {{if .WAVS_ENDPOINT}}--wavs-endpoint {{.WAVS_ENDPOINT}}{{end}} \ {{if .IPFS_GATEWAY}}--ipfs-gateway {{.IPFS_GATEWAY}}{{end}} diff --git a/taskfile/docker.yml b/taskfile/docker.yml deleted file mode 100644 index d7c1b5b5..00000000 --- a/taskfile/docker.yml +++ /dev/null @@ -1,32 +0,0 @@ -version: "3" - -tasks: - clean: - desc: "Remove unused docker containers" - ignore_error: true - cmds: - - | - {{.DOCKER_SUDO}} docker rm -v $({{.DOCKER_SUDO}} docker ps -a --filter status=exited -q) 2>/dev/null || true - - wavs-cli: - desc: "Run wavs-cli in Docker" - vars: - ARGS: '{{.CLI_ARGS}}' - cmds: - - | - {{.DOCKER_SUDO}} docker run --rm --network host \ - $(test -f .env && echo "--env-file ./.env") \ - -v $(pwd):/data {{.DOCKER_IMAGE}} wavs-cli {{.ARGS}} - - middleware: - desc: "Run wavs-middleware in Docker" - vars: - COMMAND: '{{.COMMAND}}' - cmds: - - | - {{.DOCKER_SUDO}} docker run --rm --network host --env-file .env \ - $(if {{.WAVS_SERVICE_MANAGER_ADDRESS}}; then echo "-e WAVS_SERVICE_MANAGER_ADDRESS={{.WAVS_SERVICE_MANAGER_ADDRESS}}"; fi) \ - $(if {{.OPERATOR_KEY}}; then echo "-e OPERATOR_KEY={{.OPERATOR_KEY}}"; fi) \ - $(if {{.WAVS_SIGNING_KEY}}; then echo "-e WAVS_SIGNING_KEY={{.WAVS_SIGNING_KEY}}"; fi) \ - $(if {{.WAVS_DELEGATE_AMOUNT}}; then echo "-e WAVS_DELEGATE_AMOUNT={{.WAVS_DELEGATE_AMOUNT}}"; fi) \ - -v ./.nodes:/root/.nodes {{.MIDDLEWARE_DOCKER_IMAGE}} {{.COMMAND}} diff --git a/taskfile/env.yml b/taskfile/env.yml index fa922eaf..280b18b9 100644 --- a/taskfile/env.yml +++ b/taskfile/env.yml @@ -20,10 +20,8 @@ tasks: fi # Get RPC URL based on environment - if [ "$DEPLOY_ENV" = "LOCAL" ]; then - grep "^LOCAL_ETHEREUM_RPC_URL=" .env | cut -d '=' -f2- - elif [ "$DEPLOY_ENV" = "TESTNET" ]; then - grep "^TESTNET_RPC_URL=" .env | cut -d '=' -f2- + if [ "$DEPLOY_ENV" = "LOCAL" ] || [ "$DEPLOY_ENV" = "TESTNET" ]; then + grep "^RPC_URL=" .env | cut -d '=' -f2- else echo "Unknown DEPLOY_ENV: $DEPLOY_ENV" >&2 exit 1 diff --git a/taskfile/operator.yml b/taskfile/operator.yml deleted file mode 100644 index d0da09c3..00000000 --- a/taskfile/operator.yml +++ /dev/null @@ -1,102 +0,0 @@ -version: "3" - -silent: true - -vars: - RPC_URL: '{{.RPC_URL | default "http://localhost:8545"}}' - OPERATOR_NUM: '{{.OPERATOR_NUM}}' - OPERATOR_WEIGHT: '{{.OPERATOR_WEIGHT | default "1000"}}' - WAVS_ENV_FILE: 'infra/wavs-{{.OPERATOR_NUM}}/.env' - - # Common shell script snippets - VALIDATE_INPUTS: | - if [ -z "{{.OPERATOR_NUM}}" ]; then - echo "❌ Error: OPERATOR_NUM is required" - echo "Usage: task operator: OPERATOR_NUM=1" - exit 1 - fi - if [ ! -f "{{.WAVS_ENV_FILE}}" ]; then - echo "❌ Error: Environment file {{.WAVS_ENV_FILE}} not found" - exit 1 - fi - echo "📝 Loading operator {{.OPERATOR_NUM}} configuration from {{.WAVS_ENV_FILE}}" - - LOAD_ENV_AND_KEYS: | - source {{.WAVS_ENV_FILE}} - OPERATOR_KEY=$(cast wallet private-key --mnemonic "$WAVS_SUBMISSION_MNEMONIC" --mnemonic-index 0) - OPERATOR_ADDRESS=$(cast wallet address ${OPERATOR_KEY}) - OPERATOR_MNEMONIC="$WAVS_SUBMISSION_MNEMONIC" - WAVS_SIGNING_KEY=$(cast wallet address --mnemonic "$WAVS_SUBMISSION_MNEMONIC" --mnemonic-index 1) - -tasks: - register: - desc: "Register an operator with WAVS Service Manager" - cmds: - - | - {{.VALIDATE_INPUTS}} - {{.LOAD_ENV_AND_KEYS}} - - echo "🔑 Operator Address: ${OPERATOR_ADDRESS}" - - # Fund operator if on local network - if [[ "{{.RPC_URL}}" == *"localhost"* ]] || [[ "{{.RPC_URL}}" == *"127.0.0.1"* ]]; then - echo "💰 Funding operator on local network..." - cast rpc anvil_setBalance ${OPERATOR_ADDRESS} $(cast to-hex 100000000000000000) --rpc-url {{.RPC_URL}} - fi - - echo "📝 Whitelisting (registering) operator in WAVS Service Manager..." - cast send {{.WAVS_SERVICE_MANAGER_ADDRESS}} "registerOperator(address,uint256)" ${OPERATOR_ADDRESS} {{.OPERATOR_WEIGHT}} \ - --private-key ${PRIVATE_KEY} \ - --rpc-url {{.RPC_URL}} - - echo "âš–ī¸ Checking operator weight..." - cast call {{.WAVS_SERVICE_MANAGER_ADDRESS}} "getOperatorWeight(address)" ${OPERATOR_ADDRESS} \ - --rpc-url {{.RPC_URL}} - - echo "✅ Registration complete!" - - update-signing-key: - desc: "Update operator's signing key with WAVS Service Manager" - cmds: - - | - {{.VALIDATE_INPUTS}} - {{.LOAD_ENV_AND_KEYS}} - - echo "🔑 Operator Address: ${OPERATOR_ADDRESS}" - echo "🔑 New Signing Key: ${WAVS_SIGNING_KEY}" - - encoded_operator_address=$(cast abi-encode "f(address)" "$OPERATOR_ADDRESS") - signing_message=$(cast keccak "$encoded_operator_address") - signing_signature=$(cast wallet sign --no-hash --mnemonic "$OPERATOR_MNEMONIC" --mnemonic-index 1 "$signing_message") - echo "Signing signature: $signing_signature" - - echo "🔐 Updating signing key..." - cast send {{.WAVS_SERVICE_MANAGER_ADDRESS}} "updateOperatorSigningKey(address,bytes)" ${WAVS_SIGNING_KEY} ${signing_signature} \ - --private-key ${OPERATOR_KEY} \ - --rpc-url {{.RPC_URL}} - - echo "✅ Signing key update complete!" - - verify: - desc: "Verify operator registration status" - cmds: - - | - {{.VALIDATE_INPUTS}} - {{.LOAD_ENV_AND_KEYS}} - - echo "🔍 Verifying operator {{.OPERATOR_NUM}} registration..." - - echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━" - echo "Operator Address: ${OPERATOR_ADDRESS}" - - echo -n "Operator Signing Key: " - cast call {{.WAVS_SERVICE_MANAGER_ADDRESS}} "getLatestOperatorSigningKey(address)" ${OPERATOR_ADDRESS} \ - --rpc-url {{.RPC_URL}} - - echo -n "Signing Key -> Operator: " - cast call {{.WAVS_SERVICE_MANAGER_ADDRESS}} "getLatestOperatorForSigningKey(address)" ${WAVS_SIGNING_KEY} \ - --rpc-url {{.RPC_URL}} - - echo -n "Operator Weight: " - cast call {{.WAVS_SERVICE_MANAGER_ADDRESS}} "getOperatorWeight(address)" ${OPERATOR_ADDRESS} \ - --rpc-url {{.RPC_URL}} diff --git a/taskfile/wasi.yml b/taskfile/wasi.yml deleted file mode 100644 index f7874717..00000000 --- a/taskfile/wasi.yml +++ /dev/null @@ -1,83 +0,0 @@ -version: "3" - -tasks: - exec: - desc: "Execute WASI component locally" - vars: - COMPONENT_FILENAME: '{{.COMPONENT_FILENAME | default "wavs_eas_attest.wasm"}}' - INPUT_DATA: '{{.INPUT_DATA | default ""}}' - WAVS_CMD: '{{.DOCKER_SUDO}} docker run --rm --network host $(test -f .env && echo "--env-file ./.env") -v $(pwd):/data {{.DOCKER_IMAGE}} wavs-cli' - cmds: - - | - {{.WAVS_CMD}} exec --log-level=info --data /data/.docker --home /data \ - --component "/data/compiled/{{.COMPONENT_FILENAME}}" \ - --input $(cast abi-encode "f(string)" "{{.INPUT_DATA}}") - - exec-fixed: - desc: "Execute WASI component with fixed input (for Go/TS components)" - vars: - COMPONENT_FILENAME: '{{.COMPONENT_FILENAME | default "wavs_eas_attest.wasm"}}' - INPUT_DATA: '{{.INPUT_DATA | default ""}}' - WAVS_CMD: '{{.DOCKER_SUDO}} docker run --rm --network host $(test -f .env && echo "--env-file ./.env") -v $(pwd):/data {{.DOCKER_IMAGE}} wavs-cli' - cmds: - - | - {{.WAVS_CMD}} exec --log-level=info --data /data/.docker --home /data \ - --component "/data/compiled/{{.COMPONENT_FILENAME}}" \ - --input `cast format-bytes32-string {{.INPUT_DATA}}` - - validate: - desc: "Validate a WASI component against best practices" - vars: - COMPONENT: '{{.COMPONENT}}' - preconditions: - - test -n "{{.COMPONENT}}" - - test -d "./components/{{.COMPONENT}}" - - test -d "./test_utils" - cmds: - - cd test_utils && ./validate_component.sh {{.COMPONENT}} - - upload-to-registry: - desc: "Upload WASI component to registry" - vars: - PKG_NAME: '{{.PKG_NAME}}' - PKG_VERSION: '{{.PKG_VERSION}}' - COMPONENT_FILENAME: '{{.COMPONENT_FILENAME}}' - preconditions: - - test -n "{{.PKG_NAME}}" - - test -n "{{.PKG_VERSION}}" - - test -n "{{.COMPONENT_FILENAME}}" - - test -f "./compiled/{{.COMPONENT_FILENAME}}" - cmds: - - | - export REGISTRY=`task get-registry` - if [ -z "$REGISTRY" ]; then - echo "REGISTRY is not set. Please set the REGISTRY environment variable." && exit 1 - fi - export PKG_NAMESPACE=`task get-wasi-namespace REGISTRY=${REGISTRY}` - if [ -z "$PKG_NAMESPACE" ]; then - echo "PKG_NAMESPACE is not set. Please set the PKG_NAMESPACE environment variable." && exit 1 - fi - - cd $(git rev-parse --show-toplevel) || exit - - PROTOCOL="https" - if [[ "$REGISTRY" == *"localhost"* ]] || [[ "$REGISTRY" == *"127.0.0.1"* ]]; then - PROTOCOL="http" - fi - echo "Publishing to registry (${PROTOCOL}://${REGISTRY})..." - - output=$(warg publish release --registry ${PROTOCOL}://${REGISTRY} --name ${PKG_NAMESPACE}:{{.PKG_NAME}} --version {{.PKG_VERSION}} ./compiled/{{.COMPONENT_FILENAME}}) - echo "output: ${output}" - exit_code=$? - - # Check for specific error conditions in the output - if [[ $exit_code -ne 0 ]]; then - if [[ "$output" =~ "failed to prove inclusion" ]]; then - echo "Package uploaded to local registry successfully..." - elif [[ "$output" =~ "error sending request for url" ]]; then - echo "NOTE: Check to make sure you are running the registry locally" - echo "${output}" - else - echo "Unknown error occurred ${output}" - fi - fi diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 00000000..31e0ddc2 --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,26 @@ +{ + "$schema": "https://json.schemastore.org/tsconfig", + "display": "Default", + "compilerOptions": { + "target": "es2022", + "composite": false, + "declaration": true, + "declarationMap": true, + "esModuleInterop": true, + "forceConsistentCasingInFileNames": true, + "inlineSources": false, + "isolatedModules": true, + "module": "nodenext", + "moduleResolution": "nodenext", + "noUnusedLocals": false, + "noUnusedParameters": false, + "preserveWatchOutput": true, + "skipLibCheck": true, + "strict": true, + "resolveJsonModule": true, + "noEmit": true, + "allowImportingTsExtensions": true + }, + "include": ["deploy/**/*.ts"], + "exclude": ["node_modules"] +} diff --git a/wavs.toml b/wavs.toml index a97b3970..47ebdd1f 100644 --- a/wavs.toml +++ b/wavs.toml @@ -47,22 +47,22 @@ log_level = ["info", "wavs=debug"] # EVM chains [default.chains.evm.31337] # Local: anvil -ws_endpoint = "ws://localhost:8545" +ws_endpoints = ["ws://localhost:8545"] http_endpoint = "http://localhost:8545" poll_interval_ms = 7000 # [default.chains.evm.17000] # Testnet: holesky | https://holesky-faucet.pk910.de/ -# ws_endpoint = "wss://ethereum-holesky-rpc.publicnode.com" +# ws_endpoints = ["wss://ethereum-holesky-rpc.publicnode.com"] # http_endpoint = "https://ethereum-holesky-rpc.publicnode.com" # poll_interval_ms = 7000 # [default.chains.evm.11155111] # Testnet: Sepolia | https://sepolia-faucet.pk910.de/ -# ws_endpoint = "wss://ethereum-sepolia-rpc.publicnode.com" +# ws_endpoints = ["wss://ethereum-sepolia-rpc.publicnode.com"] # http_endpoint = "https://ethereum-sepolia-rpc.publicnode.com" # poll_interval_ms = 7000 # [default.chains.evm.8453] # Base L2 Mainnet | https://superbridge.app/base -# ws_endpoint = "wss://base-rpc.publicnode.com" +# ws_endpoints = ["wss://base-rpc.publicnode.com"] # http_endpoint = "https://base-rpc.publicnode.com" # poll_interval_ms = 7000 # event_channel_size = 100000 @@ -70,7 +70,7 @@ poll_interval_ms = 7000 # [default.chains.dev.holesky-fork] # type = "evm" # chain_id = "17000" -# ws_endpoint = "ws://localhost:8545" +# ws_endpoints = ["ws://localhost:8545"] # http_endpoint = "http://localhost:8545" # poll_interval_ms = 7000 @@ -94,7 +94,7 @@ cors_allowed_origins = [ ] # The port on which the server will listen. -# port = 8000 +port = 8041 # The host to serve on. Default is localhost # host = "localhost" @@ -103,7 +103,7 @@ cors_allowed_origins = [ # Example: # [wavs.chains.evm.local] # chain_id = "31337" -# ws_endpoint = "ws://localhost:8545" +# ws_endpoints = ["ws://localhost:8545"] # http_endpoint = "http://localhost:8545" # ---------------------------- @@ -113,7 +113,7 @@ cors_allowed_origins = [ # The directory to store the data. Default is "/var/wavs-cli" data = "~/wavs/cli" -# wavs_endpoint = "http://localhost:8000" +# wavs_endpoint = "http://localhost:8041" # ---------------------------- # Aggregator specific settings @@ -128,6 +128,8 @@ cors_allowed_origins = [ "http://127.0.0.1:*", ] +port = 8040 + # Optional bearer token to protect mutating HTTP endpoints # If set here or via env var `WAVS_AGGREGATOR_BEARER_TOKEN`, POST endpoints require `Authorization: Bearer ` # Generate with `openssl rand -hex 32` @@ -137,5 +139,5 @@ cors_allowed_origins = [ # Example: # [aggregator.chains.evm.local] # chain_id = "31337" -# ws_endpoint = "ws://localhost:8545" +# ws_endpoints = ["ws://localhost:8545"] # http_endpoint = "http://localhost:8545"