panrouter 6.1.0 → 6.2.0

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.
Files changed (2) hide show
  1. package/package.json +1 -1
  2. package/pool-worker.mjs +44 -25
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "panrouter",
3
- "version": "6.1.0",
3
+ "version": "6.2.0",
4
4
  "description": "让 Claude Code 免费使用 DeepSeek 等模型,无需 API Key",
5
5
  "type": "module",
6
6
  "bin": {
package/pool-worker.mjs CHANGED
@@ -401,40 +401,53 @@ function isPortOpen(port) {
401
401
  });
402
402
  }
403
403
 
404
- // ─── 确保 9router 在运行 ─────────────────────────────────────────────────
404
+ // ─── 后台确保 9router 在运行(不阻塞注册)───────────────────────────────
405
+
406
+ let _serverReady = false; // 9router 是否可用
407
+
408
+ function isServerReady() { return _serverReady; }
405
409
 
406
410
  async function ensureServer() {
407
411
  if (await isPortOpen(SERVER_PORT)) {
408
- log(`端口 ${SERVER_PORT} 已就绪,跳过启动`, "OK");
409
- return true;
412
+ _serverReady = true;
413
+ log(`9router 已就绪 (端口 ${SERVER_PORT})`, "OK");
414
+ return;
410
415
  }
411
416
 
412
- // 第一次运行 / 升级后 → 运行你的完整安装脚本(检查、安装、注入 DB、启动)
417
+ // 跑你的安装脚本(负责检查、安装、注入数据库,不依赖它启动)
413
418
  const setupScript = path.join(__dirname, "setup-9router.cjs");
414
419
  if (fs.existsSync(setupScript)) {
415
420
  log("正在执行 9router 部署脚本...");
416
- try {
417
- execSync(`node "${setupScript}"`, { stdio: "inherit", timeout: 180000 });
418
- } catch (e) {
419
- log(`9router 部署脚本执行出错: ${e.message},尝试直接启动`, "WARN");
420
- }
421
+ spawn(process.execPath, [setupScript], {
422
+ cwd: __dirname, stdio: "ignore", detached: true,
423
+ }).unref();
421
424
  }
422
425
 
423
- // 如果脚本没拉起 9router,手动拉一次
424
- for (let i = 0; i < 15; i++) {
426
+ // 等脚本跑一会儿后直接 spawn 9router(后台静默,不弹窗)
427
+ setTimeout(() => {
428
+ log("正在启动 9router...");
429
+ const child = spawn("9router", [], {
430
+ detached: true,
431
+ windowsHide: true,
432
+ stdio: "ignore",
433
+ });
434
+ child.unref();
435
+ }, 2000);
436
+
437
+ // 一直轮询到 9router 起来为止(不限次数)
438
+ poll9router();
439
+ }
440
+
441
+ async function poll9router() {
442
+ for (let i = 0; ; i++) {
425
443
  if (await isPortOpen(SERVER_PORT)) {
444
+ _serverReady = true;
426
445
  log(`9router 已就绪 (端口 ${SERVER_PORT})`, "OK");
427
- return true;
428
- }
429
- if (i === 3) {
430
- log("尝试直接启动 9router...");
431
- spawn("9router", [], { detached: true, stdio: "ignore" }).unref();
446
+ return;
432
447
  }
433
- await new Promise((r) => setTimeout(r, 1000));
448
+ if (i < 60) await new Promise((r) => setTimeout(r, 1000));
449
+ else await new Promise((r) => setTimeout(r, 5000)); // 60秒后放慢频率
434
450
  }
435
-
436
- log("9router 启动超时", "ERR");
437
- return false;
438
451
  }
439
452
 
440
453
  // ─── PID 文件 ────────────────────────────────────────────────────────────────
@@ -500,11 +513,8 @@ export async function start() {
500
513
  // 清理残留进程,确保 100% 干净启动
501
514
  cleanupStaleSelf();
502
515
 
503
- const serverOk = await ensureServer();
504
- if (!serverOk) {
505
- log("无法启动代理服务,终止接入", "ERR");
506
- process.exit(1);
507
- }
516
+ // 后台启动 9router(不阻塞注册)
517
+ await ensureServer();
508
518
 
509
519
  writePid();
510
520
  connectToHub();
@@ -513,6 +523,15 @@ export async function start() {
513
523
  process.on("SIGTERM", gracefulShutdown);
514
524
 
515
525
  log("节点看门狗已启动,等待公网入口...", "ON");
526
+
527
+ // 等 9router 起来后检查状态
528
+ const checkReady = setInterval(async () => {
529
+ if (_serverReady || (await isPortOpen(SERVER_PORT))) {
530
+ _serverReady = true;
531
+ clearInterval(checkReady);
532
+ log("9router 已就绪,节点可正常处理请求", "ON");
533
+ }
534
+ }, 3000);
516
535
  }
517
536
 
518
537
  export function stopWorker() {