feat: 按任务管理比特浏览器临时窗口

This commit is contained in:
2026-09-23 18:15:08 +08:00
parent 04309f60c7
commit ff2879f102
15 changed files with 577 additions and 226 deletions
+27 -16
View File
@@ -491,6 +491,29 @@ async function getBrowserListSimple(options = {}) {
return collectBrowserPages(getApi(), options);
}
/**
* 将账号中保存的 host:port:user:password 代理转为比特浏览器代理配置。
* 空值表示直连。
*/
function parseAccountProxy(proxyValue) {
const value = String(proxyValue || '').trim();
if (!value) return { proxyMethod: 2, proxyType: 'noproxy' };
const parts = value.split(':');
const host = String(parts.shift() || '').trim();
const port = String(parts.shift() || '').trim();
if (!host || !port) return null;
const proxyUserName = String(parts.shift() || '').trim();
const proxyPassword = parts.join(':').trim();
return {
proxyMethod: 2,
proxyType: 'socks5',
host,
port,
proxyUserName,
proxyPassword,
};
}
/**
* 根据账号信息创建比特浏览器窗口
* @param {object} account - 账号信息,包含 email、proxy_ip 等字段
@@ -506,21 +529,9 @@ async function createBrowserFromAccount(account, browserName = '默认模板', e
jsonData.name = account.email || browserName;
// 设置代理
const proxyIp = (account.proxy_ip || '').trim();
if (proxyIp) {
const parts = proxyIp.split(':');
if (parts.length >= 2) {
jsonData.proxyType = 'socks5';
jsonData.proxyMethod = 2;
jsonData.host = parts[0].trim();
jsonData.port = parts[1].trim();
jsonData.proxyUserName = parts[2] ? parts[2].trim() : '';
jsonData.proxyPassword = parts[3] ? parts[3].trim() : '';
}
} else {
jsonData.proxyType = 'noproxy';
jsonData.proxyMethod = 2;
}
const proxyConfig = parseAccountProxy(account.proxy_ip);
if (!proxyConfig) return { browserId: null, error: `代理格式错误: ${account.proxy_ip}` };
Object.assign(jsonData, proxyConfig);
// 检查是否已存在该账号的窗口
const browsers = existingBrowsers !== null ? existingBrowsers : await getBrowserListSimple();
@@ -707,5 +718,5 @@ module.exports = {
createBrowserFromAccount,
deleteBrowsersBatch,
DEFAULT_BROWSER_TEMPLATE,
_private: { Semaphore, openBrowserSemaphore: _openBrowserSem, collectBrowserPages },
_private: { Semaphore, openBrowserSemaphore: _openBrowserSem, collectBrowserPages, parseAccountProxy },
};