Ignore:
Timestamp:
07/24/2026 06:04:03 PM (7 weeks ago)
Author:
Robin Genis <roboburr@…>
Branches:
main
Children:
780a7c6
Parents:
1a2d8ac
Message:

Guardian-PWA: duidelijker + verstuurde offer altijd zichtbaar

Twee klachten opgelost.

"Ik zie niet dat ik verstuurd heb": de offer werd wél opgeslagen, maar als de
directe bezorging aan de remote ward faalde gaf de flow 502 en ververste de
PWA niet, dus de kaart verscheen niet. Nu: bezorging is async met retry (de
delivery-queue), de handshake geeft altijd 202 (opgeslagen) met een
delivered-vlag, en de PWA ververst altijd en toont de offer onder een eigen
sectie "Verzonden aanvragen · wacht op antwoord". Faalt de eerste bezorging,
dan meldt de UI dat we blijven proberen.

"Mag allemaal duidelijker": de pagina is herzien met vaste secties met kop en
uitleg: Hulpverzoeken (met teller), Ward adopteren (met uitleg wat er gebeurt),
Verzonden aanvragen, Mijn wards (actief-tag), Meldingen. Statussen als tags,
nette lege staten, alles via i18n (nl/en/de).

Changed files:
src/services/ActivityPubService.js

  • deliverToActor: enqueue+retry+logging, geeft {delivered, inbox}

src/services/guardianship/handshake.js

src/routes/guardian.js

  • /adopt niet meer hard falen op bezorg-hik; delivered terug; meer strings

src/views/pages/guardian.ejs

  • herziene, duidelijke secties

src/assets/js/guardian.js

  • aparte "Verzonden aanvragen"-sectie, altijd verversen na adopt

src/assets/css/guardian.css

  • sectie-koppen, status-tags, nette lege staten

src/services/i18n.js

  • uitgebreide guardian.*-teksten nl/en/de

remarks: als de offer "niet binnenkomt" bij de ward, moet diens Klonkt de
nieuwe code draaien (demo/beta/demohub zijn bij); een oude Klonkt of Mastodon
snapt de Offer-Relationship niet.

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

File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/services/guardianship/handshake.js

    r1a2d8ac rc26cc18  
    5656    };
    5757    relations.recordOffer(site.slug, 'guardian', rel.ward, { handle: deriveHandle(rel.ward), offerId });
    58     const delivered = await deliverTo(site, rel.ward, offer).catch(() => false);
     58    // The offer is now recorded (the guardian sees it as pending); delivery is
     59    // async + retried, so a slow ward server never fails the whole action.
     60    const res = await deliverTo(site, rel.ward, offer).catch(() => ({ delivered: false }));
    5961    notify(site.slug, { kind: 'offer_sent', ward: rel.ward });
    60     return { status: delivered ? 202 : 502, id: offerId, url: offerId };
     62    return { status: 202, id: offerId, url: offerId, delivered: res && res.delivered !== false };
    6163  }
    6264
     
    8284    relations.removeRelation(site.slug, 'ward', row.other_uri);
    8385  }
    84   const delivered = await deliverTo(site, row.other_uri, answer).catch(() => false);
     86  // The answer is committed locally; delivery is async + retried.
     87  const res = await deliverTo(site, row.other_uri, answer).catch(() => ({ delivered: false }));
    8588  notify(site.slug, { kind: type === 'Accept' ? 'offer_accepted' : 'offer_rejected', guardian: row.other_uri });
    86   return { status: delivered ? 202 : 502, id: answer.id, url: answer.id };
     89  return { status: 202, id: answer.id, url: answer.id, delivered: res && res.delivered !== false };
    8790}
    8891
Note: See TracChangeset for help on using the changeset viewer.