- Timestamp:
- 09/23/2026 03:13:00 PM (5 hours ago)
- Branches:
- main
- Parents:
- 0ad37a0
- File:
-
- 1 edited
-
src/services/guardianship/delivery.js (modified) (3 diffs)
Legend:
- Unmodified
- Added
- Removed
-
src/services/guardianship/delivery.js
r0ad37a0 r407353e 35 35 } 36 36 37 /** 38 * Heeft dit directe bericht iets te zeggen? Puur, zodat de regel te toetsen is 39 * zonder database, netwerk of scherm. 40 * 41 * EEN FOTO KAN HET HELE BERICHT ZIJN. Hier stond alleen `!text.trim()`, en dat 42 * betekende: een direct bericht zonder woorden gaf null terug, waar de inname 43 * "502 direct_failed" van maakte. Precies wat je kreeg als je een foto op een 44 * gesprek liet vallen en niets typte -- de inname liet een bijlage-only note 45 * door, en deze laag eronder weigerde hem alsnog. Twee lagen die het niet eens 46 * waren over wat een bericht is. 47 * 48 * Een leeg bericht blijft geweigerd: geen tekst, geen opmaak en geen bijlage is 49 * niets, en dat hoort niet de deur uit te gaan. 50 */ 51 export function directNoteHasContent({ text, html, attachments } = {}) { 52 if (String(text || '').trim()) return true; 53 if (String(html || '').trim()) return true; 54 return Array.isArray(attachments) && attachments.length > 0; 55 } 56 37 57 // A direct note: a NEW conversation (or a direct reply) addressed to specific 38 58 // actors only. Stored in ap_outbox with visibility 'direct' + the recipient … … 53 73 const base = (process.env.PUBLIC_BASE_URL || '').replace(/\/+$/, ''); 54 74 const list = [...new Set((recipients || []).filter((u) => /^https?:\/\//i.test(String(u || ''))))].slice(0, 8); 55 if (!base || !site || !site.slug || !list.length || !String(text || '').trim()) return null; 75 if (!base || !site || !site.slug || !list.length) return null; 76 if (!directNoteHasContent({ text, html, attachments })) return null; 56 77 const me = actorId(base, site.slug); 57 78 // Resolve every recipient for a mention anchor + a delivery inbox. … … 108 129 const richClean = html ? deps.sanitizeHtml(String(html)) : ''; 109 130 const rich = richClean && deps.htmlToPlainText(richClean).trim() ? richClean : ''; 110 const body = escHtml(String(text ).trim()).replace(/\r?\n/g, '<br>');131 const body = escHtml(String(text || '').trim()).replace(/\r?\n/g, '<br>'); 111 132 // De mention-anker blijft een eigen alinea vooraan: de ontvanger moet in het 112 133 // bericht genoemd staan, ook als de rijke inhoud met een kop of lijst begint.
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)