/** * Try to update door status */ exports.handler = async function(context, event, callback) { const response = new Twilio.Response(); const door = event.door; if (!door) { response.setStatusCode(400); return callback(null, response); } const ddbPath = Runtime.getFunctions()['common/ddb'].path; const ddb = require(ddbPath); const client = ddb.createDDBClient(context); await client.send(ddb.getLockStatusCommand(door)) .then(async (lock) => { const isOpen = ddb.isLockOpen(lock); if (isOpen) { const fingerprint = JSON.parse(lock.Item.fingerprint.S); response .setStatusCode(200) .appendHeader('Content-Type', 'application/json') .setBody({ status: "OPEN", fingerprint, }); await client.send(ddb.clearLockStatusCommand(lock)); return; } response .setStatusCode(401) .appendHeader('Content-Type', 'application/json') .setBody({ status: "CLOSED", }); }).catch((e) => { console.log(e); response .setStatusCode(500) .appendHeader('Content-Type', 'application/json') .setBody({ err: e }); }); await client.destroy(); return callback(null, response); };