import type { BladeClient } from "./blade-client"; /** * 弹窗授权登录,与 Chrome 扩展共用同一套后端授权内核(见 server/routes/sdk_auth.py): * * 1. 弹窗打开 `GET /api/auth/sdk/authorize?client_origin=<本页 origin>&state=<随机值>` * 2. 用户点击「许可授权」→ 回调页把 `{ type: "blade-agent:sdk-auth", state, code }` * postMessage 定向发回本页(code 一次性、5 分钟有效) * 3. SDK 用 `POST /api/auth/sdk/token`(code + state + client_origin)换取 PAT, * 存储并热挂载(REST 与 Socket.IO 同时生效) */ export interface LoginOptions { /** 弹窗尺寸,默认 480x640。 */ width?: number; height?: number; /** 超时毫秒数,默认 5 分钟(与后端授权码有效期一致)。 */ timeoutMs?: number; } export interface LoginResult { token: string; user?: { id?: string; username?: string; display_name?: string; }; } export type TokenStorageMode = "local" | "memory"; export declare function readStoredToken(baseUrl: string): string | null; export declare function writeStoredToken(baseUrl: string, token: string | null, mode: TokenStorageMode): void; export declare function loginWithPopup(client: BladeClient, options?: LoginOptions): Promise;