Update index.js
Browse files
index.js
CHANGED
|
@@ -101,24 +101,24 @@ class TokenManager {
|
|
| 101 |
CONFIG.DEFAULT_HEADERS.Cookie = `idToken=${Tokens[currentIndex].idToken}; pr_refresh_token=${Tokens[currentIndex].pr_refresh_token};aws-waf-token=${Tokens[currentIndex].aws_waf_token};cwr_s=${Tokens[currentIndex].cwr_s};cwr_u=${sessionId}`;
|
| 102 |
CONFIG.DEFAULT_HEADERS.referer = Tokens[currentIndex].refreshUrl;
|
| 103 |
CONFIG.DEFAULT_HEADERS["request-id"] = `request-id-${Utils.uuidv4()}`;
|
|
|
|
| 104 |
}
|
| 105 |
|
| 106 |
async updateTokens(response, isWaf = false) {
|
| 107 |
if (isWaf) {
|
| 108 |
const wafToken = await Utils.extractWaf();
|
| 109 |
if (wafToken) {
|
| 110 |
-
|
| 111 |
-
|
| 112 |
-
|
| 113 |
-
|
|
|
|
|
|
|
| 114 |
await this.updateCacheTokens();
|
| 115 |
-
|
| 116 |
-
// 持久化到Redis
|
| 117 |
await this.updateRedisTokens();
|
| 118 |
-
|
| 119 |
-
console.log("
|
| 120 |
}
|
| 121 |
-
// 无论成功失败都保持当前索引(单账号场景无影响)
|
| 122 |
} else {
|
| 123 |
const newCsrfToken = response.headers.get('anti-csrftoken-a2z');
|
| 124 |
const cookies = response.headers.get('set-cookie');
|
|
@@ -129,11 +129,10 @@ class TokenManager {
|
|
| 129 |
if (idTokenMatch && idTokenMatch[1]) {
|
| 130 |
Tokens[currentIndex].idToken = idTokenMatch[1];
|
| 131 |
}
|
| 132 |
-
this.updateRedisTokens();
|
| 133 |
console.log("更新缓存完毕");
|
| 134 |
}
|
| 135 |
}
|
| 136 |
-
// 保持原有轮换逻辑(单账号场景无副作用)
|
| 137 |
currentIndex = (currentIndex + 1) % Tokens.length;
|
| 138 |
}
|
| 139 |
}
|
|
@@ -581,55 +580,45 @@ app.post('/hf/v1/chat/completions', async (req, res) => {
|
|
| 581 |
if (authToken !== CONFIG.API.API_KEY) {
|
| 582 |
return res.status(401).json({ error: "Unauthorized" });
|
| 583 |
}
|
|
|
|
| 584 |
await tokenManager.updateCacheTokens();
|
| 585 |
const apiClient = new ApiClient(req.body.model);
|
| 586 |
const requestPayload = await apiClient.transformMessages(req.body);
|
| 587 |
-
|
| 588 |
-
|
| 589 |
-
|
| 590 |
-
|
| 591 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 592 |
method: "POST",
|
| 593 |
-
headers: {
|
| 594 |
-
...CONFIG.DEFAULT_HEADERS
|
| 595 |
-
},
|
| 596 |
body: JSON.stringify(requestPayload)
|
| 597 |
});
|
| 598 |
reqStatus = response.status;
|
| 599 |
-
|
| 600 |
-
|
| 601 |
-
|
| 602 |
-
|
| 603 |
-
|
| 604 |
-
|
| 605 |
-
|
| 606 |
-
|
| 607 |
-
|
| 608 |
-
|
| 609 |
-
}
|
| 610 |
-
return;
|
| 611 |
-
case 202:
|
| 612 |
-
console.log("请求受限,更新WAF");
|
| 613 |
-
await tokenManager.updateTokens(response, true);
|
| 614 |
-
throw new Error(`请求失败! status: ${response.statusText},已刷新验证信息,请重新请求`);
|
| 615 |
-
case 405:
|
| 616 |
-
console.log("人机验证");
|
| 617 |
-
await tokenManager.updateTokens(response, true);//尝试获取waf,然后返回错误提示。
|
| 618 |
-
throw new Error(`请求失败! status: ${response.statusText},人机验证,请重新请求,如果多次失败,请重新更换token`);
|
| 619 |
-
case 400:
|
| 620 |
-
console.log("信息过期,请求失败");
|
| 621 |
-
await tokenManager.updateTokens(response);
|
| 622 |
-
throw new Error(`请求失败! status: ${response.statusText},已刷新验证信息,请重新请求`);
|
| 623 |
-
case 403:
|
| 624 |
-
console.log("请求被阻止");
|
| 625 |
-
await tokenManager.updateTokens(response, true);//尝试获取waf,然后返回错误提示。
|
| 626 |
-
CONFIG.DEFAULT_HEADERS["User-Agent"] = await Utils.getRandomUserAgent();
|
| 627 |
-
throw new Error(`请求失败! status: ${response.statusText},请重新请求,如果多次失败,请重新更换token`);
|
| 628 |
-
default:
|
| 629 |
-
throw new Error(`请求失败! status: ${response.status}`);
|
| 630 |
}
|
| 631 |
-
|
| 632 |
-
|
|
|
|
| 633 |
}
|
| 634 |
} catch (error) {
|
| 635 |
res.status(parseInt(reqStatus)).json({
|
|
|
|
| 101 |
CONFIG.DEFAULT_HEADERS.Cookie = `idToken=${Tokens[currentIndex].idToken}; pr_refresh_token=${Tokens[currentIndex].pr_refresh_token};aws-waf-token=${Tokens[currentIndex].aws_waf_token};cwr_s=${Tokens[currentIndex].cwr_s};cwr_u=${sessionId}`;
|
| 102 |
CONFIG.DEFAULT_HEADERS.referer = Tokens[currentIndex].refreshUrl;
|
| 103 |
CONFIG.DEFAULT_HEADERS["request-id"] = `request-id-${Utils.uuidv4()}`;
|
| 104 |
+
CONFIG.DEFAULT_HEADERS["User-Agent"] = await Utils.getRandomUserAgent();
|
| 105 |
}
|
| 106 |
|
| 107 |
async updateTokens(response, isWaf = false) {
|
| 108 |
if (isWaf) {
|
| 109 |
const wafToken = await Utils.extractWaf();
|
| 110 |
if (wafToken) {
|
| 111 |
+
if (wafToken === Tokens[currentIndex].aws_waf_token) {
|
| 112 |
+
console.log("⚠️ 更新后的aws-waf-token与现有token一致");
|
| 113 |
+
} else {
|
| 114 |
+
Tokens[currentIndex].aws_waf_token = wafToken;
|
| 115 |
+
console.log("✅ 成功获取并更新aws-waf-token | 新token长度:", wafToken.length);
|
| 116 |
+
}
|
| 117 |
await this.updateCacheTokens();
|
|
|
|
|
|
|
| 118 |
await this.updateRedisTokens();
|
| 119 |
+
} else {
|
| 120 |
+
console.log("❌ 提取aws-waf-token失败");
|
| 121 |
}
|
|
|
|
| 122 |
} else {
|
| 123 |
const newCsrfToken = response.headers.get('anti-csrftoken-a2z');
|
| 124 |
const cookies = response.headers.get('set-cookie');
|
|
|
|
| 129 |
if (idTokenMatch && idTokenMatch[1]) {
|
| 130 |
Tokens[currentIndex].idToken = idTokenMatch[1];
|
| 131 |
}
|
| 132 |
+
await this.updateRedisTokens();
|
| 133 |
console.log("更新缓存完毕");
|
| 134 |
}
|
| 135 |
}
|
|
|
|
| 136 |
currentIndex = (currentIndex + 1) % Tokens.length;
|
| 137 |
}
|
| 138 |
}
|
|
|
|
| 580 |
if (authToken !== CONFIG.API.API_KEY) {
|
| 581 |
return res.status(401).json({ error: "Unauthorized" });
|
| 582 |
}
|
| 583 |
+
// 每次请求前确保请求头更新为最新的token信息
|
| 584 |
await tokenManager.updateCacheTokens();
|
| 585 |
const apiClient = new ApiClient(req.body.model);
|
| 586 |
const requestPayload = await apiClient.transformMessages(req.body);
|
| 587 |
+
|
| 588 |
+
console.log("开始请求");
|
| 589 |
+
let response = await fetch(`${CONFIG.API.BASE_URL}`, {
|
| 590 |
+
method: "POST",
|
| 591 |
+
headers: { ...CONFIG.DEFAULT_HEADERS },
|
| 592 |
+
body: JSON.stringify(requestPayload)
|
| 593 |
+
});
|
| 594 |
+
reqStatus = response.status;
|
| 595 |
+
|
| 596 |
+
// 当出现请求受限或人机验证时,先更新token,再重试一次
|
| 597 |
+
if ([202, 405].includes(reqStatus)) {
|
| 598 |
+
console.log("请求受限或人机验证,正在更新token并重试请求");
|
| 599 |
+
await tokenManager.updateTokens(response, true);
|
| 600 |
+
// 延时1秒,等待新token生效
|
| 601 |
+
await new Promise(resolve => setTimeout(resolve, 1000));
|
| 602 |
+
response = await fetch(`${CONFIG.API.BASE_URL}`, {
|
| 603 |
method: "POST",
|
| 604 |
+
headers: { ...CONFIG.DEFAULT_HEADERS },
|
|
|
|
|
|
|
| 605 |
body: JSON.stringify(requestPayload)
|
| 606 |
});
|
| 607 |
reqStatus = response.status;
|
| 608 |
+
}
|
| 609 |
+
|
| 610 |
+
if (reqStatus === 200) {
|
| 611 |
+
console.log("请求成功");
|
| 612 |
+
// 异步更新token(注意此处可不用 await 以保证响应速度)
|
| 613 |
+
tokenManager.updateTokens(response);
|
| 614 |
+
if (req.body.stream) {
|
| 615 |
+
await ResponseHandler.handleStreamResponse(response, req.body.model, res);
|
| 616 |
+
} else {
|
| 617 |
+
await ResponseHandler.handleNormalResponse(response, req.body.model, res);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 618 |
}
|
| 619 |
+
return;
|
| 620 |
+
} else {
|
| 621 |
+
throw new Error(`请求失败! status: ${response.statusText}`);
|
| 622 |
}
|
| 623 |
} catch (error) {
|
| 624 |
res.status(parseInt(reqStatus)).json({
|