# DO NOT EDIT MANUALLY
# This is an autogenerated file for types exported from the `rack` gem.
# Please instead update this file by running `bin/tapioca gem rack`.

# typed: true

module Rack
  class << self
    def release; end
    def version; end
  end
end

module Rack::Auth; end

class Rack::Auth::AbstractHandler
  def initialize(app, realm = T.unsafe(nil), &authenticator); end

  def realm; end
  def realm=(_arg0); end

  private

  def bad_request; end
  def unauthorized(www_authenticate = T.unsafe(nil)); end
end

class Rack::Auth::AbstractRequest
  def initialize(env); end

  def params; end
  def parts; end
  def provided?; end
  def request; end
  def scheme; end
  def valid?; end

  private

  def authorization_key; end
end

Rack::Auth::AbstractRequest::AUTHORIZATION_KEYS = T.let(T.unsafe(nil), Array)

class Rack::Auth::Basic < ::Rack::Auth::AbstractHandler
  def call(env); end

  private

  def challenge; end
  def valid?(auth); end
end

class Rack::Auth::Basic::Request < ::Rack::Auth::AbstractRequest
  def basic?; end
  def credentials; end
  def username; end
end

module Rack::Auth::Digest; end

class Rack::Auth::Digest::MD5 < ::Rack::Auth::AbstractHandler
  def initialize(app, realm = T.unsafe(nil), opaque = T.unsafe(nil), &authenticator); end

  def call(env); end
  def opaque; end
  def opaque=(_arg0); end
  def passwords_hashed=(_arg0); end
  def passwords_hashed?; end

  private

  def A1(auth, password); end
  def A2(auth); end
  def H(data); end
  def KD(secret, data); end
  def challenge(hash = T.unsafe(nil)); end
  def digest(auth, password); end
  def md5(data); end
  def params(hash = T.unsafe(nil)); end
  def valid?(auth); end
  def valid_digest?(auth); end
  def valid_nonce?(auth); end
  def valid_opaque?(auth); end
  def valid_qop?(auth); end
end

Rack::Auth::Digest::MD5::QOP = T.let(T.unsafe(nil), String)

class Rack::Auth::Digest::Nonce
  def initialize(timestamp = T.unsafe(nil), given_digest = T.unsafe(nil)); end

  def digest; end
  def fresh?; end
  def stale?; end
  def to_s; end
  def valid?; end

  class << self
    def parse(string); end
    def private_key; end
    def private_key=(_arg0); end
    def time_limit; end
    def time_limit=(_arg0); end
  end
end

class Rack::Auth::Digest::Params < ::Hash
  def initialize; end

  def [](k); end
  def []=(k, v); end
  def quote(str); end
  def to_s; end

  class << self
    def dequote(str); end
    def parse(str); end
    def split_header_value(str); end
  end
end

Rack::Auth::Digest::Params::UNQUOTED = T.let(T.unsafe(nil), Array)

class Rack::Auth::Digest::Request < ::Rack::Auth::AbstractRequest
  def correct_uri?; end
  def digest?; end
  def method; end
  def method_missing(sym, *args); end
  def nonce; end
  def params; end
  def respond_to?(sym, *_arg1); end
end

class Rack::BodyProxy
  def initialize(body, &block); end

  def close; end
  def closed?; end
  def method_missing(method_name, *args, &block); end

  private

  def respond_to_missing?(method_name, include_all = T.unsafe(nil)); end
end

class Rack::Builder
  def initialize(default_app = T.unsafe(nil), &block); end

  def call(env); end
  def freeze_app; end
  def map(path, &block); end
  def run(app); end
  def to_app; end
  def use(middleware, *args, &block); end
  def warmup(prc = T.unsafe(nil), &block); end

  private

  def generate_map(default_app, mapping); end

  class << self
    def app(default_app = T.unsafe(nil), &block); end
    def load_file(path, opts = T.unsafe(nil)); end
    def new_from_string(builder_script, file = T.unsafe(nil)); end
    def parse_file(config, opts = T.unsafe(nil)); end
  end
end

Rack::Builder::UTF_8_BOM = T.let(T.unsafe(nil), String)
Rack::CACHE_CONTROL = T.let(T.unsafe(nil), String)
Rack::CONTENT_LENGTH = T.let(T.unsafe(nil), String)
Rack::CONTENT_TYPE = T.let(T.unsafe(nil), String)

class Rack::Cascade
  def initialize(apps, cascade_for = T.unsafe(nil)); end

  def <<(app); end
  def add(app); end
  def apps; end
  def call(env); end
  def include?(app); end
end

Rack::Cascade::NotFound = T.let(T.unsafe(nil), Array)

class Rack::Chunked
  include ::Rack::Utils

  def initialize(app); end

  def call(env); end
  def chunkable_version?(ver); end
end

class Rack::Chunked::Body
  def initialize(body); end

  def close; end
  def each(&block); end

  private

  def yield_trailers; end
end

Rack::Chunked::Body::TAIL = T.let(T.unsafe(nil), String)
Rack::Chunked::Body::TERM = T.let(T.unsafe(nil), String)

class Rack::Chunked::TrailerBody < ::Rack::Chunked::Body
  private

  def yield_trailers; end
end

class Rack::CommonLogger
  def initialize(app, logger = T.unsafe(nil)); end

  def call(env); end

  private

  def extract_content_length(headers); end
  def log(env, status, header, began_at); end
end

Rack::CommonLogger::FORMAT = T.let(T.unsafe(nil), String)

class Rack::ConditionalGet
  def initialize(app); end

  def call(env); end

  private

  def etag_matches?(none_match, headers); end
  def fresh?(env, headers); end
  def modified_since?(modified_since, headers); end
  def to_rfc2822(since); end
end

class Rack::Config
  def initialize(app, &block); end

  def call(env); end
end

class Rack::ContentLength
  include ::Rack::Utils

  def initialize(app); end

  def call(env); end
