diff --git a/surfsense_web/lib/apis/members-api.service.ts b/surfsense_web/lib/apis/members-api.service.ts index a60cbf363..9799a2695 100644 --- a/surfsense_web/lib/apis/members-api.service.ts +++ b/surfsense_web/lib/apis/members-api.service.ts @@ -5,12 +5,16 @@ import { type UpdateMembershipResponse, type DeleteMembershipRequest, type DeleteMembershipResponse, + type LeaveSearchSpaceRequest, + type LeaveSearchSpaceResponse, getMembersRequest, getMembersResponse, updateMembershipRequest, updateMembershipResponse, deleteMembershipRequest, deleteMembershipResponse, + leaveSearchSpaceRequest, + leaveSearchSpaceResponse, } from "@/contracts/types/members.types"; import { ValidationError } from "@/lib/error"; import { baseApiService } from "./base-api.service"; @@ -75,6 +79,25 @@ class MembersApiService { deleteMembershipResponse, ); }; + + /** + * Leave a search space (remove self) + */ + leaveSearchSpace = async (request: LeaveSearchSpaceRequest) => { + const parsedRequest = leaveSearchSpaceRequest.safeParse(request); + + if (!parsedRequest.success) { + console.error("Invalid request:", parsedRequest.error); + + const errorMessage = parsedRequest.error.errors.map((err) => err.message).join(", "); + throw new ValidationError(`Invalid request: ${errorMessage}`); + } + + return baseApiService.delete( + `/searchspaces/${parsedRequest.data.search_space_id}/members/me`, + leaveSearchSpaceResponse, + ); + }; } export const membersApiService = new MembersApiService();