* 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.
23 KiB
Compliance & Audit (हिन्दी)
🌐 Languages: 🇺🇸 English · 🇪🇹 am · 🇸🇦 ar · 🇦🇿 az · 🇧🇬 bg · 🇧🇩 bn · 🇨🇿 cs · 🇩🇰 da · 🇩🇪 de · 🇬🇷 el · 🇪🇸 es · 🇪🇪 et · 🇮🇷 fa · 🇫🇮 fi · 🇫🇷 fr · 🇮🇪 ga · 🇮🇳 gu · 🇳🇬 ha · 🇮🇱 he · 🇭🇷 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
प्रामाणिक स्रोत:
src/lib/compliance/,src/app/api/compliance/अंतिम अपडेट: 2026-06-28 — v3.8.40
OmniRoute प्रशासनिक कार्रवाइयों, प्रमाणीकरण घटनाओं, प्रदाता क्रेडेंशियल जीवनचक्र परिवर्तनों और MCP टूल आह्वानों को SQLite-समर्थित ऑडिट तालिकाओं में दर्ज करता है। यह पृष्ठ बताता है कि क्या लॉग किया जाता है, वह कहाँ रहता है, उसे कितने समय तक बनाए रखा जाता है, API कुंजियाँ इससे बाहर रहने का विकल्प कैसे चुन सकती हैं और डेटा को कैसे क्वेरी किया जा सकता है।
कार्यान्वयन src/lib/compliance/index.ts (T-43 — "अनुपालन नियंत्रण") और src/lib/compliance/providerAudit.ts में मौजूद है। ऑडिट लेखन कभी अपवाद नहीं फेंकता: किसी भी विफलता पर कॉल को बिना किसी सूचना के रोक दिया जाता है, ताकि ऑडिट लॉगिंग मुख्य अनुरोध प्रवाह को बाधित न कर सके।
क्या लॉग किया जाता है
प्रशासनिक ऑडिट घटनाएँ (audit_log)
logAuditEvent({ action, actor, target, details, ... }) की प्रत्येक कॉल एक पंक्ति बनाती है। कार्रवाई स्ट्रिंग domain.verb (या domain.verb.outcome) पैटर्न का पालन करती हैं। स्रोत-वृक्ष में पुष्टि किए गए कार्रवाई प्रकारों में ये शामिल हैं:
| कार्रवाई | स्रोत |
|---|---|
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 |
प्रत्येक प्रविष्टि action, actor (डिफ़ॉल्ट रूप से "system"), target, details/metadata (JSON), ip_address, resource_type, status, request_id और timestamp को दर्ज करती है। संवेदनशील कुंजियों (apiKey, accessToken, refreshToken, password, *token/*secret/*apikey से मेल खाने वाली कोई भी कुंजी आदि) को पंक्ति लिखे जाने से पहले पुनरावर्ती रूप से संशोधित करके "[redacted]" कर दिया जाता है।
MCP टूल कॉल (mcp_tool_audit)
प्रत्येक MCP टूल आह्वान open-sse/mcp-server/audit.ts के माध्यम से एक पंक्ति लिखता है। स्कीमा (src/lib/db/migrations/002_mcp_a2a_tables.sql से):
| स्तंभ | टिप्पणियाँ |
|---|---|
id |
स्वतः-वृद्धि |
tool_name |
MCP टूल पहचानकर्ता |
input_hash |
इनपुट का sha256 (कोई पेलोड संग्रहीत नहीं) |
output_summary |
संक्षिप्त, काटा गया सारांश |
duration_ms |
बीता हुआ वास्तविक समय |
api_key_id |
कॉलकर्ता (नल हो सकता है) |
success |
1 / 0 |
error_code |
विफलता पर अंतिम त्रुटि कोड |
created_at |
ISO टाइमस्टैम्प |
अनुरोध / उपयोग लॉग
ये परिचालन टेलीमेट्री हैं (कड़ाई से प्रशासनिक ऑडिट नहीं), लेकिन समान अवधारण पाइपलाइन साझा करते हैं:
usage_history— प्रति-अनुरोध उपयोग समेकनcall_logs— पूर्ण प्रति-अनुरोध लॉग (पंक्ति-सीमा के अधीन, नीचे देखें)proxy_logs— प्रॉक्सी ट्रैफ़िक लॉग (पंक्ति-सीमा के अधीन)request_detail_logs— पुराना विस्तृत अनुरोध लॉग (मौजूद होने पर अभी भी हटाया जाता है)
स्टोरेज स्कीमा
पहली बार उपयोग किए जाने पर audit_log को ensureAuditLogSchema() द्वारा विलंबित रूप से बनाया जाता है:
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
);
इंडेक्स timestamp, action, actor, resource_type,
status, और request_id पर बनाए जाते हैं। लेगेसी DBs में अनुपलब्ध कॉलम
आवश्यकतानुसार ALTER TABLE के माध्यम से जोड़े जाते हैं।
प्रतिधारण और क्लीनअप
दो अलग-अलग प्रतिधारण अवधियों का पालन किया जाता है:
| पर्यावरण चर | डिफ़ॉल्ट | इन पर लागू होता है |
|---|---|---|
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 |
call_logs के लिए पंक्ति-सीमा ट्रिमिंग |
PROXY_LOGS_TABLE_MAX_ROWS |
100000 |
proxy_logs के लिए पंक्ति-सीमा ट्रिमिंग |
cleanupExpiredLogs() प्रतिधारण प्रक्रिया चलाता है। इसे सर्वर शुरू होने पर
src/instrumentation-node.ts से लागू किया जाता है। प्रत्येक रन में प्रति-टेबल
हटाई गई पंक्तियों की संख्या के साथ एक compliance.cleanup ऑडिट ईवेंट लॉग किया
जाता है। लंबे राइट लॉक से बचने के लिए प्रॉक्सी/कॉल लॉग ट्रिमिंग बैचों में
(BATCH_SIZE = 5000) की जाती है।
मैन्युअल अनुरोध-इतिहास क्लीनअप प्रतिधारण से अलग है। Request Logs
पृष्ठ POST /api/settings/purge-request-history को कॉल करता है, जो call_logs,
लेगेसी request_detail_logs, और ${DATA_DIR}/call_logs/ के अंतर्गत स्थानीय
अनुरोध आर्टिफ़ैक्ट हटाता है।
डिफ़ॉल्ट मान src/lib/logEnv.ts में परिभाषित हैं
(DEFAULT_APP_LOG_RETENTION_DAYS = 7, DEFAULT_CALL_LOG_RETENTION_DAYS = 7)।
noLog ऑप्ट-आउट (प्रति API कुंजी)
API कुंजियों को फ़्लैग किया जा सकता है, ताकि उनका डाउनस्ट्रीम कॉल ट्रैफ़िक लॉग
न किया जाए। यह फ़्लैग api_keys टेबल (no_log INTEGER DEFAULT 0) में रहता है
और हॉट-पाथ लुकअप के लिए इन-मेमोरी सेट में प्रतिबिंबित किया जाता है।
# no-log कुंजी बनाएँ (प्रबंधन प्रमाणीकरण आवश्यक है)
curl -X POST http://localhost:20128/api/keys \
-H "Cookie: auth_token=..." \
-H "Content-Type: application/json" \
-d '{"name": "Privacy key", "noLog": true}'
सहायक फ़ंक्शन (src/lib/compliance/index.ts):
setNoLog(apiKeyId, true|false)— इन-मेमोरी प्रविष्टि को टॉगल करता हैisNoLog(apiKeyId)— अनुरोध पथ पर जाँचा जाता है; अन्यथाapi_keys.no_logसे 30 सेकंड की कैश की गई रीड का उपयोग करता हैNO_LOG_API_KEY_IDS(पर्यावरण चर, कॉमा से अलग किए गए) — बूट के समय इन-मेमोरी सेट में पहले से लोड किए जाते हैं; तब उपयोगी है जब आप कॉलम को सीधे टॉगल नहीं कर सकते
प्रशासनिक ऑडिट ईवेंट (लॉगिन, प्रदाता परिवर्तन, MCP टूल कॉल आदि)
noLog से प्रभावित नहीं होते हैं — केवल प्रति-अनुरोध ट्रैफ़िक लॉगिंग से
ऑप्ट-आउट किया जाता है।
REST API
| एंडपॉइंट | विधि | विवरण | प्रमाणीकरण |
|---|---|---|---|
/api/compliance/audit-log |
GET |
फ़िल्टर के साथ पृष्ठांकित एडमिन ऑडिट प्रविष्टियाँ | प्रबंधन |
/api/mcp/audit |
GET |
पृष्ठांकित MCP टूल ऑडिट प्रविष्टियाँ | (open-sse) |
/api/mcp/audit/stats |
GET |
समेकित MCP ऑडिट आँकड़े | (open-sse) |
वर्तमान में कोई CSV एक्सपोर्ट एंडपॉइंट उपलब्ध नहीं है — डैशबोर्ड से एक्सपोर्ट करें या सीधे SQLite डेटाबेस को क्वेरी करें।
/api/compliance/audit-log को क्वेरी करना
समर्थित क्वेरी पैरामीटर (सभी वैकल्पिक हैं; सभी टेक्स्ट फ़िल्टर के लिए
LIKE %value% मिलान का उपयोग करते हैं):
action,actor,target,resourceType(याresource_type),status,requestId(याrequest_id)from/since,to/until— ISO टाइमस्टैम्पlimit(डिफ़ॉल्ट50, न्यूनतम1, अधिकतम500)offset(डिफ़ॉल्ट0, अधिकतम10_000)
प्रतिक्रिया एक JSON ऐरे है। पृष्ठांकन मेटाडेटा हेडर में लौटाया जाता है:
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/audit
(src/app/(dashboard)/dashboard/audit/page.tsx) पर उपलब्ध है। पेज में दो टैब हैं:
- अनुपालन (
ComplianceTab.tsx) —/api/compliance/audit-logसे एडमिन ऑडिट इवेंट। इवेंट प्रकार, गंभीरता (जानकारी / चेतावनी / गंभीर, जो action + status से प्राप्त होती है) और तारीख़ की सीमा के आधार पर फ़िल्टर करता है। गंभीरता की गणना action/status स्ट्रिंग से क्लाइंट-साइड पर की जाती है। - MCP (
McpAuditTab.tsx) —/api/mcp/auditसे MCP टूल ऑडिट, जिसमें टूल नाम और सफलता/विफलता के आधार पर फ़िल्टर उपलब्ध हैं।
दोनों टैब क्रमशः 50 (अनुपालन) और 25 (MCP) के पेज आकार के साथ पृष्ठांकन करते हैं।
प्रोवाइडर क्रेडेंशियल हेल्पर
src/lib/compliance/providerAudit.ts ऐसे संरचना-निर्माण हेल्पर प्रदान करता है जिनका उपयोग
प्रोवाइडर-प्रबंधन रूट द्वारा क्रेडेंशियल इवेंट उत्सर्जित करते समय किया जाता है:
summarizeProviderConnectionForAudit(connection)— कनेक्शन स्नैपशॉट कोdetailsमें लिखे जाने से पहलेapiKey,accessToken,refreshToken,idTokenऔरproviderSpecificData.consoleApiKeyको हटा देता है।getProviderAuditTarget(connection)—targetफ़ील्ड के लिए एक स्थिर"<provider>:<name|id>"स्ट्रिंग बनाता है।extractProviderWarnings(...payloads)— नीति/सुरक्षा चेतावनियों ([sanitizer],prompt injection detected,content has been filtered,safety filter,policy violation) के लिए प्रोवाइडर प्रतिक्रियाओं को स्कैन करता है और अधिकतम 5 मिलान सामने लाता है, जिनमें से प्रत्येक को 400 वर्णों तक सीमित किया जाता है।
सर्वोत्तम अभ्यास
- PII (कानूनी, चिकित्सा आदि) संभालने वाली API कुंजियों को
noLog: trueसे चिह्नित करें। - अपनी अवधारण नीति पूरी करने के लिए
APP_LOG_RETENTION_DAYS/CALL_LOG_RETENTION_DAYSको समायोजित करें। 7-दिन के डिफ़ॉल्ट रूढ़िवादी हैं। - अपने अनुपालन कार्यक्रम द्वारा आवश्यक आवृत्ति पर ऑडिट तालिका को प्लेटफ़ॉर्म से बाहर
(
sqlite3 dump) एक्सपोर्ट करें — कोई अंतर्निहित संग्रहण सुविधा मौजूद नहीं है। - ब्रूट-फ़ोर्स पहचान के लिए
auth.login.failedऔरauth.login.lockedकी संख्याओं को ट्रैक करें। - नए एडमिन एंडपॉइंट जोड़ते समय, एक स्थिर
domain.verb.outcomeaction स्ट्रिंग के साथlogAuditEvent({ ... })को कॉल करें और अनुरोध संदर्भ कोgetAuditRequestContext(request)के माध्यम से पास करें, ताकि IP औरrequestIdस्वतः कैप्चर हो जाएँ।
यह भी देखें
docs/security/GUARDRAILS.md— PII मास्किंग, प्रॉम्प्ट इंजेक्शनdocs/frameworks/MCP-SERVER.md— MCP टूल कैटलॉग और स्कोपdocs/reference/ENVIRONMENT.md— पर्यावरण वेरिएबल का संपूर्ण संदर्भ- स्रोत:
src/lib/compliance/,src/app/api/compliance/,src/app/api/mcp/audit/,src/lib/logEnv.ts