You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
40 lines
1.4 KiB
TypeScript
40 lines
1.4 KiB
TypeScript
// frontend/lib/proactive/api.ts — 능동 카드 + 워커 수동 트리거
|
|
import type {
|
|
ProactiveCard,
|
|
ProactiveAcceptResult,
|
|
WorkerRunResult,
|
|
} from "@/lib/types";
|
|
|
|
const BASE = process.env.NEXT_PUBLIC_API_BASE ?? (typeof window === "undefined" ? "http://localhost:31800" : "");
|
|
|
|
export async function getProactive(signal?: AbortSignal): Promise<ProactiveCard[]> {
|
|
const res = await fetch(`${BASE}/api/proactive`, { signal, cache: "no-store" });
|
|
if (!res.ok) throw new Error(`proactive ${res.status}`);
|
|
return res.json();
|
|
}
|
|
|
|
export async function acceptProactive(id: string): Promise<ProactiveAcceptResult> {
|
|
const res = await fetch(`${BASE}/api/proactive/${id}/accept`, { method: "POST" });
|
|
if (!res.ok) throw new Error(`proactive accept ${res.status}`);
|
|
return res.json();
|
|
}
|
|
|
|
export async function dismissProactive(id: string): Promise<{ ok: boolean }> {
|
|
const res = await fetch(`${BASE}/api/proactive/${id}/dismiss`, { method: "POST" });
|
|
if (!res.ok) throw new Error(`proactive dismiss ${res.status}`);
|
|
return res.json();
|
|
}
|
|
|
|
export async function runWorkerJob(
|
|
job: string,
|
|
payload?: Record<string, unknown>,
|
|
): Promise<WorkerRunResult> {
|
|
const res = await fetch(`${BASE}/api/worker/run/${job}`, {
|
|
method: "POST",
|
|
headers: { "Content-Type": "application/json" },
|
|
body: JSON.stringify(payload ?? {}),
|
|
});
|
|
if (!res.ok) throw new Error(`worker ${job} ${res.status}`);
|
|
return res.json();
|
|
}
|