fix: start NeteaseCloudMusicApi server for real — enables QR code login

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
saopig1andClaude Opus 4.6 committed 2026-03-30 01:37:35 +08:00
1 parent 814910123e
commit f77a6f0fd7
1 file changed
+20 -9
+20 -9
View File
@@ -1,4 +1,5 @@
import type { Logger } from "../logger.js"; import type { Logger } from "../logger.js";
import type { Server } from "node:http";
export interface ApiServerOptions { export interface ApiServerOptions {
neteasePort: number; neteasePort: number;
@@ -16,8 +17,7 @@ export function createApiServerManager(
options: ApiServerOptions, options: ApiServerOptions,
logger: Logger logger: Logger
): ApiServerManager { ): ApiServerManager {
let neteaseReady = false; let neteaseServer: Server | null = null;
let qqMusicReady = false;
const neteaseBaseUrl = `http://127.0.0.1:${options.neteasePort}`; const neteaseBaseUrl = `http://127.0.0.1:${options.neteasePort}`;
const qqMusicBaseUrl = `http://127.0.0.1:${options.qqMusicPort}`; const qqMusicBaseUrl = `http://127.0.0.1:${options.qqMusicPort}`;
@@ -26,31 +26,42 @@ export function createApiServerManager(
async start(): Promise<void> { async start(): Promise<void> {
logger.info("Starting embedded music API servers..."); logger.info("Starting embedded music API servers...");
// Start NetEase Cloud Music API
try { try {
// NeteaseCloudMusicApi exports differ between CJS/ESM — use dynamic require
const ncmModule = await import("NeteaseCloudMusicApi") as any;
const serverObj = ncmModule.server ?? ncmModule.default?.server;
const app = await serverObj.serveNcmApi({ port: options.neteasePort });
// serveNcmApi returns the express app; the server is already listening
neteaseServer = app;
logger.info( logger.info(
{ port: options.neteasePort }, { port: options.neteasePort },
"NetEase Cloud Music API starting" "NetEase Cloud Music API started"
); );
neteaseReady = true;
} catch (err) { } catch (err) {
logger.error({ err }, "Failed to start NetEase Cloud Music API"); logger.error({ err }, "Failed to start NetEase Cloud Music API");
} }
// QQ Music API — placeholder (requires separate setup)
try { try {
logger.info({ port: options.qqMusicPort }, "QQ Music API starting"); logger.info(
qqMusicReady = true; { port: options.qqMusicPort },
"QQ Music API: not bundled, skipping"
);
} catch (err) { } catch (err) {
logger.warn( logger.warn(
{ err }, { err },
"QQ Music API not available, QQ Music features will be disabled" "QQ Music API not available"
); );
} }
}, },
stop(): void { stop(): void {
logger.info("Stopping music API servers"); logger.info("Stopping music API servers");
neteaseReady = false; if (neteaseServer && typeof (neteaseServer as any).close === "function") {
qqMusicReady = false; (neteaseServer as any).close();
}
neteaseServer = null;
}, },
getNeteaseBaseUrl(): string { getNeteaseBaseUrl(): string {