Commit Graph

154 Commits

Author SHA1 Message Date
Ricardo
deb9cb54a3 fix: prefix view templates to avoid Nunjucks name collisions
Rename all views to activitypub-*.njk to prevent collisions with other
plugins that have dashboard.njk (podroll). Fix all new Date() calls to
use .toISOString() per Indiekit convention. Add try-catch in syndicator
to prevent delivery failures from crashing post creation.
2026-02-18 23:10:35 +01:00
Ricardo
b551d82a21 fix: use Express 5 wildcard syntax for content negotiation route
Express 5 uses path-to-regexp v8 which requires named wildcards.
Bare "*" is no longer valid — use "{*path}" instead.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-18 22:37:32 +01:00
Ricardo
4350010d5d fix: remove filePath getter that conflicts with Indiekit plugin loader
Indiekit's getInstalledPlugins() assigns plugin.filePath via require.resolve().
Our getter made the property read-only, causing:
  TypeError: Cannot set property filePath which has only a getter

Let Indiekit set it instead.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-18 22:29:26 +01:00
Ricardo
da625592fd feat: ActivityPub federation endpoint for Indiekit
Implements full ActivityPub federation as an Indiekit plugin:
- Actor document (Person) with RSA key pair for HTTP Signatures
- WebFinger discovery (acct:rick@rmendes.net)
- Inbox: handles Follow, Undo, Like, Announce, Create, Delete, Move
- Outbox: serves published posts as ActivityStreams 2.0
- Content negotiation: AS2 JSON for AP clients, passthrough for browsers
- JF2-to-AS2 converter for all Indiekit post types
- Syndicator integration (pre-ticked checkbox for delivery to followers)
- Mastodon migration: alias config, CSV import for followers/following
- Admin UI: dashboard, followers, following, activity log, migration page
- Data retention: configurable TTL on activities, optional raw JSON storage

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-18 22:13:51 +01:00