Changeset 68a4d1b in Klonkt
- Timestamp:
- 08/06/2026 09:15:46 AM (5 weeks ago)
- Branches:
- main
- Children:
- 6bc5ebd
- Parents:
- 14f7cb2
- git-author:
- Robin <roboburr@…> (08/06/2026 09:15:45 AM)
- git-committer:
- Claude (agent) <aiclaude@…> (08/06/2026 09:15:46 AM)
- Files:
-
- 3 edited
-
src/routes/posts.js (modified) (1 diff)
-
src/services/ActivityPubService.js (modified) (3 diffs)
-
test/reactions-characterization.test.js (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
src/routes/posts.js
r14f7cb2 r68a4d1b 869 869 }) 870 870 .catch((e) => console.warn('[AP] remote boost failed:', e.message)); 871 // De tussentabel meteen, zodat de knop klopt voordat de resolve terug is. 872 ActivityPubService.setMyReaction(site.slug, uri, 'boost', on); 871 // Meteen zetten, zodat de knop klopt voordat de resolve terug is. Via 872 // setReaction en niet via setMyReaction: ook dit korte moment mag geen 873 // halve schrijfactie zijn. De resolve hierboven werkt hem daarna bij met de 874 // note, zodat de post ook in je tijdlijn belandt. 875 ActivityPubService.setReaction(site.slug, uri, 'boost', on); 873 876 } 874 877 if (req.get('X-Requested-With') === 'fetch') return res.json({ ok: true, on }); -
src/services/ActivityPubService.js
r14f7cb2 r68a4d1b 3396 3396 try { if (!_cirkelMembers) _cirkelMembers = db.prepare('SELECT name, url, icon FROM ap_following WHERE slug = ? AND auto_boost = 1 ORDER BY name'); return _cirkelMembers.all(slug); } catch { return []; } 3397 3397 } 3398 // Mark a timeline post as boosted so it shows in the Cirkel (mixed by date). 3398 // AFGELEIDE, GEEN BRON (shaer-9e9). De waarheid over "heb ik hierop gereageerd" 3399 // staat in ap_my_reactions; deze vlaggen worden daaruit bijgehouden door 3400 // setReaction en door niets anders. Roep ze niet los aan -- dan schrijf je de 3401 // helft, en dat is precies hoe shaer:liked maandenlang false bleef (04aca12). 3402 // 3403 // ap_timeline.boosted verdient zijn bestaan wel: hij staat in de WHERE van de 3404 // Cirkel-feed (getCirkelPosts) en in boostedCount, dus hij is een index en geen 3405 // kopie. ap_timeline.liked wordt nergens als verzameling bevraagd en kan weg 3406 // zodra fase 2 lang genoeg goed staat; hij is nu nog het vangnet waarmee 3407 // terugdraaien een code-revert blijft in plaats van dataherstel. 3399 3408 let _markBoost, _unmarkBoost, _boostedCount; 3400 3409 export function markBoosted(slug, noteId) { … … 4841 4850 buildActor, buildNote, buildCreate, buildOutbox, buildFollowers, buildFollowing, buildFeatured, 4842 4851 followerCount, deliver, fetchActor, verifyRequest, handleInbox, deliverCreate, deliverDelete, deliverUpdate, deliverActorUpdate, resyncFeaturedPins, 4843 getInteractions, getInteractionById, setInteractionBoosted, setInteractionLiked, setMyReaction, getMyReactions,buildReplyNote, getOutboxNote, getSentNotes, deliverReply, resolveRemoteNote, noteAudience, mayReadNote,4852 getInteractions, getInteractionById, setInteractionBoosted, setInteractionLiked, buildReplyNote, getOutboxNote, getSentNotes, deliverReply, resolveRemoteNote, noteAudience, mayReadNote, 4844 4853 listOutbox, deliverOutboxDelete, deliverOutboxUpdate, deliverDirectNote, 4845 4854 webfingerResolve, followActor, resolveRemoteActor, unfollowActor, handleMoveInbox, moveAccount, listFollowing, setAutoBoost, backfillFromOutbox, getTimeline, getDirectMessages, isoStamp, timelineAttachments, timelineEmojis, timelineObjectLinks, timelineQuote, timelineEmbed, applyQuoteProps, deliverToActor, sendInteraction, voteOnPoll, voteOnRemotePoll, … … 4847 4856 gateOutgoingFollow, performApprovedFollow, 4848 4857 parseOwnPoll, pollTally, ownPollView, deliverPollUpdate, maybeCrawlThread, sendReport, localMentionSlugs, 4849 autoBoostCount, boostedCount, markBoosted, unmarkBoosted, markLiked, unmarkLiked, setReaction, getReaction, getReactionsFor, getTimelineReaction, upsertBoostedNote, getCirkelPosts, getCirkelMembers, selfHealTimeline,4858 autoBoostCount, boostedCount, setReaction, getReaction, getReactionsFor, upsertBoostedNote, getCirkelPosts, getCirkelMembers, selfHealTimeline, 4850 4859 getNotifications, listBlocks, isBlockedAny, blockTarget, unblock, 4851 4860 deliverWithRetry, enqueueDelivery, processDeliveryQueue, startDeliveryWorker, -
test/reactions-characterization.test.js
r14f7cb2 r68a4d1b 254 254 assert.equal(AP.getReactionsFor('', [uri('g3')]).size, 0); 255 255 }); 256 257 // ── Fase 3: het publieke oppervlak is versmald ─────────────────────────── 258 259 test('de primitieven zijn niet meer bereikbaar via het service-object', async () => { 260 // Routes doen `import ActivityPubService from ...` en werken dus met het 261 // default-object. Zolang markLiked daar in staat, kan een aanroeper de helft 262 // schrijven -- en dat is niet hypothetisch: precies zo bleef shaer:liked 263 // maandenlang false. De named exports blijven bestaan voor intern gebruik en 264 // voor deze tests. 265 const svc = (await import('../src/services/ActivityPubService.js')).default; 266 for (const naam of ['markLiked', 'unmarkLiked', 'markBoosted', 'unmarkBoosted', 267 'setMyReaction', 'getMyReactions', 'getTimelineReaction']) { 268 assert.equal(svc[naam], undefined, `${naam} hoort niet op het publieke oppervlak te staan`); 269 } 270 // Wat er WEL hoort te staan: het ene schrijfpad en het ene leespad. 271 for (const naam of ['setReaction', 'getReaction', 'getReactionsFor']) { 272 assert.equal(typeof svc[naam], 'function', `${naam} hoort er wel te zijn`); 273 } 274 });
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)