{"version":3,"sources":["jsdelivr-header.js","/npm/nodemailer-sendinblue-transport@2.0.1/lib/transport.js"],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA,ACNA,aAEA,MAAM,GAAK,QAAQ,oBACb,KAAO,QAAQ,aACf,MAAQ,QAAQ,cAChB,OAAS,QAAQ,eACjB,IAAM,QAAQ,YAEd,IAAM,QAAQ,mBAEd,KAAO,QAAQ,UAErB,SAAS,qBAAqB,EAAK,GAC/B,MAAO,GAAG,EAAK,SAAW,6BACtB,EAAK,qBACQ,EAAI,aACzB,CAMA,eAAe,QAAQ,GACnB,QAAQ,OAAO,aAAoB,OAAO,UAC1C,IAAI,EAAS,GACb,UAAW,MAAM,KAAS,EACtB,EAAO,KAAK,GAEhB,OAAO,OAAO,OAAO,EACzB,CAIA,SAAS,eAAe,GACpB,OAAO,EAAU,KAAK,IACX,CAEH,MAAO,EAAQ,QAGf,KAAO,KAAK,cAAc,EAAQ,WAAuB,EAAf,EAAQ,QAG9D,CAEA,eAAe,gBAAgB,GAC3B,IAAK,KAAK,YAAY,EAAW,KAC7B,MAAM,IAAI,MAAM,iCAEpB,IAAK,KAAK,SAAS,EAAW,UAC1B,MAAM,IAAI,MAAM,mCAGpB,GAAI,KAAK,SAAS,EAAW,MACzB,MAAO,CACH,IAAK,EAAW,KAChB,KAAM,EAAW,UAKzB,GAAI,KAAK,SAAS,EAAW,MAAO,CAChC,MAAM,QAAgB,GAAG,SAAS,EAAW,MAC7C,MAAO,CACH,KAAM,EAAW,SACjB,QAAS,EAAQ,SAAS,UAElC,CAEA,GAAI,KAAK,SAAS,EAAW,SACzB,MAAO,CACH,KAAM,EAAW,SACjB,QAC4B,WAAxB,EAAW,SACL,EAAW,QACX,OAAO,KACH,EAAW,QACX,EAAW,UACb,SAAS,WAI7B,GAAI,OAAO,SAAS,EAAW,SAC3B,MAAO,CACH,KAAM,EAAW,SACjB,QAAS,EAAW,QAAQ,SAAS,WAI7C,GAAI,EAAW,mBAAmB,OAAO,SACrC,MAAO,CACH,KAAM,EAAW,SACjB,eAAgB,QAAQ,EAAW,UAAU,SAAS,WAI9D,MAAM,IAAI,MAAM,gCACpB,CAEA,eAAe,kBAAkB,GAC7B,aAAa,QAAQ,IAAI,EAAY,KAAK,GAAM,gBAAgB,KACpE,CAEA,MAAM,UACF,WAAA,EAAY,OAAE,IACV,KAAK,KAAO,IAAI,KAChB,KAAK,QAAU,IAAI,QACnB,KAAK,OAAS,EACd,KAAK,OAAS,IAAI,IAAI,IAAI,4CAC1B,KAAK,QACwB,WAAzB,KAAK,OAAO,SAAwB,MAAM,QAAU,KAAK,OACjE,CAEA,IAAA,CAAK,EAAM,GACP,KAAK,UAAU,GACV,MAAM,GACI,KAAK,YAAY,EAAM,KAEjC,MAAM,IACH,EAAS,KAAM,EAAK,IAEvB,MAAM,EACf,CAEA,eAAM,CAAU,GACZ,MAAM,EAAY,EAAK,QAAQ,eAE/B,IAAK,KAAK,YAAY,EAAU,OAAmC,IAA1B,EAAU,KAAK,OACpD,MAAM,IAAI,MAAM,yCAGpB,MAAO,CACH,QACK,KAAK,YAAY,EAAU,OAC5B,eAAe,EAAU,MAAM,GACnC,GAAI,EAAU,IAAM,eAAe,EAAU,IAC7C,GAAI,EAAU,IAAM,eAAe,EAAU,IAC7C,IAAK,EAAU,KAAO,eAAe,EAAU,KAC/C,QACI,EAAU,aAAe,eAAe,EAAU,aACtD,QAAS,EAAK,KAAK,QACnB,YAAa,EAAK,KAAK,KACvB,YAAa,EAAK,KAAK,KAEvB,QAAU,KAAK,cAAc,EAAK,KAAK,cAEjC,EADA,EAAK,KAAK,QAEhB,OAAQ,EAAK,KAAK,OAClB,KAAM,EAAK,KAAK,KAChB,QAAS,EAAK,KAAK,QACnB,WAAY,EAAK,KAAK,WAEtB,WACI,KAAK,QAAQ,EAAK,KAAK,cACvB,EAAK,KAAK,YAAY,OAAS,QACnB,kBAAkB,EAAK,KAAK,kBAClC,EAElB,CAEA,WAAA,CAAY,EAAM,GACd,OAAO,IAAI,SAAQ,CAAC,EAAS,KACzB,MAAM,EAAW,EAAK,KAAK,UAAY,EAAK,QAAQ,cAC9C,EAAY,EAAK,QAAQ,YAEzB,EAAM,KAAK,QACb,KAAK,OACL,CACI,OAAQ,OACR,QAAS,CACL,UAAW,KAAK,OAChB,eAAgB,mBAChB,OAAQ,sBAGf,IACG,EAAI,YAAY,SAEhB,IAAI,EAAS,GACb,EAAI,GAAG,QAAS,IACZ,EAAO,KAAK,EAAK,IAClB,GAAG,OAAO,KACT,IAAI,EAAO,CAAC,EACZ,IACI,IAAI,EAAO,EAAO,KAAK,IACvB,EAAO,KAAK,MAAM,EACtB,CAAE,MAAO,GAET,CAEA,GAAI,EAAI,YAAc,IAClB,OAAO,EACH,IAAI,MAAM,qBAAqB,EAAK,KAI5C,EAAQ,CACJ,YACA,YACF,GACJ,IAIV,EAAI,GAAG,QAAS,GAChB,EAAI,MAAM,KAAK,UAAU,IACzB,EAAI,KAAK,GAEjB,EAGJ,OAAO,QAAU","file":"/npm/nodemailer-sendinblue-transport@2.0.1/lib/transport.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.39.0.\n * Original file: /npm/nodemailer-sendinblue-transport@2.0.1/lib/transport.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","\"use strict\";\n\nconst fs = require(\"node:fs/promises\");\nconst http = require(\"node:http\");\nconst https = require(\"node:https\");\nconst stream = require(\"node:stream\");\nconst url = require(\"node:url\");\n\nconst pkg = require(\"../package.json\");\n\nconst util = require(\"./util\");\n\nfunction responseErrorMessage(res, body) {\n    return `${body.message || \"invalid response\"} (code: ${\n        body.code\n    }, statusCode: ${res.statusCode})`;\n}\n\n// Reads all data of 'readable' into a Buffer.\n// Params:\n//   - readable: stream.Readable\n// Returns: Buffer\nasync function readAll(readable) {\n    console.assert(readable instanceof stream.Readable);\n    let chunks = [];\n    for await (const chunk of readable) {\n        chunks.push(chunk);\n    }\n    return Buffer.concat(chunks);\n}\n\n// Removes empty 'name' fields and moves the 'address' field into\n// 'email' to be compliant with the sendinblue API.\nfunction fixupAddresses(addresses) {\n    return addresses.map((address) => {\n        return {\n            // Sendinblue wants the address under the 'email' key.\n            email: address.address,\n\n            // An empty name field is not allowed.\n            name: !util.isEmptyString(address.name) ? address.name : undefined,\n        };\n    });\n}\n\nasync function buildAttachment(attachment) {\n    if (!util.isUndefined(attachment.raw)) {\n        throw new Error(\"raw attachments not supported\");\n    }\n    if (!util.isString(attachment.filename)) {\n        throw new Error(\"missing filename for attachment\");\n    }\n\n    if (util.isString(attachment.href)) {\n        return {\n            url: attachment.href,\n            name: attachment.filename,\n        };\n    }\n\n    // Local file.\n    if (util.isString(attachment.path)) {\n        const content = await fs.readFile(attachment.path);\n        return {\n            name: attachment.filename,\n            content: content.toString(\"base64\"),\n        };\n    }\n\n    if (util.isString(attachment.content)) {\n        return {\n            name: attachment.filename,\n            content:\n                attachment.encoding === \"base64\"\n                    ? attachment.content\n                    : Buffer.from(\n                          attachment.content,\n                          attachment.encoding\n                      ).toString(\"base64\"),\n        };\n    }\n\n    if (Buffer.isBuffer(attachment.content)) {\n        return {\n            name: attachment.filename,\n            content: attachment.content.toString(\"base64\"),\n        };\n    }\n\n    if (attachment.content instanceof stream.Readable) {\n        return {\n            name: attachment.filename,\n            content: (await readAll(attachment.content)).toString(\"base64\"),\n        };\n    }\n\n    throw new Error(\"unsupported attachment format\");\n}\n\nasync function buildAttachements(attachments) {\n    return await Promise.all(attachments.map((a) => buildAttachment(a)));\n}\n\nclass Transport {\n    constructor({ apiKey }) {\n        this.name = pkg.name;\n        this.version = pkg.version;\n        this.apiKey = apiKey;\n        this.apiURL = new url.URL(\"https://api.sendinblue.com/v3/smtp/email\");\n        this.request =\n            this.apiURL.protocol === \"https:\" ? https.request : http.request;\n    }\n\n    send(mail, callback) {\n        this.buildBody(mail)\n            .then((body) => {\n                return this.sendRequest(mail, body);\n            })\n            .then((info) => {\n                callback(null, info);\n            })\n            .catch(callback);\n    }\n\n    async buildBody(mail) {\n        const addresses = mail.message.getAddresses();\n\n        if (!util.isUndefined(addresses.from) && addresses.from.length !== 1) {\n            throw new Error(\"multiple from addresses not supported\");\n        }\n\n        return {\n            sender:\n                !util.isUndefined(addresses.from) &&\n                fixupAddresses(addresses.from)[0],\n            to: addresses.to && fixupAddresses(addresses.to),\n            cc: addresses.cc && fixupAddresses(addresses.cc),\n            bcc: addresses.bcc && fixupAddresses(addresses.bcc),\n            replyTo:\n                addresses[\"reply-to\"] && fixupAddresses(addresses[\"reply-to\"]),\n            subject: mail.data.subject,\n            textContent: mail.data.text,\n            htmlContent: mail.data.html,\n            // An empty headers object will be rejected, so omit if necessary.\n            headers: !util.isEmptyObject(mail.data.headers)\n                ? mail.data.headers\n                : undefined,\n            params: mail.data.params,\n            tags: mail.data.tags,\n            batchId: mail.data.batchId,\n            templateId: mail.data.templateId,\n            // An empty array will be rejected, so omit if necessary.\n            attachment:\n                util.isArray(mail.data.attachments) &&\n                mail.data.attachments.length > 0\n                    ? await buildAttachements(mail.data.attachments)\n                    : undefined,\n        };\n    }\n\n    sendRequest(mail, body) {\n        return new Promise((resolve, reject) => {\n            const envelope = mail.data.envelope || mail.message.getEnvelope();\n            const messageId = mail.message.messageId();\n\n            const req = this.request(\n                this.apiURL,\n                {\n                    method: \"POST\",\n                    headers: {\n                        \"api-key\": this.apiKey,\n                        \"content-type\": \"application/json\",\n                        accept: \"application/json\",\n                    },\n                },\n                (res) => {\n                    res.setEncoding(\"utf-8\");\n\n                    let chunks = [];\n                    res.on(\"data\", (data) => {\n                        chunks.push(data);\n                    }).on(\"end\", () => {\n                        let body = {};\n                        try {\n                            let data = chunks.join(\"\");\n                            body = JSON.parse(data);\n                        } catch (err) {\n                            /* Ignore error */\n                        }\n\n                        if (res.statusCode >= 400) {\n                            return reject(\n                                new Error(responseErrorMessage(res, body))\n                            );\n                        }\n\n                        resolve({\n                            messageId,\n                            envelope,\n                        });\n                    });\n                }\n            );\n\n            req.on(\"error\", reject);\n            req.write(JSON.stringify(body));\n            req.end();\n        });\n    }\n}\n\nmodule.exports = Transport;\n"]}