Cap self-serve gate relay timers

This commit is contained in:
Jeppe B
2026-06-01 23:45:20 +02:00
parent e3b38519fb
commit 3b3ed31bb7
6 changed files with 51 additions and 2 deletions
+2 -1
View File
@@ -18,6 +18,7 @@ const DEFAULT_UPDATE_VERIFY_INTERVAL_MS = 500;
const DEFAULT_UPDATE_RESTART_GRACE_MS = 150;
const DEFAULT_BROKER_RECONNECT_DELAY_MS = 1500;
const DEFAULT_SHELLY_LOCAL_HTTP_TIMEOUT_MS = 1200;
const MAX_RELAY_TOGGLE_AFTER_SECONDS = 5;
const UPDATE_VERIFY_COMMAND = "post-update-verify";
const execFile = promisify(execFileCallback);
@@ -482,7 +483,7 @@ function resolveRelayToggleAfterSeconds(payload = {}) {
return null;
}
return Math.floor(configured);
return Math.min(Math.floor(configured), MAX_RELAY_TOGGLE_AFTER_SECONDS);
}
async function fetchJson(url, fetchImpl = fetch, options = {}) {
+25
View File
@@ -271,6 +271,31 @@ test("relay switch commands pass timer values to local Shelly APIs", async () =>
"http://10.1.0.31/rpc/Switch.Set?id=0&on=true&toggle_after=3",
"http://10.1.0.31/relay/0?turn=on&timer=3",
]);
const cappedUrls = [];
const cappedFetch = async (url) => {
cappedUrls.push(String(url));
return {
ok: true,
async json() {
return { output: true };
},
};
};
await setRelayState({
localIp: "10.1.0.31",
channel: 0,
on: true,
toggle_after: 999999999,
device_generation: 3,
}, cappedFetch);
assert.equal(
cappedUrls[0],
"http://10.1.0.31/rpc/Switch.Set?id=0&on=true&toggle_after=5"
);
});
test("runUpdate stages a pending verification restart after installing new artifacts", async () => {