Spaces:
Paused
Paused
Update index.js
Browse files
index.js
CHANGED
|
@@ -18,7 +18,7 @@ const CONFIG = {
|
|
| 18 |
RedisToken: process.env.RedisToken
|
| 19 |
},
|
| 20 |
RETRY: {
|
| 21 |
-
MAX_ATTEMPTS:
|
| 22 |
DELAY_BASE: 1000
|
| 23 |
},
|
| 24 |
SERVER: {
|
|
@@ -95,35 +95,37 @@ class TokenManager {
|
|
| 95 |
}
|
| 96 |
|
| 97 |
async updateCacheTokens() {
|
| 98 |
-
CONFIG.DEFAULT_HEADERS["anti-csrftoken-a2z"] = Tokens[currentIndex]
|
| 99 |
-
CONFIG.DEFAULT_HEADERS.Cookie = `idToken=${Tokens[currentIndex]
|
| 100 |
-
CONFIG.DEFAULT_HEADERS.referer = Tokens[currentIndex]
|
| 101 |
}
|
| 102 |
|
| 103 |
async updateTokens(response, isWaf = false) {
|
| 104 |
if (isWaf) {
|
| 105 |
console.log("更新waf");
|
| 106 |
-
|
| 107 |
-
|
|
|
|
| 108 |
return;
|
| 109 |
} else {
|
| 110 |
console.log("提取aws-waf-token失败");
|
| 111 |
currentIndex = (currentIndex + 1) % Tokens.length;
|
| 112 |
}
|
| 113 |
-
}
|
| 114 |
-
|
| 115 |
-
|
| 116 |
-
|
| 117 |
-
|
| 118 |
-
|
| 119 |
-
|
| 120 |
-
|
| 121 |
-
|
|
|
|
|
|
|
|
|
|
| 122 |
}
|
| 123 |
-
|
| 124 |
-
console.log("更新缓存完毕");
|
| 125 |
}
|
| 126 |
-
currentIndex = (currentIndex + 1) % Tokens.length;
|
| 127 |
}
|
| 128 |
}
|
| 129 |
|
|
@@ -143,10 +145,10 @@ class Utils {
|
|
| 143 |
try {
|
| 144 |
const page = await browser.newPage();
|
| 145 |
await page.setExtraHTTPHeaders({
|
| 146 |
-
cookie: `pr_refresh_token=${Tokens[currentIndex]
|
| 147 |
});
|
| 148 |
|
| 149 |
-
await page.goto(Tokens[currentIndex]
|
| 150 |
|
| 151 |
// 直接从页面 cookies 中提取 aws-waf-token
|
| 152 |
const awsWafToken = (await page.cookies()).find(
|
|
@@ -154,7 +156,6 @@ class Utils {
|
|
| 154 |
)?.value;
|
| 155 |
|
| 156 |
if (awsWafToken) {
|
| 157 |
-
Tokens[currentIndex]["aws_waf_token"] = awsWafToken;
|
| 158 |
console.log("成功提取 aws-waf-token");
|
| 159 |
await browser.close();
|
| 160 |
return awsWafToken;
|
|
@@ -264,8 +265,6 @@ async function initializeService() {
|
|
| 264 |
|
| 265 |
await initializeService();
|
| 266 |
|
| 267 |
-
|
| 268 |
-
|
| 269 |
class ApiClient {
|
| 270 |
constructor(modelId) {
|
| 271 |
console.log(modelId);
|
|
@@ -497,8 +496,6 @@ app.post('/hf/v1/chat/completions', async (req, res) => {
|
|
| 497 |
return res.status(401).json({ error: "Unauthorized" });
|
| 498 |
}
|
| 499 |
await tokenManager.updateCacheTokens();
|
| 500 |
-
|
| 501 |
-
|
| 502 |
const apiClient = new ApiClient(req.body.model);
|
| 503 |
const requestPayload = await apiClient.transformMessages(req.body);
|
| 504 |
let retryCount = 0;
|
|
@@ -514,23 +511,30 @@ app.post('/hf/v1/chat/completions', async (req, res) => {
|
|
| 514 |
},
|
| 515 |
body: JSON.stringify(requestPayload)
|
| 516 |
});
|
| 517 |
-
|
| 518 |
-
|
| 519 |
-
|
| 520 |
-
|
| 521 |
-
|
| 522 |
-
|
| 523 |
-
|
| 524 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 525 |
await tokenManager.updateTokens(response, true);
|
| 526 |
-
|
|
|
|
|
|
|
| 527 |
}
|
| 528 |
retryCount++;
|
| 529 |
if (retryCount >= CONFIG.RETRY.MAX_ATTEMPTS) {
|
| 530 |
-
reqStatus = response.status;
|
| 531 |
throw new Error(`上游服务请求失败! status: ${response.status}`);
|
| 532 |
}
|
| 533 |
-
// 等待一段时间后重试
|
| 534 |
await new Promise(resolve => setTimeout(resolve, CONFIG.RETRY.DELAY_BASE * retryCount));
|
| 535 |
|
| 536 |
} catch (error) {
|
|
@@ -538,17 +542,9 @@ app.post('/hf/v1/chat/completions', async (req, res) => {
|
|
| 538 |
if (retryCount >= CONFIG.RETRY.MAX_ATTEMPTS) {
|
| 539 |
throw error;
|
| 540 |
}
|
| 541 |
-
// 等待一段时间后重试
|
| 542 |
await new Promise(resolve => setTimeout(resolve, CONFIG.RETRY.DELAY_BASE * retryCount));
|
| 543 |
}
|
| 544 |
}
|
| 545 |
-
if (req.body.stream) {
|
| 546 |
-
await ResponseHandler.handleStreamResponse(response, req.body.model, res);
|
| 547 |
-
} else {
|
| 548 |
-
await ResponseHandler.handleNormalResponse(response, req.body.model, res);
|
| 549 |
-
}
|
| 550 |
-
//请求完毕后再尝试更新redis数据库缓存,避免阻塞
|
| 551 |
-
await tokenManager.updateTokens(response);
|
| 552 |
} catch (error) {
|
| 553 |
res.status(reqStatus).json({
|
| 554 |
error: {
|
|
|
|
| 18 |
RedisToken: process.env.RedisToken
|
| 19 |
},
|
| 20 |
RETRY: {
|
| 21 |
+
MAX_ATTEMPTS: 2,
|
| 22 |
DELAY_BASE: 1000
|
| 23 |
},
|
| 24 |
SERVER: {
|
|
|
|
| 95 |
}
|
| 96 |
|
| 97 |
async updateCacheTokens() {
|
| 98 |
+
CONFIG.DEFAULT_HEADERS["anti-csrftoken-a2z"] = Tokens[currentIndex].anti_csrftoken_a2z;
|
| 99 |
+
CONFIG.DEFAULT_HEADERS.Cookie = `idToken=${Tokens[currentIndex].idToken}; pr_refresh_token=${Tokens[currentIndex].pr_refresh_token};aws-waf-token=${Tokens[currentIndex].aws_waf_token}`;
|
| 100 |
+
CONFIG.DEFAULT_HEADERS.referer = Tokens[currentIndex].refreshUrl;
|
| 101 |
}
|
| 102 |
|
| 103 |
async updateTokens(response, isWaf = false) {
|
| 104 |
if (isWaf) {
|
| 105 |
console.log("更新waf");
|
| 106 |
+
var wafToken = await Utils.extractWaf();
|
| 107 |
+
if (wafToken) {
|
| 108 |
+
Tokens[currentIndex].aws_waf_token = wafToken;
|
| 109 |
return;
|
| 110 |
} else {
|
| 111 |
console.log("提取aws-waf-token失败");
|
| 112 |
currentIndex = (currentIndex + 1) % Tokens.length;
|
| 113 |
}
|
| 114 |
+
}else{
|
| 115 |
+
const newCsrfToken = response.headers.get('anti-csrftoken-a2z');
|
| 116 |
+
const cookies = response.headers.get('set-cookie');
|
| 117 |
+
if (newCsrfToken && cookies) {
|
| 118 |
+
console.log("更新缓存");
|
| 119 |
+
Tokens[currentIndex].anti_csrftoken_a2z = newCsrfToken;
|
| 120 |
+
const idTokenMatch = cookies.match(/idToken=([^;]+)/);
|
| 121 |
+
if (idTokenMatch && idTokenMatch[1]) {
|
| 122 |
+
Tokens[currentIndex].idToken = idTokenMatch[1];
|
| 123 |
+
}
|
| 124 |
+
await this.updateRedisTokens();//最后更新redis数据库缓存
|
| 125 |
+
console.log("更新缓存完毕");
|
| 126 |
}
|
| 127 |
+
currentIndex = (currentIndex + 1) % Tokens.length;
|
|
|
|
| 128 |
}
|
|
|
|
| 129 |
}
|
| 130 |
}
|
| 131 |
|
|
|
|
| 145 |
try {
|
| 146 |
const page = await browser.newPage();
|
| 147 |
await page.setExtraHTTPHeaders({
|
| 148 |
+
cookie: `pr_refresh_token=${Tokens[currentIndex].pr_refresh_token};idToken=${Tokens[currentIndex].idToken}`
|
| 149 |
});
|
| 150 |
|
| 151 |
+
await page.goto(Tokens[currentIndex].refreshUrl, { waitUntil: 'networkidle0' });
|
| 152 |
|
| 153 |
// 直接从页面 cookies 中提取 aws-waf-token
|
| 154 |
const awsWafToken = (await page.cookies()).find(
|
|
|
|
| 156 |
)?.value;
|
| 157 |
|
| 158 |
if (awsWafToken) {
|
|
|
|
| 159 |
console.log("成功提取 aws-waf-token");
|
| 160 |
await browser.close();
|
| 161 |
return awsWafToken;
|
|
|
|
| 265 |
|
| 266 |
await initializeService();
|
| 267 |
|
|
|
|
|
|
|
| 268 |
class ApiClient {
|
| 269 |
constructor(modelId) {
|
| 270 |
console.log(modelId);
|
|
|
|
| 496 |
return res.status(401).json({ error: "Unauthorized" });
|
| 497 |
}
|
| 498 |
await tokenManager.updateCacheTokens();
|
|
|
|
|
|
|
| 499 |
const apiClient = new ApiClient(req.body.model);
|
| 500 |
const requestPayload = await apiClient.transformMessages(req.body);
|
| 501 |
let retryCount = 0;
|
|
|
|
| 511 |
},
|
| 512 |
body: JSON.stringify(requestPayload)
|
| 513 |
});
|
| 514 |
+
reqStatus = response.status;
|
| 515 |
+
switch (reqStatus) {
|
| 516 |
+
case 200:
|
| 517 |
+
console.log("请求成功");
|
| 518 |
+
// 异步更新token
|
| 519 |
+
tokenManager.updateTokens(response)
|
| 520 |
+
// 处理响应
|
| 521 |
+
if (req.body.stream) {
|
| 522 |
+
await ResponseHandler.handleStreamResponse(response, req.body.model, res);
|
| 523 |
+
} else {
|
| 524 |
+
await ResponseHandler.handleNormalResponse(response, req.body.model, res);
|
| 525 |
+
}
|
| 526 |
+
return;
|
| 527 |
+
case 202:
|
| 528 |
+
console.log("请求受限,更新WAF");
|
| 529 |
await tokenManager.updateTokens(response, true);
|
| 530 |
+
break;
|
| 531 |
+
default:
|
| 532 |
+
throw new Error(`请求失败! status: ${response.status}`);
|
| 533 |
}
|
| 534 |
retryCount++;
|
| 535 |
if (retryCount >= CONFIG.RETRY.MAX_ATTEMPTS) {
|
|
|
|
| 536 |
throw new Error(`上游服务请求失败! status: ${response.status}`);
|
| 537 |
}
|
|
|
|
| 538 |
await new Promise(resolve => setTimeout(resolve, CONFIG.RETRY.DELAY_BASE * retryCount));
|
| 539 |
|
| 540 |
} catch (error) {
|
|
|
|
| 542 |
if (retryCount >= CONFIG.RETRY.MAX_ATTEMPTS) {
|
| 543 |
throw error;
|
| 544 |
}
|
|
|
|
| 545 |
await new Promise(resolve => setTimeout(resolve, CONFIG.RETRY.DELAY_BASE * retryCount));
|
| 546 |
}
|
| 547 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 548 |
} catch (error) {
|
| 549 |
res.status(reqStatus).json({
|
| 550 |
error: {
|