SurfSense/surfsense_web/lib/apis/auth-api.service.ts

58 lines
1.7 KiB
TypeScript
Raw Normal View History

2025-11-14 00:23:21 +02:00
import {
2025-11-15 02:07:20 +02:00
type LoginRequest,
2025-11-14 00:42:19 +02:00
loginRequest,
loginResponse,
2025-11-15 02:07:20 +02:00
type RegisterRequest,
2025-11-14 00:42:19 +02:00
registerRequest,
registerResponse,
2025-11-14 00:23:21 +02:00
} from "@/contracts/types/auth.types";
2025-11-15 02:07:20 +02:00
import { ValidationError } from "../error";
2025-11-14 00:23:21 +02:00
import { baseApiService } from "./base-api.service";
2025-11-18 11:35:06 +02:00
class AuthApiService {
2025-11-14 00:42:19 +02:00
login = async (request: LoginRequest) => {
// Validate the request
const parsedRequest = loginRequest.safeParse(request);
2025-11-14 00:23:21 +02:00
2025-11-14 00:42:19 +02:00
if (!parsedRequest.success) {
2025-11-15 02:07:20 +02:00
console.error("Invalid request:", parsedRequest.error);
// Format a user frendly error message
2025-12-20 05:10:47 -08:00
const errorMessage = parsedRequest.error.issues.map((issue) => issue.message).join(", ");
2025-11-15 02:57:41 +02:00
throw new ValidationError(`Invalid request: ${errorMessage}`);
2025-11-14 00:42:19 +02:00
}
2025-11-14 00:23:21 +02:00
2025-11-15 02:57:41 +02:00
// Create form data for the API request
const formData = new URLSearchParams();
formData.append("username", request.username);
formData.append("password", request.password);
formData.append("grant_type", "password");
return baseApiService.post(`/auth/jwt/login`, loginResponse, {
body: formData.toString(),
headers: {
"Content-Type": "application/x-www-form-urlencoded",
},
2025-11-14 00:42:19 +02:00
});
};
2025-11-14 00:23:21 +02:00
2025-11-14 00:42:19 +02:00
register = async (request: RegisterRequest) => {
// Validate the request
const parsedRequest = registerRequest.safeParse(request);
2025-11-14 00:23:21 +02:00
2025-11-14 00:42:19 +02:00
if (!parsedRequest.success) {
2025-11-15 02:07:20 +02:00
console.error("Invalid request:", parsedRequest.error);
// Format a user frendly error message
2025-12-20 05:10:47 -08:00
const errorMessage = parsedRequest.error.issues.map((issue) => issue.message).join(", ");
2025-11-15 02:07:20 +02:00
throw new ValidationError(`Invalid request: ${errorMessage}`);
2025-11-14 00:42:19 +02:00
}
2025-11-14 00:23:21 +02:00
2025-11-15 02:57:41 +02:00
return baseApiService.post(`/auth/register`, registerResponse, {
2025-11-20 08:20:47 +02:00
body: parsedRequest.data,
2025-11-15 02:57:41 +02:00
});
2025-11-14 00:42:19 +02:00
};
2025-11-14 00:23:21 +02:00
}
2025-11-15 02:07:20 +02:00
export const authApiService = new AuthApiService();