import { Hono } from "@hono/hono"; import { Logger, setLogger } from "./logger.ts"; import { Config, setConfig } from "./config.ts"; import { DbService } from "./db.ts"; import { MailDeliverer } from "./mail.ts"; import { DovecotMailDeliverer } from "./dovecot.ts"; export abstract class AppBase { protected readonly db: DbService; protected readonly localDeliverer: MailDeliverer; constructor() { setLogger(new Logger("log")); setConfig(new Config()); this.db = new DbService(); this.localDeliverer = new DovecotMailDeliverer(); } protected abstract get outboundMailDeliverer(): MailDeliverer; protected setupHono(_hono: Hono): Promise { return Promise.resolve(); } async run(): Promise { const hono = new Hono(); await this.setupHono(hono); Deno.serve(hono.fetch); } }