--- /dev/null
+from typing import Any, Dict
+
+UNICODE_ASCII_CHARACTER_SET: str
+CLIENT_ID_CHARACTER_SET: str
+SANITIZE_PATTERN: Any
+INVALID_HEX_PATTERN: Any
+always_safe: str
+log: Any
+
+def quote(s, safe: bytes = ...): ...
+def unquote(s): ...
+def urlencode(params): ...
+def encode_params_utf8(params): ...
+def decode_params_utf8(params): ...
+
+urlencoded: Any
+
+def urldecode(query): ...
+def extract_params(raw): ...
+def generate_nonce(): ...
+def generate_timestamp(): ...
+def generate_token(length: int = ..., chars=...): ...
+def generate_signed_token(private_pem, request): ...
+def verify_signed_token(public_pem, token): ...
+def generate_client_id(length: int = ..., chars=...): ...
+def add_params_to_qs(query, params): ...
+def add_params_to_uri(uri, params, fragment: bool = ...): ...
+def safe_string_equals(a, b): ...
+def to_unicode(data, encoding: str = ...): ...
+
+class CaseInsensitiveDict(Dict[Any, Any]):
+ proxy: Any
+ def __init__(self, data) -> None: ...
+ def __contains__(self, k): ...
+ def __delitem__(self, k) -> None: ...
+ def __getitem__(self, k): ...
+ def get(self, k, default: Any | None = ...): ...
+ def __setitem__(self, k, v) -> None: ...
+ def update(self, *args, **kwargs) -> None: ...
+
+class Request:
+ uri: Any
+ http_method: Any
+ headers: Any
+ body: Any
+ decoded_body: Any
+ oauth_params: Any
+ validator_log: Any
+ def __init__(self, uri, http_method: str = ..., body: Any | None = ..., headers: Any | None = ..., encoding: str = ...): ...
+ def __getattr__(self, name): ...
+ @property
+ def uri_query(self): ...
+ @property
+ def uri_query_params(self): ...
+ @property
+ def duplicate_params(self): ...