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();
});
}