الانتقال إلى المحتوى الرئيسي

نظرة عامة

بمجرد أن يكون تطبيقك مبنيًا ومختبرًا محليًا، لديك مساران لتوزيعه:
  • نشر أرشيف tar — ارفع تطبيقك مباشرةً إلى خادم Twenty محدد للاستخدام الداخلي أو الخاص.
  • النشر على npm — انشر حزمتك، وطالب بها في Twenty، وأكمل إعدادها لكي تتمكن مساحات العمل الأخرى من العثور عليها وتثبيتها.
كلا المسارين يبدآن من نفس خطوة build.

ملكية التسجيل

يؤدي نشر تطبيق إلى إنشاء تسجيل تطبيق: هوية التطبيق على المثيل، والتي تشترك فيها كل مساحة عمل تثبّته. يحتوي على إدخال التطبيق في السوق، وعميل OAuth الخاص به، وحالته من جانب الخادم — متغيرات serverVariables التي يهيئها المشغّل وإدخالات النطاق server من مخزن القيم والمفاتيح. يكون universalIdentifier فريدًا عبر المثيل بأكمله، وينتمي التسجيل إلى مساحة عمل واحدة على الأكثر (مالكه) — أو لا ينتمي إلى أي منها حتى تتم المطالبة به — لذا فإن تثبيت تطبيق وتطوير تطبيق هما حقان مختلفان: تُعد مزامنة التعليمات البرمجية وملف البيان ضمن معرّف ادعاءً للتأليف، لذا فإن القدرة على تثبيت تطبيق لا تمنح أبدًا الحق في نشر التعليمات البرمجية تحت هويته. تُرفض مساحة العمل التي ليست المالك، سواء كان التطبيق مُدرجًا أو مثبّتًا مسبقًا أو خاصًا. تؤدي حالتان إلى هذا الرفض:
  • المعرّف تابع لمساحة عمل أخرى. غيّر universalIdentifier في إعدادات تطبيقك، وهو الحل المعتاد عندما تكون قد فرّعت تطبيق شخص آخر. إذا كنت بحاجة إلى الاحتفاظ بالمعرّف، فيجب على مساحة العمل المالكة نقل التسجيل إلى مساحة عملك.
  • المعرّف غير تابع لأي مساحة عمل. تبدأ التطبيقات المستوردة بواسطة مزامنة كتالوج السوق دون مالك. طالب بتطبيقك باستخدام GitHub قبل تطويره. يوفر النشر باستخدام إثبات المصدر دليلاً على التأليف؛ ولا يعيّن تلقائياً مساحة عمل مالكة في Twenty.

بناء تطبيقك

شغّل أمر البناء للتحقق من الأنواع وتجميع تطبيقك:
يتحقق هذا من الأنواع ويُجمّع التطبيق في لقطة مؤقتة لواجهة سطر الأوامر. استخدم --json لفحص بيان الحزمة وبيانات artifact الوصفية. ينشئ twenty app publish الحزمة نفسها؛ ولا يلزم إنشاء tarball منفصل.

النشر إلى خادم (tarball)

بالنسبة للتطبيقات التي لا تريد إتاحتها للعامة — مثل الأدوات المملوكة، أو عمليات التكامل الخاصة بالمؤسسات فقط، أو الإصدارات التجريبية — يمكنك نشر tarball مباشرةً إلى خادم Twenty.

المتطلبات الأساسية

قبل النشر، تحتاج إلى remote مُعدّ يشير إلى خادم الهدف. تُخزّن remotes عنوان URL للخادم وبيانات اعتماد المصادقة محليًا في ~/.twenty/config.json. أضِف remote:

النشر

بناء تطبيقك ورفعه إلى الخادم في خطوة واحدة:
يختار الخيار الصريح --remote production الاتصال المحفوظ أعلاه، حتى إذا كان جهاز تحكم عن بُعد آخر هو الافتراضي لديك. لا يؤدي حفظ جهاز تحكم عن بُعد مُسمّى إلى تبديل الإعداد الافتراضي الحالي.

