mamm / src /lib /manager.js
nomid2's picture
Upload manager.js
690c032 verified
/**
* Mammouth账号管理器
* 提供Cookie轮换功能
*/
class AccountManager {
constructor(cookies) {
this.cookies = this.initCookies(cookies)
this.unavailableCookies = new Set()
this.currentIndex = 0
this.unlimitedIndex = 0
}
markAsUnavailable(cookie) {
this.unavailableCookies.add(cookie)
}
getNextAvailableCookie() {
if (this.cookies.length === 0) {
return null
}
// 如果所有Cookie都不可用,则返回第一个
if (this.unavailableCookies.size >= this.cookies.length) {
return this.cookies[0]
}
// 尝试查找可用账号
for (let i = 0; i < this.cookies.length; i++) {
// 轮换索引
this.currentIndex = (this.currentIndex + 1) % this.cookies.length
const cookie = this.cookies[this.currentIndex]
// 如果这个Cookie可用,就返回它
if (!this.unavailableCookies.has(cookie)) {
return cookie
}
}
// 如果循环结束还没找到,返回第一个Cookie
return this.cookies[0]
}
getAnyCookie() {
if (this.cookies.length === 0) {
return null
}
this.unlimitedIndex = (this.unlimitedIndex + 1) % this.cookies.length
return this.cookies[this.unlimitedIndex]
}
initCookies(cookies) {
return cookies.split(',').map(cookie => cookie.trim()).filter(cookie => cookie)
}
}
const COOKIES = process.env.COOKIES || ""
const accountManager = new AccountManager(COOKIES)
module.exports = accountManager