import _locreq from "locreq"; import type { Context } from "koa"; import type { FlatTemplatable } from "tempstream"; import type { Context as SealiousContext } from "sealious"; import { App, LoggerMailer, SMTPMailer } from "sealious"; import type { LoggerLevel } from "sealious/@types/app/logger.js"; import { collections } from "./collections/collections.js"; import { BASE_URL, MAILCATCHER_HOST, MAILCATCHER_SMTP_PORT, MAILER, MONGO_DB_NAME, MONGO_HOST, MONGO_PASSWORD, MONGO_PORT, MONGO_USERNAME, PORT, SMTP_HOST, SMTP_LOGIN, SMTP_PASSWORD, SMTP_PORT, } from "./config.js"; import ADMIN_CREDENTIALS from "./default-admin-credentials.js"; import { TheFileManager } from "./file-manager.js"; const locreq = _locreq(import.meta.dirname); declare module "koa" { interface BaseContext { $context: SealiousContext; $app: TheApp; $body: Record; params: Record; } } declare module "@sealcode/sealgen" { interface HTMLOptions { preserveScroll?: boolean; morphing?: boolean; navbar?: (ctx: Context) => FlatTemplatable; autoRefreshCSS?: boolean; disableCopyEvent?: boolean; language?: string; showBanner?: boolean; canHaveStreams?: boolean; animateTitle?: boolean; bodyClasses?: string[]; showFooter: boolean; showBottomNavbar: boolean; loadHamburgerMenu: boolean; loadSearchModal: boolean; } } export default class TheApp extends App { FileManager = TheFileManager; config = { datastore_mongo: { host: MONGO_HOST, port: MONGO_PORT, username: MONGO_USERNAME, password: MONGO_PASSWORD, db_name: MONGO_DB_NAME, }, email: { from_address: "sealious-app@example.com", from_name: "sealious-app app", }, logger: { // eslint-disable-next-line @typescript-eslint/consistent-type-assertions level: "info" as LoggerLevel, }, "www-server": { port: PORT, }, core: { environment: "production", // to send the full html emails }, }; manifest = { name: "sealious-app", logo: locreq.resolve("assets/logo.png"), version: "0.0.1", default_language: "en", base_url: BASE_URL, admin_email: ADMIN_CREDENTIALS.email, colors: { primary: "#5294a1", }, }; collections = collections; mailer = MAILER === "mailcatcher" ? new SMTPMailer({ host: MAILCATCHER_HOST, port: MAILCATCHER_SMTP_PORT, user: "any", password: "any", }) : MAILER === "SMTP" ? new SMTPMailer( { host: SMTP_HOST, port: SMTP_PORT, user: SMTP_LOGIN, password: SMTP_PASSWORD, }, { secure: false, requireTLS: true } ) : new LoggerMailer(); async start() { await super.start(); } async stop() { await super.stop(); } }