الكلجديدمُحسّنإصلاح
إصلاح

تقييد الوصول عبر نطاقات مختلفة على الـ API

لقد قمنا بتشديد قيود الوصول عبر نطاقات مختلفة (cross-origin) بحيث لا يمكن لغير foura.ai استدعاء الـ API باستخدام بيانات الاعتماد. كما قمنا بتعزيز فلتر المدخلات على endpoint المقاييس وحذف السر الاحتياطي المخصص للتطوير فقط. ولن تتغير عمليات التكامل الحالية.

إصلاح

قواعد validate المخصصة تُحتسب كنجاح

إذا قمت بتعيين validate.status.accept على request، فإن المحرك يعامل استجابة non-200 المقبولة كنجاح تام. كانت Activity لا تزال تصنف تلك الاستجابات كإخفاقات، مما أدى إلى تشويه إحصاءات الاستخدام الخاصة بك. تتبع النتائج الآن قرار validate الخاص بك، لذا فإن رمز 403 الذي قبلته يظهر كنجاح، وليس App Fail.

مُحسّن

تسميات Activity تطابق Overview

كان Activity يعرض سلاسل النتائج الخام مثل Application_fail بينما كان Overview يستخدم تسميات مبسطة (App Fail) بالألوان المناسبة. يستخدم Activity الآن نفس التسميات والألوان، مما يجعل قراءة كلا العرضين متطابقة.

إصلاح

صفحات غير UTF-8 تُفك ترميزها الآن بشكل سليم

إذا كنت تكشط صفحات باللغة السيريلية، أو الصينية، أو اليابانية، أو غيرها من الصفحات غير المعتمدة على UTF-8 عبر Single، فقد كان الـ body يعود سابقاً على شكل mojibake. كنا نفرض فك ترميز كل response كترميز UTF-8 قبل أن ترى الـ raw bytes. الآن، نقرأ الـ charset من الـ response (من Content-Type، ثم <meta charset>، ثم UTF-8 كخيار احتياطي) ونفك ترميزه بشكل صحيح. شكراً لـ Alexandar Kanchev (Sensika) على الإبلاغ عن هذا.

إصلاح

كشف proxies مزيفة تعكس الـ request الخاص بك

بعض الـ proxies المنتشرة على الإنترنت لا تقوم بتمرير الـ request الخاص بك فعلياً. بل تعكسه على شكل تفريغ خادم بنص صريح وتحاول استخراج ما بداخله. أصبحنا الآن نكشف هذا النمط قبل أن يصل الـ response إلى الكود الخاص بك، لذا فإن Single و Browser و Proxy Finder تعيد جميعاً فشلاً صريحاً (أو تقوم بإعادة المحاولة) بدلاً من هذه البيانات عديمة الفائدة.

جديد

إعادة تشغيل أي صف Activity في Playground

أصبح كل صف Activity يحتوي على payload مخزنة قابلاً للنقر الآن: يعرض مربع الحوار الـ request والـ response بالكامل (بتنسيق pretty-printed، مع أزرار نسخ ورسائل واضحة للـ requests التي واجهت خطأً قبل إنشاء body). انقر على "Open in Playground" لتحميل هذا الـ call بعينه مجدداً في النموذج مع عرض الـ response المؤرشف الخاص به بالفعل، لتتمكن من تعديل الـ parameters وإعادة التشغيل دون الحاجة إلى إعادة بنائه. تبقى الـ payloads المخزنة لمدة 24 ساعة، وتقتصر على آخر 200 لكل key.

مُحسّن

كل استجابة API تحمل request ID

ترد الاستدعاءات الموثقة الآن مع header الـ X-Foura-Request-Id. خزّنه في الـ logs الخاصة بك وسيكون بإمكانك مطابقة أي request بالصف الخاص به في Activity، أو تزويد الدعم به لنتمكن من التحقق مما حدث بالضبط من جانبنا.

مُحسّن

إلغاء playground requests قيد التنفيذ

