Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions apps/server/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -5,14 +5,20 @@
"version": "4.2.1",
"exports": "./src/index.js",
"dependencies": {
"@fastify/express": "^2.3.0",
"@fastify/swagger": "^8.14.0",
"@fastify/swagger-ui": "^4.0.0",
"@googleapis/sheets": "^5.0.5",
"@sinclair/typebox": "^0.32.33",
"cookie": "1.0.2",
"cookie-parser": "1.4.7",
"cors": "2.8.5",
"dotenv": "^16.0.1",
"express": "5.1.0",
"express-static-gzip": "3.0.0",
"express-validator": "7.2.1",
"fastify": "^4.28.1",
"@fastify/type-provider-typebox": "^4.0.0",
"multer": "2.0.1",
"fast-equals": "^5.0.1",
"google-auth-library": "^9.4.2",
Expand Down
15 changes: 9 additions & 6 deletions apps/server/src/app.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,12 @@ import { LogOrigin, runtimeStorePlaceholder, SimpleDirection, SimplePlayback } f

import 'dotenv/config';
import express from 'express';
import http, { type Server } from 'http';
import fastifyExpress from '@fastify/express';
import cors from 'cors';
import serverTiming from 'server-timing';
import cookieParser from 'cookie-parser';

import { server } from './server.js';
// import utils
import { publicDir, srcDir } from './setup/index.js';
import { environment, isProduction } from './setup/environment.js';
Expand Down Expand Up @@ -139,7 +140,6 @@ enum OntimeStartOrder {
}

let step = OntimeStartOrder.InitAssets;
let expressServer: Server | null = null;

const checkStart = (currentState: OntimeStartOrder) => {
if (step !== currentState) {
Expand Down Expand Up @@ -178,14 +178,17 @@ export const startServer = async (): Promise<{ message: string; serverPort: numb
const settings = getDataProvider().getSettings();
const { serverPort: desiredPort } = settings;

expressServer = http.createServer(app);
await server.register(fastifyExpress);
server.use(app);

await server.ready();

// the express server must be started before the socket otherwise the on error event listener will not attach properly
const resultPort = await serverTryDesiredPort(expressServer, desiredPort);
const resultPort = await serverTryDesiredPort(server.server, desiredPort);
await getDataProvider().setSettings({ ...settings, serverPort: resultPort });
const showWelcome = await getShowWelcomeDialog();

socket.init(expressServer, showWelcome, prefix);
socket.init(server.server, showWelcome, prefix);

/**
* Module initialises the services and provides initial payload for the store
Expand Down Expand Up @@ -275,7 +278,7 @@ export const shutdown = async (exitCode = 0) => {
await restoreService.clear();
}

expressServer?.close();
server.close();
runtimeService.shutdown();
logger.shutdown();
oscServer.shutdown();
Expand Down
28 changes: 28 additions & 0 deletions apps/server/src/server.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
import fastify from 'fastify';
import { TypeBoxTypeProvider } from '@fastify/type-provider-typebox';
import swagger from '@fastify/swagger';
import swaggerUi from '@fastify/swagger-ui';
import { version } from '../package.json';

export const server = fastify().withTypeProvider<TypeBoxTypeProvider>();

server.register(swagger, {
swagger: {
info: {
title: 'Ontime API',
description: 'API for Ontime',
version,
},
schemes: ['http', 'https'],
consumes: ['application/json'],
produces: ['application/json'],
},
});

server.register(swaggerUi, {
routePrefix: '/documentation',
uiConfig: {
docExpansion: 'full',
deepLinking: true,
},
});
Loading
Loading