real-debrid-downloader/docs/superpowers/plans/2026-03-23-mega-debrid-multi-account.md
Sucukdeluxe 6df0834b67 Add Mega-Debrid multi-account support with automatic fallback
Multiple Mega-Debrid accounts can now be configured as login:password
pairs (one per line). When an account hits Fair-Use limits or errors,
the next account is tried automatically.

- New parser module mega-debrid-accounts.ts (parse, ID generation,
  masking, serialization)
- Per-account daily limits, usage tracking, enable/disable
- Account rotation with per-mode cooldowns (API failures don't
  block Web attempts)
- Backward compatible: existing single megaLogin/megaPassword
  is auto-migrated to the new format
- UI: textarea for credentials, account list with masked logins

Follows the existing Debrid-Link multi-key pattern.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-23 20:12:51 +01:00

4.0 KiB

Mega-Debrid Multi-Account Support

For agentic workers: Use superpowers:subagent-driven-development to implement this plan.

Goal: Multiple Mega-Debrid accounts with automatic fallback when an account hits Fair-Use limits or errors.

Architecture: Follow the existing Debrid-Link multi-key pattern. Store credentials as newline-separated login:password pairs. Account rotation uses linear iteration with cooldown/disable/daily-limit checks.

Tech Stack: TypeScript, Electron, React


Task 1: Create mega-debrid-accounts.ts parser module

Files:

  • Create: src/shared/mega-debrid-accounts.ts

  • Create MegaDebridAccountEntry interface (id, login, password, index, label, maskedLogin)

  • Create parseMegaDebridAccounts(raw: string): MegaDebridAccountEntry[] - split by newlines, parse login:password pairs, deduplicate by login, generate stable IDs via FNV-1a hash (mda_ prefix)

  • Create getMegaDebridAccountId(login: string): string

  • Create maskMegaDebridLogin(login: string): string

  • Create getMegaDebridAccountLabel(index: number): string - "Account 1", "Account 2"

  • Create serializeMegaDebridAccounts(accounts: {login: string, password: string}[]): string - back to newline-separated format

  • Backward compat: if raw string has no : separator, treat as legacy single-login (use megaPassword from settings)

Task 2: Extend AppSettings with multi-account fields

Files:

  • Modify: src/shared/types.ts

  • Replace megaLogin: stringmegaCredentials: string (newline-separated login:password pairs)

  • Keep megaPassword: string for backward compat (migration reads it once)

  • Add megaDebridDisabledAccountIds: string[]

  • Add megaDebridAccountDailyLimitBytes: Record<string, number>

  • Add megaDebridAccountDailyUsageBytes: Record<string, number>

  • Add megaDebridAccountTotalUsageBytes: Record<string, number>

Task 3: Add per-account daily limit functions

Files:

  • Modify: src/shared/provider-daily-limits.ts

  • Add getMegaDebridAccountDailyLimitBytes(settings, accountId)

  • Add getMegaDebridAccountDailyUsageBytes(settings, accountId, epochMs)

  • Add isMegaDebridAccountDailyLimitReached(settings, accountId, epochMs)

  • Add addMegaDebridAccountDailyUsageBytes(settings, accountId, bytes, epochMs)

  • Add addMegaDebridAccountTotalUsageBytes(settings, accountId, bytes)

  • Add isMegaDebridAccountDisabled(settings, accountId)

Task 4: Migrate storage from single to multi-account

Files:

  • Modify: src/main/storage.ts

  • In normalizeSettings: migrate old megaLogin+megaPasswordmegaCredentials format (login:password)

  • Normalize new fields with defaults

Task 5: Implement account rotation in debrid.ts

Files:

  • Modify: src/main/debrid.ts

  • Add in-memory cooldown cache for Mega accounts (like debridLinkKeyCooldowns)

  • Update hasMegaDebridCredentials() to check parseMegaDebridAccounts().length > 0

  • Update Mega-Debrid API unrestrict to iterate accounts (skip disabled/limited/cooldown)

  • Update Mega-Debrid Web unrestrict to iterate accounts

  • Return sourceAccountId and sourceAccountLabel on success

  • On failure: classify error, apply cooldown, try next account

Task 6: Update download-manager usage tracking

Files:

  • Modify: src/main/download-manager.ts

  • Track per-account bytes for Mega-Debrid (like Debrid-Link key tracking)

  • Update isProviderDailyLimited to check if ANY Mega account is available

Task 7: Update UI for multi-account management

Files:

  • Modify: src/renderer/App.tsx

  • Update Mega-Debrid account dialog: textarea for credentials (login:password per line)

  • Display account list with masked logins, enable/disable toggle, per-account daily limits

  • Update account summary display to show individual accounts

Task 8: Tests

  • Unit tests for parseMegaDebridAccounts (parse, deduplicate, legacy compat)
  • Unit tests for per-account daily limits
  • Run full test suite: npx vitest run