deemixer/server/src/app.ts

68 lines
1.9 KiB
TypeScript
Raw Normal View History

import http from 'http'
import express, { Application } from 'express'
2021-04-24 16:08:08 +00:00
import { Server as WsServer } from 'ws'
2021-06-04 19:29:55 +00:00
import yargs from 'yargs'
import initDebug from 'debug'
2021-06-04 19:29:55 +00:00
import { hideBin } from 'yargs/helpers'
import { registerMiddlewares } from './middlewares'
import indexRouter from './routes'
import { normalizePort } from './helpers/port'
import { getErrorCb, getListeningCb } from './helpers/server-callbacks'
import { registerApis } from './routes/api/register'
2021-05-11 19:45:24 +00:00
import { registerWebsocket } from './websocket'
2021-06-04 19:29:55 +00:00
import type { Arguments } from './types'
import { consoleInfo } from './helpers/errors'
2021-07-02 17:57:06 +00:00
export { getSettings } from './main'
2021-06-04 19:29:55 +00:00
// TODO: Remove type assertion while keeping correct types
const argv = yargs(hideBin(process.argv)).options({
port: { type: 'string', default: '6595' },
host: { type: 'string', default: '127.0.0.1' }
2021-06-04 19:29:55 +00:00
}).argv as Arguments
const DEEMIX_SERVER_PORT = normalizePort(process.env.DEEMIX_SERVER_PORT ?? argv.port)
const DEEMIX_HOST = process.env.DEEMIX_HOST ?? argv.host
const debug = initDebug('deemix-gui:server')
2021-05-11 19:45:24 +00:00
export const wss = new WsServer({ noServer: true })
2021-07-02 17:57:06 +00:00
const app: Application = express()
const server = http.createServer(app)
/* === Middlewares === */
registerMiddlewares(app)
/* === Routes === */
app.use('/', indexRouter)
/* === APIs === */
registerApis(app)
/* === Config === */
app.set('port', DEEMIX_SERVER_PORT)
/* === Server port === */
if (process.env.NODE_ENV !== 'test') {
server.listen({ port: DEEMIX_SERVER_PORT, host: DEEMIX_HOST })
}
2021-05-11 19:45:24 +00:00
registerWebsocket(wss)
/* === Server callbacks === */
app.on('mount', a => {
console.log(a)
})
server.on('connect', () => {
consoleInfo('Server connected')
})
2021-04-18 10:11:51 +00:00
server.on('upgrade', (request, socket, head) => {
wss.handleUpgrade(request, socket, head, socket => {
wss.emit('connection', socket, request)
})
2021-04-18 10:11:51 +00:00
})
server.on('error', getErrorCb(DEEMIX_SERVER_PORT))
server.on('listening', getListeningCb(server, debug))