{"version":3,"sources":["../../../src/providers/MailgunProvider.mts"],"sourcesContent":["import { prepareEmails } from \"../helper.mjs\";\nimport type { Mailable } from \"../Mailable.mjs\";\nimport type { MailerProvider } from \"../MailerProvider.mjs\";\n\n/**\n * Configuration options for the MailgunProvider.\n */\nexport type MailgunProviderConfig = {\n  /** Mailgun API key */\n  api_key: string;\n  /** Mailgun domain */\n  domain: string;\n  /** Default sender email address */\n  default_from: string;\n  /** Use EU servers (default: false) */\n  eu?: boolean;\n};\n\n/**\n * Mailer provider that sends emails via Mailgun API.\n * Supports both US and EU Mailgun servers.\n * API key and domain can be provided via configuration or environment variables.\n */\nexport class MailgunProvider implements MailerProvider {\n  private defaultFrom: string = \"\";\n  private apiKey: string;\n  private domain: string;\n  private baseUrl: string;\n\n  /**\n   * Creates a new MailgunProvider instance.\n   * @param options - Provider configuration options\n   */\n  constructor(options: Partial<MailgunProviderConfig> = {}) {\n    this.apiKey = options.api_key || process.env.MAILGUN_API_KEY || \"\";\n    this.domain = options.domain || process.env.MAILGUN_DOMAIN || \"\";\n    this.defaultFrom = options.default_from || \"\";\n\n    // Mailgun has different endpoints for EU and US\n    const subdomain = options.eu ? \"eu.\" : \"\";\n    this.baseUrl = `https://api.${subdomain}mailgun.net/v3/${this.domain}`;\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 Mailgun API.\n   * @param mail - The email message to send\n   * @throws Error if the Mailgun API request fails\n   */\n  async sendMail(mail: Mailable): Promise<void> {\n    const formData = new URLSearchParams();\n    formData.append(\"from\", mail.from || this.defaultFrom);\n    formData.append(\"subject\", mail.subject);\n    formData.append(\"text\", await mail.getTextContent());\n    formData.append(\"html\", await mail.getHtmlContent());\n\n    const toEmails = prepareEmails(mail.to);\n    toEmails.forEach((email) => formData.append(\"to\", email));\n\n    const ccEmails = prepareEmails(mail.cc);\n    ccEmails.forEach((email) => formData.append(\"cc\", email));\n\n    const bccEmails = prepareEmails(mail.bcc);\n    bccEmails.forEach((email) => formData.append(\"bcc\", email));\n\n    const response = await fetch(`${this.baseUrl}/messages`, {\n      method: \"POST\",\n      headers: {\n        Authorization: `Basic ${Buffer.from(\"api:\" + this.apiKey).toString(\"base64\")}`,\n      },\n      body: formData,\n    });\n\n    if (!response.ok) {\n      throw new Error(\n        `Mailgun API error: ${response.status} ${response.statusText}`,\n      );\n    }\n  }\n}\n"],"mappings":";;AAAA,SAAS,qBAAqB;AAuBvB,MAAM,gBAA0C;AAAA,EAvBvD,OAuBuD;AAAA;AAAA;AAAA,EAC7C,cAAsB;AAAA,EACtB;AAAA,EACA;AAAA,EACA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMR,YAAY,UAA0C,CAAC,GAAG;AACxD,SAAK,SAAS,QAAQ,WAAW,QAAQ,IAAI,mBAAmB;AAChE,SAAK,SAAS,QAAQ,UAAU,QAAQ,IAAI,kBAAkB;AAC9D,SAAK,cAAc,QAAQ,gBAAgB;AAG3C,UAAM,YAAY,QAAQ,KAAK,QAAQ;AACvC,SAAK,UAAU,eAAe,SAAS,kBAAkB,KAAK,MAAM;AAAA,EACtE;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,eAAe,MAAoB;AACjC,SAAK,cAAc;AAAA,EACrB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,SAAS,MAA+B;AAC5C,UAAM,WAAW,IAAI,gBAAgB;AACrC,aAAS,OAAO,QAAQ,KAAK,QAAQ,KAAK,WAAW;AACrD,aAAS,OAAO,WAAW,KAAK,OAAO;AACvC,aAAS,OAAO,QAAQ,MAAM,KAAK,eAAe,CAAC;AACnD,aAAS,OAAO,QAAQ,MAAM,KAAK,eAAe,CAAC;AAEnD,UAAM,WAAW,cAAc,KAAK,EAAE;AACtC,aAAS,QAAQ,CAAC,UAAU,SAAS,OAAO,MAAM,KAAK,CAAC;AAExD,UAAM,WAAW,cAAc,KAAK,EAAE;AACtC,aAAS,QAAQ,CAAC,UAAU,SAAS,OAAO,MAAM,KAAK,CAAC;AAExD,UAAM,YAAY,cAAc,KAAK,GAAG;AACxC,cAAU,QAAQ,CAAC,UAAU,SAAS,OAAO,OAAO,KAAK,CAAC;AAE1D,UAAM,WAAW,MAAM,MAAM,GAAG,KAAK,OAAO,aAAa;AAAA,MACvD,QAAQ;AAAA,MACR,SAAS;AAAA,QACP,eAAe,SAAS,OAAO,KAAK,SAAS,KAAK,MAAM,EAAE,SAAS,QAAQ,CAAC;AAAA,MAC9E;AAAA,MACA,MAAM;AAAA,IACR,CAAC;AAED,QAAI,CAAC,SAAS,IAAI;AAChB,YAAM,IAAI;AAAA,QACR,sBAAsB,SAAS,MAAM,IAAI,SAAS,UAAU;AAAA,MAC9D;AAAA,IACF;AAAA,EACF;AACF;","names":[]}