اضغط على زر 'Cancel' الجديد أثناء تحميل playground request وسنقوم بإلغائه بسلاسة. تعود اللوحة فوراً إلى حالة idle مع رسالة 'Request canceled' بدلاً من خطأ شبكة مخيف.

جديد

إظهار مفاتيح API بعد الإنشاء

يمكن إظهار المفاتيح التي تنشئها بدءًا من اليوم في أي وقت، سواء في صفحة API Keys أو داخل curl reproducer في playground. انقر على أيقونة العين، وأكد الإجراء، وسيظهر المفتاح الكامل لمدة 15 ثانية قبل أن يختفي تلقائيًا (تُسجّل كل عملية إظهار في audit-log). تظل المفاتيح الأقدم قابلة للعرض لمرة واحدة فقط؛ أعد إنشاء أي مفتاح قديم لجعله قابلاً للإظهار.

مُحسّن

Proxy Finder يعيد فحص الـ pool بسرعة أكبر

طابور إعادة الفحص يفرغ الآن في غضون أيام بدلاً من أسابيع. لقد اختصرنا الوقت المستغرق لاختيار كل proxy للاختبار من حوالي 2 ثانية إلى حوالي 10 ms، مما يبقي الـ pool أكثر تحديثاً تحت الضغط. عدد أقل من عناوين IP الميتة في التدوير، وكل طلب لـ Single و Proxy Finder يعمل مع مجموعة أكثر كفاءة.

مُحسّن

تحديث مجمع proxy بشكل أسرع

بعد إلغاء الحد الأقصى لكل تشغيل الخاص بالأمس، استمر التحديث في التوقف كلما استحوذت كتلة كبيرة واحدة من proxies على قائمة الانتظار. نقوم الآن بتوزيع كل دفعة عبر subnets متميزة، بحيث يستخدم كل تشغيل ميزانية concurrency الكاملة. يتجدد مجمع Proxy Finder أسرع بمقدار 5-10 مرات، وتُمسح المدخلات القديمة خلال ساعات.

إصلاح

وصول الـ proxies المكتشفة حديثًا إلى المجموعة بشكل أسرع

لقد قمنا بإصلاح بطء كان يتسبب في انتظار الـ proxies المكتشفة حديثًا قبل التحقق من صحتها. يقوم Proxy Finder الآن بفحصها على الفور، مما يحافظ على تحديث المجموعة باستمرار مع وجود المزيد من الـ proxies النشطة والصالحة للعمل قيد التدوير.

مُحسّن

Playground يعمل الآن على الهواتف

عندما يقل العرض عن 768px، ينقسم صف الـ URL إلى صفين، وتُمرر علامات تبويب الـ response أفقياً، ويتحول جدول الـ cookie إلى شبكة بطاقات. تفتح تلميحات الأدوات عند النقر بدلاً من الـ hover، ويحصل جهاز iPhone SE (تحت 374px) على تصغير إضافي. تم توسيط زر Send بشكل صحيح، ولم يعد الـ URL الطويل يتسبب في تمرير الصفحة أفقياً.

مُحسّن

ميزة التوسيع في Playground أصبحت الآن تراكباً حقيقياً بملء الشاشة

كانت ميزة التوسيع تقوم بتمديد بطاقة response داخل تدفق الصفحة، مما تسبب في إضافة شريط تمرير (body scroll) للألواح الطويلة وتغيير التخطيط. أصبحت الآن تراكباً ثابتاً بين الشريط الجانبي وحافة viewport، مع ألواح تتمدد لتملأ الـ viewport. يغلقها مفتاح Escape؛ وتقوم دالة helper واحدة بمعالجة مسارات النقر والضغط على المفاتيح.

إصلاح

ملفات cookies في Playground تتبع قواعد host-only لـ RFC 6265

كانت ملفات cookies من النوع host-only تتسرب إلى النطاقات الفرعية. نحن نتتبع سمة Domain بشكل صحيح الآن، وأضفنا شارة HO في عرض Parsed لحالة host-only (غير الشائعة). يطابق عرض Raw ما أرسله الـ upstream: Domain=.example.com لملفات domain cookies، ولا يوجد سطر Domain= لحالة host-only.