{
  "$schema": "https://farmslot.io/schemas/recipe-v1.schema.json",
  "title": "Swap release Max quote",
  "description": "Selects an exact live pair, uses the visible Max balance, and proves the resulting quote without submission.",
  "paramsSchema": {
    "type": "object",
    "additionalProperties": false,
    "properties": {
      "source_symbol": { "type": "string" },
      "destination_symbol": { "type": "string" },
      "source_chain": { "type": "string" },
      "destination_chain": { "type": "string" },
      "source_query": { "type": "string" },
      "destination_query": { "type": "string" },
      "source_asset_id": { "type": "string", "default": "" },
      "destination_asset_id": { "type": "string", "default": "" },
      "timeout_ms": { "type": "integer", "minimum": 1000, "default": 120000 }
    },
    "required": ["source_symbol", "destination_symbol", "source_chain", "destination_chain", "source_query", "destination_query"]
  },
  "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": "use-max"
      },
      "use-max": {
        "action": "metamask.swap_bridge.set_max_amount",
        "wait_for_quote": true,
        "timeout_ms": "{{params.timeout_ms}}",
        "intent": "Use the visible available source balance",
        "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 Max quote remain visible",
        "next": "capture-quote"
      },
      "capture-quote": {
        "action": "ui.screenshot",
        "path": "screenshots/swap-max-quote.png",
        "label": "Swap Max quote",
        "intent": "Preserve reviewer-visible proof of the Max quote",
        "next": "done"
      },
      "done": { "action": "end", "status": "pass" }
    }
  }
}
