Changeset 6fd0e20 in Klonkt for src/config/database.js


Ignore:
Timestamp:
07/26/2026 08:20:58 AM (6 weeks ago)
Author:
Robin Genis <roboburr@…>
Branches:
main
Children:
af6e085
Parents:
cc3cf7d
Message:

FEP-044f: Klonkt resolvet de geciteerde post voor een ingebedde quote-kaart

De client kan remote AP-objecten niet gesigneerd ophalen, dus Klonkt resolvet de
quote emit-side tot een compacte, gesaneerde snapshot en serveert die als
shaer:quote op de C2S inbox-read. De client rendert daarmee een geneste kaart
(auteur + avatar + tekst + evt. thumbnail) i.p.v. alleen de link-chip.

resolveQuote(note) haalt de quoted post op (SSRF-safe apGetJson), pakt de auteur
(fetchActor + actorInfo) en saneert de content met dezelfde sanitizer als elke
andere note (kindveilig blijft gelden). Best-effort: faalt de fetch, dan blijft
quote_json leeg en valt de client terug op de chip.

Bron-URL via quoteHrefOf: object-level quote (FEP-044f) of een quote-rel
FEP-e232 Link. Resolutie op inbound (fire-and-forget, blokkeert de inbox-response
niet), op outbox-backfill (await) en in self-heal (v10 -> v11, met COALESCE-gedrag
zodat een tijdelijk onbereikbare quoted post de cache niet leegt).

Changed files:
src/config/database.js

  • ap_timeline.quote_json kolom

src/services/ActivityPubService.js

  • quoteHrefOf(note): quoted-post-URL uit object-quote of quote-rel Link
  • resolveQuote(note): async snapshot {url, author, content, published, media}
  • timelineQuote(quoteJson): snapshot terug voor de inbox-read
  • inbound (fire-and-forget), backfill (await), self-heal v11 (await + COALESCE)
  • timelineQuote in de default-export

src/routes/activitypub.js

  • inbox-read serveert shaer:quote (de geresolvede snapshot)

test/object-links.test.js

  • quoteHrefOf (object-quote + quote-rel Link + geen) en timelineQuote round-trip

remarks: 180 tests groen (was 178). resolveQuote zelf is netwerk, niet in de unit-test.

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

File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/config/database.js

    rcc3cf7d r6fd0e20  
    549549  ensureColumn('ap_timeline', 'emoji_json', 'TEXT');         // FEP-9098 custom emoji Emoji tags from the inbound note, served back as `tag`
    550550  ensureColumn('ap_timeline', 'link_json', 'TEXT');          // FEP-e232 object-link (quote/ref) tags from the inbound note, served back as `tag`
     551  ensureColumn('ap_timeline', 'quote_json', 'TEXT');         // FEP-044f resolved quoted-post snapshot (author + content), for the embedded quote card
    551552  ensureColumn('ap_timeline', 'reblog_name', 'TEXT');        // a followed account boosted this → "X boosted"
    552553  ensureColumn('ap_timeline', 'reblog_handle', 'TEXT');      //   the booster's @handle
Note: See TracChangeset for help on using the changeset viewer.