import { apiRequest, type ApiSession } from './client' export type DatasetSourceKind = 'manual' | 'link' | 'rss' export type DatasetSourceDTO = { id: string name: string kind: DatasetSourceKind url: string description: string enabled: boolean lastSyncedAt: string | null itemCount: number createdAt: string updatedAt: string } export type DatasetItemDTO = { id: string sourceId: string title: string summary: string content: string url: string status: 'unread' | 'read' | 'archived' starred: boolean publishedAt: string | null createdAt: string updatedAt: string } export type DatasetCronDTO = { id: string sourceId: string schedule: string status: string enabled: boolean nextRunAt: string | null lastRunAt: string | null lastResult: string createdAt: string updatedAt: string } export type DatasetSourceInput = { name: string kind: DatasetSourceKind url: string description: string enabled: boolean } export type DatasetItemUpdate = { status: DatasetItemDTO['status'] starred: boolean } export function listDatasetSources(session: ApiSession, signal?: AbortSignal) { return apiRequest('/api/v1/dataset-sources', { token: session.token, signal }) } export function createDatasetSource(session: ApiSession, input: DatasetSourceInput) { return apiRequest('/api/v1/dataset-sources', { method: 'POST', token: session.token, body: input, }) } export function updateDatasetSource(session: ApiSession, sourceId: string, input: DatasetSourceInput) { return apiRequest(`/api/v1/dataset-sources/${sourceId}`, { method: 'PATCH', token: session.token, body: input, }) } export function deleteDatasetSource(session: ApiSession, sourceId: string) { return apiRequest(`/api/v1/dataset-sources/${sourceId}`, { method: 'DELETE', token: session.token, responseType: 'void', }) } export function listDatasetItems(session: ApiSession, sourceId?: string, signal?: AbortSignal) { const query = sourceId ? `?sourceId=${encodeURIComponent(sourceId)}` : '' return apiRequest(`/api/v1/dataset-items${query}`, { token: session.token, signal }) } export function updateDatasetItem(session: ApiSession, itemId: string, input: DatasetItemUpdate) { return apiRequest(`/api/v1/dataset-items/${itemId}`, { method: 'PATCH', token: session.token, body: input, }) } export function queueDatasetSync(session: ApiSession) { return apiRequest('/api/v1/dataset-crons/sync', { method: 'POST', token: session.token, body: {}, }) }