Changeset bfa3ba3 in Klonkt for src/services/ap-transport.js


Ignore:
Timestamp:
10/26/2026 01:35:31 PM (26 hours ago)
Author:
Robin <roboburr@…>
Branches:
main
Children:
7ccdced
Parents:
31288dc
Message:

Ook de directe verzenders langs de volgorde per inbox

Rest van shaer-xzab.3. Drie plekken verstuurden zelf met deliver() en zetten
pas bij een mislukking in de rij: een antwoord (deliverReply), het wissen
daarvan (deliverOutboxDelete) en een direct bericht (deliverDirectNote, ook de
hulpvraag en de zwaai). Zo kon de Delete van een antwoord aankomen vóór het
antwoord zelf als dat nog in de rij wachtte, en stond het antwoord daarna weer
op die server.

Nu één weg: deliverNowOrQueue in ap-transport, met dezelfde regel als
deliverWithRetry (wacht er voor die inbox al iets, of zit de server in zijn
backoff, dan achteraan), en hij zegt of het 'sent' of 'queued' werd, want
deliverReply en deliverDirectNote tellen wat er meteen aankwam.
deliverWithRetry is er nu een dunne laag over. guardianship/delivery.js krijgt
deliverNowOrQueue via wireDelivery in plaats van deliver en enqueueDelivery.

test/direct-sends-queue.test.js: vijf toetsen tegen een echte HTTP-server,
waaronder het hele scenario: antwoord lukt niet en wacht, de server is terug,
het antwoord wordt gewist -- de Delete wacht achter de Create en ze komen in
die volgorde aan. Vier mutaties apart gedraaid (elke plek terug naar zelf
versturen, en 'sent' dat niet telt), elk gevangen. Volledige suite 1376 groen.

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

File:
1 edited

Legend:

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

    r31288dc rbfa3ba3  
    278278  } catch { /* health tracking is non-fatal */ }
    279279}
    280 // Deliver now; queue for retry if it fails.
     280// Deliver now, or queue: zegt welke van de twee het werd ('sent' | 'queued'),
     281// voor de aanroepers die tellen wat er meteen aankwam.
    281282//
    282283// Niet meteen als er voor deze inbox al iets in de wachtrij staat (dan zou dit
    … …  
    284285// server net faalde en in zijn backoff zit (dan kost het alleen acht seconden
    285286// time-out om hetzelfde te horen). Dan achteraan in de rij.
     287//
     288// DE ENIGE WEG om iets direct te versturen dat bij een mislukking in de rij
     289// hoort (shaer-xzab.3). Drie plekken deden eerst zelf deliver() en pas bij een
     290// mislukking enqueueDelivery(), en gingen zo langs de volgorde per inbox.
     291export async function deliverNowOrQueue(slug, inbox, activity, keyId, privPem) {
     292  if (!inbox) return 'queued';
     293  try {
     294    const st = deliveryStmts();
     295    if (st.pendInbox.get(inbox) || st.hostWaits.get(inboxHost(inbox))) { enqueueDelivery(slug, inbox, activity); return 'queued'; }
     296  } catch { /* geen wachtrij te lezen: gewoon proberen */ }
     297  try { const st = await deliver(inbox, activity, keyId, privPem); if (st >= 200 && st < 300) { markFollowerDelivery(slug, inbox, true); return 'sent'; } } catch { /* queue below */ }
     298  enqueueDelivery(slug, inbox, activity);
     299  return 'queued';
     300}
     301// Deliver now; queue for retry if it fails.
    286302export async function deliverWithRetry(slug, inbox, activity, keyId, privPem) {
    287   if (!inbox) return;
    288   try {
    289     const st = deliveryStmts();
    290     if (st.pendInbox.get(inbox) || st.hostWaits.get(inboxHost(inbox))) { enqueueDelivery(slug, inbox, activity); return; }
    291   } catch { /* geen wachtrij te lezen: gewoon proberen */ }
    292   try { const st = await deliver(inbox, activity, keyId, privPem); if (st >= 200 && st < 300) { markFollowerDelivery(slug, inbox, true); return; } } catch { /* queue below */ }
    293   enqueueDelivery(slug, inbox, activity);
     303  await deliverNowOrQueue(slug, inbox, activity, keyId, privPem);
    294304}
    295305let _processingDeliv = false;
Note: See TracChangeset for help on using the changeset viewer.