مشاركة تطبيق منشور

تطبيقات tarball لا تُدرَج في السوق العامة، لذا لن تكتشفها مساحات العمل الأخرى على الخادم نفسه عبر الاستعراض. لمشاركة تطبيق منشور:
  1. انتقل إلى الإعدادات > المطورون > التطبيقات وافتح تطبيقك ضمن تطبيقاتي
  2. في علامة التبويب التوزيع، انقر نسخ رابط المشاركة
  3. شارك هذا الرابط مع المستخدمين في مساحات عمل أخرى — سيأخذهم مباشرةً إلى صفحة تثبيت التطبيق
يستخدم رابط المشاركة عنوان URL الأساسي للخادم (من دون أي نطاق فرعي لمساحة عمل)، لذا يعمل مع أي مساحة عمل على الخادم.

إدارة الإصدارات

عند تحديث تطبيق tarball منشور مسبقًا، يشترط الخادم أن تكون قيمة version في package.json أعلى قطعًا (وفق ترتيب الإصدار الدلالي) من الإصدار المنشور حاليًا. يُرفض إعادة نشر الإصدار نفسه، أو دفع إصدار أقل، عندما يسجّل الخادم أرشيف tarball المرفوع، والذي يُحذف بعد ذلك مرة أخرى. سترى خطأ VERSION_ALREADY_EXISTS من CLI. لطرح تحديث:
  1. قم بزيادة الحقل version في ملف package.json (مثلًا: 1.2.3 → 1.2.4، 1.3.0، أو 2.0.0)
  2. شغّل twenty app publish --private --remote production
  3. مساحات العمل التي تم تثبيت التطبيق فيها وتم تفعيل الترقية التلقائية له (في علامة التبويب «عام» الخاصة بالتطبيق) ستتم ترقيتها تلقائيًا في الخلفية؛ أما المساحات الأخرى فسترى أن الترقية متاحة في إعداداتها
تعمل علامات ما قبل الإصدار كما هو متوقع: يُسمح بزيادة 1.0.0-rc.1 → 1.0.0-rc.2، ويُتعرّف على إصدار نهائي مثل 1.0.0 بشكل صحيح باعتباره أعلى من 1.0.0-rc.5. يجب أن يكون الإصدار في package.json نفسه سلسلة semver صالحة.

توافق إصدار الخادم

إذا كان تطبيقك يستخدم ميزة تم تقديمها في إصدار معيّن من خادم Twenty (على سبيل المثال، موفّرو OAuth الذين أضيفوا في v2.3.0)، فيجب عليك التصريح بأدنى إصدار من الخادم يتطلبه تطبيقك باستخدام الحقل engines.twenty في package.json:
القيمة عبارة عن نطاق semver قياسي. أنماط شائعة: ماذا يحدث وقت النشر والتثبيت:
  • إذا تم تعيين engines.twenty ولم يستوفِ إصدار الخادم الهدف النطاق، فسيتم رفض النشر (tarball upload) أو التثبيت بخطأ SERVER_VERSION_INCOMPATIBLE ورسالة تُشير إلى كلٍ من النطاق المطلوب وإصدار الخادم الفعلي.
  • إذا كانت engines.twenty غير مُعيّنة، فلن يتم إجراء أي تحقق من الإصدار، وسيُقبل التطبيق على أي إصدار من الخادم (متوافق مع الإصدارات السابقة للتطبيقات الحالية). تُرفض القيمة الفارغة باعتبارها نطاقًا غير صالح.
  • لا يسرد المتجر تطبيقًا يعلن أحدث إصدار له عن نطاق engines.twenty لا يفي به الخادم، أو عن نطاق غير صالح. يبقى التطبيق مسجّلًا ومرئيًا في لوحة الإدارة.
  • إذا لم يكن لدى الخادم قيمة APP_VERSION مُكوَّنة، فسيتم تخطي الفحص.
