أسرار الخلفية
أسرار الخلفية أسرار تشغيل عامة يعرّفها المستخدم تشير إليها بالاسم في endpoints وسير العمل. مشفّرة في التخزين، للكتابة فقط، ولا تُشحن إلى المتصفح أبداً — مثالية لمفاتيح توقيع webhook أو الرموز الداخلية أو أي قيمة حسّاسة تحتاجها خلفيتك وقت التشغيل.
تديرها في صفحة Variables (Ship → Frontend → Variables، المسار /variables)، حيث Backend Secrets هو التبويب الافتراضي.
مشفّرة وللكتابة فقط
تُشفَّر أسرار الخلفية بـ Fernet (مفتاح لكل مشروع) وتُفك فقط وقت التنفيذ داخل المحرك. بعد الحفظ، لا يمكنك قراءة القيمة من لوحة التحكم — يمكنك فقط الكتابة فوقها أو حذفها. لا تظهر أبداً في حزمة عميلك.
أضف سراً
افتح تبويب Backend Secrets
في لوحة تحكم مشروعك، اذهب إلى Frontend → Variables. تبويب Backend Secrets مفتوح افتراضياً.
أضف سراً بالاسم
انقر Add secret، أدخل اسماً (مثلاً STRIPE_WEBHOOK_SIGNING_KEY) والقيمة، ثم احفظ. تُشفَّر القيمة فوراً.
أشر إليه في سير عمل
اقرأ السر من أي endpoint أو سير عمل باسمه — دون إعادة نشر. الأسرار الجديدة متاحة للمحرك فوراً.
الإشارة إلى سر
استخدم اسم السر بطريقتين متكافئتين داخل endpoints وسير العمل:
${ secrets.STRIPE_WEBHOOK_SIGNING_KEY }
كلاهما يُحل إلى القيمة المفكوكة وقت التنفيذ. تُربط الأسرار بالمحرك عبر /api/engine/{id}/secrets.
عقدة Code لا تستطيع قراءة أسرار الخلفية
تستخدم عقدة سير العمل javascript_code env_vars كنص واضح خاصة بها معروضة كـ ctx.env — ليس لديها وصول إلى ctx.secrets أو Credentials مكتوبة النوع. أبقِ القيم الحسّاسة خارج env_vars؛ استخدم أسرار الخلفية في عقد سير العمل المحيطة بدلاً من ذلك.
ثلاثة أماكن للإعداد
لدى DYPAI ثلاثة مخازن متميزة. تقع أسرار الخلفية في الوسط — قيم تشغيل خاصة، لكنها عامة (غير مربوطة بمزوّد محدد).
| المخزن | أين | الظهور | استخدمه لـ |
|---|---|---|---|
| متغيرات Frontend (Build) | Frontend → Variables → Frontend (Build) | عامة — تُدمج في حزمة المتصفح | عنوان URL الأساسي لـ API، المفاتيح العامة (pk_)، أعلام الميزات |
| أسرار الخلفية | Frontend → Variables → Backend Secrets | خاصة — مشفّرة، لا تُشحن إلى المتصفح أبداً | أسرار التشغيل بالاسم، تُقرأ كـ ctx.secrets.X / ${ secrets.X } |
| Credentials | Build → Credentials | خاصة — مشفّرة، مكتوبة النوع | مفاتيح مزوّدين خارجيين (Stripe sk_، OpenAI، Slack…) تستخدمها عقد التكامل |
سر أم Credential؟
إذا كانت القيمة تنتمي إلى تكامل محدد له عقدة (Stripe أو Slack أو Resend…)، خزّنها كـ Credential مكتوب النوع. إذا كان سراً تشغيلياً عاماً تحتاج قراءته بالاسم فقط — مفتاح توقيع أو رمز API داخلي — استخدم سر خلفية.
تعديل سر أو حذفه
- تحديث: انقر السر، أدخل قيمة جديدة، واحفظ. تكتب فوق القيمة المشفّرة (لا يمكنك قراءة القديمة).
- حذف: انقر أيقونة سلة المهملات. يُزال السر ويتوقف عن الحل في سير العمل.