Changeset bfa3ba3 in Klonkt for src/services/guardianship


Ignore:
Timestamp:
10/26/2026 01:35:31 PM (27 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/guardianship/delivery.js

    r31288dc rbfa3ba3  
    9393  if (!inReplyTo && helpMark && helpMark.noteUri) inReplyTo = helpMark.noteUri;
    9494  const { actorId, fetchActor, localActor, deliverTo, deriveHandle, escHtml, linkUrls, linkHashtags,
    95           getOutboxRow, buildReplyNote, AP_CONTEXT, getOrCreateKeys, deliver, enqueueDelivery } = deps;
     95          getOutboxRow, buildReplyNote, AP_CONTEXT, getOrCreateKeys, deliverNowOrQueue } = deps;
    9696  const base = (process.env.PUBLIC_BASE_URL || '').replace(/\/+$/, '');
    9797  const list = [...new Set((recipients || []).filter((u) => /^https?:\/\//i.test(String(u || ''))))].slice(0, 8);
    … …  
    207207  }
    208208  // Remote: one POST per inbox, so two guardians on the same server share it.
     209  // Langs de volgorde per inbox (shaer-xzab.3), zoals elke bezorging.
    209210  for (const inbox of [...new Set(resolved.filter((x) => !x.local).map((r) => r.inbox))]) {
    210     let ok = false;
    211     try { const st = await deliver(inbox, create, keyId, keys.private_pem); ok = st >= 200 && st < 300; } catch { ok = false; }
    212     if (ok) delivered++;
    213     else enqueueDelivery(site.slug, inbox, create);
     211    if ((await deliverNowOrQueue(site.slug, inbox, create, keyId, keys.private_pem)) === 'sent') delivered++;
    214212  }
    215213  console.log('[AP] direct note', site.slug, '→', resolved.length, 'recipient(s), delivered', delivered);
Note: See TracChangeset for help on using the changeset viewer.