UNPKG

rhombus-node-mcp

Version:
66 lines (65 loc) 3.06 kB
import { postApi } from "../network/network.js"; import { getAccessControlledDoors, getAudioGateways, getBadgeReaders, getButtons, getCameraList, getDoorbellCameras, getDoorSensors, getEnvironmentalGateways, getEnvironmentalSensors, getKeypads, getMotionSensors, } from "./get-entity-tool-api.js"; async function getDeviceFeatures(deviceUuid, requestModifiers, sessionId) { const response = await postApi({ route: "/feature/getDeviceFeatures", body: { deviceUuid }, modifiers: requestModifiers, sessionId, }); if (response.error || !response.features) { return null; } return { assignedLicense: response.features.assignedLicense, featureMap: response.features.featureMap, }; } export async function getAllEntities(deviceUuids, timeZone, tempUnit, requestModifiers, sessionId) { const promises = [ getCameraList(requestModifiers, sessionId), getDoorbellCameras(requestModifiers, sessionId), getBadgeReaders(requestModifiers, sessionId), getAccessControlledDoors(requestModifiers, sessionId), getAudioGateways(timeZone, requestModifiers, sessionId), getDoorSensors(requestModifiers, sessionId), getEnvironmentalSensors(timeZone, tempUnit, requestModifiers, sessionId), getMotionSensors(requestModifiers, sessionId), getButtons(timeZone, requestModifiers, sessionId), getKeypads(requestModifiers, sessionId), getEnvironmentalGateways(timeZone, requestModifiers, sessionId), ]; const responses = await Promise.all(promises); // Filter each response to only include devices with matching UUIDs and fetch device features for (let i = 0; i < responses.length; i++) { const response = responses[i]; // Look through keys and find any with an array for (const key of Object.keys(response)) { const value = response[key]; if (Array.isArray(value)) { // Filter to only include devices with matching UUIDs const filteredDevices = value.filter((item) => { return deviceUuids.includes(item.uuid); }); // Fetch device features for each filtered device const devicesWithFeatures = await Promise.all(filteredDevices.map(async (device) => { const features = await getDeviceFeatures(device.uuid, requestModifiers, sessionId); return { ...device, ...(features && { assignedLicense: features.assignedLicense, featureMap: features.featureMap, }), }; })); response[key] = devicesWithFeatures; response[`${key}Count`] = devicesWithFeatures.length; } } } const result = {}; for (const response of responses) { Object.assign(result, response); } return result; }