{
  "$schema": "https://farmslot.io/schemas/recipe-v1.schema.json",
  "title": "Swap release quote",
  "description": "Selects an exact live Swap pair, enters a capped amount, and proves a destination quote through visible product UI without submitting a transaction.",
  "paramsSchema": {
    "type": "object",
    "additionalProperties": false,
    "properties": {
      "source_symbol": { "type": "string", "default": "ETH" },
      "destination_symbol": { "type": "string", "default": "WETH" },
      "source_chain": { "type": "string", "default": "eip155:1" },
      "destination_chain": { "type": "string", "default": "eip155:1" },
      "source_query": { "type": "string", "default": "ETH" },
      "destination_query": { "type": "string", "default": "WETH" },
      "source_asset_id": { "type": "string", "default": "" },
      "destination_asset_id": { "type": "string", "default": "" },
      "amount": { "type": "number", "minimum": 0.00000001, "default": 0.0001 },
      "timeout_ms": { "type": "integer", "minimum": 1000, "default": 60000 }
    }
  },
  "workflow": {
    "entry": "open-swap",
    "nodes": {
      "open-swap": {
        "action": "ui.navigate",
        "page": "swap",
        "timeout_ms": "{{params.timeout_ms}}",
        "intent": "Open Swap through visible product navigation",
        "next": "select-assets"
      },
      "select-assets": {
        "action": "metamask.swap_bridge.select_assets",
        "source_symbol": "{{params.source_symbol}}",
        "destination_symbol": "{{params.destination_symbol}}",
        "source_chain": "{{params.source_chain}}",
        "destination_chain": "{{params.destination_chain}}",
        "source_query": "{{params.source_query}}",
        "destination_query": "{{params.destination_query}}",
        "source_asset_id": "{{params.source_asset_id}}",
        "destination_asset_id": "{{params.destination_asset_id}}",
        "timeout_ms": "{{params.timeout_ms}}",
        "intent": "Select the exact source and destination assets",
        "next": "enter-amount"
      },
      "enter-amount": {
        "action": "metamask.swap_bridge.set_amount",
        "amount": "{{params.amount}}",
        "wait_for_quote": true,
        "timeout_ms": "{{params.timeout_ms}}",
        "intent": "Enter the capped amount and wait for a live quote",
        "next": "assert-quote"
      },
      "assert-quote": {
        "action": "metamask.swap_bridge.read_visible_state",
        "source_symbol": "{{params.source_symbol}}",
        "destination_symbol": "{{params.destination_symbol}}",
        "require_amount_inputs": true,
        "require_settings": true,
        "require_quote": true,
        "intent": "Prove the selected pair and quoted destination amount remain visible",
        "next": "capture-quote"
      },
      "capture-quote": {
        "action": "ui.screenshot",
        "path": "screenshots/swap-quote.png",
        "label": "Swap release quote",
        "intent": "Preserve reviewer-visible proof of the live quote",
        "next": "done"
      },
      "done": { "action": "end", "status": "pass" }
    }
  }
}
