/* eslint-disable
no-console,
*/
import https from 'https'
import { allowDestroy } from '@packages/network'
import { options } from './certs'
import type { IncomingMessage, ServerResponse } from 'http'
const defaultOnRequest = function (req: IncomingMessage, res: ServerResponse) {
console.log('HTTPS SERVER REQUEST URL:', req.url)
console.log('HTTPS SERVER REQUEST HEADERS:', req.headers)
res.setHeader('Content-Type', 'text/html')
res.writeHead(200)
res.end('
https server')
}
let servers: https.Server[] = []
export const create = (onRequest: (req: IncomingMessage, res: ServerResponse) => void) => {
return https.createServer(options, onRequest != null ? onRequest : defaultOnRequest)
}
export const start = (port: number, onRequest?: (req: IncomingMessage, res: ServerResponse) => void) => {
return new Promise((resolve) => {
const srv = create(onRequest)
allowDestroy(srv)
servers.push(srv)
srv.listen(port, () => {
console.log(`server listening on port: ${port}`)
resolve(srv)
})
})
}
export const stop = async () => {
const stopServer = (srv: https.Server) => {
return new Promise((resolve) => {
srv.destroy(resolve)
})
}
await Promise.all(servers.map((server) => stopServer(server)))
servers = []
}