end

class Rack::ContentType
  include ::Rack::Utils

  def initialize(app, content_type = T.unsafe(nil)); end

  def call(env); end
end

Rack::DELETE = T.let(T.unsafe(nil), String)

class Rack::Deflater
  def initialize(app, options = T.unsafe(nil)); end

  def call(env); end

  private

  def should_deflate?(env, status, headers, body); end
end

class Rack::Deflater::GzipStream
  def initialize(body, mtime, sync); end

  def close; end
  def each(&block); end
  def write(data); end
end

class Rack::Directory
  def initialize(root, app = T.unsafe(nil)); end

  def call(env); end
  def check_bad_request(path_info); end
  def check_forbidden(path_info); end
  def entity_not_found(path_info); end
  def filesize_format(int); end
  def get(env); end
  def list_directory(path_info, path, script_name); end
  def list_path(env, path, path_info, script_name); end
  def root; end
  def stat(path); end
end

Rack::Directory::DIR_FILE = T.let(T.unsafe(nil), String)
Rack::Directory::DIR_PAGE_FOOTER = T.let(T.unsafe(nil), String)
Rack::Directory::DIR_PAGE_HEADER = T.let(T.unsafe(nil), String)

class Rack::Directory::DirectoryBody < ::Struct
  def each; end

  private

  def DIR_FILE_escape(htmls); end
end

Rack::Directory::FILESIZE_FORMAT = T.let(T.unsafe(nil), Array)
Rack::ETAG = T.let(T.unsafe(nil), String)

class Rack::ETag
  def initialize(app, no_cache_control = T.unsafe(nil), cache_control = T.unsafe(nil)); end

  def call(env); end

  private

  def digest_body(body); end
  def etag_body?(body); end
  def etag_status?(status); end
  def skip_caching?(headers); end
end

Rack::ETag::DEFAULT_CACHE_CONTROL = T.let(T.unsafe(nil), String)
Rack::ETag::ETAG_STRING = T.let(T.unsafe(nil), String)
Rack::EXPIRES = T.let(T.unsafe(nil), String)

class Rack::Events
  def initialize(app, handlers); end

  def call(env); end

  private

  def make_request(env); end
  def make_response(status, headers, body); end
  def on_commit(request, response); end
  def on_error(request, response, e); end
  def on_finish(request, response); end
  def on_start(request, response); end
end

module Rack::Events::Abstract
  def on_commit(req, res); end
  def on_error(req, res, e); end
  def on_finish(req, res); end
  def on_send(req, res); end
  def on_start(req, res); end
end

class Rack::Events::BufferedResponse < ::Rack::Response::Raw
  def initialize(status, headers, body); end

  def body; end
  def to_a; end
end

class Rack::Events::EventedBodyProxy < ::Rack::BodyProxy
  def initialize(body, request, response, handlers, &block); end

  def each; end
  def request; end
  def response; end
end

Rack::File = Rack::Files

class Rack::Files
  def initialize(root, headers = T.unsafe(nil), default_mime = T.unsafe(nil)); end

  def call(env); end
  def get(env); end
  def root; end
  def serving(request, path); end

  private

  def fail(status, body, headers = T.unsafe(nil)); end
  def filesize(path); end
  def mime_type(path, default_mime); end

  class << self
    def method_added(name); end
  end
end

Rack::Files::ALLOWED_VERBS = T.let(T.unsafe(nil), Array)
Rack::Files::ALLOW_HEADER = T.let(T.unsafe(nil), String)

class Rack::Files::BaseIterator
  def initialize(path, ranges, options); end

  def bytesize; end
  def close; end
  def each; end
  def options; end
  def path; end
  def ranges; end

  private

  def each_range_part(file, range); end
  def multipart?; end
  def multipart_heading(range); end
end

class Rack::Files::Iterator < ::Rack::Files::BaseIterator
  def to_path; end
end

Rack::Files::MULTIPART_BOUNDARY = T.let(T.unsafe(nil), String)

class Rack::ForwardRequest < ::Exception
  def initialize(url, env = T.unsafe(nil)); end

  def env; end
  def url; end
end

Rack::GET = T.let(T.unsafe(nil), String)
Rack::HEAD = T.let(T.unsafe(nil), String)
Rack::HTTPS = T.let(T.unsafe(nil), String)
Rack::HTTP_COOKIE = T.let(T.unsafe(nil), String)
Rack::HTTP_HOST = T.let(T.unsafe(nil), String)
Rack::HTTP_PORT = T.let(T.unsafe(nil), String)
Rack::HTTP_VERSION = T.let(T.unsafe(nil), String)

module Rack::Handler
  class << self
    def default; end
    def get(server); end
    def pick(server_names); end
    def register(server, klass); end
    def try_require(prefix, const_name); end
  end
end

class Rack::Handler::CGI
  class << self
    def run(app, **options); end
    def send_body(body); end
    def send_headers(status, headers); end
    def serve(app); end
  end
end

Rack::Handler::SERVER_NAMES = T.let(T.unsafe(nil), Array)

class Rack::Handler::WEBrick < ::WEBrick::HTTPServlet::AbstractServlet
  def initialize(server, app); end

  def service(req, res); end

  class << self
    def run(app, **options); end
    def shutdown; end
    def valid_options; end
  end
end

class Rack::Head
  def initialize(app); end

  def call(env); end
end

Rack::LINK = T.let(T.unsafe(nil), String)

class Rack::Lint
  include ::Rack::Lint::Assertion

  def initialize(app); end

  def _call(env); end
  def call(env = T.unsafe(nil)); end
  def check_content_length(status, headers); end
  def check_content_type(status, headers); end
  def check_env(env); end
  def check_error(error); end
  def check_headers(header); end
  def check_hijack(env); end
  def check_hijack_response(headers, env); end
  def check_input(input); end
  def check_status(status); end
  def close; end
  def each; end
  def verify_content_length(bytes); end
end

