الترقية إلى SDK 0.6 وقواعد الوظائف الجديدة
قائمة مرجعية للمشاريع التي تستدعي Edge Functions من JavaScript SDK، مع الأسرار التي قد تحتاج إلى تدويرها.
1. ما الذي تغير
تثبيت الإصدار الجديد:
يحتوي الإصدار على تغيير أمني واحد والعديد من الإصلاحات لكيفية الإبلاغ عن الأخطاء والاستجابات. التغيير الأمني موجود أيضًا في وظائف خدمة : وهو ينطبق على مشروعك بمجرد تحديث الخدمة، مهما كان إصدار SDK الذي تستخدمه.
2. كسر التغييرات
تحتاج مكالمات الإدارة الآن إلى مفتاح service_role
functions.list(), get(), listJobs(), getJob(), enqueueJob(), listCronJobs(), createCronJob() و deleteCronJob() تعيد 403 إلى مفتاح عام أو مستخدم قام بتسجيل الدخول. من قبل، كان list() وget() يعيدان الكود المصدري ومتغيرات كل وظيفة إلى أي شخص يحمل المفتاح العام. راجع نموذج الأمان.
قم بإرجاع ما تحتاجه الواجهة الأمامية فقط (الأسماء، على سبيل المثال)، وليس التعريف بالكامل.
يتم رفض النص الذي لا يمكن أن يكون JSON
invoke(name, { body: new Blob(…) })، ونفس الشيء مع ArrayBuffer، المصفوفات المكتوبة، FormData، URLSearchParams أو ReadableStream، تُرجع الآن رمز الخطأ invalid_body. من قبل، كانت الوظيفة تستقبل {} ولم يتم الإبلاغ عن أي خطأ. تشفير البيانات الثنائية (base64) أو تحميلها على التخزين وإرسال مسارها.
الوظيفة الخاصة 502 أو 503 أو 504 هي FunctionsHttpError
من قبل، كانت هذه الحالات تُصنف دائمًا على أنها FunctionsRelayError، حتى عندما يعيدها الكود الخاص بك. الآن FunctionsRelayError يعني أن النظام الأساسي فشل. إذا قمت بإعادة المحاولة على FunctionsRelayError، فتأكد من أن منطق إعادة المحاولة الخاص بك لا يزال مطابقًا: راجع أخطاء والمهلات وعمليات إعادة المحاولة.
FunctionDef أكثر دقة
env_vars هو Record<string, string> (كان Record<string, unknown>) وتم إضافة permissions. الكود الذي يقرأ هذه الحقول يستمر في العمل؛ لم يعد يتم تجميع التعليمات البرمجية التي خصصت قيمًا من نوع آخر.
3. إصلاحات السلوك
| قبل | الآن |
|---|---|
دالة ترجع 500 مع نص تنتج الرسالة "null" | الرسالة هي النص الذي أعادته وظيفتك |
دالة تُرجع 200 مع النص المنتج { data: null, error: null } | data هو النص |
أنتجت استجابة ثنائية في الوضع الافتراضي { data: null, error: null } | error.code هو invalid_response وتقترح الرسالة responseType |
responseType: 'text' مع وجود خطأ JSON { "error": "…" } أظهر HTTP 503 | تتم قراءة الرسالة من JSON، كما هو الحال في الوضع الافتراضي |
'text' و 'blob' و 'arrayBuffer' ليس لها مهلة افتراضية | يتم تطبيق مهلة العميل (30 ثانية). |
| تم إدراج اسم وظيفة في عنوان URL غير مشفر | تم ترميزه: a/../b يبقى داخل مساره |
تم تجاهل delaySecs في مهمة ما: تم تشغيل المهمة في الحال | المهمة تنتظر موعدها |
الصادرات الجديدة: FunctionsHttpError و FunctionsRelayError و isRelayStatus و FunctionsResponseType تأتي من @aurabase/aurabase-js وكذلك من @aurabase/functions. إذا قمت باستيرادها من @aurabase/functions، فسيستمر هذا في العمل؛ مع pnpm لم تعد بحاجة إلى تلك الحزمة باعتبارها تبعية مباشرة.
في @aurabase/auth، أصبح نوع email في نتيجة getClaims() الآن string | null، وهو ما ترجعه الخدمة لمستخدم بدون عنوان بريد إلكتروني.
واجهة سطر الأوامر. aura functions deploy لم يعد يمحو أسرار وظيفة موجودة بالفعل. aura functions invoke --data يرفض JSON غير صالح بدلاً من إرسال {}. aura functions download يعمل مع وظائف Deno. aura functions serve يستمع إلى المنفذ الذي يعلن عنه. aura studio يفتح الاستوديو على المنفذ 3000.
4. تدوير الأسرار المكشوفة
إذا تم تشغيل مشروعك على إصدار خدمة يسبق هذا التغيير، فيمكن لأي حامل لمفتاحك العام قراءة التعليمات البرمجية والمتغيرات الخاصة بوظائفك. لنفترض أنهم قرأوا:
- قم بإدراج وظائفك باستخدام مفتاح
service_roleوافتح متغيرات كل منها. - قم بتدوير كل سر يحتوي عليه: مفاتيح الدفع، وأسرار خطاف الويب، والرموز المميزة للجهات الخارجية.
- إزالة الأسرار التي تمت كتابتها مباشرة في
index.tsونقلها إلى المتغيرات. - تحقق من قواعد الوظائف والتنبيه الخاصة بالمشروع للإدخالات التي لم تقم بإنشائها.
5. قائمة المراجعة
- ابحث في التعليمات البرمجية الخاصة بك عن
functions.list(وfunctions.get(وlistJobs(وgetJob(وenqueueJob(وcreateCronJob(وdeleteCronJob(وlistCronJobs(في التعليمات البرمجية التي يتم تشغيلها في متصفح أو باستخدام مفتاح عام. - ابحث عن قيم
body:التي ليست JSON عادية. - تحقق من منطق إعادة المحاولة الذي يعتمد على
FunctionsRelayError. - قم بتدوير الأسرار كما هو موضح أعلاه.
- قم بتحديث سطر الأوامر.