/** * Try to get door info */ exports.handler = async function(context, event, callback) { const response = new Twilio.Response(); let door = event.door; const buzzer = event.buzzer?.slice(-10); if (!door && !buzzer) { response.setStatusCode(400); return callback(null, response); } const ddbPath = Runtime.getFunctions()['common/ddb'].path; const ddb = require(ddbPath); const client = ddb.createDDBClient(context); if (buzzer) { door = await client.send(ddb.getDoorAliasCommand(buzzer)) .then(async (alias) => { if (!alias.Item) { response .setStatusCode(404) .appendHeader('Content-Type', 'application/json') .setBody({ err: "This buzzer is not registered" }); return undefined; } return alias.Item.name.S; }); } if (door) { const config = await client.send(ddb.getDoorConfigCommand(door)); if (!config.Item) { response .setStatusCode(404) .appendHeader('Content-Type', 'application/json') .setBody({ err: "This buzzer is not registered properly" }); } else { if (buzzer) { response .setStatusCode(200) .appendHeader('Content-Type', 'application/json') .setBody({ buzzer, door, fallbackNumbers: config.Item.fallbackNumbers.SS, }); } else { await client.send(ddb.getLockStatusCommand(door)) .then(async (lock) => { const status = ddb.isLockOpen(lock) ? "OPEN": "CLOSED"; response .setStatusCode(200) .appendHeader('Content-Type', 'application/json') .setBody({ id: door, timeout: config.Item.timeout.N, status, buzzerCode: config.Item.buzzerCode.S }); }).catch((e) => { console.log(e); response .setStatusCode(500) .appendHeader('Content-Type', 'application/json') .setBody({ err: e }); }); } } } await client.destroy(); return callback(null, response); };