module Rack::Lint::Assertion
  def assert(message); end
end

class Rack::Lint::ErrorWrapper
  include ::Rack::Lint::Assertion

  def initialize(error); end

  def close(*args); end
  def flush; end
  def puts(str); end
  def write(str); end
end

class Rack::Lint::HijackWrapper
  include ::Rack::Lint::Assertion
  extend ::Forwardable

  def initialize(io); end

  def close(*args, &block); end
  def close_read(*args, &block); end
  def close_write(*args, &block); end
  def closed?(*args, &block); end
  def flush(*args, &block); end
  def read(*args, &block); end
  def read_nonblock(*args, &block); end
  def write(*args, &block); end
  def write_nonblock(*args, &block); end
end

Rack::Lint::HijackWrapper::REQUIRED_METHODS = T.let(T.unsafe(nil), Array)

class Rack::Lint::InputWrapper
  include ::Rack::Lint::Assertion

  def initialize(input); end

  def close(*args); end
  def each(*args); end
  def gets(*args); end
  def read(*args); end
  def rewind(*args); end
end

class Rack::Lint::LintError < ::RuntimeError; end

class Rack::Lock
  def initialize(app, mutex = T.unsafe(nil)); end

  def call(env); end

  private

  def unlock; end
end

class Rack::Logger
  def initialize(app, level = T.unsafe(nil)); end

  def call(env); end
end

class Rack::MediaType
  class << self
    def params(content_type); end
    def type(content_type); end

    private

    def strip_doublequotes(str); end
  end
end

Rack::MediaType::SPLIT_PATTERN = T.let(T.unsafe(nil), Regexp)

class Rack::MethodOverride
  def initialize(app); end

  def call(env); end
  def method_override(env); end

  private

  def allowed_methods; end
  def method_override_param(req); end
end

Rack::MethodOverride::ALLOWED_METHODS = T.let(T.unsafe(nil), Array)
Rack::MethodOverride::HTTP_METHODS = T.let(T.unsafe(nil), Array)
Rack::MethodOverride::HTTP_METHOD_OVERRIDE_HEADER = T.let(T.unsafe(nil), String)
Rack::MethodOverride::METHOD_OVERRIDE_PARAM_KEY = T.let(T.unsafe(nil), String)

module Rack::Mime
  private

  def match?(value, matcher); end
  def mime_type(ext, fallback = T.unsafe(nil)); end

  class << self
    def match?(value, matcher); end
    def mime_type(ext, fallback = T.unsafe(nil)); end
  end
end

Rack::Mime::MIME_TYPES = T.let(T.unsafe(nil), Hash)

class Rack::MockRequest
  def initialize(app); end

  def delete(uri, opts = T.unsafe(nil)); end
  def get(uri, opts = T.unsafe(nil)); end
  def head(uri, opts = T.unsafe(nil)); end
  def options(uri, opts = T.unsafe(nil)); end
  def patch(uri, opts = T.unsafe(nil)); end
  def post(uri, opts = T.unsafe(nil)); end
  def put(uri, opts = T.unsafe(nil)); end
  def request(method = T.unsafe(nil), uri = T.unsafe(nil), opts = T.unsafe(nil)); end

  class << self
    def env_for(uri = T.unsafe(nil), opts = T.unsafe(nil)); end
    def parse_uri_rfc2396(uri); end
  end
end

Rack::MockRequest::DEFAULT_ENV = T.let(T.unsafe(nil), Hash)

class Rack::MockRequest::FatalWarner
  def flush; end
  def puts(warning); end
  def string; end
  def write(warning); end
end

class Rack::MockRequest::FatalWarning < ::RuntimeError; end

class Rack::MockResponse < ::Rack::Response
  def initialize(status, headers, body, errors = T.unsafe(nil)); end

  def =~(other); end
  def body; end
  def cookie(name); end
  def cookies; end
  def empty?; end
  def errors; end
  def errors=(_arg0); end
  def match(other); end
  def original_headers; end

  private

  def identify_cookie_attributes(cookie_filling); end
  def parse_cookies_from_header; end

  class << self
    def [](*_arg0); end
  end
end

module Rack::Multipart
  class << self
    def build_multipart(params, first = T.unsafe(nil)); end
    def extract_multipart(req, params = T.unsafe(nil)); end
    def parse_multipart(env, params = T.unsafe(nil)); end
  end
end

Rack::Multipart::ATTRIBUTE = T.let(T.unsafe(nil), Regexp)
Rack::Multipart::ATTRIBUTE_CHAR = T.let(T.unsafe(nil), Regexp)
Rack::Multipart::BROKEN_QUOTED = T.let(T.unsafe(nil), Regexp)
Rack::Multipart::BROKEN_UNQUOTED = T.let(T.unsafe(nil), Regexp)
Rack::Multipart::CONDISP = T.let(T.unsafe(nil), Regexp)
Rack::Multipart::DISPPARM = T.let(T.unsafe(nil), Regexp)
Rack::Multipart::EOL = T.let(T.unsafe(nil), String)
Rack::Multipart::EXTENDED_INITIAL_NAME = T.let(T.unsafe(nil), Regexp)
Rack::Multipart::EXTENDED_INITIAL_PARAMETER = T.let(T.unsafe(nil), Regexp)
Rack::Multipart::EXTENDED_INITIAL_VALUE = T.let(T.unsafe(nil), Regexp)
Rack::Multipart::EXTENDED_OTHER_NAME = T.let(T.unsafe(nil), Regexp)
Rack::Multipart::EXTENDED_OTHER_PARAMETER = T.let(T.unsafe(nil), Regexp)
Rack::Multipart::EXTENDED_OTHER_VALUE = T.let(T.unsafe(nil), Regexp)
Rack::Multipart::EXTENDED_PARAMETER = T.let(T.unsafe(nil), Regexp)

