بيان التطبيق المخصص
معرّف المخطط: custom-app-manifest@1
المخطط القابل للقراءة آليًا: custom-app-manifest.schema.json
الوصف المرجعي لـ تطبيق React مخصص (القسم 6.3): وهو وحدة Module Federation البعيدة التي يحمّلها Platform Shell لتطبيق مكتوب يدويًا داخل بيئة. ويجري التحقق من البيان بالطريقة نفسها سواء سُجِّل عبر Admin Control Center، أو أُرسل باستدعاء API مباشر، أو وُلِّد بمساعد ذكاء اصطناعي، أو جاء داخل استيراد حل — وهي قاعدة مسار التحقق الواحد (القسم 6.7).
الشكل
| الحقل | النوع | مطلوب | ملاحظات |
|---|---|---|---|
logicalName | string | نعم | مسبوق ببادئة الناشر، بصيغة snake_case صغيرة (مثل par_sales_dashboard). يُستخدم بوصفه المعرّف الثابت للتطبيق — أي جمهور رمز سياق التطبيق الخاص به. |
displayName | string | نعم | اسم مقروء يظهر على الصفحة الرئيسية للـ Shell. |
description | string | null | لا | وصف قصير يظهر على بطاقة التطبيق. |
entryFileName | string | لا | ملف مدخل الحاوية داخل الحزمة (مثل remoteEntry.js)، منقولًا من مانيفست الأرشيف نفسه. فارغ في وضع الاستضافة، إذ لا حزمة فيه. |
packageHash | string | null | لا | SHA-256 بالست عشري صغير الأحرف للأرشيف الذي سُجِّل منه هذا التطبيق. وهو null في وضع الاستضافة. وعند استيراد الحل يُقارَن بالبايتات التي سافرت في الحزمة، فيكون ما يُقدَّم هو ما صُدِّر. |
remoteEntryUrl | string | نعم | إما عنوان http(s) مطلق لملف remoteEntry.js الخاص بالوحدة البعيدة (وضع الاستضافة — ويجب أن يكون أصله ضمن قائمة السماح لدى الـ Shell في تلك البيئة، القسم 6.3)، أو مرجع webresource:<logicalName> (وضع التحزيم، القسم 6.15) — حيث تُخزَّن الحزمة على هيئة موارد ويب وتقدّمها المنصة، فيحلّها الـ Shell إلى عنوان تقديم على المنصة ويعاملها بوصفها من الطرف الأول. |
scope | string | نعم | اسم النطاق العام لحاوية Module Federation (فريد لكل وحدة بعيدة)، ويطابق federation({ name }) في الوحدة البعيدة. |
module | string | نعم | مسار الوحدة المعروضة التي يحمّلها الـ Shell (مثل ./App). يجب أن يبدأ بـ ./. |
requestedScopes | string[] | نعم | النطاقات التي يعلن التطبيق حاجته إليها؛ تُطلب عند إصدار رمز سياق التطبيق وتُقاطع مع صلاحيات المستخدم. يجوز أن تكون فارغة. |
declaredEntities | string[] | نعم | الجداول التي يعلن التطبيق وصوله إليها، لأغراض المراجعة والتحقق من الاعتماديات. يجوز أن تكون فارغة. |
أين يجري التحقق منه
- التسجيل — تتحقق طبقة التطبيق من البيان مقابل
custom-app-manifest@1وتفرض أن يبدأlogicalNameببادئة الناشر المالك قبل تسجيل التطبيق في بيئة. - استيراد الحل — يُعاد التحقق من كل بيان مضمَّن في حزمة الحل مقابل المخطط نفسه قبل تسجيل التطبيق في البيئة الهدف، فلا تستطيع حزمة معدَّلة يدويًا تمرير وحدة بعيدة غير صالحة.
ملاحظات أمنية
يعمل التطبيق المخصص في مجال JavaScript نفسه الذي يعمل فيه الـ Shell (عبر
Module Federation، لا داخل iframe — القسم 6.3)، ولذلك يُفرض حدّ الثقة في مكان آخر:
يجب أن يكون أصل remoteEntryUrl ضمن قائمة السماح لتلك البيئة (CSP)، ولا يمكن تحميل
التطبيق إلا إذا نشره حل داخل تلك البيئة، وكل استدعاء بيانات يجريه عبر Runtime SDK
يُصرَّح به على الخادم مقابل النطاقات المدرجة في رمز سياق التطبيق. وإعلان نطاق في
requestedScopes لا يمنحه أبدًا — بل يُقاطع مع ما يملكه المستخدم أصلًا.
ذات صلة
- مرجع Runtime SDK (كيف يستهلك التطبيق المخصص
useParswareRuntime()). - حزمة الحل — تنقل هذه البيانات بين البيئات ضمن مصفوفتها
customApps.