/**
 * Wire-shape for the identity route response. Mirrors the hub's
 * `ChatIdentityResponse` (in `app/api/auth/identity/route.ts`) —
 * kept in sync there. Lib-side declaration so the chat panel can
 * compile without depending on hub-internal types.
 */
export interface ChatIdentityResponse {
    authTier: 'session' | 'bearer-act-as' | 'anon';
    source: string | null;
    attachmentsEnabled: boolean;
    /** Server-resolved display identity. `null` for anon. Read by the
     *  chat panel for the greeting first-name — embedders DON'T pass
     *  user info into the runtime; server is the single source of truth
     *  so the displayed name always matches the auth tier.
     *
     *  All sub-fields are optional and may be `null`. Consumers MUST
     *  treat missing values as "use empty string and skip the affected
     *  UI line" — never substitute a placeholder. */
    user: {
        name: string | null;
        email: string | null;
        /** Optional first name supplied by the identity webservice.
         *  When set, the chat greeting renders `Hey ${firstName}, I'm Mingo`.
         *  When absent (null/undefined/empty), the greeting falls back to
         *  the no-name variant `Hey, I'm Mingo`. */
        firstName?: string | null;
        /** Optional last name. Currently unused by chat UI; surfaced for
         *  embedders that want to display the full name elsewhere. */
        lastName?: string | null;
        /** Optional avatar URL. Validated as https:// server-side. */
        avatarUrl?: string | null;
    } | null;
}
/** Shape returned by the hook. NEVER throws — loading + error fall
 *  back to anon defaults so consumers can always render synchronously. */
export interface ChatIdentitySurface extends ChatIdentityResponse {
    /** True while the query is in-flight on first mount; consumers that
     *  show a skeleton spinner can read this. */
    isLoading: boolean;
}
export declare function useChatIdentity(): ChatIdentitySurface;
//# sourceMappingURL=use-chat-identity.d.ts.map