Changeset aed0092 in Klonkt for src/services/ap-core.js


Ignore:
Timestamp:
08/11/2026 06:35:19 PM (4 weeks ago)
Author:
Robin <roboburr@…>
Branches:
main
Children:
960f015
Parents:
cb3001e
Message:

Elke collectie pagineert nu, via een helper in plaats van tien keer dezelfde regels

Vervolg op cb3001e, waar alleen de outbox eraan geloofde omdat Funkwhale daar
over viel. Robins opdracht: de rest ook, om compleetheid te garanderen. Dat is
de goede volgorde -- een foutmelding repareren waar hij valt laat de volgende
lezer op de volgende collectie stuklopen.

pagedCollection in ap-core, en daar hangen ze nu allemaal aan:

outbox followers following featured
tracks playlists playlist post-tracks
replies + de zeven guardianship-wachtrijen

De items blijven overal INLINE op de wortel; first en last wijzen naar dezelfde
pagina, want onze collecties zijn gekapt en er is er precies een. Wie ze vandaag
zonder pagineren leest -- Shaer doet dat -- merkt er niets van.

DRIE PLEKKEN DIE BEWUST AFWIJKEN, want een sleepnet is geen zorgvuldigheid:

  • de guardianship-wachtrijen krijgen hun @context van de route (queueRoute), dus daar staan de velden er met de hand bij. pagedCollection zou de context een tweede keer toevoegen.
  • de thread-collectie draagt al een ?object= in zijn id. Daar ?page= achteraan plakken pagineert niets, het herhaalt de vraag. Owner-only en door Shaer gelezen, dus geen federatiebelang.
  • followers en following geven publiek alleen een AANTAL. Die krijgen de velden juist wel: anders is "ik mag de lijst niet zien" niet te onderscheiden van een kapot antwoord -- dezelfde stille dubbelzinnigheid die we vandaag bij een ander aantroffen.

Vier tests erbij, waaronder een die bewaakt dat de helper attributedTo niet
opeet en een die bewaakt dat de wachtrijen GEEN eigen @context krijgen.

Co-Authored-By: Claude Opus 5 <noreply@…>

File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/services/ap-core.js

    rcb3001e raed0092  
    187187  return out;
    188188}
     189
     190/**
     191 * Een AS2-collectie MET de paginavelden erbij (shaer-0nh, 11-8).
     192 *
     193 * WAAROM DIT EEN HELPER IS EN GEEN REGELS. Funkwhale weigerde onze outbox met
     194 * "first: This field is required" en "last: This field is required" -- de eerste
     195 * concrete reden die we hoorden waarom er niets van ons binnenkwam. AS2 EIST die
     196 * velden niet, maar bijna iedereen pagineert, en een lezer die de paginaweg
     197 * volgt liep dood. Toen dat voor de outbox gerepareerd was misten alle andere
     198 * collecties ze nog steeds. Een helper zorgt dat de volgende collectie ze niet
     199 * opnieuw vergeet.
     200 *
     201 * DE ITEMS BLIJVEN INLINE op de wortel. Shaer bouwt zijn feed daaruit, en wie
     202 * hem vandaag leest hoort er morgen niet voor te hoeven pagineren. Onze
     203 * collecties zijn gekapt, dus er is precies EEN pagina en wijzen first en last
     204 * naar dezelfde.
     205 *
     206 * @param {string} id        de collectie-uri, zonder query
     207 * @param {Array}  items     wat erin zit (mag leeg)
     208 * @param {object} opts
     209 *   totalItems  als de telling niet items.length is (followers geeft publiek
     210 *               alleen een AANTAL en houdt de lijst dicht)
     211 *   page        true -> een OrderedCollectionPage met partOf in plaats van de wortel
     212 *   extra       velden die op de wortel horen (attributedTo, shaer:*)
     213 */
     214export function pagedCollection(id, items, { totalItems, page = false, extra = {} } = {}) {
     215  const lijst = items || [];
     216  const telling = totalItems === undefined ? lijst.length : totalItems;
     217  const eerste = `${id}?page=1`;
     218  if (page) {
     219    return {
     220      '@context': AP_CONTEXT,
     221      id: eerste,
     222      type: 'OrderedCollectionPage',
     223      partOf: id,
     224      totalItems: telling,
     225      orderedItems: lijst,
     226    };
     227  }
     228  return {
     229    '@context': AP_CONTEXT,
     230    id,
     231    type: 'OrderedCollection',
     232    ...extra,
     233    totalItems: telling,
     234    first: eerste,
     235    last: eerste,
     236    orderedItems: lijst,
     237  };
     238}
Note: See TracChangeset for help on using the changeset viewer.