in firestore-send-email/functions/lib/index.js [90:200]
async function preparePayload(payload) {
const { template } = payload;
if (templates && template) {
if (!template.name) {
throw new Error(`Template object is missing a 'name' parameter.`);
}
const templateRender = await templates.render(template.name, template.data);
const mergeMessage = payload.message || {};
const attachments = templateRender.attachments
? templateRender.attachments
: mergeMessage.attachments;
payload.message = Object.assign(mergeMessage, templateRender, {
attachments: attachments || [],
});
}
let to = [];
let cc = [];
let bcc = [];
if (typeof payload.to === "string") {
to = [payload.to];
}
else if (payload.to) {
validateFieldArray("to", payload.to);
to = to.concat(payload.to);
}
if (typeof payload.cc === "string") {
cc = [payload.cc];
}
else if (payload.cc) {
validateFieldArray("cc", payload.cc);
cc = cc.concat(payload.cc);
}
if (typeof payload.bcc === "string") {
bcc = [payload.bcc];
}
else if (payload.bcc) {
validateFieldArray("bcc", payload.bcc);
bcc = bcc.concat(payload.bcc);
}
if (!payload.toUids && !payload.ccUids && !payload.bccUids) {
payload.to = to;
payload.cc = cc;
payload.bcc = bcc;
return payload;
}
if (!config_1.default.usersCollection) {
throw new Error("Must specify a users collection to send using uids.");
}
let uids = [];
if (payload.toUids) {
validateFieldArray("toUids", payload.toUids);
uids = uids.concat(payload.toUids);
}
if (payload.ccUids) {
validateFieldArray("ccUids", payload.ccUids);
uids = uids.concat(payload.ccUids);
}
if (payload.bccUids) {
validateFieldArray("bccUids", payload.bccUids);
uids = uids.concat(payload.bccUids);
}
const toFetch = {};
uids.forEach((uid) => (toFetch[uid] = null));
const documents = await db.getAll(...Object.keys(toFetch).map((uid) => db.collection(config_1.default.usersCollection).doc(uid)), {
fieldMask: ["email"],
});
const missingUids = [];
documents.forEach((documentSnapshot) => {
if (documentSnapshot.exists) {
const email = documentSnapshot.get("email");
if (email) {
toFetch[documentSnapshot.id] = email;
}
else {
missingUids.push(documentSnapshot.id);
}
}
else {
missingUids.push(documentSnapshot.id);
}
});
logs.missingUids(missingUids);
if (payload.toUids) {
payload.toUids.forEach((uid) => {
const email = toFetch[uid];
if (email) {
to.push(email);
}
});
}
payload.to = to;
if (payload.ccUids) {
payload.ccUids.forEach((uid) => {
const email = toFetch[uid];
if (email) {
cc.push(email);
}
});
}
payload.cc = cc;
if (payload.bccUids) {
payload.bccUids.forEach((uid) => {
const email = toFetch[uid];
if (email) {
bcc.push(email);
}
});
}
payload.bcc = bcc;
return payload;
}