Changeset 6fab3f3 in Klonkt for src/services/ActivityPubService.js
- Timestamp:
- 08/08/2026 10:42:20 PM (4 weeks ago)
- Branches:
- main
- Children:
- cae7bfc
- Parents:
- 060d4a5
- git-author:
- Robin <roboburr@…> (08/08/2026 10:42:18 PM)
- git-committer:
- roboburr <roboburr@…> (08/08/2026 10:42:20 PM)
- File:
-
- 1 edited
-
src/services/ActivityPubService.js (modified) (5 diffs)
Legend:
- Unmodified
- Added
- Removed
-
src/services/ActivityPubService.js
r060d4a5 r6fab3f3 1860 1860 return () => { set.delete(cb); if (!set.size) _newsWaiters.delete(slug); }; 1861 1861 } 1862 /** 1863 * Wachters op het Guardian-paneel (Barts opdracht, 9-8). 1864 * 1865 * APART VAN onNews, en dat is met opzet. `news` gaat over de tijdlijn; dit gaat 1866 * over alles wat een guardian te VERWERKEN krijgt -- een aanbod, een 1867 * volgverzoek, een gate-voorstel, een hulpvraag, een lapse. De guardianship- 1868 * module zendt daar al veertien soorten voor uit; die gingen alleen naar push, 1869 * en push kiest bewust maar een handvol. Het paneel moet ze allemaal weten. 1870 * 1871 * Een wachter wordt EEN keer gewekt en daarna vergeten: het antwoord dat volgt 1872 * is de nieuwe waarheid, en de client komt terug met een nieuwe wachter. 1873 */ 1874 const _guardWaiters = new Map(); // slug -> Set<cb> 1875 export function onGuardian(slug, cb) { 1876 let set = _guardWaiters.get(slug); 1877 if (!set) { set = new Set(); _guardWaiters.set(slug, set); } 1878 set.add(cb); 1879 return () => { set.delete(cb); if (!set.size) _guardWaiters.delete(slug); }; 1880 } 1881 export function wakeGuardian(slug) { 1882 const set = _guardWaiters.get(slug); 1883 if (!set || !set.size) return; 1884 const cbs = [...set]; 1885 set.clear(); 1886 _guardWaiters.delete(slug); 1887 for (const cb of cbs) { try { cb(); } catch { /* een wachter mag de rest nooit breken */ } } 1888 } 1889 1862 1890 export function wakeNews(slug) { 1863 1891 const set = _newsWaiters.get(slug); … … 2387 2415 const ai = actorInfo(await resolveActor(actorUri).catch(() => null), actorUri); 2388 2416 Guardianship.help.record(mark.noteUri, actorUri, mark.kind, ai && ai.handle); 2417 wakeGuardian(slug); // een mede-guardian pakte iets op: het paneel hoort het meteen 2389 2418 console.log('[AP] help', mark.kind, actorUri, '→', mark.noteUri); 2390 2419 } … … 2429 2458 if (!mijn) { console.warn('[AP] gate request from someone who is not our ward, ignored:', actorUri, '→', slug); continue; } 2430 2459 Guardianship.gatereq.record(slug, actorUri, req.feature, o.id); 2460 wakeGuardian(slug); // het kind vroeg om een poort 2431 2461 console.log('[AP] gate request', req.feature, actorUri, '→', slug); 2432 2462 } … … 5970 6000 // De labels hangen aan dezelfde sleutels als het Guardian-paneel, zodat een 5971 6001 // melding en het scherm waar hij heen wijst hetzelfde woord gebruiken. 5972 onEvent: (slug, ev) => { 5973 const p = guardianEventPush(slug, ev); 5974 if (p) pushEvent(slug, p); 5975 }, 6002 onEvent: (slug, ev) => onGuardianshipEvent(slug, ev), 5976 6003 }); 6004 6005 /** 6006 * Wat er gebeurt als de guardianship-module iets uitzendt. 6007 * 6008 * TWEE VERSCHILLENDE VRAGEN, en ze horen niet dezelfde te zijn: wie maak je 6009 * WAKKER (push kiest bewust een handvol soorten), en wat moet een scherm dat 6010 * openstaat WETEN (alles). Het paneel werd daarom voorheen niet gewekt door de 6011 * tien soorten zonder pushtekst -- die zag je pas bij de volgende tik. 6012 * 6013 * Apart en met een naam, zodat een toets erbij kan. Verstopt in de deps-literal 6014 * was hij onbereikbaar, en een mutatie die het wekken weghaalde bleef groen. 6015 */ 6016 export function onGuardianshipEvent(slug, ev) { 6017 wakeGuardian(slug); 6018 const p = guardianEventPush(slug, ev); 6019 if (p) pushEvent(slug, p); 6020 return p; 6021 } 5977 6022 5978 6023 /** … … 6066 6111 getNotifications, listBlocks, isBlockedAny, blockTarget, unblock, 6067 6112 deliverWithRetry, enqueueDelivery, processDeliveryQueue, startDeliveryWorker, 6068 sendMaybe304, etagFor, proposeGate, getReplyUris, getThread, filterThreadToCircle, gateAttachments, stripEmojiTags, markNotificationsSeen, countUnseenNotifications, hasPlayableAudio,6113 sendMaybe304, etagFor, onGuardian, wakeGuardian, onGuardianshipEvent, proposeGate, getReplyUris, getThread, filterThreadToCircle, gateAttachments, stripEmojiTags, markNotificationsSeen, countUnseenNotifications, hasPlayableAudio, 6069 6114 linkifyBody, bakePostContent, bakePostContentWithMentions, listFollowers, removeFollower, listConnections, 6070 6115 noteVisibility, belongsInTimeline, playerUrlFor, isRejectedObject, rejectInteraction, interactionReportTarget,
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)