| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263 |
- import { z } from "zod"
- import { Resource } from "@opencode-ai/console-resource"
- import { AwsClient } from "aws4fetch"
- import { fn } from "./util/fn"
- export namespace AWS {
- let client: AwsClient
- const createClient = () => {
- if (!client) {
- client = new AwsClient({
- accessKeyId: Resource.AWS_SES_ACCESS_KEY_ID.value,
- secretAccessKey: Resource.AWS_SES_SECRET_ACCESS_KEY.value,
- region: "us-east-1",
- })
- }
- return client
- }
- export const sendEmail = fn(
- z.object({
- to: z.string(),
- subject: z.string(),
- body: z.string(),
- }),
- async (input) => {
- const res = await createClient().fetch("https://email.us-east-1.amazonaws.com/v2/email/outbound-emails", {
- method: "POST",
- headers: {
- "X-Amz-Target": "SES.SendEmail",
- "Content-Type": "application/json",
- },
- body: JSON.stringify({
- FromEmailAddress: `OpenCode Zen <[email protected]>`,
- Destination: {
- ToAddresses: [input.to],
- },
- Content: {
- Simple: {
- Subject: {
- Charset: "UTF-8",
- Data: input.subject,
- },
- Body: {
- Text: {
- Charset: "UTF-8",
- Data: input.body,
- },
- Html: {
- Charset: "UTF-8",
- Data: input.body,
- },
- },
- },
- },
- }),
- })
- if (!res.ok) {
- throw new Error(`Failed to send email: ${res.statusText}`)
- }
- },
- )
- }
|