رموز الأخطاء
هذه هي رموز الأخطاء المشتركة لمكتبات الخدمة المدعومة رسمياً في DAT.
يحمل كل رمز قيمتين: التأثير وإعادة المحاولة، ويحمل بعضها بطاقة اشتباه إضافية.
التأثير — الضرر الواقع على الخدمة
هذا هو معيار ضبط التنبيهات. ولا ينظر إلا في سؤال واحد: "هل توقفت الخدمة الآن؟"
| التأثير | المعنى | مثال |
|---|---|---|
| حرج | تتوقف الخدمة أو وظيفة بعينها. تعذّر الإصدار، فشل دائم في المزامنة، فشل التهيئة | لا تتوفر لدى خادم الإصدار أي شهادة صالحة للاستخدام |
| جزئي | تفشل بعض الطلبات أو الدورات لكن الخدمة تستمر بالعمل. وغالباً ما تتعافى ذاتياً | فشل دورة واحدة من CMS. ويستمر العمل بالشهادات الحالية |
| بلا تأثير | يُرفض طلب واحد وينتهي الأمر | ورود رمز DAT مُلاعب به. يكفي ترشيحه |
بلا تأثير ليست هدفاً للتنبيهات. فإذا كان على جميع المسؤولين مراجعة ورود مُدخل خاطئ مرة واحدة، يفقد التنبيه معناه.
الاشتباه — التحقيق عند الاستمرار
الرموز التي تحمل بطاقة اشتباه هي جزء من التشغيل الطبيعي عندما ترد مرة واحدة. فالعميل قد يرسل قيمة خاطئة في أي وقت، وترشيحها هو دور المكتبة أصلاً.
غير أن ورود هذه الأخطاء باستمرار، أو بكثافة من مصدر بعينه يعني أحد أمرين.
- خلل في الإعداد — نشر خاطئ، أو بقاء عملاء بإصدارات قديمة، أو عدم تطابق الشهادات.
- محاولة اختراق — محاولة تجاوز التحقق بالتلاعب برموز DAT والمفاتيح، أو استكشاف بحثاً عن قيم صالحة.
لذلك يصحّ في هذه الرموز رصد عددها كمؤشر. ويكفي التنبيه عند تجاوز العتبة فقط.
إعادة المحاولة
| إعادة المحاولة | المعنى |
|---|---|
| مؤقت | تنحل المشكلة بإعادة المحاولة بعد فترة تراجع (backoff) |
| دائم | ممنوع إعادة المحاولة. يجب تصحيح الإعداد أو المُدخل |
| حالة | إشارة وليست خطأً |
رمز DAT
مشكلة في نص رمز DAT الوارد نفسه.
DAT_TOKEN_MALFORMED الأجزاء المفصولة بالنقاط ليست خمسة، أو expire ليس عدداً عشرياً صرفاً، أو cid ليس عدداً ست عشرياً صرفاً، أو plain أو secure ليس base64url، أو تجاوز حقل عددي مدى التمثيل الصحيح.
arrow_forwardرفض الطلب
DAT_TOKEN_EXPIREDexpire <= now. اللحظة نفسها تُعد انتهاءً — فإذا كان expire == now يُعتبر منتهياً بالفعل.
arrow_forwardحث المستخدم على إعادة إصدار الرمز
DAT_TOKEN_UNKNOWNخطأ في الرمز لم يُصنَّف ضمن أي مما سبق.
arrow_forwardمراجعة السجلات
الانتهاء وخطأ الصيغة مختلفان قطعاً
الاستجابة متعاكسة تماماً — الانتهاء نهاية عمر طبيعية فيكفي تجديد الرمز، أما خطأ الصيغة فيعني أن الرمز لم يصدر عنّا أصلاً فيجب رفضه.
يتحقق التحليل من البنية أولاً ثم ينظر في القيم. فنص ناقص الأجزاء مثل "1.2.3" ليس رمزاً منتهياً بل ليس رمزاً من الأساس، ولذلك فهو DAT_TOKEN_MALFORMED.
وكذلك وجود إشارة في حقل expire مثل +100 خطأ صيغة لا انتهاء. فلا يُقبل سوى أرقام ASCII الصرفة.
الشهادة
مشكلة في صيغة نص الشهادة، وفي إمكانية استخدام تلك الشهادة الآن.
DAT_CERT_MALFORMED الأجزاء المفصولة بالنقاط ليست ثمانية، أو فشل تحليل cid، start، duration، ttl، أو حقل المفتاح ليس base64url، أو تجاوز start + duration + ttl حدود u64.
arrow_forwardإعادة نشر الشهادة
DAT_CERT_EXPIREDstart + duration + ttl < now. حالة انتهاء كامل لا يمكن معها الإصدار ولا التحقق.
arrow_forwardتجديد الشهادة
DAT_CERT_NOT_YET_ISSUABLEnow < start. لم تُفتح نافذة الإصدار بعد.
arrow_forwardالانتظار
DAT_CERT_ISSUANCE_ENDEDnow > start + duration لكن ttl ما زال متبقياً. الإصدار متعذر والتحقق فقط ممكن.
arrow_forwardنشر شهادة جديدة
DAT_CERT_VERIFY_ONLYشهادة تحتوي المفتاح العام فقط دون مفتاح التوقيع الخاص. التحقق ممكن أما الإصدار فمتعذر.
arrow_forwardمراجعة إعداد النشر
DAT_CERT_NOT_FOUND لا توجد لدينا شهادة تقابل cid الوارد في رمز DAT. إما رمز مزوَّر أو خطأ في النشر.
arrow_forwardرفض الطلب
DAT_CERT_NOT_SYNCED لم يُستلم ذلك الـ cid بعد من CMS. ويحدث ذلك لبرهة عقب نشر شهادة جديدة مباشرة.
arrow_forwardإعادة المحاولة بعد المزامنة
DAT_CERT_DUPLICATE_CID يتكرر الـ cid نفسه مرتين أو أكثر داخل قائمة الاستيراد.
arrow_forwardمراجعة استجابة الخادم
DAT_CERT_UNKNOWNخطأ في الشهادة لم يُصنَّف ضمن أي مما سبق.
arrow_forwardمراجعة السجلات
يتشابه ظاهر DAT_CERT_NOT_FOUND وDAT_CERT_NOT_SYNCED لكن الاستجابة مختلفة. فالأول cid لم نصدره قط فلا ينفع معه الانتظار، أما الثاني فينحل بمجرد تمام المزامنة.
وDAT_CERT_NOT_FOUND يكفي ترشيحه إذا ورد مرة واحدة، لكن ازدياده المفاجئ يعني أن النشر اختل أو أن رموز DAT مزوَّرة تدور في الخدمة.
التوقيع
DAT_SIG_MISMATCHانتهى التحقق من التوقيع بـعدم تطابق. قيمة HMAC مختلفة أو أعاد ECDSA verify القيمة false.
arrow_forwardقطع الجلسة وتسجيل حدث أمني
DAT_SIG_MALFORMED جزء التوقيع فارغ، أو ليس base64url، أو طول r‖s في ECDSA لا يطابق المنحنى، أو فشل التحويل إلى DER.
arrow_forwardرفض الطلب
DAT_SIG_KEY_MISSINGجرت محاولة توقيع بمفتاح verify-only. أي أن المفتاح الخاص غير متوفر في وقت التشغيل.
arrow_forwardمراجعة إعداد خادم الإصدار
DAT_SIG_BACKENDلم تُنفَّذ عملية التوقيع أو التحقق أصلاً. نوع مفتاح خاطئ، أو مقبض محرَّر، أو خطأ داخلي في مكتبة التشفير.
arrow_forwardمراجعة نوع المفتاح والمكتبة
DAT_SIG_UNKNOWNخطأ في التوقيع لم يُصنَّف ضمن أي مما سبق.
arrow_forwardمراجعة السجلات
لا تخلط بين عدم التطابق وفشل الواجهة الخلفية
محورا الرمزين متعاكسان تماماً.
DAT_SIG_MISMATCH— مجرد أن التوقيع الوارد غير مطابق، فـلا تأثير على الخدمة، لكنه يصبح محل اشتباه إن استمر.DAT_SIG_BACKEND— عملية التحقق نفسها لم تعمل، فهي مشكلة من جهتنا، وليست محل اشتباه.
فإذا أُبلغ عن نوع مفتاح خاطئ أو خلل في المكتبة بوصفه "عدم تطابق توقيع"، اختلط عطبٌ في شفرتنا نحن بمؤشرات الهجوم. وعلى العكس، إذا صُنّف تزوير حقيقي بوصفه خطأ واجهة خلفية، سقط كلياً من مؤشرات الاشتباه.
التشفير
مشكلة في تشفير وفك تشفير حمولة secure.
DAT_CRYPTO_TAG_MISMATCHوسم مصادقة AES-GCM غير مطابق. إما أن secure عُبث بها أو أن مفتاح الشهادة مختلف.
arrow_forwardقطع الجلسة وتسجيل حدث أمني
DAT_CRYPTO_DATA_INVALID النص المشفَّر غير فارغ لكنه أقصر من IV (12 بايت) أو يساويه، أو تجاوز المُدخل حدود التنفيذ (مثل INT_MAX).
arrow_forwardرفض الطلب
DAT_CRYPTO_BACKENDلم تُنفَّذ عملية التشفير أو فك التشفير. منصة لا تدعم GCM أو فشل تهيئة السياق.
arrow_forwardمراجعة دعم المنصة
DAT_CRYPTO_UNKNOWNخطأ في التشفير أو فك التشفير لم يُصنَّف ضمن أي مما سبق.
arrow_forwardمراجعة السجلات
حمولة secure الفارغة ليست خطأً. فالمُدخل الفارغ يصبح مُخرجاً فارغاً ولا يُصدر أي رمز خطأ.
وفي المسار الذي يتخطى التحقق من التوقيع، يكون وسم GCM هو فحص السلامة الوحيد. ولهذا لا يُدمج DAT_CRYPTO_TAG_MISMATCH مع بقية حالات فشل فك التشفير في رمز واحد.
المفتاح
DAT_KEY_INVALID عدم تطابق بين الخوارزمية المعلنة وطول المفتاح (HMAC 32/48/64، AES 16/32)، أو نقطة ليست على المنحنى، أو d ∉ [1,n-1]، أو صيغة غير مضغوطة (0x04) غير متحققة، أو أن المفتاحين الخاص والعام ليسا زوجاً.
arrow_forwardاستبدال المفتاح
DAT_KEY_VERIFY_ONLY_UNSUPPORTEDطُلب تصدير verify-only من عائلة HMAC.
arrow_forwardتغيير الخوارزمية
DAT_KEY_UNKNOWNخطأ في المفتاح لم يُصنَّف ضمن أي مما سبق.
arrow_forwardمراجعة السجلات
ثلاثة تبدو متشابهة لكنها مختلفة:
| رمز الخطأ | المعنى |
|---|---|
DAT_KEY_VERIFY_ONLY_UNSUPPORTED | حدّ بنيوي في الخوارزمية. فـ HMAC مفتاح متماثل ولا وجود لمفهوم المفتاح العام فيه |
DAT_SIG_KEY_MISSING | حالة وقت التشغيل. هذا المفتاح لا يحمل مفتاحاً خاصاً الآن |
DAT_CERT_VERIFY_ONLY | صيغة النشر. هذه الشهادة نُشرت للتحقق فقط |
المدير
حالة الكائن الذي يحتفظ بالشهادات ويستخدمها في الإصدار والتحقق.
DAT_MANAGER_NO_CERTIFICATEلا توجد أي شهادة محفوظة. إما قبل الاستيراد أو بعد فشل أول مزامنة مع CMS.
arrow_forwardمراجعة الاتصال بـ CMS
DAT_MANAGER_NO_ISSUABLE_CERTIFICATEتوجد شهادات لكن لا شيء منها صالح للإصدار الآن. يُرسل السبب مرفقاً.
arrow_forwardالحكم بحسب السبب (cause) — انظر الجدول أدناه
DAT_MANAGER_DISPOSEDاستُخدم مدير أو شهادة سبق تحريرها.
arrow_forwardتصحيح شفرة الاستدعاء
DAT_MANAGER_UNKNOWNخطأ في المدير لم يُصنَّف ضمن أي مما سبق.
arrow_forwardمراجعة السجلات
سبب (cause) الرمز DAT_MANAGER_NO_ISSUABLE_CERTIFICATE واحد من أربعة. وما يجب فعله يختلف كلياً باختلاف السبب.
| السبب | المعنى | إعادة المحاولة | الاستجابة |
|---|---|---|---|
DAT_CERT_NOT_YET_ISSUABLE | قبل بدء نافذة الإصدار | مؤقت | تنحل بالانتظار |
DAT_CERT_ISSUANCE_ENDED | انتهت نافذة الإصدار، والتحقق فقط ممكن | دائم | يلزم نشر شهادة جديدة |
DAT_CERT_EXPIRED | جميع الشهادات المحفوظة منتهية | دائم | يلزم تجديد الشهادات |
DAT_CERT_VERIFY_ONLY | جميع الشهادات المحفوظة للتحقق فقط | دائم | خطأ في إعداد النشر |
إذا ضُبط خادم الإصدار بحيث لا يتلقى إلا شهادات التحقق فقط، ظهر DAT_CERT_VERIFY_ONLY. ولا ينحل ذلك بالانتظار أبداً فليس هدفاً لإعادة المحاولة.
الإعداد
مشكلة في القيمة التي مرّرها المستدعي. وعائلة CONFIG كلها أخطاء تستوجب تصحيح الشفرة، وظهورها أثناء التشغيل يعني أن النشر خاطئ.
DAT_CONFIG_ALG_UNSUPPORTED اسم خوارزمية غير معروف. يجب أن يطابق تماماً الصيغة السلكية (ECDSA-P256، IV-AES256-GCM).
arrow_forwardمراجعة اسم الخوارزمية
DAT_CONFIG_ARGUMENT_INVALID وسيط مطلوب قيمته null، أو خارج المدى المسموح (قيمة زمنية سالبة، interval <= 0)، أو نوع غير مدعوم (تمرير رقم أو قيمة منطقية إلى payload في اللغات ديناميكية النوع)، أو أن الـ body المراد توقيعه فارغ.
arrow_forwardتصحيح شفرة الاستدعاء
DAT_CONFIG_URI_INVALIDالـ URI الخاص بخادم CMS خارج المواصفة. تعذّر التحليل، أو المخطط ليس http/https، أو أنه يحمل مساراً أو استعلاماً.
arrow_forwardتصحيح الـ URI
DAT_CONFIG_UNKNOWNخطأ في الإعداد لم يُصنَّف ضمن أي مما سبق.
arrow_forwardمراجعة السجلات
الداخلي
مشكلة في بيئة التشغيل ووقت التشغيل.
DAT_INTERNAL_UNAVAILABLE لا وجود أصلاً لواجهة التشفير الخلفية أو لواجهة برمجة وقت التشغيل. غياب crypto.subtle، أو منصة لا تدعم AES-GCM، أو إصدار وقت تشغيل أقل من المطلوب.
arrow_forwardمراجعة النشر والمنصة
DAT_INTERNAL_UNKNOWNفشل تخصيص الذاكرة، أو فشل توليد الأرقام العشوائية، أو فشل الحصول على القفل، أو بلوغ فرع صُمم بحيث لا يُبلَغ.
arrow_forwardمراجعة السجلات
DAT_INTERNAL_UNAVAILABLE ينحل بإصلاح بيئة النشر، أما DAT_INTERNAL_UNKNOWN فهو غالباً عطل في وقت التشغيل أو خلل في المكتبة.
مزامنة CMS
لا تظهر رموز هذا القسم إن لم تُستخدم مزامنة CMS.
DAT_CMS_UNREACHABLEفشل DNS، أو رفض الاتصال، أو فشل TLS، أو انتهاء المهلة. وانتهاء المهلة ليس رمزاً منفصلاً بل يندرج هنا — لأن الاستجابة واحدة.
arrow_forwardإعادة المحاولة بعد فترة تراجع
DAT_CMS_UNAUTHORIZEDاستجاب الخادم بـ 401. رمز المصادقة غير موجود أو خاطئ.
arrow_forwardمراجعة إعداد رمز المصادقة
DAT_CMS_FORBIDDENاستجاب الخادم بـ 403. رمز المصادقة صالح لكن لا صلاحية له على نقطة النهاية هذه.
arrow_forwardمراجعة درجة رمز المصادقة
DAT_CMS_ENDPOINT_NOT_FOUNDاستجاب الخادم بـ 404. الـ URL خاطئ.
arrow_forwardمراجعة إعداد الـ URL
DAT_CMS_SERVER_ERRORاستجاب الخادم بـ 5xx.
arrow_forwardإعادة المحاولة بعد فترة تراجع
DAT_CMS_HTTP_STATUSاستجابة غير 2xx لا تندرج ضمن ما سبق.
arrow_forwardمراجعة رمز الحالة
DAT_CMS_MALFORMEDلا يوجد سطر نسخة في الاستجابة، أو أن سطر النسخة ليس عدداً عشرياً صرفاً، أو أنه تجاوز المدى.
arrow_forwardمراجعة إصدار الخادم
DAT_CMS_IMPORT_FAILED وصلت الاستجابة لكن تعذّر تطبيق الشهادات. السبب مُضمَّن في cause.
arrow_forwardمراجعة CERT_* / KEY_* في cause
DAT_CMS_VERSION_RESETأعاد الخادم نسخة أقدم من نسختنا. وهذا أمرٌ بإعادة مزامنة كاملة.
arrow_forwardيُعالَج تلقائياً
DAT_CMS_NOT_SYNCEDحالة لم تنجح فيها المزامنة ولا مرة واحدة حتى الآن.
arrow_forwardانتظار المزامنة الأولى
DAT_CMS_SYNC_IN_PROGRESSتُخطّيت هذه الدورة لأن المزامنة السابقة ما زالت جارية. وليس هذا خطأً.
DAT_CMS_NOT_SUPPORTEDوظيفة CMS غير مُضمَّنة في البناء. إما أن الميزة غير مفعّلة أو أن CURL غير مُدرج.
arrow_forwardمراجعة خيارات البناء
DAT_CMS_UNKNOWNخطأ في CMS لم يُصنَّف ضمن أي مما سبق.
arrow_forwardمراجعة السجلات
الرموز التي يُحكم فيها على المزامنة بـالفشل الدائم (UNAUTHORIZED، FORBIDDEN، ENDPOINT_NOT_FOUND، MALFORMED، IMPORT_FAILED) كلها حرجة. فهي لا تنحل بإعادة المحاولة بينما تستمر الشهادات في الانتهاء، ولذلك فإن إهمالها يوقف الخدمة حتماً.
وعلى العكس فإن UNREACHABLE وSERVER_ERROR جزئية. إذ يستمر العمل بالشهادات الحالية وتتعافى ذاتياً في الدورة التالية — غير أن استمرار الفشل ينقلها في النهاية إلى الحرج. فاضبط التنبيه على أساس عدد مرات الفشل المتتالية.
فشل المزامنة لا يُرمى كاستثناء
حتى عند فشل المزامنة الأولى يُعاد المدير سليماً — لأن المزامنة ولو متأخرة أفضل. وبدلاً من ذلك يبقى الفشل حالةً يمكن الاستعلام عنها.
| العميل | طريقة الاستعلام |
|---|---|
| Rust | manager.last_error().await |
| Go | manager.LastError() |
| JavaScript | manager.lastError() |
| Python | manager.last_error() |
| Ruby | manager.last_error |
| Java/Kotlin | manager.lastError |
| C# | manager.LastError |
| C/C++ | dat_cms_manager_last_error(m) |
فإن لم تنجح ولا مرة واحدة كانت القيمة DAT_CMS_NOT_SYNCED، وإن كان الوضع سليماً كانت فارغة.
الخادم
رموز يُصدرها خادم CMS. والعميل لا يُنشئها بل يستقبلها فقط.
DAT_AUTH_UNAUTHORIZED لا وجود لترويسة Authorization، أو أن رمز المصادقة غير مسجَّل في أي درجة.
DAT_AUTH_FORBIDDENرمز المصادقة مسجَّل لكنه ليس بالدرجة التي تتطلبها نقطة النهاية هذه.
DAT_AUTH_DISABLEDلم يُضبط أي رمز فالمصادقة معطّلة بالكامل. حتى واجهة إصدار الشهادات مفتوحة دون مصادقة. ولا يخرج هذا في الاستجابة بل يُسجَّل في سجل الإقلاع فقط.
arrow_forwardضبط رموز المصادقة فوراً
DAT_REQ_MALFORMEDتعذّر تفسير معاملات المسار أو الاستعلام، أو أن الوسيط خارج المدى المسموح (delay سالب، تجاوز عشر سنوات، إلخ).
DAT_REQ_ALG_UNSUPPORTEDاسم الخوارزمية في مسار الطلب غير معروف.
DAT_REQ_NOT_FOUNDلا وجود لهذا المسار أو أن الطريقة (method) مختلفة.
DAT_REQ_TOO_LARGEتجاوز حجم جسم الطلب الحدَّ المسموح.
DAT_REQ_UNKNOWNخطأ في الطلب لم يُصنَّف ضمن أي مما سبق.
DAT_STORE_UNAVAILABLEانقطاع اتصال قاعدة البيانات، أو نفاد تجمّع الاتصالات، أو تنازع الأقفال، أو انتهاء المهلة. وهو الرمز الوحيد الذي يستخدم 503، وبه يعرف العميل أن "هذا ينصلح بالانتظار".
arrow_forwardإعادة المحاولة بعد فترة تراجع
DAT_STORE_UNKNOWNفشل القراءة أو الكتابة، أو غياب الجدول، أو عدم تطابق المخطط، أو تلف صف شهادة مخزَّن.
arrow_forwardمراجعة حالة قاعدة البيانات
مغلّف الاستجابة:
{
"code": "DAT_REQ_ALG_UNSUPPORTED",
"details": { "algorithm": "BOGUS-ALG" }
}والأخطاء الناتجة عن إنشاء الشهادات والتعامل معها يستخدم فيها الخادم أيضاً الرموز المشتركة أعلاه (DAT_CERT_*، DAT_KEY_*، DAT_CONFIG_*) كما هي.
عند استقبال رمز من الخادم
يغلّف العميل رمز الخادم برمز CMS الخاص به، ويحفظ الأصل في cause.
| المستلَم | HTTP | الرمز الذي يُصدره العميل |
|---|---|---|
DAT_AUTH_UNAUTHORIZED | 401 | DAT_CMS_UNAUTHORIZED |
DAT_AUTH_FORBIDDEN | 403 | DAT_CMS_FORBIDDEN |
DAT_REQ_NOT_FOUND | 404 | DAT_CMS_ENDPOINT_NOT_FOUND |
DAT_REQ_* (غير ذلك) | 400·405·413 | DAT_CMS_HTTP_STATUS |
DAT_STORE_UNAVAILABLE | 503 | DAT_CMS_SERVER_ERROR |
DAT_STORE_UNKNOWN | 500 | DAT_CMS_SERVER_ERROR |
| (تراجع النسخة) | 200 | DAT_CMS_VERSION_RESET |
البحث حسب العَرَض
| العَرَض | الرمز |
|---|---|
| يعمل بعد تسجيل الدخول مباشرة ثم يُرفض بعد قليل | DAT_TOKEN_EXPIRED — انتهى عمر الرمز. ويكفي إعادة إصداره |
| فشل التحقق في خادم بعينه فقط | DAT_CERT_NOT_SYNCED — لم يستلم ذلك الخادم الـ CID الجديد بعد |
| رفض الرمز نفسه في جميع الخوادم | DAT_CERT_NOT_FOUND — إنه CID لم نصدره قط |
| خادم الإصدار لا يستطيع إنشاء الرموز | DAT_MANAGER_NO_ISSUABLE_CERTIFICATE + DAT_CERT_VERIFY_ONLY — نُشر بصيغة verify-only |
| فشل الإصدار عقب الإقلاع مباشرة فقط | DAT_MANAGER_NO_CERTIFICATE — قبل المزامنة الأولى. وينحل بعد قليل |
| استمرار فشل مزامنة CMS | DAT_CMS_UNAUTHORIZED — رمز المصادقة خاطئ. ولا ينحل بإعادة المحاولة |
| لا تصل أي شهادة | DAT_CMS_ENDPOINT_NOT_FOUND — خطأ إملائي في الـ URL |
| الفشل على منصة بعينها فقط | DAT_INTERNAL_UNAVAILABLE — لا توجد واجهة تشفير خلفية |
| ازدياد مفاجئ في فشل التحقق | DAT_SIG_MISMATCH — الحالة الواحدة غير ضارة لكن تكاثرها محاولة تزوير |
| فشل مفاجئ في فك تشفير secure | DAT_CRYPTO_TAG_MISMATCH — إما أن الشهادات اختلت أو أنها محاولة عبث |
| تحذير في سجل إقلاع CMS | DAT_AUTH_DISABLED — المصادقة معطّلة. وواجهة الإصدار مفتوحة |
الملحق
صيغة الرمز
DAT_<المجال>_<السبب>- إذا نتج السبب نفسه في مجالات مختلفة بقي اسم السبب واحداً. فـ
DAT_TOKEN_MALFORMEDوDAT_CERT_MALFORMEDيختلفان في الهدف فقط ويتفقان في المعنى. _UNKNOWNمخصص للاحتياط في كل مجال. ولا يُستخدم بمعنى آخر مثل "خوارزمية غير معروفة" (فذلك_UNSUPPORTED).- نص الرمز عقد عام. فيمكن تغيير الرسالة بحرية أما الرمز فلا يُغيَّر.
| التصنيف | بادئة الرمز |
|---|---|
| رمز DAT | DAT_TOKEN_ |
| الشهادة | DAT_CERT_ |
| التوقيع | DAT_SIG_ |
| التشفير | DAT_CRYPTO_ |
| المفتاح | DAT_KEY_ |
| المدير | DAT_MANAGER_ |
| الإعداد | DAT_CONFIG_ |
| الداخلي | DAT_INTERNAL_ |
| مزامنة CMS | DAT_CMS_ |
| الخادم | DAT_AUTH_ · DAT_REQ_ · DAT_STORE_ |
طريقة الوصول حسب العميل
| العميل | نوع الخطأ | الرمز | تصنيف إعادة المحاولة | الحدث الأمني |
|---|---|---|---|---|
| Rust | DatError enum | err.code() | err.retry() | err.security_event() |
| Go | *dat.Error | err.Code | dat.Retry(err) | dat.SecurityEvent(err) |
| JavaScript | DatError extends Error | e.code | e.retry | e.securityEvent |
| Python | DatError(ValueError, RuntimeError) | e.code | e.retry | e.security_event |
| Ruby | Saro::Dat::Error | e.code | e.retry | e.security_event? |
| Java/Kotlin | DatException | e.code | e.retry | e.securityEvent |
| C# | DatException | e.Code | e.Retry | e.SecurityEvent |
| C/C++ | dat_error_t | dat_error_code(e) | dat_error_retry(e) | dat_error_is_security_event(e) |
| خادم CMS | مغلّف JSON | حقل code | — | — |
الحدث الأمني لا يعيد true إلا في الحالتين المؤكدتين للتزوير والعبث (DAT_SIG_MISMATCH، DAT_CRYPTO_TAG_MISMATCH). أما بطاقة الاشتباه في هذا المستند فنطاقها أوسع (تشمل الرموز والمفاتيح والطلبات المُلاعب بها)، وهي حالياً تصنيف توثيقي فقط ولا تُعرض عبر واجهة العميل البرمجية.
ودرجة التأثير كذلك تصنيف توثيقي. فالضرر يختلف باختلاف موضع نشوء الرمز الواحد — فمثلاً DAT_KEY_INVALID بلا تأثير عند ترشيح رمز DAT وارد، لكنه إن نشأ أثناء قراءة شهادة في مزامنة CMS أفشل المزامنة بأكملها.
الأسباب الأدنى لا تُهمَل. فـ DAT_MANAGER_NO_ISSUABLE_CERTIFICATE وDAT_CMS_IMPORT_FAILED ينقلان السبب عبر تسلسل الاستثناءات في كل لغة (cause / __cause__ / InnerException / Unwrap()).
C/C++ تحتفظ بالقيم العددية أيضاً
تبقى القيم العددية القديمة في dat_error_t كما هي حفاظاً على توافق ABI، لكن النص الرمزي هو المرجع. فالمكتبة لم تعد تُعيد القيم القديمة، ولذلك فإن مقارنة مثل err == DAT_ERROR_INVALID_DAT لم تعد صحيحة. قارِن باستخدام dat_error_code(e).
ولا يوجد في C تسلسل للاستثناءات، فيُستعلم عن السبب على حدة عبر dat_manager_issuable_cause().