56 lines
3.8 KiB
TypeScript
56 lines
3.8 KiB
TypeScript
import {Hono} from "hono";
|
|
import {
|
|
sesService,
|
|
type RawEmailInput,
|
|
} from "../services/ses";
|
|
import type {
|
|
CreateConfigurationSetCommandInput,
|
|
CreateConfigurationSetEventDestinationCommandInput,
|
|
CreateEmailIdentityCommandInput,
|
|
CreateEmailTemplateCommandInput,
|
|
PutSuppressedDestinationCommandInput,
|
|
SendEmailCommandInput,
|
|
TestRenderEmailTemplateCommandInput,
|
|
UpdateEmailTemplateCommandInput,
|
|
} from "@aws-sdk/client-sesv2";
|
|
|
|
type SesService = typeof sesService;
|
|
|
|
export function createSesRouter(service: SesService = sesService) {
|
|
const app = new Hono();
|
|
|
|
app.get("/identities", async (c) => c.json(await service.listIdentities()));
|
|
app.post("/identities", async (c) => c.json(await service.createIdentity(await c.req.json<CreateEmailIdentityCommandInput>()), 201));
|
|
app.delete("/identities/:identity", async (c) => c.json(await service.deleteIdentity(c.req.param("identity"))));
|
|
|
|
app.post("/emails/simple", async (c) => c.json(await service.sendSimple(await c.req.json<SendEmailCommandInput>()), 201));
|
|
app.post("/emails/raw", async (c) => c.json(await service.sendRaw(await c.req.json<RawEmailInput>()), 201));
|
|
app.post("/emails/template", async (c) => c.json(await service.sendTemplate(await c.req.json<SendEmailCommandInput>()), 201));
|
|
|
|
app.get("/suppressions", async (c) => c.json(await service.listSuppressedDestinations()));
|
|
app.post("/suppressions", async (c) => c.json(await service.createSuppression(await c.req.json<PutSuppressedDestinationCommandInput>()), 201));
|
|
app.delete("/suppressions/:emailAddress", async (c) => c.json(await service.deleteSuppression(c.req.param("emailAddress"))));
|
|
|
|
app.get("/templates", async (c) => c.json(await service.listTemplates()));
|
|
app.get("/templates/:templateName", async (c) => c.json(await service.getTemplate(c.req.param("templateName"))));
|
|
app.post("/templates", async (c) => c.json(await service.createTemplate(await c.req.json<CreateEmailTemplateCommandInput>()), 201));
|
|
app.put("/templates/:templateName", async (c) => c.json(await service.updateTemplate(c.req.param("templateName"), await c.req.json<Omit<UpdateEmailTemplateCommandInput, "TemplateName">>())));
|
|
app.delete("/templates/:templateName", async (c) => c.json(await service.deleteTemplate(c.req.param("templateName"))));
|
|
app.post("/templates/test-render", async (c) => c.json(await service.testRenderTemplate(await c.req.json<TestRenderEmailTemplateCommandInput>())));
|
|
|
|
app.get("/configuration-sets", async (c) => c.json(await service.listConfigurationSets()));
|
|
app.post("/configuration-sets", async (c) => c.json(await service.createConfigurationSet(await c.req.json<CreateConfigurationSetCommandInput>()), 201));
|
|
app.delete("/configuration-sets/:configurationSetName", async (c) => c.json(await service.deleteConfigurationSet(c.req.param("configurationSetName"))));
|
|
app.get("/configuration-sets/:configurationSetName/event-destinations", async (c) => c.json(await service.listEventDestinations(c.req.param("configurationSetName"))));
|
|
app.post("/configuration-sets/:configurationSetName/event-destinations", async (c) => c.json(await service.createEventDestination(c.req.param("configurationSetName"), await c.req.json<Omit<CreateConfigurationSetEventDestinationCommandInput, "ConfigurationSetName">>()), 201));
|
|
app.delete("/configuration-sets/:configurationSetName/event-destinations/:eventDestinationName", async (c) => c.json(await service.deleteEventDestination(c.req.param("configurationSetName"), c.req.param("eventDestinationName"))));
|
|
|
|
app.get("/inventory/sns-topics", async (c) => c.json(await service.listSnsTopics()));
|
|
app.get("/inventory/event-buses", async (c) => c.json(await service.listEventBuses()));
|
|
app.get("/inventory/cloudwatch-metrics", async (c) => c.json(await service.listSesMetrics()));
|
|
|
|
return app;
|
|
}
|
|
|
|
export default createSesRouter();
|