{"version":3,"sources":["../../../src/providers/MailchimpProvider.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 MailchimpProvider.\n */\nexport type MailchimpProviderConfig = {\n  /** Mailchimp Transactional API key */\n  api_key: string;\n  /** Default sender email address */\n  default_from: string;\n};\n\n/**\n * Represents a recipient's email status in Mailchimp response.\n */\ninterface MailchimpRecipient {\n  email: string;\n  status: \"sent\" | \"queued\" | \"scheduled\" | \"rejected\" | \"invalid\";\n  reject_reason?: string;\n  _id?: string;\n}\n\n/**\n * Mailer provider that sends emails via Mailchimp Transactional (formerly Mandrill).\n * Supports API key from configuration or MAILCHIMP_API_KEY environment variable.\n */\nexport class MailchimpProvider implements MailerProvider {\n  private defaultFrom: string = \"\";\n  private apiKey: string;\n\n  /**\n   * Creates a new MailchimpProvider instance.\n   * @param options - Provider configuration options\n   */\n  constructor(options: Partial<MailchimpProviderConfig> = {}) {\n    this.apiKey = options.api_key || process.env.MAILCHIMP_API_KEY || \"\";\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 Mailchimp Transactional API.\n   * @param mail - The email message to send\n   * @throws Error if the Mailchimp API request fails or emails are rejected\n   */\n  async sendMail(mail: Mailable): Promise<void> {\n    const toEmails = prepareEmails(mail.to);\n    const ccEmails = prepareEmails(mail.cc);\n    const bccEmails = prepareEmails(mail.bcc);\n\n    const message = {\n      from_email: mail.from || this.defaultFrom,\n      subject: mail.subject,\n      text: await mail.getTextContent(),\n      html: await mail.getHtmlContent(),\n      to: [\n        ...toEmails.map((email) => ({ email, type: \"to\" })),\n        ...ccEmails.map((email) => ({ email, type: \"cc\" })),\n        ...bccEmails.map((email) => ({ email, type: \"bcc\" })),\n      ],\n    };\n\n    const response = await fetch(\n      \"https://mandrillapp.com/api/1.0/messages/send\",\n      {\n        method: \"POST\",\n        headers: {\n          \"Content-Type\": \"application/json\",\n        },\n        body: JSON.stringify({\n          key: this.apiKey,\n          message,\n        }),\n      },\n    );\n\n    if (!response.ok) {\n      throw new Error(\n        `Mailchimp API error: ${response.status} ${response.statusText}`,\n      );\n    }\n\n    const result: MailchimpRecipient[] = await response.json();\n\n    // Check if any email was rejected\n    if (Array.isArray(result)) {\n      const rejected = result.filter(\n        (r) => r.status === \"rejected\" || r.status === \"invalid\",\n      );\n      if (rejected.length > 0) {\n        throw new Error(`Mailchimp rejected ${rejected.length} email(s)`);\n      }\n    }\n  }\n}\n"],"mappings":";;AAAA,SAAS,qBAAqB;AA4BvB,MAAM,kBAA4C;AAAA,EA5BzD,OA4ByD;AAAA;AAAA;AAAA,EAC/C,cAAsB;AAAA,EACtB;AAAA;AAAA;AAAA;AAAA;AAAA,EAMR,YAAY,UAA4C,CAAC,GAAG;AAC1D,SAAK,SAAS,QAAQ,WAAW,QAAQ,IAAI,qBAAqB;AAClE,SAAK,cAAc,QAAQ,gBAAgB;AAAA,EAC7C;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,cAAc,KAAK,EAAE;AACtC,UAAM,WAAW,cAAc,KAAK,EAAE;AACtC,UAAM,YAAY,cAAc,KAAK,GAAG;AAExC,UAAM,UAAU;AAAA,MACd,YAAY,KAAK,QAAQ,KAAK;AAAA,MAC9B,SAAS,KAAK;AAAA,MACd,MAAM,MAAM,KAAK,eAAe;AAAA,MAChC,MAAM,MAAM,KAAK,eAAe;AAAA,MAChC,IAAI;AAAA,QACF,GAAG,SAAS,IAAI,CAAC,WAAW,EAAE,OAAO,MAAM,KAAK,EAAE;AAAA,QAClD,GAAG,SAAS,IAAI,CAAC,WAAW,EAAE,OAAO,MAAM,KAAK,EAAE;AAAA,QAClD,GAAG,UAAU,IAAI,CAAC,WAAW,EAAE,OAAO,MAAM,MAAM,EAAE;AAAA,MACtD;AAAA,IACF;AAEA,UAAM,WAAW,MAAM;AAAA,MACrB;AAAA,MACA;AAAA,QACE,QAAQ;AAAA,QACR,SAAS;AAAA,UACP,gBAAgB;AAAA,QAClB;AAAA,QACA,MAAM,KAAK,UAAU;AAAA,UACnB,KAAK,KAAK;AAAA,UACV;AAAA,QACF,CAAC;AAAA,MACH;AAAA,IACF;AAEA,QAAI,CAAC,SAAS,IAAI;AAChB,YAAM,IAAI;AAAA,QACR,wBAAwB,SAAS,MAAM,IAAI,SAAS,UAAU;AAAA,MAChE;AAAA,IACF;AAEA,UAAM,SAA+B,MAAM,SAAS,KAAK;AAGzD,QAAI,MAAM,QAAQ,MAAM,GAAG;AACzB,YAAM,WAAW,OAAO;AAAA,QACtB,CAAC,MAAM,EAAE,WAAW,cAAc,EAAE,WAAW;AAAA,MACjD;AACA,UAAI,SAAS,SAAS,GAAG;AACvB,cAAM,IAAI,MAAM,sBAAsB,SAAS,MAAM,WAAW;AAAA,MAClE;AAAA,IACF;AAAA,EACF;AACF;","names":[]}