47 lines
1.4 KiB
TypeScript
47 lines
1.4 KiB
TypeScript
import { describe, expect, it } from "vitest";
|
|
import {
|
|
DEFAULT_DANGEROUS_NODE_COMMANDS,
|
|
resolveNodeCommandAllowlist,
|
|
} from "./node-command-policy.js";
|
|
|
|
describe("resolveNodeCommandAllowlist", () => {
|
|
it("includes iOS service commands by default", () => {
|
|
const allow = resolveNodeCommandAllowlist(
|
|
{},
|
|
{
|
|
platform: "ios 26.0",
|
|
deviceFamily: "iPhone",
|
|
},
|
|
);
|
|
|
|
expect(allow.has("device.info")).toBe(true);
|
|
expect(allow.has("device.status")).toBe(true);
|
|
expect(allow.has("system.notify")).toBe(true);
|
|
expect(allow.has("contacts.search")).toBe(true);
|
|
expect(allow.has("calendar.events")).toBe(true);
|
|
expect(allow.has("reminders.list")).toBe(true);
|
|
expect(allow.has("photos.latest")).toBe(true);
|
|
expect(allow.has("motion.activity")).toBe(true);
|
|
|
|
for (const cmd of DEFAULT_DANGEROUS_NODE_COMMANDS) {
|
|
expect(allow.has(cmd)).toBe(false);
|
|
}
|
|
});
|
|
|
|
it("can explicitly allow dangerous commands via allowCommands", () => {
|
|
const allow = resolveNodeCommandAllowlist(
|
|
{
|
|
gateway: {
|
|
nodes: {
|
|
allowCommands: ["camera.snap", "screen.record"],
|
|
},
|
|
},
|
|
},
|
|
{ platform: "ios", deviceFamily: "iPhone" },
|
|
);
|
|
expect(allow.has("camera.snap")).toBe(true);
|
|
expect(allow.has("screen.record")).toBe(true);
|
|
expect(allow.has("camera.clip")).toBe(false);
|
|
});
|
|
});
|