88 lines
2.6 KiB
JavaScript
88 lines
2.6 KiB
JavaScript
/**
|
|
* 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) {
|
|
// respond to twilio CLIENT
|
|
response
|
|
.setStatusCode(200)
|
|
.appendHeader('Content-Type', 'application/json')
|
|
.setBody({
|
|
buzzer,
|
|
door,
|
|
fallbackNumbers: config.Item.fallbackNumbers.SS,
|
|
pressKey: config.Item.pressKey.S,
|
|
discordUsers: config.Item?.discordUsers?.SS || [],
|
|
});
|
|
} else {
|
|
await client.send(ddb.getLockStatusCommand(door))
|
|
.then(async (lock) => {
|
|
const status = ddb.isLockOpen(lock) ? "OPEN": "CLOSED";
|
|
|
|
// respond to UI
|
|
response
|
|
.setStatusCode(200)
|
|
.appendHeader('Content-Type', 'application/json')
|
|
.setBody({
|
|
id: door,
|
|
timeout: config.Item.timeout.N,
|
|
buzzer: config.Item.buzzer.S,
|
|
status,
|
|
buzzerCode: config.Item.buzzerCode.S,
|
|
fallbackNumbers: config.Item.fallbackNumbers.SS,
|
|
pressKey: config.Item.pressKey.S,
|
|
discordUsers: config.Item?.discordUsers?.SS || [],
|
|
greeting: config.Item?.greeting.S || "",
|
|
});
|
|
|
|
}).catch((e) => {
|
|
console.log(e);
|
|
response
|
|
.setStatusCode(500)
|
|
.appendHeader('Content-Type', 'application/json')
|
|
.setBody({ err: e });
|
|
});
|
|
}
|
|
}
|
|
}
|
|
await client.destroy();
|
|
return callback(null, response);
|
|
}; |