#297: optional office-to-PDF converter — config, API, cache, UI routing #421

Merged
Cordy merged 15 commits from preview-convert into main 2026-09-04 03:24:06 +00:00
Owner

Gotenberg-compatible converter integration, strictly optional (preview.converterUrl / CAIRN_PREVIEW_CONVERTER_URL, env wins). New internal/preview package: streaming multipart client, version-keyed bounded disk cache (default 200 MB, oldest evicted), per-key single-flight; full httptest suite (cache hit, single-flight, eviction, error path, URL-route rules). New endpoints GET /api/v1/preview/formats + GET /api/v1/preview/pdf (auth'd, inline PDF, recents-recorded, 100 MB source cap, 502 on converter failure). Frontend: boot probe → feat.convert, converting card → converted PDF in the existing viewer with chip, legacy-format card with admin-only deployment-guide hint, failures land on the retryable pvFail card. Default routed formats: doc/ppt/odt/odp/rtf/docx/pptx (spreadsheets stay client-side; overridable). Part of #297 — packaging (Helm/compose) and docs follow.

Gotenberg-compatible converter integration, strictly optional (`preview.converterUrl` / `CAIRN_PREVIEW_CONVERTER_URL`, env wins). New `internal/preview` package: streaming multipart client, version-keyed bounded disk cache (default 200 MB, oldest evicted), per-key single-flight; full httptest suite (cache hit, single-flight, eviction, error path, URL-route rules). New endpoints `GET /api/v1/preview/formats` + `GET /api/v1/preview/pdf` (auth'd, inline PDF, recents-recorded, 100 MB source cap, 502 on converter failure). Frontend: boot probe → `feat.convert`, converting card → converted PDF in the existing viewer with chip, legacy-format card with admin-only deployment-guide hint, failures land on the retryable pvFail card. Default routed formats: doc/ppt/odt/odp/rtf/docx/pptx (spreadsheets stay client-side; overridable). Part of #297 — packaging (Helm/compose) and docs follow.
Cordy merged commit 48130fbe09 into main 2026-09-04 03:24:06 +00:00
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: Cordy/Cairn#421
No description provided.