try { const d = await GET("/campaigns/list?page_size=100"); campaigns = d.campaigns || []; }
catch { campaigns = []; }
}
function renderFilters() {
const f = $("#filters");
const campOpts = [{ v: "", t: "All campaigns" }].concat(
campaigns.map(c => ({ v: String(c.id), t: `#${c.id} — ${c.name}`.slice(0, 60) })));
if (tab === "attempts") {
f.innerHTML =
sel("fCamp", campOpts, st._camp || "") +
sel("fOutcome", OUTCOMES.map(o => ({ v: o, t: o ? o.replace("_", " ") : "All outcomes" })), st._out || "") +
`` +
``;
$("#fGo").onclick = applyFilters;
$("#fSearch").onkeydown = e => { if (e.key === "Enter") applyFilters(); };
} else if (tab === "events") {
f.innerHTML =
sel("fCamp", campOpts, st._camp || "") +
sel("fEvType", ["", "queued", "submitted", "accepted", "failed", "retry_scheduled",
"suppressed", "unsubscribed", "bounced", "dlq"].map(o =>
({ v: o, t: o ? o.replace("_", " ") : "All event types" })), st._ev || "") +
``;
$("#fGo").onclick = applyFilters;
} else if (tab === "audit") {
f.innerHTML =
sel("fAction", ["", "auth.login", "auth.register", "campaign.create", "campaign.start",
"campaign.pause", "campaign.resume", "campaign.cancel",
"recipients.import", "recipients.manual_add", "subjects.import",
"templates.upload", "attachments.upload", "phones.import",
"suppression.add", "gmail.connect", "gmail.disconnect", "gmail.import_config",
"settings.save_batch", "settings.reset"].map(o =>
({ v: o, t: o ? o.replace(/\./g, " › ") : "All actions" })), st._act || "") +
``;
$("#fGo").onclick = applyFilters;
} else {
f.innerHTML = `Jobs that exhausted all retries and were moved to the dead-letter queue (dlq:send).`;
}
}
function applyFilters() {
if (tab === "attempts") {
st._camp = $("#fCamp").value; st._out = $("#fOutcome").value; st._q = $("#fSearch").value.trim();
} else if (tab === "events") {
st._camp = $("#fCamp").value; st._ev = $("#fEvType").value;
} else if (tab === "audit") {
st._act = $("#fAction").value;
}
st[tab] = 1;
load();
}
function pagerHTML(total, page, key) {
const pages = Math.max(1, Math.ceil(total / PS));
if (pages <= 1) return "";
return `