import { request } from "$lib/api/client"; import type { Account, CaptureToggles, Chat, Folder, JobStatus, JobView, MediaVersion, MediaView, MessageVersion, MessageView, PeerView, PinnedView, PolicyChatKind, PolicyCreate, PolicyRecord, PresenceHourly, PresenceSample, ResponseStats, SearchHit, VolumeBucket, } from "$lib/api/types"; import { accounts } from "$lib/stores/accounts.svelte"; interface Page { limit?: number; offset?: number; } export function listAccounts(): Promise { return request("/accounts"); } export function listChats(page: Page = {}): Promise { return request("/chats", { account: true, query: { ...page } }); } export function listFolders(): Promise { return request("/folders", { account: true }); } export function listPolicies(): Promise { return request("/policy", { account: true }); } export function createPolicy(body: PolicyCreate): Promise { return request("/policy", { method: "POST", body: { ...body, account_id: accounts.selectedId }, }); } export function updatePolicy( id: number, toggles: CaptureToggles ): Promise { return request(`/policy/${id}`, { method: "PUT", body: toggles, }); } export function deletePolicy(id: number): Promise { return request(`/policy/${id}`, { method: "DELETE" }); } export function effectivePolicy(query: { chat_id: number; is_bot?: boolean; is_contact?: boolean | null; kind: PolicyChatKind; }): Promise { return request("/policy/effective", { account: true, query, }); } export function listMessages( chatId: number, options: Page & { include_deleted?: boolean } = {} ): Promise { return request(`/chats/${chatId}/messages`, { account: true, query: { ...options }, }); } export function getCurrentPresence( peerId: number ): Promise { return request("/presence/current", { account: true, query: { peer_id: peerId }, }); } export function getPresenceHistory( peerId: number, page: Page = {} ): Promise { return request("/presence", { account: true, query: { peer_id: peerId, ...page }, }); } export function getPresenceHourly(peerId: number): Promise { return request("/presence/hourly", { account: true, query: { peer_id: peerId }, }); } export function getMessageVolume( chatId: number, days = 90 ): Promise { return request("/analytics/volume", { account: true, query: { chat_id: chatId, days }, }); } export function getResponseStats(chatId: number): Promise { return request("/analytics/response-time", { account: true, query: { chat_id: chatId }, }); } export function getPinned(chatId: number): Promise { return request(`/chats/${chatId}/pinned`, { account: true, }); } export function listMessageVersions( chatId: number, messageId: number ): Promise { return request( `/chats/${chatId}/messages/${messageId}/versions`, { account: true } ); } export function listDeleted( options: Page & { chat_id?: number } = {} ): Promise { return request("/deleted", { account: true, query: { ...options }, }); } export function getPeer(peerId: number): Promise { return request(`/peers/${peerId}`, { account: true }); } export function getPeers(ids: number[]): Promise { if (ids.length === 0) { return Promise.resolve([]); } return request("/peers/batch", { account: true, query: { ids: ids.join(",") }, }); } export function enrichChat(chatId: number): Promise<{ job_id: number }> { return request<{ job_id: number }>(`/chats/${chatId}/enrich`, { method: "POST", body: { account_id: accounts.selectedId }, }); } export function getJob(jobId: number): Promise { return request(`/jobs/${jobId}`, { account: true }); } export function listJobs(status?: JobStatus): Promise { return request("/jobs", { account: true, query: status ? { status } : {}, }); } export function enqueueBackfill( chatId: number, media: boolean ): Promise<{ job_id: number }> { return request<{ job_id: number }>("/backfill", { method: "POST", body: { account_id: accounts.selectedId, chat_id: chatId, media }, }); } export function syncDialogs(): Promise<{ job_id: number }> { return request<{ job_id: number }>("/dialogs/sync", { method: "POST", body: { account_id: accounts.selectedId }, }); } export function getMediaVersions( chatId: number, messageId: number ): Promise { return request(`/media/versions/${chatId}/${messageId}`, { account: true, }); } export function getMediaMeta(mediaId: number): Promise { return request(`/media/${mediaId}/meta`); } export function getMessageMedia( chatId: number, messageId: number ): Promise { return request(`/media/message/${chatId}/${messageId}`, { account: true, }); } export function searchMessages( query: string, options: Page & { chat_id?: number } = {} ): Promise { return request("/search", { account: true, query: { query, ...options }, }); } export function fetchMedia( chatId: number, messageId: number ): Promise<{ job_id: number }> { return request<{ job_id: number }>("/media/fetch", { method: "POST", body: { account_id: accounts.selectedId, chat_id: chatId, message_id: messageId, }, }); }