148 lines
4.4 KiB
TypeScript
148 lines
4.4 KiB
TypeScript
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<typeof UserSchema>;
|
|
|
|
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<typeof ProfileSchema>;
|
|
|
|
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<typeof CreateUserParamsSchema>;
|
|
|
|
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<typeof UpdateUserParamsSchema>;
|
|
|
|
export const InviteUserParamsSchema = z.object({
|
|
email: z.string().email(),
|
|
});
|
|
|
|
export type InviteUserParams = z.infer<typeof InviteUserParamsSchema>;
|
|
|
|
export type UserResponse =
|
|
| {
|
|
data: {
|
|
user: User;
|
|
};
|
|
error: null;
|
|
}
|
|
| {
|
|
data: {
|
|
user: null;
|
|
};
|
|
error: AuthError;
|
|
};
|