TL؛ DR
في 14 سبتمبر 2025، حدد الباحثون شاي حلود، دودة ذاتية التكاثر مخفية داخل حزم npm، تحويل تحديث التبعية الروتيني إلى تحديث كامل النطاق هجوم سلسلة التوريد. تم رصده لأول مرة في @ctrl/tinycolor حزمة من دانيال دوس سانتوس بيريرا، يجمع شاي-هولود الأسرار، ويستخرجها عبر مستودعات جيت هاب وسير العمل، ويعيد نشر نفسه عبر السجل باستخدام بيانات اعتماد مسروقة. في غضون أيام، قفز عدد الحزم المصابة من العشرات إلى المئات، مؤكدًا أن شايلود لا يعد مجرد حصان طروادة آخر، بل هو دودة مصممة للانتشار تلقائيًا عبر نظام npm البيئي.
تأثير: أي مطور أو مشغل CI يقوم بتثبيت حزم npm العامة معرض للخطر.
إجراءات فورية: حظر الإصدارات المعروفة، والتبديل إلى عمليات التثبيت التي تحتوي على ملف القفل فقط، وتدوير رموز npm وGitHub، ومراجعة سير العمل، ومراقبة مؤشرات الاختراق (IoCs).
ما يحدث؟
استخدم هجوم سلسلة التوريد Shai-Hulud في حزم npm يُعد هذا أحد أكثر الحوادث إزعاجًا في الذاكرة الحديثة. على عكس أحصنة طروادة المعزولة، تمزج هذه الدودة سرقة بيانات الاعتماد، والاستخراج الآلي، والتكرار الذاتيونتيجة لذلك، تقلصت مدة الإصابة من أسابيع إلى ساعات فقط.
بالنسبة لفرق DevOps، فإن الدرس واضح: إذا كان كل تثبيت قادرًا على تنفيذ التعليمات البرمجية، فإن كل تحديث للتبعيات يمثل نقطة خرق محتملة.
المتجه الأولي المحتمل وبيانات الاعتماد المستهدفة
التحليل المبكر يشير إلى أن الهجوم بدأ على الأرجح بـ أوراق الاعتماد المسروقةعلى سبيل المثال، حملات التصيد الاحتيالي التي تنتحل هوية npm login أو ربما تكون مطالبات المصادقة متعددة العوامل قد استولت على رموز المطورين. بمجرد أن تمكن المهاجمون من اختراقها، انتشرت الدودة عن طريق تضمين نفسها في حزم npm وسرقة المزيد من الأسرار من:
- ملفات تكوين npm مثل
.npmrc، والتي غالبًا ما تحتوي على رموز النشر. - متغيرات البيئة والتكوينات مع GitHub PATs و CI/CD أسرار.
- نقاط نهاية بيانات التعريف السحابية (AWS، GCP، Azure) مما يوفر بيانات اعتماد قصيرة الأجل للحركة الجانبية.
لذلك، أصبحت سرقة بيانات الاعتماد نقطة انطلاق. باستخدام رموز npm صالحة وأسرار GitHub، يمكن لـ Shai-Hulud التكاثر ذاتيًا عبر حزم ومستودعات متعددة دون أي جهد بشري إضافي.
التأثير التنفيذي لهجوم سلسلة توريد شاي-هولود
لا يزال شاي-هولود نشطًا حتى اليوم. تُسرّع هذه الدودة من زمن تأثيرها. ما كان يستغرق أسابيع مع حصان طروادة، أصبح الآن يستغرق ساعات. ونتيجةً لذلك، الانتشار أسرع وأصعب في الاحتواء. ويتقدم من خلال:
- سرقة رموز النشر الخاصة بـ npm وأسرار GitHub.
- إعادة نشر نفسه في حزم npm الأخرى.
- إضافة تدفقات عمل GitHub Actions الضارة للاستمرار.
من هو المتأثر:
أي فريق يُثبّت حزم npm العامة مُعرّض للخطر. علاوة على ذلك، يواجه المطورون الذين يستخدمون رموز npm أو GitHub المُخزّنة مؤقتًا مخاطر عالية. كما أن مُشغّلي تكامل التكوين (CI) الذين يستخدمون أسرارًا واسعة النطاق معرضون للخطر أيضًا.
مخاطر العمل
يتزايد تأثير الأعمال بسرعة. يمكن أن تؤدي الرموز المسروقة إلى الاستيلاء على الحسابات، واختطاف الحزم، وحتى إساءة استخدام السحابة. بالإضافة إلى ذلك، فإن استمرارية سير عمل GitHub تُصعّب عملية التنظيف. لذلك،يجب على الفرق التعامل مع قضية شاي-هولود باعتبارها حادثة مستمرة، وليس حادثة مغلقة.
كيف يعمل هجوم سلسلة التوريد Shai-Hulud في حزم npm
أهداف المهاجم ودوافعه
تهدف الحملة إلى تحسين ثلاثة أشياء:
- الهدف الأول هو سرقة بيانات الاعتماد على نطاق واسع من أجهزة الكمبيوتر المحمولة للمطورين ومشغلات التكامل المستمر. يشمل ذلك رموز نشر npm، ورموز GitHub، وبيانات اعتماد السحابة. في الواقع، تؤكد العديد من التحليلات وجود عملية جمع سرية منهجية، مثل تشغيل TruffleHog والاستعلام عن نقاط نهاية بيانات تعريف السحابة.
- الهدف الثاني هو تنتشر تلقائيًا بإساءة استخدام حقوق النشر الخاصة بالمطورين المخترقين. ونتيجةً لذلك، يتوسع نطاق انتشار واحد بسرعة ليشمل العديد من المواقع، إذ تظهر إصدارات جديدة مصابة من حزم أخرى دون أي جهد بشري إضافي.
- الهدف الثالث هو الاستمرار والتسرب بشكل موثوق من خلال بنية GitHub التحتية. أنشأ المهاجمون مستودعًا عامًا باسم "Shai-Hulud" بقاعدة بيانات مزدوجة 64. data.jsonوبالإضافة إلى ذلك، فإنهم يزرعون سير عمل يتسلسل ${{ toJSON(الأسرار) }} وينشرها على خطاف ويب ثابت.
تشمل العوائد المحتملة وصولاً طويل الأمد إلى السجلات وشفرات المصدر، وحركة جانبية سريعة إلى حسابات السحابة، وإمكانية تسليح سلسلة التوريد بشكل أكبر. تُظهر التقارير العامة أن مستودعات الإيداع الخاصة تحولت إلى مستودعات عامة مع "-الهجرة" اللاحقة، التي تزيد من عرض البيانات والزخم
داخل حمولة شاي-هولود: Bundle.js في حزم npm
سفن شاي هولود هي كبيرة، مجمعة في Webpack ومُصغّرة بشكل كبير ملف جافا سكريبت (Bundle.js، حوالي 3-3.7 ميجابايت) الذي ينفذ من بعد التثبيت خطاف في package.json. بالتالي, يُفعّل كل تثبيت الحمولة تلقائيًا. يُخفي هذا التصميم المُعرِّفات، ويُضغط على تدفق التحكم، ويُجمّع جميع البيانات المنطقية في أداة واحدة تُنفَّذ أثناء التثبيت. يُؤكِّد المُحلِّلون باستمرار على وجود حزم Webpack، وحجم ملف غير طبيعي، وسرعة تنفيذ أثناء التثبيت.
سمات التعتيم والتحليل المضاد التي ستراها في العينات:
- رسم بياني مصغر للوحدة مع معرفات وحدات رقمية، وتعليقات متفرقة، وتدفق تحكم مُسطّح. علاوة على ذلك،, هذا الهيكل يجعل المراجعة اليدوية صعبة للغاية.
- إخفاء الخيط عبر طبقات base64 ومساعدات البناء. على سبيل المثال, عادةً ما يظهر تكرار تشفير وفك تشفير base64 حول إجراءات الاستخراج.
- الإرسال الديناميكي من خلال وحدة التقييم-أنماط النمط وأجسام الوظائف المولدة، وبالتالي تمكين الكود من تغيير السلوك في وقت التشغيل.
- تصفية نظام التشغيل تفضيل تنفيذ Linux وmacOS بشكل خاص على مشغلات CI وأجهزة الكمبيوتر المحمولة للمطورين.
من الناحية الوظيفية، تعتبر الحزمة معيارية. تصف التقارير وحدات لاكتشاف أنظمة التشغيل، ومسح أنظمة الملفات وأسرار git، والوصول إلى SDK السحابي، وعمليات واجهة برمجة تطبيقات GitHub، ومحرك نشر يُحرر حزمًا أخرى يملكها المُصان. في الواقع، يُسلّط كلٌّ من StepSecurity وReversingLabs الضوء على وظيفة تُحدّث الحزم تلقائيًا باستخدام الخطاف الخبيث.
التنفيذ وقت التثبيت في Shai-Hulud: كيف تُفعّل حزم npm الدودة
يبدأ الهجوم عندما تشغيل العقدة بعد التثبيت Bundle.js. في هذه المرحلة، يقوم البرنامج النصي بتهيئة حالة العمل وفك ضغطها في الذاكرة، مما يمهد الطريق لتشغيل الدودة بشكل كامل.
الاكتشاف والحصاد
- تُفرّغ الحمولة ملف process.env وتفحص الملفات المحلية بحثًا عن أسرار عالية الإنتروبيا وبادئات الرموز. بالإضافة إلى ذلك، تُوسّع نطاق التغطية بتشغيل TruffleHog.
- يقوم بالاستعلام عن نقاط نهاية بيانات التعريف السحابية لجمع بيانات اعتماد قصيرة الأجل. على سبيل المثال، مكالمات إلى
169.254.169.254على AWS أوmetadata.google.internalتظهر الفيروسات على GCP غالبًا في المضيفين المصابين. - وبناء على ذلك، تصبح أي بيانات اعتماد يتم العثور عليها قابلة للاستخدام على الفور لنشر حزم npm الجديدة أو دفع سير عمل GitHub.
exfiltration
- تقوم الدودة بإنشاء مستودع جديد على GitHub باسم شاي حلود ويكتب ملفًا مشفرًا بقاعدة 64 مزدوجة
data.jsonمع تفاصيل المنصة، ومعلومات البيئة، والأسرار. كما هو واضح، من السهل رصد هذا السلوك المزعج إذا عرف المدافعون أين يبحثون. - كما أنه يزرع سير عمل GitHub Actions، غالبًا على فرع يسمى شاي-هولود، الذي يتسلسل
${{ toJSON(secrets) }}وينشر البيانات في رابط ويب ثابت. علاوةً على ذلك، يستمر سير العمل هذا حتى يقوم شخص ما بإزالته بنشاط.
نشر
- مع أي رمز npm مُكتشف، تُحصي الحمولة جميع الحزم المملوكة للمُصان المُخترق. ثم تُحضر كل ملف tarball، وتُضيف bundle.js ومُدخل ما بعد التثبيت، وتُعيد نشر الحزمة.
- ونتيجة لذلك، قد تظهر العشرات من الحزم المصابة في غضون ساعات، مما يؤدي إلى مضاعفة دائرة الانفجار عبر النظام البيئي.
الاستمرار والتعرض
تحافظ الدودة على سير العمل الخبيثة على قيد الحياة، وفي العديد من الحالات، تقلب المستودعات الخاصة إلى مستودعات عامة باستخدام "-الهجرة" إجمالاً، يضمن هذا للمهاجم الحفاظ على موطئ قدم ويزيد من تسرب البيانات.
ملاحظة الكشف عن المفتاح
هذا الاستخدام غير المعتاد لـ ${{ toJSON(secrets) }} يعد وجود إجراءات في سير العمل أمرًا نادرًا. ولذلك، ينبغي على الفرق التعامل معها باعتبارها مؤشرًا عالي الإشارة أثناء عمليات الصيد.
نمط سير العمل المعقم الذي يجب عليك البحث عنه
هذا الاستخدام غير المعتاد لـ إلى JSON(أسرار) في الإجراءات هو مؤشر إشارة عالية في هذا الحادث.
كود زائف للانتشار عالي المستوى (آمن، وصفي)
async function propagate(token, owner) {
const pkgs = await npmApi.listPackages(owner, token);
for (const p of pkgs) {
const tgz = await npmApi.fetchTarball(p, token);
const modified = injectBundleAndPostinstall(tgz); // adds bundle.js + "postinstall"
await npmApi.publish(modified, token); // publishes new malicious version
}
}
وقد لاحظ المحللون هذه الحلقة على نطاق واسع، وهو ما يفسر القفزة السريعة من عشرات إلى مئات الحزم المصابة.
لماذا تعتبر هذه دودة في نظام بيئي للحزمة
الدودة هي برمجية خبيثة تنتشر تلقائيًا دون الحاجة إلى خطوات تشغيل يدوية في كل مرحلة. في أنظمة التشغيل، عادةً ما تستغل الديدان ثغرات الشبكة للانتقال من جهاز إلى آخر. على النقيض من ذلك، تعمل شي-هولود داخل سجل npm. مسارها الفعال هو من خلال إعادة استخدام بيانات الاعتماد.
تستغل الدودة رموز نشر npm المسروقة. بمجرد حصولها على بيانات اعتماد صالحة، تُعيد نشر إصدارات مُصابة ضمن حزم أخرى يملكها نفس المُطوّر. بعد ذلك، يُثبّت هذه الحزم مطورون أو مُشغّلو تكامل مستمر (CI) دون علمهم، وتتكرر الدورة.
ولهذا السبب، محللو الأمن، بما في ذلك قراءة الظلام، صنف شاي-هولود على أنه دودة ذاتية التكاثر بدلاً من مجرد حصان طروادة أو حادثة اختطاف بيانات. الفرق مهم: عادةً ما يُصيب حصان طروادة مضيفًا واحدًا، بينما تُضخّم الدودة تأثيرها تلقائيًا على نظام بيئي.
ورقة الغش "كيف يعمل"
لتلخيص دورة حياة شاي-هولود، إليك ملخصcisوتفاصيل خطواتها الرئيسية:
- حزمة مع بعد التثبيت تم تثبيته، و
bundle.jsينفذ. - يقوم الحمولة بإفراغ متغيرات البيئة، ومسح الملفات وسجل git، وتشغيلها ترافل هوج، ويستفسر عن خدمات بيانات التعريف السحابية. وبالتالي، يصبح أي سر يتم العثور عليه مفيدًا على الفور.
- يحدث الاستخراج بطريقتين: أولاً، عن طريق إنشاء مستودع عام باسم شاي حلود مع ترميز مزدوج بقاعدة 64
data.jsonثانيًا، عن طريق إنشاء سير عمل GitHub Actions الذي ينشر${{ toJSON(secrets) }}إلى خطاف الويب. - باستخدام أي رمز npm مسروق، تُعيد الدودة نشر جميع الحزم الأخرى المملوكة للمُصان المُخترق بنفس الخدعة الخبيثة. بهذه الطريقة، تتكاثر العدوى بسرعة.
- أخيرًا، يمتلك المهاجم المزيد من الأسرار، والمزيد من الحزم لنشرها، إصرار داخل حسابات GitHub ومستودعاتها.
كيفية تجنب هذا النوع من الهجوم عمليا
شاي-هولود بمثابة جرس إنذار. الدودة التي تسرق الرموز وتعيد نشر نفسها ليست خطرًا مستقبليًا، بل هي حية في نظام حزم npm البيئي اليوم. لمنع هذا النوع من هجوم سلسلة التوريدتحتاج الفرق إلى عناصر تحكم قابلة للبرمجة والأتمتة ويتم تنفيذها بشكل مباشر CI/CD pipelineس. هذه هي نفس الدفاعات التي يمكنك تنفيذها بالفعل باستخدام زيجيني.
أوقف القطع الأثرية السيئة عند البوابة
يجب عليك فحص حزم npm وملفات tarball قبل وصولها إلى المطورين أو مهام CI. bundle.js الملفات المشبوهة بعد التثبيت hooksوعلامات التعتيم جميعها بمثابة إشارات تحذير مبكرة. علاوة على ذلك، فإن فرض فترات تهدئة وإصدارات مثبتة في pipelineيمنع هذا الأمر استهلاك الإصدارات الجديدة غير الخاضعة للفحص تلقائيًا.
صلب CI/CD بشكل افتراضي
Guardrails in CI/CD ضرورية. فهي ترفض عمليات الدمج أو التثبيت التي تُدخل نصوصًا أو ملفات ثنائية جديدة. وفي الوقت نفسه، تمنع سير العمل التي تُسلسل الأسرار أو تُحاول النشر الخارجي. يجب على الفرق أيضًا اشتراط عمليات تثبيت ملفات القفل فقط (npm ci) في جميع أنحاء pipelineوبالتالي تظل مجموعات التبعيات قابلة للتكرار وآمنة.
تقليل نصف قطر انفجار الرمز
يجب ألا تصبح الأسرار نقاط فشل واحدة. افحص باستمرار الكود والتكوينات و pipeline الإخراج ل بيانات اعتماد مكشوفةيجب تحديد نطاق الرموز بدقة، وإعطائها أعمارًا قصيرة، وتدويرها تلقائيًا عند اكتشاف تعرضها. كقاعدة عامة، يجب اعتبار أي رمز مستخدم على جهاز نفّذ عملية تثبيت مشبوهة بعد التثبيت مُعرّضًا للخطر.
انظر سلوك الدودة في وقت مبكر
إكتشاف عيب خلقي هو المفتاح. على سبيل المثال، الارتفاع المفاجئ في أحداث نشر npm، أو ظهور مهام عمل جديدة دون سبب، أو مستودعات عامة جديدة مليئة بملفات مشفرة غريبة، كلها مؤشرات على نشاط دودة. لذلك، يجب على الفرق الإبلاغ بسرعة وعزل أي مشرفين أو مشغلين يظهرون هذه العلامات التحذيرية.
إصلاح سريع دون كسر الإصدارات
يجب أن تتكامل السرعة والأمان. pull requests يمكن استبدال حزم npm المخترقة بإصدارات مُعتمدة. بالإضافة إلى ذلك، قابلية الوصول و قابلية الاستغلال يضمن التحليل بقاء الترقيات في أدنى حدها واستقرارها. وأخيرًا، أعد بناء مشغلات تكامل النظام المتأثرة من صور نظيفة بعد تأكيد التعرض، مما يمنع انتشار الهجوم.
مؤشرات التسوية (IoCs)
عند تحليل شاي-هولود، يجب على الفرق مراقبة كليهما مؤشرات الأداء الثابتة في الملفات و مؤشرات السلوك السلوكية in pipelineوتساعد هذه الإشارات مجتمعة في الكشف المبكر عن العدوى والاستجابة لها قبل أن ينتشر الدودة بشكل أكبر.
مؤشرات الأداء الثابتة
تمت ملاحظة تطابق ملخصات SHA-256 التالية bundle.js عينات:
- 46faab8ab153fae6e80e7cca38eab363075bb524edd79e42269217a083628f09
- 81d2a004a1bca6ef87a1caf7d0e0b355ad1764238e40ff6d1b1cb77ad4f595c3
- dc67467a39b70d1cd4c1f7f7a459b35058163592f4a9e8fb4dffcbba98ef210c
بالإضافة إلى ذلك، راقب الأنماط المتكررة التالية:
- A
bundle.jsفي جذر الحزمة. "postinstall": "node bundle.js"في الداخلpackage.json.- المستودعات المسماة شاي حلود.
- سير عمل GitHub التي تحتوي على
${{ toJSON(secrets) }}.
مؤشرات السلوك السلوكية
إلى جانب توقيعات الملفات، يكشف نشاط الدودة عن نفسه من خلال سلوكها. على سبيل المثال:
- انفجارات مفاجئة من أحداث نشر npm من أحد المشرفين.
- عمليات سير عمل جديدة تقوم بدفع البيانات إلى نقاط نهاية خارجية.
- طلبات POST الصادرة التي تم تشغيلها من مشغلي CI.
- تم إنشاء مستودعات عامة مؤخرًا تحتوي على كائنات مشفرة.
عمليات صيد سريعة
# Find postinstall in package.json
grep -R --line-number '"postinstall"' --include="package.json" /path/to/archives
# Detect tarballs with bundle.js
find /path/to/tarballs -name "*.tgz" -print0 \
| xargs -0 -n1 -I{} sh -c 'tar -tf "{}" | grep bundle.js && echo "== {}"'
# Search workflows for toJSON(secrets)
grep -R --line-number "toJSON(secrets)" --include="*.yml" .github || true
الخاتمة: دروس من شاي-هولود
استخدم هجوم سلسلة توريد شاي-هولود تُظهر حزم npm مدى هشاشة سلسلة توريد البرمجيات اليوم. لم يقتصر عمل هذه الدودة على إضافة شيفرة خبيثة، بل سرقت رموزًا، وأرسلت بيانات، ثم أعادت نشر نفسها تلقائيًا. لهذا السبب، انتشر الهجوم في ساعات بدلًا من أسابيع.
بالنسبة للمطورين وفرق DevOps، الدروس واضحة:
- كل تثبيت يقوم بتشغيل الكود. حتى حزمة npm الشائعة يمكنها إخفاء دودة ما بعد التثبيت.
- كل رمز له قيمة عالية. بمجرد سرقتها، يمكن استخدامها لنشر البرامج الضارة على نطاق أوسع.
- كل ما pipeline يحتاج إلى فحوصات. بدون guardrails فيما يتعلق بالتبعيات، وسير العمل، والأسرار، يمكن أن يؤدي حل وسط واحد إلى التأثير على الإنتاج بسرعة.
لذلك، يتطلب إيقاف هجمات مثل Shai-Hulud ضوابط تلقائية وسهلة التنفيذ. يجب على الفرق فحص حزم npm قبل التثبيت، واستخدام عمليات بناء الملفات المقفولة، واكتشاف نشاط النشر الغريب، والحفاظ على الرموز قصيرة الأجل. لم تعد هذه الخطوات اختيارية، بل هي أساس المرونة في الأنظمة الحديثة. pipelines.
في Xygeni، نرى هجوم سلسلة التوريد Shai-Hulud بمثابة تحذير لمنظومة المصادر المفتوحة بأكملها. يكمن الحل المستدام للمضي قدمًا في دمج أمن سلسلة التوريد مباشرةً في عملية التطوير، عند النقطة التي يصبح فيها الكود وحزم npm و... pipelines الاتصال.
فيما يلي القائمة الكاملة لحزم وإصدارات npm المُبلغ عنها بأنها مُخترقة في Shai-Hulud. استخدمها للتحقق من ملفات القفل والسجلات وتكامل النظام (CI). pipelineس للتعرض.
قائمة الحزم المخترقة
📦 معاينة حزم npm المخترقة
| اسم الحزمة | التجريبية | تاريخ النشر |
|---|---|---|
| محرك قواعد json مبسط | 0.2.1 | 2025-09-14T17:58:51.203Z |
| طيار جوي | 0.8.8 | 2025-09-14T18:35:07.600Z |
| الرسم البياني للمعرفة mcp | 1.2.1 | 2025-09-14T18:35:09.494Z |
| منديل | 0.3.1 | 2025-09-14T18:35:09.521Z |
| بوابة القفز | 0.0.2 | 2025-09-14T18:35:09.651Z |
| tvi-cli | 0.1.5 | 2025-09-14T18:35:10.996Z |
| @thangved/نافذة الإرجاع | 1.1.4 | 2025-09-14T20:31:38.479Z |
| @tnf-dev/api | 1.0.8 | 2025-09-14T20:31:39.547Z |
| @tnf-dev/js | 1.0.8 | 2025-09-14T20:31:41.251Z |
| @tnf-dev/mui | 1.0.8 | 2025-09-14T20:31:41.259Z |
| @tnf-dev/core | 1.0.8 | 2025-09-14T20:31:42.728Z |
| @teselagen/react-table | 6.10.20 | 2025-09-14T20:37:08.597Z |
| @hestjs/demo | 0.1.2 | 2025-09-14T20:45:52.348Z |
| @nexe/eslint-config | 0.1.1 | 2025-09-14T20:45:53.625Z |
| @hestjs/eslint-config | 0.1.2 | 2025-09-14T20:45:55.044Z |
| @nexe/config-manager | 0.1.1 | 2025-09-14T20:45:55.066Z |
| @nexe/logger | 0.1.3 | 2025-09-14T20:45:55.170Z |
| @hestjs/logger | 0.1.6 | 2025-09-14T20:45:55.197Z |
| @hestjs/التحقق | 0.1.6 | 2025-09-14T20:45:55.595Z |
| @hestjs/core | 0.2.1 | 2025-09-14T20:45:55.888Z |
➡️ عرض القائمة الكاملة للحزم المخترقة
| اسم الحزمة | التجريبية | تاريخ النشر |
|---|---|---|
| محرك قواعد json مبسط | 0.2.1 | 2025-09-14T17:58:51.203Z |
| طيار جوي | 0.8.8 | 2025-09-14T18:35:07.600Z |
| الرسم البياني للمعرفة mcp | 1.2.1 | 2025-09-14T18:35:09.494Z |
| منديل | 0.3.1 | 2025-09-14T18:35:09.521Z |
| بوابة القفز | 0.0.2 | 2025-09-14T18:35:09.651Z |
| tvi-cli | 0.1.5 | 2025-09-14T18:35:10.996Z |
| @thangved/نافذة الإرجاع | 1.1.4 | 2025-09-14T20:31:38.479Z |
| @tnf-dev/api | 1.0.8 | 2025-09-14T20:31:39.547Z |
| @tnf-dev/js | 1.0.8 | 2025-09-14T20:31:41.251Z |
| @tnf-dev/mui | 1.0.8 | 2025-09-14T20:31:41.259Z |
| @tnf-dev/core | 1.0.8 | 2025-09-14T20:31:42.728Z |
| @teselagen/react-table | 6.10.20 | 2025-09-14T20:37:08.597Z |
| @hestjs/demo | 0.1.2 | 2025-09-14T20:45:52.348Z |
| @nexe/eslint-config | 0.1.1 | 2025-09-14T20:45:53.625Z |
| @hestjs/eslint-config | 0.1.2 | 2025-09-14T20:45:55.044Z |
| @nexe/config-manager | 0.1.1 | 2025-09-14T20:45:55.066Z |
| @nexe/logger | 0.1.3 | 2025-09-14T20:45:55.170Z |
| @hestjs/logger | 0.1.6 | 2025-09-14T20:45:55.197Z |
| @hestjs/التحقق | 0.1.6 | 2025-09-14T20:45:55.595Z |
| @hestjs/core | 0.2.1 | 2025-09-14T20:45:55.888Z |
| @hestjs/cqrs | 0.1.6 | 2025-09-14T20:45:55.966Z |
| @hestjs/scalar | 0.1.7 | 2025-09-14T20:45:56.386Z |
| تحميل ملف ng2 | 7.0.3 | 2025-09-15T02:44:29.555Z |
| معالج إشعارات المكثف | 0.0.2 | 2025-09-15T04:54:48.431Z |
| مكثف-قابس-فوناج | 1.0.2 | 2025-09-15T04:54:48.501Z |
| ملحق مكثف-صحي | 0.0.2 | 2025-09-15T04:54:48.704Z |
| أذونات مكثف أندرويد | 0.0.4 | 2025-09-15T04:54:48.753Z |
| مجموعة مكالمات VoIP | 1.0.2 | 2025-09-15T04:54:49.223Z |
| مكثف-مكون-ihealth | 1.1.8 | 2025-09-15T04:55:08.113Z |
| @art-ws/common | 2.0.22 | 2025-09-15T05:21:15.411Z |
| @art-ws/config-eslint | 2.0.4 | 2025-09-15T05:21:17.199Z |
| ngx-ws | 1.1.5 | 2025-09-15T05:21:17.514Z |
| @art-ws/slf | 2.0.15 | 2025-09-15T05:21:17.524Z |
| @art-ws/http-server | 2.0.21 | 2025-09-15T05:21:17.745Z |
| pm2-gelf-json | 1.0.4 | 2025-09-15T05:21:18.413Z |
| @art-ws/di | 2.0.28 | 2025-09-15T05:21:18.488Z |
| @art-ws/di-node | 2.0.13 | 2025-09-15T05:21:18.849Z |
| @art-ws/config-ts | 2.0.7 | 2025-09-15T05:21:19.408Z |
| @art-ws/db-context | 2.0.21 | 2025-09-15T05:21:19.814Z |
| @art-ws/openapi | 0.1.9 | 2025-09-15T05:21:19.969Z |
| @art-ws/تطبيق الويب | 1.0.3 | 2025-09-15T05:21:20.383Z |
| @art-ws/ssl-info | 1.0.9 | 2025-09-15T05:21:20.927Z |





