/** * 平台服务入口(架构设计第 2 节)。 * * 组装:应用服务 + HTTP / SSE 入口。控制面(core)与引擎适配(agent)在后续阶段接入。 */ import type { Server } from 'node:http'; import type { AddressInfo } from 'node:net'; import { ApplicationService } from './app/service.js'; import { createHttpServer } from './entry/http.js'; export { ApplicationService } from './app/service.js'; export type { Subject } from './app/subject.js'; export { createHttpServer } from './entry/http.js'; export interface StartOptions { host?: string; port?: number; version?: string; } export interface RunningServer { url: string; port: number; service: ApplicationService; close(): Promise; } export async function startServer(options: StartOptions = {}): Promise { const host = options.host ?? '127.0.0.1'; const port = options.port ?? 5199; const service = new ApplicationService(options.version === undefined ? {} : { version: options.version }); // 开发期可选:APS_DEV_PROVIDER=1 时注册假 Provider,用于本地联调与演示(默认不注册,能力清单为空) if (process.env.APS_DEV_PROVIDER === '1') { const { createFakeProvider } = await import('@aps/provider-sdk/testing'); await service.registerProvider(createFakeProvider()); } const server: Server = createHttpServer(service); await new Promise((resolve, reject) => { server.once('error', reject); server.listen(port, host, () => resolve()); }); const address = server.address() as AddressInfo | null; const actualPort = address ? address.port : port; return { url: `http://${host}:${actualPort}`, port: actualPort, service, close: () => new Promise((resolve, reject) => { server.close((error) => (error ? reject(error) : resolve())); }), }; }