
لوحة معلومات OSINT في الوقت الفعلي: 7 مصادر بيانات مباشرة (طائرات، سفن AIS، زلازل، حرائق، طقس، أحداث GDELT، أخبار) على كرة أرضية تفاعلية. محرك ترابط، تنبيهات مُقيَّمة، وضع مراقبة. تقديم باستخدام Bun + React 19 + Canvas 2D Web Worker. PWA مع دعم وضع عدم الاتصال. https://sigint-5154d935429b.herokuapp.com/
لوحة معلومات OSINT في الزمن الحقيقي مع تتبّع مباشر للطائرات والسفن والزلازل والحرائق والطقس والأحداث على كرة أرضية تفاعلية. مبنية باستخدام Bun وReact 19 ومحرك عرض مخصص بتقنية Canvas 2D + Web Worker. قابلة للتثبيت كتطبيق ويب تقدمي (PWA).

git clone https://github.com/iitoneloc/sigint.git
cd sigint
bun install
أنشئ ملف .env في جذر المشروع يتضمن على الأقل:
SIGINT_SERVER_SECRET=<output of openssl rand -hex 32>
يمكنك اختياريًا إضافة مفاتيح لبيانات السفن والحرائق:
AISSTREAM_API_KEY=<your aisstream.io key>
FIRMS_MAP_KEY=<your NASA FIRMS key>
انظر النشر لخيارات التطوير والإنتاج وHeroku.
bun test # run all tests
bun test --watch # watch mode
bun run docker:test # run in Docker
bun run docker:dev:up # https://localhost (self-signed cert)
bun run docker:dev:down # stop
يختصر متغيرا بيئة مسار جلب البيانات المباشرة في وضع التطوير بحيث يمكنك العمل على حالة مجمّدة معروفة. وكلا المتغيرين مقيدان بشرط NODE_ENV !== "production" ويُتجاهلان في بنيات الإنتاج.
تطابق التسميات النمط /^[a-z0-9-]+$/ (OWASP A01 — قائمة مسموح بها صارمة قبل أي بحث في الملفات) وتُحل إلى tests/fixtures/<source>/<label>.json. التسميات غير الصالحة تُحدث خطأ عند الإقلاع؛ والملفات المفقودة تُحدث خطأ مع المسار المُحل. للاستخدام:
CYCLONES_FIXTURE=multi-storm bun run dev
AIRCRAFT_FIXTURE=conus-snapshot bun run dev
أو عبر Docker Compose (يمرر docker-compose.dev.yml كليهما):
CYCLONES_FIXTURE=single-cat5 bun run docker:dev:up
bun run docker:prod:up # http://localhost:5500
bun run docker:prod:down # stop
DOMAIN=sigint.example.com bun run docker:prod:tls:up
bun run docker:prod:tls:down # stop
git push heroku main
bun run docker:clean:all # remove containers, volumes, images
SIGINT قابل للتثبيت كتطبيق ويب تقدمي (PWA). بعد زيارة التطبيق المنشور:
يحفظ عامل الخدمة (service worker) هيكل التطبيق في ذاكرة التخزين المؤقت للإقلاع دون اتصال. تُحمَّل البيانات المباشرة من IndexedDB عند عدم الاتصال. يظهر شريط مؤشر عدم الاتصال عند فقدان الاتصال، مع زر «إعادة المحاولة» وميزة السحب للتحديث على الأجهزة اللمسية. وعند توفر تحديث، يظهر شريط يطلب من المستخدم إعادة التحميل — دون تبديل للكود بهدوء أثناء الجلسة.
توثيق تقني كامل في docs/ يغطي البنية المعمارية، وتدفق البيانات، ونظام الميزات، ونظام الألواح، والعرض، والتخزين المؤقت، والبحث، والقيود.
مرخّص بموجب ترخيصين:
| Variable | Required | Description |
|---|
SIGINT_SERVER_SECRET | Yes | Auth token signing key. openssl rand -hex 32 |
AISSTREAM_API_KEY | No | aisstream.io key for live ship data |
FIRMS_MAP_KEY | No | NASA FIRMS key for fire data |
DOMAIN | No | Domain for Let's Encrypt TLS |
PORT | No | Server port (default: 5500) |
| الطبقة | المصدر | فترة التحديث |
|---|
| الطائرات | adsb.fi (مسح شرائح من جانب الخادم، 37 شريحة × 250 ميلًا بحريًا) | 240s |
| السفن | aisstream.io (WebSocket على الخادم) | 300s |
| الزلازل | USGS (من جانب العميل) | 420s |
| الحرائق | NASA FIRMS (من جانب الخادم) | 600s |
| الطقس | NOAA (من جانب العميل) | 300s |
| الأحداث | GDELT 2.0 (من جانب الخادم) | 15m |
| الأخبار | 6 خلاصات RSS (من جانب الخادم) | 10m |
| متغير البيئة | المصدر الذي يتجاوزه | التسميات الصالحة |
|---|
CYCLONES_FIXTURE | /api/cyclones/latest (يجلب الخادم من NHC) | single-cat3, single-cat5, multi-storm, subtropical-example, tropical-depression, empty-out-of-season |
AIRCRAFT_FIXTURE | /api/aircraft/states (يجلب الخادم مسح شرائح adsb.fi) | (لا شيء مُرفق — التقط عبر bun run scripts/capture-fixture.ts aircraft <label>) |