Changeset e311202 in Klonkt for src/services
- Timestamp:
- 08/21/2026 08:44:47 AM (3 weeks ago)
- Branches:
- main
- Children:
- 4e5fe29
- Parents:
- bb9e54c
- Location:
- src/services
- Files:
-
- 2 edited
-
ActivityPubService.js (modified) (2 diffs)
-
BlocklistService.js (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
src/services/ActivityPubService.js
rbb9e54c re311202 3600 3600 if (innerType === 'Block') { 3601 3601 if (!innerTarget) return { status: 400, error: 'missing_object' }; 3602 unblock(site, innerTarget) ; // release from Orbit3602 unblock(site, innerTarget).catch(() => {}); // release from Orbit 3603 3603 return { status: 202, url: innerTarget }; 3604 3604 } … … 6666 6666 // Block an actor (@handle or actor URL) or a whole domain; purges their content. 6667 6667 // The handle resolver is ours; the storage/purge lives in BlocklistService. 6668 export async function blockTarget(site, input) { return Blocklist.blockTarget(site, input, webfingerResolve); } 6669 6670 export function unblock(site, target) { return Blocklist.unblock(site, target); } 6668 // 6669 // De BEZORGING hoort ook hier: BlocklistService kent de database, niet het 6670 // afleveren. Een Block gaat naar de inbox van wie je blokkeert, een 6671 // Undo(Block) bij het opheffen -- zonder retry-wachtrij, want een blokkade 6672 // wacht niet op een server die even plat ligt (en bij opheffen komt de ander 6673 // vanzelf weer langs). 6674 async function bezorgBlokkade(site, target, undo) { 6675 const base = (process.env.PUBLIC_BASE_URL || '').replace(/\/+$/, ''); 6676 const me = actorId(base, site.slug); 6677 const blok = { id: `${me}#block-${Date.now()}-${rid()}`, type: 'Block', actor: me, object: target, to: [target] }; 6678 const activiteit = undo 6679 ? { '@context': AP_CONTEXT, id: `${me}#unblock-${Date.now()}-${rid()}`, type: 'Undo', actor: me, object: blok, to: [target] } 6680 : { '@context': AP_CONTEXT, ...blok }; 6681 const r = await deliverToActor(site, target, activiteit); 6682 console.log('[AP]', undo ? 'Undo(Block)' : 'Block', site.slug, '→', target, r && r.delivered ? 'bezorgd' : 'niet bezorgd'); 6683 } 6684 6685 export async function blockTarget(site, input) { return Blocklist.blockTarget(site, input, webfingerResolve, bezorgBlokkade); } 6686 6687 export function unblock(site, target) { return Blocklist.unblock(site, target, bezorgBlokkade); } 6671 6688 6672 6689 // ── Guardianship module wiring (src/services/guardianship/) ──────── -
src/services/BlocklistService.js
rbb9e54c re311202 56 56 // `resolveHandle` (async handle → actor URL) is injected by the caller so this 57 57 // service needs nothing from ActivityPubService (no circular import). 58 export async function blockTarget(site, input, resolveHandle) { 58 /** 59 * Een blokkade is pas een blokkade als de ander het merkt (Robin, 21-8). 60 * 61 * Tot vandaag bleef hij binnenshuis: rij in ap_blocks, inhoud opruimen, volger 62 * eruit -- en verder niets. De andere kant volgde je dan nog steeds in zijn 63 * eigen boeken en bleef je publieke outbox lezen. Precies wat de hub deed: 64 * kanaal en berichten stonden er gewoon nog. Vandaar dat we het nu ook 65 * VERSTUREN, zoals Mastodon dat doet: een Block naar de inbox van wie je 66 * blokkeert, en bij opheffen een Undo(Block) zodat de weg terug openligt. 67 * 68 * Alleen voor een actor-blokkade: een heel domein heeft geen inbox om aan te 69 * schrijven. En bezorgen mag nooit de blokkade zelf tegenhouden -- die staat 70 * al vast in de database voordat we ook maar iets proberen te versturen. 71 */ 72 async function meldBlokkade(site, target, kind, bezorg, undo = false) { 73 if (kind !== 'actor' || typeof bezorg !== 'function') return; 74 try { await bezorg(site, target, undo); } catch { /* de blokkade staat, de melding is een gunst */ } 75 } 76 77 export async function blockTarget(site, input, resolveHandle, bezorg) { 59 78 const raw = String(input || '').trim(); 60 79 if (!site || !site.slug || !raw) return { error: 'empty' }; … … 69 88 purgeBlocked(kind, target); 70 89 console.log('[AP] block', site.slug, kind, target); 90 await meldBlokkade(site, target, kind, bezorg); 71 91 return { ok: true, label }; 72 92 } 73 93 74 export function unblock(site, target) { blStmts().del.run(site.slug, target); return { ok: true }; } 94 export async function unblock(site, target, bezorg) { 95 const rij = blStmts().list.all(site.slug).find((b) => b.target === target); 96 blStmts().del.run(site.slug, target); 97 // Undo(Block) zodat de ander weet dat de deur weer open is; zonder dit blijft 98 // hij bij zichzelf geblokkeerd staan en komt hij nooit terug. 99 await meldBlokkade(site, target, (rij && rij.kind) || 'actor', bezorg, true); 100 return { ok: true }; 101 } 75 102 76 103 export default { listBlocks, isBlockedAny, blockTarget, unblock };
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)