aboutsummaryrefslogtreecommitdiff
path: root/deno/mail-relay/aws/app.ts
diff options
context:
space:
mode:
Diffstat (limited to 'deno/mail-relay/aws/app.ts')
-rw-r--r--deno/mail-relay/aws/app.ts83
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({