Changeset f889429 in Klonkt for src/routes/activitypub.js


Ignore:
Timestamp:
08/07/2026 10:57:55 AM (5 weeks ago)
Author:
roboburr <roboburr@…>
Branches:
main
Children:
ea138c0
Parents:
31e63d1
git-author:
Robin <roboburr@…> (08/07/2026 10:57:53 AM)
git-committer:
roboburr <roboburr@…> (08/07/2026 10:57:55 AM)
Message:

Stilte kost nu niets: 304 als er niets veranderd is (shaer-n05)

Barts punt, en het legt een echte fout in mijn ontwerp bloot. De wachtende
inbox-lezing stuurde bij elke afloop van de wachttijd de VOLLEDIGE collectie
terug -- elke 25 seconden een tijdlijn over de mobiele verbinding om te zeggen
dat er niets gebeurd is. Dat is een slecht ruilmiddel voor het uitsparen van een
rondje.

Nu: 304 zonder body als de merksteen niet bewoog, de volle collectie als hij dat
wel deed. Daarmee is dit beter dan allebei de ontwerpen die op tafel lagen --
een apart seintje-endpoint kost bij nieuws twee rondjes, dit een.

DE '0'-UITZONDERING IS GEEN FRANJE. Ontbreekt ap_feed_state, dan geeft feedCursor
altijd '0' en zou een client hier eeuwig 304 krijgen en nooit meer inhoud zien.
Bij een lege merksteen gaat de collectie dus gewoon mee: trager, nooit fout.

Aan de clientkant moest de 304-tak VOOR de foutcontrole, anders telt stilte als
een storing en duwt hij de wachtlus in zijn oplopende pauze. En caps worden bij
een 304 NIET overschreven: een leeg antwoord draagt geen rechten, en die
klakkeloos overnemen zou de gated rechten terugzetten naar "alles mag". Vandaar
dat het antwoord nu expliciet changed draagt in plaats van dat de beller het uit
de cursor moet afleiden.

Suite 544/544.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/routes/activitypub.js

    r31e63d1 rf889429  
    285285    const afbreken = new AbortController();
    286286    res.on('close', () => afbreken.abort());   // client hing op: niet doorgaan met wachten
    287     await AP.waitForFeedChange(auth.site.slug, {
     287    const uit = await AP.waitForFeedChange(auth.site.slug, {
    288288      since: String(req.query.since), waitMs: wachtS * 1000, signal: afbreken.signal,
    289289    });
    290290    if (res.writableEnded || afbreken.signal.aborted) return undefined;
     291    // Niets veranderd? Dan een LEEG antwoord (Barts punt): de hele collectie
     292    // terugsturen terwijl er niets gebeurd is, is elke 25 seconden een tijdlijn
     293    // over de mobiele verbinding voor niets. Met 304 kost stilte niets en kost
     294    // nieuws nog steeds maar één rondje -- beter dan een apart seintje-endpoint,
     295    // dat voor nieuws twee rondjes nodig heeft.
     296    //
     297    // De '0'-uitzondering is geen franje. Ontbreekt ap_feed_state (een instance
     298    // die de migratie nog niet draaide), dan geeft feedCursor altijd '0' terug,
     299    // en zou een client hier eeuwig 304 krijgen en nooit meer inhoud zien. Bij
     300    // een lege merksteen sturen we dus gewoon de collectie.
     301    if (!uit.changed && uit.cursor !== '0') {
     302      res.set('Vary', 'Authorization');
     303      return res.status(304).end();
     304    }
    291305  }
    292306  // Gated feature (FEP-633c): may this account see EXTERNAL embeds? A ward's
Note: See TracChangeset for help on using the changeset viewer.