52 lines
1.4 KiB
TypeScript
52 lines
1.4 KiB
TypeScript
import { TypedServer } from '../classes.typedserver.js';
|
||
import * as servertools from '../servertools/index.js';
|
||
import * as plugins from '../plugins.js';
|
||
|
||
export interface ILoleServiceServerConstructorOptions {
|
||
addCustomRoutes?: (serverArg: servertools.Server) => Promise<any>;
|
||
serviceName: string;
|
||
serviceVersion: string;
|
||
serviceDomain: string;
|
||
port?: number;
|
||
}
|
||
|
||
// the main service server
|
||
export class ServiceServer {
|
||
public options: ILoleServiceServerConstructorOptions;
|
||
public typedServer: TypedServer;
|
||
|
||
constructor(optionsArg: ILoleServiceServerConstructorOptions) {
|
||
this.options = optionsArg;
|
||
}
|
||
|
||
public async start() {
|
||
console.log('starting lole-serviceserver...')
|
||
this.typedServer = new TypedServer({
|
||
cors: true,
|
||
domain: this.options.serviceDomain,
|
||
forceSsl: false,
|
||
port: this.options.port || 3000,
|
||
robots: true,
|
||
defaultAnswer: async () => {
|
||
const InfoHtml = (await import('../infohtml/index.js')).InfoHtml;
|
||
return (
|
||
await InfoHtml.fromSimpleText(
|
||
`${this.options.serviceName} (version ${this.options.serviceVersion})`
|
||
)
|
||
).htmlString;
|
||
},
|
||
});
|
||
|
||
// lets add any custom routes
|
||
if (this.options.addCustomRoutes) {
|
||
await this.options.addCustomRoutes(this.typedServer.server);
|
||
}
|
||
|
||
await this.typedServer.start();
|
||
}
|
||
|
||
public async stop() {
|
||
await this.typedServer.stop();
|
||
}
|
||
}
|