src.nth.io/

summaryrefslogtreecommitdiff
path: root/scrypted/diagnostic.ts
diff options
context:
space:
mode:
authorLuke Hoersten <[email protected]>2026-07-17 18:56:17 -0500
committerLuke Hoersten <[email protected]>2026-07-17 18:56:17 -0500
commit0ac000e0db3feb235fae37389d0af18609e91c50 (patch)
treef57c78a0251d04ddbfa41d8044da9f57120b66a5 /scrypted/diagnostic.ts
parent9d94f710f7b00d109bf6f6ee57996f43bce5c67f (diff)
scrypted: code-review fixes — reload drain order, reconnect storm, wake guards
- bootstrap: drain the shutdown-cleaner array FIRST, not after the child re-discovery loop. The old order tore down the listeners the loop had just attached, and since the instance maps still referenced them the attachListener fast-path blocked the 5-min register-cycle self-heal from ever re-attaching after a warm re-paste. The attach cleaner now also invalidates listeners/attachedCameraId (one cleaner per attach), so a drain by another instance can't strand dead registrations either. - stream socket: single-flight reconnect scheduled from 'close' only. A failed connect emits 'error' then 'close'; scheduling from both doubled outstanding attempts every 500ms against a rebooting device. openStreamSocket also destroys the previous socket first. - onRequest wake: same streams/streamStarting guard as every other start path (a concurrent second startStream overwrote the streams entry and orphaned the first ffmpeg), respond 204 immediately (the device's POST times out at 1s — awaiting startStream turned every tap-wake into a firmware state_post_failure), and skip the redundant wake POST back. - startStream: bail-out paths after the wake POST (camera missing, no usable stream, ffmpeg-input conversion failure) now send a compensating sleep instead of stranding the panel on Loading; the last-ditch getVideoStream fallback no longer rejects out of the call. - key streams/streamStarting/stopStream by nativeId — v.name drifts to the nativeId on reload, stranding or duplicating streams keyed under the drifted value; findByName matches display_name first for the same reason. - idle_timeout_ms=0: the Scrypted-side safety timeout still reclaims ffmpeg/socket but no longer POSTs sleep over the always-on setting. - pending bindingDebounce timers cleared across re-paste (they fired against the dead instance and attached duplicate listeners); releaseDevice drops lastRegisterSig/streamStarting/debounce entries. - start() single-flights bootstrap; createDevice drops its redundant second registerViewport; streamLogger rolls its window on quiet ticks (post-lull rates were diluted) and lastLogUs -> lastLogMs; hoist the JPEG EOI needle + resume-scan offset in the demux loop; postJSON drops the dead 204 check; remove unused sandbox declares and the legacy streams.interval field. - tsconfig: moduleResolution Node -> Bundler (removed in TS 6).
Diffstat (limited to 'scrypted/diagnostic.ts')
-rw-r--r--scrypted/diagnostic.ts1
1 files changed, 0 insertions, 1 deletions
diff --git a/scrypted/diagnostic.ts b/scrypted/diagnostic.ts
index e159f1d..e7a3ba3 100644
--- a/scrypted/diagnostic.ts
+++ b/scrypted/diagnostic.ts
@@ -3,7 +3,6 @@
// require() — drives whether the auto-discovery feature can use a
// proper library or has to fall back to raw multicast UDP.
-declare const sdk: any;
declare const require: any;
console.log("------ scriptedEval require() probe ------");