* 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.
18 KiB
Compliance & Audit (العربية)
🌐 Languages: 🇺🇸 English · 🇪🇹 am · 🇦🇿 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 · 🇷🇴 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. وتُضاف الأعمدة المفقودة في قواعد البيانات القديمة عبر
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) لتجنب أقفال الكتابة طويلة الأمد.
يكون التنظيف اليدوي لسجل الطلبات منفصلًا عن عملية الاحتفاظ. تستدعي صفحة سجلات الطلبات
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)، وتُنسخ أيضًا
إلى مجموعة في الذاكرة لإجراء عمليات البحث في المسار السريع.
# إنشاء مفتاح لا يسجّل البيانات (مصادقة الإدارة مطلوبة)
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)— يُتحقق منها في مسار الطلب؛ وتعود إلى قراءة مخزنة مؤقتًا لمدة 30 ثانية منapi_keys.no_logNO_LOG_API_KEY_IDS(متغير بيئة، مفصول بفواصل) — يُحمّل مسبقًا إلى المجموعة الموجودة في الذاكرة عند بدء التشغيل؛ وهو مفيد عندما يتعذر تبديل العمود مباشرةً
لا تتأثر أحداث التدقيق الإدارية (تسجيل الدخول، وتغييرات موفر الخدمة، واستدعاءات أدوات MCP، وما إلى ذلك)
بـ noLog — إذ يقتصر إلغاء الاشتراك على تسجيل حركة المرور لكل طلب.
واجهة REST API
| نقطة النهاية | الطريقة | الوصف | المصادقة |
|---|---|---|---|
/api/compliance/audit-log |
GET |
إدخالات تدقيق إدارية مُرقّمة مع عوامل تصفية | management |
/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— طوابع زمنية بتنسيق ISOlimit(القيمة الافتراضية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. يمكن التصفية حسب نوع الحدث ومستوى الخطورة (معلومات / تحذير / حرج، مشتق من الإجراء + الحالة) والنطاق الزمني. يُحسب مستوى الخطورة من جانب العميل استنادًا إلى سلاسل الإجراء/الحالة. - MCP (
McpAuditTab.tsx) — تدقيق أدوات MCP من/api/mcp/audit، مع عوامل تصفية حسب اسم الأداة والنجاح/الفشل.
تستخدم علامتا التبويب ترقيم الصفحات بحجم 50 (الامتثال) و25 (MCP) لكل صفحة.
دوال بيانات اعتماد المزوّد المساعدة
يوفّر src/lib/compliance/providerAudit.ts دوال مساعدة لتشكيل البيانات تستخدمها
مسارات إدارة المزوّدين عند إصدار أحداث بيانات الاعتماد:
summarizeProviderConnectionForAudit(connection)— يزيلapiKey، وaccessToken، وrefreshToken، وidToken، وproviderSpecificData.consoleApiKeyقبل كتابة لقطة الاتصال فيdetails.getProviderAuditTarget(connection)— ينشئ سلسلة ثابتة"<provider>:<name|id>"للحقلtarget.extractProviderWarnings(...payloads)— يفحص استجابات المزوّد بحثًا عن تحذيرات السياسة/السلامة ([sanitizer]، وprompt injection detected، وcontent has been filtered، وsafety filter، وpolicy violation) ويُظهر ما يصل إلى 5 نتائج، مع اقتطاع كل منها إلى 400 محرف.
أفضل الممارسات
- ميّز مفاتيح API التي تتعامل مع معلومات التعريف الشخصية (قانونية، طبية، إلخ) باستخدام
noLog: true. - اضبط
APP_LOG_RETENTION_DAYS/CALL_LOG_RETENTION_DAYSبما يتوافق مع سياسة الاحتفاظ لديك. القيم الافتراضية البالغة 7 أيام متحفظة. - صدّر جدول التدقيق إلى خارج المنصة (
sqlite3 dump) وفق الوتيرة التي يتطلبها برنامج الامتثال لديك — لا توجد أرشفة مضمّنة. - تتبّع أعداد
auth.login.failedوauth.login.lockedلاكتشاف هجمات القوة الغاشمة. - عند إضافة نقاط نهاية إدارية جديدة، استدعِ
logAuditEvent({ ... })باستخدام سلسلة إجراء ثابتة بنمطdomain.verb.outcome، ومرّر سياق الطلب عبرgetAuditRequestContext(request)بحيث يتم التقاط عنوان IP وrequestIdتلقائيًا.
انظر أيضًا
docs/security/GUARDRAILS.md— إخفاء معلومات التعريف الشخصية، وحقن المطالبات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