@camstack/addon-provider-dreo 0.2.92 → 0.2.93

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/addon.js CHANGED
@@ -19968,7 +19968,17 @@ var EventDensityBucketSchema = object({
19968
19968
  bucketStart: number(),
19969
19969
  motion: number().int(),
19970
19970
  object: number().int(),
19971
- audio: number().int()
19971
+ audio: number().int(),
19972
+ /**
19973
+ * Energy-weighted mean dBFS of the audio events in this bucket — the LEVEL,
19974
+ * as opposed to `audio`, which is their COUNT (D431).
19975
+ *
19976
+ * ABSENT when the bucket holds no audio event. Absence means "nothing was
19977
+ * measured", which is not the same claim as silence, and a lane that cannot
19978
+ * tell them apart paints a quiet hour at full scale — which is exactly what
19979
+ * the count-on-a-level-meter did.
19980
+ */
19981
+ audioDbfs: number().optional()
19972
19982
  });
19973
19983
  /**
19974
19984
  * One camera's row in a `getEventDensityBatch` answer.
@@ -29991,7 +30001,23 @@ var RecordingRangeSchema = object({
29991
30001
  });
29992
30002
  var RecordingAvailabilitySchema = object({
29993
30003
  deviceId: number(),
29994
- ranges: array(RecordingRangeSchema)
30004
+ ranges: array(RecordingRangeSchema),
30005
+ /**
30006
+ * Every profile this camera has footage in — not only the one `ranges`
30007
+ * describes (D433).
30008
+ *
30009
+ * `ranges` answers for ONE profile by design: the timeline is a single bar,
30010
+ * and enumerating all of them triples the directory reads for a bar that
30011
+ * would look identical. But the answer used to say nothing about that, so a
30012
+ * caller asking "what can I export?" read the single preferred profile as
30013
+ * the only one that exists — on this deployment every camera records `high`
30014
+ * AND `low`, the low tree holding 14 GB for camera 615 alone, and the export
30015
+ * UI could not see it.
30016
+ *
30017
+ * Cheap: it is the same shallow directory read the profile CHOICE already
30018
+ * makes. Ask for a specific profile's ranges with the `profile` input.
30019
+ */
30020
+ profilesWithFootage: array(string())
29995
30021
  });
