Major client-SDK ergonomics refactor and three independent fixes for UI lag that accumulated under long-running sessions.Documentation Index
Fetch the complete documentation index at: https://crsdk.app/llms.txt
Use this file to discover all available pages before exploring further.
New
cam(id)bound accessor —manager.camera(id)returns aBoundCamerawith every API method pre-bound to the camera ID. Callers no longer repeatcameraIdon every invocation:CameraManagernow drives discovery polling with auto-reconnect,autoConnect, and event-driven updates. Replaces the older ad-hocCameraClient+ manual polling pattern.
Fixed
- Poll stacking under idle —
setIntervalhad no in-flight guard, so polls queued after the browser woke and saturated the 6-connection pool. AddedisPollingflag inCameraManagerCore.poll(). - Property-refresh connection exhaustion —
refreshPropertiesfired 12 parallelgetPropertyGETs; after ~2 minutes all connections were held. Replaced with a singlegetAllPropertiescall plus a mutex (isRefreshingRef) against concurrent bursts. - Ghost SSE callbacks after reconnect —
EventStream.off()removed handlers from an internal map but not from the nativeEventSource. AddednativeListenerMapsooff()reaches both layers. - ISO duplicate entries in
getAllProperties— SDK returns two ISO rows (one read-only, no values; one writable). Server-side dedup now prefers the entry with values/writable.

