chore: biome

This commit is contained in:
DESKTOP-RTLN3BA\$punk 2025-12-19 00:45:29 -08:00
parent c53bd54fd4
commit 4d02e8768d
8 changed files with 120 additions and 109 deletions

View file

@ -9,6 +9,7 @@ import type React from "react";
import { useCallback, useEffect, useMemo, useState } from "react"; import { useCallback, useEffect, useMemo, useState } from "react";
import { activeChathatUIAtom, activeChatIdAtom } from "@/atoms/chats/ui.atoms"; import { activeChathatUIAtom, activeChatIdAtom } from "@/atoms/chats/ui.atoms";
import { llmPreferencesAtom } from "@/atoms/llm-config/llm-config-query.atoms"; import { llmPreferencesAtom } from "@/atoms/llm-config/llm-config-query.atoms";
import { myAccessAtom } from "@/atoms/members/members-query.atoms";
import { activeSearchSpaceIdAtom } from "@/atoms/search-spaces/search-space-query.atoms"; import { activeSearchSpaceIdAtom } from "@/atoms/search-spaces/search-space-query.atoms";
import { ChatPanelContainer } from "@/components/chat/ChatPanel/ChatPanelContainer"; import { ChatPanelContainer } from "@/components/chat/ChatPanel/ChatPanelContainer";
import { DashboardBreadcrumb } from "@/components/dashboard-breadcrumb"; import { DashboardBreadcrumb } from "@/components/dashboard-breadcrumb";
@ -17,7 +18,6 @@ import { AppSidebarProvider } from "@/components/sidebar/AppSidebarProvider";
import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card"; import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card";
import { Separator } from "@/components/ui/separator"; import { Separator } from "@/components/ui/separator";
import { SidebarInset, SidebarProvider, SidebarTrigger } from "@/components/ui/sidebar"; import { SidebarInset, SidebarProvider, SidebarTrigger } from "@/components/ui/sidebar";
import { myAccessAtom } from "@/atoms/members/members-query.atoms";
import { cn } from "@/lib/utils"; import { cn } from "@/lib/utils";
export function DashboardClientLayout({ export function DashboardClientLayout({

View file

@ -46,14 +46,21 @@ import { motion } from "motion/react";
import { useParams, useRouter } from "next/navigation"; import { useParams, useRouter } from "next/navigation";
import { useCallback, useMemo, useState } from "react"; import { useCallback, useMemo, useState } from "react";
import { toast } from "sonner"; import { toast } from "sonner";
import { updateMemberMutationAtom, deleteMemberMutationAtom } from "@/atoms/members/members-mutation.atoms"; import {
import { myAccessAtom } from "@/atoms/members/members-query.atoms"; createInviteMutationAtom,
import { createInviteMutationAtom, deleteInviteMutationAtom } from '@/atoms/invites/invites-mutation.atoms'; deleteInviteMutationAtom,
import type { DeleteInviteRequest } from '@/contracts/types/invites.types'; } from "@/atoms/invites/invites-mutation.atoms";
import type { UpdateMembershipRequest, DeleteMembershipRequest} from "@/contracts/types/members.types"; import {
deleteMemberMutationAtom,
updateMemberMutationAtom,
} from "@/atoms/members/members-mutation.atoms";
import { membersAtom, myAccessAtom } from "@/atoms/members/members-query.atoms";
import { permissionsAtom } from "@/atoms/permissions/permissions-query.atoms"; import { permissionsAtom } from "@/atoms/permissions/permissions-query.atoms";
import { membersAtom } from "@/atoms/members/members-query.atoms"; import {
import { invitesApiService } from '@/lib/apis/invites-api.service'; createRoleMutationAtom,
deleteRoleMutationAtom,
updateRoleMutationAtom,
} from "@/atoms/roles/roles-mutation.atoms";
import { import {
AlertDialog, AlertDialog,
AlertDialogAction, AlertDialogAction,
@ -109,21 +116,26 @@ import {
} from "@/components/ui/table"; } from "@/components/ui/table";
import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs"; import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs";
import { Textarea } from "@/components/ui/textarea"; import { Textarea } from "@/components/ui/textarea";
import type {
CreateInviteRequest,
DeleteInviteRequest,
Invite,
} from "@/contracts/types/invites.types";
import type {
DeleteMembershipRequest,
Membership,
UpdateMembershipRequest,
} from "@/contracts/types/members.types";
import type { import type {
CreateRoleRequest, CreateRoleRequest,
DeleteRoleRequest, DeleteRoleRequest,
Role, Role,
UpdateRoleRequest, UpdateRoleRequest,
} from "@/contracts/types/roles.types"; } from "@/contracts/types/roles.types";
import { import { invitesApiService } from "@/lib/apis/invites-api.service";
type Invite,
type CreateInviteRequest,
} from "@/contracts/types/invites.types";
import type { Membership } from "@/contracts/types/members.types";
import { rolesApiService } from "@/lib/apis/roles-api.service"; import { rolesApiService } from "@/lib/apis/roles-api.service";
import { cacheKeys } from "@/lib/query-client/cache-keys"; import { cacheKeys } from "@/lib/query-client/cache-keys";
import { cn } from "@/lib/utils"; import { cn } from "@/lib/utils";
import { createRoleMutationAtom, deleteRoleMutationAtom, updateRoleMutationAtom } from "@/atoms/roles/roles-mutation.atoms";
// Animation variants // Animation variants
const fadeInUp = { const fadeInUp = {
@ -165,7 +177,11 @@ export default function TeamManagementPage() {
[access] [access]
); );
const { data: members = [], isLoading: membersLoading, refetch: fetchMembers } = useAtomValue(membersAtom); const {
data: members = [],
isLoading: membersLoading,
refetch: fetchMembers,
} = useAtomValue(membersAtom);
const { mutateAsync: createRole } = useAtomValue(createRoleMutationAtom); const { mutateAsync: createRole } = useAtomValue(createRoleMutationAtom);
const { mutateAsync: updateRole } = useAtomValue(updateRoleMutationAtom); const { mutateAsync: updateRole } = useAtomValue(updateRoleMutationAtom);
@ -189,7 +205,7 @@ export default function TeamManagementPage() {
); );
const handleCreateInvite = useCallback( const handleCreateInvite = useCallback(
async (inviteData: CreateInviteRequest['data']) => { async (inviteData: CreateInviteRequest["data"]) => {
const request: CreateInviteRequest = { const request: CreateInviteRequest = {
search_space_id: searchSpaceId, search_space_id: searchSpaceId,
data: inviteData, data: inviteData,
@ -243,12 +259,11 @@ export default function TeamManagementPage() {
role_id: roleId, role_id: roleId,
}, },
}; };
return await updateMember(request) as Membership; return (await updateMember(request)) as Membership;
}, },
[updateMember, searchSpaceId] [updateMember, searchSpaceId]
); );
const handleRemoveMember = useCallback( const handleRemoveMember = useCallback(
async (membershipId: number) => { async (membershipId: number) => {
const request: DeleteMembershipRequest = { const request: DeleteMembershipRequest = {
@ -257,7 +272,7 @@ export default function TeamManagementPage() {
}; };
await deleteMember(request); await deleteMember(request);
return true return true;
}, },
[deleteMember, searchSpaceId] [deleteMember, searchSpaceId]
); );
@ -1077,7 +1092,7 @@ function CreateInviteDialog({
searchSpaceId, searchSpaceId,
}: { }: {
roles: Role[]; roles: Role[];
onCreateInvite: (data: CreateInviteRequest['data']) => Promise<Invite>; onCreateInvite: (data: CreateInviteRequest["data"]) => Promise<Invite>;
searchSpaceId: number; searchSpaceId: number;
}) { }) {
const [open, setOpen] = useState(false); const [open, setOpen] = useState(false);
@ -1092,7 +1107,7 @@ function CreateInviteDialog({
const handleCreate = async () => { const handleCreate = async () => {
setCreating(true); setCreating(true);
try { try {
const data: CreateInviteRequest['data'] = {}; const data: CreateInviteRequest["data"] = {};
if (name) data.name = name; if (name) data.name = name;
if (roleId && roleId !== "default") data.role_id = Number(roleId); if (roleId && roleId !== "default") data.role_id = Number(roleId);
if (maxUses) data.max_uses = Number(maxUses); if (maxUses) data.max_uses = Number(maxUses);

View file

@ -1,7 +1,7 @@
"use client"; "use client";
import { useAtomValue } from "jotai";
import { useQuery } from "@tanstack/react-query"; import { useQuery } from "@tanstack/react-query";
import { useAtomValue } from "jotai";
import { import {
AlertCircle, AlertCircle,
ArrowRight, ArrowRight,
@ -21,8 +21,6 @@ import { useParams, useRouter } from "next/navigation";
import { use, useCallback, useEffect, useState } from "react"; import { use, useCallback, useEffect, useState } from "react";
import { toast } from "sonner"; import { toast } from "sonner";
import { acceptInviteMutationAtom } from "@/atoms/invites/invites-mutation.atoms"; import { acceptInviteMutationAtom } from "@/atoms/invites/invites-mutation.atoms";
import { invitesApiService } from "@/lib/apis/invites-api.service";
import { cacheKeys } from "@/lib/query-client/cache-keys";
import { Button } from "@/components/ui/button"; import { Button } from "@/components/ui/button";
import { import {
Card, Card,
@ -32,8 +30,10 @@ import {
CardHeader, CardHeader,
CardTitle, CardTitle,
} from "@/components/ui/card"; } from "@/components/ui/card";
import type { AcceptInviteResponse } from "@/contracts/types/invites.types";
import { invitesApiService } from "@/lib/apis/invites-api.service";
import { getBearerToken } from "@/lib/auth-utils"; import { getBearerToken } from "@/lib/auth-utils";
import { AcceptInviteResponse } from "@/contracts/types/invites.types"; import { cacheKeys } from "@/lib/query-client/cache-keys";
export default function InviteAcceptPage() { export default function InviteAcceptPage() {
const params = useParams(); const params = useParams();
@ -41,9 +41,9 @@ export default function InviteAcceptPage() {
const inviteCode = params.invite_code as string; const inviteCode = params.invite_code as string;
const { data: inviteInfo = null, isLoading: loading } = useQuery({ const { data: inviteInfo = null, isLoading: loading } = useQuery({
queryKey: cacheKeys.invites.info(inviteCode), queryKey: cacheKeys.invites.info(inviteCode),
enabled: !!inviteCode, enabled: !!inviteCode,
staleTime: 5 * 60 * 1000, staleTime: 5 * 60 * 1000,
queryFn: async () => { queryFn: async () => {
if (!inviteCode) return null; if (!inviteCode) return null;
return invitesApiService.getInviteInfo({ return invitesApiService.getInviteInfo({

View file

@ -1,14 +1,14 @@
import { atomWithMutation } from "jotai-tanstack-query"; import { atomWithMutation } from "jotai-tanstack-query";
import { toast } from "sonner";
import type {
AcceptInviteRequest,
CreateInviteRequest,
DeleteInviteRequest,
UpdateInviteRequest,
} from "@/contracts/types/invites.types";
import { invitesApiService } from "@/lib/apis/invites-api.service"; import { invitesApiService } from "@/lib/apis/invites-api.service";
import { cacheKeys } from "@/lib/query-client/cache-keys"; import { cacheKeys } from "@/lib/query-client/cache-keys";
import { queryClient } from "@/lib/query-client/client"; import { queryClient } from "@/lib/query-client/client";
import type {
CreateInviteRequest,
UpdateInviteRequest,
DeleteInviteRequest,
AcceptInviteRequest,
} from "@/contracts/types/invites.types";
import { toast } from "sonner";
/** /**
* Mutation atom for creating an invite * Mutation atom for creating an invite

View file

@ -1,12 +1,12 @@
import { atomWithMutation } from "jotai-tanstack-query"; import { atomWithMutation } from "jotai-tanstack-query";
import { toast } from "sonner"; import { toast } from "sonner";
import type { import type {
UpdateMembershipRequest,
UpdateMembershipResponse,
DeleteMembershipRequest, DeleteMembershipRequest,
DeleteMembershipResponse, DeleteMembershipResponse,
LeaveSearchSpaceRequest, LeaveSearchSpaceRequest,
LeaveSearchSpaceResponse, LeaveSearchSpaceResponse,
UpdateMembershipRequest,
UpdateMembershipResponse,
} from "@/contracts/types/members.types"; } from "@/contracts/types/members.types";
import { membersApiService } from "@/lib/apis/members-api.service"; import { membersApiService } from "@/lib/apis/members-api.service";
import { cacheKeys } from "@/lib/query-client/cache-keys"; import { cacheKeys } from "@/lib/query-client/cache-keys";

View file

@ -1,28 +1,28 @@
import { import {
type CreateInviteRequest,
type CreateInviteResponse,
type GetInvitesRequest,
type GetInvitesResponse,
type UpdateInviteRequest,
type UpdateInviteResponse,
type DeleteInviteRequest,
type DeleteInviteResponse,
type GetInviteInfoRequest,
type GetInviteInfoResponse,
type AcceptInviteRequest, type AcceptInviteRequest,
type AcceptInviteResponse, type AcceptInviteResponse,
createInviteRequest,
createInviteResponse,
getInvitesRequest,
getInvitesResponse,
updateInviteRequest,
updateInviteResponse,
deleteInviteRequest,
deleteInviteResponse,
getInviteInfoRequest,
getInviteInfoResponse,
acceptInviteRequest, acceptInviteRequest,
acceptInviteResponse, acceptInviteResponse,
type CreateInviteRequest,
type CreateInviteResponse,
createInviteRequest,
createInviteResponse,
type DeleteInviteRequest,
type DeleteInviteResponse,
deleteInviteRequest,
deleteInviteResponse,
type GetInviteInfoRequest,
type GetInviteInfoResponse,
type GetInvitesRequest,
type GetInvitesResponse,
getInviteInfoRequest,
getInviteInfoResponse,
getInvitesRequest,
getInvitesResponse,
type UpdateInviteRequest,
type UpdateInviteResponse,
updateInviteRequest,
updateInviteResponse,
} from "@/contracts/types/invites.types"; } from "@/contracts/types/invites.types";
import { ValidationError } from "@/lib/error"; import { ValidationError } from "@/lib/error";
import { baseApiService } from "./base-api.service"; import { baseApiService } from "./base-api.service";
@ -33,10 +33,10 @@ class InvitesApiService {
*/ */
createInvite = async (request: CreateInviteRequest) => { createInvite = async (request: CreateInviteRequest) => {
const parsedRequest = createInviteRequest.safeParse(request); const parsedRequest = createInviteRequest.safeParse(request);
if (!parsedRequest.success) { if (!parsedRequest.success) {
console.error("Invalid request:", parsedRequest.error); console.error("Invalid request:", parsedRequest.error);
const errorMessage = parsedRequest.error.errors.map((err) => err.message).join(", "); const errorMessage = parsedRequest.error.errors.map((err) => err.message).join(", ");
throw new ValidationError(`Invalid request: ${errorMessage}`); throw new ValidationError(`Invalid request: ${errorMessage}`);
} }
@ -55,18 +55,18 @@ class InvitesApiService {
*/ */
getInvites = async (request: GetInvitesRequest) => { getInvites = async (request: GetInvitesRequest) => {
const parsedRequest = getInvitesRequest.safeParse(request); const parsedRequest = getInvitesRequest.safeParse(request);
if (!parsedRequest.success) { if (!parsedRequest.success) {
console.error("Invalid request:", parsedRequest.error); console.error("Invalid request:", parsedRequest.error);
const errorMessage = parsedRequest.error.errors.map((err) => err.message).join(", "); const errorMessage = parsedRequest.error.errors.map((err) => err.message).join(", ");
throw new ValidationError(`Invalid request: ${errorMessage}`); throw new ValidationError(`Invalid request: ${errorMessage}`);
} }
return baseApiService.get( return baseApiService.get(
`/api/v1/searchspaces/${parsedRequest.data.search_space_id}/invites`, `/api/v1/searchspaces/${parsedRequest.data.search_space_id}/invites`,
getInvitesResponse getInvitesResponse
); );
}; };
/** /**
@ -74,21 +74,21 @@ class InvitesApiService {
*/ */
updateInvite = async (request: UpdateInviteRequest) => { updateInvite = async (request: UpdateInviteRequest) => {
const parsedRequest = updateInviteRequest.safeParse(request); const parsedRequest = updateInviteRequest.safeParse(request);
if (!parsedRequest.success) { if (!parsedRequest.success) {
console.error("Invalid request:", parsedRequest.error); console.error("Invalid request:", parsedRequest.error);
const errorMessage = parsedRequest.error.errors.map((err) => err.message).join(", "); const errorMessage = parsedRequest.error.errors.map((err) => err.message).join(", ");
throw new ValidationError(`Invalid request: ${errorMessage}`); throw new ValidationError(`Invalid request: ${errorMessage}`);
} }
return baseApiService.put( return baseApiService.put(
`/api/v1/searchspaces/${parsedRequest.data.search_space_id}/invites/${parsedRequest.data.invite_id}`, `/api/v1/searchspaces/${parsedRequest.data.search_space_id}/invites/${parsedRequest.data.invite_id}`,
updateInviteResponse, updateInviteResponse,
{ {
body: parsedRequest.data.data, body: parsedRequest.data.data,
} }
); );
}; };
/** /**
@ -96,18 +96,18 @@ class InvitesApiService {
*/ */
deleteInvite = async (request: DeleteInviteRequest) => { deleteInvite = async (request: DeleteInviteRequest) => {
const parsedRequest = deleteInviteRequest.safeParse(request); const parsedRequest = deleteInviteRequest.safeParse(request);
if (!parsedRequest.success) { if (!parsedRequest.success) {
console.error("Invalid request:", parsedRequest.error); console.error("Invalid request:", parsedRequest.error);
const errorMessage = parsedRequest.error.errors.map((err) => err.message).join(", "); const errorMessage = parsedRequest.error.errors.map((err) => err.message).join(", ");
throw new ValidationError(`Invalid request: ${errorMessage}`); throw new ValidationError(`Invalid request: ${errorMessage}`);
} }
return baseApiService.delete( return baseApiService.delete(
`/api/v1/searchspaces/${parsedRequest.data.search_space_id}/invites/${parsedRequest.data.invite_id}`, `/api/v1/searchspaces/${parsedRequest.data.search_space_id}/invites/${parsedRequest.data.invite_id}`,
deleteInviteResponse deleteInviteResponse
); );
}; };
/** /**
@ -115,18 +115,18 @@ class InvitesApiService {
*/ */
getInviteInfo = async (request: GetInviteInfoRequest) => { getInviteInfo = async (request: GetInviteInfoRequest) => {
const parsedRequest = getInviteInfoRequest.safeParse(request); const parsedRequest = getInviteInfoRequest.safeParse(request);
if (!parsedRequest.success) { if (!parsedRequest.success) {
console.error("Invalid request:", parsedRequest.error); console.error("Invalid request:", parsedRequest.error);
const errorMessage = parsedRequest.error.errors.map((err) => err.message).join(", "); const errorMessage = parsedRequest.error.errors.map((err) => err.message).join(", ");
throw new ValidationError(`Invalid request: ${errorMessage}`); throw new ValidationError(`Invalid request: ${errorMessage}`);
} }
return baseApiService.get( return baseApiService.get(
`/api/v1/invites/${parsedRequest.data.invite_code}/info`, `/api/v1/invites/${parsedRequest.data.invite_code}/info`,
getInviteInfoResponse getInviteInfoResponse
); );
}; };
/** /**
@ -134,21 +134,17 @@ class InvitesApiService {
*/ */
acceptInvite = async (request: AcceptInviteRequest) => { acceptInvite = async (request: AcceptInviteRequest) => {
const parsedRequest = acceptInviteRequest.safeParse(request); const parsedRequest = acceptInviteRequest.safeParse(request);
if (!parsedRequest.success) { if (!parsedRequest.success) {
console.error("Invalid request:", parsedRequest.error); console.error("Invalid request:", parsedRequest.error);
const errorMessage = parsedRequest.error.errors.map((err) => err.message).join(", "); const errorMessage = parsedRequest.error.errors.map((err) => err.message).join(", ");
throw new ValidationError(`Invalid request: ${errorMessage}`); throw new ValidationError(`Invalid request: ${errorMessage}`);
} }
return baseApiService.post( return baseApiService.post(`/api/v1/invites/accept`, acceptInviteResponse, {
`/api/v1/invites/accept`, body: parsedRequest.data,
acceptInviteResponse, });
{
body: parsedRequest.data,
}
);
}; };
} }

View file

@ -1,24 +1,24 @@
import { import {
type GetMembersRequest,
type GetMembersResponse,
type UpdateMembershipRequest,
type UpdateMembershipResponse,
type DeleteMembershipRequest, type DeleteMembershipRequest,
type DeleteMembershipResponse, type DeleteMembershipResponse,
type LeaveSearchSpaceRequest, deleteMembershipRequest,
type LeaveSearchSpaceResponse, deleteMembershipResponse,
type GetMembersRequest,
type GetMembersResponse,
type GetMyAccessRequest, type GetMyAccessRequest,
type GetMyAccessResponse, type GetMyAccessResponse,
getMembersRequest, getMembersRequest,
getMembersResponse, getMembersResponse,
updateMembershipRequest,
updateMembershipResponse,
deleteMembershipRequest,
deleteMembershipResponse,
leaveSearchSpaceRequest,
leaveSearchSpaceResponse,
getMyAccessRequest, getMyAccessRequest,
getMyAccessResponse, getMyAccessResponse,
type LeaveSearchSpaceRequest,
type LeaveSearchSpaceResponse,
leaveSearchSpaceRequest,
leaveSearchSpaceResponse,
type UpdateMembershipRequest,
type UpdateMembershipResponse,
updateMembershipRequest,
updateMembershipResponse,
} from "@/contracts/types/members.types"; } from "@/contracts/types/members.types";
import { ValidationError } from "@/lib/error"; import { ValidationError } from "@/lib/error";
import { baseApiService } from "./base-api.service"; import { baseApiService } from "./base-api.service";
@ -39,7 +39,7 @@ class MembersApiService {
return baseApiService.get( return baseApiService.get(
`/api/v1/searchspaces/${parsedRequest.data.search_space_id}/members`, `/api/v1/searchspaces/${parsedRequest.data.search_space_id}/members`,
getMembersResponse, getMembersResponse
); );
}; };
@ -61,7 +61,7 @@ class MembersApiService {
updateMembershipResponse, updateMembershipResponse,
{ {
body: parsedRequest.data.data, body: parsedRequest.data.data,
}, }
); );
}; };
@ -80,7 +80,7 @@ class MembersApiService {
return baseApiService.delete( return baseApiService.delete(
`/api/v1/searchspaces/${parsedRequest.data.search_space_id}/members/${parsedRequest.data.membership_id}`, `/api/v1/searchspaces/${parsedRequest.data.search_space_id}/members/${parsedRequest.data.membership_id}`,
deleteMembershipResponse, deleteMembershipResponse
); );
}; };
@ -99,7 +99,7 @@ class MembersApiService {
return baseApiService.delete( return baseApiService.delete(
`/api/v1/searchspaces/${parsedRequest.data.search_space_id}/members/me`, `/api/v1/searchspaces/${parsedRequest.data.search_space_id}/members/me`,
leaveSearchSpaceResponse, leaveSearchSpaceResponse
); );
}; };
@ -118,7 +118,7 @@ class MembersApiService {
return baseApiService.get( return baseApiService.get(
`/api/v1/searchspaces/${parsedRequest.data.search_space_id}/my-access`, `/api/v1/searchspaces/${parsedRequest.data.search_space_id}/my-access`,
getMyAccessResponse, getMyAccessResponse
); );
}; };
} }

View file

@ -1,10 +1,10 @@
import type { GetChatsRequest } from "@/contracts/types/chat.types"; import type { GetChatsRequest } from "@/contracts/types/chat.types";
import type { GetDocumentsRequest } from "@/contracts/types/document.types"; import type { GetDocumentsRequest } from "@/contracts/types/document.types";
import type { GetLLMConfigsRequest } from "@/contracts/types/llm-config.types"; import type { GetLLMConfigsRequest } from "@/contracts/types/llm-config.types";
import type { GetMembersRequest } from "@/contracts/types/members.types";
import type { GetPodcastsRequest } from "@/contracts/types/podcast.types"; import type { GetPodcastsRequest } from "@/contracts/types/podcast.types";
import type { GetRolesRequest } from "@/contracts/types/roles.types"; import type { GetRolesRequest } from "@/contracts/types/roles.types";
import type { GetSearchSpacesRequest } from "@/contracts/types/search-space.types"; import type { GetSearchSpacesRequest } from "@/contracts/types/search-space.types";
import type { GetMembersRequest } from "@/contracts/types/members.types";
export const cacheKeys = { export const cacheKeys = {
chats: { chats: {