* 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.
16 KiB
Compliance & Audit (Română)
🌐 Languages: 🇺🇸 English · 🇪🇹 am · 🇸🇦 ar · 🇦🇿 az · 🇧🇬 bg · 🇧🇩 bn · 🇨🇿 cs · 🇩🇰 da · 🇩🇪 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 · 🇷🇺 ru · 🇱🇰 si · 🇸🇰 sk · 🇸🇮 sl · 🇷🇸 sr · 🇸🇪 sv · 🇰🇪 sw · 🇮🇳 ta · 🇮🇳 te · 🇹🇭 th · 🇹🇷 tr · 🇺🇦 uk-UA · 🇵🇰 ur · 🇺🇿 uz · 🇻🇳 vi · 🇳🇬 yo · 🇨🇳 zh-CN · 🇹🇼 zh-TW
Sursa de referință:
src/lib/compliance/,src/app/api/compliance/Ultima actualizare: 2026-06-28 — v3.8.40
OmniRoute înregistrează acțiunile administrative, evenimentele de autentificare, modificările ciclului de viață al credențialelor furnizorilor și invocările instrumentelor MCP în tabele de audit susținute de SQLite. Această pagină prezintă ce se înregistrează, unde sunt stocate datele, cât timp sunt păstrate, cum pot cheile API să dezactiveze înregistrarea și cum pot fi interogate datele.
Implementarea se află în src/lib/compliance/index.ts (T-43 — „Controale de conformitate”) și src/lib/compliance/providerAudit.ts. Operațiunile de scriere în jurnalul de audit nu generează niciodată excepții: în cazul oricărei erori, apelul este ignorat în mod silențios, astfel încât jurnalizarea de audit să nu poată întrerupe fluxul principal al cererii.
Ce se înregistrează
Evenimente de audit administrativ (audit_log)
Fiecare apel către logAuditEvent({ action, actor, target, details, ... }) produce un rând. Șirurile de acțiuni urmează un model domain.verb (sau domain.verb.outcome). Tipurile de acțiuni confirmate în arborele sursă includ:
| Acțiune | Sursă |
|---|---|
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 |
Fiecare intrare înregistrează action, actor (valoarea implicită este "system"), target, details/metadata (JSON), ip_address, resource_type, status, request_id și timestamp. Cheile sensibile (apiKey, accessToken, refreshToken, password, orice corespunde modelelor *token/*secret/*apikey etc.) sunt redactate recursiv ca "[redacted]" înainte ca rândul să fie scris.
Apeluri ale instrumentelor MCP (mcp_tool_audit)
Fiecare invocare a unui instrument MCP scrie un rând prin open-sse/mcp-server/audit.ts. Schema (din src/lib/db/migrations/002_mcp_a2a_tables.sql):
| Coloană | Note |
|---|---|
id |
incrementare automată |
tool_name |
identificatorul instrumentului MCP |
input_hash |
sha256 al datelor de intrare (sarcina utilă nu este stocată) |
output_summary |
rezumat scurt, trunchiat |
duration_ms |
timp scurs |
api_key_id |
apelantul (poate fi nul) |
success |
1 / 0 |
error_code |
codul erorii terminale în caz de eșec |
created_at |
marcaj temporal ISO |
Jurnale de cereri/utilizare
Acestea reprezintă telemetrie operațională (nu strict audit administrativ), dar folosesc același mecanism de retenție:
usage_history— agregarea utilizării pentru fiecare cererecall_logs— jurnal complet pentru fiecare cerere (supus unei limite de rânduri; consultați mai jos)proxy_logs— jurnalul traficului proxy (supus unei limite de rânduri)request_detail_logs— jurnal detaliat moștenit al cererilor (este în continuare curățat dacă există)
Schema de stocare
audit_log este creat în mod întârziat de ensureAuditLogSchema() la prima utilizare:
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
);
Sunt creați indecși pentru timestamp, action, actor, resource_type,
status și request_id. Coloanele lipsă din bazele de date vechi sunt adăugate
la nevoie prin ALTER TABLE.
Păstrare și curățare
Sunt respectate două perioade de păstrare distincte:
| Variabilă de mediu | Valoare implicită | Se aplică pentru |
|---|---|---|
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 |
Limitarea numărului de rânduri pentru call_logs |
PROXY_LOGS_TABLE_MAX_ROWS |
100000 |
Limitarea numărului de rânduri pentru proxy_logs |
cleanupExpiredLogs() execută procesul de aplicare a perioadei de păstrare. Este apelată la pornirea serverului
din src/instrumentation-node.ts. Fiecare execuție înregistrează un eveniment de audit
compliance.cleanup cu numărul de ștergeri pentru fiecare tabel. Reducerea jurnalelor proxy/apeluri
se face în loturi (BATCH_SIZE = 5000) pentru a evita blocările îndelungate la scriere.
Curățarea manuală a istoricului solicitărilor este separată de procesul de păstrare. Pagina Jurnale de solicitări
apelează POST /api/settings/purge-request-history, care șterge call_logs,
vechiul tabel request_detail_logs și artefactele locale ale solicitărilor din
${DATA_DIR}/call_logs/.
Valorile implicite sunt definite în src/lib/logEnv.ts
(DEFAULT_APP_LOG_RETENTION_DAYS = 7, DEFAULT_CALL_LOG_RETENTION_DAYS = 7).
Dezactivarea jurnalizării prin noLog (pentru fiecare cheie API)
Cheile API pot fi marcate astfel încât traficul apelurilor lor ulterioare să nu fie jurnalizat. Indicatorul
se află în tabelul api_keys (no_log INTEGER DEFAULT 0) și este oglindit
într-un set din memorie pentru căutări rapide pe traseul critic.
# Creați o cheie fără jurnalizare (este necesară autentificarea pentru administrare)
curl -X POST http://localhost:20128/api/keys \
-H "Cookie: auth_token=..." \
-H "Content-Type: application/json" \
-d '{"name": "Privacy key", "noLog": true}'
Funcții auxiliare (src/lib/compliance/index.ts):
setNoLog(apiKeyId, true|false)— activează sau dezactivează intrarea din memorieisNoLog(apiKeyId)— verificată pe traseul solicitării; în caz contrar, utilizează o citire dinapi_keys.no_logmemorată în cache timp de 30 sNO_LOG_API_KEY_IDS(variabilă de mediu, valori separate prin virgulă) — preîncărcate în setul din memorie la pornire; utilă atunci când nu puteți modifica direct coloana
Evenimentele administrative de audit (autentificări, modificări ale furnizorilor, apeluri ale instrumentelor MCP etc.)
nu sunt afectate de noLog — opțiunea dezactivează numai jurnalizarea traficului
pentru fiecare solicitare.
API REST
| Endpoint | Metodă | Descriere | Autentificare |
|---|---|---|---|
/api/compliance/audit-log |
GET |
Înregistrări paginate de audit administrativ, cu filtre | management |
/api/mcp/audit |
GET |
Înregistrări paginate de audit al instrumentelor MCP | (open-sse) |
/api/mcp/audit/stats |
GET |
Statistici agregate de audit MCP | (open-sse) |
În prezent, nu este furnizat niciun endpoint pentru export CSV — exportați din panoul de control sau interogați direct baza de date SQLite.
Interogarea /api/compliance/audit-log
Parametri de interogare acceptați (toți sunt opționali, iar filtrele de text folosesc
potrivirea LIKE %value%):
action,actor,target,resourceType(sauresource_type),status,requestId(saurequest_id)from/since,to/until— marcaje temporale ISOlimit(implicit50, minim1, maxim500)offset(implicit0, maxim10_000)
Răspunsul este un tablou JSON. Metadatele de paginare sunt returnate în antete:
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=..."
Panou de control
Panoul de control expune datele de audit la /dashboard/audit
(src/app/(dashboard)/dashboard/audit/page.tsx). Pagina are două file:
- Conformitate (
ComplianceTab.tsx) — evenimente de audit administrativ de la/api/compliance/audit-log. Filtrează după tipul evenimentului, severitate (informativă / avertizare / critică, derivată din acțiune + stare) și interval de date. Severitatea este calculată în partea de client pe baza șirurilor de acțiune/stare. - MCP (
McpAuditTab.tsx) — auditul instrumentelor MCP de la/api/mcp/audit, cu filtre după numele instrumentului și succes/eșec.
Ambele file folosesc paginarea, cu dimensiuni ale paginii de 50 (conformitate) și 25 (MCP).
Funcții auxiliare pentru acreditările furnizorilor
src/lib/compliance/providerAudit.ts furnizează funcții auxiliare de structurare utilizate de rutele de
gestionare a furnizorilor atunci când acestea emit evenimente privind acreditările:
summarizeProviderConnectionForAudit(connection)— eliminăapiKey,accessToken,refreshToken,idTokenșiproviderSpecificData.consoleApiKeyînainte ca instantaneul conexiunii să fie scris îndetails.getProviderAuditTarget(connection)— compune un șir stabil"<provider>:<name|id>"pentru câmpultarget.extractProviderWarnings(...payloads)— scanează răspunsurile furnizorilor pentru avertismente privind politicile/siguranța ([sanitizer],prompt injection detected,content has been filtered,safety filter,policy violation) și returnează cel mult 5 rezultate, fiecare trunchiat la 400 de caractere.
Bune practici
- Marcați cheile API care gestionează date cu caracter personal (juridice, medicale etc.) cu
noLog: true. - Ajustați
APP_LOG_RETENTION_DAYS/CALL_LOG_RETENTION_DAYSpentru a respecta politica dvs. de păstrare. Valorile implicite de 7 zile sunt conservatoare. - Exportați tabelul de audit în afara platformei (
sqlite3 dump) cu frecvența impusă de programul dvs. de conformitate — nu există nicio funcționalitate de arhivare încorporată. - Monitorizați numărul de evenimente
auth.login.failedșiauth.login.lockedpentru detectarea atacurilor prin forță brută. - Când adăugați endpointuri administrative noi, apelați
logAuditEvent({ ... })cu un șir de acțiune stabildomain.verb.outcomeși transmiteți contextul cererii pringetAuditRequestContext(request), astfel încât adresa IP șirequestIdsă fie capturate automat.
Consultați și
docs/security/GUARDRAILS.md— mascarea PII, injectarea prompturilordocs/frameworks/MCP-SERVER.md— catalogul instrumentelor MCP și domeniile de aplicaredocs/reference/ENVIRONMENT.md— referința completă a variabilelor de mediu- Sursă:
src/lib/compliance/,src/app/api/compliance/,src/app/api/mcp/audit/,src/lib/logEnv.ts