async function preparePayload()

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