rhombus-node-mcp
Version:
MCP server for Rhombus API
126 lines (125 loc) • 3.96 kB
JavaScript
import { postApi } from "../network/network.js";
export async function getSavedClips(args, requestModifiers, sessionId) {
const res = await postApi({
route: "/event/getClipsWithProgress",
body: args,
modifiers: requestModifiers,
sessionId,
});
if (res.error)
return { error: res.errorMsg ?? undefined };
return {
savedClips: res.savedClips?.map((clip) => ({
...clip,
createdAtTimestamp: clip.createdAtMs
? new Date(clip.createdAtMs).toISOString()
: null,
})) ?? [],
};
}
export async function getExpiringClips(args, requestModifiers, sessionId) {
const res = await postApi({
route: "/event/getExpiringClipsForOrg",
body: args,
modifiers: requestModifiers,
sessionId,
});
if (res.error)
return { error: res.errorMsg ?? undefined };
return {
expiringClips: res.savedClips?.map((clip) => ({
...clip,
createdAtTimestamp: clip.createdAtMs
? new Date(clip.createdAtMs).toISOString()
: null,
})) ?? [],
};
}
export async function getSharedLiveStreams(_args, requestModifiers, sessionId) {
const res = await postApi({
route: "/camera/findAllSharedLiveVideoStreams",
body: {},
modifiers: requestModifiers,
sessionId,
});
if (res.error)
return { error: res.errorMsg ?? undefined };
return {
sharedLiveVideoStreams: res.sharedLiveVideoStreams ?? [],
};
}
export async function getTimelapseClips(_args, requestModifiers, sessionId) {
const res = await postApi({
route: "/video/getTimelapseClips",
body: {},
modifiers: requestModifiers,
sessionId,
});
if (res.error)
return { error: res.errorMsg ?? undefined };
return {
timelapseClips: res.timelapseClips ?? [],
};
}
export async function getClipGroups(requestModifiers, sessionId) {
const res = await postApi({
route: "/event/getClipGroupsForOrg",
body: {},
modifiers: requestModifiers,
sessionId,
});
if (res.error)
throw new Error(JSON.stringify(res));
return {
clipGroups: (res.clipGroups || []).map((group) => ({
uuid: group.uuid ?? undefined,
name: group.name ?? undefined,
clipCount: group.clipCount ?? undefined,
})),
};
}
export async function getSharedClipGroups(requestModifiers, sessionId) {
const res = await postApi({
route: "/event/getSharedClipGroupsV2",
body: {},
modifiers: requestModifiers,
sessionId,
});
if (res.error)
throw new Error(JSON.stringify(res));
return {
sharedClipGroups: (res.sharedClipGroups || []).map((group) => ({
uuid: group.uuid ?? undefined,
name: group.title ?? undefined,
})),
};
}
export async function createClip(cameraUuid, startTimeMs, endTimeMs, requestModifiers, sessionId) {
const durationSec = Math.round((endTimeMs - startTimeMs) / 1000);
const body = {
deviceUuids: [cameraUuid],
startTimeMillis: startTimeMs,
durationSec,
saveToConsole: true,
};
const res = await postApi({
route: "/video/spliceV3",
body,
modifiers: requestModifiers,
sessionId,
});
if (res.error)
throw new Error(JSON.stringify(res));
return { spliceResult: { success: true, clipUuid: res.clipUuid ?? undefined } };
}
export async function deleteClip(clipUuid, requestModifiers, sessionId) {
const res = await postApi({
route: "/event/deleteSavedClip",
body: { savedClipUuid: clipUuid },
modifiers: requestModifiers,
sessionId,
});
if (res.error)
throw new Error(JSON.stringify(res));
return { deleteResult: { success: true } };
}