class Rack::Multipart::Generator
  def initialize(params, first = T.unsafe(nil)); end

  def dump; end

  private

  def content_for_other(file, name); end
  def content_for_tempfile(io, file, name); end
  def flattened_params; end
  def multipart?; end
end

Rack::Multipart::MULTIPART = T.let(T.unsafe(nil), Regexp)
Rack::Multipart::MULTIPART_BOUNDARY = T.let(T.unsafe(nil), String)
Rack::Multipart::MULTIPART_CONTENT_DISPOSITION = T.let(T.unsafe(nil), Regexp)
Rack::Multipart::MULTIPART_CONTENT_ID = T.let(T.unsafe(nil), Regexp)
Rack::Multipart::MULTIPART_CONTENT_TYPE = T.let(T.unsafe(nil), Regexp)
class Rack::Multipart::MultipartPartLimitError < ::Errno::EMFILE; end

class Rack::Multipart::Parser
  def initialize(boundary, tempfile, bufsize, query_parser); end

  def on_read(content); end
  def result; end
  def state; end

  private

  def consume_boundary; end
  def full_boundary; end
  def get_filename(head); end
  def handle_consume_token; end
  def handle_empty_content!(content); end
  def handle_fast_forward; end
  def handle_mime_body; end
  def handle_mime_head; end
  def run_parser; end
  def tag_multipart_encoding(filename, content_type, name, body); end

  class << self
    def parse(io, content_length, content_type, tmpfile, bufsize, qp); end
    def parse_boundary(content_type); end
  end
end

Rack::Multipart::Parser::BOUNDARY_REGEX = T.let(T.unsafe(nil), Regexp)
Rack::Multipart::Parser::BUFSIZE = T.let(T.unsafe(nil), Integer)

class Rack::Multipart::Parser::BoundedIO
  def initialize(io, content_length); end

  def read(size, outbuf = T.unsafe(nil)); end
  def rewind; end
end

Rack::Multipart::Parser::CHARSET = T.let(T.unsafe(nil), String)

class Rack::Multipart::Parser::Collector
  include ::Enumerable

  def initialize(tempfile); end

  def each; end
  def on_mime_body(mime_index, content); end
  def on_mime_finish(mime_index); end
  def on_mime_head(mime_index, head, filename, content_type, name); end

  private

  def check_open_files; end
end

class Rack::Multipart::Parser::Collector::BufferPart < ::Rack::Multipart::Parser::Collector::MimePart
  def close; end
  def file?; end
end

class Rack::Multipart::Parser::Collector::MimePart < ::Struct
  def get_data; end
end

class Rack::Multipart::Parser::Collector::TempfilePart < ::Rack::Multipart::Parser::Collector::MimePart
  def close; end
  def file?; end
end

Rack::Multipart::Parser::EMPTY = T.let(T.unsafe(nil), Rack::Multipart::Parser::MultipartInfo)

class Rack::Multipart::Parser::MultipartInfo < ::Struct
  def params; end
  def params=(_); end
  def tmp_files; end
  def tmp_files=(_); end

  class << self
    def [](*_arg0); end
    def inspect; end
    def members; end
    def new(*_arg0); end
  end
end

Rack::Multipart::Parser::TEMPFILE_FACTORY = T.let(T.unsafe(nil), Proc)
Rack::Multipart::Parser::TEXT_PLAIN = T.let(T.unsafe(nil), String)
Rack::Multipart::REGULAR_PARAMETER = T.let(T.unsafe(nil), Regexp)
Rack::Multipart::REGULAR_PARAMETER_NAME = T.let(T.unsafe(nil), Regexp)
Rack::Multipart::RFC2183 = T.let(T.unsafe(nil), Regexp)
Rack::Multipart::SECTION = T.let(T.unsafe(nil), Regexp)
Rack::Multipart::TOKEN = T.let(T.unsafe(nil), Regexp)

class Rack::Multipart::UploadedFile
  def initialize(filepath = T.unsafe(nil), ct = T.unsafe(nil), bin = T.unsafe(nil), path: T.unsafe(nil), content_type: T.unsafe(nil), binary: T.unsafe(nil), filename: T.unsafe(nil), io: T.unsafe(nil)); end

  def content_type; end
  def content_type=(_arg0); end
  def local_path; end
  def method_missing(method_name, *args, &block); end
  def original_filename; end
  def path; end
  def respond_to?(*args); end
end

Rack::Multipart::VALUE = T.let(T.unsafe(nil), Regexp)

class Rack::NullLogger
  def initialize(app); end

  def <<(msg); end
  def add(severity, message = T.unsafe(nil), progname = T.unsafe(nil), &block); end
  def call(env); end
  def close; end
  def datetime_format; end
  def datetime_format=(datetime_format); end
  def debug(progname = T.unsafe(nil), &block); end
  def debug?; end
  def error(progname = T.unsafe(nil), &block); end
  def error?; end
  def fatal(progname = T.unsafe(nil), &block); end
  def fatal?; end
  def formatter; end
  def formatter=(formatter); end
  def info(progname = T.unsafe(nil), &block); end
  def info?; end
  def level; end
  def level=(level); end
  def progname; end
  def progname=(progname); end
  def sev_threshold; end
  def sev_threshold=(sev_threshold); end
  def unknown(progname = T.unsafe(nil), &block); end
  def warn(progname = T.unsafe(nil), &block); end
  def warn?; end
end

Rack::OPTIONS = T.let(T.unsafe(nil), String)
Rack::PATCH = T.let(T.unsafe(nil), String)
Rack::PATH_INFO = T.let(T.unsafe(nil), String)
Rack::POST = T.let(T.unsafe(nil), String)
Rack::PUT = T.let(T.unsafe(nil), String)
Rack::QUERY_STRING = T.let(T.unsafe(nil), String)

