# scripts/ One-off admin and migration scripts. None of these run in CI. --- ## helcim-plan-consolidation.js Consolidates Helcim payment plans from the legacy per-tier model (multiple plans at $15/$30/$50) to two unified plans (Monthly Membership at $15, Annual Membership at $150), and backfills Mongo members. ### Required env ``` HELCIM_API_TOKEN= MONGODB_URI= ``` Copy `.env.example` → `.env` if you haven't already. ### Usage ```bash # Dry-run (default) — no mutations, writes backup file node scripts/helcim-plan-consolidation.js # Execute all steps: delete subs, delete legacy plans, create new plans, update Mongo node scripts/helcim-plan-consolidation.js --confirm # Mongo cleanup only — skips all Helcim steps (use if Helcim steps already ran) node scripts/helcim-plan-consolidation.js --mongo-only ``` ### What it does 1. **Backup** — always written to `.migration-backup-.json`, even in dry-run. Contains all Helcim subscriptions, payment plans, and Mongo members with `helcimSubscriptionId`. 2. **Delete subscriptions** — deletes all Helcim subscriptions (`--confirm` only). 3. **Delete legacy plans** — deletes plan IDs `20162`, `21596`, `21597`, `21598`, plus any plan whose name matches the legacy pattern (e.g. "Ghost Guild - Member ($15)"). 4. **Create Monthly Membership** — $15/month. Idempotent: skipped if a plan named "Monthly Membership" already exists. 5. **Create Annual Membership** — $150/year. Same idempotency. Uses `billingPeriod: "yearly"` (Helcim v2 convention); if Helcim returns 4xx, the script aborts and prints the full error so you can correct the field name. 6. **Mongo cleanup** — `updateMany` with `runValidators: false` on all members with `helcimSubscriptionId`: sets `contributionTier: '0'` and `billingCadence: 'monthly'`, unsets `helcimSubscriptionId`. Does **not** change `status`. At the end, prints new plan IDs formatted for copy-paste into `.env`. ### Recovery If something goes wrong mid-run, the backup JSON contains the pre-migration state. You can use the backup to: - Identify which subscriptions existed before deletion. - Identify which plan IDs to recreate manually in Helcim. - Identify which members had `helcimSubscriptionId` before it was unset. Backup files are gitignored (`.migration-backup-*.json`).