bobocup commited on
Commit
64415d9
·
verified ·
1 Parent(s): dcc5257

Update index.js

Browse files
Files changed (1) hide show
  1. index.js +41 -52
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
- // 立即更新内存中的token
111
- Tokens[currentIndex].aws_waf_token = wafToken;
112
-
113
- // 强制刷新请求头
 
 
114
  await this.updateCacheTokens();
115
-
116
- // 持久化到Redis
117
  await this.updateRedisTokens();
118
-
119
- console.log(" 成功更新aws-waf-token | 新token长度:", wafToken.length);
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();//最后更新redis数据库缓存,异步
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
- try {
589
- console.log("开始请求");
590
- //发送请求
591
- var response = await fetch(`${CONFIG.API.BASE_URL}`, {
 
 
 
 
 
 
 
 
 
 
 
592
  method: "POST",
593
- headers: {
594
- ...CONFIG.DEFAULT_HEADERS
595
- },
596
  body: JSON.stringify(requestPayload)
597
  });
598
  reqStatus = response.status;
599
- switch (reqStatus) {
600
- case 200:
601
- console.log("请求成功");
602
- // 异步更新token
603
- tokenManager.updateTokens(response)
604
- // 处理响应
605
- if (req.body.stream) {
606
- await ResponseHandler.handleStreamResponse(response, req.body.model, res);
607
- } else {
608
- await ResponseHandler.handleNormalResponse(response, req.body.model, res);
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
- } catch (error) {
632
- throw new Error(`请求失败! status: ${response.status}`);
 
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({