docs: document startup-gate and OAuth token expiry fixes (2026-04-09)
Deploy Indiekit Server / deploy (push) Successful in 1m21s

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Sven
2026-04-09 18:58:50 +02:00
parent 6a005c0999
commit 5ce11c5b14
+6
View File
@@ -878,6 +878,12 @@ A CommonJS preload module that runs a Prometheus scrape endpoint on port 9209 (c
### 2026-04-09 ### 2026-04-09
**fix: inbox processor never started — startup-gate signal file missing** (`6a005c0`)
The new fork (v3.13.4) introduced `@rmdes/indiekit-startup-gate`, which wraps `startInboxProcessor` (and key refresh, batch refollow) in `waitForReady()`. That function polls for `/app/data/.indiekit-ready` — a Cloudron deployment convention — before firing its callback. On this FreeBSD server the file is never created automatically, so the callback never ran: all inbound AP activities queued up in `ap_inbox_queue` at `attempts: 0` indefinitely with no error logging. Added `scripts/preflight-startup-gate.mjs` to `npm run serve` — it creates the signal file on every startup, causing `waitForReady()` to fire immediately.
**fix(ap): OAuth access tokens expire 10 min after login** (`5b6fd57`)
`patch-ap-oauth-token-expiry-fix`: the `authorization_code` exchange updated the token document in-place but never cleared the auth code's `expiresAt` (now + 10 min). `tokenRequired` middleware returned null once that time elapsed → 401 on all authenticated endpoints. Fixed by adding `$unset: { expiresAt: "" }` to the exchange update, matching the existing behaviour of the `refresh_token` grant.
**chore(deps): update indiekit-endpoint-activitypub fork** (`c8ca991`) **chore(deps): update indiekit-endpoint-activitypub fork** (`c8ca991`)
Pulled latest commit from svemagie/indiekit-endpoint-activitypub. Key upstream changes: status IDs migrated from timestamp cursors to MongoDB ObjectIds (`findTimelineItemById` now does `findOne({ _id: new ObjectId(id) })`); `in_reply_to_id` serialiser uses `resolveReplyIds()` batch lookup (`resolve-reply-ids.js`) instead of the tautological null; `objectId` ReferenceError in DELETE route fixed upstream; draft/unlisted syndication guards moved from patches into `index.js` natively. Pulled latest commit from svemagie/indiekit-endpoint-activitypub. Key upstream changes: status IDs migrated from timestamp cursors to MongoDB ObjectIds (`findTimelineItemById` now does `findOne({ _id: new ObjectId(id) })`); `in_reply_to_id` serialiser uses `resolveReplyIds()` batch lookup (`resolve-reply-ids.js`) instead of the tautological null; `objectId` ReferenceError in DELETE route fixed upstream; draft/unlisted syndication guards moved from patches into `index.js` natively.