Changeset 31288dc in Klonkt for src/services


Ignore:
Timestamp:
10/26/2026 01:18:33 PM (28 hours ago)
Author:
Robin <roboburr@…>
Branches:
main
Children:
bfa3ba3
Parents:
4ae254a
Message:

Wakker worden: aankondigen en inhalen na echte afwezigheid

De wakker-helft van shaer-xzab (xzab.4 en .5), zoals Bart hem ontwierp: één
routine met twee helften, en wakker worden herkend aan een sprong in de
wandklok tussen twee ticks of aan het opstarten na lang uit -- niet aan elke
herstart, want npm herstart Klonkt bij elke opgeslagen wijziging.

services/wake.js. Het laatste teken van leven staat elke minuut in
app_settings (last_alive_at), zodat het een herstart overleeft. Meer dan een
half uur stilte is een terugkomst; dan:

.5 AANKONDIGEN: per site een actor-Update naar de gedeelde inboxes van de
volgers (deliverActorUpdate). Uit xzab.6: een binnenkomende POST is wat
Mastodon, Akkoma en Misskey weer naar ons laat bezorgen, en wat bij Pleroma
de controle van onze / start. Een half uur en niet langer, omdat Pleroma ons
al na één uitgeputte bezorging afschrijft.

.4 INHALEN: de outboxes van wie je volgt (alleen geaccepteerd), ondertekend,
vanaf het wegvallen. backfillFromOutbox kreeg daarvoor since; een post
zonder datum telt dan niet mee. Niet verder terug dan een week, hoogstens 40
posts per account en 200 accounts per site, na elkaar met een adempauze,
zodat een week weg geen storm wordt.

Eerst aankondigen, dan inhalen: dan bezorgen de anderen alweer terwijl wij
nog lezen. Een site die niet lukt, houdt de rest niet op.

test/wake.test.js: negen toetsen, het inhalen tegen een echte outbox op
127.0.0.1. Elf mutaties apart gedraaid, elk gevangen. Volledige suite 1371
groen.

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

Location:
src/services
Files:
1 added
1 edited

Legend:

Unmodified
Added
Removed
  • src/services/ActivityPubService.js

    r4ae254a r31288dc  
    31993199// history-from-before-you-followed or a delivery that was missed while you were down;
    32003200// reading the outbox is the spec-conform way to catch up. PULL ONLY — sends nothing.
    3201 export async function backfillFromOutbox(slug, actorUri, limit = 20) {
     3201//
     3202// `since` (ms of een ISO-datum): alleen wat daarna gepubliceerd is. Voor het
     3203// inhalen na een afwezigheid (shaer-xzab.4): dan hoort niet de hele eerste
     3204// pagina erbij, alleen wat er sinds het wegvallen bij kwam. Een post zonder
     3205// datum telt dan niet mee -- van die weet je niet of hij gemist is.
     3206export async function backfillFromOutbox(slug, actorUri, limit = 20, { since = null } = {}) {
    32023207  try {
    32033208    if (!slug || !actorUri) return 0;
    … …  
    32233228      if (o.type && o.type !== 'Note' && o.type !== 'Article' && o.type !== 'Question') continue; // skip boosts/other
    32243229      if (o.inReplyTo) continue;                                          // top-level only
     3230      if (since != null) {
     3231        const t = Date.parse(o.published || '');
     3232        if (!Number.isFinite(t) || t < new Date(since).getTime()) continue;
     3233      }
    32253234      const auth = actorUriOf(o.attributedTo);
    32263235      if (auth && auth !== actorUri) continue;                            // their OWN posts only
Note: See TracChangeset for help on using the changeset viewer.