# ==== Tripz backend env (شغّل: cp .env.example .env) ==== # ملاحظة: السيرفر مشترك — كل شيء معزول ببادئة tripz و Redis DB غير الافتراضي (راجع docs/14) NODE_ENV=development API_PORT=4010 # يُنشر على 127.0.0.1 فقط — Nginx (CloudPanel) ينهي الـTLS. راجع docs/20 DB_EXPOSE_PORT=55432 # 127.0.0.1 فقط. للوصول من الماك: نفق SSH (docs/20 §4) # ---- PostgreSQL (قاعدة مستقلة + بادئة جداول) ---- DB_HOST=postgres DB_PORT=5432 DB_NAME=tripz DB_USER=tripz DB_PASSWORD=change_me_strong DB_TABLE_PREFIX=tripz_ DB_SYNC=false # لا synchronize في الإنتاج — هجرات فقط # ---- Redis (DB رقم 3 غير الافتراضي 0 + بادئة مفاتيح) ---- REDIS_HOST=redis REDIS_PORT=6379 REDIS_DB=3 REDIS_KEY_PREFIX=tripz: # ---- BullMQ ---- QUEUE_PREFIX=tripz_ # ---- Auth ---- JWT_SECRET=change_me_jwt_secret # ---- تشفير الحقول الحساسة at-rest (AES-256-GCM) ---- # 32 بايت بصيغة hex (64 محرف). ولّده: openssl rand -hex 32 # إلزامي للإنتاج — بدونه يُستخدم مفتاح تطوير غير آمن ENCRYPTION_KEY= JWT_EXPIRES=15m JWT_REFRESH_EXPIRES=30d # ---- Maps (انطلق / map-saas) ---- MAPS_TILES_URL=http://martin:3000 MAPS_PROVIDER=antlaq MAPS_BASE_URL=https://map-saas.intaleqapp.com # مفاتيح انطلق لكل دولة (ضع القيم الحقيقية في .env على السيرفر — لا تُرفع لـ git) MAPS_API_KEY_JO= MAPS_API_KEY_SY= MAPS_PLACES_API_KEY= # ---- OTP: توجيه متعدد المزوّدين حسب دولة المستأجر (docs/17 — D5) ---- # اتركه dev لتفعيل الرمز الثابت 1234 بلا إرسال؛ اجعله false للإرسال الحقيقي OTP_DEV_MODE=true OTP_SMS_TEMPLATE=Your Tripz code is {code} # سوريا/الأردن — Nabeh (واتساب) NABEH_BASE_URL=https://nabeh.intaleqapp.com NABEH_EMAIL= NABEH_PASSWORD= NABEH_OTP_TYPE=text # مصر — Kazumi (SMS)، مع failover تلقائي إلى Nabeh لو فشل SMS_USERNAME= SMS_PASSWORD_EGYPT= SMS_SENDER= # ---- FCM push (ملف الـ JSON الخاص بـ Service Account) ---- GOOGLE_APPLICATION_CREDENTIALS=./firebase-service-account.json # ---- Gemini (رؤية: قراءة وثائق + مطابقة وجه + تحليل رسائل التحويل P2) ---- GEMINI_API_KEY= GEMINI_MODEL=gemini-2.0-flash # ---- PayMob (مصر) — احتياط تطوير فقط (docs/24 — P1) ---- # الإنتاج: كل مستأجر مفاتيحه الخاصة في tenant.settings.payments.paymob # (PATCH /payments/settings من لوحة أدمن المستأجر) — حساب تاجر مستقل لكل # مستأجر، فمالُه يصل لحسابه هو. هذه المتغيّرات تُستعمل فقط إن كان المستأجر # بلا إعداد خاص، لحساب تجريبي مشترك وقت التطوير. PAYMOB_API_KEY= PAYMOB_PUBLIC_KEY= PAYMOB_HMAC_SECRET= PAYMOB_INTEGRATION_ID_RIDER_CARD= PAYMOB_INTEGRATION_ID_RIDER_WALLET= PAYMOB_INTEGRATION_ID_DRIVER_CARD= PAYMOB_INTEGRATION_ID_DRIVER_WALLET= PAYMOB_IFRAME_ID= # ---- CliQ (الأردن) — بوابة الدفع الإلكتروني ---- # الإنتاج: كل مستأجر مفاتيحه الخاصة في tenant.settings.payments.cliq CLIQ_BASE_URL=https://api.cliq.jo CLIQ_MERCHANT_ID= CLIQ_API_KEY= CLIQ_SECRET_KEY= CLIQ_TERMINAL_ID= # ---- SyriaTel (سوريا) — بوابة الدفع الإلكتروني ---- SYRIATEL_BASE_URL=https://e-payment.syriatel.com/api SYRIATEL_MERCHANT_CODE= SYRIATEL_API_KEY= SYRIATEL_SECRET_KEY= SYRIATEL_SERVICE_ID= # ---- خدمة المواصلات (microservice مستقل) ---- TRANSIT_SERVICE_URL=http://transit:4020 # ---- MTN (Mobile Money) — بوابة الدفع الإلكتروني ---- MTN_BASE_URL=https://proxy.momoapi.mtn.com MTN_API_KEY= MTN_API_USER= MTN_SUBSCRIPTION_KEY= MTN_ENVIRONMENT=sandbox # ---- L4: التسعير الديناميكي (Dynamic Pricing) ---- # ملاحظة: فاصل كرون SURGE_RECALCULATE ثابت بالكود (180 ثانية) في cron-registry.ts # TRIP_SURGE_COOLDOWN_MS و TRIP_SURGE_SENSITIVITY يُقرأان فعلاً من SurgeService TRIP_SURGE_COOLDOWN_MS=300000 # 5 دقائق بين تغييرين متتاليين TRIP_SURGE_SENSITIVITY=0.3 # 0.1 خفيفة، 0.3 متوسطة، 0.5 حادة # ---- سرّ المنصة (لتعيين أول أدمن) — ولّده: openssl rand -hex 24 ---- PLATFORM_SECRET=