aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--services/docker/mail-server/aws-sendmail/db.ts19
-rw-r--r--services/docker/mail-server/aws-sendmail/main.ts6
-rw-r--r--services/docker/mail-server/aws-sendmail/traffic.ts23
3 files changed, 18 insertions, 30 deletions
diff --git a/services/docker/mail-server/aws-sendmail/db.ts b/services/docker/mail-server/aws-sendmail/db.ts
index ced5c19..6a7b100 100644
--- a/services/docker/mail-server/aws-sendmail/db.ts
+++ b/services/docker/mail-server/aws-sendmail/db.ts
@@ -1,9 +1,7 @@
// spellchecker: words sqlocal kysely insertable updateable
import { SQLocalKysely } from "sqlocal/kysely";
-import { Generated, Kysely, Migration, Migrator } from "kysely";
-
-import { Mail } from "./mail.ts";
+import { Generated, Insertable, Kysely, Migration, Migrator } from "kysely";
const tableNames = {
mail: {
@@ -91,19 +89,8 @@ export class DbService {
await this._migrator.migrateToLatest();
}
- async addMail(mail: Mail): Promise<void> {
- const { raw, messageId, awsMessageId } = mail;
- if (messageId == null) {
- // TODO: Better error.
- throw new Error(
- "Failed to add mail to database. Mail has no message id.",
- );
- }
- await this._db.insertInto(tableNames.mail.table).values({
- raw,
- message_id: messageId,
- aws_message_id: awsMessageId,
- })
+ async addMail(mail: Insertable<MailTable>): Promise<void> {
+ await this._db.insertInto(tableNames.mail.table).values(mail)
.executeTakeFirstOrThrow();
}
diff --git a/services/docker/mail-server/aws-sendmail/main.ts b/services/docker/mail-server/aws-sendmail/main.ts
index bb933b1..7702c75 100644
--- a/services/docker/mail-server/aws-sendmail/main.ts
+++ b/services/docker/mail-server/aws-sendmail/main.ts
@@ -2,12 +2,6 @@ import { AwsContext } from "./aws.ts";
import { MailTrafficHandler } from "./traffic.ts";
import { Logger, setLogger } from "./logger.ts";
-class BugError extends Error {
-}
-
-function warn(message: string) {
-}
-
class App {
readonly aws = new AwsContext();
readonly mailTrafficDeliverer = new MailTrafficHandler(this.aws);
diff --git a/services/docker/mail-server/aws-sendmail/traffic.ts b/services/docker/mail-server/aws-sendmail/traffic.ts
index 87e6dee..f31e9ae 100644
--- a/services/docker/mail-server/aws-sendmail/traffic.ts
+++ b/services/docker/mail-server/aws-sendmail/traffic.ts
@@ -1,14 +1,21 @@
-import { MailDeliverer } from "./deliver.ts";
-import { DovecotMailDeliverer } from "./delivers/dovecot.ts";
+import { MailDeliverer } from "./mail.ts";
import { AwsContext } from "./aws.ts";
+import { DbService } from "./db.ts";
+import { DovecotMailDeliverer } from "./delivers/dovecot.ts";
import { AwsMailDeliverer } from "./delivers/aws.ts";
-export class MailTrafficHandler {
- receiver: MailDeliverer;
- sender: MailDeliverer;
+export abstract class MailTrafficHandler {
+ constructor(
+ public readonly receiver: MailDeliverer,
+ public readonly sender: MailDeliverer,
+ ) {}
+}
- constructor(aws: AwsContext) {
- this.receiver = new DovecotMailDeliverer();
- this.sender = new AwsMailDeliverer(aws);
+export class AwsRelayTrafficHandler extends MailTrafficHandler {
+ constructor(
+ private readonly db: DbService,
+ private readonly aws: AwsContext,
+ ) {
+ super(new DovecotMailDeliverer(), new AwsMailDeliverer(aws));
}
}