// frontend/lib/connectors/api.ts — connectorsApi (목록/동기화/해제/임포트/OAuth) import type { ConnectorStatus, SyncResult, ImportResult, OAuthStart, ConnectorProvider, } from "@/lib/types"; async function ok(r: Response): Promise { if (!r.ok) throw new Error(`${r.status} ${r.statusText}`); return r.json() as Promise; } export const connectorsApi = { list: (domain = "") => fetch(domain ? `/api/connectors?domain=${encodeURIComponent(domain)}` : "/api/connectors", { cache: "no-store", }).then((r) => ok(r)), sync: (id: string) => fetch(`/api/connectors/${id}/sync`, { method: "POST" }).then((r) => ok(r)), syncAll: () => fetch("/api/connectors/sync-all", { method: "POST" }).then((r) => ok(r)), disconnect: (id: string) => fetch(`/api/connectors/${id}/disconnect`, { method: "POST" }).then((r) => ok(r), ), importFile: (id: string, file: File) => { const fd = new FormData(); fd.append("file", file); return fetch(`/api/connectors/${id}/import`, { method: "POST", body: fd, }).then((r) => ok(r)); }, providers: (domain = "") => fetch( domain ? `/api/connectors/providers?domain=${encodeURIComponent(domain)}` : "/api/connectors/providers", { cache: "no-store" }, ).then((r) => ok(r)), oauthStart: (domain: string, provider: string, redirectAfter = "/settings") => { const q = new URLSearchParams({ domain, provider, redirect_after: redirectAfter }); return fetch(`/api/connectors/oauth/start?${q.toString()}`).then((r) => ok(r)); }, };