UNPKG

rhombus-node-mcp

Version:
140 lines (139 loc) 5.28 kB
import { postApi } from "../network/network.js"; import { formatTimestamp } from "../util.js"; import { removeNulls } from "../utils/remove-nulls.js"; export async function getFaceEvents(args, timeZone, requestModifiers, sessionId) { // OptionalNullable so that we can remove some fields before sending to the API let filteredArgs = { ...args }; if (filteredArgs.pageRequest && filteredArgs.pageRequest.lastEvaluatedKey === "") { delete filteredArgs.pageRequest.lastEvaluatedKey; } if (filteredArgs.searchFilter) { if (filteredArgs.searchFilter.faceNames && filteredArgs.searchFilter.faceNames.length === 0) { // @ts-expect-error - we can break typing delete filteredArgs.searchFilter.faceNames; } if (filteredArgs.searchFilter.labels && filteredArgs.searchFilter.labels.length === 0) { // @ts-expect-error - we can break typing delete filteredArgs.searchFilter.labels; } if (filteredArgs.searchFilter.hasEmbedding === false) { delete filteredArgs.searchFilter.hasEmbedding; } if (filteredArgs.searchFilter.hasName === false) { delete filteredArgs.searchFilter.hasName; } if (filteredArgs.searchFilter.timestampFilter) { if (filteredArgs.searchFilter.timestampFilter.rangeEnd === null) { delete filteredArgs.searchFilter.timestampFilter.rangeEnd; } if (filteredArgs.searchFilter.timestampFilter.rangeStart === null) { delete filteredArgs.searchFilter.timestampFilter.rangeStart; } } } filteredArgs = removeNulls(filteredArgs); const response = await postApi({ route: "/faceRecognition/faceEvent/findFaceEventsByOrg", body: filteredArgs, modifiers: requestModifiers, sessionId, }); const faceEvents = (response?.faceEvents ?? []).map((event) => ({ deviceUuid: event.deviceUuid, eventTimestampMs: event.eventTimestamp, eventTimestamp: formatTimestamp(event.eventTimestamp, timeZone), faceName: event.faceName, locationUuid: event.locationUuid, personUuid: event.personUuid, thumbnailS3Key: event.thumbnailS3Key, uuid: event.uuid, })); return { faceEvents, lastEvaluatedKey: response?.lastEvaluatedKey, }; } export async function getRegisteredFaces(_args, requestModifiers, sessionId) { return await postApi({ route: "/faceRecognition/person/findPeopleByOrg", body: {}, modifiers: requestModifiers, sessionId, }); } export async function getPersonLabels(requestModifiers, sessionId) { return await postApi({ route: "/faceRecognition/person/findPersonLabelsByOrg", body: {}, modifiers: requestModifiers, sessionId, }); } export async function searchSimilarFaces(faceEventUuid, timeZone, requestModifiers, sessionId) { const res = await postApi({ route: "/faceRecognition/faceEvent/findSimilarFaceEvents", body: { faceEventUuid }, modifiers: requestModifiers, sessionId, }); if (res.error) throw new Error(JSON.stringify(res)); return (res.faceEvents || []).map((event) => ({ uuid: event.uuid ?? undefined, deviceUuid: event.deviceUuid ?? undefined, personUuid: event.personUuid ?? undefined, similarity: event.similarity ?? undefined, eventTimestampMs: event.eventTimestamp ?? undefined, eventTimestamp: event.eventTimestamp ? formatTimestamp(event.eventTimestamp, timeZone) : undefined, })); } export async function getFaceMatchmakers(requestModifiers, sessionId) { const res = await postApi({ route: "/faceRecognition/matchmaker/findFaceMatchmakersByOrg", body: {}, modifiers: requestModifiers, sessionId, }); if (res.error) throw new Error(JSON.stringify(res)); return (res.faceMatchmakers || []).map((m) => ({ uuid: m.uuid ?? undefined, personUuid: m.personUuid ?? undefined, name: m.name ?? undefined, })); } export async function getFaceEventsByPerson(personUuid, timeZone, requestModifiers, sessionId) { const res = await postApi({ route: "/faceRecognition/faceEvent/findFaceEventsByOrg", body: { pageRequest: { maxPageSize: 75 }, searchFilter: { personUuids: [personUuid], deviceUuids: [], faceNames: [], labels: [], locationUuids: [], }, }, modifiers: requestModifiers, sessionId, }); if (res.error) throw new Error(JSON.stringify(res)); const faceEvents = (res.faceEvents || []).map((event) => ({ uuid: event.uuid ?? undefined, personUuid: event.personUuid ?? undefined, eventTimestamp: event.eventTimestamp ? formatTimestamp(event.eventTimestamp, timeZone) : undefined, deviceUuid: event.deviceUuid ?? undefined, })); return { faceEvents, lastEvaluatedKey: res.lastEvaluatedKey, }; }