fix: update desktop server configuration for consistent port handling and access

This commit is contained in:
ciat-777
2026-03-15 22:02:03 +08:00
parent 4b42751953
commit 6ca08c1052
8 changed files with 45 additions and 33 deletions
+2 -8
View File
@@ -9,7 +9,6 @@ import {
} from 'electron';
import log from 'electron-log';
import electronUpdater from 'electron-updater';
import getPort, { portNumbers } from 'get-port';
import { spawn, type ChildProcess } from 'node:child_process';
import { existsSync, mkdirSync } from 'node:fs';
import { join } from 'node:path';
@@ -18,6 +17,7 @@ import {
createDesktopHealthUrl,
createDesktopServerUrl,
isFatalServerExit,
resolveDesktopServerPort,
resolveDesktopServerWorkingDir,
waitForServerReady,
} from './runtime.js';
@@ -68,12 +68,6 @@ function resolveExternalServerUrl() {
return (process.env.METAPI_DESKTOP_EXTERNAL_SERVER_URL || '').trim();
}
async function resolveServerPort() {
const forcedPort = Number.parseInt(process.env.METAPI_DESKTOP_SERVER_PORT || '', 10);
if (Number.isFinite(forcedPort) && forcedPort > 0) return forcedPort;
return getPort({ port: portNumbers(4310, 4399) });
}
function showMainWindow() {
if (!mainWindow) return;
if (mainWindow.isMinimized()) mainWindow.restore();
@@ -185,7 +179,7 @@ async function waitForManagedServerReady(url: string) {
async function startManagedBackend() {
ensureDesktopDirs();
const serverEntryPath = getServerEntryPath();
const port = await resolveServerPort();
const port = resolveDesktopServerPort(process.env);
serverUrl = createDesktopServerUrl(port);
const env = buildDesktopServerEnv({
+13 -2
View File
@@ -3,12 +3,13 @@ import {
buildDesktopServerEnv,
createDesktopServerUrl,
isFatalServerExit,
resolveDesktopServerPort,
resolveDesktopServerWorkingDir,
waitForServerReady,
} from './runtime.js';
describe('desktop runtime helpers', () => {
it('builds desktop server env with loopback host and app directories', () => {
it('builds desktop server env with external listen host and app directories', () => {
const env = buildDesktopServerEnv({
inheritedEnv: {
AUTH_TOKEN: 'admin-token',
@@ -19,7 +20,7 @@ describe('desktop runtime helpers', () => {
port: 4312,
});
expect(env.HOST).toBe('127.0.0.1');
expect(env.HOST).toBe('0.0.0.0');
expect(env.PORT).toBe('4312');
expect(env.DATA_DIR).toBe('/tmp/metapi-data');
expect(env.METAPI_LOG_DIR).toBe('/tmp/metapi-logs');
@@ -31,6 +32,16 @@ describe('desktop runtime helpers', () => {
expect(createDesktopServerUrl(4312)).toBe('http://127.0.0.1:4312');
});
it('defaults desktop backend port to 4000', () => {
expect(resolveDesktopServerPort({})).toBe(4000);
});
it('honors explicit desktop backend port override', () => {
expect(resolveDesktopServerPort({
METAPI_DESKTOP_SERVER_PORT: '4312',
})).toBe(4312);
});
it('uses resources path as backend cwd for packaged desktop builds', () => {
expect(resolveDesktopServerWorkingDir({
appPath: 'C:/Users/test/AppData/Local/Programs/Metapi/resources/app.asar',
+10 -1
View File
@@ -23,6 +23,7 @@ type DesktopServerWorkingDirInput = {
isPackaged: boolean;
};
const DEFAULT_DESKTOP_SERVER_PORT = 4000;
const DEFAULT_READY_TIMEOUT_MS = 30_000;
const DEFAULT_READY_INTERVAL_MS = 250;
@@ -31,9 +32,11 @@ function delay(ms: number) {
}
export function buildDesktopServerEnv(input: DesktopServerEnvInput): NodeJS.ProcessEnv {
const host = (input.inheritedEnv?.HOST || '0.0.0.0').trim() || '0.0.0.0';
return {
...(input.inheritedEnv || {}),
HOST: '127.0.0.1',
HOST: host,
PORT: String(input.port),
DATA_DIR: input.userDataDir,
METAPI_DESKTOP: '1',
@@ -49,6 +52,12 @@ export function createDesktopHealthUrl(port: number): string {
return `${createDesktopServerUrl(port)}/api/desktop/health`;
}
export function resolveDesktopServerPort(env?: NodeJS.ProcessEnv): number {
const forcedPort = Number.parseInt(env?.METAPI_DESKTOP_SERVER_PORT || '', 10);
if (Number.isFinite(forcedPort) && forcedPort > 0) return forcedPort;
return DEFAULT_DESKTOP_SERVER_PORT;
}
export function resolveDesktopServerWorkingDir(input: DesktopServerWorkingDirInput): string {
return input.isPackaged ? input.resourcesPath : input.appPath;
}