DAT
التوثيق

رموز الأخطاء

هذه هي رموز الأخطاء المشتركة لمكتبات الخدمة المدعومة رسمياً في DAT.

يحمل كل رمز قيمتين: التأثير وإعادة المحاولة، ويحمل بعضها بطاقة اشتباه إضافية.

التأثير — الضرر الواقع على الخدمة

هذا هو معيار ضبط التنبيهات. ولا ينظر إلا في سؤال واحد: "هل توقفت الخدمة الآن؟"

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

بلا تأثير ليست هدفاً للتنبيهات. فإذا كان على جميع المسؤولين مراجعة ورود مُدخل خاطئ مرة واحدة، يفقد التنبيه معناه.

الاشتباه — التحقيق عند الاستمرار

الرموز التي تحمل بطاقة اشتباه هي جزء من التشغيل الطبيعي عندما ترد مرة واحدة. فالعميل قد يرسل قيمة خاطئة في أي وقت، وترشيحها هو دور المكتبة أصلاً.

غير أن ورود هذه الأخطاء باستمرار، أو بكثافة من مصدر بعينه يعني أحد أمرين.

  • خلل في الإعداد — نشر خاطئ، أو بقاء عملاء بإصدارات قديمة، أو عدم تطابق الشهادات.
  • محاولة اختراق — محاولة تجاوز التحقق بالتلاعب برموز DAT والمفاتيح، أو استكشاف بحثاً عن قيم صالحة.

لذلك يصحّ في هذه الرموز رصد عددها كمؤشر. ويكفي التنبيه عند تجاوز العتبة فقط.

إعادة المحاولة

إعادة المحاولةالمعنى
مؤقتتنحل المشكلة بإعادة المحاولة بعد فترة تراجع (backoff)
دائمممنوع إعادة المحاولة. يجب تصحيح الإعداد أو المُدخل
حالةإشارة وليست خطأً

رمز DAT

مشكلة في نص رمز DAT الوارد نفسه.

DAT_TOKEN_MALFORMEDبلا تأثيردائمshieldاشتباه

الأجزاء المفصولة بالنقاط ليست خمسة، أو expire ليس عدداً عشرياً صرفاً، أو cid ليس عدداً ست عشرياً صرفاً، أو plain أو secure ليس base64url، أو تجاوز حقل عددي مدى التمثيل الصحيح.

arrow_forwardرفض الطلب

DAT_TOKEN_EXPIREDبلا تأثيردائم

expire <= 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_EXPIREDحرجدائم

start + duration + ttl < now. حالة انتهاء كامل لا يمكن معها الإصدار ولا التحقق.

arrow_forwardتجديد الشهادة

DAT_CERT_NOT_YET_ISSUABLEحرجمؤقت

now < start. لم تُفتح نافذة الإصدار بعد.

arrow_forwardالانتظار

DAT_CERT_ISSUANCE_ENDEDحرجدائم

now > start + duration لكن ttl ما زال متبقياً. الإصدار متعذر والتحقق فقط ممكن.

arrow_forwardنشر شهادة جديدة

DAT_CERT_VERIFY_ONLYحرجدائم

شهادة تحتوي المفتاح العام فقط دون مفتاح التوقيع الخاص. التحقق ممكن أما الإصدار فمتعذر.

arrow_forwardمراجعة إعداد النشر

DAT_CERT_NOT_FOUNDبلا تأثيردائمshieldاشتباه

لا توجد لدينا شهادة تقابل 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بلا تأثيردائمshieldاشتباه

انتهى التحقق من التوقيع بـعدم تطابق. قيمة HMAC مختلفة أو أعاد ECDSA verify القيمة false.

arrow_forwardقطع الجلسة وتسجيل حدث أمني

DAT_SIG_MALFORMEDبلا تأثيردائمshieldاشتباه

جزء التوقيع فارغ، أو ليس 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بلا تأثيردائمshieldاشتباه

وسم مصادقة AES-GCM غير مطابق. إما أن secure عُبث بها أو أن مفتاح الشهادة مختلف.

arrow_forwardقطع الجلسة وتسجيل حدث أمني

DAT_CRYPTO_DATA_INVALIDبلا تأثيردائمshieldاشتباه

