yxmiler commited on
Commit
e8b4f0c
·
verified ·
1 Parent(s): 1706d13

Update index.js

Browse files
Files changed (1) hide show
  1. index.js +40 -44
index.js CHANGED
@@ -18,7 +18,7 @@ const CONFIG = {
18
  RedisToken: process.env.RedisToken
19
  },
20
  RETRY: {
21
- MAX_ATTEMPTS: 1,
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]["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
- if (await Utils.extractWaf()) {
107
- Tokens[currentIndex]["aws_waf_token"] = await Utils.extractWaf();
 
108
  return;
109
  } else {
110
  console.log("提取aws-waf-token失败");
111
  currentIndex = (currentIndex + 1) % Tokens.length;
112
  }
113
- }
114
- const newCsrfToken = response.headers.get('anti-csrftoken-a2z');
115
- const cookies = response.headers.get('set-cookie');
116
- if (newCsrfToken && cookies) {
117
- console.log("更新缓存");
118
- Tokens[currentIndex]["anti_csrftoken_a2z"] = newCsrfToken;
119
- const idTokenMatch = cookies.match(/idToken=([^;]+)/);
120
- if (idTokenMatch && idTokenMatch[1]) {
121
- Tokens[currentIndex]["idToken"] = idTokenMatch[1];
 
 
 
122
  }
123
- await this.updateRedisTokens();//最后更新redis数据库缓存
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]["pr_refresh_token"]};aws-waf-token=${Tokens[currentIndex]["aws_waf_token"]};idToken=${Tokens[currentIndex]["idToken"]}`
147
  });
148
 
149
- await page.goto(Tokens[currentIndex]["refreshUrl"], { waitUntil: 'networkidle0' });
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
- if (response.status == 200) {
518
- console.log("请求成功");
519
- break; // 如果请求成功,跳出重试循环
520
- }
521
- if (response.status != 200) {
522
- reqStatus = response.status;
523
- if (response.status == 202) {
524
- console.log("请求失败,已达到速率,重新获取waf然后更新token库");
 
 
 
 
 
 
 
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: {