import * as v from "valibot"; export const startVerificationSchema = v.object({ userId: v.string(), sessionId: v.string(), }); export const verifyCodeSchema = v.object({ verificationToken: v.string(), code: v.string(), }); export const enable2FACodeSchema = v.object({ code: v.string(), }); export const disable2FASchema = v.object({ code: v.string(), }); export const twoFactorSchema = v.object({ id: v.string(), secret: v.string(), backupCodes: v.array(v.string()), userId: v.string(), createdAt: v.date(), updatedAt: v.date(), }); export type TwoFactor = v.InferOutput; export type TwoFaSessionStatus = "pending" | "verified" | "failed" | "expired"; export const twoFaSessionSchema = v.object({ id: v.string(), userId: v.string(), sessionId: v.string(), verificationToken: v.string(), codeUsed: v.optional(v.string()), status: v.picklist(["pending", "verified", "failed", "expired"]), attempts: v.number(), maxAttempts: v.number(), verifiedAt: v.optional(v.date()), expiresAt: v.date(), createdAt: v.date(), ipAddress: v.string(), userAgent: v.string(), }); export type TwoFaSession = v.InferOutput;