2026-04-02 16:36:35 +08:00
|
|
|
from __future__ import annotations
|
|
|
|
|
|
|
|
|
|
from pydantic import BaseModel, ConfigDict, Field
|
|
|
|
|
|
|
|
|
|
SUPABASE_PASSWORD_MIN_LENGTH = 6
|
2026-04-02 18:39:35 +08:00
|
|
|
SUPABASE_EMAIL_PATTERN = r"^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$"
|
2026-04-02 16:36:35 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
class OtpSendRequest(BaseModel):
|
|
|
|
|
model_config = ConfigDict(extra="forbid")
|
|
|
|
|
|
2026-04-02 18:39:35 +08:00
|
|
|
email: str = Field(pattern=SUPABASE_EMAIL_PATTERN)
|
2026-04-02 16:36:35 +08:00
|
|
|
|
|
|
|
|
|
2026-04-02 18:39:35 +08:00
|
|
|
class EmailSessionCreateRequest(BaseModel):
|
2026-04-02 16:36:35 +08:00
|
|
|
model_config = ConfigDict(extra="forbid")
|
|
|
|
|
|
2026-04-02 18:39:35 +08:00
|
|
|
email: str = Field(pattern=SUPABASE_EMAIL_PATTERN)
|
|
|
|
|
token: str = Field(min_length=6, max_length=6)
|
2026-04-02 16:36:35 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
class SessionRefreshRequest(BaseModel):
|
|
|
|
|
refresh_token: str = Field(min_length=1)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class SessionDeleteRequest(BaseModel):
|
|
|
|
|
refresh_token: str = Field(min_length=1)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class AuthUser(BaseModel):
|
|
|
|
|
id: str
|
2026-04-02 18:39:35 +08:00
|
|
|
email: str = Field(pattern=SUPABASE_EMAIL_PATTERN)
|
2026-04-02 16:36:35 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
class SessionResponse(BaseModel):
|
|
|
|
|
access_token: str
|
|
|
|
|
refresh_token: str
|
|
|
|
|
expires_in: int
|
|
|
|
|
token_type: str
|
|
|
|
|
user: AuthUser
|
|
|
|
|
|
|
|
|
|
|
2026-04-02 18:39:35 +08:00
|
|
|
class UserByEmailResponse(BaseModel):
|
2026-04-02 16:36:35 +08:00
|
|
|
id: str
|
2026-04-02 18:39:35 +08:00
|
|
|
email: str = Field(pattern=SUPABASE_EMAIL_PATTERN)
|
2026-04-02 16:36:35 +08:00
|
|
|
created_at: str
|
2026-04-02 18:39:35 +08:00
|
|
|
email_confirmed_at: str | None = None
|
2026-04-02 16:36:35 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
class UserByIdResponse(BaseModel):
|
|
|
|
|
id: str
|
2026-04-02 18:39:35 +08:00
|
|
|
email: str | None = None
|
2026-04-02 16:36:35 +08:00
|
|
|
created_at: str
|
2026-04-02 18:39:35 +08:00
|
|
|
email_confirmed_at: str | None = None
|
2026-04-02 16:36:35 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
class OtpSendResponse(BaseModel):
|
2026-04-02 18:39:35 +08:00
|
|
|
email: str = Field(pattern=SUPABASE_EMAIL_PATTERN)
|