Changeset c4b24b3 in Klonkt
- Timestamp:
- 08/08/2026 01:08:33 AM (5 weeks ago)
- Branches:
- main
- Children:
- 9c9a3d9
- Parents:
- 4f97b70
- Files:
-
- 1 added
- 2 edited
-
.beads/.auto-import-issues.jsonl (added)
-
src/services/ActivityPubService.js (modified) (1 diff)
-
test/thread.test.js (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
src/services/ActivityPubService.js
r4f97b70 rc4b24b3 3407 3407 : (repliesRef.id ? await signedGetJson(slug, repliesRef.id) : repliesRef); 3408 3408 } 3409 // ÉÉN pagina, met opzet: de eerste. Wie meer wil moet eerst kunnen zeggen 3410 // waarom dertig directe antwoorden niet genoeg context is voor een gesprek. 3411 let items = collectionItems(coll); 3412 if (!items.length && coll && coll.first) { 3413 const first = typeof coll.first === 'string' ? await signedGetJson(slug, coll.first) : coll.first; 3414 items = collectionItems(first); 3409 // De pagina-wandeling van collectReplyItems, maar met behoud van INLINE 3410 // objecten (die niet opnieuw opgehaald hoeven). Niet "de eerste pagina": 3411 // Mastodon serveert `first` als inline-pagina met LEGE items en een `next` 3412 // waar de antwoorden echt staan -- wie alleen de eerste pagina leest, ziet 3413 // op elke Mastodon-post een leeg gesprek. Dat was precies Barts melding 3414 // (8-8, reacties op een vreemde post). Eigen posts maskeerden het: die 3415 // gaan door de lokale kortsluiting en hebben orderedItems meteen vol. 3416 let items = []; 3417 let node = coll; 3418 if (node && node.first && !collectionItems(node).length) { 3419 node = typeof node.first === 'string' ? await signedGetJson(slug, node.first) : node.first; 3420 } 3421 let pages = 0; 3422 while (node && pages++ < 3 && items.length < THREAD_VIEW_LIMIT) { 3423 items.push(...collectionItems(node)); 3424 if (!node.next) break; 3425 node = typeof node.next === 'string' ? await signedGetJson(slug, node.next) : node.next; 3415 3426 } 3416 3427 items = items.slice(0, THREAD_VIEW_LIMIT); -
test/thread.test.js
r4f97b70 rc4b24b3 91 91 }); 92 92 93 test('de Mastodon-vorm: first is een lege inline-pagina, de antwoorden staan op next', async () => { 94 // Precies wat Mastodon serveert en wat Barts melding (8-8) verklaarde: wie 95 // alleen de eerste pagina leest, ziet op elke Mastodon-post een leeg gesprek. 96 const MPOST = 'https://203.0.113.50/notes/masto-1'; 97 const vorige = globalThis.fetch; 98 globalThis.fetch = async (url) => { 99 const u = String(url); 100 const json = (o) => new Response(JSON.stringify(o), { status: 200, headers: { 'content-type': 'application/activity+json' } }); 101 if (u === MPOST) return json({ 102 id: MPOST, type: 'Note', attributedTo: TANTE, content: '<p>toot</p>', 103 replies: { 104 id: `${MPOST}/replies`, type: 'Collection', 105 first: { type: 'CollectionPage', items: [], next: `${MPOST}/replies?page=true` }, 106 }, 107 }); 108 if (u === `${MPOST}/replies?page=true`) return json({ 109 type: 'CollectionPage', 110 items: [{ id: `${MPOST}/r1`, type: 'Note', attributedTo: TANTE, inReplyTo: MPOST, content: '<p>eerste echte antwoord</p>', published: '2026-08-02T10:00:00Z' }], 111 }); 112 return vorige(url); 113 }; 114 const uit = await AP.getThread('kind', MPOST, { isWard: false }); 115 globalThis.fetch = vorige; 116 assert.equal(uit.notes.length, 1, 'het antwoord op de next-pagina is gevonden'); 117 assert.ok(uit.notes[0].content.includes('eerste echte antwoord')); 118 }); 119 93 120 test('de tweede lezing komt uit het geheugen, niet van het netwerk', async () => { 94 121 let calls = 0;
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)