UNPKG

rhombus-node-mcp

Version:
61 lines (60 loc) 1.95 kB
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, }; }