@camstack/addon-decoder-ffmpeg 1.2.57 → 1.2.58

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -18972,7 +18972,20 @@ var RecentTracksQueryInput = object({
18972
18972
  projection: TrackProjectionSchema.optional(),
18973
18973
  /** Include stationary-promoted rows (parked objects). Default false: the
18974
18974
  * feed lists passages; parking records live on the stationary registry. */
18975
- includeStationary: boolean().optional()
18975
+ includeStationary: boolean().optional(),
18976
+ /**
18977
+ * Restrict to these track classes. ABSENT or EMPTY means no filter.
18978
+ *
18979
+ * The same filter `listTracks` takes, because the timeline's class chips must
18980
+ * mean the same thing whether the scope is one camera or twelve. Until this
18981
+ * existed the scoped feed downloaded a page and narrowed it on the phone
18982
+ * while the single-camera path narrowed the read — one filter, two costs.
18983
+ *
18984
+ * A SUPERSET prefilter on `classes[]`, like its single-camera twin: rows
18985
+ * whose class list is unreadable are kept, and the client's rule stays the
18986
+ * exact one.
18987
+ */
18988
+ classes: array(string()).optional()
18976
18989
  });
18977
18990
  var RecentTracksPageSchema = object({
18978
18991
  /** Merged page, ordered by (`lastSeen` DESC, `trackId` DESC). */
@@ -23010,8 +23023,22 @@ DeviceType.Automation, method(object({ deviceId: number().int().nonnegative() })
23010
23023
  * threshold.
23011
23024
  */
23012
23025
  var BatteryStatusSchema = object({
23013
- /** 0..100 inclusive. Firmware-reported. */
23014
- percentage: number().min(0).max(100),
23026
+ /**
23027
+ * 0..100 inclusive, firmware-reported. **`null` means NOT YET KNOWN** — the
23028
+ * provider has registered the capability but no reading has landed.
23029
+ *
23030
+ * It is nullable because it was not, and the only value a provider could
23031
+ * seed with was `0`. A battery camera behind an NVR therefore announced
23032
+ * itself at 0% on every start and corrected itself a moment later, which is
23033
+ * indistinguishable from a real flat battery: it fires the low-battery alert
23034
+ * every time the hub restarts. Unknown is not empty (D315), and on a battery
23035
+ * reading the difference is an alarm.
23036
+ *
23037
+ * `vacuum-control` and `lawn-mower-control` already model it this way.
23038
+ * Consumers must SKIP a null rather than coerce it — `battery-band` already
23039
+ * declines to band a non-finite reading, which is the correct shape.
23040
+ */
23041
+ percentage: number().min(0).max(100).nullable(),
23015
23042
  /**
23016
23043
  * Charging source. `'dc'` covers wall/USB adapters; `'solar'` is
23017
23044
  * Reolink-specific for the Solar Panel 2 accessory (will become
package/dist/index.mjs CHANGED
@@ -18968,7 +18968,20 @@ var RecentTracksQueryInput = object({
18968
18968
  projection: TrackProjectionSchema.optional(),
18969
18969
  /** Include stationary-promoted rows (parked objects). Default false: the
18970
18970
  * feed lists passages; parking records live on the stationary registry. */
18971
- includeStationary: boolean().optional()
18971
+ includeStationary: boolean().optional(),
18972
+ /**
18973
+ * Restrict to these track classes. ABSENT or EMPTY means no filter.
18974
+ *
18975
+ * The same filter `listTracks` takes, because the timeline's class chips must
18976
+ * mean the same thing whether the scope is one camera or twelve. Until this
18977
+ * existed the scoped feed downloaded a page and narrowed it on the phone
18978
+ * while the single-camera path narrowed the read — one filter, two costs.
18979
+ *
18980
+ * A SUPERSET prefilter on `classes[]`, like its single-camera twin: rows
18981
+ * whose class list is unreadable are kept, and the client's rule stays the
18982
+ * exact one.
18983
+ */
18984
+ classes: array(string()).optional()
18972
18985
  });
18973
18986
  var RecentTracksPageSchema = object({
18974
18987
  /** Merged page, ordered by (`lastSeen` DESC, `trackId` DESC). */
@@ -23006,8 +23019,22 @@ DeviceType.Automation, method(object({ deviceId: number().int().nonnegative() })
23006
23019
  * threshold.
23007
23020
  */
23008
23021
  var BatteryStatusSchema = object({
23009
- /** 0..100 inclusive. Firmware-reported. */
23010
- percentage: number().min(0).max(100),
23022
+ /**
23023
+ * 0..100 inclusive, firmware-reported. **`null` means NOT YET KNOWN** — the
23024
+ * provider has registered the capability but no reading has landed.
23025
+ *
23026
+ * It is nullable because it was not, and the only value a provider could
23027
+ * seed with was `0`. A battery camera behind an NVR therefore announced
23028
+ * itself at 0% on every start and corrected itself a moment later, which is
23029
+ * indistinguishable from a real flat battery: it fires the low-battery alert
23030
+ * every time the hub restarts. Unknown is not empty (D315), and on a battery
23031
+ * reading the difference is an alarm.
23032
+ *
23033
+ * `vacuum-control` and `lawn-mower-control` already model it this way.
23034
+ * Consumers must SKIP a null rather than coerce it — `battery-band` already
23035
+ * declines to band a non-finite reading, which is the correct shape.
23036
+ */
23037
+ percentage: number().min(0).max(100).nullable(),
23011
23038
  /**
23012
23039
  * Charging source. `'dc'` covers wall/USB adapters; `'solar'` is
23013
23040
  * Reolink-specific for the Solar Panel 2 accessory (will become
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camstack/addon-decoder-ffmpeg",
3
- "version": "1.2.57",
3
+ "version": "1.2.58",
4
4
  "description": "Standalone ffmpeg-subprocess decoder fallback addon for CamStack",
5
5
  "keywords": [
6
6
  "camstack",