export interface LoginFlags { /** `--endpoint ` — overrides AGENTLINT_URL/default. */ endpoint?: string; /** `--no-browser` — don't try to open the verification URI. */ noBrowser?: boolean; } export interface LoginProject { id: string; orgSlug: string; } export type LoginOutcome = { kind: "success"; token: string; project: LoginProject; } | { kind: "expired"; } | { kind: "denied"; } | { kind: "network-error"; reason: string; }; export type FetchFn = (url: string, init: { method: string; headers: Record; body: string; signal: AbortSignal; }) => Promise<{ ok: boolean; status: number; json: () => Promise; }>; export type SleepFn = (ms: number) => Promise; export type OpenBrowserFn = (url: string) => Promise; export type WriteTokenFileFn = (token: string) => Promise; export type GetEnvFn = (name: string) => string | undefined; export type LogFn = (line: string) => void; export interface LoginDeps { log: LogFn; fetchFn?: FetchFn; openBrowser?: OpenBrowserFn; sleep?: SleepFn; writeTokenFile?: WriteTokenFileFn; getEnv?: GetEnvFn; /** Override endpoint for tests; if provided, flags.endpoint still wins. */ endpoint?: string; /** Override CLI version embedded in the `client_name` payload. */ clientVersion?: string; /** Override the "now" clock for expiry math. */ now?: () => number; } /** * Run the device-flow login. Returns a discriminated outcome the caller * formats — `runLogin` never throws. */ export declare function runLogin(flags: LoginFlags, deps: LoginDeps): Promise; //# sourceMappingURL=index.d.ts.map