import { AxiosPromise } from "axios"; import Api from "./Api"; import { ApiResponse } from "./ApiResponses"; export interface LoginUserRequest { email: string; password: string; } export interface CreateUserRequest { email: string; password: string; } export interface CreateUserResponse extends ApiResponse { email: string; id: string; } export interface ForgotPasswordRequest { email: string; } export interface TokenPasswordUpdateRequest { token: string; password: string; email: string; } export interface VerifyTokenRequest { email: string; token: string; } export interface FetchUserResponse extends ApiResponse { id: string; } export interface FetchUserRequest { id: string; } export interface InviteUserRequest { email: string; groupIds: string[]; status?: string; } export interface SwitchUserOrgRequest { orgId: string; } export interface AddUserToOrgRequest { orgId: string; } class UserApi extends Api { static usersURL = "v1/users"; static forgotPasswordURL = `${UserApi.usersURL}/forgotPassword`; static verifyResetPasswordTokenURL = `${UserApi.usersURL}/verifyPasswordResetToken`; static resetPasswordURL = `${UserApi.usersURL}/resetPassword`; static inviteUserURL = "v1/users/invite"; static verifyInviteTokenURL = `${UserApi.inviteUserURL}/verify`; static confirmUserInviteURL = `${UserApi.inviteUserURL}/confirm`; static switchUserOrgURL = `${UserApi.usersURL}/switchOrganization`; static addOrgURL = `${UserApi.usersURL}/addOrganization`; static logoutURL = "v1/logout"; static createUser( request: CreateUserRequest, ): AxiosPromise { return Api.post(UserApi.usersURL, request); } static fetchUser(request: FetchUserRequest): AxiosPromise { return Api.get(UserApi.usersURL + "/" + request.id); } static forgotPassword( request: ForgotPasswordRequest, ): AxiosPromise { return Api.post(UserApi.forgotPasswordURL, request); } static verifyResetPasswordToken( request: VerifyTokenRequest, ): AxiosPromise { return Api.get(UserApi.verifyResetPasswordTokenURL, request); } static resetPassword( request: TokenPasswordUpdateRequest, ): AxiosPromise { return Api.put(UserApi.resetPasswordURL, request); } static inviteUser(request: InviteUserRequest): AxiosPromise { request.status = "INVITED"; return Api.post(UserApi.inviteUserURL, request); } static verifyUserInvite( request: VerifyTokenRequest, ): AxiosPromise { return Api.get(UserApi.verifyInviteTokenURL, request); } static confirmInvitedUserSignup( request: TokenPasswordUpdateRequest, ): AxiosPromise { return Api.put(UserApi.confirmUserInviteURL, request); } static switchUserOrg( request: SwitchUserOrgRequest, ): AxiosPromise { return Api.put(UserApi.switchUserOrgURL + "/" + request.orgId); } static addOrganization( request: AddUserToOrgRequest, ): AxiosPromise { return Api.put(UserApi.addOrgURL + "/" + request.orgId); } static logoutUser(): AxiosPromise { return Api.post(UserApi.logoutURL); } } export default UserApi;