Changeset 32a4ffb in Klonkt
- Timestamp:
- 08/06/2026 01:27:37 PM (5 weeks ago)
- Branches:
- main
- Children:
- 621126b
- Parents:
- 279ca0b
- git-author:
- Robin <roboburr@…> (08/06/2026 01:27:28 PM)
- git-committer:
- roboburr <roboburr@…> (08/06/2026 01:27:37 PM)
- Files:
-
- 1 added
- 2 edited
-
src/config/database.js (modified) (1 diff)
-
src/services/ActivityPubService.js (modified) (2 diffs)
-
test/seen-notes.test.js (added)
Legend:
- Unmodified
- Added
- Removed
-
src/config/database.js
r279ca0b r32a4ffb 469 469 UNIQUE(slug, actor_uri) 470 470 ); 471 -- Antwoorden van accounts die we volgen komen gewoon binnen, ondertekend 472 -- door de schrijver, maar horen niet in de Krant (belongsInTimeline) en 473 -- werden daarna nergens bewaard. Kwam er later een doorgestuurd antwoord OP 474 -- zo'n bericht, dan kenden we de ouder niet en wezen we het af (shaer-e9g). 475 -- Alleen de URI, geen inhoud: dit voedt uitsluitend de vraag "kennen wij dit 476 -- bericht?". Wordt na 30 dagen gesnoeid; doorsturen gebeurt kort na het 477 -- antwoord, dus langer bewaren levert niets op. 478 CREATE TABLE IF NOT EXISTS ap_seen_notes ( 479 uri TEXT PRIMARY KEY, 480 created_at DATETIME DEFAULT CURRENT_TIMESTAMP 481 ); 482 CREATE INDEX IF NOT EXISTS idx_ap_seen_notes_age ON ap_seen_notes(created_at); 471 483 CREATE TABLE IF NOT EXISTS ap_timeline ( 472 484 id TEXT NOT NULL, -- the remote note's AP id -
src/services/ActivityPubService.js
r279ca0b r32a4ffb 1715 1715 if (db.prepare('SELECT 1 FROM ap_timeline WHERE id = ? LIMIT 1').get(uri)) return true; 1716 1716 if (db.prepare('SELECT 1 FROM ap_interactions WHERE object_uri = ? LIMIT 1').get(uri)) return true; 1717 // Een antwoord dat we al bezorgd kregen van iemand die we volgen (shaer-e9g). 1718 if (db.prepare('SELECT 1 FROM ap_seen_notes WHERE uri = ? LIMIT 1').get(uri)) return true; 1717 1719 } catch { /* bij twijfel niet ophalen */ } 1718 1720 return false; 1719 1721 } 1722 1723 /** 1724 * Onthoud dat we dit bericht al eens bezorgd kregen. 1725 * 1726 * Alleen de URI. Geen inhoud, niets op het scherm, geen tweede weergave -- dit 1727 * beantwoordt uitsluitend de vraag "kennen wij dit bericht?" die knownNoteUri 1728 * stelt voordat er iets bij de bron wordt opgehaald. 1729 * 1730 * De beller bepaalt WIE er onthouden wordt, en dat is de hele veiligheidsvraag: 1731 * onthouden we zomaar alles wat iemand aflevert, dan kan een vreemde eerst een 1732 * bericht neerleggen en daarna met een doorgestuurd antwoord dáárop ons naar een 1733 * adres van zijn keuze sturen. Vandaar dat handleInbox dit alleen doet voor 1734 * schrijvers die je zelf volgt. 1735 */ 1736 const SEEN_NOTES_DAYS = 30; 1737 let _seenSinceSnoei = 0; 1738 function rememberNoteUri(uri) { 1739 if (!uri || typeof uri !== 'string') return; 1740 try { 1741 db.prepare('INSERT OR IGNORE INTO ap_seen_notes (uri) VALUES (?)').run(uri); 1742 // Af en toe opruimen, niet bij het opstarten: een server die weken doorloopt 1743 // zou anders nooit snoeien. Doorsturen gebeurt kort na het antwoord, dus wat 1744 // ouder is dan een maand beantwoordt geen enkele vraag meer. 1745 if (++_seenSinceSnoei >= 500) { 1746 _seenSinceSnoei = 0; 1747 const r = db.prepare(`DELETE FROM ap_seen_notes WHERE created_at < datetime('now', '-${SEEN_NOTES_DAYS} days')`).run(); 1748 if (r.changes) console.log(`[AP] seen notes: ${r.changes} pruned`); 1749 } 1750 } catch { /* niet fataal */ } 1751 } 1752 const isFollowedActor = (uri) => { 1753 try { return !!db.prepare('SELECT 1 FROM ap_following WHERE actor_uri = ? LIMIT 1').get(uri); } catch { return false; } 1754 }; 1720 1755 1721 1756 // Mislukte dereferences kort onthouden. Mastodon herhaalt een bezorging … … 2124 2159 console.log('[AP] timeline +', actorUri, 'x' + subs.length); 2125 2160 } 2161 } 2162 // Een ANTWOORD van iemand die we volgen: bewaar de URI (shaer-e9g). Zo'n 2163 // bericht komt hier gewoon binnen, ondertekend door de schrijver zelf, maar 2164 // belongsInTimeline houdt het uit de Krant en daarna raakten we het kwijt. 2165 // Kwam er later een doorgestuurd antwoord OP dat bericht, dan kenden we de 2166 // ouder niet en wezen we het af -- terwijl we hem wel degelijk hadden gehad. 2167 // Er verandert niets aan wat we tonen of van vreemden aannemen: de schrijver 2168 // moet iemand zijn die je zelf bent gaan volgen. 2169 if (actorUri && !isLocalActor && o.id && o.inReplyTo && noteVisibility(o) !== 'direct' && isFollowedActor(actorUri)) { 2170 rememberNoteUri(o.id); 2126 2171 } 2127 2172 // Mentioned in a post that is NOT a reply to our content (a reply to us already returned
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)