async function deliver()

in firestore-send-email/functions/lib/index.js [201:243]


async function deliver(payload, ref) {
    logs.attemptingDelivery(ref);
    const update = {
        "delivery.attempts": admin.firestore.FieldValue.increment(1),
        "delivery.endTime": admin.firestore.FieldValue.serverTimestamp(),
        "delivery.error": null,
        "delivery.leaseExpireTime": null,
    };
    try {
        payload = await preparePayload(payload);
        if (!payload.to.length && !payload.cc.length && !payload.bcc.length) {
            throw new Error("Failed to deliver email. Expected at least 1 recipient.");
        }
        const result = await transport.sendMail(Object.assign(payload.message, {
            from: payload.from || config_1.default.defaultFrom,
            replyTo: payload.replyTo || config_1.default.defaultReplyTo,
            to: payload.to,
            cc: payload.cc,
            bcc: payload.bcc,
            headers: payload.headers || {},
        }));
        const info = {
            messageId: result.messageId || null,
            accepted: result.accepted || [],
            rejected: result.rejected || [],
            pending: result.pending || [],
            response: result.response || null,
        };
        update["delivery.state"] = "SUCCESS";
        update["delivery.info"] = info;
        logs.delivered(ref, info);
    }
    catch (e) {
        update["delivery.state"] = "ERROR";
        update["delivery.error"] = e.toString();
        logs.deliveryError(ref, e);
    }
    // Wrapping in transaction to allow for automatic retries (#48)
    return admin.firestore().runTransaction((transaction) => {
        transaction.update(ref, update);
        return Promise.resolve();
    });
}