29996
30022
  var RecordingDaysSchema = object({
29997
30023
  deviceId: number(),
@@ -30017,7 +30043,11 @@ var RecordingDaysSchema = object({
30017
30043
  var RecordingAvailabilityForDeviceSchema = object({
30018
30044
  deviceId: number(),
30019
30045
  read: _enum(["read", "unreadable"]),
30020
- ranges: array(RecordingRangeSchema).readonly()
30046
+ ranges: array(RecordingRangeSchema).readonly(),
30047
+ /** Same field, same meaning, as the singular answer (D433). A row that
30048
+ * dropped it would tell a grid caller the archive holds one profile.
30049
+ * Empty on an `'unreadable'` row: nobody looked. */
30050
+ profilesWithFootage: array(string()).readonly()
30021
30051
  });
30022
30052
  /**
30023
30053
  * One camera's row in a `getDaysWithRecordingsBatch` answer. Same rule as
@@ -30307,7 +30337,14 @@ var ReadWindowBytesResultSchema = discriminatedUnion("kind", [object({
30307
30337
  method(object({
30308
30338
  deviceId: number(),
30309
30339
  fromMs: number(),
30310
- toMs: number()
30340
+ toMs: number(),
30341
+ /**
30342
+ * Answer for THIS profile instead of the preferred one (D433). Absent
30343
+ * keeps the timeline's behaviour — one bar, one profile, one set of
30344
+ * reads. `profilesWithFootage` on the answer says what may be asked
30345
+ * for.
30346
+ */
30347
+ profile: string().optional()
30311
30348
  }), RecordingAvailabilitySchema, {
30312
30349
  kind: "query",
30313
30350
  auth: "protected"
package/dist/addon.mjs CHANGED
@@ -19969,7 +19969,17 @@ var EventDensityBucketSchema = object({
19969
19969
  bucketStart: number(),
19970
19970
  motion: number().int(),
19971
19971
  object: number().int(),
19972
- audio: number().int()
19972
+ audio: number().int(),
19973
+ /**
19974
+ * Energy-weighted mean dBFS of the audio events in this bucket — the LEVEL,
19975
+ * as opposed to `audio`, which is their COUNT (D431).
19976
+ *
19977
+ * ABSENT when the bucket holds no audio event. Absence means "nothing was
19978
+ * measured", which is not the same claim as silence, and a lane that cannot
19979
+ * tell them apart paints a quiet hour at full scale — which is exactly what
19980
+ * the count-on-a-level-meter did.
19981
+ */
19982
+ audioDbfs: number().optional()
19973
19983
  });
19974
19984
  /**
19975
19985
  * One camera's row in a `getEventDensityBatch` answer.
@@ -29992,7 +30002,23 @@ var RecordingRangeSchema = object({
29992
30002
  });
29993
30003
  var RecordingAvailabilitySchema = object({
29994
30004
  deviceId: number(),
29995
- ranges: array(RecordingRangeSchema)
30005
+ ranges: array(RecordingRangeSchema),
30006
+ /**
30007
+ * Every profile this camera has footage in — not only the one `ranges`
30008
+ * describes (D433).
30009
+ *
30010
+ * `ranges` answers for ONE profile by design: the timeline is a single bar,
30011
+ * and enumerating all of them triples the directory reads for a bar that
30012
+ * would look identical. But the answer used to say nothing about that, so a
30013
+ * caller asking "what can I export?" read the single preferred profile as
30014
+ * the only one that exists — on this deployment every camera records `high`
30015
+ * AND `low`, the low tree holding 14 GB for camera 615 alone, and the export
30016
+ * UI could not see it.
30017
+ *
30018
+ * Cheap: it is the same shallow directory read the profile CHOICE already
30019
+ * makes. Ask for a specific profile's ranges with the `profile` input.
30020
+ */
30021
+ profilesWithFootage: array(string())
29996
30022
  });
29997
30023
  var RecordingDaysSchema = object({
29998
30024
  deviceId: number(),
@@ -30018,7 +30044,11 @@ var RecordingDaysSchema = object({
30018
30044
  var RecordingAvailabilityForDeviceSchema = object({
30019
30045
  deviceId: number(),
30020
30046
  read: _enum(["read", "unreadable"]),
30021
- ranges: array(RecordingRangeSchema).readonly()
30047
+ ranges: array(RecordingRangeSchema).readonly(),
30048
+ /** Same field, same meaning, as the singular answer (D433). A row that
30049
+ * dropped it would tell a grid caller the archive holds one profile.
30050
+ * Empty on an `'unreadable'` row: nobody looked. */
30051
+ profilesWithFootage: array(string()).readonly()
30022
30052
  });
30023
30053
  /**
30024
30054
  * One camera's row in a `getDaysWithRecordingsBatch` answer. Same rule as
@@ -30308,7 +30338,14 @@ var ReadWindowBytesResultSchema = discriminatedUnion("kind", [object({
30308
30338
  method(object({
30309
30339
  deviceId: number(),
30310
30340
  fromMs: number(),
30311
- toMs: number()
30341
+ toMs: number(),
30342
+ /**
30343
+ * Answer for THIS profile instead of the preferred one (D433). Absent
30344
+ * keeps the timeline's behaviour — one bar, one profile, one set of
30345
+ * reads. `profilesWithFootage` on the answer says what may be asked
30346
+ * for.
30347
+ */
30348
+ profile: string().optional()
30312
30349
  }), RecordingAvailabilitySchema, {
30313
30350
  kind: "query",
30314
30351
  auth: "protected"
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camstack/addon-provider-dreo",
3
- "version": "0.2.92",
3
+ "version": "0.2.93",
4
4
  "description": "Dreo smart-device (fan / air-circulator / purifier / heater / humidifier) device-provider addon for CamStack — wraps the @apocaliss92/nodedreo Dreo cloud client (REST + WebSocket)",
5
5
  "keywords": [
6
6
  "camstack",