qwen-api-proxy 1.0.11 → 1.0.12

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
@@ -141,6 +141,8 @@ curl http://localhost:3264/api/chat/completions \
141
141
 
142
142
  ## Быстрый старт
143
143
 
144
+ > 🆕 **Новые пользователи?** Начните с [QUICK_START.md](QUICK_START.md) - пошаговое руководство с устранением常见ных ошибок
145
+
144
146
  ### 🌍 Кросс-платформенная поддержка
145
147
 
146
148
  Этот проект полностью поддерживает работу на:
@@ -309,7 +311,7 @@ docker run -d \
309
311
  -v $(pwd)/logs:/app/logs \
310
312
  -v $(pwd)/uploads:/app/uploads \
311
313
  -v $(pwd)/temp:/app/temp \
312
- endykaufman/qwen-api-proxy:1.0.11
314
+ endykaufman/qwen-api-proxy:1.0.12
313
315
 
314
316
  # 3. Смотрим логи
315
317
  docker logs -f qwen-proxy
@@ -318,7 +320,7 @@ docker logs -f qwen-proxy
318
320
  ### Доступные теги
319
321
 
320
322
  - `latest` - последняя стабильная версия
321
- - `1.0.11` - текущая версия
323
+ - `1.0.12` - текущая версия
322
324
  - `1.0.x` - предыдущие версии
323
325
 
324
326
  > **💡 Важно:** Перед первым запуском добавьте аккаунт через `npm run auth` или загрузите сессию через Telegram бота.
@@ -339,7 +341,7 @@ docker logs -f qwen-proxy
339
341
  ```yaml
340
342
  services:
341
343
  qwen-proxy:
342
- image: endykaufman/qwen-api-proxy:1.0.11
344
+ image: endykaufman/qwen-api-proxy:1.0.12
343
345
  container_name: qwen-proxy
344
346
  env_file:
345
347
  - .env
@@ -394,7 +396,7 @@ docker run -d \
394
396
  -v $(pwd)/logs:/app/logs \
395
397
  -v $(pwd)/uploads:/app/uploads \
396
398
  -v $(pwd)/temp:/app/temp \
397
- endykaufman/qwen-api-proxy:1.0.11
399
+ endykaufman/qwen-api-proxy:1.0.12
398
400
  ```
399
401
 
400
402
  Файл `docker-compose.yml`:
@@ -403,7 +405,7 @@ docker run -d \
403
405
  services:
404
406
  qwen-proxy:
405
407
  build: .
406
- image: endykaufman/qwen-api-proxy:1.0.11
408
+ image: endykaufman/qwen-api-proxy:1.0.12
407
409
  container_name: qwen-proxy
408
410
  env_file:
409
411
  - .env # Автоматическая загрузка переменных
