refactor session startup, shutdown, and import

This commit is contained in:
Rob Colbert 2026-05-01 15:37:35 -04:00
parent 64c4304f42
commit bc4959c0da
4 changed files with 98 additions and 29 deletions

View File

@ -0,0 +1,57 @@
// src/services/index.ts
// Copyright (C) 2026 Robert Colbert <rob.colbert@openplatform.us>
// All Rights Reserved
import ApiClientService from "./api-client.js";
import ChatSessionService from "./chat-session.js";
import ContactService from "./contact.js";
import CryptoService from "./crypto.js";
import DroneService from "./drone.js";
import NotificationService from "./notification.js";
import ProjectService from "./project.js";
import SessionService from "./session.js";
import SocketService from "./socket.js";
import StorageService from "./storage.js";
import UserService from "./user.js";
export async function startServices(): Promise<void> {
await ApiClientService.start();
await ChatSessionService.start();
await ContactService.start();
await CryptoService.start();
await DroneService.start();
await NotificationService.start();
await ProjectService.start();
await SessionService.start();
await SocketService.start();
await StorageService.start();
await UserService.start();
}
export async function stopServices(): Promise<void> {
await ApiClientService.stop();
await ChatSessionService.stop();
await ContactService.stop();
await CryptoService.stop();
await DroneService.stop();
await NotificationService.stop();
await ProjectService.stop();
await SessionService.stop();
await SocketService.stop();
await StorageService.stop();
await UserService.stop();
}
export {
ApiClientService,
ChatSessionService,
ContactService,
CryptoService,
DroneService,
NotificationService,
ProjectService,
SessionService,
SocketService,
StorageService,
UserService,
};

View File

@ -34,18 +34,20 @@ type SameSiteOption = boolean | "lax" | "strict" | "none" | undefined;
import { DtpLog } from "./lib/log.js";
import { DtpComponent } from "./lib/component.js";
import { User } from "./models/user.js";
import { ApiController } from "./controllers/api.js";
import { AuthController } from "./controllers/auth.js";
import { HomeController } from "./controllers/home.js";
import { UserController } from "./controllers/user.js";
import ApiClient from "./services/api-client.js";
import ContactService from "./services/contact.js";
import SocketService from "./services/socket.js";
import SessionService, { SessionType } from "./services/session.js";
import StorageService from "./services/storage.js";
import { User } from "./models/user.js";
import {
SessionService,
SocketService,
startServices,
stopServices,
} from "./services/index.js";
import { SessionType } from "./services/session.js";
class DtpWebAppServer implements DtpComponent {
private log: DtpLog;
@ -67,7 +69,8 @@ class DtpWebAppServer implements DtpComponent {
async start(): Promise<void> {
this.hookProcessSignals();
await this.startServices();
await startServices();
await this.createExpressApp();
await this.startHttpServer();
@ -78,14 +81,9 @@ class DtpWebAppServer implements DtpComponent {
async stop(): Promise<number> {
await this.stopHttpServer();
return 0;
}
await stopServices();
async startServices(): Promise<void> {
await ApiClient.start();
await ContactService.start();
await SocketService.start();
await StorageService.start();
return 0;
}
async createExpressApp(): Promise<void> {

View File

@ -6,22 +6,40 @@ import { v4 as uuidv4 } from "uuid";
import "./lib/db.js";
/*
* Models
*/
import ApiClient, { ApiClientStatus } from "./models/api-client.js";
import User from "./models/user.js";
import AiProvider from "./models/ai-provider.js";
import ApiClientService from "./services/api-client.js";
import CryptoService from "./services/crypto.js";
import UserService from "./services/user.js";
/*
* Services
*/
import {
startServices,
stopServices,
ApiClientService,
UserService,
CryptoService,
} from "./services/index.js";
/*
* App Logic
*/
import { DtpProcess } from "./lib/process.js";
import { createAiApi, type IAiLogger } from "@gadget/ai";
import {
type IAiModel,
type IAiModelCapabilities,
type IAiModelSettings,
} from "@gadget/api";
import { DtpProcess } from "./lib/process.js";
class DtpWebCli extends DtpProcess {
get name(): string {
return "DtpWebCli";
@ -547,22 +565,17 @@ class DtpWebCli extends DtpProcess {
})),
});
}
async start(): Promise<void> {
await this.startServices();
}
async startServices(): Promise<void> {
await ApiClientService.start();
await (await import("./services/chat-session.js")).default.start();
}
}
(async () => {
try {
await startServices();
const cli = new DtpWebCli();
await cli.start();
await cli.run(process.argv.slice(2));
await stopServices();
process.exit(0);
} catch (error) {
console.error((error as Error).message);

View File

@ -69,6 +69,7 @@ class PlatformService extends GadgetService {
});
const json = (await response.json()) as PlatformRegistrationResponse;
this.log.debug("platform registration response", json);
if (!json.success) {
const error = new Error("failed to register drone with Platform");
error.name = "PlatformError";