// Transport CalDAV isolé : récupère le flux iCalendar brut du calendrier // Nextcloud de l'Atelier du Huit en réutilisant la session du navigateur // (cookies). Aucun mot de passe stocké. Le module reste pur de toute // présentation : il renvoie un *type* d'erreur, pas un message. export const URL_CALENDRIER = "https://atelier-huit.frama.space/remote.php/dav/calendars/Pierre/latelier-du-huit-sbastien_shared_by_admin/?export"; // fetchImpl est injecté (obligatoire) pour la testabilité. // Résultat discriminé : { ok:true, flux } | { ok:false, erreur }. export async function recupererFluxCalendrier(fetchImpl) { let reponse; try { reponse = await fetchImpl(URL_CALENDRIER, { credentials: "include" }); } catch { return { ok: false, erreur: "reseau" }; } if (reponse.status === 401 || reponse.status === 403) { return { ok: false, erreur: "non-connecte" }; } if (!reponse.ok) { return { ok: false, erreur: "serveur" }; } const flux = await reponse.text(); // Piège central : une redirection vers la page de login renvoie un 200 HTML. if (!flux.trimStart().startsWith("BEGIN:VCALENDAR")) { return { ok: false, erreur: "non-connecte" }; } return { ok: true, flux }; }