Files
wehub-resource-sync 6ede33ccdb
Build and Push Docker Images / build (./surfsense_web, cpu, ./surfsense_web/Dockerfile, web, surfsense-web, ubuntu-24.04-arm, linux/arm64, arm64, , runner, false, cpu) (push) Blocked by required conditions
Build and Push Docker Images / build (./surfsense_web, cpu, ./surfsense_web/Dockerfile, web, surfsense-web, ubuntu-latest, linux/amd64, amd64, , runner, false, cpu) (push) Blocked by required conditions
Build and Push Docker Images / compute_version (push) Waiting to run
Build and Push Docker Images / build (./surfsense_backend, cpu, ./surfsense_backend/Dockerfile, backend, surfsense-backend, ubuntu-24.04-arm, linux/arm64, arm64, , production, false, cpu) (push) Blocked by required conditions
Build and Push Docker Images / build (./surfsense_backend, cu126, ./surfsense_backend/Dockerfile, backend, surfsense-backend, ubuntu-24.04-arm, linux/arm64, arm64, -cuda126, production, true, cuda126) (push) Blocked by required conditions
Build and Push Docker Images / build (./surfsense_backend, cu126, ./surfsense_backend/Dockerfile, backend, surfsense-backend, ubuntu-latest, linux/amd64, amd64, -cuda126, production, true, cuda126) (push) Blocked by required conditions
Build and Push Docker Images / build (./surfsense_backend, cu128, ./surfsense_backend/Dockerfile, backend, surfsense-backend, ubuntu-latest, linux/amd64, amd64, -cuda, production, true, cuda) (push) Blocked by required conditions
Build and Push Docker Images / verify_digests (push) Blocked by required conditions
Build and Push Docker Images / create_manifest (backend, surfsense-backend, , cpu) (push) Blocked by required conditions
Build and Push Docker Images / build (./surfsense_backend, cpu, ./surfsense_backend/Dockerfile, backend, surfsense-backend, ubuntu-latest, linux/amd64, amd64, , production, false, cpu) (push) Blocked by required conditions
Build and Push Docker Images / build (./surfsense_backend, cu128, ./surfsense_backend/Dockerfile, backend, surfsense-backend, ubuntu-24.04-arm, linux/arm64, arm64, -cuda, production, true, cuda) (push) Blocked by required conditions
Build and Push Docker Images / create_manifest (backend, surfsense-backend, -cuda, cuda) (push) Blocked by required conditions
Build and Push Docker Images / create_manifest (backend, surfsense-backend, -cuda126, cuda126) (push) Blocked by required conditions
Build and Push Docker Images / create_manifest (web, surfsense-web, , cpu) (push) Blocked by required conditions
Build and Push Docker Images / finalize_release (push) Blocked by required conditions
Obsidian Plugin Lint / lint (push) Waiting to run
chore: import upstream snapshot with attribution
2026-07-13 13:33:44 +08:00

166 lines
4.9 KiB
TypeScript

