32: const d = await GET("/campaigns/wizard/options"); 47: const d = await GET("/campaigns/list?" + p); 79: async () => { await POST(`/campaigns/${b.dataset.del}/delete`); loadList(); }, 100: const d = await GET("/campaigns/list?page_size=100"); 131: try { const p = await GET(`/campaigns/${MON.id}/progress`); paintProgress(p); } 180: if (c.status === "draft") mk("Start", "", async () => { await POST(`/campaigns/${MON.id}/start`); toast("Campaign started", "ok"); startMonitor(); }); 181: if (c.status === "running") mk("Pause", "secondary", async () => { await POST(`/campaigns/${MON.id}/pause`); toast("Campaign paused", "ok"); startMonitor(); }); 182: if (c.status === "paused") mk("Resume", "", async () => { await POST(`/campaigns/${MON.id}/resume`); toast("Campaign resumed", "ok"); startMonitor(); }); 184: mk("Cancel", "danger-o", async () => { await POST(`/campaigns/${MON.id}/cancel`); toast("Campaign cancelled", "warn"); startMonitor(); }, 200: try { d = await GET(`/campaigns/${MON.id}/recipients?` + p); } 247: try { d = await POST(`/campaigns/${cid}/preview${size ? "?sample_size=" + size : ""}`, {}); } 281: const c = await GET(`/campaigns/${editingId}`); 564: const d = await POST("/campaigns/validate-step", { step: serverStep, data: snapshotFor(serverStep) }); 578: if (editingId) { saved = await POST(`/campaigns/${editingId}/patch`, payload); toast("Campaign updated", "ok"); } 579: else { saved = await POST("/campaigns/create", payload); toast(`Campaign #${saved.id} created`, "ok"); } 635: async () => { const r = await POST("/campaigns/clear-all"); loadList(); return `Cleared ${r.deleted ?? "?"} campaign(s)`; },