الخادم هو الجهة المرجعية للفحص — إذ يتحقق من engines.twenty عند كلٍ من رفع tarball وتثبيت مساحة العمل. إذا نشرت tarball خارج القناة المعتادة أو ثبّتَّ من السوق، فسيظل الخادم يفرض التوافق.

CI/CD المؤتمتة (مهام سير عمل مُولَّدة بالقوالب)

تأتي التطبيقات المُنشأة باستخدام twenty app init افتراضيًا مع ثلاث مهام سير عمل من GitHub Actions ضمن .github/workflows/. يعمل CI بدون أي إعداد، بينما يتطلّب CD سرًّا واحدًا فقط، ويتطلّب النشر إلى npm إعدادًا لمرة واحدة لـ npm trusted-publisher.

CI — ci.yml

يشغّل اختبارات التكامل عند كل دفع إلى main وعند كل طلب سحب. ماذا يفعل:
  1. يجلب مصدر تطبيقك.
  2. ينشئ مثيل اختبار معزولًا من Twenty باستخدام الإجراء المركّب twentyhq/twenty/.github/actions/spawn-twenty-app-dev-test@main.
  3. يُفعّل Corepack ويُعدّ Node.js من ملف .nvmrc الخاص بك.
  4. يثبّت واجهة سطر الأوامر المستقلة ذات الإصدار المثبّت في خطوة تثبيت واجهة سطر أوامر Twenty.
  5. يثبّت التبعيات باستخدام yarn install --immutable، ثم يشغّل lint والتحقق من الأنواع واختبارات الوحدة.
  6. يشغّل yarn test، ويمرّر TWENTY_API_URL وTWENTY_API_KEY من المثيل الذي تم إنشاؤه بحيث تتمكّن اختباراتك من التواصل مع خادم حقيقي.
خيارات التكوين:
  • TWENTY_VERSION (متغيّر بيئة، القيمة الافتراضية latest) — ثبّت نسخة خادم Twenty المستخدمة في CI عبر تعديل هذا في ci.yml.
  • يتم تجميع التشغيل المتزامن حسب github.ref ويلغي التشغيلات قيد التقدّم عند أي دفع جديد.
لا تتطلّب أي أسرار — مثيل الاختبار مؤقّت ويستمر فقط طوال مدّة المهمّة.

CD — cd.yml

ينشر تطبيقك إلى خادم Twenty مُهيّأ عند كل دفع إلى main، وبشكل اختياري من طلب سحب عند تطبيق الوسم deploy. ماذا يفعل:
  1. يجلب رأس طلب السحب (للطلبات الموسومة) أو الالتزام المدفوع.
  2. يشغّل twentyhq/twenty/.github/actions/deploy-twenty-app@main — وهو المكافئ في CI للأمر twenty app publish --private.
  3. يشغّل twentyhq/twenty/.github/actions/install-twenty-app@main بحيث تُثبَّت النسخة المُنشَرة حديثًا في مساحة العمل المستهدفة.
التكوين المطلوب:
القيمة الافتراضية لـ TWENTY_DEPLOY_URL وهي http://localhost:2020 مجرد عنصر نائب — لن تصل إلى أي شيء من مُشغِّل مستضاف لدى GitHub. حدّثها إلى عنوان URL العام لخادمك (أو استخدم مُشغِّلًا مستضافًا ذاتيًا مع وصول إلى الشبكة) قبل تمكين CD.
تشغيل نشر معاينة من طلب سحب: أضِف الوسم deploy إلى طلب سحب. الشرط if: في cd.yml سيشغّل المهمّة لذلك الطلب مستخدمًا التزام رأس الطلب، مما يتيح لك التحقّق من التغيير على الخادم المستهدف قبل الدمج.

النشر — publish.yml