import { z } from "zod";
import {
type CreateWorkspaceRequest,
createWorkspaceRequest,
createWorkspaceResponse,
type DeleteWorkspaceRequest,
deleteWorkspaceRequest,
deleteWorkspaceResponse,
type GetWorkspaceRequest,
type GetWorkspacesRequest,
getWorkspaceRequest,
getWorkspaceResponse,
getWorkspacesRequest,
getWorkspacesResponse,
leaveWorkspaceResponse,
type UpdateWorkspaceApiAccessRequest,
type UpdateWorkspaceRequest,
updateWorkspaceApiAccessRequest,
updateWorkspaceApiAccessResponse,
updateWorkspaceRequest,
updateWorkspaceResponse,
} from "@/contracts/types/workspace.types";
import { ValidationError } from "../error";
import { baseApiService } from "./base-api.service";
class WorkspacesApiService {
/**
* Get a list of workspaces with optional filtering and pagination
*/
getWorkspaces = async (request?: GetWorkspacesRequest) => {
const parsedRequest = getWorkspacesRequest.safeParse(request || {});
if (!parsedRequest.success) {
console.error("Invalid request:", parsedRequest.error);
const errorMessage = parsedRequest.error.issues.map((issue) => issue.message).join(", ");
throw new ValidationError(`Invalid request: ${errorMessage}`);
}
// Transform query params to be string values
const transformedQueryParams = parsedRequest.data.queryParams
? Object.fromEntries(
Object.entries(parsedRequest.data.queryParams).map(([k, v]) => {
return [k, String(v)];
})
)
: undefined;
const queryParams = transformedQueryParams
? new URLSearchParams(transformedQueryParams).toString()
: "";
return baseApiService.get(`/api/v1/workspaces?${queryParams}`, getWorkspacesResponse);
};
/**
* Create a new workspace
*/
createWorkspace = async (request: CreateWorkspaceRequest) => {
const parsedRequest = createWorkspaceRequest.safeParse(request);
if (!parsedRequest.success) {
console.error("Invalid request:", parsedRequest.error);
const errorMessage = parsedRequest.error.issues.map((issue) => issue.message).join(", ");
throw new ValidationError(`Invalid request: ${errorMessage}`);
}
return baseApiService.post(`/api/v1/workspaces`, createWorkspaceResponse, {
body: parsedRequest.data,
});
};
/**
* Get a single workspace by ID
*/
getWorkspace = async (request: GetWorkspaceRequest) => {
const parsedRequest = getWorkspaceRequest.safeParse(request);
if (!parsedRequest.success) {
console.error("Invalid request:", parsedRequest.error);
const errorMessage = parsedRequest.error.issues.map((issue) => issue.message).join(", ");
throw new ValidationError(`Invalid request: ${errorMessage}`);
}
return baseApiService.get(`/api/v1/workspaces/${request.id}`, getWorkspaceResponse);
};
/**
* Update an existing workspace
*/
updateWorkspace = async (request: UpdateWorkspaceRequest) => {
const parsedRequest = updateWorkspaceRequest.safeParse(request);
if (!parsedRequest.success) {
console.error("Invalid request:", parsedRequest.error);
const errorMessage = parsedRequest.error.issues.map((issue) => issue.message).join(", ");
throw new ValidationError(`Invalid request: ${errorMessage}`);
}
return baseApiService.put(`/api/v1/workspaces/${request.id}`, updateWorkspaceResponse, {
body: parsedRequest.data.data,
});
};
updateWorkspaceApiAccess = async (request: UpdateWorkspaceApiAccessRequest) => {
const parsedRequest = updateWorkspaceApiAccessRequest.safeParse(request);
if (!parsedRequest.success) {
console.error("Invalid request:", parsedRequest.error);
const errorMessage = parsedRequest.error.issues.map((issue) => issue.message).join(", ");
throw new ValidationError(`Invalid request: ${errorMessage}`);
}
return baseApiService.put(
`/api/v1/workspaces/${request.id}/api-access`,
updateWorkspaceApiAccessResponse,
{
body: { api_access_enabled: parsedRequest.data.api_access_enabled },
}
);
};
/**
* Delete a workspace
*/
deleteWorkspace = async (request: DeleteWorkspaceRequest) => {
const parsedRequest = deleteWorkspaceRequest.safeParse(request);
if (!parsedRequest.success) {
console.error("Invalid request:", parsedRequest.error);
const errorMessage = parsedRequest.error.issues.map((issue) => issue.message).join(", ");
throw new ValidationError(`Invalid request: ${errorMessage}`);
}
return baseApiService.delete(`/api/v1/workspaces/${request.id}`, deleteWorkspaceResponse);
};
/**
* Trigger AI file sorting for all documents in a workspace
*/
triggerAiSort = async (workspaceId: number) => {
return baseApiService.post(
`/api/v1/workspaces/${workspaceId}/ai-sort`,
z.object({ message: z.string() }),
{}
);
};
/**
* Leave a workspace (remove own membership)
* This is used by non-owners to leave a shared workspace
*/
leaveWorkspace = async (workspaceId: number) => {
return baseApiService.delete(
`/api/v1/workspaces/${workspaceId}/members/me`,
leaveWorkspaceResponse
);
};
}
export const workspacesApiService = new WorkspacesApiService();