{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://raw.githubusercontent.com/api-evangelist/wget/main/json-schema/wget-download-request-schema.json",
  "title": "Wget Download Request",
  "description": "Schema representing a GNU Wget file download request configuration, covering URL, protocol options, authentication, output, and recursive download settings.",
  "type": "object",
  "properties": {
    "url": {
      "type": "string",
      "format": "uri",
      "description": "The URL of the resource to download. Supports http://, https://, ftp://, and ftps:// schemes."
    },
    "outputDocument": {
      "type": "string",
      "description": "Path to save the downloaded file. Use '-' to write to stdout."
    },
    "outputDirectory": {
      "type": "string",
      "description": "Directory in which to save downloaded files."
    },
    "recursive": {
      "type": "boolean",
      "default": false,
      "description": "Enable recursive downloading of linked pages and files."
    },
    "level": {
      "type": "integer",
      "minimum": 0,
      "default": 5,
      "description": "Maximum depth for recursive downloading. 0 means infinite."
    },
    "resume": {
      "type": "boolean",
      "default": false,
      "description": "Resume a partially downloaded file using HTTP REST and RANGE headers."
    },
    "mirror": {
      "type": "boolean",
      "default": false,
      "description": "Enable site mirroring: turns on recursion, timestamping, and infinite recursion depth."
    },
    "timestamping": {
      "type": "boolean",
      "default": false,
      "description": "Only download files newer than local copies using If-Modified-Since headers."
    },
    "noParentDirectories": {
      "type": "boolean",
      "default": false,
      "description": "Do not ascend to parent directories when retrieving recursively."
    },
    "convertLinks": {
      "type": "boolean",
      "default": false,
      "description": "Convert absolute links in downloaded HTML to relative links for local viewing."
    },
    "proxy": {
      "type": "object",
      "description": "HTTP/HTTPS proxy configuration.",
      "properties": {
        "httpProxy": {
          "type": "string",
          "format": "uri",
          "description": "HTTP proxy URL."
        },
        "httpsProxy": {
          "type": "string",
          "format": "uri",
          "description": "HTTPS proxy URL."
        },
        "noProxy": {
          "type": "string",
          "description": "Comma-separated list of hosts to bypass the proxy."
        }
      }
    },
    "authentication": {
      "type": "object",
      "description": "HTTP authentication credentials.",
      "properties": {
        "username": {
          "type": "string",
          "description": "HTTP authentication username."
        },
        "password": {
          "type": "string",
          "description": "HTTP authentication password."
        },
        "authScheme": {
          "type": "string",
          "enum": ["basic", "digest"],
          "description": "HTTP authentication scheme."
        }
      }
    },
    "cookies": {
      "type": "object",
      "description": "HTTP cookie settings.",
      "properties": {
        "loadCookies": {
          "type": "string",
          "description": "Path to a file containing cookies in Netscape format to load before download."
        },
        "saveCookies": {
          "type": "string",
          "description": "Path to a file to save cookies to after download."
        },
        "keepSessionCookies": {
          "type": "boolean",
          "default": false,
          "description": "Keep session (non-persistent) cookies when saving to file."
        }
      }
    },
    "retries": {
      "type": "integer",
      "minimum": 0,
      "default": 20,
      "description": "Number of retries on transient download failures. 0 means infinite."
    },
    "waitSeconds": {
      "type": "number",
      "minimum": 0,
      "default": 0,
      "description": "Seconds to wait between retrieval requests."
    },
    "timeout": {
      "type": "integer",
      "minimum": 0,
      "description": "Timeout in seconds for DNS, connect, and read operations."
    },
    "userAgent": {
      "type": "string",
      "description": "Custom User-Agent header string to send with HTTP requests."
    },
    "acceptList": {
      "type": "array",
      "items": { "type": "string" },
      "description": "List of file extensions or MIME types to accept during recursive download."
    },
    "rejectList": {
      "type": "array",
      "items": { "type": "string" },
      "description": "List of file extensions or MIME types to reject during recursive download."
    },
    "domains": {
      "type": "array",
      "items": { "type": "string" },
      "description": "Comma-separated list of allowed domains for recursive download."
    },
    "excludeDirs": {
      "type": "array",
      "items": { "type": "string" },
      "description": "List of directories to exclude from recursive download."
    },
    "background": {
      "type": "boolean",
      "default": false,
      "description": "Run Wget in background and write output to wget-log."
    },
    "quiet": {
      "type": "boolean",
      "default": false,
      "description": "Suppress all output."
    },
    "verbose": {
      "type": "boolean",
      "default": false,
      "description": "Enable verbose output with full server response headers."
    },
    "inputFile": {
      "type": "string",
      "description": "Path to a file containing URLs to download, one per line."
    }
  },
  "required": ["url"]
}