class Rack::QueryParser
  def initialize(params_class, key_space_limit, param_depth_limit); end

  def key_space_limit; end
  def make_params; end
  def new_depth_limit(param_depth_limit); end
  def new_space_limit(key_space_limit); end
  def normalize_params(params, name, v, depth); end
  def param_depth_limit; end
  def parse_nested_query(qs, d = T.unsafe(nil)); end
  def parse_query(qs, d = T.unsafe(nil), &unescaper); end

  private

  def params_hash_has_key?(hash, key); end
  def params_hash_type?(obj); end
  def unescape(s); end

  class << self
    def make_default(key_space_limit, param_depth_limit); end
  end
end

Rack::QueryParser::COMMON_SEP = T.let(T.unsafe(nil), Hash)
Rack::QueryParser::DEFAULT_SEP = T.let(T.unsafe(nil), Regexp)
class Rack::QueryParser::InvalidParameterError < ::ArgumentError; end
class Rack::QueryParser::ParameterTypeError < ::TypeError; end

class Rack::QueryParser::Params
  def initialize(limit); end

  def [](key); end
  def []=(key, value); end
  def key?(key); end
  def to_h; end
  def to_params_hash; end
end

Rack::RACK_ERRORS = T.let(T.unsafe(nil), String)
Rack::RACK_HIJACK = T.let(T.unsafe(nil), String)
Rack::RACK_HIJACK_IO = T.let(T.unsafe(nil), String)
Rack::RACK_INPUT = T.let(T.unsafe(nil), String)
Rack::RACK_IS_HIJACK = T.let(T.unsafe(nil), String)
Rack::RACK_LOGGER = T.let(T.unsafe(nil), String)
Rack::RACK_METHODOVERRIDE_ORIGINAL_METHOD = T.let(T.unsafe(nil), String)
Rack::RACK_MULTIPART_BUFFER_SIZE = T.let(T.unsafe(nil), String)
Rack::RACK_MULTIPART_TEMPFILE_FACTORY = T.let(T.unsafe(nil), String)
Rack::RACK_MULTIPROCESS = T.let(T.unsafe(nil), String)
Rack::RACK_MULTITHREAD = T.let(T.unsafe(nil), String)
Rack::RACK_RECURSIVE_INCLUDE = T.let(T.unsafe(nil), String)
Rack::RACK_REQUEST_COOKIE_HASH = T.let(T.unsafe(nil), String)
Rack::RACK_REQUEST_COOKIE_STRING = T.let(T.unsafe(nil), String)
Rack::RACK_REQUEST_FORM_HASH = T.let(T.unsafe(nil), String)
Rack::RACK_REQUEST_FORM_INPUT = T.let(T.unsafe(nil), String)
Rack::RACK_REQUEST_FORM_VARS = T.let(T.unsafe(nil), String)
Rack::RACK_REQUEST_QUERY_HASH = T.let(T.unsafe(nil), String)
Rack::RACK_REQUEST_QUERY_STRING = T.let(T.unsafe(nil), String)
Rack::RACK_RUNONCE = T.let(T.unsafe(nil), String)
Rack::RACK_SESSION = T.let(T.unsafe(nil), String)
Rack::RACK_SESSION_OPTIONS = T.let(T.unsafe(nil), String)
Rack::RACK_SESSION_UNPACKED_COOKIE_DATA = T.let(T.unsafe(nil), String)
Rack::RACK_SHOWSTATUS_DETAIL = T.let(T.unsafe(nil), String)
Rack::RACK_TEMPFILES = T.let(T.unsafe(nil), String)
Rack::RACK_URL_SCHEME = T.let(T.unsafe(nil), String)
Rack::RACK_VERSION = T.let(T.unsafe(nil), String)
Rack::RELEASE = T.let(T.unsafe(nil), String)
Rack::REQUEST_METHOD = T.let(T.unsafe(nil), String)
Rack::REQUEST_PATH = T.let(T.unsafe(nil), String)

class Rack::Recursive
  def initialize(app); end

  def _call(env); end
  def call(env); end
  def include(env, path); end
end

class Rack::Reloader
  def initialize(app, cooldown = T.unsafe(nil), backend = T.unsafe(nil)); end

  def call(env); end
  def reload!(stderr = T.unsafe(nil)); end
  def safe_load(file, mtime, stderr = T.unsafe(nil)); end
end

module Rack::Reloader::Stat
  def figure_path(file, paths); end
  def rotation; end
  def safe_stat(file); end
end

class Rack::Request
  include ::Rack::Request::Env
  include ::Rack::Request::Helpers

  def initialize(env); end

  def delete_param(k); end
  def params; end
  def update_param(k, v); end

  class << self
    def ip_filter; end
    def ip_filter=(_arg0); end
  end
end

Rack::Request::ALLOWED_SCHEMES = T.let(T.unsafe(nil), Array)

module Rack::Request::Env
  def initialize(env); end

  def add_header(key, v); end
  def delete_header(name); end
  def each_header(&block); end
  def env; end
  def fetch_header(name, &block); end
  def get_header(name); end
  def has_header?(name); end
  def set_header(name, v); end

  private

  def initialize_copy(other); end
end

module Rack::Request::Helpers
  def GET; end
  def POST; end
  def [](key); end
  def []=(key, value); end
  def accept_encoding; end
  def accept_language; end
  def authority; end
  def base_url; end
  def body; end
  def content_charset; end
  def content_length; end
  def content_type; end
  def cookies; end
  def delete?; end
  def delete_param(k); end
  def form_data?; end
  def forwarded_authority; end
  def forwarded_for; end
  def forwarded_port; end
  def fullpath; end
  def get?; end
  def head?; end
  def host; end
  def host_authority; end
  def host_with_port(authority = T.unsafe(nil)); end
  def hostname; end
  def ip; end
  def link?; end
  def logger; end
  def media_type; end
  def media_type_params; end
  def multithread?; end
  def options?; end
  def params; end
  def parseable_data?; end
  def patch?; end
  def path; end
  def path_info; end
  def path_info=(s); end
  def port; end
  def post?; end
  def put?; end
  def query_string; end
  def referer; end
  def referrer; end
  def request_method; end
  def scheme; end
  def script_name; end
  def script_name=(s); end
  def server_authority; end
  def server_name; end
  def server_port; end
  def session; end
  def session_options; end
  def ssl?; end
  def trace?; end
  def trusted_proxy?(ip); end
  def unlink?; end
  def update_param(k, v); end
  def url; end
  def user_agent; end
  def values_at(*keys); end
  def xhr?; end

  private

  def allowed_scheme(header); end
  def default_session; end
  def extract_proto_header(header); end
  def forwarded_scheme; end
  def parse_http_accept_header(header); end
  def parse_multipart; end
  def parse_query(qs, d = T.unsafe(nil)); end
  def query_parser; end
  def reject_trusted_ip_addresses(ip_addresses); end
  def split_authority(authority); end
  def split_header(value); end
  def wrap_ipv6(host); end
