rhombus-node-mcp
Version:
MCP server for Rhombus API
61 lines (60 loc) • 1.95 kB
JavaScript
import { postApi } from "./network.js";
import createUuidMap from "./postApiMap.js";
/**
* Get a list of locations from the API.
*
* @param requestModifiers
* @param sessionId
* @returns
*/
export async function getLocations(requestModifiers, sessionId) {
const res = await postApi({
route: "/location/getLocationsV2",
body: {},
modifiers: requestModifiers,
sessionId,
});
if (res.error) {
throw new Error(JSON.stringify(res));
}
return res.locations ?? [];
}
/**
* Get a map of locations by UUID from the API.
*
* @param requestModifiers
* @param sessionId
* @returns
*/
export async function getLocationsMap(requestModifiers, sessionId) {
const locations = await getLocations(requestModifiers, sessionId);
return createUuidMap(locations, "uuid");
}
export async function resolveLocationFromDoorUuids(doorUuids, requestModifiers, sessionId) {
if (doorUuids.length === 0)
return {};
const res = await postApi({
route: "/component/findAccessControlledDoors",
body: {},
modifiers: requestModifiers,
sessionId,
});
if (res.error) {
throw new Error(`Failed to resolve door locations: ${JSON.stringify(res)}`);
}
const requestedDoorUuidSet = new Set(doorUuids);
const locationToDoorsMap = {};
for (const door of res.accessControlledDoors ?? []) {
if (!door?.uuid || !requestedDoorUuidSet.has(door.uuid) || !door.locationUuid)
continue;
if (!locationToDoorsMap[door.locationUuid]) {
locationToDoorsMap[door.locationUuid] = [];
}
locationToDoorsMap[door.locationUuid].push(door.uuid);
}
const locationUuids = Object.keys(locationToDoorsMap);
return {
locationUuid: locationUuids.length === 1 ? locationUuids[0] : undefined,
locationToDoorsMap: locationUuids.length > 0 ? locationToDoorsMap : undefined,
};
}