ينشر تطبيقك إلى npm مع إثبات المصدر (provenance) عند دفع وسم إصدار (مثلًا: v1.0.0)، أو عند تشغيل سير العمل يدويًا من علامة التبويب Actions. ماذا يفعل:
  1. يجلب شيفرة تطبيقك، ويُعد Node.js، ويُحدِّث npm (يتطلّب النشر الموثوق npm 11.5.1 أو أحدث).
  2. يثبّت واجهة سطر الأوامر المستقلة ذات الإصدار المثبّت في خطوة تثبيت واجهة سطر أوامر Twenty، ثم يثبّت تبعيات التطبيق باستخدام yarn install --immutable.
  3. يشغّل twenty app publish، الذي يبني ويُحزّم لقطة معزولة للتطبيق، ثم ينشرها إلى npm. في بيئة CI يضيف تلقائيًا --provenance و--access public، لذا لا حاجة إلى أي أعلام في سير العمل.
إعداد لمرة واحدة: على npmjs.com افتح الحزمة الخاصة بك > Settings → Trusted Publisher وسجّل هذا المستودع مع سير عمل publish.yml (راجع وثائق النشر الموثوق من npm). يثبت النشر باستخدام إثبات المصدر مستودع GitHub الذي بنى الحزمة. بعد النشر، طالب بالملكية في Twenty.
npm يقبل إثبات المصدر (provenance) فقط من مستودعات المصدر العامّة. إذا قمت بالنشر من مستودع خاص، يرفض npm حزمة إثبات المصدر عبر OIDC برسالة E422 ... خطأ Unsupported GitHub Actions source repository visibility: "private". لنشر الحزمة (publish) من مستودع خاص، يمكنك إيقاف استخدام إثبات المصدر (provenance) عبر تعيين TWENTY_APP_PUBLISH_DISABLE_PROVENANCE: 'true' في متغيّر env لخطوة النشر (publish step) (تلميح مضاف كتعليق موجود في ملف publish.yml المُنشأ تلقائيًا):
من دون إثبات مصدر GitHub، لا يمكن المطالبة بالحزمة عبر المطالبة باستخدام GitHub. استخدم مستودعاً عاماً مع إثبات المصدر إذا كنت تحتاج إلى مسار الملكية هذا.

تثبيت إصدار واجهة سطر الأوامر

تثبّت مهام سير العمل الثلاث المُنشأة واجهة سطر الأوامر المستقلة على إصدار twenty الذي شغّل twenty app init. تستخدم خطوات تثبيت واجهة سطر أوامر Twenty في ci.yml وpublish.yml الأمر npm install -g twenty@\<version>. في cd.yml، يتلقى كل من إجراء النشر والتثبيت الإصدار نفسه من خلال إدخال cli-version الخاص بهما. للترقية، حدّث أمري التثبيت وإدخالي cli-version معًا. تكون هذه التثبيتات منفصلة عن إصدار الخادم TWENTY_VERSION المستخدم في CI ومراجع الإجراءات القابلة لإعادة الاستخدام أدناه.

تثبيت الإجراءات القابلة لإعادة الاستخدام

يشير سيرَا العمل ci.yml وcd.yml إلى إجراءات قابلة لإعادة الاستخدام عند @main، لذا تُلتقط تحديثات الإجراءات في مستودع twentyhq/twenty تلقائيًا. إذا كنت تريد بناءات حتمية، فاستبدِل @main بقيمة SHA لالتزام أو بوسم إصدار في كل سطر uses:.

النشر على npm

يؤهل نشر تطبيقك على npm تطبيقك لسوق Twenty. بعد مزامنة الكتالوج وأي إعداد مطلوب لمسار الخادم، يمكن لمساحات العمل استعراضه وتثبيته وترقيته من واجهة المستخدم بمجرد اجتيازه مراجعة السوق.

المتطلبات

  • حساب على npm
  • الكلمة المفتاحية twenty-app في مصفوفة keywords في package.json (أضفها يدويًا — فهي غير مضمنة افتراضيًا في قالب twenty app init)

بيانات التعريف لسوق التطبيقات

