107 lines
2.5 KiB
TypeScript
107 lines
2.5 KiB
TypeScript
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/src/app/logger.js";
|
|
import { collections } from "./collections/collections.js";
|
|
import {
|
|
BASE_URL,
|
|
MAILCATCHER_HOST,
|
|
MAILCATCHER_SMTP_PORT,
|
|
MAILER,
|
|
MONGO_HOST,
|
|
MONGO_PORT,
|
|
PORT,
|
|
UPLOADS_FS_DIR,
|
|
} from "./config.js";
|
|
import ADMIN_CREDENTIALS from "./default-admin-credentials.js";
|
|
import { TheFileManager } from "./file-manager.js";
|
|
import { module_dirname } from "./utils/module_dirname.js";
|
|
const locreq = _locreq(module_dirname(import.meta.url));
|
|
|
|
declare module "koa" {
|
|
interface BaseContext {
|
|
$context: SealiousContext;
|
|
$app: TheApp;
|
|
$body: Record<string, unknown>;
|
|
params: Record<string, string | undefined>;
|
|
}
|
|
}
|
|
|
|
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 = {
|
|
upload_path: UPLOADS_FS_DIR,
|
|
datastore_mongo: {
|
|
host: MONGO_HOST,
|
|
port: MONGO_PORT,
|
|
db_name: "sealious-app",
|
|
},
|
|
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: <const>"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",
|
|
})
|
|
: new LoggerMailer();
|
|
|
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
|
|
async start() {
|
|
await super.start();
|
|
}
|
|
|
|
async stop() {
|
|
await super.stop();
|
|
}
|
|
}
|