dorfteich/apps/api/src
Claude Fable 5 0875e2a087
All checks were successful
CI / Build container images (push) Has been skipped
CI / Lint, typecheck, test (push) Successful in 2m57s
CI / Import/export fidelity gate (push) Successful in 46s
CD / Build and push images (push) Successful in 3m16s
CD / Deploy to Test (push) Successful in 8s
CI / Auth e2e pack (push) Successful in 4m8s
CD / Smoke tests against Test (push) Successful in 1m9s
CD / Promote to Int (push) Successful in 10s
Add the sandbox host runtime for plugin iframes (#73)
Implements the security core of the plugin system: code-plugin surfaces
run in opaque-origin iframes (sandbox="allow-scripts", never
allow-same-origin) with a capability-filtered RPC bridge.

- api: serve a per-plugin sandbox frame document at
  /plugins/:id/:version/frame with a CSP that pins every load to the
  plugin's own asset path (built from APP_BASE_URL, not the request Host,
  so a Host-rewriting proxy cannot break it) and forbids network access
  (connect-src 'none'). Plugin assets get Access-Control-Allow-Origin: *
  so the null-origin frame can load its own module bundle.
- web: sandbox-host creates the frame, wires the SDK host bridge over a
  source-filtered postMessage transport, drives render under a 5 s
  deadline (hung/failed plugin -> placeholder, never a frozen page), and
  tears down on unmount. PluginFrame/PluginPreviewPage surface it; the
  built-in ui.resize handler clamps plugin-requested heights.
- plugin-sdk: host bridge reports gate violations via onViolation and
  registers a gated handler for every v1 method, so an undeclared
  capability is rejected with capability_not_permitted (not
  unknown_method).
- tests: SDK gate unit test; web sandbox unit tests (opaque origin,
  source filtering, timeout); and the e2e security pack with a permanent
  malicious fixture plugin proving no escape (DOM/cookies/storage/fetch/
  undeclared capability all blocked) plus well-behaved and hung cases.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EwZ4jR4KFAPvpjWevfUGX1
2026-07-11 09:16:30 +02:00
..
admin Add Site-Admin user management (#59) 2026-07-10 00:31:41 +02:00
auth Add Site-Admin user management (#59) 2026-07-10 00:31:41 +02:00
common Add page trash: soft delete, restore, and purge job (#31) 2026-07-08 12:48:17 +02:00
compaction Fix compaction test Bytes typing for strict typecheck (#40) 2026-07-09 08:23:55 +02:00
config Add NestJS API skeleton with config, logging, and /healthz 2026-07-04 19:10:07 +02:00
files Add pond ZIP + per-page docx/odt export (#65) 2026-07-10 10:31:19 +02:00
grants Add effective-permissions inspector (#57) 2026-07-10 00:00:27 +02:00
health Add PDF export via Gotenberg (#67) 2026-07-10 12:11:12 +02:00
i18n Add mail outbox with SMTP delivery worker and templates 2026-07-05 00:46:12 +02:00
import-export Add import/export fidelity gate to CI (#69) 2026-07-10 13:59:10 +02:00
inspector Add effective-permissions inspector (#57) 2026-07-10 00:00:27 +02:00
labels Wire real permissions into collab tokens and revocation (#53) 2026-07-09 18:48:42 +02:00
links Enforce permissions in API guards and retire interim access (#52) 2026-07-09 16:31:41 +02:00
mail Add mail outbox with SMTP delivery worker and templates 2026-07-05 00:46:12 +02:00
members Add pond member management UI (#54) 2026-07-09 20:22:52 +02:00
pages Import .docx and .odt documents as new pages (#63) 2026-07-10 07:34:43 +02:00
permissions Wire real permissions into collab tokens and revocation (#53) 2026-07-09 18:48:42 +02:00
plugins Add the sandbox host runtime for plugin iframes (#73) 2026-07-11 09:16:30 +02:00
ponds Add per-pond fonts: catalog, build, application, and admin UI (#66) 2026-07-10 11:16:29 +02:00
prisma Add Prisma with PostgreSQL, automatic migrations, and /readyz 2026-07-04 19:16:44 +02:00
public Add public read access and server-rendered page HTML (#56) 2026-07-09 23:46:25 +02:00
quotas Quota foundation: overrides, resolution, race-safe consumption (#22) 2026-07-05 20:55:59 +02:00
rate-limit Add DB-backed rate limiting with guard and decorator 2026-07-05 00:43:54 +02:00
scheduler Add page trash: soft delete, restore, and purge job (#31) 2026-07-08 12:48:17 +02:00
search Enforce permissions in API guards and retire interim access (#52) 2026-07-09 16:31:41 +02:00
settings Add non-image attachments with allowlist, SVG policy, and file managers (#61) 2026-07-10 02:52:40 +02:00
testing Add plugin storage, install API, and directory watcher (#71) 2026-07-10 16:55:26 +02:00
trash Enforce permissions in API guards and retire interim access (#52) 2026-07-09 16:31:41 +02:00
users Enforce permissions in API guards and retire interim access (#52) 2026-07-09 16:31:41 +02:00
versions Enforce permissions in API guards and retire interim access (#52) 2026-07-09 16:31:41 +02:00
app.module.ts Add plugin storage, install API, and directory watcher (#71) 2026-07-10 16:55:26 +02:00
main.ts Add page CRUD and Yjs state persistence (#23) 2026-07-05 22:25:41 +02:00