يدعم إعداد defineApplication() حقولًا اختيارية تتحكم في كيفية ظهور تطبيقك في السوق. استخدم logo وgalleryImages للإشارة إلى الصور من مجلد public/:
src/application-config.ts
اطّلع على أكورديون defineApplication في صفحة بناء التطبيقات للاطلاع على القائمة الكاملة لحقول السوق (author وcategory وaboutDescription وwebsiteUrl وtermsUrl وغيرها).

أبعاد صور المعرض الموصى بها

يعرض السوق galleryImages داخل حاوية ثابتة بنسبة 8:5 (على سبيل المثال، 1600×1000 px).
تُعرض صور المعرض بأي نسبة عرض إلى ارتفاع بالكامل ولا تُقتطع مطلقًا، لكن أي صورة أطول أو أضيق بكثير من 8:5 ستُظهر أشرطة فارغة على الجانبين.

الحد الأقصى لحجم الصورة

يجب ألّا يتجاوز حجم ملف logo وكل ملف من galleryImages 10 MB. سيتم تخطي الملفات الأكبر حجمًا عندما يقوم سوق النشر بإعادة استضافة أصولك المنشورة، وبالتالي لن يتم عرضها.

النشر

للنشر تحت dist-tag معيّن (مثلًا: beta أو next):

كيف تعمل آلية الاكتشاف في السوق

يقوم خادم Twenty بمزامنة كتالوج السوق من سجل npm كل ساعة. لا تحتوي واجهة سطر الأوامر المستقلة على أمر لمزامنة الكتالوج. انتظر مزامنة كتالوج الخادم أو استخدم أدوات إدارة الخادم. تأتي البيانات الوصفية المعروضة في سوق التطبيقات من إعدادات defineApplication() الخاصة بك — راجع قسم البيانات الوصفية في سوق التطبيقات أعلاه.
إذا لم يحدد تطبيقك aboutDescription في defineApplication()، فسيستخدم السوق تلقائيًا ملف README.md الخاص بحزمتك من npm كمحتوى لصفحة حول. هذا يعني أنه يمكنك الاحتفاظ بملف README واحد لكل من npm وسوق Twenty. إذا كنت تريد وصفًا مختلفًا في السوق، فقم بتعيين aboutDescription بشكل صريح.يعرض علامة التبويب «حول» نص Markdown فقط. لا تُعرض الصور، سواء كانت تستخدم صياغة Markdown أو وسوم <img>، ويظهر HTML الخام مثل الشارات أو كتل \<div align="center"> كنص عادي.

النشر عبر CI

ينشر سير عمل publish.yml المُنشأ تلقائيًا والموصوف أعلاه إلى npm تلقائيًا عند علامات الإصدارات، مع بيانات provenance. نظرًا لأن twenty app publish يضيف --provenance و--access public نيابةً عنك عند تشغيله في CI، فلا تحتاج مهمة سير العمل إلى أعلام npm — بل إلى إعداد الناشر الموثوق لمرة واحدة فقط. بالنسبة إلى أنظمة CI الأخرى (GitLab CI وCircleCI وغيرها)، شغّل yarn install ثم twenty app publish. يُصدِر بيانات provenance عندما تتمكّن البيئة من إصدار رمز OIDC، ويتم تخطيه تلقائيًا خلاف ذلك.
تضيف npm provenance شارة ثقة إلى إدراجك على npm، مما يتيح للمستخدمين التحقق من أن الحزمة بُنيت من التزام محدد ضمن مسار CI عام. وهي أيضًا ما يتيح لك المطالبة بملكية تطبيقك في سوق Twenty. راجع وثائق npm provenance للتفاصيل.
بعد مزامنة الحزمة مع الكتالوج، تابع إلى المطالبة بتطبيقك. يتطلب مسار المطالبة إثبات مصدر يشير إلى مستودع GitHub.

المطالبة بتطبيقك

