Skip to main content

Documentation Index

Fetch the complete documentation index at: https://crsdk.app/llms.txt

Use this file to discover all available pages before exploring further.

Major client-SDK ergonomics refactor and three independent fixes for UI lag that accumulated under long-running sessions.

New

  • cam(id) bound accessormanager.camera(id) returns a BoundCamera with every API method pre-bound to the camera ID. Callers no longer repeat cameraId on every invocation:
    const cam = manager.camera(id);
    await cam.setProperty("iso", { value: "0x320" });
    await cam.afShutter();
    
  • CameraManager now drives discovery polling with auto-reconnect, autoConnect, and event-driven updates. Replaces the older ad-hoc CameraClient + manual polling pattern.

Fixed

  • Poll stacking under idlesetInterval had no in-flight guard, so polls queued after the browser woke and saturated the 6-connection pool. Added isPolling flag in CameraManagerCore.poll().
  • Property-refresh connection exhaustionrefreshProperties fired 12 parallel getProperty GETs; after ~2 minutes all connections were held. Replaced with a single getAllProperties call plus a mutex (isRefreshingRef) against concurrent bursts.
  • Ghost SSE callbacks after reconnectEventStream.off() removed handlers from an internal map but not from the native EventSource. Added nativeListenerMap so off() 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.