end

Rack::Request::Helpers::AUTHORITY = T.let(T.unsafe(nil), Regexp)
Rack::Request::Helpers::DEFAULT_PORTS = T.let(T.unsafe(nil), Hash)
Rack::Request::Helpers::FORM_DATA_MEDIA_TYPES = T.let(T.unsafe(nil), Array)
Rack::Request::Helpers::HTTP_X_FORWARDED_FOR = T.let(T.unsafe(nil), String)
Rack::Request::Helpers::HTTP_X_FORWARDED_HOST = T.let(T.unsafe(nil), String)
Rack::Request::Helpers::HTTP_X_FORWARDED_PORT = T.let(T.unsafe(nil), String)
Rack::Request::Helpers::HTTP_X_FORWARDED_PROTO = T.let(T.unsafe(nil), String)
Rack::Request::Helpers::HTTP_X_FORWARDED_SCHEME = T.let(T.unsafe(nil), String)
Rack::Request::Helpers::HTTP_X_FORWARDED_SSL = T.let(T.unsafe(nil), String)
Rack::Request::Helpers::PARSEABLE_DATA_MEDIA_TYPES = T.let(T.unsafe(nil), Array)
Rack::Request::SCHEME_WHITELIST = T.let(T.unsafe(nil), Array)

class Rack::Response
  include ::Rack::Response::Helpers

  def initialize(body = T.unsafe(nil), status = T.unsafe(nil), headers = T.unsafe(nil)); end

  def [](key); end
  def []=(key, v); end
  def body; end
  def body=(_arg0); end
  def chunked?; end
  def close; end
  def delete_header(key); end
  def each(&callback); end
  def empty?; end
  def finish(&block); end
  def get_header(key); end
  def has_header?(key); end
  def header; end
  def headers; end
  def length; end
  def length=(_arg0); end
  def redirect(target, status = T.unsafe(nil)); end
  def set_header(key, v); end
  def status; end
  def status=(_arg0); end
  def to_a(&block); end
  def write(chunk); end

  class << self
    def [](status, headers, body); end
  end
end

Rack::Response::CHUNKED = T.let(T.unsafe(nil), String)

module Rack::Response::Helpers
  def accepted?; end
  def add_header(key, v); end
  def bad_request?; end
  def cache!(duration = T.unsafe(nil), directive: T.unsafe(nil)); end
  def cache_control; end
  def cache_control=(v); end
  def client_error?; end
  def content_length; end
  def content_type; end
  def content_type=(content_type); end
  def created?; end
  def delete_cookie(key, value = T.unsafe(nil)); end
  def do_not_cache!; end
  def etag; end
  def etag=(v); end
  def forbidden?; end
  def include?(header); end
  def informational?; end
  def invalid?; end
  def location; end
  def location=(location); end
  def media_type; end
  def media_type_params; end
  def method_not_allowed?; end
  def moved_permanently?; end
  def no_content?; end
  def not_found?; end
  def ok?; end
  def precondition_failed?; end
  def redirect?; end
  def redirection?; end
  def server_error?; end
  def set_cookie(key, value); end
  def set_cookie_header; end
  def set_cookie_header=(v); end
  def successful?; end
  def unauthorized?; end
  def unprocessable?; end

  protected

  def append(chunk); end
  def buffered_body!; end
end

class Rack::Response::Raw
  include ::Rack::Response::Helpers

  def initialize(status, headers); end

  def delete_header(key); end
  def get_header(key); end
  def has_header?(key); end
  def headers; end
  def set_header(key, v); end
  def status; end
  def status=(_arg0); end
end

Rack::Response::STATUS_WITH_NO_ENTITY_BODY = T.let(T.unsafe(nil), Hash)

class Rack::RewindableInput
  def initialize(io); end

  def close; end
  def each(&block); end
  def gets; end
  def read(*args); end
  def rewind; end

  private

  def filesystem_has_posix_semantics?; end
  def make_rewindable; end
end

class Rack::Runtime
  def initialize(app, name = T.unsafe(nil)); end

  def call(env); end
end

Rack::Runtime::FORMAT_STRING = T.let(T.unsafe(nil), String)
Rack::Runtime::HEADER_NAME = T.let(T.unsafe(nil), String)
Rack::SCRIPT_NAME = T.let(T.unsafe(nil), String)
Rack::SERVER_NAME = T.let(T.unsafe(nil), String)
Rack::SERVER_PORT = T.let(T.unsafe(nil), String)
Rack::SERVER_PROTOCOL = T.let(T.unsafe(nil), String)
Rack::SET_COOKIE = T.let(T.unsafe(nil), String)

class Rack::Sendfile
  def initialize(app, variation = T.unsafe(nil), mappings = T.unsafe(nil)); end

  def call(env); end

  private

  def map_accel_path(env, path); end
  def variation(env); end
end

