Changeset 834bcc3 in Klonkt for src/services/SubscriberService.js
- Timestamp:
- 06/23/2026 06:14:27 PM (3 months ago)
- Branches:
- main
- Children:
- d774679
- Parents:
- bb42dfb
- File:
-
- 1 edited
-
src/services/SubscriberService.js (modified) (4 diffs)
Legend:
- Unmodified
- Added
- Removed
-
src/services/SubscriberService.js
rbb42dfb r834bcc3 1 1 /** 2 * SubscriberService — n ieuwsbrief-abonnees per site (premium feature #1).2 * SubscriberService — newsletter subscribers per site (premium feature #1). 3 3 * 4 * Double opt-in als SMTP er is (status 'pending' → 'confirmed' via confirm-link),5 * anders single opt-in ('confirmed' meteen). Elke abonnee heeft een token dat zowel6 * de confirm- als de unsubscribe-link draagt. Hergebruikt door #2 (download-voor-7 * email) en #8 (notify-me) als gedeelde abonnee-opslag.4 * Double opt-in when SMTP is configured (status 'pending' → 'confirmed' via 5 * confirm link), otherwise single opt-in ('confirmed' immediately). Each 6 * subscriber has a token used for both the confirm and unsubscribe links. 7 * Reused by #2 (download-for-email) and #8 (notify-me) as shared subscriber storage. 8 8 */ 9 9 … … 23 23 24 24 /** 25 * Voeg een abonnee toe (of heractiveer een uitgeschreven/bestaande).25 * Add a subscriber (or reactivate an unsubscribed/existing one). 26 26 * @returns {{ok:boolean, status?:string, token?:string, created?:boolean, error?:string}} 27 * status 'pending' → er moet nog bevestigd worden (stuur confirm-mail)28 * status 'confirmed'→ direct actief(single opt-in)27 * status 'pending' → confirmation still required (send confirm email) 28 * status 'confirmed'→ immediately active (single opt-in) 29 29 */ 30 30 export function addSubscriber(siteId, email, source = 'widget', { doubleOptin = false } = {}) { … … 37 37 38 38 if (existing) { 39 // Al actief → niets te doen (idempotent, geen dubbelemail).39 // Already confirmed → nothing to do (idempotent, no duplicate email). 40 40 if (existing.status === 'confirmed') return { ok: true, status: 'confirmed', token: existing.token, created: false }; 41 // Pending o f uitgeschreven → opnieuw uitnodigen/activeren met een versetoken.41 // Pending or unsubscribed → re-invite/reactivate with a fresh token. 42 42 const token = newToken(); 43 43 db.prepare("UPDATE subscribers SET status = ?, token = ?, source = ?, confirmed_at = CASE WHEN ? = 'confirmed' THEN CURRENT_TIMESTAMP ELSE NULL END WHERE id = ?") … … 69 69 } 70 70 71 /** Bevestigde abonnees (email + token) voor een site — voor het versturen.72 * Option eel filteren op bron (bv. 'notify' voor show-aankondigingen). */71 /** Confirmed subscribers (email + token) for a site — for sending newsletters. 72 * Optionally filter by source (e.g. 'notify' for show announcements). */ 73 73 export function confirmedFor(siteId, source) { 74 74 if (source) {
Note:
See TracChangeset
for help on using the changeset viewer.
![(please configure the [header_logo] section in trac.ini)](/chrome/site/your_project_logo.png)