TypeScript · 2700 bytes Raw Blame History
1 // Database types for ZephyrFS authentication system
2
3 export interface User {
4 id: string;
5 email: string;
6 username?: string;
7 passwordHash?: string;
8 userType: 'backup' | 'volunteer' | 'admin';
9 emailVerified: boolean;
10 emailVerificationToken?: string;
11 emailVerificationExpiresAt?: Date;
12 passwordResetToken?: string;
13 passwordResetExpiresAt?: Date;
14 githubId?: string;
15 githubUsername?: string;
16 githubAvatarUrl?: string;
17 createdAt: Date;
18 updatedAt: Date;
19 lastLoginAt?: Date;
20 profileData?: string; // JSON storage
21 }
22
23 export interface OAuthAccount {
24 id: string;
25 userId: string;
26 provider: string;
27 providerAccountId: string;
28 accessToken?: string;
29 refreshToken?: string;
30 expiresAt?: Date;
31 tokenType?: string;
32 scope?: string;
33 createdAt: Date;
34 updatedAt: Date;
35 }
36
37 export interface UserSession {
38 id: string;
39 userId: string;
40 sessionToken: string;
41 expiresAt: Date;
42 createdAt: Date;
43 lastAccessAt: Date;
44 ipAddress?: string;
45 userAgent?: string;
46 }
47
48 export interface EmailVerification {
49 id: string;
50 userId: string;
51 email: string;
52 token: string;
53 attempts: number;
54 verifiedAt?: Date;
55 expiresAt: Date;
56 createdAt: Date;
57 }
58
59 export interface PasswordReset {
60 id: string;
61 userId: string;
62 token: string;
63 attempts: number;
64 usedAt?: Date;
65 expiresAt: Date;
66 createdAt: Date;
67 }
68
69 export interface UserOnboarding {
70 id: string;
71 userId: string;
72 step: string;
73 completed: boolean;
74 data?: string; // JSON storage
75 completedAt?: Date;
76 createdAt: Date;
77 }
78
79 export interface Database {
80 users: User;
81 oauth_accounts: OAuthAccount;
82 user_sessions: UserSession;
83 email_verifications: EmailVerification;
84 password_resets: PasswordReset;
85 user_onboarding: UserOnboarding;
86 }
87
88 // API types for requests/responses
89 export interface RegisterRequest {
90 email: string;
91 username?: string;
92 password: string;
93 userType: 'backup' | 'volunteer';
94 }
95
96 export interface LoginRequest {
97 email?: string;
98 username?: string;
99 password?: string;
100 token?: string;
101 }
102
103 export interface AuthResponse {
104 token: string;
105 refreshToken: string;
106 expiresIn: number;
107 user: PublicUser;
108 }
109
110 export interface PublicUser {
111 id: string;
112 email: string;
113 username?: string;
114 userType: 'backup' | 'volunteer' | 'admin';
115 emailVerified: boolean;
116 githubUsername?: string;
117 githubAvatarUrl?: string;
118 createdAt: Date;
119 }
120
121 export interface EmailVerificationRequest {
122 token: string;
123 }
124
125 export interface PasswordResetRequest {
126 email: string;
127 }
128
129 export interface PasswordResetConfirmRequest {
130 token: string;
131 newPassword: string;
132 }
133
134 export interface OnboardingUpdateRequest {
135 step: string;
136 data?: Record<string, any>;
137 completed?: boolean;
138 }