class Rack::Server
  def initialize(options = T.unsafe(nil)); end

  def app; end
  def default_options; end
  def middleware; end
  def options; end
  def options=(_arg0); end
  def server; end
  def start(&block); end

  private

  def build_app(app); end
  def build_app_and_options_from_config; end
  def build_app_from_string; end
  def check_pid!; end
  def daemonize_app; end
  def handle_profiling(heapfile, profile_mode, filename); end
  def make_profile_name(filename); end
  def opt_parser; end
  def parse_options(args); end
  def pidfile_process_status; end
  def wrapped_app; end
  def write_pid; end

  class << self
    def default_middleware_by_environment; end
    def logging_middleware; end
    def middleware; end
    def start(options = T.unsafe(nil)); end
  end
end

class Rack::Server::Options
  def handler_opts(options); end
  def parse!(args); end
end

module Rack::Session; end
module Rack::Session::Abstract; end

class Rack::Session::Abstract::ID < ::Rack::Session::Abstract::Persisted
  def delete_session(req, sid, options); end
  def find_session(req, sid); end
  def write_session(req, sid, session, options); end

  class << self
    def inherited(klass); end
  end
end

class Rack::Session::Abstract::Persisted
  def initialize(app, options = T.unsafe(nil)); end

  def call(env); end
  def commit_session(req, res); end
  def context(env, app = T.unsafe(nil)); end
  def default_options; end
  def key; end
  def sid_secure; end

  private

  def commit_session?(req, session, options); end
  def cookie_value(data); end
  def current_session_id(req); end
  def delete_session(req, sid, options); end
  def extract_session_id(request); end
  def find_session(env, sid); end
  def force_options?(options); end
  def forced_session_update?(session, options); end
  def generate_sid(secure = T.unsafe(nil)); end
  def initialize_sid; end
  def load_session(req); end
  def loaded_session?(session); end
  def make_request(env); end
  def prepare_session(req); end
  def security_matches?(request, options); end
  def session_class; end
  def session_exists?(req); end
  def set_cookie(request, res, cookie); end
  def write_session(req, sid, session, options); end
end

Rack::Session::Abstract::Persisted::DEFAULT_OPTIONS = T.let(T.unsafe(nil), Hash)

class Rack::Session::Abstract::PersistedSecure < ::Rack::Session::Abstract::Persisted
  def extract_session_id(*_arg0); end
  def generate_sid(*_arg0); end

  private

  def cookie_value(data); end
  def session_class; end
end

class Rack::Session::Abstract::PersistedSecure::SecureSessionHash < ::Rack::Session::Abstract::SessionHash
  def [](key); end
end

class Rack::Session::Abstract::SessionHash
  include ::Enumerable

  def initialize(store, req); end

  def [](key); end
  def []=(key, value); end
  def clear; end
  def delete(key); end
  def destroy; end
  def dig(key, *keys); end
  def each(&block); end
  def empty?; end
  def exists?; end
  def fetch(key, default = T.unsafe(nil), &block); end
  def has_key?(key); end
  def id; end
  def id=(_arg0); end
  def include?(key); end
  def inspect; end
  def key?(key); end
  def keys; end
  def loaded?; end
  def merge!(hash); end
  def options; end
  def replace(hash); end
  def store(key, value); end
  def to_hash; end
  def update(hash); end
  def values; end

  private

  def load!; end
  def load_for_read!; end
  def load_for_write!; end
  def stringify_keys(other); end

  class << self
    def find(req); end
    def set(req, session); end
    def set_options(req, options); end
  end
end

Rack::Session::Abstract::SessionHash::Unspecified = T.let(T.unsafe(nil), Object)

class Rack::Session::Cookie < ::Rack::Session::Abstract::PersistedSecure
  def initialize(app, options = T.unsafe(nil)); end

  def coder; end

  private

  def delete_session(req, session_id, options); end
  def digest_match?(data, digest); end
  def extract_session_id(request); end
  def find_session(req, sid); end
  def generate_hmac(data, secret); end
  def persistent_session_id!(data, sid = T.unsafe(nil)); end
  def secure?(options); end
  def unpacked_cookie_data(request); end
  def write_session(req, session_id, session, options); end
end

class Rack::Session::Cookie::Base64
  def decode(str); end
  def encode(str); end
end

class Rack::Session::Cookie::Base64::JSON < ::Rack::Session::Cookie::Base64
  def decode(str); end
  def encode(obj); end
end

class Rack::Session::Cookie::Base64::Marshal < ::Rack::Session::Cookie::Base64
  def decode(str); end
  def encode(str); end
end

class Rack::Session::Cookie::Base64::ZipJSON < ::Rack::Session::Cookie::Base64
  def decode(str); end
  def encode(obj); end
end

class Rack::Session::Cookie::Identity
  def decode(str); end
  def encode(str); end
end

class Rack::Session::Cookie::SessionId
  def initialize(session_id, cookie_value); end

  def cookie_value; end
end

class Rack::Session::Pool < ::Rack::Session::Abstract::PersistedSecure
  def initialize(app, options = T.unsafe(nil)); end

  def delete_session(req, session_id, options); end
  def find_session(req, sid); end
  def generate_sid; end
  def mutex; end
  def pool; end
  def with_lock(req); end
  def write_session(req, session_id, new_session, options); end

  private

  def get_session_with_fallback(sid); end
end

Rack::Session::Pool::DEFAULT_OPTIONS = T.let(T.unsafe(nil), Hash)

class Rack::Session::SessionId
  def initialize(public_id); end

  def cookie_value; end
  def empty?; end
  def inspect; end
  def private_id; end
  def public_id; end
  def to_s; end

  private

  def hash_sid(sid); end
end

Rack::Session::SessionId::ID_VERSION = T.let(T.unsafe(nil), Integer)

class Rack::ShowExceptions
  def initialize(app); end

  def call(env); end
  def dump_exception(exception); end
  def h(obj); end
  def prefers_plaintext?(env); end
  def pretty(env, exception); end
  def template; end

  private

  def accepts_html?(env); end
end

Rack::ShowExceptions::CONTEXT = T.let(T.unsafe(nil), Integer)
Rack::ShowExceptions::TEMPLATE = T.let(T.unsafe(nil), ERB)

