0d5c49c19a
Testing / test (push) Failing after 10m21s
- compat.py → compat/ package: auth.py (auth-field normalizers), commands.py (command-format shims), __init__.py (re-exports) - Add _auth_0_9_3 transformer: normalizes pubkey to lowercase before auth so clients < 0.9.3 sending uppercase hex are accepted - adapt_auth() now called before auth check in serve.py; command extracted after adapt_auth so future transformers can rename commands safely - serve.py: deduplicate _recv_exact (import from client), unify resp/resp_payload across Windows/Unix branches, require lowercase hex pubkey (re.fullmatch), reorganize imports, drop unused os import - client.py: move payload/framed construction inside branches (remote path no longer serializes JSON it never uses); fix _is_valid_key_spec operator precedence; import MAX_MSG_BYTES from version_manager - auth.py: narrow except clause (ValueError instead of bare Exception) - Bump version 0.9.2 → 0.9.3 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
38 lines
1.4 KiB
Python
38 lines
1.4 KiB
Python
import json
|
|
import click
|
|
from browser_cli.commands import _handle
|
|
from rich.console import Console
|
|
|
|
console = Console()
|
|
|
|
|
|
@click.group("storage")
|
|
def storage_group():
|
|
"""Read and write the page's localStorage / sessionStorage."""
|
|
|
|
|
|
@storage_group.command("get")
|
|
@click.argument("key", required=False)
|
|
@click.option("--type", "store_type", type=click.Choice(["local", "session"]), default="local", show_default=True)
|
|
@click.option("--tab", "tab_id", type=int, default=None, help="Tab ID (default: active tab)")
|
|
def storage_get(key, store_type, tab_id):
|
|
"""Get a localStorage KEY (or dump all keys if omitted)."""
|
|
result = _handle("storage.get", {"key": key, "type": store_type, "tabId": tab_id})
|
|
if result is None:
|
|
console.print("[dim]null[/dim]")
|
|
elif isinstance(result, dict):
|
|
console.print(json.dumps(result, indent=2))
|
|
else:
|
|
console.print(str(result))
|
|
|
|
|
|
@storage_group.command("set")
|
|
@click.argument("key")
|
|
@click.argument("value")
|
|
@click.option("--type", "store_type", type=click.Choice(["local", "session"]), default="local", show_default=True)
|
|
@click.option("--tab", "tab_id", type=int, default=None, help="Tab ID (default: active tab)")
|
|
def storage_set(key, value, store_type, tab_id):
|
|
"""Set localStorage KEY to VALUE."""
|
|
_handle("storage.set", {"key": key, "value": value, "type": store_type, "tabId": tab_id})
|
|
console.print(f"[green]Set[/green] {store_type}[{key!r}] = {value!r}")
|