diff --git a/surfsense_web/lib/apis/auth-api.service.ts b/surfsense_web/lib/apis/auth-api.service.ts new file mode 100644 index 000000000..e283c2965 --- /dev/null +++ b/surfsense_web/lib/apis/auth-api.service.ts @@ -0,0 +1,44 @@ +import { + loginRequest, + LoginRequest, + loginResponse, + registerRequest, + RegisterRequest, + registerResponse, +} from "@/contracts/types/auth.types"; +import { baseApiService } from "./base-api.service"; + +export class AuthApiService { + login = async (request: LoginRequest) => { + // Validate the request + const parsedRequest = loginRequest.safeParse(request); + + if (!parsedRequest.success) { + throw new Error(`Invalid request: ${parsedRequest.error.message}`); + } + + return baseApiService.post( + `/auth/jwt/login`, + parsedRequest.data, + loginResponse, + { + contentType: "application/x-www-form-urlencoded", + } + ); + }; + + register = async (request: RegisterRequest) => { + // Validate the request + const parsedRequest = registerRequest.safeParse(request); + + if (!parsedRequest.success) { + throw new Error(`Invalid request: ${parsedRequest.error.message}`); + } + + return baseApiService.post( + `/auth/register`, + parsedRequest.data, + registerResponse + ); + }; +}