From b8d1aca7402072076ae9e20d653187c87678d1ca Mon Sep 17 00:00:00 2001 From: Simon Date: Wed, 16 Sep 2026 23:07:47 +0200 Subject: [PATCH] docs(deploy): scan worker + AUD0 wire + env contract --- DEPLOY.md | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/DEPLOY.md b/DEPLOY.md index fac67c8..0f087d2 100644 --- a/DEPLOY.md +++ b/DEPLOY.md @@ -72,6 +72,9 @@ docker run -d -p 3000:3000 \ | `ZITADEL_INTROSPECTION_CLIENT_ID` | Prod | — | RFC 7662-introspection-klient (Zitadel app `c0py-introspect`) — utan dessa körs endast Bearer-presence-check (warn-logg i prod) | | `ZITADEL_INTROSPECTION_CLIENT_SECRET` | Prod | — | Introspection-klientsecret (Infisical: `C0PY_ZITADEL_INTROSPECTION_CLIENT_SECRET`) | | `ZITADEL_EXPECTED_AUDIENCE` | Prod | — | Projektnivå-aud (Zitadel projekt-id `391064954179944451`); PAT-introspection bär aud=[clientId, projectId] | +| `AUD0_BASE_URL` | Nej | — | AUD0 evidens-URL (`https://api.aud0.siax.io`) — utan denna+key tappas events (advisory, loggad) | +| `AUD0_API_KEY` | Nej | — | AUD0 Bearer (Infisical: `AUD0_AUTH_TOKEN`) | +| `CHROMIUM_EXECUTABLE_PATH` | Nej | `/usr/bin/chromium-browser` | Browser för scan-worker (image installerar `apk chromium`) | | `DATABASE_URL` | Ja | — | Postgres-anslutning | | `AUD0_BASE_URL` | Nej | — | AUD0 evidens-URL | | `AUD0_API_KEY` | Nej | — | AUD0 autentisering | @@ -97,6 +100,20 @@ docker run -d -p 3000:3000 \ | GET | `/v1/c0py/scans?registryId=` | ägarens scans, valbar filter | | GET | `/v1/c0py/scans/:id` | 200 / 404 | +## Scan worker + AUD0 + +- API-containern kör en **in-process scan-worker** (poll 2s, atomic claim via + `FOR UPDATE SKIP LOCKED`): capture med playwright-core + system-chromium + (DNS-only domän måste vara nåbar från server6) → typed `EvidenceRecord`s + (runtime-html/dom/computed-style/stylesheet/asset/network-request/screenshot, + `confidence: measured`) → `scans.result` (JSONB) → status completed/failed. +- **AUD0 (fire-and-forget, advisory)**: `c0py.registry_created` (L1), + `c0py.scan_created` (L1), `c0py.scan_completed`/`c0py.scan_failed` (L2). + tenant_id = Zitadel resourceowner-org (server-side assertat; klienten kan + aldrig sätta tenant). AUD0-outage tappar events men blockerar aldrig API:et. +- `page.evaluate` körs som **ren string** — tsx/esbuild injicerar annars + `__name`-helpers som kraschar i browser-kontextet. + ## Hälsocheck ```