{"version":3,"sources":["../../../src/providers/SESProvider.mts"],"sourcesContent":["import type * as AwsSes from \"@aws-sdk/client-ses\";\nimport { loadPackage, prepareEmails } from \"../helper.mjs\";\nimport type { Mailable } from \"../Mailable.mjs\";\nimport type { MailerProvider } from \"../MailerProvider.mjs\";\n\n/**\n * Configuration options for the SESProvider.\n */\nexport type SESProviderConfig = {\n  /** AWS SES client configuration */\n  sesClientConfig: AwsSes.SESClientConfig;\n  /** Default sender email address */\n  default_from: string;\n};\n\n/**\n * Mailer provider that sends emails via Amazon SES (Simple Email Service).\n * Supports AWS credentials from environment variables or explicit configuration.\n */\nexport class SESProvider implements MailerProvider {\n  private sesClient!: AwsSes.SESClient;\n  private defaultFrom: string = \"\";\n  private static sesModule: typeof AwsSes;\n\n  /**\n   * Creates a new SESProvider instance.\n   * @param options - Provider configuration options\n   */\n  constructor(options: Partial<SESProviderConfig> = {}) {\n    if (!SESProvider.sesModule) {\n      SESProvider.sesModule = loadPackage(\"@aws-sdk/client-ses\");\n    }\n    const { SESClient } = SESProvider.sesModule;\n    this.sesClient = new SESClient({\n      region: process.env.AWS_REGION || \"us-east-1\",\n      credentials: {\n        accessKeyId: process.env.AWS_ACCESS_KEY_ID || \"\",\n        secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY || \"\",\n      },\n      ...options.sesClientConfig,\n    });\n\n    this.defaultFrom = options.default_from || \"\";\n  }\n\n  /**\n   * Sets the default sender email address.\n   * @param from - The default sender email address\n   */\n  setDefaultFrom(from: string): void {\n    this.defaultFrom = from;\n  }\n\n  /**\n   * Sends an email via Amazon SES.\n   * @param mail - The email message to send\n   */\n  async sendMail(mail: Mailable): Promise<void> {\n    const { SendEmailCommand } = SESProvider.sesModule;\n    const command = new SendEmailCommand({\n      Source: mail.from || this.defaultFrom,\n      Destination: {\n        ToAddresses: prepareEmails(mail.to),\n      },\n      Message: {\n        Subject: {\n          Data: mail.subject,\n        },\n        Body: {\n          Text: {\n            Data: await mail.getTextContent(),\n          },\n          Html: {\n            Data: await mail.getHtmlContent(),\n          },\n        },\n      },\n    });\n    if (mail.cc) {\n      command.input.Destination!.CcAddresses = prepareEmails(mail.cc);\n    }\n    if (mail.bcc) {\n      command.input.Destination!.BccAddresses = prepareEmails(mail.bcc);\n    }\n\n    await this.sesClient.send(command);\n  }\n}\n"],"mappings":";;AACA,SAAS,aAAa,qBAAqB;AAkBpC,MAAM,YAAsC;AAAA,EAnBnD,OAmBmD;AAAA;AAAA;AAAA,EACzC;AAAA,EACA,cAAsB;AAAA,EAC9B,OAAe;AAAA;AAAA;AAAA;AAAA;AAAA,EAMf,YAAY,UAAsC,CAAC,GAAG;AACpD,QAAI,CAAC,YAAY,WAAW;AAC1B,kBAAY,YAAY,YAAY,qBAAqB;AAAA,IAC3D;AACA,UAAM,EAAE,UAAU,IAAI,YAAY;AAClC,SAAK,YAAY,IAAI,UAAU;AAAA,MAC7B,QAAQ,QAAQ,IAAI,cAAc;AAAA,MAClC,aAAa;AAAA,QACX,aAAa,QAAQ,IAAI,qBAAqB;AAAA,QAC9C,iBAAiB,QAAQ,IAAI,yBAAyB;AAAA,MACxD;AAAA,MACA,GAAG,QAAQ;AAAA,IACb,CAAC;AAED,SAAK,cAAc,QAAQ,gBAAgB;AAAA,EAC7C;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,eAAe,MAAoB;AACjC,SAAK,cAAc;AAAA,EACrB;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,SAAS,MAA+B;AAC5C,UAAM,EAAE,iBAAiB,IAAI,YAAY;AACzC,UAAM,UAAU,IAAI,iBAAiB;AAAA,MACnC,QAAQ,KAAK,QAAQ,KAAK;AAAA,MAC1B,aAAa;AAAA,QACX,aAAa,cAAc,KAAK,EAAE;AAAA,MACpC;AAAA,MACA,SAAS;AAAA,QACP,SAAS;AAAA,UACP,MAAM,KAAK;AAAA,QACb;AAAA,QACA,MAAM;AAAA,UACJ,MAAM;AAAA,YACJ,MAAM,MAAM,KAAK,eAAe;AAAA,UAClC;AAAA,UACA,MAAM;AAAA,YACJ,MAAM,MAAM,KAAK,eAAe;AAAA,UAClC;AAAA,QACF;AAAA,MACF;AAAA,IACF,CAAC;AACD,QAAI,KAAK,IAAI;AACX,cAAQ,MAAM,YAAa,cAAc,cAAc,KAAK,EAAE;AAAA,IAChE;AACA,QAAI,KAAK,KAAK;AACZ,cAAQ,MAAM,YAAa,eAAe,cAAc,KAAK,GAAG;AAAA,IAClE;AAEA,UAAM,KAAK,UAAU,KAAK,OAAO;AAAA,EACnC;AACF;","names":[]}