Changeset cb3001e in Klonkt
- Timestamp:
- 08/11/2026 06:26:59 PM (4 weeks ago)
- Branches:
- main
- Children:
- aed0092
- Parents:
- fc41e04
- Files:
-
- 1 added
- 2 edited
-
src/routes/activitypub.js (modified) (2 diffs)
-
src/services/ActivityPubService.js (modified) (3 diffs)
-
test/ap-outbox-paging.test.js (added)
Legend:
- Unmodified
- Added
- Removed
-
src/routes/activitypub.js
rfc41e04 rcb3001e 182 182 }); 183 183 if (audience === 'blocked') { 184 return AP.sendAP(res, AP.buildOutbox(baseUrl(req), site, [] ), 'private, no-store');184 return AP.sendAP(res, AP.buildOutbox(baseUrl(req), site, [], [], { page: !!req.query.page }), 'private, no-store'); 185 185 } 186 186 const fanClause = audience === 'friend' ? '' : "AND (fan_only IS NULL OR fan_only = 0)"; … … 192 192 // De tracks gaan mee voor iedereen die de deur door mag; de blocked-tak 193 193 // hierboven levert bewust een outbox ZONDER posts en zonder tracks. 194 const ob = AP.buildOutbox(baseUrl(req), site, posts, AP.siteOpenTracks(site.id) );194 const ob = AP.buildOutbox(baseUrl(req), site, posts, AP.siteOpenTracks(site.id), { page: !!req.query.page }); 195 195 if (audience === 'friend') { 196 196 // The owner's app builds its feed from this leg, and every note here is -
src/services/ActivityPubService.js
rfc41e04 rcb3001e 1019 1019 * zijn eigen database bevraagt zou dwars door die deur heen leveren. 1020 1020 */ 1021 export function buildOutbox(base, site, posts, tracks = [] ) {1021 export function buildOutbox(base, site, posts, tracks = [], { page = false } = {}) { 1022 1022 const id = `${actorId(base, site.slug)}/outbox`; 1023 1023 const wanneer = (x) => Date.parse(x && x.published ? x.published : 0) || 0; … … 1032 1032 .sort((a, b) => wanneer(b) - wanneer(a)) 1033 1033 .slice(0, MAX_OUTBOX); 1034 // GEPAGINEERD, ook al past alles op een pagina (Funkwhale, 11-8). 1035 // 1036 // Hun serializer weigerde onze outbox met "first: This field is required" en 1037 // "last: This field is required". AS2 EIST ze niet -- een collectie mag zijn 1038 // items inline dragen -- maar bijna iedereen pagineert, en een lezer die de 1039 // paginaweg volgt liep hier dood. Dit is de eerste concrete reden die we 1040 // hoorden waarom er niets van ons binnenkwam. 1041 // 1042 // De items blijven WEL inline op de wortel. Shaer bouwt zijn feed daaruit, en 1043 // wie hem vandaag leest hoort er morgen niet voor te hoeven pagineren. Er is 1044 // precies een pagina, dus first en last wijzen naar dezelfde. 1045 const eerste = `${id}?page=1`; 1046 if (page) { 1047 return { 1048 '@context': AP_CONTEXT, 1049 id: eerste, 1050 type: 'OrderedCollectionPage', 1051 partOf: id, 1052 totalItems: items.length, 1053 orderedItems: items, 1054 }; 1055 } 1034 1056 return { 1035 1057 '@context': AP_CONTEXT, … … 1037 1059 type: 'OrderedCollection', 1038 1060 totalItems: items.length, 1061 first: eerste, 1062 last: eerste, 1039 1063 orderedItems: items, 1040 1064 };
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)