@cfxlabsinc/b2b-services
    Preparing search index...
    type DashboardSignInSecurity = {
        email: string;
        lastSignInAt: Date | null;
        login: SignInLogin;
        passkey: boolean;
        passkeyEnrolledAt: string | null;
        rejections: SecondFactorRejectionRow[];
        stuckInSetup: { lastRejectedAt: Date; rejections: number } | null;
        userId: UserId;
    }
    Index
    email: string
    lastSignInAt: Date | null
    login: SignInLogin
    passkey: boolean

    The login holds a passkey (WEB_AUTHN).

    passkeyEnrolledAt: string | null

    When their last sign-in recorded the passkey; null when none did.

    rejections: SecondFactorRejectionRow[]

    Newest first.

    stuckInSetup: { lastRejectedAt: Date; rejections: number } | null

    A confirmed password login with no second factor or passkey whose setup code was rejected within STUCK_WINDOW: every sign-in asks for setup again.

    userId: UserId