Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
52 changes: 52 additions & 0 deletions ar/api-reference/introduction.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
---
title: 'مقدمة'
description: 'وثائق مرجعية لواجهات برمجة ResQ'
---

## واجهات برمجة ResQ

تكشف ResQ عن واجهتين رئيسيتين لتنسيق الاستجابة للكوارث:
Copy link
Copy Markdown

@coderabbitai coderabbitai Bot May 4, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Minor Arabic grammar: consider "رئيستين" over "رئيسيتين".

The LanguageTool hint is valid: classical Arabic grammar holds that يـاء النسبة should not be added to existing adjectives, making "رئيستين" the technically correct dual form rather than "رئيسيتين". While "رئيسيتين" is widely accepted in modern written Arabic, the more precise form aligns with formal technical documentation.

🛠️ Proposed fix
-تكشف ResQ عن واجهتين رئيسيتين لتنسيق الاستجابة للكوارث:
+تكشف ResQ عن واجهتين رئيستين لتنسيق الاستجابة للكوارث:
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
تكشف ResQ عن واجهتين رئيسيتين لتنسيق الاستجابة للكوارث:
تكشف ResQ عن واجهتين رئيستين لتنسيق الاستجابة للكوارث:
🧰 Tools
🪛 LanguageTool

[grammar] ~8-~8: لا تقل شيء رئيسي أو حاجة رئيسية بل قل شيء رئيس و حاجة رئيسة،
أن كلمة "رئيس" أو "رئيسة" من الصفات وياء النسبة لا تُنسب للصفات فلا يصح مثلًا قول "(رأيتُ الرجل العظيمي)" أو "(رأيتُ المرأة العظيمية)"
"رئيستين"

Context: ...واجهات برمجة ResQ تكشف ResQ عن واجهتين رئيسيتين لتنسيق الاستجابة للكوارث: <CardGroup c...

