function jsonMsgSuffix(jsonString) { if (!jsonString) { return ""; } try { const fingerprint = JSON.parse(jsonString); return `\`\`\`# Unlocked by\n${JSON.stringify(fingerprint, null, 4)}\`\`\``; } catch (e) { return `\`\`\`# Unlocked by\n# WARN: Unknown or corrupt raw fingerprint:\n ${jsonString}\`\`\``; } } exports.handler = async function(context, event, callback) { const response = new Twilio.Response(); const discordPath = Runtime.getFunctions()['common/discord'].path; const discord = require(discordPath); let users = event.discordUser; let msgs = event.msg; let jsons = event.json; let promises = []; try { users = JSON.parse(users); msgs = JSON.parse(msgs); console.log("before parsing", jsons); jsons = JSON.parse(jsons); console.log("after parsing", jsons); promises = msgs.map((msg, i) => discord.sendMessageToUser( context, users[i], msg + jsonMsgSuffix(jsons[i]) ).catch(e => console.error(e)) ); } catch (e) { console.error(e); response .setStatusCode(500) .appendHeader('Content-Type', 'application/json') .setBody({ err: e, event }); return callback(null, response); } let timer = setTimeout(() => { console.log("Ungraceful finish: running out of time"); callback(null, response); }, 9500); await Promise.all(promises); clearTimeout(timer); return callback(null, response); };