95 lines
1.9 KiB
TypeScript
95 lines
1.9 KiB
TypeScript
/**
|
|
* Tipos estritos para autenticação sem any
|
|
*/
|
|
|
|
export type AuthStatus = "loading" | "authenticated" | "unauthenticated";
|
|
|
|
export type UserType = "profissional" | "paciente" | "administrador";
|
|
|
|
export interface UserData {
|
|
id: string;
|
|
email: string;
|
|
name: string;
|
|
userType: UserType;
|
|
profile?: {
|
|
cpf?: string;
|
|
crm?: string; // Para profissionais
|
|
telefone?: string;
|
|
foto_url?: string;
|
|
};
|
|
}
|
|
|
|
export interface LoginRequest {
|
|
email: string;
|
|
password: string;
|
|
}
|
|
|
|
export interface LoginResponse {
|
|
access_token: string;
|
|
refresh_token?: string;
|
|
token_type: string;
|
|
expires_in: number;
|
|
user: UserData;
|
|
}
|
|
|
|
export interface RefreshTokenResponse {
|
|
access_token: string;
|
|
token_type: string;
|
|
expires_in: number;
|
|
}
|
|
|
|
export interface AuthError {
|
|
message: string;
|
|
code: string;
|
|
details?: unknown;
|
|
}
|
|
|
|
export interface AuthContextType {
|
|
authStatus: AuthStatus;
|
|
user: UserData | null;
|
|
token: string | null;
|
|
login: (
|
|
email: string,
|
|
password: string,
|
|
userType: UserType,
|
|
) => Promise<boolean>;
|
|
logout: () => Promise<void>;
|
|
refreshToken: () => Promise<boolean>;
|
|
}
|
|
|
|
export interface AuthStorageKeys {
|
|
readonly TOKEN: string;
|
|
readonly REFRESH_TOKEN: string;
|
|
readonly USER: string;
|
|
readonly USER_TYPE: string;
|
|
}
|
|
|
|
export type UserTypeRoutes = {
|
|
readonly [K in UserType]: string;
|
|
};
|
|
|
|
export type LoginRoutes = {
|
|
readonly [K in UserType]: string;
|
|
};
|
|
|
|
// Constantes para localStorage
|
|
export const AUTH_STORAGE_KEYS: AuthStorageKeys = {
|
|
TOKEN: "auth_token",
|
|
REFRESH_TOKEN: "auth_refresh_token",
|
|
USER: "auth_user",
|
|
USER_TYPE: "auth_user_type",
|
|
} as const;
|
|
|
|
// Rotas baseadas no tipo de usuário
|
|
export const USER_TYPE_ROUTES: UserTypeRoutes = {
|
|
profissional: "/profissional",
|
|
paciente: "/paciente",
|
|
administrador: "/dashboard",
|
|
} as const;
|
|
|
|
export const LOGIN_ROUTES: LoginRoutes = {
|
|
profissional: "/login",
|
|
paciente: "/login-paciente",
|
|
administrador: "/login-admin",
|
|
} as const;
|