{
  "classes": [
    {
      "constants": [],
      "types": [
        {
          "lua_type": "type HttpResponse = {\n    status: number,\n    reason: string,\n    headers: { [string]: string },\n    trailers: { [string]: string },\n    body: string,\n    httpVersion: string,\n}",
          "name": "HttpResponse",
          "tags": [],
          "source": {
            "path": "",
            "line": 12
          },
          "fields": [
            {
              "lua_type": "status: number",
              "name": "status",
              "desc": ""
            },
            {
              "lua_type": "reason: string",
              "name": "reason",
              "desc": ""
            },
            {
              "lua_type": "headers: { [string]: string }",
              "name": "headers",
              "desc": ""
            },
            {
              "lua_type": "trailers: { [string]: string }",
              "name": "trailers",
              "desc": ""
            },
            {
              "lua_type": "body: string",
              "name": "body",
              "desc": ""
            },
            {
              "lua_type": "httpVersion: string",
              "name": "httpVersion",
              "desc": ""
            }
          ],
          "desc": "A completed HTTP response returned by [[HttpConnection.getResponse]]\nand the convenience request functions.\n\nWhen a chunked response includes trailer headers, they are exposed on\n`trailers` after the body has been fully consumed.\n"
        },
        {
          "lua_type": "type TimeoutOptions = {\n    connect: number?,\n    read: number?,\n    write: number?,\n}",
          "name": "TimeoutOptions",
          "tags": [],
          "source": {
            "path": "",
            "line": 29
          },
          "fields": [
            {
              "lua_type": "connect: number?",
              "name": "connect",
              "desc": ""
            },
            {
              "lua_type": "read: number?",
              "name": "read",
              "desc": ""
            },
            {
              "lua_type": "write: number?",
              "name": "write",
              "desc": ""
            }
          ],
          "desc": "Per-phase timeout settings for an [[HttpConnection]].\n\nUse this when you want different limits for establishing the\nconnection, sending request bytes, and waiting for response bytes.\n"
        }
      ],
      "name": "@eryx/http/HttpConnection",
      "tags": [],
      "functions": [],
      "properties": [],
      "source": {
        "path": "",
        "line": 0
      },
      "desc": ""
    },
    {
      "is_primary_export": false,
      "source": {
        "path": "",
        "line": 69
      },
      "tags": [],
      "properties": [
        {
          "tags": [],
          "lua_type": "host: string",
          "name": "host",
          "desc": ""
        },
        {
          "tags": [],
          "lua_type": "port: number",
          "name": "port",
          "desc": ""
        },
        {
          "tags": [],
          "lua_type": "_timeouts: TimeoutOptions",
          "name": "_timeouts",
          "desc": ""
        },
        {
          "tags": [],
          "lua_type": "_scheme: string",
          "name": "_scheme",
          "desc": ""
        },
        {
          "tags": [],
          "lua_type": "_verifySsl: boolean",
          "name": "_verifySsl",
          "desc": ""
        },
        {
          "tags": [],
          "lua_type": "_sock: any?",
          "name": "_sock",
          "desc": ""
        },
        {
          "tags": [],
          "lua_type": "_leftover: string",
          "name": "_leftover",
          "desc": ""
        },
        {
          "tags": [],
          "lua_type": "_lastRequestMethod: string?",
          "name": "_lastRequestMethod",
          "desc": ""
        },
        {
          "tags": [],
          "lua_type": "_prefetchedResponse: HttpResponseInternal?",
          "name": "_prefetchedResponse",
          "desc": ""
        },
        {
          "tags": [],
          "lua_type": "_activeResponseStream: HttpResponseStream?",
          "name": "_activeResponseStream",
          "desc": ""
        },
        {
          "tags": [],
          "lua_type": "_appliedTimeout: number?",
          "name": "_appliedTimeout",
          "desc": ""
        }
      ],
      "desc": "A persistent HTTP connection to a single host and port.\n\nSupports both HTTP and HTTPS. Multiple requests can be sent over\nthe same connection when the server supports keep-alive.\n\n```luau\nlocal conn = http.HttpConnection.new(\"example.com\", 443, nil, \"https\")\nconn:request(\"GET\", \"/\")\nlocal resp = conn:getResponse()\nprint(resp.status, resp.body)\nconn:close()\n```\n",
      "name": "HttpConnection",
      "functions": [
        {
          "source": {
            "path": "",
            "line": 109
          },
          "is_method": false,
          "signature": "HttpConnection.new(\n    host: string,  -- The remote hostname or IP address.\n    port: number?,  -- The remote port number. Defaults to 80 for HTTP, 443 for HTTPS.\n    timeout: (number | TimeoutOptions)?,  -- Either one timeout in seconds for every phase, or a table with `connect`, `read`, and `write` timeouts.\n    scheme: string?,  -- `\"http\"` (default) or `\"https\"`.\n    verifySsl: boolean?  -- Whether to verify the server's TLS certificate. Defaults to `true`.\n) → (\n    HttpConnection  -- A new connection object. \n)",
          "owner": "HttpConnection",
          "desc": "Creates a new [[HttpConnection]] to the given host.\n\nThe connection is not established until the first request is sent\n(or [[HttpConnection.connect]] is called explicitly).\n",
          "tags": [],
          "name": "new",
          "return_str": "HttpConnection",
          "function_type": "Function",
          "returns": [
            {
              "lua_type": "HttpConnection",
              "desc": "A new connection object. "
            }
          ],
          "params": [
            {
              "lua_type": "string",
              "name": "host",
              "desc": "The remote hostname or IP address."
            },
            {
              "lua_type": "number?",
              "name": "port",
              "desc": "The remote port number. Defaults to 80 for HTTP, 443 for HTTPS."
            },
            {
              "lua_type": "(number | TimeoutOptions)?",
              "name": "timeout",
              "desc": "Either one timeout in seconds for every phase, or a table with `connect`, `read`, and `write` timeouts."
            },
            {
              "lua_type": "string?",
              "name": "scheme",
              "desc": "`\"http\"` (default) or `\"https\"`."
            },
            {
              "lua_type": "boolean?",
              "name": "verifySsl",
              "desc": "Whether to verify the server's TLS certificate. Defaults to `true`."
            }
          ]
        },
        {
          "source": {
            "path": "",
            "line": 158
          },
          "is_method": true,
          "signature": "HttpConnection:_applyTimeout(phase: \"connect\" | \"read\" | \"write\") → ()",
          "owner": "HttpConnection",
          "desc": "",
          "tags": [],
          "name": "_applyTimeout",
          "return_str": "",
          "function_type": "Method",
          "returns": [],
          "params": [
            {
              "lua_type": "\"connect\" | \"read\" | \"write\"",
              "name": "phase",
              "desc": ""
            }
          ]
        },
        {
          "source": {
            "path": "",
            "line": 182
          },
          "is_method": true,
          "signature": "HttpConnection:setTimeouts(\n    timeout: (number | TimeoutOptions)?  -- New timeout settings in seconds. \n) → ()",
          "owner": "HttpConnection",
          "desc": "Updates the per-phase timeouts used by this connection.\n\nYou may pass a single number to apply the same timeout to connect,\nread, and write phases, or a table with explicit `connect`, `read`,\nand `write` values. Passing `nil` clears the timeout configuration.\n",
          "tags": [],
          "name": "setTimeouts",
          "return_str": "",
          "function_type": "Method",
          "returns": [],
          "params": [
            {
              "lua_type": "(number | TimeoutOptions)?",
              "name": "timeout",
              "desc": "New timeout settings in seconds. "
            }
          ]
        },
        {
          "source": {
            "path": "",
            "line": 195
          },
          "is_method": true,
          "signature": "HttpConnection:connect() → ()",
          "owner": "HttpConnection",
          "desc": "Opens the underlying TCP (and optionally TLS) connection.\n\nThis is called automatically on the first request, so you rarely\nneed to call it directly.\n",
          "tags": [],
          "name": "connect",
          "return_str": "",
          "function_type": "Method",
          "returns": [],
          "params": []
        },
        {
          "source": {
            "path": "",
            "line": 225
          },
          "is_method": true,
          "signature": "HttpConnection:close() → ()",
          "owner": "HttpConnection",
          "desc": "Closes the connection and releases associated resources.\n\nIt is safe to call `close` multiple times.\n",
          "tags": [],
          "name": "close",
          "return_str": "",
          "function_type": "Method",
          "returns": [],
          "params": []
        },
        {
          "source": {
            "path": "",
            "line": 256
          },
          "is_method": true,
          "signature": "HttpConnection:request(\n    method: string,  -- The HTTP method (e.g. `\"GET\"`, `\"POST\"`).\n    path: string,  -- The request path (e.g. `\"/api/users\"`).\n    headers: { [string]: string }?,  -- Optional table of request headers.\n    body: string?,  -- Optional request body string.\n    expectContinue: boolean?,  -- When true, waits for `100 Continue` before sending a non-empty request body.\n    bodyStream: UploadBodyStream?,  -- Optional incremental request-body reader.\n    bodyLength: number?  -- Optional exact byte size for `bodyStream`. \n) → ()",
          "owner": "HttpConnection",
          "desc": "Sends an HTTP request over this connection.\n\nAutomatically connects if not already connected. Sets `Host` and\n`Content-Length` headers when not explicitly provided.\n",
          "tags": [],
          "name": "request",
          "return_str": "",
          "function_type": "Method",
          "returns": [],
          "params": [
            {
              "lua_type": "string",
              "name": "method",
              "desc": "The HTTP method (e.g. `\"GET\"`, `\"POST\"`)."
            },
            {
              "lua_type": "string",
              "name": "path",
              "desc": "The request path (e.g. `\"/api/users\"`)."
            },
            {
              "lua_type": "{ [string]: string }?",
              "name": "headers",
              "desc": "Optional table of request headers."
            },
            {
              "lua_type": "string?",
              "name": "body",
              "desc": "Optional request body string."
            },
            {
              "lua_type": "boolean?",
              "name": "expectContinue",
              "desc": "When true, waits for `100 Continue` before sending a non-empty request body."
            },
            {
              "lua_type": "UploadBodyStream?",
              "name": "bodyStream",
              "desc": "Optional incremental request-body reader."
            },
            {
              "lua_type": "number?",
              "name": "bodyLength",
              "desc": "Optional exact byte size for `bodyStream`. "
            }
          ]
        },
        {
          "source": {
            "path": "",
            "line": 415
          },
          "is_method": true,
          "signature": "HttpConnection:_recvUntil(delim: string) → (string, string)",
          "owner": "HttpConnection",
          "desc": "read from socket, respecting leftover from previous over-reads",
          "tags": [
            "Private"
          ],
          "name": "_recvUntil",
          "return_str": "(string, string)",
          "function_type": "Method",
          "returns": [
            {
              "lua_type": "string",
              "desc": ""
            },
            {
              "lua_type": "string",
              "desc": ""
            }
          ],
          "params": [
            {
              "lua_type": "string",
              "name": "delim",
              "desc": ""
            }
          ]
        },
        {
          "source": {
            "path": "",
            "line": 454
          },
          "is_method": true,
          "signature": "HttpConnection:_recvExact(n: number) → string",
          "owner": "HttpConnection",
          "desc": "read exactly n bytes, respecting leftover",
          "tags": [
            "Private"
          ],
          "name": "_recvExact",
          "return_str": "string",
          "function_type": "Method",
          "returns": [
            {
              "lua_type": "string",
              "desc": ""
            }
          ],
          "params": [
            {
              "lua_type": "number",
              "name": "n",
              "desc": ""
            }
          ]
        },
        {
          "source": {
            "path": "",
            "line": 485
          },
          "is_method": true,
          "signature": "HttpConnection:_recvAll() → string",
          "owner": "HttpConnection",
          "desc": "read until connection closes, respecting leftover",
          "tags": [
            "Private"
          ],
          "name": "_recvAll",
          "return_str": "string",
          "function_type": "Method",
          "returns": [
            {
              "lua_type": "string",
              "desc": ""
            }
          ],
          "params": []
        },
        {
          "source": {
            "path": "",
            "line": 513
          },
          "is_method": true,
          "signature": "HttpConnection:_recvSome(n: number) → string",
          "owner": "HttpConnection",
          "desc": "read up to n bytes, respecting leftover",
          "tags": [
            "Private"
          ],
          "name": "_recvSome",
          "return_str": "string",
          "function_type": "Method",
          "returns": [
            {
              "lua_type": "string",
              "desc": ""
            }
          ],
          "params": [
            {
              "lua_type": "number",
              "name": "n",
              "desc": ""
            }
          ]
        },
        {
          "source": {
            "path": "",
            "line": 609
          },
          "is_method": true,
          "signature": "HttpConnection:_recvChunked() → (string, { [string]: string })",
          "owner": "HttpConnection",
          "desc": "read chunked transfer-encoding body",
          "tags": [
            "Private"
          ],
          "name": "_recvChunked",
          "return_str": "(string, { [string]: string })",
          "function_type": "Method",
          "returns": [
            {
              "lua_type": "string",
              "desc": ""
            },
            {
              "lua_type": "{ [string]: string }",
              "desc": ""
            }
          ],
          "params": []
        },
        {
          "source": {
            "path": "",
            "line": 811
          },
          "is_method": true,
          "signature": "HttpConnection:_openResponse(skipInformational: boolean) → HttpResponseStream",
          "owner": "HttpConnection",
          "desc": "",
          "tags": [],
          "name": "_openResponse",
          "return_str": "HttpResponseStream",
          "function_type": "Method",
          "returns": [
            {
              "lua_type": "HttpResponseStream",
              "desc": ""
            }
          ],
          "params": [
            {
              "lua_type": "boolean",
              "name": "skipInformational",
              "desc": ""
            }
          ]
        },
        {
          "source": {
            "path": "",
            "line": 931
          },
          "is_method": true,
          "signature": "HttpConnection:_readResponse(skipInformational: boolean) → HttpResponseInternal",
          "owner": "HttpConnection",
          "desc": "",
          "tags": [],
          "name": "_readResponse",
          "return_str": "HttpResponseInternal",
          "function_type": "Method",
          "returns": [
            {
              "lua_type": "HttpResponseInternal",
              "desc": ""
            }
          ],
          "params": [
            {
              "lua_type": "boolean",
              "name": "skipInformational",
              "desc": ""
            }
          ]
        },
        {
          "source": {
            "path": "",
            "line": 944
          },
          "is_method": true,
          "signature": "HttpConnection:getResponse() → HttpResponse",
          "owner": "HttpConnection",
          "desc": "",
          "tags": [],
          "name": "getResponse",
          "return_str": "HttpResponse",
          "function_type": "Method",
          "returns": [
            {
              "lua_type": "HttpResponse",
              "desc": ""
            }
          ],
          "params": []
        },
        {
          "source": {
            "path": "",
            "line": 953
          },
          "is_method": true,
          "signature": "HttpConnection:getResponseStream() → HttpResponseStream",
          "owner": "HttpConnection",
          "desc": "",
          "tags": [],
          "name": "getResponseStream",
          "return_str": "HttpResponseStream",
          "function_type": "Method",
          "returns": [
            {
              "lua_type": "HttpResponseStream",
              "desc": ""
            }
          ],
          "params": []
        }
      ],
      "metamethods": [],
      "types": []
    },
    {
      "is_primary_export": false,
      "source": {
        "path": "",
        "line": 88
      },
      "tags": [],
      "properties": [
        {
          "tags": [],
          "lua_type": "status: number",
          "name": "status",
          "desc": ""
        },
        {
          "tags": [],
          "lua_type": "reason: string",
          "name": "reason",
          "desc": ""
        },
        {
          "tags": [],
          "lua_type": "headers: { [string]: string }",
          "name": "headers",
          "desc": ""
        },
        {
          "tags": [],
          "lua_type": "trailers: { [string]: string }",
          "name": "trailers",
          "desc": ""
        },
        {
          "tags": [],
          "lua_type": "httpVersion: string",
          "name": "httpVersion",
          "desc": ""
        },
        {
          "tags": [],
          "lua_type": "_connection: HttpConnection?",
          "name": "_connection",
          "desc": ""
        },
        {
          "tags": [],
          "lua_type": "_closed: boolean",
          "name": "_closed",
          "desc": ""
        },
        {
          "tags": [],
          "lua_type": "_mode: \"buffer\" | \"length\" | \"chunked\" | \"close\"",
          "name": "_mode",
          "desc": ""
        },
        {
          "tags": [],
          "lua_type": "_keepAlive: boolean",
          "name": "_keepAlive",
          "desc": ""
        },
        {
          "tags": [],
          "lua_type": "_closeConnectionOnFinish: boolean",
          "name": "_closeConnectionOnFinish",
          "desc": ""
        },
        {
          "tags": [],
          "lua_type": "_remaining: number",
          "name": "_remaining",
          "desc": ""
        },
        {
          "tags": [],
          "lua_type": "_chunkRemaining: number",
          "name": "_chunkRemaining",
          "desc": ""
        },
        {
          "tags": [],
          "lua_type": "_buffer: string",
          "name": "_buffer",
          "desc": ""
        },
        {
          "tags": [],
          "lua_type": "_bufferOffset: number",
          "name": "_bufferOffset",
          "desc": ""
        }
      ],
      "desc": "",
      "name": "HttpResponseStream",
      "functions": [
        {
          "source": {
            "path": "",
            "line": 650
          },
          "is_method": true,
          "signature": "HttpResponseStream:_finalize() → ()",
          "owner": "HttpResponseStream",
          "desc": "",
          "tags": [],
          "name": "_finalize",
          "return_str": "",
          "function_type": "Method",
          "returns": [],
          "params": []
        },
        {
          "source": {
            "path": "",
            "line": 667
          },
          "is_method": true,
          "signature": "HttpResponseStream:_readChunkHeader() → ()",
          "owner": "HttpResponseStream",
          "desc": "",
          "tags": [],
          "name": "_readChunkHeader",
          "return_str": "",
          "function_type": "Method",
          "returns": [],
          "params": []
        },
        {
          "source": {
            "path": "",
            "line": 703
          },
          "is_method": true,
          "signature": "HttpResponseStream:read(count: number?) → string?",
          "owner": "HttpResponseStream",
          "desc": "",
          "tags": [],
          "name": "read",
          "return_str": "string?",
          "function_type": "Method",
          "returns": [
            {
              "lua_type": "string?",
              "desc": ""
            }
          ],
          "params": [
            {
              "lua_type": "number?",
              "name": "count",
              "desc": ""
            }
          ]
        },
        {
          "source": {
            "path": "",
            "line": 785
          },
          "is_method": true,
          "signature": "HttpResponseStream:readAll() → string",
          "owner": "HttpResponseStream",
          "desc": "",
          "tags": [],
          "name": "readAll",
          "return_str": "string",
          "function_type": "Method",
          "returns": [
            {
              "lua_type": "string",
              "desc": ""
            }
          ],
          "params": []
        },
        {
          "source": {
            "path": "",
            "line": 797
          },
          "is_method": true,
          "signature": "HttpResponseStream:close() → ()",
          "owner": "HttpResponseStream",
          "desc": "",
          "tags": [],
          "name": "close",
          "return_str": "",
          "function_type": "Method",
          "returns": [],
          "params": []
        }
      ],
      "metamethods": [],
      "types": []
    },
    {
      "is_primary_export": false,
      "source": {
        "path": "",
        "line": 90
      },
      "tags": [],
      "properties": [
        {
          "tags": [],
          "lua_type": "close: (((self: UploadBodyStream) → ()))?",
          "name": "close",
          "desc": ""
        }
      ],
      "desc": "",
      "name": "UploadBodyStream",
      "functions": [
        {
          "source": {
            "path": "",
            "line": 91
          },
          "is_method": true,
          "signature": "UploadBodyStream:read(size: number?) → string?",
          "desc": "",
          "tags": [],
          "name": "read",
          "return_str": "string?",
          "function_type": "Method",
          "returns": [
            {
              "lua_type": "string?",
              "desc": ""
            }
          ],
          "params": [
            {
              "lua_type": "number?",
              "name": "size",
              "desc": ""
            }
          ]
        }
      ],
      "metamethods": [],
      "types": []
    }
  ]
}