"use client"; import { handleServerActionResponse } from "@/lib/client-utils"; import { sendLoginname } from "@/lib/server/loginname"; import { clearSession, continueWithSession, ContinueWithSessionCommand } from "@/lib/server/session"; import { XCircleIcon } from "@heroicons/react/24/outline"; import * as Tooltip from "@radix-ui/react-tooltip"; import { Timestamp, timestampDate } from "@zitadel/client"; import { Session } from "@zitadel/proto/zitadel/session/v2/session_pb"; import moment from "moment"; import { useLocale } from "next-intl"; import { useRouter } from "next/navigation"; import React, { useState } from "react"; import { AutoSubmitForm } from "./auto-submit-form"; import { Avatar } from "./avatar"; import { Translated } from "./translated"; export function isSessionValid(session: Partial): { valid: boolean; verifiedAt?: Timestamp; } { const validPassword = session?.factors?.password?.verifiedAt; const validPasskey = session?.factors?.webAuthN?.verifiedAt; const validIDP = session?.factors?.intent?.verifiedAt; const stillValid = session.expirationDate ? timestampDate(session.expirationDate) > new Date() : true; const verifiedAt = validPassword || validPasskey || validIDP; const valid = !!((validPassword || validPasskey || validIDP) && stillValid); return { valid, verifiedAt }; } export function SessionItem({ session, reload, requestId }: { session: Session; reload: () => void; requestId?: string }) { const currentLocale = useLocale(); moment.locale(currentLocale === "zh" ? "zh-cn" : currentLocale); const [_loading, setLoading] = useState(false); async function clearSessionId(id: string) { setLoading(true); const response = await clearSession({ sessionId: id, }) .catch((error) => { setError(error.message); return; }) .finally(() => { setLoading(false); }); return response; } const { valid, verifiedAt } = isSessionValid(session); const [samlData, setSamlData] = useState<{ url: string; fields: Record } | null>(null); const [_error, setError] = useState(null); const router = useRouter(); return ( {samlData && } {valid && session.expirationDate && ( Expires {moment(timestampDate(session.expirationDate)).fromNow()} )} ); }