* feat(docs): mirror every docs/ page in all 65 locales Extends the documentation mirrors from the 22-page core set (#13940) to every Markdown page under docs/: 152 sources x 65 locales = 9,880 mirrors (6,208 new), language bars rewritten for the full locale list, state adopted so the blocking drift gate now covers all 152 pages. run-translation.mjs: an oversized block made only of table rows or list items (PROVIDER_REFERENCE.md 244-row table, FREE_TIERS.md 71-item list) is cut at item boundaries and rejoined without a blank line — the single 16-40 KB request outlived the backend socket for verbose scripts. 48 older mirrors whose tables had lost rows were retranslated with --force. * docs(i18n): refresh mirrors for the sources the base changed since the branch cut Section-level retranslation of the 29 docs (and README.md) whose source or mirrors moved on release/v3.8.51 during the run, then state adoption; the drift gate is green again on the merged tree.
15 KiB
Compliance & Audit (Dansk)
🌐 Languages: 🇺🇸 English · 🇪🇹 am · 🇸🇦 ar · 🇦🇿 az · 🇧🇬 bg · 🇧🇩 bn · 🇨🇿 cs · 🇩🇪 de · 🇬🇷 el · 🇪🇸 es · 🇪🇪 et · 🇮🇷 fa · 🇫🇮 fi · 🇫🇷 fr · 🇮🇪 ga · 🇮🇳 gu · 🇳🇬 ha · 🇮🇱 he · 🇮🇳 hi · 🇭🇷 hr · 🇭🇺 hu · 🇦🇲 hy · 🇮🇩 id · 🇳🇬 ig · 🇮🇹 it · 🇯🇵 ja · 🇬🇪 ka · 🇰🇭 km · 🇮🇳 kn · 🇰🇷 ko · 🇱🇹 lt · 🇱🇻 lv · 🇮🇳 ml · 🇮🇳 mr · 🇲🇾 ms · 🇲🇹 mt · 🇲🇲 my · 🇳🇵 ne · 🇳🇱 nl · 🇳🇴 no · 🇮🇳 or · 🇮🇳 pa · 🇵🇭 phi · 🇵🇱 pl · 🇵🇹 pt · 🇧🇷 pt-BR · 🇷🇴 ro · 🇷🇺 ru · 🇱🇰 si · 🇸🇰 sk · 🇸🇮 sl · 🇷🇸 sr · 🇸🇪 sv · 🇰🇪 sw · 🇮🇳 ta · 🇮🇳 te · 🇹🇭 th · 🇹🇷 tr · 🇺🇦 uk-UA · 🇵🇰 ur · 🇺🇿 uz · 🇻🇳 vi · 🇳🇬 yo · 🇨🇳 zh-CN · 🇹🇼 zh-TW
Sandhedskilde:
src/lib/compliance/,src/app/api/compliance/Senest opdateret: 2026-06-28 — v3.8.40
OmniRoute registrerer administrative handlinger, godkendelseshændelser, ændringer i livscyklussen for udbyderlegitimationsoplysninger og kald af MCP-værktøjer i SQLite-baserede revisionstabeller. Denne side beskriver, hvad der logges, hvor det gemmes, hvor længe det opbevares, hvordan API-nøgler kan fravælge logning, og hvordan dataene kan forespørges.
Implementeringen findes i src/lib/compliance/index.ts (T-43 — "Overholdelseskontroller") og src/lib/compliance/providerAudit.ts. Revisionsskrivninger kaster aldrig fejl: Ved enhver fejl ignoreres kaldet lydløst, så revisionslogning ikke kan afbryde hovedflowet for anmodningen.
Hvad logges
Administrative revisionshændelser (audit_log)
Hvert kald til logAuditEvent({ action, actor, target, details, ... }) opretter én række. Handlingsstrenge følger mønstret domain.verb (eller domain.verb.outcome). Bekræftede handlingstyper i kildekoden omfatter:
| Handling | Kilde |
|---|---|
auth.login.success |
src/app/api/auth/login/route.ts |
auth.login.failed |
src/app/api/auth/login/route.ts |
auth.login.locked |
src/app/api/auth/login/route.ts |
auth.login.error |
src/app/api/auth/login/route.ts |
auth.login.misconfigured |
src/app/api/auth/login/route.ts |
auth.login.setup_required |
src/app/api/auth/login/route.ts |
auth.logout.success |
src/app/api/auth/logout/route.ts |
provider.credentials.created |
src/app/api/providers/route.ts |
provider.credentials.updated |
src/app/api/providers/[id]/route.ts |
provider.credentials.revoked |
src/app/api/providers/[id]/route.ts |
provider.credentials.batch_revoked |
src/app/api/providers/route.ts |
sync.token.created |
src/app/api/sync/tokens/route.ts |
sync.token.revoked |
src/app/api/sync/tokens/[id]/route.ts |
compliance.cleanup |
src/lib/compliance/index.ts |
Hver post registrerer action, actor (har som standard værdien "system"), target, details/metadata (JSON), ip_address, resource_type, status, request_id og timestamp. Følsomme nøgler (apiKey, accessToken, refreshToken, password, alt, der matcher *token/*secret/*apikey osv.) maskeres rekursivt som "[redacted]", før rækken skrives.
Kald af MCP-værktøjer (mcp_tool_audit)
Hvert kald af et MCP-værktøj skriver en række via open-sse/mcp-server/audit.ts. Skema (fra src/lib/db/migrations/002_mcp_a2a_tables.sql):
| Kolonne | Bemærkninger |
|---|---|
id |
automatisk inkrementering |
tool_name |
MCP-værktøjsidentifikator |
input_hash |
sha256 af input (ingen nyttedata gemmes) |
output_summary |
kort, afkortet opsummering |
duration_ms |
forløbet tid |
api_key_id |
kalder (kan være null) |
success |
1 / 0 |
error_code |
afsluttende fejlkode ved fejl |
created_at |
ISO-tidsstempel |
Anmodnings-/forbrugslogfiler
Disse er driftsmæssig telemetri (ikke udelukkende administrativ revision), men bruger den samme opbevaringspipeline:
usage_history— samlet forbrug pr. anmodningcall_logs— fuldstændig log pr. anmodning (underlagt rækkegrænse, se nedenfor)proxy_logs— log over proxytrafik (underlagt rækkegrænse)request_detail_logs— ældre detaljeret anmodningslog (beskæres stadig, hvis den findes)
Lagringsskema
audit_log oprettes efter behov af ensureAuditLogSchema() ved første brug:
CREATE TABLE IF NOT EXISTS audit_log (
id INTEGER PRIMARY KEY AUTOINCREMENT,
timestamp TEXT NOT NULL DEFAULT (datetime('now')),
action TEXT NOT NULL,
actor TEXT NOT NULL DEFAULT 'system',
target TEXT,
details TEXT,
ip_address TEXT,
resource_type TEXT,
status TEXT,
request_id TEXT,
metadata TEXT
);
Der oprettes indekser på timestamp, action, actor, resource_type,
status og request_id. Manglende kolonner i ældre databaser tilføjes efter
behov via ALTER TABLE.
Opbevaring og oprydning
To separate opbevaringsperioder overholdes:
| Miljøvariabel | Standard | Gælder for |
|---|---|---|
APP_LOG_RETENTION_DAYS |
7 |
audit_log, mcp_tool_audit |
CALL_LOG_RETENTION_DAYS |
7 |
usage_history, call_logs, proxy_logs, request_detail_logs |
CALL_LOGS_TABLE_MAX_ROWS |
100000 |
Begrænsning af antal rækker i call_logs |
PROXY_LOGS_TABLE_MAX_ROWS |
100000 |
Begrænsning af antal rækker i proxy_logs |
cleanupExpiredLogs() udfører oprydningen i henhold til opbevaringsperioderne. Den kaldes ved serverstart
fra src/instrumentation-node.ts. Hver kørsel logger en
compliance.cleanup-revisionshændelse med antallet af slettede rækker pr. tabel. Beskæring af proxy-/kaldslogfiler
udføres i batches (BATCH_SIZE = 5000) for at undgå langvarige skrivelåse.
Manuel oprydning af anmodningshistorik er adskilt fra den automatiske opbevaring. Siden Request Logs
kalder POST /api/settings/purge-request-history, som sletter call_logs,
ældre request_detail_logs og lokale anmodningsartefakter under
${DATA_DIR}/call_logs/.
Standardværdier er defineret i src/lib/logEnv.ts
(DEFAULT_APP_LOG_RETENTION_DAYS = 7, DEFAULT_CALL_LOG_RETENTION_DAYS = 7).
Fravalg med noLog (pr. API-nøgle)
API-nøgler kan markeres, så deres efterfølgende kaldstrafik ikke logges.
Flaget findes i tabellen api_keys (no_log INTEGER DEFAULT 0) og afspejles
i et sæt i hukommelsen til hurtige opslag.
# Opret en nøgle uden logning (administrationsgodkendelse påkrævet)
curl -X POST http://localhost:20128/api/keys \
-H "Cookie: auth_token=..." \
-H "Content-Type: application/json" \
-d '{"name": "Privacy key", "noLog": true}'
Hjælpefunktioner (src/lib/compliance/index.ts):
setNoLog(apiKeyId, true|false)— aktiver eller deaktiver posten i hukommelsenisNoLog(apiKeyId)— kontrolleres på anmodningsstien; falder tilbage til en 30 sekunders cachelagret læsning fraapi_keys.no_logNO_LOG_API_KEY_IDS(miljøvariabel, kommasepareret) — indlæses på forhånd i sættet i hukommelsen ved opstart; nyttigt, når du ikke kan ændre kolonnen direkte
Administrative revisionshændelser (login, leverandørændringer, MCP-værktøjskald osv.)
påvirkes ikke af noLog — det er kun trafiklogning pr. anmodning, der
fravælges.
REST API
| Slutpunkt | Metode | Beskrivelse | Godkendelse |
|---|---|---|---|
/api/compliance/audit-log |
GET |
Sideinddelte administratorrevisionsposter med filtre | management |
/api/mcp/audit |
GET |
Sideinddelte MCP-værktøjsrevisionsposter | (open-sse) |
/api/mcp/audit/stats |
GET |
Aggregerede MCP-revisionsstatistikker | (open-sse) |
Der leveres i øjeblikket ikke noget slutpunkt til CSV-eksport — eksportér fra dashboardet, eller forespørg SQLite-databasen direkte.
Forespørgsler til /api/compliance/audit-log
Understøttede forespørgselsparametre (alle er valgfrie, og alle bruger LIKE %value%-matchning til
tekstfiltre):
action,actor,target,resourceType(ellerresource_type),status,requestId(ellerrequest_id)from/since,to/until— ISO-tidsstemplerlimit(standard50, min.1, maks.500)offset(standard0, maks.10_000)
Svaret er et JSON-array. Metadata om sideinddeling returneres i headere:
x-total-count, x-page-limit, x-page-offset.
curl "http://localhost:20128/api/compliance/audit-log?action=provider.credentials&from=2026-05-01" \
-H "Cookie: auth_token=..."
Dashboard
Dashboardet viser revisionsdata på /dashboard/audit
(src/app/(dashboard)/dashboard/audit/page.tsx). Siden har to faner:
- Overholdelse (
ComplianceTab.tsx) — administratorrevisionshændelser fra/api/compliance/audit-log. Filtrerer efter hændelsestype, alvorlighedsgrad (information / advarsel / kritisk, afledt af handling + status) og datointerval. Alvorlighedsgraden beregnes på klientsiden ud fra handlings-/statusstrengene. - MCP (
McpAuditTab.tsx) — MCP-værktøjsrevision fra/api/mcp/auditmed filtre efter værktøjsnavn og gennemført/mislykket.
Begge faner bruger sideinddeling med sidestørrelser på henholdsvis 50 (overholdelse) og 25 (MCP).
Hjælpefunktioner til udbyderlegitimationsoplysninger
src/lib/compliance/providerAudit.ts indeholder formateringshjælpefunktioner, som bruges af
ruterne til udbyderadministration, når de udsender legitimationshændelser:
summarizeProviderConnectionForAudit(connection)— fjernerapiKey,accessToken,refreshToken,idTokenogproviderSpecificData.consoleApiKey, før forbindelsens snapshot skrives tildetails.getProviderAuditTarget(connection)— sammensætter en stabil"<provider>:<name|id>"-streng til feltettarget.extractProviderWarnings(...payloads)— scanner udbydersvar for politik-/sikkerhedsadvarsler ([sanitizer],prompt injection detected,content has been filtered,safety filter,policy violation) og returnerer op til 5 fund, som hver afkortes til 400 tegn.
Bedste praksis
- Markér API-nøgler, der håndterer personhenførbare oplysninger (juridiske, medicinske osv.), med
noLog: true. - Tilpas
APP_LOG_RETENTION_DAYS/CALL_LOG_RETENTION_DAYS, så de opfylder jeres opbevaringspolitik. Standardværdierne på 7 dage er konservative. - Eksportér revisionstabellen væk fra platformen (
sqlite3 dump) med det interval, som jeres complianceprogram kræver — der findes ingen indbygget arkivering. - Overvåg antallet af
auth.login.failedogauth.login.lockedfor at opdage brute force-angreb. - Når du tilføjer nye administratorslutpunkter, skal du kalde
logAuditEvent({ ... })med en stabildomain.verb.outcome-handlingsstreng og videregive anmodningskonteksten viagetAuditRequestContext(request), så IP-adressen ogrequestIdregistreres automatisk.
Se også
docs/security/GUARDRAILS.md— maskering af personhenførbare oplysninger, promptinjektiondocs/frameworks/MCP-SERVER.md— katalog over MCP-værktøjer og adgangsomfangdocs/reference/ENVIRONMENT.md— komplet reference til miljøvariabler- Kilde:
src/lib/compliance/,src/app/api/compliance/,src/app/api/mcp/audit/,src/lib/logEnv.ts