64 lines
2.6 KiB
JavaScript
64 lines
2.6 KiB
JavaScript
/* =====================================================================
|
|
supporter.js — gemeinsame Helfer für abonnieren.html + supporter.html
|
|
(Dogfather Supporter-Abo). Eigenes, von main.js/forms.js
|
|
komplett getrenntes Token-System (localStorage-Key "supporterToken"),
|
|
siehe cloudflare-worker/src/lib/supporter-auth.js.
|
|
===================================================================== */
|
|
(function () {
|
|
const API_BASE = "https://dogfather-universe-postfach.dogfather1608.workers.dev";
|
|
|
|
function getToken() {
|
|
return localStorage.getItem("supporterToken") || "";
|
|
}
|
|
function setToken(token) {
|
|
localStorage.setItem("supporterToken", token);
|
|
}
|
|
function clearToken() {
|
|
localStorage.removeItem("supporterToken");
|
|
localStorage.removeItem("supporterSubStatus");
|
|
localStorage.removeItem("supporterDisplayName");
|
|
}
|
|
/* Wird vom Nav-Abo-Button in main.js gelesen (renderAboButton), damit die
|
|
Beschriftung/das Ziel sofort beim nächsten Seitenwechsel stimmt, ohne
|
|
dass main.js selbst einen API-Aufruf machen muss. */
|
|
function cacheSubStatus(status) {
|
|
if (status) localStorage.setItem("supporterSubStatus", status);
|
|
else localStorage.removeItem("supporterSubStatus");
|
|
}
|
|
/* Name der eingeloggten Person (aus /supporter/me → profile.displayName) —
|
|
damit der Nav-Knopf bei aktivem Abo statt des generischen "Supporter-
|
|
Bereich" gleich den Benutzernamen zeigen kann (Nutzer-Feedback
|
|
03.08.2026). Wird von abonnieren.html/supporter.html nach jedem
|
|
erfolgreichen /supporter/me-Aufruf gesetzt. */
|
|
function cacheDisplayName(name) {
|
|
if (name) localStorage.setItem("supporterDisplayName", name);
|
|
else localStorage.removeItem("supporterDisplayName");
|
|
}
|
|
|
|
async function apiFetch(path, body, authed) {
|
|
const headers = { "Content-Type": "application/json" };
|
|
if (authed) headers.Authorization = `Bearer ${getToken()}`;
|
|
let res;
|
|
try {
|
|
res = await fetch(`${API_BASE}${path}`, { method: "POST", headers, body: JSON.stringify(body || {}) });
|
|
} catch {
|
|
throw new Error("Verbindung zum Server fehlgeschlagen. Bitte prüfe deine Internetverbindung.");
|
|
}
|
|
let data = null;
|
|
try {
|
|
data = await res.json();
|
|
} catch {
|
|
/* leere Antwort ist ok, z.B. bei manchen Fehlern */
|
|
}
|
|
if (!res.ok || !data || data.ok === false) {
|
|
const err = new Error((data && data.error) || `Anfrage fehlgeschlagen (${res.status}).`);
|
|
err.code = data && data.code;
|
|
err.status = res.status;
|
|
throw err;
|
|
}
|
|
return data;
|
|
}
|
|
|
|
window.DogiSupporter = { API_BASE, getToken, setToken, clearToken, cacheSubStatus, cacheDisplayName, apiFetch };
|
|
})();
|