Merge remote-tracking branch 'upstream/dev' into refactor/indexing-pipelines

This commit is contained in:
Anish Sarkar 2026-03-27 22:36:34 +05:30
commit 17091edb77
104 changed files with 4944 additions and 1319 deletions

View file

@ -16,7 +16,7 @@ export type RequestOptions = {
headers?: Record<string, string>;
contentType?: "application/json" | "application/x-www-form-urlencoded";
signal?: AbortSignal;
body?: any;
body?: unknown;
responseType?: ResponseType;
_isRetry?: boolean; // Internal flag to prevent infinite retry loops
// Add more options as needed

View file

@ -139,7 +139,7 @@ class DocumentsApiService {
for (const batch of batches) {
const formData = new FormData();
batch.forEach((file) => formData.append("files", file));
for (const file of batch) formData.append("files", file);
formData.append("search_space_id", String(search_space_id));
formData.append("should_summarize", String(should_summarize));

View file

@ -0,0 +1,113 @@
import {
type BulkDocumentMoveRequest,
bulkDocumentMoveRequest,
type DocumentMoveRequest,
documentMoveRequest,
type FolderCreateRequest,
type FolderMoveRequest,
type FolderReorderRequest,
type FolderUpdateRequest,
folder,
folderBreadcrumbResponse,
folderCreateRequest,
folderDeleteResponse,
folderListResponse,
folderMoveRequest,
folderReorderRequest,
folderUpdateRequest,
} from "@/contracts/types/folder.types";
import { ValidationError } from "../error";
import { baseApiService } from "./base-api.service";
class FoldersApiService {
createFolder = async (request: FolderCreateRequest) => {
const parsed = folderCreateRequest.safeParse(request);
if (!parsed.success) {
throw new ValidationError(
`Invalid request: ${parsed.error.issues.map((i) => i.message).join(", ")}`
);
}
return baseApiService.post("/api/v1/folders", folder, { body: parsed.data });
};
listFolders = async (searchSpaceId: number) => {
return baseApiService.get(
`/api/v1/folders?search_space_id=${searchSpaceId}`,
folderListResponse
);
};
getFolder = async (folderId: number) => {
return baseApiService.get(`/api/v1/folders/${folderId}`, folder);
};
getFolderBreadcrumb = async (folderId: number) => {
return baseApiService.get(`/api/v1/folders/${folderId}/breadcrumb`, folderBreadcrumbResponse);
};
updateFolder = async (folderId: number, request: FolderUpdateRequest) => {
const parsed = folderUpdateRequest.safeParse(request);
if (!parsed.success) {
throw new ValidationError(
`Invalid request: ${parsed.error.issues.map((i) => i.message).join(", ")}`
);
}
return baseApiService.put(`/api/v1/folders/${folderId}`, folder, {
body: parsed.data,
});
};
moveFolder = async (folderId: number, request: FolderMoveRequest) => {
const parsed = folderMoveRequest.safeParse(request);
if (!parsed.success) {
throw new ValidationError(
`Invalid request: ${parsed.error.issues.map((i) => i.message).join(", ")}`
);
}
return baseApiService.put(`/api/v1/folders/${folderId}/move`, folder, {
body: parsed.data,
});
};
reorderFolder = async (folderId: number, request: FolderReorderRequest) => {
const parsed = folderReorderRequest.safeParse(request);
if (!parsed.success) {
throw new ValidationError(
`Invalid request: ${parsed.error.issues.map((i) => i.message).join(", ")}`
);
}
return baseApiService.put(`/api/v1/folders/${folderId}/reorder`, folder, {
body: parsed.data,
});
};
deleteFolder = async (folderId: number) => {
return baseApiService.delete(`/api/v1/folders/${folderId}`, folderDeleteResponse);
};
moveDocument = async (documentId: number, request: DocumentMoveRequest) => {
const parsed = documentMoveRequest.safeParse(request);
if (!parsed.success) {
throw new ValidationError(
`Invalid request: ${parsed.error.issues.map((i) => i.message).join(", ")}`
);
}
return baseApiService.put(`/api/v1/documents/${documentId}/move`, undefined, {
body: parsed.data,
});
};
bulkMoveDocuments = async (request: BulkDocumentMoveRequest) => {
const parsed = bulkDocumentMoveRequest.safeParse(request);
if (!parsed.success) {
throw new ValidationError(
`Invalid request: ${parsed.error.issues.map((i) => i.message).join(", ")}`
);
}
return baseApiService.put("/api/v1/documents/bulk-move", undefined, {
body: parsed.data,
});
};
}
export const foldersApiService = new FoldersApiService();

View file

@ -1,26 +1,20 @@
import {
type AcceptInviteRequest,
type AcceptInviteResponse,
acceptInviteRequest,
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";

View file

@ -14,8 +14,6 @@ import {
getLogSummaryResponse,
getLogsRequest,
getLogsResponse,
type Log,
log,
type UpdateLogRequest,
updateLogRequest,
updateLogResponse,

View file

@ -1,22 +1,17 @@
import {
type DeleteMembershipRequest,
type DeleteMembershipResponse,
deleteMembershipRequest,
deleteMembershipResponse,
type GetMembersRequest,
type GetMembersResponse,
type GetMyAccessRequest,
type GetMyAccessResponse,
getMembersRequest,
getMembersResponse,
getMyAccessRequest,
getMyAccessResponse,
type LeaveSearchSpaceRequest,
type LeaveSearchSpaceResponse,
leaveSearchSpaceRequest,
leaveSearchSpaceResponse,
type UpdateMembershipRequest,
type UpdateMembershipResponse,
updateMembershipRequest,
updateMembershipResponse,
} from "@/contracts/types/members.types";

View file

@ -136,7 +136,7 @@ export function buildContentForPersistence(
* Async generator that reads an SSE stream and yields parsed JSON objects.
* Handles buffering, event splitting, and skips malformed JSON / [DONE] lines.
*/
export async function* readSSEStream(response: Response): AsyncGenerator<any> {
export async function* readSSEStream(response: Response): AsyncGenerator<unknown> {
if (!response.body) {
throw new Error("No response body");
}