تعيّن المطالبة تسجيل تطبيقك إلى مساحة عمل Twenty التي ستديره. تتوفر المطالبة بالتطبيق لجميع مساحات العمل. يحتاج دورك إلى أذوني تطبيقات مساحة العمل والمطوّرين للمطالبة عبر علامة التبويب التطبيقات ضمن الإعدادات > المطوّرون. الملكية لكل مثيل من Twenty: لا تؤدي المطالبة على Twenty Cloud إلى المطالبة بالتطبيق على خادم منفصل مستضاف ذاتياً. تثبّت مساحات العمل الأخرى على المثيل نفسه تطبيقك من دون المطالبة به بنفسها.

قبل المطالبة

  • انشر حزمتك من مستودع GitHub عام باستخدام GitHub Actions والنشر الموثوق على npm مع إثبات المصدر. يجب أن يحمل الإصدار المستورد إلى كتالوج Twenty إقرار إثبات المصدر.
  • ضمّن الكلمة المفتاحية twenty-app في package.json وانتظر مزامنة الكتالوج.
  • اختر مساحة العمل التي ستمتلك التطبيق. بالنسبة إلى التطبيقات ذات مسارات الخادم، تشغّل مساحة العمل هذه أيضاً أداة الحل المشتركة وتدفع تكلفتها.
  • سجّل الدخول إلى GitHub بصفتك الحساب الشخصي الذي يملك المستودع المصدر، أو بصفتك مالك المؤسسة التي تملكه. لا يكفي وحده وصول المتعاون إلى المستودع أو وصول مشرف حزمة npm.