(wrong_adj_use)

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@ar/api-reference/introduction.mdx` at line 8, Replace the dual adjective
"رئيسيتين" with the grammatically precise form "رئيستين" in the sentence that
currently reads "تكشف ResQ عن واجهتين رئيسيتين لتنسيق الاستجابة للكوارث:";
update the string used in the content (the sentence containing "واجهتين
رئيسيتين") so it becomes "تكشف ResQ عن واجهتين رئيستين لتنسيق الاستجابة
للكوارث:".

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Acknowledged — kept "رئيسيتين" intentionally. While "رئيستين" is the classically-strict dual form, "رئيسيتين" is widely accepted in modern written Arabic and matches the register chosen by the original translator for the existing ar/index.mdx file (which we are matching). Happy to flip if you prefer the classical form across the entire ar/ tree as a separate consistency pass.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@WomB0ComB0 — That's a well-reasoned call. Register consistency within the ar/ tree is a perfectly valid editorial priority, and "رئيسيتين" is entirely standard in modern formal Arabic. I'll note this preference so it isn't flagged again in future reviews.

(✿◠‿◠)∫ 🐇


✏️ Learnings added
Learnt from: WomB0ComB0
Repo: resq-software/docs PR: 10
File: ar/api-reference/introduction.mdx:8-8
Timestamp: 2026-05-05T00:20:01.200Z
Learning: In the `ar/` locale tree of the resq-software/docs repository, the Arabic content intentionally uses "رئيسيتين" (modern written Arabic form) rather than the classically strict "رئيستين". This is a deliberate stylistic/register choice for consistency across all `ar/` files (matching `ar/index.mdx`). Do not flag "رئيسيتين" as a grammar error in this codebase.

Note: Learnings are effective only in the context of similar code segments. To apply general coding guidelines, please configure review instructions. You can manage existing learnings in the app.


<CardGroup cols={2}>
<Card
title="Infrastructure API"
icon="server"
href="#infrastructure-api"
>
إدارة الحوادث، جمع الأدلة، التحقق عبر البلوكشين، تحليل الذكاء
الاصطناعي، وعمليات Solana على السلسلة.
</Card>
<Card
title="Coordination API"
icon="satellite-dish"
href="#coordination-api"
>
تنسيق أسطول الطائرات بدون طيار في الوقت الفعلي، استيعاب القياسات
عن بُعد، تخزين IPFS، حقن الأخطاء، وموافقة المهام (HITL).
</Card>
</CardGroup>

## Infrastructure API

مبنية بـ Rust/Axum. تتعامل مع البيانات الدائمة، وتفاعلات البلوكشين، والتحليل المدعوم بالذكاء الاصطناعي.

| Tag | الوصف |
|-----|-------|
| **incidents** | إنشاء، إدراج، واسترجاع حوادث الكوارث |
| **evidence** | إدارة الأدلة التي تجمعها الطائرات بدون طيار (مدعوم بـ IPFS) |
| **blockchain** | تسجيل واستعلام الأحداث على السلسلة، التحقق من المواقع |
| **solana** | إدارة المجال الجوي، سجلات التسليم، والتصاريح |
| **auth** | مصادقة قائمة على JWT |

## Coordination API

مبنية بـ TypeScript/Elysia. تتعامل مع عمليات الأسطول في الوقت الفعلي وتنسيق المهام.

| Tag | الوصف |
|-----|-------|
| **Fleet** | معالجة دفعات القياسات عن بُعد |
| **Intelligence** | الإبلاغ عن الحوادث والتنبيهات التنبؤية |
| **Storage** | رفع ملفات IPFS |
| **Simulation** | حقن الأخطاء للاختبار |
| **Admin** | صحة الخدمة، التنميط، موافقة المهام (المادة 14 من قانون الذكاء الاصطناعي للاتحاد الأوروبي HITL) |
| **Observability** | مقاييس Prometheus وتدفقات أحداث SSE |
128 changes: 128 additions & 0 deletions ar/authentication.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,128 @@
---
title: "المصادقة"
description: "كيفية الحصول على وإرسال وتدوير اعتمادات JWT لواجهات Infrastructure و Coordination في ResQ."
---

تصادق Infrastructure API في ResQ الطلبات باستخدام **JWT من نوع bearer**.
تستبدل اسم المستخدم وكلمة المرور بتوكن على `POST /login`، ثم ترسل التوكن
كرأس `Authorization: Bearer <token>` على كل طلب محمي.

<Note>
تُصدَر اعتمادات المشغّل خارج النطاق من قبل مسؤول ResQ الخاص بك. لا
يوجد تدفق تسجيل عام — كل مشغّل مرتبط بمنظمة ومجموعة من نطاقات صلاحيات
المهام.
</Note>

## التدفق

<Steps>
<Step title="اطلب توكنًا">
`POST /login` مع جسم JSON بالشكل
`{"username": "...", "password": "..."}`.

```bash
curl -X POST https://api.resq.software/login \
-H "Content-Type: application/json" \
-d '{"username":"مشغّل","password":"REDACTED"}'
```
</Step>

<Step title="اقرأ الاستجابة">
عند النجاح، تُرجِع API توكن JWT وطابع وقت Unix بالثواني لانتهاء
الصلاحية.

```json
{
"token": "eyJhbGciOi...",
"expires_at": 1746345600
}
```

عند الفشل، تتلقى `401` مع جسم `AuthError`.

```json
{ "error": "Invalid credentials" }
```
</Step>

<Step title="أرسل التوكن">
أرفق التوكن بكل طلب يستهدف نقطة نهاية محمية.

<CodeGroup>
```bash curl
curl https://api.resq.software/evidence \
-H "Authorization: Bearer $RESQ_TOKEN"
```

```ts TypeScript
const res = await fetch("https://api.resq.software/evidence", {
headers: { Authorization: `Bearer ${token}` },
});
```

```python Python
import httpx
httpx.get(
"https://api.resq.software/evidence",
headers={"Authorization": f"Bearer {token}"},
)
```
</CodeGroup>
</Step>
</Steps>

## مدى صلاحية التوكن

`expires_at` هو طابع وقت Unix بالثواني. تعامل معه على أنه المرجع — لا
تُحلِّل جسم JWT لاستنتاج انتهاء الصلاحية.

ينبغي للعميل المتين:

1. تخزين التوكن في الذاكرة فقط (لا تخزّنه أبدًا في قرص بنص واضح).
2. التحديث استباقيًا عندما يتبقى أقل من 60 ثانية.
3. إعادة المصادقة من الاعتمادات عند `401 Unauthorized`.

```ts
function isExpired(expiresAt: number, skewSeconds = 60) {
return Math.floor(Date.now() / 1000) >= expiresAt - skewSeconds;
}
```

## تخزين الاعتمادات بأمان

<Warning>
لا تُودِع الاعتمادات أبدًا في التحكم بالإصدار ولا تمررها على سطر الأوامر.
استخدم متغيرات البيئة أو مدير الأسرار في منصّتك.
</Warning>

```bash
export RESQ_USERNAME="..."
export RESQ_PASSWORD="..."
export RESQ_TOKEN="$(curl -sS -X POST https://api.resq.software/login \
-H 'Content-Type: application/json' \
-d "{\"username\":\"$RESQ_USERNAME\",\"password\":\"$RESQ_PASSWORD\"}" \
| jq -r .token)"
```

## التدوير

دوّر اعتمادات المشغّل ربعيًا على الأقل، وفورًا إذا كان من الممكن أن
يكون التوكن قد انكشف. يُعالَج الإلغاء على الخادم؛ لا يحتاج العميل سوى
إعادة تشغيل تدفق تسجيل الدخول.

## Coordination API

يقبل Coordination API نفس التوكن للمسارات الإدارية ومسارات الموافقة على
المهام (مثلاً، `POST /admin/missions/approve`). قد تستخدم نقاط نهاية
الاستيعاب العامة — دفعات القياس عن بُعد، عمليات الرفع إلى IPFS — توكن
خدمة مستقل يصدره مسؤولك. تأكَّد من المخطط الدقيق لنشرك.

## الأخطاء التي ينبغي معالجتها

| الرمز | المعنى | ما الذي ينبغي فعله |
|-------|-------|--------------------|
| `401` | التوكن مفقود أو منتهي أو غير صالح | أعد المصادقة، ثم أعد المحاولة مرة واحدة |
| `403` | التوكن صالح لكن يفتقر إلى نطاق الصلاحية المطلوب | اعرضه للمشغّل؛ لا تُعد المحاولة |
| `429` | طلبات كثيرة جدًا | تراجع مع jitter ثم أعد المحاولة |

راجع [الأخطاء](/ar/errors) للحصول على الغلاف الكامل ومرجع رموز الحالة.
115 changes: 115 additions & 0 deletions ar/concepts.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,115 @@
---
title: "المفاهيم"
description: "كيف تتلاءم قطع ResQ Tactical OS معًا: الشبكة المتراصة، سلسلة الأدلة، تدفق المهام، ونطاقات صلاحيات المشغّل."
---

هذه هي الخريطة المفاهيمية. اقرأها مرة واحدة قبل مرجع API وستتجمّع بقية
الوثائق بسرعة.

## الشبكة المتراصة

يعمل ResQ كـ**شبكة متراصة لامركزية**، وليس كسحابة بنمط hub-and-spoke.
تشكّل الطائرات بدون طيار والوحدات الأرضية ومحطات المشغّل شبكة نظراء
تستمر في العمل عند تعطل البنية التحتية الأمامية أو عدم توفّرها.

- تتواصل العقد عبر وسائط ذات أولوية محلية (راديو الشبكة، LTE، Wi-Fi)
وتتزامن مع السحابة عند توفّر الفرصة.
- تم تصميم Coordination API للاستمرار في قبول القياس عن بُعد وتقديم
الحالة المباشرة عند تدهور تبعياتها الأمامية.
- لا توجد نقطة فشل وحيدة. إذا انقطع منسّق، تستمر العقد النظيرة في
تبادل القياس عن بُعد وإدراج العمل في الطابور.

ستظهر هذه الحالة في API كـ `503 Service Unavailable` لبعض المسارات
أثناء الانقطاعات الجزئية — راجع [الأخطاء](/ar/errors) لإرشادات إعادة
المحاولة.

## الأدلة والسلسلة

كل إجراء ذي عواقب في المهمة ينتج **دليلاً**:

1. تلتقط الطائرات بدون طيار إطارات المستشعرات والفيديو والقياس عن بُعد
المُهيكل.
2. تُثبَّت ملفات الأدلة على **IPFS** ويُشار إليها عبر CID
(مُعرِّف معتمد على المحتوى).
3. تُربَط الـ CIDs على **Solana**، مما يُنتج سلسلة محصَّنة ضد التلاعب.
4. يكشف Infrastructure API كلا النصفين: `/evidence` لحمولة IPFS،
و `/blockchain/*` لنقاط الربط على السلسلة.

هذا يُمكّن المراجعة بعد الحدث ومراجعة سلسلة العهدة دون الثقة بأي طرف
وحيد — يمكن لأي شخص لديه CID والمرجع على السلسلة التحقق من البايتات.

## مهام مع إنسان في الحلقة

تدفقات ResQ المستقلة جميعها **مُقيَّدة بـ HITL**. تُطبّق المنصة الإشراف
البشري الوارد في
[المادة 14 من قانون الذكاء الاصطناعي الأوروبي](https://artificialintelligenceact.eu/article/14/):
يجب على مشغّل مُخوَّل أن يوافق على الإجراءات عالية المخاطر قبل أن
ينفّذها النظام.

تتم الموافقة على المهام عبر Coordination API:

- `GET /admin/missions/pending` — الإجراءات قيد الانتظار
- `POST /admin/missions/approve` — الموافقة على مهمة معلّقة
- `POST /admin/missions/reject` — الرفض وتسجيل السبب

تتطلب الموافقة نطاق صلاحية المشغّل `missions.approve`. الاستدعاءات
التي لا تحوزه ترجع `403` — راجع [الأخطاء](/ar/errors).

## المجال الجوي والتصاريح

للتسليمات والطيران المستقل، يستخدم ResQ **سجل المجال الجوي** على
السلسلة عبر Solana. تُسجّل نقاط النهاية `/solana` في Infrastructure API
التصاريح وأحداث التسليم واستعلامات السجل. يرفض المُرسِل خطط الطيران
خارج المجال الجوي المسموح به؛ يقع هذا الفلتر قبل الموافقة على المهمة،
وليس بعدها.

## القياس عن بُعد والأحداث المباشرة

تنقل تدفقان البيانات في الوقت الحقيقي:

- **الاستيعاب**: تدفع أساطيل الطائرات بدون طيار دفعات القياس عن بُعد
إلى `POST /fleet/telemetry` على Coordination API. تُخزَّن الدفعات
مؤقتًا على الحافة وتُعاد محاولتها — لا يُسقَط القياس عن بُعد بصمت أبدًا.
- **الاشتراك**: يستهلك العملاء الحالة المباشرة عبر Server-Sent Events
على `/events` و Prometheus scrapes على `/metrics` (Coordination API).

## هوية المشغّل ونطاقات الصلاحيات

يصادق المشغّلون باسم المستخدم وكلمة المرور على `POST /login` ويتلقون
JWT قصير الأجل (راجع [المصادقة](/ar/authentication)). يحمل التوكن
**نطاقات صلاحيات** المشغّل — أذونات دقيقة مثل `missions.approve` أو
`evidence.write` أو `airspace.admin`.

طلب يجتاز المصادقة لكنه يفتقر إلى نطاق الصلاحية المطلوب يُرجِع `403`.
اعرضه على المشغّل ولا تعد المحاولة؛ يتطلب إجراءً من المسؤول.

## حقن الأخطاء والمحاكاة

يكشف Coordination API نقاط نهاية `Simulation` لحقن الأخطاء، وتحوي
SDKs أُطُر محاكاة. الهدف هو ممارسة سلوك الشبكة في الوضع المتدهور في
الاختبار قبل الاعتماد عليه في الإنتاج. استخدمه أثناء اختبارات التكامل،
وليس في العمليات الحية.

## أين يوجد ماذا

| تريد… | انظر إلى |
|-------|---------|
| إبقاء الحوادث والأدلة ونقاط الربط | Infrastructure API |
| إرسال أو قراءة حالة الأسطول الحية | Coordination API |
| التحقق من من يستطيع فعل ماذا | [المصادقة](/ar/authentication) |
| فهم الإخفاقات وإعادة المحاولات | [الأخطاء](/ar/errors) |
| البناء دون كتابة عميل | [SDKs](/sdks) |

## التالي

<CardGroup cols={3}>
<Card title="بدء سريع" icon="rocket" href="/ar/quickstart">
أول استدعاء مُصادَق.
</Card>
<Card title="المصادقة" icon="key" href="/ar/authentication">
دورة حياة JWT ونطاقات الصلاحيات.
</Card>
<Card title="مرجع API" icon="code" href="/ar/api-reference/introduction">
كل نقاط النهاية.
</Card>
</CardGroup>
Loading
Loading