Decrypts a random sample of migrated rows and prints masked plaintext
so the migration can be eyeballed for correctness beyond the automated
--verify pass — catches cases where decryption "succeeds" but produces
garbage rather than the real value.
The bulk `mysql < file.sql` run aborted on the first "duplicate column"
error because some columns from an earlier partial run already existed.
apply_sql_tolerant.sh now runs each ALTER separately and only skips
MySQL errors 1060/1061/1091/1050 (duplicate column/key, missing to drop,
table exists) — any other error still stops the migration immediately.
هدف المالك: أن يعمل المسار كاملاً (تسجيل → رحلة → إنهاء) على api الجديد.
فحصت 463 مساراً في links.dart بمطابقتها على ملفات PHP الفعلية عبر خريطة
docker (root /var/www: /backend → backend/ · /v2/main → payment_server/v2/main/
· /loction_server → loction_server/). كان 71 مساراً بلا ملف؛ صار 44، وكلها
كودٌ ميت أو فجوات موثّقة أدناه لا تخمين.
أُصلح بيقين (27 مساراً):
- المقطع `ride/` كان ناقصاً في 20 مساراً — أغلبها في صميم الدورة:
rides/get · rides/update · rides/getRideStatus{,Begin,FromStartApp} ·
rides/updateRideAndCheckIfApplied · rides/getRideOrderID ·
rides/getTripCountByCaptain · rides/delete · cancelRide/{add,get} ·
mishwari · places_syria · driver_scam · tips · ecash.
- `seferWallet` → `siroWallet`: payment_server يسمّي المجلد siroWallet
(تاريخ تسمية sefer→siro) — 3 مسارات محفظة.
- `addFingerPrint` كان على paymentServer وليس فيه firebase أصلاً؛ الملف في
backend/ride/firebase/add.php.
- 🔴 `paymobPayoutDriverWallet` كان فيه **علامة اقتباس داخل الرابط**:
`paymob_payout.php'` → 404 مضمون على صرف أرباح السائق. الملف موجود
فعلاً في payment_server/v2/main/ride/payMob/paymob_driver/.
- `deletecaptainAccounr.php` (لا وجود له) → `auth/driver/deleteAccount.php`.
فجوات حقيقية بقيت — لها مستدعٍ في الكود ولا ملف في الباك إند، ولن أخمّن:
- `uploadEgypt` (4 استدعاءات) و`uploadEgypt1` و`uploadImage`: رافع صور عام
يمرّر نوعاً ('face_detect' · 'car_front' · 'car_back'). المرشحون:
auth/driver/uploadImage.php · auth/driver/uploadDriverDocs.php ·
uploadImagePortrate.php — والاختيار يحدد أي جدول/مجلد يستقبل الصورة.
- `auth/Tester/{get,update}TesterApp.php`: لا مجلد Tester إطلاقاً.
- `auth/sms/getSender.php` و`updatePhoneInvalidSMS`: لا مجلد sms (الموجود
webhook_sms/webhook.php فقط).
الباقي (نحو 35) بلا أي مستدعٍ = كود ميت من عهود أقدم، يُنظّف لاحقاً.
⚠️ الاحتمال الذي يجب حسمه: هذه الملفات قد تكون موجودة على سيرفر
jordan-siro الحيّ وغير مُودَعة في git. يُتحقق بـ`ls` على السيرفر قبل
كتابة أي بديل.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
⚠️ الطيّ ضرورة أمان لا ترتيب: كل عائلة سيرفرات في links.dart كانت switch
بأربعة فروع (Syria · Egypt · Jordan · default)، وفروع سوريا ومصر تشير إلى
**سيرفرات سيرو الإنتاجية** (api-syria.siromove.com وغيرها). إبقاؤها في
انطلق يعني أن أي جهاز مخزَّن فيه countryCode='Syria' يخاطب إنتاج سيرو
مباشرة. انطلق نشرٌ واحد على مضيف واحد (docs/34: سيرفر لكل مستأجر)،
والدولة تُحل على السيرفر من GLOBAL_COUNTRY.
طُويت 35 كتلة switch إلى قيمة واحدة (11 rider · 11 driver · 6 admin ·
7 service)، والخريطة مأخوذة من تعليق docker/nginx/default.conf نفسه
(«نقطة واحدة لكل الخدمات — التطبيق يغيّر الدومين فقط»):
server / rideServer → https://api.intaleqapp.com/backend
paymentServer → https://api.intaleqapp.com/v2/main
location → …/backend/ride/location
locationServerSide(د) → …/loction_server/siro/ride/location
سوكيت الركاب → https://api.intaleqapp.com:3030
سوكيت السائقين → https://api.intaleqapp.com:2020
وأيضاً:
- appDomain و invite: siromove.com → intaleqapp.com، والمجلد
siromove.com/ → intaleqapp.com/ (فيه invite.php الذي يقصده التطبيق).
- روابط التنزيل siro.app → intaleqapp.com · بريد السائق المولَّد
@siromove.com → @intaleqapp.com · صفحة التتبع · محاكاة تسجيل سوريا.
- حُذف getter `syria` الميت من links.dart الثلاثة (لا مستدعي له، وكان
يشير إلى إنتاج سيرو).
لم يُمسّ عمداً:
- `ssl_pinning.dart`: `badCertificateCallback` لا يُستدعى إلا عند فشل
التحقق العادي، فشهادة api.intaleqapp.com الصالحة تمرّ بلا مساس. ولا
أختلق بصمة شهادة: تُضاف بصمة انطلق بعد إصدار الشهادة (docs/30 G7).
- `routesjo.intaleq.xyz` و `map-saas.intaleqapp.com`: خدمات خارجية قائمة
بذاتها للمالك (قرار الخرائط المباشرة) لا تُنقل إلى api.
- `com.siromove.admin` في userAgentPackageName (5 مواضع): من عائلة هويات
المتاجر — كوميت الهويات، وهو يحتاج قرار المالك.
⚠️ يحتاج نشراً على الطرف الآخر: invite.php و track/index.php و /driver
على intaleqapp.com.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
المجلدات وأسماء حزم dart واستيراداتها:
siro_rider → intaleq_rider siro_driver → intaleq_driver
siro_admin → intaleq_admin siro_service → intaleq_service
شمل ذلك `name:` في كل pubspec وكل `package:siro_*` في الاستيرادات
(115 ملفاً في rider وحده)، وإشارات أسماء المجلدات في docs/ وتعليق في
backend/Admin/notifications/broadcast.php. لم تبقَ إشارة واحدة (تحقّقت).
+ ضُمّت حزم get و get_storage داخل intaleq_driver/packages/ وحُوّلت
مساراتها الثلاثة من `../../Intaleq/packages/*` إلى `./packages/*`. كانت
تُحل عرضاً إلى مجلد App/Intaleq القديم المجاور — تبعية خارج المستودع
تنكسر بأول نقل. لم يبقَ في أي تطبيق تبعية مسار خارج الشجرة.
⚠️ لم تُمسّ بعد: هويات المتاجر (applicationId · PRODUCT_BUNDLE_IDENTIFIER ·
shorebird app_id) ولا الألوان ولا النصوص المرئية ولا النطاقات — كل منها
كوميت منفصل، والهويات تحتاج قرار المالك.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
نسخة كاملة من مستودع سيرو عند ecfe7568 لتكون أساس تطبيق «انطلق».
نُسخ المتعقَّب في git فقط (12,509 ملفاً / 302 م.ب) بـ git archive، لا
`cp -r` — فاستُثنيت تلقائياً مخلفات البناء (build · node_modules ·
.dart_tool · .gradle · Pods ≈ 10.7 غ.ب) وكل ما يستثنيه .gitignore.
هذا الكوميت **بلا أي تعديل عمداً** حتى يكون كل ما يليه فرقاً مقروءاً
مقابل سيرو الأصلي. سيرو نفسه لم يُمسّ.
⚠️ لا يبني بعد: `.env` و`lib/env/env.g.dart` غير متعقَّبين في سيرو (وهذا
صحيح — أسرار لكل مستأجر). كل تطبيق فلاتر هنا يحتاج .env خاصاً بانطلق ثم
توليد env.g.dart عبر build_runner. لا تُنسخ أسرار سيرو.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>