diff options
Diffstat (limited to 'deno/mail-relay/aws/app.ts')
-rw-r--r-- | deno/mail-relay/aws/app.ts | 83 |
1 files changed, 36 insertions, 47 deletions
diff --git a/deno/mail-relay/aws/app.ts b/deno/mail-relay/aws/app.ts index 05d93cd..cb275ae 100644 --- a/deno/mail-relay/aws/app.ts +++ b/deno/mail-relay/aws/app.ts @@ -6,7 +6,7 @@ import { FetchHttpHandler } from "@smithy/fetch-http-handler"; // @ts-types="npm:@types/yargs" import yargs from "yargs"; -import { Logger } from "@crupest/base/log"; +import { LogFileProvider } from "@crupest/base/log"; import { ConfigDefinition, ConfigProvider } from "@crupest/base/config"; import { CronTask } from "@crupest/base/cron"; @@ -18,7 +18,7 @@ import { } from "./mail.ts"; import { AwsMailDeliverer } from "./deliver.ts"; import { AwsMailFetcher, AwsS3MailConsumer } from "./fetch.ts"; -import { createInbound, createHono, sendMail, createSmtp } from "../app.ts"; +import { createHono, createInbound, createSmtp, sendMail } from "../app.ts"; const PREFIX = "crupest-mail-server"; const CONFIG_DEFINITIONS = { @@ -94,17 +94,16 @@ function createAwsOptions({ } function createOutbound( - logger: Logger, awsOptions: ReturnType<typeof createAwsOptions>, db: DbService, ) { - const deliverer = new AwsMailDeliverer(logger, awsOptions); + const deliverer = new AwsMailDeliverer(awsOptions); deliverer.preHooks.push( new AwsMailMessageIdRewriteHook(db.messageIdToAws.bind(db)), ); deliverer.postHooks.push( new AwsMailMessageIdSaveHook((original, aws) => - db.addMessageIdMap({ message_id: original, aws_message_id: aws }).then(), + db.addMessageIdMap({ message_id: original, aws_message_id: aws }).then() ), ); return deliverer; @@ -156,80 +155,70 @@ function createCron(fetcher: AwsMailFetcher, consumer: AwsS3MailConsumer) { function createBaseServices() { const config = new ConfigProvider(PREFIX, CONFIG_DEFINITIONS); Deno.mkdirSync(config.get("dataPath"), { recursive: true }); - const logger = new Logger(); - logger.externalLogDir = join(config.get("dataPath"), "log"); - return { config, logger }; + const logFileProvider = new LogFileProvider( + join(config.get("dataPath"), "log"), + ); + return { config, logFileProvider }; } function createAwsFetchOnlyServices() { - const { config, logger } = createBaseServices(); + const services = createBaseServices(); + const { config } = services; + const awsOptions = createAwsOptions({ user: config.get("awsUser"), password: config.get("awsPassword"), region: config.get("awsRegion"), }); - const fetcher = new AwsMailFetcher( - logger, - awsOptions, - config.get("awsMailBucket"), - ); - return { config, logger, awsOptions, fetcher }; + const fetcher = new AwsMailFetcher(awsOptions, config.get("awsMailBucket")); + + return { ...services, awsOptions, fetcher }; } function createAwsRecycleOnlyServices() { - const { config, logger, awsOptions, fetcher } = createAwsFetchOnlyServices(); + const services = createAwsFetchOnlyServices(); + const { config, logFileProvider } = services; - const inbound = createInbound(logger, { + const inbound = createInbound(logFileProvider, { fallback: config.getList("inboundFallback"), ldaPath: config.get("ldaPath"), aliasFile: join(config.get("dataPath"), "aliases.csv"), mailDomain: config.get("mailDomain"), }); - const recycler = (rawMail: string, _: unknown): Promise<void> => inbound.deliver({ mail: new Mail(rawMail) }).then(); - return { config, logger, awsOptions, fetcher, inbound, recycler }; + return { ...services, inbound, recycler }; } function createAwsServices() { - const { config, logger, inbound, awsOptions, fetcher, recycler } = - createAwsRecycleOnlyServices(); + const services = createAwsRecycleOnlyServices(); + const { config, awsOptions } = services; + const dbService = new DbService(join(config.get("dataPath"), "db.sqlite")); - const outbound = createOutbound(logger, awsOptions, dbService); + const outbound = createOutbound(awsOptions, dbService); - return { - config, - logger, - inbound, - dbService, - awsOptions, - fetcher, - recycler, - outbound, - }; + return { ...services, dbService, outbound }; } function createServerServices() { const services = createAwsServices(); - const { logger, config, outbound, inbound, fetcher } = services; - const smtp = createSmtp(logger, outbound); + const { config, outbound, inbound, fetcher } = services; - const hono = createHono(logger, outbound, inbound); + const smtp = createSmtp(outbound); + const hono = createHono(outbound, inbound); setupAwsHono(hono, { path: config.get("awsInboundPath"), auth: config.get("awsInboundKey"), callback: (s3Key, recipients) => { - return fetcher.consumeS3Mail(s3Key, (rawMail, _) => - inbound.deliver({ mail: new Mail(rawMail), recipients }).then(), + return fetcher.consumeS3Mail( + s3Key, + (rawMail, _) => + inbound.deliver({ mail: new Mail(rawMail), recipients }).then(), ); }, }); - return { - ...services, - smtp, - hono, - }; + return { ...services, smtp, hono }; } function serve(cron: boolean = false) { @@ -252,11 +241,11 @@ function serve(cron: boolean = false) { } async function listLives() { - const { logger, fetcher } = createAwsFetchOnlyServices(); + const { fetcher } = createAwsFetchOnlyServices(); const liveMails = await fetcher.listLiveMails(); - logger.info(`Total ${liveMails.length}:`); + console.info(`Total ${liveMails.length}:`); if (liveMails.length !== 0) { - logger.info(liveMails.join("\n")); + console.info(liveMails.join("\n")); } } @@ -272,8 +261,8 @@ if (import.meta.main) { command: "sendmail", describe: "send mail via this server's endpoint", handler: async (_argv) => { - const { logger, config } = createBaseServices(); - await sendMail(logger, config.getInt("httpPort")); + const { config } = createBaseServices(); + await sendMail(config.getInt("httpPort")); }, }) .command({ |