(projectRoot)
| 167 | } |
| 168 | |
| 169 | export function loadAccountsFromEnv(projectRoot) { |
| 170 | loadEnvFile(projectRoot) |
| 171 | |
| 172 | const accounts = [] |
| 173 | for (let i = 1; ; i++) { |
| 174 | const idx = String(i) |
| 175 | const email = envStr(`ACCOUNT_${idx}_EMAIL`) |
| 176 | |
| 177 | if (!email) break |
| 178 | |
| 179 | accounts.push({ |
| 180 | email, |
| 181 | password: envStr(`ACCOUNT_${idx}_PASSWORD`) ?? '', |
| 182 | totpSecret: envStr(`ACCOUNT_${idx}_TOTP_SECRET`), |
| 183 | recoveryEmail: envStr(`ACCOUNT_${idx}_RECOVERY_EMAIL`) ?? '', |
| 184 | geoLocale: envStr(`ACCOUNT_${idx}_GEO_LOCALE`) ?? 'auto', |
| 185 | langCode: envStr(`ACCOUNT_${idx}_LANG_CODE`) ?? 'en', |
| 186 | proxy: { |
| 187 | proxyHttp: envBoolWithLegacy(`ACCOUNT_${idx}_PROXY_HTTP`, `ACCOUNT_${idx}_PROXY_AXIOS`, false), |
| 188 | url: envStr(`ACCOUNT_${idx}_PROXY_URL`) ?? '', |
| 189 | port: envInt(`ACCOUNT_${idx}_PROXY_PORT`, 0), |
| 190 | username: envStr(`ACCOUNT_${idx}_PROXY_USERNAME`) ?? '', |
| 191 | password: envStr(`ACCOUNT_${idx}_PROXY_PASSWORD`) ?? '' |
| 192 | }, |
| 193 | saveFingerprint: { |
| 194 | mobile: envBool(`ACCOUNT_${idx}_SAVE_FINGERPRINT_MOBILE`, false), |
| 195 | desktop: envBool(`ACCOUNT_${idx}_SAVE_FINGERPRINT_DESKTOP`, false) |
| 196 | } |
| 197 | }) |
| 198 | } |
| 199 | |
| 200 | return accounts |
| 201 | } |
| 202 | |
| 203 | export function findAccountByEmail(accounts, email) { |
| 204 | if (!email || typeof email !== 'string') return null |
no test coverage detected