type SignUpVerificationResult = { status: string | null; createdSessionId: string | null; }; type SignUpForEmailVerify = { missingFields?: readonly string[] | null; unverifiedFields?: readonly string[] | null; update: (params: Record) => Promise; }; export type EmailSignUpCompletion = | { status: "complete"; sessionId: string } | { status: "incomplete"; message: string }; export async function completeEmailSignUpAfterVerify( signUp: SignUpForEmailVerify, result: SignUpVerificationResult, ): Promise { if (result.status === "complete" && result.createdSessionId) { return { status: "complete", sessionId: result.createdSessionId }; } if (result.status === "missing_requirements") { const missingFields = signUp.missingFields ?? []; const unverifiedFields = signUp.unverifiedFields ?? []; const onlyPhoneMissing = missingFields.length === 1 && missingFields[0] === "phone_number" && unverifiedFields.length === 0; if (onlyPhoneMissing) { try { const updated = await signUp.update({}); if (updated.status === "complete" && updated.createdSessionId) { return { status: "complete", sessionId: updated.createdSessionId }; } } catch { // Fall through to generic incomplete message. } } return { status: "incomplete", message: "One more step required. Please complete your profile to continue.", }; } return { status: "incomplete", message: "Verification incomplete. Please try again." }; }