class Rack::ShowStatus
  def initialize(app); end

  def call(env); end
  def h(obj); end
end

Rack::ShowStatus::TEMPLATE = T.let(T.unsafe(nil), String)

class Rack::Static
  def initialize(app, options = T.unsafe(nil)); end

  def add_index_root?(path); end
  def applicable_rules(path); end
  def call(env); end
  def can_serve(path); end
  def overwrite_file_path(path); end
  def route_file(path); end
end

Rack::TRACE = T.let(T.unsafe(nil), String)
Rack::TRANSFER_ENCODING = T.let(T.unsafe(nil), String)

class Rack::TempfileReaper
  def initialize(app); end

  def call(env); end
end

Rack::UNLINK = T.let(T.unsafe(nil), String)

class Rack::URLMap
  def initialize(map = T.unsafe(nil)); end

  def call(env); end
  def remap(map); end

  private

  def casecmp?(v1, v2); end
end

module Rack::Utils
  private

  def add_cookie_to_header(header, key, value); end
  def add_remove_cookie_to_header(header, key, value = T.unsafe(nil)); end
  def best_q_match(q_value_header, available_mimes); end
  def build_nested_query(value, prefix = T.unsafe(nil)); end
  def build_query(params); end
  def byte_ranges(env, size); end
  def clean_path_info(path_info); end
  def clock_time; end
  def delete_cookie_header!(header, key, value = T.unsafe(nil)); end
  def escape(s); end
  def escape_html(string); end
  def escape_path(s); end
  def get_byte_ranges(http_range, size); end
  def make_delete_cookie_header(header, key, value); end
  def parse_cookies(env); end
  def parse_cookies_header(header); end
  def parse_nested_query(qs, d = T.unsafe(nil)); end
  def parse_query(qs, d = T.unsafe(nil), &unescaper); end
  def q_values(q_value_header); end
  def rfc2109(time); end
  def rfc2822(time); end
  def secure_compare(a, b); end
  def select_best_encoding(available_encodings, accept_encoding); end
  def set_cookie_header!(header, key, value); end
  def status_code(status); end
  def unescape(s, encoding = T.unsafe(nil)); end
  def unescape_path(s); end
  def valid_path?(path); end

  class << self
    def add_cookie_to_header(header, key, value); end
    def add_remove_cookie_to_header(header, key, value = T.unsafe(nil)); end
    def best_q_match(q_value_header, available_mimes); end
    def build_nested_query(value, prefix = T.unsafe(nil)); end
    def build_query(params); end
    def byte_ranges(env, size); end
    def clean_path_info(path_info); end
    def clock_time; end
    def default_query_parser; end
    def default_query_parser=(_arg0); end
    def delete_cookie_header!(header, key, value = T.unsafe(nil)); end
    def escape(s); end
    def escape_html(string); end
    def escape_path(s); end
    def get_byte_ranges(http_range, size); end
    def key_space_limit; end
    def key_space_limit=(v); end
    def make_delete_cookie_header(header, key, value); end
    def multipart_part_limit; end
    def multipart_part_limit=(_arg0); end
    def param_depth_limit; end
    def param_depth_limit=(v); end
    def parse_cookies(env); end
    def parse_cookies_header(header); end
    def parse_nested_query(qs, d = T.unsafe(nil)); end
    def parse_query(qs, d = T.unsafe(nil), &unescaper); end
    def q_values(q_value_header); end
    def rfc2109(time); end
    def rfc2822(time); end
    def secure_compare(a, b); end
    def select_best_encoding(available_encodings, accept_encoding); end
    def set_cookie_header!(header, key, value); end
    def status_code(status); end
    def unescape(s, encoding = T.unsafe(nil)); end
    def unescape_path(s); end
    def valid_path?(path); end
  end
end

Rack::Utils::COMMON_SEP = T.let(T.unsafe(nil), Hash)

class Rack::Utils::Context
  def initialize(app_f, app_r); end

  def app; end
  def call(env); end
  def context(env, app = T.unsafe(nil)); end
  def for; end
  def recontext(app); end
end

Rack::Utils::DEFAULT_SEP = T.let(T.unsafe(nil), Regexp)
Rack::Utils::ESCAPE_HTML = T.let(T.unsafe(nil), Hash)
Rack::Utils::ESCAPE_HTML_PATTERN = T.let(T.unsafe(nil), Regexp)
Rack::Utils::HTTP_STATUS_CODES = T.let(T.unsafe(nil), Hash)

class Rack::Utils::HeaderHash < ::Hash
  def initialize(hash = T.unsafe(nil)); end

  def [](k); end
  def []=(k, v); end
  def clear; end
  def delete(k); end
  def each; end
  def has_key?(k); end
  def include?(k); end
  def key?(k); end
  def member?(k); end
  def merge(other); end
  def merge!(other); end
  def replace(other); end
  def to_hash; end

  protected

  def names; end

  private

  def initialize_copy(other); end

  class << self
    def [](headers); end
  end
end

Rack::Utils::InvalidParameterError = Rack::QueryParser::InvalidParameterError
Rack::Utils::KeySpaceConstrainedParams = Rack::QueryParser::Params
Rack::Utils::NULL_BYTE = T.let(T.unsafe(nil), String)
Rack::Utils::PATH_SEPS = T.let(T.unsafe(nil), Regexp)
Rack::Utils::ParameterTypeError = Rack::QueryParser::ParameterTypeError
Rack::Utils::STATUS_WITH_NO_ENTITY_BODY = T.let(T.unsafe(nil), Hash)
Rack::Utils::SYMBOL_TO_STATUS_CODE = T.let(T.unsafe(nil), Hash)
Rack::VERSION = T.let(T.unsafe(nil), Array)

class WEBrick::HTTPResponse
  def rack; end
  def rack=(_arg0); end
  def setup_header; end
end