@@ -209,6 +209,17 @@ function setup() {
209
209
  checkDependencies();
210
210
 
211
211
  console.log('\n✅ Working directory setup complete!\n');
212
+ console.log('📝 Next steps for first-time users:');
213
+ console.log(' 1. Add an account: qwen-api-proxy (or npx qwen-api-proxy)');
214
+ console.log(' - Select "1 - Add new account"');
215
+ console.log(' - Browser will open for authentication');
216
+ console.log(' - Login to Qwen and press ENTER in console');
217
+ console.log(' 2. Create archive: qwen-api-proxy archive');
218
+ console.log(' 3. Start server: qwen-api-proxy');
219
+ console.log('\n💡 Alternative: Use Telegram bot to upload session files');
220
+ console.log(' - Configure TELEGRAM_BOT_TOKEN in .env file');
221
+ console.log(' - Send session archive to the bot');
222
+ console.log('\n');
212
223
 
213
224
  // Show warnings for missing .gitignore entries
214
225
  if (missingGitignoreDirs.length > 0) {
package/index.js CHANGED
@@ -133,6 +133,30 @@ function createSessionArchive() {
133
133
  throw new Error('Папка сессии пуста. Сначала выполните авторизацию.');
134
134
  }
135
135
 
136
+ // Проверяем, есть ли реальные данные (accounts, tokens.json, и т.д.)
137
+ const hasAccounts = fs.existsSync(path.join(sessionPath, 'accounts')) &&
138
+ fs.readdirSync(path.join(sessionPath, 'accounts')).length > 0;
139
+ const hasTokens = fs.existsSync(path.join(sessionPath, 'tokens.json'));
140
+
141
+ if (!hasAccounts && !hasTokens) {
142
+ throw new Error('Папка сессии не содержит данных аккаунтов.');
143
+ }
144
+
145
+ // Показываем статистику
146
+ console.log('\n📊 Найденные данные:');
147
+ if (hasAccounts) {
148
+ const accounts = fs.readdirSync(path.join(sessionPath, 'accounts'));
149
+ console.log(` ✓ Аккаунты: ${accounts.length} (${accounts.join(', ')})`);
150
+ }
151
+ if (hasTokens) {
152
+ try {
153
+ const tokens = JSON.parse(fs.readFileSync(path.join(sessionPath, 'tokens.json'), 'utf8'));
154
+ console.log(` ✓ Токены: ${Array.isArray(tokens) ? tokens.length : 0} записей`);
155
+ } catch (e) {
156
+ console.log(' ⚠ tokens.json не удалось прочитать');
157
+ }
158
+ }
159
+
136
160
  // Создаем ZIP архив (cross-platform)
137
161
  let command;
138
162
  if (isWindows) {
@@ -234,6 +258,68 @@ async function handleCLICommand() {
234
258
  console.log('╚══════════════════════════════════════════════════════════╝\n');
235
259
 
236
260
  try {
261
+ // Проверяем, есть ли уже аккаунты
262
+ const tokensPath = path.join(process.cwd(), SESSION_DIR, 'tokens.json');
263
+ const accountsPath = path.join(process.cwd(), SESSION_DIR, ACCOUNTS_DIR);
264
+
265
+ let hasAccounts = false;
266
+
267
+ if (fs.existsSync(tokensPath)) {
268
+ try {
269
+ const tokens = JSON.parse(fs.readFileSync(tokensPath, 'utf8'));
270
+ if (Array.isArray(tokens) && tokens.length > 0) {
271
+ hasAccounts = true;
272
+ }
273
+ } catch (e) {
274
+ // tokens.json corrupted
275
+ }
276
+ }
277
+
278
+ if (!hasAccounts && fs.existsSync(accountsPath)) {
279
+ const accounts = fs.readdirSync(accountsPath);
280
+ if (accounts.length > 0) {
281
+ hasAccounts = true;
282
+ }
283
+ }
284
+
285
+ // Если аккаунтов нет, предлагаем добавить
286
+ if (!hasAccounts) {
287
+ console.log('📝 Аккаунты не найдены. Необходимо добавить аккаунт перед созданием архива.\n');
288
+ console.log('🔹 Вариант 1: Добавить аккаунт сейчас (откроется браузер)');
289
+ console.log('🔹 Вариант 2: Отправить файл сессии через Telegram бота');
290
+ console.log('🔹 Вариант 3: Выйти и запустить вручную: npx qwen-api-proxy\n');
291
+
292
+ const { prompt } = await import('./src/utils/prompt.js');
293
+ const choice = await prompt('Ваш выбор (1/2/3, Enter = 1): ');
294
+
295
+ if (choice === '2') {
296
+ console.log('\n💡 Для использования Telegram бота:');
297
+ console.log(' 1. Добавьте TELEGRAM_BOT_TOKEN в .env файл');
298
+ console.log(' 2. Запустите: npx qwen-api-proxy');
299
+ console.log(' 3. Отправьте файл сессии боту\n');
300
+ process.exit(0);
301
+ } else if (choice === '3') {
302
+ console.log('\n👋 Выход. Запустите "npx qwen-api-proxy" для добавления аккаунта.\n');
303
+ process.exit(0);
304
+ }
305
+
306
+ // choice === '1' или Enter - добавляем аккаунт
307
+ console.log('\n🔐 Запуск браузера для добавления аккаунта...\n');
308
+
309
+ const { addAccountInteractive } = await import('./src/utils/accountSetup.js');
310
+ const accountId = await addAccountInteractive();
311
+
312
+ if (!accountId) {
313
+ console.log('\n❌ Аккаунт не был добавлен. Архив не создан.\n');
314
+ process.exit(1);
315
+ }
316
+
317
+ console.log(`\n✅ Аккаунт ${accountId} успешно добавлен!\n`);
318
+ } else {
319
+ console.log('✅ Найден существующий аккаунт\n');
320
+ }
321
+
322
+ // Теперь создаем архив
237
323
  const archivePath = createSessionArchive();
238
324
  console.log('\n🎉 ГОТОВО!');
239
325
  console.log(`📄 Архив: ${archivePath}`);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "qwen-api-proxy",
3
- "version": "1.0.11",
3
+ "version": "1.0.12",
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": {