diff --git a/src/api/client.ts b/src/api/client.ts index cd7527a..d10e041 100644 --- a/src/api/client.ts +++ b/src/api/client.ts @@ -20,16 +20,12 @@ import type { Message, MindSpaceAgentJob, MindSpaceQuota, - MindSpacePublication, - MindSpacePublicationStats, - MindSpacePublishCheck, PageDataAccessPolicy, PageDataDatasetSummary, PageDataLogEntry, PageDataOpsOverview, PlazaCategory, PlazaPostBrief, - MindSpaceRedactedCopyResult, FeedbackContextInput, FeedbackImageInput, FeedbackSubmission, @@ -62,7 +58,7 @@ import { resetUnauthorizedGuard, sanitizeSessionEvent, } from './core'; -import { getMindSpacePage, type MindSpaceListPage } from './mindspace-pages'; +import type { MindSpaceListPage } from './mindspace-pages'; export { ApiError, resetUnauthorizedGuard, setUnauthorizedHandler } from './core'; export { buildMindSpaceConversationPackageManifestDownloadUrl, @@ -97,6 +93,16 @@ export { updateMindSpacePage, uploadMindSpacePageThumbnail, } from './mindspace-pages'; +export { + checkMindSpacePagePublication, + createMindSpaceRedactedCopy, + fixMindSpacePagePublication, + getMindSpacePublicationStats, + offlineMindSpacePublication, + publishMindSpacePage, + redactMindSpacePage, + updatePublicationStatus, +} from './mindspace-publications'; const AGENT_CONNECT_TIMEOUT_MS = 60_000; const QUICK_PLAZA_TIMEOUT_MS = 120_000; @@ -601,80 +607,6 @@ export async function fetchPreviewAsset(path: string): Promise { return URL.createObjectURL(blob); } -export async function checkMindSpacePagePublication( - pageId: string, - input: { - pageVersionId: string; - accessMode: MindSpacePublishCheck['accessMode']; - urlSlug: string; - password?: string; - expiresAt?: number | null; - }, -): Promise { - const result = await apiFetch<{ data: MindSpacePublishCheck }>( - `/mindspace/v1/pages/${encodeURIComponent(pageId)}/publish-check`, - { - method: 'POST', - body: JSON.stringify({ - page_version_id: input.pageVersionId, - access_mode: input.accessMode, - url_slug: input.urlSlug, - password: input.password, - expires_at: input.expiresAt, - }), - }, - ); - return result.data; -} - -export async function publishMindSpacePage( - pageId: string, - input: { - pageVersionId: string; - accessMode: MindSpacePublishCheck['accessMode']; - urlSlug: string; - acknowledgedFindingIds: string[]; - password?: string; - expiresAt?: number | null; - }, -): Promise { - const result = await apiFetch<{ data: MindSpacePublication }>( - `/mindspace/v1/pages/${encodeURIComponent(pageId)}/publish`, - { - method: 'POST', - body: JSON.stringify({ - page_version_id: input.pageVersionId, - access_mode: input.accessMode, - url_slug: input.urlSlug, - password: input.password, - expires_at: input.expiresAt, - acknowledged_finding_ids: input.acknowledgedFindingIds, - }), - }, - ); - return result.data; -} - -export async function updatePublicationStatus( - publicationId: string, - input: { - accessMode: MindSpacePublishCheck['accessMode']; - expiresAt?: number | null; - }, -): Promise { - const result = await apiFetch<{ data: MindSpacePublication }>( - `/mindspace/v1/publications/${encodeURIComponent(publicationId)}/update-status`, - { - method: 'POST', - body: JSON.stringify({ - access_mode: input.accessMode, - expires_at: input.expiresAt, - }), - }, - ); - return result.data; -} - export async function listOwnerPageDataPolicies(): Promise< Array<{ pageId: string; @@ -834,89 +766,6 @@ export async function restorePageDataRow( return result.data; } -export async function redactMindSpacePage( - pageId: string, - input: { - pageVersionId: string; - expectedVersion: number; - title: string; - summary: string; - content: string; - }, -): Promise { - const result = await apiFetch<{ data: MindSpaceRedactedCopyResult }>( - `/mindspace/v1/pages/${encodeURIComponent(pageId)}/redact`, - { - method: 'POST', - body: JSON.stringify({ - page_version_id: input.pageVersionId, - expected_version: input.expectedVersion, - title: input.title, - summary: input.summary, - content: input.content, - }), - }, - ); - return result.data; -} - -export async function fixMindSpacePagePublication( - pageId: string, - input: { - pageVersionId: string; - expectedVersion: number; - title: string; - summary: string; - content: string; - }, -): Promise { - const result = await apiFetch<{ data: MindSpaceRedactedCopyResult }>( - `/mindspace/v1/pages/${encodeURIComponent(pageId)}/publish-fix`, - { - method: 'POST', - body: JSON.stringify({ - page_version_id: input.pageVersionId, - expected_version: input.expectedVersion, - title: input.title, - summary: input.summary, - content: input.content, - }), - }, - ); - return result.data; -} - -/** @deprecated use redactMindSpacePage */ -export async function createMindSpaceRedactedCopy( - pageId: string, - pageVersionId: string, -): Promise { - const page = await getMindSpacePage(pageId); - return redactMindSpacePage(pageId, { - pageVersionId, - expectedVersion: page.versionNo, - title: page.title, - summary: page.summary, - content: page.content ?? '', - }); -} - -export async function offlineMindSpacePublication(publicationId: string): Promise { - await apiFetch( - `/mindspace/v1/publications/${encodeURIComponent(publicationId)}/offline`, - { method: 'POST', body: JSON.stringify({}) }, - ); -} - -export async function getMindSpacePublicationStats( - publicationId: string, -): Promise { - const result = await apiFetch<{ data: MindSpacePublicationStats }>( - `/mindspace/v1/publications/${encodeURIComponent(publicationId)}/stats`, - ); - return result.data; -} - export async function listPlazaCategories(): Promise { const result = await apiFetch<{ data: { categories: PlazaCategory[] } }>('/plaza/v1/categories'); return result.data.categories; diff --git a/src/api/mindspace-publications.ts b/src/api/mindspace-publications.ts new file mode 100644 index 0000000..213ae06 --- /dev/null +++ b/src/api/mindspace-publications.ts @@ -0,0 +1,165 @@ +import type { + MindSpacePublication, + MindSpacePublicationStats, + MindSpacePublishCheck, + MindSpaceRedactedCopyResult, +} from '../types'; +import { apiFetch } from './core'; +import { getMindSpacePage } from './mindspace-pages'; + +export async function checkMindSpacePagePublication( + pageId: string, + input: { + pageVersionId: string; + accessMode: MindSpacePublishCheck['accessMode']; + urlSlug: string; + password?: string; + expiresAt?: number | null; + }, +): Promise { + const result = await apiFetch<{ data: MindSpacePublishCheck }>( + `/mindspace/v1/pages/${encodeURIComponent(pageId)}/publish-check`, + { + method: 'POST', + body: JSON.stringify({ + page_version_id: input.pageVersionId, + access_mode: input.accessMode, + url_slug: input.urlSlug, + password: input.password, + expires_at: input.expiresAt, + }), + }, + ); + return result.data; +} + +export async function publishMindSpacePage( + pageId: string, + input: { + pageVersionId: string; + accessMode: MindSpacePublishCheck['accessMode']; + urlSlug: string; + acknowledgedFindingIds: string[]; + password?: string; + expiresAt?: number | null; + }, +): Promise { + const result = await apiFetch<{ data: MindSpacePublication }>( + `/mindspace/v1/pages/${encodeURIComponent(pageId)}/publish`, + { + method: 'POST', + body: JSON.stringify({ + page_version_id: input.pageVersionId, + access_mode: input.accessMode, + url_slug: input.urlSlug, + password: input.password, + expires_at: input.expiresAt, + acknowledged_finding_ids: input.acknowledgedFindingIds, + }), + }, + ); + return result.data; +} + +export async function updatePublicationStatus( + publicationId: string, + input: { + accessMode: MindSpacePublishCheck['accessMode']; + expiresAt?: number | null; + }, +): Promise { + const result = await apiFetch<{ data: MindSpacePublication }>( + `/mindspace/v1/publications/${encodeURIComponent(publicationId)}/update-status`, + { + method: 'POST', + body: JSON.stringify({ + access_mode: input.accessMode, + expires_at: input.expiresAt, + }), + }, + ); + return result.data; +} + +export async function redactMindSpacePage( + pageId: string, + input: { + pageVersionId: string; + expectedVersion: number; + title: string; + summary: string; + content: string; + }, +): Promise { + const result = await apiFetch<{ data: MindSpaceRedactedCopyResult }>( + `/mindspace/v1/pages/${encodeURIComponent(pageId)}/redact`, + { + method: 'POST', + body: JSON.stringify({ + page_version_id: input.pageVersionId, + expected_version: input.expectedVersion, + title: input.title, + summary: input.summary, + content: input.content, + }), + }, + ); + return result.data; +} + +export async function fixMindSpacePagePublication( + pageId: string, + input: { + pageVersionId: string; + expectedVersion: number; + title: string; + summary: string; + content: string; + }, +): Promise { + const result = await apiFetch<{ data: MindSpaceRedactedCopyResult }>( + `/mindspace/v1/pages/${encodeURIComponent(pageId)}/publish-fix`, + { + method: 'POST', + body: JSON.stringify({ + page_version_id: input.pageVersionId, + expected_version: input.expectedVersion, + title: input.title, + summary: input.summary, + content: input.content, + }), + }, + ); + return result.data; +} + +/** @deprecated use redactMindSpacePage */ +export async function createMindSpaceRedactedCopy( + pageId: string, + pageVersionId: string, +): Promise { + const page = await getMindSpacePage(pageId); + return redactMindSpacePage(pageId, { + pageVersionId, + expectedVersion: page.versionNo, + title: page.title, + summary: page.summary, + content: page.content ?? '', + }); +} + +export async function offlineMindSpacePublication(publicationId: string): Promise { + await apiFetch( + `/mindspace/v1/publications/${encodeURIComponent(publicationId)}/offline`, + { method: 'POST', body: JSON.stringify({}) }, + ); +} + +export async function getMindSpacePublicationStats( + publicationId: string, +): Promise { + const result = await apiFetch<{ data: MindSpacePublicationStats }>( + `/mindspace/v1/publications/${encodeURIComponent(publicationId)}/stats`, + ); + return result.data; +}