Fix SMS batch apply dry-run env and add rollout tracker.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-08-08 15:34:45 +03:30
co-authored by Cursor
parent 448dc444c9
commit 039a2a606b
2 changed files with 40 additions and 2 deletions
+34
View File
@@ -0,0 +1,34 @@
# Khanegi SMS sync — rollout tracker
Fill this after running inventory on SuperAdmin:
```bash
cd /var/www/superadmin/api
git pull
bash deploy/run-khanegi-sms-inventory.sh
# or: npm run prisma:inventory-khanegi-sms
```
Rule: one row = one sold version = one MySQL = one `.env` = one `SUPERADMIN_SMS_DOMAIN`.
| domain | serverHost | syncStatus | imported | remote_enabled | probe_ok | notes |
|--------|------------|------------|----------|----------------|----------|-------|
| | | | | | | |
## Pilot
- [ ] Choose low-risk domain (`pilot: true` in `prisma/khanegi-sms-targets.json`)
- [ ] Note local balance / price / block from Khanegi panel
- [ ] Dry-run import
- [ ] Apply import
- [ ] Match numbers in SuperAdmin UI
- [ ] Enable `SUPERADMIN_SMS_*` only on that version `.env`
- [ ] `php artisan sms:superadmin-probe`
- [ ] Parallel smoke (charge / price / send)
## Rollout
- [ ] Remaining targets dry-run
- [ ] Remaining targets apply
- [ ] Enable remote per install
- [ ] Skip `sms_panel=me` / missing wallet
+6 -2
View File
@@ -101,17 +101,21 @@ function main() {
continue; continue;
} }
const childEnv = { const childEnv: NodeJS.ProcessEnv = {
...process.env, ...process.env,
SMS_IMPORT_DOMAIN: target.domain, SMS_IMPORT_DOMAIN: target.domain,
SMS_IMPORT_PRODUCT: product, SMS_IMPORT_PRODUCT: product,
SMS_IMPORT_DRY_RUN: dryRun ? '1' : env('SMS_IMPORT_DRY_RUN'),
SMS_IMPORT_DB_HOST: String(db.host || '127.0.0.1'), SMS_IMPORT_DB_HOST: String(db.host || '127.0.0.1'),
SMS_IMPORT_DB_PORT: String(db.port || 3306), SMS_IMPORT_DB_PORT: String(db.port || 3306),
SMS_IMPORT_DB_USER: String(db.user || 'root'), SMS_IMPORT_DB_USER: String(db.user || 'root'),
SMS_IMPORT_DB_PASSWORD: String(db.password ?? ''), SMS_IMPORT_DB_PASSWORD: String(db.password ?? ''),
SMS_IMPORT_DB_DATABASE: String(db.database), SMS_IMPORT_DB_DATABASE: String(db.database),
}; };
if (dryRun) {
childEnv.SMS_IMPORT_DRY_RUN = '1';
} else {
delete childEnv.SMS_IMPORT_DRY_RUN;
}
console.log(`\n=== ${dryRun ? 'DRY ' : ''}IMPORT ${target.domain} (${product}) ===`); console.log(`\n=== ${dryRun ? 'DRY ' : ''}IMPORT ${target.domain} (${product}) ===`);
const result = spawnSync( const result = spawnSync(