Files
openclaw_client/api/src/app.ts
T
2026-04-09 18:58:40 +04:00

55 lines
2.1 KiB
TypeScript

import 'reflect-metadata';
import * as dotenv from 'dotenv';
import express, { Application, Request, Response } from 'express';
import morgan from 'morgan';
import helmet from 'helmet';
import bodyParser from 'body-parser';
import swaggerUi from 'swagger-ui-express';
import colors from 'colors';
import { swaggerConf, swaggerSpec } from './middlewares/swagger';
import expressErrorHandler from './middlewares/errorHandler';
import corsConf from './middlewares/cors';
import routes from './routes';
import seedAdminUser from './seed';
import AppDataSource from './data-source';
import { ensureDevicePaired, gateway } from './services/openclawGateway';
import attachPtyWebSocket from './services/ptyService';
dotenv.config();
const app: Application = express();
app.use('/api/public', express.static(`${__dirname}/public`));
app.use(helmet());
app.use(corsConf);
app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());
if (['test', 'development'].includes(process.env.NODE_ENV)) app.use(morgan('dev'));
if (process.env.NODE_ENV === 'development') app.use('/api/docs', swaggerUi.serve, swaggerConf);
app.use('/api', routes);
app.use('/', (req: Request, res: Response) => res.status(200).json());
app.use('*', (req: Request, res: Response) => res.status(404).json());
app.use(expressErrorHandler);
(async () => {
try {
if (process.env.NODE_ENV !== 'test') {
await AppDataSource.initialize();
console.log(colors.green('SQLite database connected')); /* eslint-disable-line */
await seedAdminUser();
await ensureDevicePaired();
const gwOk = await gateway.ensureConnected();
if (gwOk) console.log(colors.green('[gateway] persistent connection ready')); /* eslint-disable-line */
else console.warn(colors.yellow('[gateway] initial connection failed, will use CLI fallback')); /* eslint-disable-line */
const server = app.listen(18802, () => console.log(colors.green('running on port 18802'))); /* eslint-disable-line */
attachPtyWebSocket(server);
}
} catch (error) {
console.log(colors.red('%s'), error); /* eslint-disable-line */
}
})();
export {
app,
swaggerSpec,
};