| `GET` | `/api/auth/saml/metadata` | عام | XML لبيانات وصف SAML SP عند تفعيل SAML |
| `GET` | `/api/auth/saml/login` | عام | بدء تسجيل دخول SAML |
| `POST` | `/api/auth/saml/callback` | عام | خدمة استهلاك تأكيدات SAML |
عند تفعيل MFA لمستخدم، يُرجع `POST /api/auth/login` القيمة `{"requiresMfa":true,"mfaToken":"...","mfaRequired":true|false}` بدلًا من رمز الجلسة. أرسل ذلك `mfaToken` إضافةً إلى رمز TOTP أو رمز استرداد إلى `/api/auth/mfa/complete`.
### الأذونات {#permissions}
| الإذن | مسؤول | مستخدم |
|-----------|:-----:|:----:|
| استخدام الأدوات | ✓ | ✓ |
| الملفات/خطوط المعالجة/مفاتيح API الخاصة | ✓ | ✓ |
| رؤية ملفات/خطوط معالجة/مفاتيح جميع المستخدمين | ✓ | - |
| كتابة الإعدادات | ✓ | - |
| إدارة المستخدمين والفرق | ✓ | - |
| إدارة العلامة التجارية | ✓ | - |
## فحص الصحة {#health-check}
| الطريقة | المسار | الوصول | الوصف |
|--------|------|--------|-------------|
| `GET` | `/api/v1/health` | عام | فحص صحة أساسي. يُرجع `{"status":"healthy","version":"..."}` مع 200، أو `{"status":"unhealthy"}` مع 503 إذا تعذر الوصول إلى قاعدة البيانات. |
| `GET` | `/api/v1/readyz` | عام | فحص الجاهزية. يفحص PostgreSQL وRedis ومساحة القرص وS3 عند تهيئته. يُرجع 503 عندما لا ينبغي أن يستقبل مثيل الخادم أي حركة مرور. |
| `GET` | `/api/v1/admin/health` | مسؤول (`system:health`) | تشخيصات مفصلة تشمل مدة التشغيل، ووضع التخزين، وحالة قاعدة البيانات، وحالة الطابور، وتوفر وحدة معالجة الرسوميات GPU. |
## استخدام الأدوات {#using-tools}
تتبع كل أداة النمط نفسه:
```bash
# Single file
curl -X POST http://localhost:1349/api/v1/tools/<section>/<toolId> \
-H "Authorization: Bearer <token>"\
-F "file=@input.jpg"\
-F 'settings={"width":800,"height":600}'
# Batch (returns ZIP)
curl -X POST http://localhost:1349/api/v1/tools/<section>/<toolId>/batch \
-H "Authorization: Bearer <token>"\
-F "files=@a.jpg"\
-F "files=@b.jpg"\
-F 'settings={...}'
```
يكون `<section>` واحدًا من `image` أو `video` أو `audio` أو `pdf` أو `files`.
- الرفع هو `multipart/form-data`.
-`settings` عبارة عن سلسلة JSON تحمل خيارات خاصة بالأداة.
-`clientJobId` حقل نموذج اختياري لربط التقدم المُقدَّم من المستدعي.
-`fileId` حقل نموذج اختياري يشير إلى عنصر موجود في مكتبة الملفات. عند وجوده، يُحفظ الناتج المُعالَج كإصدار جديد وتتضمن الاستجابة `savedFileId`.
- **أي أداة مُدرجة في طابور** يمكن أن تُرجع JSON بحالة 202 إذا كانت طويلة التشغيل أو تجاوزت نافذة الانتظار المتزامن: `{"jobId":"...","async":true}`. اتصل بـ SSE لمتابعة التقدم، ثم نزّل عند الاكتمال (راجع [تتبع التقدم](#progress-tracking)).
- **المسارات الدفعية** تُرجع أرشيف ZIP يُبَث مباشرةً (مع ترويسة `X-Job-Id`) للأدوات المُسجَّلة في سجل الدفعات العام.
## مرجع الأدوات {#tools-reference}
### إعدادات التحويل الجاهزة {#conversion-presets}
يتضمن الكتالوج المشترك 83 نقطة نهاية مخصصة لإعدادات التحويل الجاهزة مثل `jpg-to-png` و`mov-to-mp4` و`m4a-to-mp3` و`pdf-to-jpg` و`excel-to-csv`. الإعدادات الجاهزة هي مسارات أدوات من الدرجة الأولى:
`POST /api/v1/tools/<section>/<presetId>`
يقفل كل إعداد جاهز صيغة الإخراج ويفوّض إلى أداة أساسية مثل `convert` أو `convert-video` أو `extract-audio` أو `convert-audio` أو `image-to-pdf` أو `pdf-to-image` أو `svg-to-raster` أو `convert-spreadsheet`. راجع [إعدادات التحويل الجاهزة](/ar/tools/conversion-presets) للاطلاع على جدول المسارات الكامل والإعدادات الاختيارية.
### الأساسيات {#essentials}
| معرّف الأداة | الاسم | الإعدادات الرئيسية |
|---------|------|-------------|
| `resize` | تغيير الحجم | `width`، `height`، `fit` (cover/contain/fill/inside/outside)، `percentage`، `withoutEnlargement`، إضافةً إلى 23 إعدادًا جاهزًا لوسائل التواصل الاجتماعي |
تعمل جميع أدوات الذكاء الاصطناعي على عتادك: على المعالج المركزي CPU افتراضيًا، أو على NVIDIA CUDA عند توفر وحدة معالجة رسوميات NVIDIA مدعومة. لا يُدعم حاليًا تسريع وحدات معالجة الرسوميات المدمجة Intel/AMD iGPU عبر VA-API أو Quick Sync أو OpenCL لاستدلال الذكاء الاصطناعي. لا حاجة إلى اتصال بالإنترنت.
| معرّف الأداة | الاسم | نموذج الذكاء الاصطناعي | الإعدادات الرئيسية |
| `red-eye-removal` | إزالة العين الحمراء | معالم الوجه + تحليل اللون | `sensitivity`، `strength` |
| `restore-photo` | ترميم الصور | خط معالجة متعدد الخطوات | `mode` (auto/light/heavy)، `scratchRemoval`، `faceEnhancement`، `fidelity`، `denoise`، `denoiseStrength`، `colorize` |
| `passport-photo` | صورة جواز السفر | معالم MediaPipe | تدفق ثنائي المرحلة. يستخدم التحليل multipart `file`؛ ويستخدم الإنشاء JSON مع `countryCode` و`bgColor` و`printLayout` (none/4x6/a4)، ومعالم، وأبعاد الصورة |
| `content-aware-resize` | تغيير الحجم المدرك للمحتوى | نحت اللُّحمات (caire) | `width`، `height`، `protectFaces`، `blurRadius`، `sobelThreshold`، `square` |
تُتيح بعض الأدوات نقاط نهاية إضافية إلى جانب `POST /api/v1/tools/<section>/<toolId>` القياسية:
| الطريقة | المسار | الوصف |
|--------|------|-------------|
| `GET` | `/api/v1/tools/popular` | إرجاع معرّفات الأدوات الشائعة، مع الرجوع إلى قائمة افتراضية منسّقة عندما تكون بيانات الاستخدام قليلة |
| `POST` | `/api/v1/tools/image/remove-background/effects` | تطبيق تأثيرات الخلفية (لون/تدرج/تمويه/ظل) دون إعادة تشغيل الذكاء الاصطناعي. يستخدم القناع المخزَّن مؤقتًا من عملية الإزالة الأولية. |
| `POST` | `/api/v1/tools/image/edit-metadata/inspect` | قراءة البيانات الوصفية EXIF/IPTC/XMP الموجودة من صورة |
| `POST` | `/api/v1/tools/image/strip-metadata/inspect` | فحص حقول البيانات الوصفية قبل إزالتها |
| `POST` | `/api/v1/tools/image/passport-photo/generate` | المرحلة 2: القص وتغيير الحجم والتبليط باستخدام التحليل المخزَّن مؤقتًا. دون إعادة تشغيل الذكاء الاصطناعي. |
| `POST` | `/api/v1/tools/image/gif-tools/info` | الحصول على البيانات الوصفية لـ GIF (عدد الإطارات، الأبعاد، المدة) |
| `POST` | `/api/v1/tools/pdf/pdf-to-image/info` | الحصول على البيانات الوصفية لـ PDF (عدد الصفحات، الأبعاد) |
| `POST` | `/api/v1/tools/pdf/pdf-to-image/preview` | إنشاء معاينة لصفحة PDF محددة |
| `POST` | `/api/v1/tools/pdf/pdf-to-jpg/info` | الحصول على البيانات الوصفية لـ PDF للإعداد الجاهز المخصص لـ JPG |
| `POST` | `/api/v1/tools/pdf/pdf-to-jpg/preview` | إنشاء معاينة صفحة PDF بإعداد JPG الجاهز |
| `POST` | `/api/v1/tools/pdf/pdf-to-png/info` | الحصول على البيانات الوصفية لـ PDF للإعداد الجاهز المخصص لـ PNG |
| `POST` | `/api/v1/tools/pdf/pdf-to-png/preview` | إنشاء معاينة صفحة PDF بإعداد PNG الجاهز |
| `POST` | `/api/v1/tools/pdf/pdf-to-tiff/info` | الحصول على البيانات الوصفية لـ PDF للإعداد الجاهز المخصص لـ TIFF |
| `POST` | `/api/v1/tools/pdf/pdf-to-tiff/preview` | إنشاء معاينة صفحة PDF بإعداد TIFF الجاهز |
| `POST` | `/api/v1/tools/image/svg-to-raster/batch` | تحويل دفعي لعدة ملفات SVG إلى صور نقطية |
| `POST` | `/api/v1/tools/image/image-enhancement/analyze` | تحليل جودة الصورة وإرجاع توصيات التحسين |
| `POST` | `/api/v1/tools/image/optimize-for-web/preview` | معاينة خفيفة لضبط المعاملات المباشر. يُرجع صورة محسَّنة مع ترويسات الحجم. |
تطبيق أداة عامة مُفعَّلة للدفعات على عدة ملفات دفعةً واحدة. يُرجع أرشيف ZIP. تستخدم المسارات المخصصة متعددة الملفات أو متعددة الخطوات، مثل توقيع PDF ومسارات الإعدادات الجاهزة PDF إلى صورة، عقد نقطة نهاية خاصة بها بدلًا من مسار `/batch` العام.
curl -X POST http://localhost:1349/api/v1/tools/image/compress/batch \
-H "Authorization: Bearer <token>"\
-F "files=@a.jpg"\
-F "files=@b.jpg"\
-F "files=@c.jpg"\
-F 'settings={"quality":80}'
```
يتحكم في التزامن `CONCURRENT_JOBS` (الافتراضي: يُكتشف تلقائيًا من أنوية المعالج). يحدّ `MAX_BATCH_SIZE` عدد الملفات لكل دفعة (الافتراضي: 100؛ اضبطه على 0 لغير محدود).
## خطوط المعالجة {#pipelines}
### تنفيذ خط معالجة {#execute-a-pipeline}
```bash
# Single file
curl -X POST http://localhost:1349/api/v1/pipeline/execute \
ناتج كل خطوة هو مدخل الخطوة التالية. تسمح خطوط المعالجة بـ 20 خطوة افتراضيًا، قابلة للتهيئة عبر `MAX_PIPELINE_STEPS`. اضبط `MAX_PIPELINE_STEPS=0` لإزالة الحد.
### حفظ خطوط المعالجة وإدارتها {#save-and-manage-pipelines}
| الطريقة | المسار | الوصف |
|--------|------|-------------|
| `POST` | `/api/v1/pipeline/save` | حفظ خط معالجة مُسمّى (`name`، `description`، `steps[]`) |
| `GET` | `/api/v1/pipeline/list` | سرد خطوط المعالجة المحفوظة (يرى المسؤولون الكل؛ ويرى المستخدمون ما يخصهم) |
| `DELETE` | `/api/v1/pipeline/:id` | حذف (المالك أو المسؤول) |
تُصدر المهام طويلة التشغيل والأدوات المُدرجة في طابور والمهام الدفعية وخطوط المعالجة تقدمًا لحظيًا عبر الأحداث المُرسَلة من الخادم Server-Sent Events. تدفق التقدم عام ومُفهرَس بمعرّف المهمة، لذا لا يحتاج العملاء إلى إرسال ترويسة Authorization لقراءته.
```bash
# Connect to the SSE stream (jobId is in the JSON response body from the tool endpoint)
يستخدم تكوين وقت التشغيل مجموعة مغلقة من المفاتيح المعروفة. تتطلب القراءة `settings:read` وتتطلب الكتابة `settings:write`؛ كما تتطلب مفاتيح الأمان والامتثال على التوالي `security:manage` أو `compliance:manage`. تتطلب الإعدادات السرية صلاحية مسؤول كاملة، بينما تكون بيانات الاعتماد والحالة التي تديرها نقاط نهاية مخصصة للقراءة فقط هنا. يتم التحقق من صحة التحديثات المجمّعة قبل كتابة أي قيمة.
تفضيلات كل مستخدم منفصلة عن إعدادات مثيل الخادم. يمكن لأي مستخدم مصادَق قراءة خريطة تفضيلاته الخاصة وتحديثها.
| الطريقة | المسار | الوصف |
|--------|------|-------------|
| `GET` | `/api/v1/preferences` | الحصول على تفضيلات المستخدم الحالي كـ `{ "preferences": { ... } }` |
| `PUT` | `/api/v1/preferences` | إدراج أو تحديث مفتاح تفضيل واحد أو أكثر للمستخدم الحالي |
## الأدوار {#roles}
إدارة أدوار مخصصة بأذونات دقيقة.
| الطريقة | المسار | الوصول | الوصف |
|--------|------|--------|-------------|
| `GET` | `/api/v1/roles` | مسؤول (`audit:read`) | سرد جميع الأدوار مع أعداد المستخدمين |
| `POST` | `/api/v1/roles` | مسؤول (`security:manage`) | إنشاء دور مخصص (`name`، `description`، `permissions`) |
| `PUT` | `/api/v1/roles/:id` | مسؤول (`security:manage`) | تحديث دور مخصص (لا يمكن تعديل الأدوار المدمجة) |
| `DELETE` | `/api/v1/roles/:id` | مسؤول (`security:manage`) | حذف دور مخصص (لا يمكن حذف الأدوار المدمجة؛ يعود المستخدمون المتأثرون إلى الدور `user`) |
نقطة نهاية للمسؤول فقط لمراجعة الإجراءات المتعلقة بالأمان.
| الطريقة | المسار | الوصول | الوصف |
|--------|------|--------|-------------|
| `GET` | `/api/v1/audit-log` | مسؤول (`audit:read`) | سجل تدقيق مُقسَّم إلى صفحات مع مرشحات اختيارية |
معاملات الاستعلام:
| المعامل | الوصف |
|-----------|-------------|
| `page` | رقم الصفحة (الافتراضي: 1) |
| `limit` | المدخلات لكل صفحة (الافتراضي: 50، الحد الأقصى: 100) |
| `action` | التصفية حسب نوع الإجراء (مثال `ROLE_CREATED`، `ROLE_DELETED`) |
| `ip` | التصفية حسب عنوان IP المصدر |
| `from` | تصفية المدخلات بعد تاريخ ISO 8601 هذا |
| `to` | تصفية المدخلات قبل تاريخ ISO 8601 هذا |
## التحليلات {#analytics}
| الطريقة | المسار | الوصول | الوصف |
|--------|------|--------|-------------|
| `GET` | `/api/v1/config/analytics` | عام | الحصول على تهيئة التحليلات الفعلية (مفتاح PostHog، DSN لـ Sentry، معدل أخذ العينات). تكون المفاتيح وDSN ومعرّف مثيل الخادم فارغة عند إيقاف التحليلات، سواءً من التضمين وقت الترجمة أو من إعداد `analyticsEnabled` لمثيل الخادم. |
| `POST` | `/api/v1/feedback` | مصادَق | إرسال ملاحظات المستخدم الصريحة إلى مشروع PostHog المهيَّأ كـ `feedback_submitted`. يحترم المسار بوابة التحليلات، ويحدّ معدل الإرسال، ويزيل حقول الاتصال ما لم يكن `contactOk` صحيحًا، ولا يقبل أبدًا محتويات الملفات أو أسماء الملفات أو مسارات الرفع أو نص الخطأ الخاص الخام. عند تعطيل التحليلات، يُرجع `{ "ok": true, "accepted": false }`. |
| `PUT` | `/api/v1/settings` | مسؤول (`settings:write`) | تعيين إلغاء الاشتراك على مستوى مثيل الخادم. أرسل نص JSON `{ "analyticsEnabled": "false" }` لإيقاف التحليلات للجميع، أو `"true"` لإعادة تشغيلها. |
إدارة حزم ميزات الذكاء الاصطناعي (تثبيت/إلغاء تثبيت حزم نماذج الذكاء الاصطناعي في بيئة Docker). فضّل نقطة نهاية التثبيت على مستوى الأداة عند تفعيل أداة من أتمتة مخصصة: تحتاج بعض أدوات الذكاء الاصطناعي إلى أكثر من حزمة مشتركة، وتتخطى هذه النقطة الحزم المثبَّتة مسبقًا وتُدرج المفقودة فقط في الطابور.
OCR هو تحسين اختياري وليس تبعية ثابتة. تعمل طبقة `fast` Tesseract بدون حزمة؛ يقوم `POST /api/v1/admin/features/ocr/install` بتثبيت حزمة RapidOCR الموقعة لـ `balanced` و`best` على Linux amd64 أو arm64. يستخدم وقت تشغيل OCR الدقيق CPU على وحدة المعالجة المركزية (CPU) فقط ومضيفي NVIDIA ويتطلب ما لا يقل عن 4 GiB من الذاكرة الفعالة (حد cgroup للحاوية التي تم تكوينها، وإلا فإن ذاكرة المضيف). يُبلغ SnapOtter عن سبب توافق `requiredMemoryBytes` و`effectiveMemoryBytes` و`insufficient-memory`، ويرفض التثبيت غير المتوافق قبل التنزيل. لا تنطبق متطلبات الذاكرة هذه على `fast`. تحتوي الحزمة على حوالي 208-234 MiB للتنزيل و409-488 MiB مثبتة، اعتمادًا على الهدف؛ يربط الفهرس الموقع الأحجام الدقيقة المفروضة أثناء التثبيت.
| `POST` | `/api/v1/admin/features/import` | المشرف (`features:manage`) | استيراد حزمة AI قديمة (`file`) أو إصدار OCR دون اتصال (`index` بالإضافة إلى `archive`) |
ذو فجوة هوائية OCR يجب أن يتضمن الاستيراد موقعة الإصدار `ocr-runtime-index.json` وأرشيف النظام الأساسي المطابق. SnapOtter ينطبق نفس الشيء Ed25519 إمضاء، تجزئة قطعة أثرية, التوافق, اِستِخلاص، وفحوصات اختبار الدخان المستخدمة في التثبيت عبر الإنترنت:
```bash
curl -X POST http://localhost:1349/api/v1/admin/features/import \
-H "Authorization: Bearer <admin-token>"\
-F "index=@ocr-runtime-index.json"\
-F "archive=@ocr-linux-amd64-cpu-py312.tar.gz"
```
استخدم أرشيف `linux-arm64-cpu-py311` على arm64. يتم رفض قطعة أثرية موقعة لهدف آخر بدلاً من تثبيتها.
نقاط نهاية تشغيلية للرصد والدعم وإعداد تقارير الاستخدام وحالة النسخ الاحتياطي.
| الطريقة | المسار | الوصول | الوصف |
|--------|------|--------|-------------|
| `GET` | `/api/v1/admin/log-level` | مسؤول (`settings:write`) | قراءة مستوى سجل التشغيل الحالي |
| `POST` | `/api/v1/admin/log-level` | مسؤول (`settings:write`) | تغيير مستوى سجل التشغيل (`fatal`، `error`، `warn`، `info`، `debug`، `trace`، أو `silent`) |
**المسؤول المضمّن بكامل الصلاحيات** يعني أن الجهة المصادق عليها تحمل دور `admin` وتمتلك مجموعة أذونات المسؤول الفعّالة بالكامل. لا يتأهل نطاق مفتاح API إذا أغفل أي إذن من أذونات المسؤول.