/** The page signal: the host announces "who is signed in changed" (sign-in, * sign-out, workspace switch). Every gated poller re-checks on it. */ export declare const IDENTITY_CHANGED_EVENT = "vendo:identity-changed"; /** The one refusal that means "this visitor has no identity here". */ export declare function isForbiddenError(reason: unknown): boolean; export interface IdentityState { forbidden(): boolean; /** The current open-signal generation — bumped by every `clear()` and every * identity event. Capture it when a request BEGINS and pass it to `note`: * a refusal from before the latest open signal is stale evidence (greptile * on #1445: an in-flight warm's 403 landing after sign-in re-closed the * latch and took the composer away from a signed-in visitor). */ epoch(): number; /** Record a failed wire read; only a forbidden refusal moves the latch, and * only when `since` (the epoch at request start) is still current. */ note(reason: unknown, since?: number): void; /** A successful wire read (or the page signal) — the latch opens. */ clear(): void; subscribe(listener: () => void): () => void; } export declare function identityState(client: object): IdentityState; /** React view of the latch — the overlay's signed-out panel reads this. SSR * and the first client render answer false: the latch can only close after a * real wire read, so hydration always agrees with the server. */ export declare function useSignedOut(client: object): boolean;