"""Storage and cookies namespaces: ``b.storage.*``, ``b.cookies.*``.""" from __future__ import annotations from browser_cli.sdk.base import Namespace class StorageNS(Namespace): """Read and write localStorage / sessionStorage.""" def get( self, key: str | None = None, *, type: str = "local", tab_id: int | None = None, ) -> str | dict | None: """Get a localStorage/sessionStorage entry (or all entries if key omitted).""" return self._c._cmd("storage.get", {"key": key, "type": type, "tabId": tab_id}) def set( self, key: str, value: str, *, type: str = "local", tab_id: int | None = None, ) -> None: """Set a localStorage/sessionStorage entry.""" self._c._cmd("storage.set", {"key": key, "value": value, "type": type, "tabId": tab_id}) class CookiesNS(Namespace): """List, get, and set cookies.""" def list( self, *, url: str | None = None, domain: str | None = None, name: str | None = None, ) -> list[dict]: """List cookies, optionally filtered by url, domain, or name.""" return self._c._cmd("cookies.list", {"url": url, "domain": domain, "name": name}) or [] def get(self, url: str, name: str) -> dict | None: """Get a single cookie by url and name.""" return self._c._cmd("cookies.get", {"url": url, "name": name}) def set( self, url: str, name: str, value: str, *, domain: str | None = None, path: str | None = None, secure: bool | None = None, http_only: bool | None = None, expiration_date: float | None = None, same_site: str | None = None, ) -> dict: """Set a cookie. Returns the created cookie dict.""" return self._c._cmd("cookies.set", { "url": url, "name": name, "value": value, "domain": domain, "path": path, "secure": secure, "httpOnly": http_only, "expirationDate": expiration_date, "sameSite": same_site, })