SYMBOL INDEX (98 symbols across 16 files) FILE: demo.py function record_session (line 28) | def record_session(zapi_client: ZAPI, url: str, output_path: Path) -> None: function analyze_har_file_with_filter (line 44) | def analyze_har_file_with_filter(source_path: Path) -> Optional[Path]: function pick_upload_file (line 63) | def pick_upload_file(original_path: Path, filtered_path: Optional[Path])... function main (line 80) | def main() -> int: FILE: examples/async_usage.py function main (line 13) | async def main(): FILE: examples/basic_usage.py function main (line 11) | def main(): FILE: examples/langchain/demo.py function demo_zapi_langchain (line 5) | def demo_zapi_langchain(): FILE: examples/llm_keys_usage.py function main (line 13) | def main(): FILE: examples/simple_usage.py function main (line 8) | def main(): FILE: zapi/auth.py function apply_localstorage_auth (line 12) | async def apply_localstorage_auth(page: Page, token: str, key: str = "au... function apply_cookie_auth (line 24) | async def apply_cookie_auth(page: Page, token: str, name: str = "authTok... function apply_header_auth (line 45) | async def apply_header_auth(context: BrowserContext, token: str) -> None: function get_auth_handler (line 56) | def get_auth_handler(auth_mode: AuthMode): FILE: zapi/cli.py function cli (line 13) | def cli(): function capture (line 22) | def capture(url, output, headless): function analyze (line 50) | def analyze(har_file): function upload (line 65) | def upload(har_file): FILE: zapi/core.py class ZAPI (line 25) | class ZAPI: method __init__ (line 33) | def __init__( method _fetch_auth_token (line 94) | def _fetch_auth_token(self) -> tuple[str, str]: method _validate_token_and_extract_org_id (line 157) | async def _validate_token_and_extract_org_id(self, token: str) -> str: method set_llm_key (line 206) | def set_llm_key(self, provider: str, api_key: str, model_name: str) ->... method get_llm_provider (line 240) | def get_llm_provider(self) -> Optional[str]: method get_llm_model_name (line 249) | def get_llm_model_name(self) -> Optional[str]: method get_encrypted_llm_key (line 258) | def get_encrypted_llm_key(self) -> Optional[str]: method get_decrypted_llm_key (line 267) | def get_decrypted_llm_key(self) -> Optional[str]: method has_llm_key (line 282) | def has_llm_key(self) -> bool: method get_zapi_tools (line 291) | def get_zapi_tools(self) -> list[Callable]: method launch_browser (line 306) | def launch_browser( method upload_har (line 385) | def upload_har(self, har_file: str): method get_documented_apis (line 468) | def get_documented_apis(self, page: int = 1, page_size: int = 10): FILE: zapi/encryption.py class LLMKeyEncryption (line 12) | class LLMKeyEncryption: method __init__ (line 22) | def __init__(self, org_id: str): method _derive_key (line 37) | def _derive_key(self, salt: bytes) -> bytes: method encrypt_key (line 56) | def encrypt_key(self, api_key: str) -> str: method decrypt_key (line 103) | def decrypt_key(self, encrypted_data: str) -> str: function encrypt_llm_key (line 164) | def encrypt_llm_key(org_id: str, api_key: str) -> str: function decrypt_llm_key (line 179) | def decrypt_llm_key(org_id: str, encrypted_data: str) -> str: function secure_compare_key (line 194) | def secure_compare_key(provider1: str, key1: str, provider2: str, key2: ... FILE: zapi/exceptions.py class ZAPIError (line 4) | class ZAPIError(Exception): class ZAPIAuthenticationError (line 10) | class ZAPIAuthenticationError(ZAPIError): class ZAPIValidationError (line 16) | class ZAPIValidationError(ZAPIError): class ZAPINetworkError (line 22) | class ZAPINetworkError(ZAPIError): FILE: zapi/har_processing.py class HarStats (line 12) | class HarStats: class HarProcessingError (line 25) | class HarProcessingError(Exception): class HarProcessor (line 31) | class HarProcessor: method __init__ (line 75) | def __init__(self, har_file_path: str): method load_and_process (line 114) | def load_and_process(self) -> HarStats: method _process_entry (line 189) | def _process_entry(self, entry: dict[str, Any]) -> bool: method _extract_url_from_entry (line 264) | def _extract_url_from_entry(self, entry: dict[str, Any]) -> str: method _extract_response_content (line 271) | def _extract_response_content(self, entry: dict[str, Any]) -> dict[str... method save_filtered_har (line 278) | def save_filtered_har(self, output_path: str) -> str: method get_summary_report (line 329) | def get_summary_report(self, stats: HarStats) -> str: function analyze_har_file (line 379) | def analyze_har_file( FILE: zapi/integrations/langchain/tool.py class ZAPILangchainTool (line 17) | class ZAPILangchainTool: method __init__ (line 35) | def __init__(self, zapi_instance: ZAPI, headers_file: Optional[str] = ... method create_tools (line 39) | def create_tools(self) -> list[Callable]: method _create_tool (line 57) | def _create_tool(self, api_data: dict[str, Any]) -> Callable: method _call_api (line 80) | def _call_api(self, api_id: str, api_data: dict[str, Any], params: dic... FILE: zapi/providers.py class LLMProvider (line 16) | class LLMProvider(Enum): method get_all_providers (line 31) | def get_all_providers(cls) -> set[str]: method is_valid_provider (line 36) | def is_valid_provider(cls, provider: str) -> bool: function validate_llm_keys (line 41) | def validate_llm_keys(llm_keys: dict[str, str]) -> dict[str, str]: function _validate_key_format (line 86) | def _validate_key_format(provider: str, api_key: str) -> None: function get_provider_display_name (line 132) | def get_provider_display_name(provider: str) -> str: function is_primary_provider (line 154) | def is_primary_provider(provider: str) -> bool: function get_supported_providers_info (line 167) | def get_supported_providers_info() -> dict[str, dict[str, str]]: FILE: zapi/session.py function _run_async (line 22) | def _run_async(coro): class BrowserSessionError (line 38) | class BrowserSessionError(Exception): class BrowserNavigationError (line 44) | class BrowserNavigationError(BrowserSessionError): class BrowserInitializationError (line 50) | class BrowserInitializationError(BrowserSessionError): class BrowserSession (line 56) | class BrowserSession: method __init__ (line 64) | def __init__(self, auth_token: str, headless: bool = True, **playwrigh... method _initialize (line 83) | async def _initialize(self, initial_url: Optional[str] = None, wait_un... method _navigate_async (line 186) | async def _navigate_async(self, url: str, wait_until: str = "load") ->... method navigate (line 242) | def navigate(self, url: str, wait_until: str = "load") -> None: method _click_async (line 256) | async def _click_async(self, selector: str, **kwargs) -> None: method click (line 276) | def click(self, selector: str, **kwargs) -> None: method _fill_async (line 286) | async def _fill_async(self, selector: str, value: str, **kwargs) -> None: method fill (line 306) | def fill(self, selector: str, value: str, **kwargs) -> None: method _wait_for_async (line 317) | async def _wait_for_async(self, selector: Optional[str] = None, timeou... method wait_for (line 345) | def wait_for(self, selector: Optional[str] = None, timeout: Optional[f... method _dump_logs_async (line 355) | async def _dump_logs_async(self, filepath: Union[str, Path]) -> None: method dump_logs (line 415) | def dump_logs(self, filepath: Union[str, Path]) -> None: method _close_async (line 424) | async def _close_async(self) -> None: method close (line 444) | def close(self) -> None: method __enter__ (line 450) | def __enter__(self): method __exit__ (line 454) | def __exit__(self, exc_type, exc_val, exc_tb): method __aenter__ (line 459) | async def __aenter__(self): method __aexit__ (line 463) | async def __aexit__(self, exc_type, exc_val, exc_tb): FILE: zapi/utils.py function load_security_headers (line 17) | def load_security_headers(headers_file: Optional[str] = None) -> dict[st... function load_adopt_credentials (line 54) | def load_adopt_credentials() -> tuple[Optional[str], Optional[str]]: function load_llm_credentials (line 84) | def load_llm_credentials() -> tuple[Optional[str], Optional[str], Option... function load_zapi_credentials (line 116) | def load_zapi_credentials() -> tuple[str, str, str, str, str]: function set_llm_api_key_env (line 154) | def set_llm_api_key_env(provider: str, api_key: str) -> None: function _safe_get (line 175) | def _safe_get(obj: Any, *keys: str, default: Any = None) -> Any: function _extract_token_metadata (line 200) | def _extract_token_metadata(response: Any) -> Optional[str]: function interactive_chat (line 242) | def interactive_chat(agent: Any, single_shot: bool = False, debug_mode: ...