55 lines
1.4 KiB
TypeScript
55 lines
1.4 KiB
TypeScript
/** 项目工作流受控文档 API */
|
|
|
|
import { getBearerAuthHeaders } from './authHeaders';
|
|
|
|
export type WorkflowDocumentSummary = {
|
|
doc_id: string;
|
|
project_id: number;
|
|
task_key: string;
|
|
title: string;
|
|
lifecycle_state: string;
|
|
is_template_only: boolean;
|
|
content_sha256?: string;
|
|
work_dir?: string;
|
|
version?: number;
|
|
updated_at?: string;
|
|
lease_holder_type?: 'squad' | 'human' | '';
|
|
lease_holder_id?: string;
|
|
lease_expires_at?: string;
|
|
lease_heartbeat_at?: string;
|
|
};
|
|
|
|
export type ControlledDocumentContent = {
|
|
doc_id: string;
|
|
version: number;
|
|
content_sha256: string;
|
|
markdown: string;
|
|
is_template_only: boolean;
|
|
};
|
|
|
|
export async function listProjectWorkflowDocuments(
|
|
projectId: number,
|
|
): Promise<WorkflowDocumentSummary[]> {
|
|
const resp = await fetch(
|
|
`/api/v1/projects/${projectId}/documents?category=workflow`,
|
|
{ headers: getBearerAuthHeaders() },
|
|
);
|
|
if (!resp.ok) {
|
|
throw new Error(`list project workflow documents failed: ${resp.status}`);
|
|
}
|
|
const data = await resp.json();
|
|
return Array.isArray(data) ? data : [];
|
|
}
|
|
|
|
export async function fetchControlledDocumentContent(
|
|
docId: string,
|
|
): Promise<ControlledDocumentContent> {
|
|
const resp = await fetch(`/api/v1/docgov/documents/${encodeURIComponent(docId)}/content`, {
|
|
headers: getBearerAuthHeaders(),
|
|
});
|
|
if (!resp.ok) {
|
|
throw new Error(`fetch controlled document content failed: ${resp.status}`);
|
|
}
|
|
return resp.json();
|
|
}
|