النص المشفَّر غير فارغ لكنه أقصر من 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بلا تأثيردائمshieldاشتباه

عدم تطابق بين الخوارزمية المعلنة وطول المفتاح (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

استجاب الخادم بـ 401. رمز المصادقة غير موجود أو خاطئ.

arrow_forwardمراجعة إعداد رمز المصادقة

DAT_CMS_FORBIDDENحرجدائم403

استجاب الخادم بـ 403. رمز المصادقة صالح لكن لا صلاحية له على نقطة النهاية هذه.

arrow_forwardمراجعة درجة رمز المصادقة

DAT_CMS_ENDPOINT_NOT_FOUNDحرجدائم404

استجاب الخادم بـ 404. الـ URL خاطئ.

arrow_forwardمراجعة إعداد الـ URL

DAT_CMS_SERVER_ERRORجزئيمؤقت5xx

استجاب الخادم بـ 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بلا تأثيرحالة200

أعاد الخادم نسخة أقدم من نسختنا. وهذا أمرٌ بإعادة مزامنة كاملة.

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 جزئية. إذ يستمر العمل بالشهادات الحالية وتتعافى ذاتياً في الدورة التالية — غير أن استمرار الفشل ينقلها في النهاية إلى الحرج. فاضبط التنبيه على أساس عدد مرات الفشل المتتالية.

فشل المزامنة لا يُرمى كاستثناء

حتى عند فشل المزامنة الأولى يُعاد المدير سليماً — لأن المزامنة ولو متأخرة أفضل. وبدلاً من ذلك يبقى الفشل حالةً يمكن الاستعلام عنها.

العميلطريقة الاستعلام
Rustmanager.last_error().await
Gomanager.LastError()
JavaScriptmanager.lastError()
Pythonmanager.last_error()
Rubymanager.last_error
Java/Kotlinmanager.lastError
C#manager.LastError
C/C++dat_cms_manager_last_error(m)

فإن لم تنجح ولا مرة واحدة كانت القيمة DAT_CMS_NOT_SYNCED، وإن كان الوضع سليماً كانت فارغة.


الخادم

رموز يُصدرها خادم CMS. والعميل لا يُنشئها بل يستقبلها فقط.

DAT_AUTH_UNAUTHORIZEDبلا تأثيردائمshieldاشتباه401

لا وجود لترويسة Authorization، أو أن رمز المصادقة غير مسجَّل في أي درجة.

DAT_AUTH_FORBIDDENبلا تأثيردائمshieldاشتباه403

رمز المصادقة مسجَّل لكنه ليس بالدرجة التي تتطلبها نقطة النهاية هذه.

DAT_AUTH_DISABLEDحرجحالة

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

arrow_forwardضبط رموز المصادقة فوراً

DAT_REQ_MALFORMEDبلا تأثيردائمshieldاشتباه400

تعذّر تفسير معاملات المسار أو الاستعلام، أو أن الوسيط خارج المدى المسموح (delay سالب، تجاوز عشر سنوات، إلخ).

DAT_REQ_ALG_UNSUPPORTEDبلا تأثيردائم400

اسم الخوارزمية في مسار الطلب غير معروف.

DAT_REQ_NOT_FOUNDبلا تأثيردائمshieldاشتباه404·405

لا وجود لهذا المسار أو أن الطريقة (method) مختلفة.

DAT_REQ_TOO_LARGEبلا تأثيردائمshieldاشتباه413

تجاوز حجم جسم الطلب الحدَّ المسموح.

DAT_REQ_UNKNOWNبلا تأثيردائم400

خطأ في الطلب لم يُصنَّف ضمن أي مما سبق.

DAT_STORE_UNAVAILABLEجزئيمؤقت503

انقطاع اتصال قاعدة البيانات، أو نفاد تجمّع الاتصالات، أو تنازع الأقفال، أو انتهاء المهلة. وهو الرمز الوحيد الذي يستخدم 503، وبه يعرف العميل أن "هذا ينصلح بالانتظار".

arrow_forwardإعادة المحاولة بعد فترة تراجع

DAT_STORE_UNKNOWNحرجدائم500

فشل القراءة أو الكتابة، أو غياب الجدول، أو عدم تطابق المخطط، أو تلف صف شهادة مخزَّن.

arrow_forwardمراجعة حالة قاعدة البيانات

مغلّف الاستجابة:

json
{
  "code": "DAT_REQ_ALG_UNSUPPORTED",
  "details": { "algorithm": "BOGUS-ALG" }
}

والأخطاء الناتجة عن إنشاء الشهادات والتعامل معها يستخدم فيها الخادم أيضاً الرموز المشتركة أعلاه (DAT_CERT_*، DAT_KEY_*، DAT_CONFIG_*) كما هي.

عند استقبال رمز من الخادم

يغلّف العميل رمز الخادم برمز CMS الخاص به، ويحفظ الأصل في cause.

المستلَمHTTPالرمز الذي يُصدره العميل
DAT_AUTH_UNAUTHORIZED401DAT_CMS_UNAUTHORIZED
DAT_AUTH_FORBIDDEN403DAT_CMS_FORBIDDEN
DAT_REQ_NOT_FOUND404DAT_CMS_ENDPOINT_NOT_FOUND
DAT_REQ_* (غير ذلك)400·405·413DAT_CMS_HTTP_STATUS
DAT_STORE_UNAVAILABLE503DAT_CMS_SERVER_ERROR
DAT_STORE_UNKNOWN500DAT_CMS_SERVER_ERROR
(تراجع النسخة)200DAT_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 — قبل المزامنة الأولى. وينحل بعد قليل
استمرار فشل مزامنة CMSDAT_CMS_UNAUTHORIZED — رمز المصادقة خاطئ. ولا ينحل بإعادة المحاولة
لا تصل أي شهادةDAT_CMS_ENDPOINT_NOT_FOUND — خطأ إملائي في الـ URL
الفشل على منصة بعينها فقطDAT_INTERNAL_UNAVAILABLE — لا توجد واجهة تشفير خلفية
ازدياد مفاجئ في فشل التحققDAT_SIG_MISMATCH — الحالة الواحدة غير ضارة لكن تكاثرها محاولة تزوير
فشل مفاجئ في فك تشفير secureDAT_CRYPTO_TAG_MISMATCH — إما أن الشهادات اختلت أو أنها محاولة عبث
تحذير في سجل إقلاع CMSDAT_AUTH_DISABLEDالمصادقة معطّلة. وواجهة الإصدار مفتوحة

الملحق

صيغة الرمز

DAT_<المجال>_<السبب>
  • إذا نتج السبب نفسه في مجالات مختلفة بقي اسم السبب واحداً. فـ DAT_TOKEN_MALFORMED وDAT_CERT_MALFORMED يختلفان في الهدف فقط ويتفقان في المعنى.
  • _UNKNOWN مخصص للاحتياط في كل مجال. ولا يُستخدم بمعنى آخر مثل "خوارزمية غير معروفة" (فذلك _UNSUPPORTED).
  • نص الرمز عقد عام. فيمكن تغيير الرسالة بحرية أما الرمز فلا يُغيَّر.
التصنيفبادئة الرمز
رمز DATDAT_TOKEN_
الشهادةDAT_CERT_
التوقيعDAT_SIG_
التشفيرDAT_CRYPTO_
المفتاحDAT_KEY_
المديرDAT_MANAGER_
الإعدادDAT_CONFIG_
الداخليDAT_INTERNAL_
مزامنة CMSDAT_CMS_
الخادمDAT_AUTH_ · DAT_REQ_ · DAT_STORE_

طريقة الوصول حسب العميل

العميلنوع الخطأالرمزتصنيف إعادة المحاولةالحدث الأمني
RustDatError enumerr.code()err.retry()err.security_event()
Go*dat.Errorerr.Codedat.Retry(err)dat.SecurityEvent(err)
JavaScriptDatError extends Errore.codee.retrye.securityEvent
PythonDatError(ValueError, RuntimeError)e.codee.retrye.security_event
RubySaro::Dat::Errore.codee.retrye.security_event?
Java/KotlinDatExceptione.codee.retrye.securityEvent
C#DatExceptione.Codee.Retrye.SecurityEvent
C/C++dat_error_tdat_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().