import { z } from "zod"; import { AuthError } from "@supabase/supabase-js"; const timestampSchema = z.union([z.string(), z.date()]).nullable(); // const AppMetadataSchema = z // .object({ // provider: z.string(), // providers: z.array(z.string()), // }) // .nullable(); // const UserMetadataSchema = z.object({ // email_verified: z.boolean().optional(), // }); // const IdentityDataSchema = z.object({ // email: z.string().email(), // email_verified: z.boolean(), // phone_verified: z.boolean(), // sub: z.string(), // }); // const IdentitySchema = z.object({ // identity_id: z.string(), // id: z.string(), // user_id: z.string(), // identity_data: IdentityDataSchema, // provider: z.string(), // last_sign_in_at: timestampSchema, // created_at: timestampSchema, // updated_at: timestampSchema, // email: z.string().email(), // }); export const UserSchema = z.object({ id: z.string(), role: z.string().optional(), email: z.string().email().optional(), email_confirmed_at: z.union([z.string(), z.date()]).nullable().optional(), password_hash: z.string().nullable().optional(), invited_at: z.union([z.string(), z.date()]).nullable().optional(), phone: z.string().nullable().optional(), confirmed_at: z.union([z.string(), z.date()]).nullable().optional(), recovery_sent_at: z.union([z.string(), z.date()]).nullable().optional(), last_sign_in_at: z.union([z.string(), z.date()]).nullable().optional(), created_at: z.union([z.string(), z.date()]).nullable().optional(), updated_at: z.union([z.string(), z.date()]).nullable().optional(), is_anonymous: z.boolean().optional(), banned_until: z.union([z.string(), z.date()]).nullable().optional(), profile: z .object({ id: z.string().optional(), user_id: z.string(), avatar: z.string().nullable().optional(), username: z.string().nullable().optional(), first_name: z.string().nullable().optional(), last_name: z.string().nullable().optional(), bio: z.string().nullable().optional(), address: z.any().nullable().optional(), birth_date: z.union([z.string(), z.date()]).nullable().optional(), }) .nullable() .optional(), }); export type User = z.infer; export const ProfileSchema = z.object({ id: z.string(), user_id: z.string(), avatar: z.string().optional(), username: z.string().optional(), first_name: z.string().optional(), last_name: z.string().optional(), bio: z.string(), address: z.string().optional(), birth_date: z.string().optional(), }); export type Profile = z.infer; export const CreateUserParamsSchema = z.object({ email: z.string().email(), password: z.string(), phone: z.string().optional(), user_metadata: z.record(z.any()).optional(), email_confirm: z.boolean().optional(), }); export type CreateUserParams = z.infer; export const UpdateUserParamsSchema = z.object({ email: z.string().email().optional(), email_confirmed_at: z.boolean().optional(), password_hash: z.string().optional(), role: z.enum(["user", "staff", "admin"]).optional(), phone: z.string().optional(), phone_confirmed_at: z.boolean().optional(), invited_at: z.union([z.string(), z.date()]).optional(), confirmed_at: z.union([z.string(), z.date()]).optional(), recovery_sent_at: z.union([z.string(), z.date()]).optional(), last_sign_in_at: z.union([z.string(), z.date()]).optional(), created_at: z.union([z.string(), z.date()]).optional(), updated_at: z.union([z.string(), z.date()]).optional(), is_anonymous: z.boolean().optional(), user_metadata: z.record(z.any()).optional(), app_metadata: z.record(z.any()).optional(), profile: z .object({ id: z.string().optional(), user_id: z.string(), avatar: z.string().optional(), username: z.string().optional(), first_name: z.string().optional(), last_name: z.string().optional(), bio: z.string().optional(), address: z.any().optional(), birth_date: z.date().optional(), }) .optional(), }); export type UpdateUserParams = z.infer; export const InviteUserParamsSchema = z.object({ email: z.string().email(), }); export type InviteUserParams = z.infer; export type UserResponse = | { data: { user: User; }; error: null; } | { data: { user: null; }; error: AuthError; };