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 +7 -5
- package/bin/qwen-api-proxy.js +11 -0
- package/index.js +86 -0
- package/package.json +1 -1
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
408
|
+
image: endykaufman/qwen-api-proxy:1.0.12
|
|
407
409
|
container_name: qwen-proxy
|
|
408
410
|
env_file:
|
|
409
411
|
- .env # Автоматическая загрузка переменных
|
package/bin/qwen-api-proxy.js
CHANGED
|
@@ -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}`);
|