المطالبة عبر GitHub

  1. في مساحة عمل المالك المقصودة، انتقل إلى الإعدادات > المطورون > التطبيقات (/settings/developers#apps).
  2. في المطالبة بتطبيق، أدخل اسم حزمة npm الدقيق، بما في ذلك نطاقها (مثلاً، @your-org/twenty-app)، أو universalIdentifier الخاص بالتطبيق.
  3. انقر بحث وتحقق من أن النتيجة هي تطبيقك. إذا لم يتم العثور عليه، فانقر مزامنة الكتالوج إذا كان متاحاً، وانتظر حتى تكتمل المزامنة، ثم ابحث عنه مرة أخرى.
  4. انقر المطالبة باستخدام GitHub وفوّض Twenty. بالنسبة إلى مستودع تملكه مؤسسة، امنح حق الوصول إلى تلك المؤسسة في قسم وصول المؤسسة في GitHub. لا تحتاج المستودعات الشخصية إلى منح خاص بالمؤسسة.
  5. عند عودتك إلى Twenty، أكد ظهور التطبيق ضمن تطبيقاتي بالنوع NPM. افتحه وتحقق من التوزيع > الملكية بحثاً عن تمت المطالبة به من قِبل مساحة العمل هذه.
لا تؤدي المطالبة إلى تثبيت التطبيق. إذا كان يكشف مسارات خادم، فأكمل الإعداد أدناه قبل أن تعتمد مساحات العمل الأخرى على خطافات الويب الخاصة به.

إعداد مسارات الخادم

يتلقى مسار الخادم أحداثاً لمساحات عمل متعددة على عنوان URL واحد. تعمل أداة الحل الخاصة به في مساحة عمل المالك للتسجيل، ثم توزّع العمل إلى مساحة العمل المثبتة المناسبة.
  1. افتح تطبيقك ضمن تطبيقاتي واملأ أي متغيرات خادم مطلوبة في علامة التبويب التكوين.
  2. في التوزيع، انقر عرض في السوق لفتح صفحة التطبيق وتثبيته في مساحة عمل المالك. يمكنك فتح هذه الصفحة حتى قبل ظهور التطبيق في بحث السوق.
  3. سجّل عنوان URL لخطاف الويب الخاص بالخادم لدى موفر الخدمة واختبر حدثاً من مساحة عمل ثانية حيث يكون التطبيق مثبتاً. تحقق من سجلات كل من أداة الحل والدالة المستهدفة.
لا يتوفر لتطبيق غير مُطالب به، أو لتطبيق غير مثبّت في مساحة عمل مالكه، محلّل لمسار الخادم لتشغيله. تعرض الطلبات 404 (LOGIC_FUNCTION_NOT_FOUND)، حتى إذا كان التطبيق مثبّتًا في مساحات عمل أخرى. تظل هذه التطبيقات خارج نتائج البحث في السوق إلى أن تتم المطالبة بها وتثبيتها في مساحة عمل المالك وتهيئتها بجميع متغيرات الخادم المطلوبة.

تكاليف مساحة عمل المالك وتوفرها

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

الملكية بعد نقل مستودع

لا يؤدي نقل مستودع GitHub إلى حساب شخصي أو مؤسسة أخرى إلى نقل مطالبة Twenty حالية أو إزالتها. يبقى التسجيل مرتبطاً بمساحة عمل مالكه. احتفظ بحزمة npm نفسها وuniversalIdentifier الخاص بالتطبيق؛ يتطلب تغيير مساحة عمل مالك Twenty نقلاً منفصلاً للملكية.

استكشاف أخطاء المطالبة وإصلاحها

إذا واجهتك مشكلة في المطالبة بتطبيقك، فاتصل بنا على Discord أو افتح مشكلة في GitHub.
يهيئ مسؤول الخادم APP_CLAIM_GITHUB_CLIENT_ID و APP_CLAIM_GITHUB_CLIENT_SECRET باستخدام تطبيق GitHub OAuth. اضبط عنوان URL لمعاودة التفويض الخاص به على SERVER_URL متبوعًا بـ /application-registration-claim/github/callback، على سبيل المثال https://twenty.example.com/application-registration-claim/github/callback. تتم إدارة هذا الإعداد مسبقاً بالنيابة عنك على Twenty Cloud.

ظهور السوق والمراجعة

اجتاز كل تطبيق مُدرج في السوق مراجعة Twenty للأمان والجودة. يبقى التطبيق المنشور حديثًا غير مُدرج إلى أن يجتاز مراجعة السوق؛ تؤدي المطالبة به إلى إثبات الملكية، لكنها لا تُدرجه. لا يزال بالإمكان تثبيت تطبيق غير مُدرج. في الإعدادات > التطبيقات > السوق، افتح عامل التصفية وفعّل إظهار التطبيقات غير المُدرجة، أو شارك صفحة التثبيت المباشر للتطبيق باستخدام تطبيقاتي > تطبيقك > التوزيع > نسخ رابط المشاركة. ترى مساحات العمل تحذيرًا يفيد بأن التطبيق لم يخضع للمراجعة من قِبل Twenty. إذا كان تطبيقك مُدرجًا لكنه لا يزال مفقودًا من السوق، فتأكد من اكتمال مزامنة الكتالوج، وتعبئة جميع متغيرات الخادم المطلوبة، واكتمال أي إعداد لمسار الخادم.

تثبيت التطبيقات

بعد نشر التطبيق (npm) أو نشره (tarball)، يمكن لمساحات العمل تثبيته عبر واجهة المستخدم. اذهب إلى صفحة الإعدادات > التطبيقات في Twenty، حيث يمكن استعراض تطبيقات السوق والتطبيقات المنشورة عبر tarball وتثبيتها. من دليل التطبيق، ثبّت إصداره المنشور في مساحة العمل المستهدفة:
استخدم اسم جهاز التحكم عن بُعد لمساحة العمل التي تريد تثبيت التطبيق فيها. للتثبيت دون مشروع محلي، مرّر --universal-identifier \<id>.
يفرض الخادم اعتماد إصدارات semver عند التثبيت، بما يعكس القواعد المطبّقة عند النشر:
  • تثبيت الإصدار نفسه المثبّت بالفعل في مساحة عملك يُرفَض بخطأ APP_ALREADY_INSTALLED.
  • تثبيت إصدار أدنى من الإصدار المثبّت حاليًا يُرفَض بخطأ CANNOT_DOWNGRADE_APPLICATION.
لتثبيت إصدار أحدث، انشره أو انشره أولًا، ثم أعد تشغيل twenty app install --remote production.