import { z } from "zod"; class authApi { // /auth/registration public ZRegistration = { req: z.object({ email: z.string().email(), }), res: z.object({ code: z.enum(["pinIsSent", "pinIsNotSent", "alreadyExists"]), transactionId: z.string().uuid().optional(), }), }; // /auth/confirm-registration public ZConfirmRegistration = { req: z.object({ password: z.string(), name: z.string(), transactionId: z.string().uuid(), confirmPin: z.number().min(1000).max(9999), }), res: z.discriminatedUnion("code", [ z.object({ code: z.literal("registered"), userData: z.object({ accessToken: z.string(), refreshToken: z.string(), email: z.string().email(), userId: z.string().uuid(), }), }), z.object({ code: z.literal("pinIsWrong"), triesRemained: z.number() }), z.object({ code: z.literal("pinIsRotten") }), z.object({ code: z.literal("tooManyTries") }), ]), }; // /auth/login public ZLogin = { req: z.object({ email: z.string().email(), password: z.string(), }), res: z.object({ code: z.enum(["userNotFound", "passIsWrong", "tooManyTries", "success"]), triesRemained: z.number().optional(), userData: z .object({ accessToken: z.string(), refreshToken: z.string(), email: z.string().email(), userId: z.string().uuid(), }) .optional(), }), }; // /auth/logout public ZLogout = { res: z.object({ code: z.enum(["success"]), }), }; // /auth/logout-all-devices public ZLogoutAllDevices = { res: z.object({ code: z.enum(["success"]), }), }; // /auth/refresh public ZRefresh = { res: z.object({ code: z.enum(["success"]), userData: z.object({ accessToken: z.string(), refreshToken: z.string(), email: z.string().email(), userId: z.string().uuid(), }), }), }; } export const AuthApi = new authApi();