qwen-api-proxy 1.0.14 → 1.0.15

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -311,7 +311,7 @@ docker run -d \
311
311
  -v $(pwd)/logs:/app/logs \
312
312
  -v $(pwd)/uploads:/app/uploads \
313
313
  -v $(pwd)/temp:/app/temp \
314
- endykaufman/qwen-api-proxy:1.0.14
314
+ endykaufman/qwen-api-proxy:1.0.15
315
315
 
316
316
  # 3. Смотрим логи
317
317
  docker logs -f qwen-proxy
@@ -320,7 +320,7 @@ docker logs -f qwen-proxy
320
320
  ### Доступные теги
321
321
 
322
322
  - `latest` - последняя стабильная версия
323
- - `1.0.14` - текущая версия
323
+ - `1.0.15` - текущая версия
324
324
  - `1.0.x` - предыдущие версии
325
325
 
326
326
  > **💡 Важно:** Перед первым запуском добавьте аккаунт через `npm run auth` или загрузите сессию через Telegram бота.
@@ -341,7 +341,7 @@ docker logs -f qwen-proxy
341
341
  ```yaml
342
342
  services:
343
343
  qwen-proxy:
344
- image: endykaufman/qwen-api-proxy:1.0.14
344
+ image: endykaufman/qwen-api-proxy:1.0.15
345
345
  container_name: qwen-proxy
346
346
  env_file:
347
347
  - .env
@@ -396,7 +396,7 @@ docker run -d \
396
396
  -v $(pwd)/logs:/app/logs \
397
397
  -v $(pwd)/uploads:/app/uploads \
398
398
  -v $(pwd)/temp:/app/temp \
399
- endykaufman/qwen-api-proxy:1.0.14
399
+ endykaufman/qwen-api-proxy:1.0.15
400
400
  ```
401
401
 
402
402
  Файл `docker-compose.yml`:
@@ -405,7 +405,7 @@ docker run -d \
405
405
  services:
406
406
  qwen-proxy:
407
407
  build: .
408
- image: endykaufman/qwen-api-proxy:1.0.14
408
+ image: endykaufman/qwen-api-proxy:1.0.15
409
409
  container_name: qwen-proxy
410
410
  env_file:
411
411
  - .env # Автоматическая загрузка переменных
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "qwen-api-proxy",
3
- "version": "1.0.14",
3
+ "version": "1.0.15",
4
4
  "description": "Proxy server for accessing Qwen API through browser emulation with OpenAI-compatible API and Telegram bot",
5
5
  "license": "MIT",
6
6
  "author": {
@@ -27,6 +27,60 @@ export function hasCookies(accountId) {
27
27
  return fs.existsSync(cookiesPath);
28
28
  }
29
29
 
30
+ /**
31
+ * Извлекает JWT токен из cookies.json
32
+ * @param {string} accountId - ID аккаунта
33
+ * @returns {string|null} - JWT токен или null
34
+ */
35
+ function extractTokenFromCookies(accountId) {
36
+ try {
37
+ const cookiesPath = path.join(ACCOUNTS_PATH, accountId, 'cookies.json');
38
+ if (!fs.existsSync(cookiesPath)) {return null;}
39
+
40
+ const cookies = JSON.parse(fs.readFileSync(cookiesPath, 'utf8'));
41
+
42
+ // Ищем cookie с именем 'token'
43
+ const tokenCookie = cookies.find((cookie) => cookie.name === 'token');
44
+
45
+ if (tokenCookie && tokenCookie.value) {
46
+ return tokenCookie.value;
47
+ }
48
+
49
+ return null;
50
+ } catch (error) {
51
+ // Тихо возвращаем null - это не критичная операция
52
+ return null;
53
+ }
54
+ }
55
+
56
+ /**
57
+ * Восстанавливает token.txt из cookies.json если token.txt отсутствует
58
+ * @param {string} accountId - ID аккаунта
59
+ * @returns {boolean} - true если токен был восстановлен
60
+ */
61
+ function restoreTokenFromFile(accountId) {
62
+ const tokenPath = path.join(ACCOUNTS_PATH, accountId, 'token.txt');
63
+
64
+ // Если token.txt уже существует, ничего не делаем
65
+ if (fs.existsSync(tokenPath)) {return false;}
66
+
67
+ // Пытаемся извлечь токен из cookies.json
68
+ const token = extractTokenFromCookies(accountId);
69
+
70
+ if (token) {
71
+ try {
72
+ fs.writeFileSync(tokenPath, token, 'utf8');
73
+ logInfo(`✅ ${accountId}: Токен восстановлен из cookies.json`);
74
+ return true;
75
+ } catch (error) {
76
+ logWarn(`⚠️ ${accountId}: Не удалось создать token.txt: ${error.message}`);
77
+ return false;
78
+ }
79
+ }
80
+
81
+ return false;
82
+ }
83
+
30
84
  /**
31
85
  * Декодирует JWT токен и извлекает время истечения
32
86
  * @param {string} token - JWT токен
@@ -69,6 +123,13 @@ export function loadTokens() {
69
123
  try {
70
124
  const tokens = JSON.parse(fs.readFileSync(TOKENS_FILE, 'utf8'));
71
125
 
126
+ // Автоматически восстанавливаем token.txt из cookies.json если нужно
127
+ tokens.forEach((token) => {
128
+ if (token.id) {
129
+ restoreTokenFromFile(token.id);
130
+ }
131
+ });
132
+
72
133
  // Добавляем expiryTime для каждого токена, если его нет
73
134
  return tokens.map((token) => {
74
135
  if (!token.expiryTime && token.token) {