Martin Dimitrov 24ca5f8e0b
Some checks failed
Build and push Doorman UI / API / docker (push) Failing after 17s
move packages
2024-10-26 11:49:42 -07:00

75 lines
2.1 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) {
response
.setStatusCode(200)
.appendHeader('Content-Type', 'application/json')
.setBody({
buzzer,
door,
fallbackNumbers: config.Item.fallbackNumbers.SS,
pressKey: config.Item.pressKey.S,
});
} 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);
};