Mon espace

Accédez à vos factures et attestations. Connexion sécurisée par lien e-mail — pas de mot de passe.

Mon espace

Mon abonnement

Factures, moyen de paiement, résiliation — portail sécurisé Stripe.

Mes factures

FactureDateMontantStatut
Aucune facture pour le moment.

Mes attestations

Attestation d'abonnement
Confirme votre abonnement REP·Pro actif.
Attestation de prise en charge
REP·Pro prépare votre déclaration REP emballages.
Ces attestations sont des documents informatifs. Elles ne valent pas attestation de conformité réglementaire : la filière REP emballages professionnels est reportée (aucune date officielle) et aucune déclaration n'est exigible à ce jour.
"; var w = window.open("", "_blank"); if(!w){ alert("Autorisez les pop-ups pour télécharger l'attestation."); return; } w.document.open(); w.document.write(html); w.document.close(); } [].forEach.call(document.querySelectorAll("[data-att]"), function(b){ b.onclick = function(){ attestation(b.getAttribute("data-att")); }; }); // ----- chargement des données ----- async function loadEspace(){ if(window.__DEMO_ESPACE__ && location.protocol==="file:"){ data = window.__DEMO_ESPACE__; showApp(); render(); return; } // aperçu local uniquement var token = session && session.access_token; if(!token) return; var r; try { r = await fetch(CONFIG.API + "/espace", {method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({token:token})}); } catch(e){ $("loginMsg").style.color="var(--danger)"; $("loginMsg").textContent = "Connexion au serveur impossible, réessayez."; return; } if(!r.ok){ $("loginMsg").style.color="var(--danger)"; $("loginMsg").textContent = "Service indisponible ("+r.status+"), réessayez plus tard."; return; } try { data = await r.json(); } catch(e){ $("loginMsg").style.color="var(--danger)"; $("loginMsg").textContent = "Réponse invalide du serveur."; return; } if(data.error){ $("loginMsg").style.color="var(--danger)"; $("loginMsg").textContent = "Erreur : "+data.error; return; } showApp(); render(); } function showApp(){ $("login").classList.add("hide"); $("app").classList.remove("hide"); } // ----- connexion (OTP e-mail / lien magique) ----- $("sendLink").onclick = async function(){ var email = $("email").value.trim(), m = $("loginMsg"); if(!/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(email)){ m.style.color="var(--danger)"; m.textContent="Vérifiez votre e-mail."; return; } if(!sb){ m.style.color="var(--danger)"; m.textContent="Espace non configuré (SUPABASE_URL / clé)."; return; } var res = await sb.auth.signInWithOtp({ email: email, options: { emailRedirectTo: location.origin + location.pathname, shouldCreateUser: true } }); if(res.error){ m.style.color="var(--danger)"; m.textContent="Erreur : "+res.error.message; return; } m.style.color="var(--brand-ink)"; m.textContent="✓ Lien envoyé — ouvrez l'e-mail pour vous connecter."; }; $("logout").onclick = async function(){ if(sb) await sb.auth.signOut(); location.reload(); }; // ----- démarrage ----- (async function(){ if(window.__DEMO_ESPACE__ && location.protocol==="file:"){ loadEspace(); return; } // aperçu local uniquement if(!window.supabase || CONFIG.SUPABASE_URL.indexOf("REMPLACER")===0){ $("loginMsg").style.color="var(--muted)"; $("loginMsg").textContent="Votre espace arrive très bientôt. En attendant, écrivez-nous à [email protected] — on s'occupe de tout."; return; } sb = window.supabase.createClient(CONFIG.SUPABASE_URL, CONFIG.SUPABASE_ANON_KEY); var s = await sb.auth.getSession(); session = s.data && s.data.session; if(session) loadEspace(); sb.auth.onAuthStateChange(function(_e, sess){ if(sess){ session = sess; loadEspace(); } }); })();