{"version":3,"sources":["../../../src/providers/ProtonMailProvider.mts"],"sourcesContent":["import type nodemailer from \"nodemailer\";\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 ProtonMailProvider.\n */\nexport type ProtonMailProviderConfig = {\n  /** ProtonMail Bridge host (default: 127.0.0.1) */\n  bridge_host?: string;\n  /** ProtonMail Bridge port (default: 1025) */\n  bridge_port?: number;\n  /** ProtonMail username */\n  username: string;\n  /** ProtonMail password */\n  password: string;\n  /** Default sender email address */\n  default_from: string;\n  /** Whether to verify SSL certificates (default: false for Bridge) */\n  reject_unauthorized?: boolean;\n};\n\n/**\n * Mailer provider that sends emails via ProtonMail Bridge SMTP.\n * Requires ProtonMail Bridge to be installed and running locally.\n * @see https://proton.me/mail/bridge\n */\nexport class ProtonMailProvider implements MailerProvider {\n  private defaultFrom: string = \"\";\n  private transporter: nodemailer.Transporter;\n  private static nodemailerModule: typeof nodemailer;\n\n  /**\n   * Creates a new ProtonMailProvider instance.\n   * @param options - Provider configuration options\n   */\n  constructor(options: Partial<ProtonMailProviderConfig> = {}) {\n    if (!ProtonMailProvider.nodemailerModule) {\n      ProtonMailProvider.nodemailerModule = loadPackage(\"nodemailer\");\n    }\n    this.defaultFrom = options.default_from || \"\";\n\n    // ProtonMail Bridge default settings\n    const host =\n      options.bridge_host || process.env.PROTONMAIL_BRIDGE_HOST || \"127.0.0.1\";\n    const port =\n      options.bridge_port ||\n      parseInt(process.env.PROTONMAIL_BRIDGE_PORT || \"1025\");\n    const username = options.username || process.env.PROTONMAIL_USERNAME || \"\";\n    const password = options.password || process.env.PROTONMAIL_PASSWORD || \"\";\n\n    this.transporter = ProtonMailProvider.nodemailerModule.createTransport({\n      host,\n      port,\n      secure: false, // ProtonMail Bridge uses STARTTLS\n      auth: {\n        user: username,\n        pass: password,\n      },\n      tls: {\n        // ProtonMail Bridge uses self-signed certificates by default\n        // Allow users to control certificate validation for security\n        rejectUnauthorized: options.reject_unauthorized ?? false,\n      },\n    });\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 ProtonMail Bridge SMTP.\n   * @param mail - The email message to send\n   */\n  async sendMail(mail: Mailable): Promise<void> {\n    await this.transporter.sendMail({\n      from: mail.from || this.defaultFrom,\n      to: prepareEmails(mail.to),\n      cc: prepareEmails(mail.cc),\n      bcc: prepareEmails(mail.bcc),\n      subject: mail.subject,\n      text: await mail.getTextContent(),\n      html: await mail.getHtmlContent(),\n    });\n  }\n}\n"],"mappings":";;AACA,SAAS,aAAa,qBAAqB;AA2BpC,MAAM,mBAA6C;AAAA,EA5B1D,OA4B0D;AAAA;AAAA;AAAA,EAChD,cAAsB;AAAA,EACtB;AAAA,EACR,OAAe;AAAA;AAAA;AAAA;AAAA;AAAA,EAMf,YAAY,UAA6C,CAAC,GAAG;AAC3D,QAAI,CAAC,mBAAmB,kBAAkB;AACxC,yBAAmB,mBAAmB,YAAY,YAAY;AAAA,IAChE;AACA,SAAK,cAAc,QAAQ,gBAAgB;AAG3C,UAAM,OACJ,QAAQ,eAAe,QAAQ,IAAI,0BAA0B;AAC/D,UAAM,OACJ,QAAQ,eACR,SAAS,QAAQ,IAAI,0BAA0B,MAAM;AACvD,UAAM,WAAW,QAAQ,YAAY,QAAQ,IAAI,uBAAuB;AACxE,UAAM,WAAW,QAAQ,YAAY,QAAQ,IAAI,uBAAuB;AAExE,SAAK,cAAc,mBAAmB,iBAAiB,gBAAgB;AAAA,MACrE;AAAA,MACA;AAAA,MACA,QAAQ;AAAA;AAAA,MACR,MAAM;AAAA,QACJ,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA,KAAK;AAAA;AAAA;AAAA,QAGH,oBAAoB,QAAQ,uBAAuB;AAAA,MACrD;AAAA,IACF,CAAC;AAAA,EACH;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,KAAK,YAAY,SAAS;AAAA,MAC9B,MAAM,KAAK,QAAQ,KAAK;AAAA,MACxB,IAAI,cAAc,KAAK,EAAE;AAAA,MACzB,IAAI,cAAc,KAAK,EAAE;AAAA,MACzB,KAAK,cAAc,KAAK,GAAG;AAAA,MAC3B,SAAS,KAAK;AAAA,MACd,MAAM,MAAM,KAAK,eAAe;AAAA,MAChC,MAAM,MAAM,KAAK,eAAe;AAAA,IAClC,CAAC;AAAA,EACH;AACF;","names":[]}