@camstack/addon-matter-broker 0.2.91 → 0.2.92

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
@@ -19995,7 +19995,17 @@ var EventDensityBucketSchema = object({
19995
19995
  bucketStart: number(),
19996
19996
  motion: number().int(),
19997
19997
  object: number().int(),
19998
- audio: number().int()
19998
+ audio: number().int(),
19999
+ /**
20000
+ * Energy-weighted mean dBFS of the audio events in this bucket — the LEVEL,
20001
+ * as opposed to `audio`, which is their COUNT (D431).
20002
+ *
20003
+ * ABSENT when the bucket holds no audio event. Absence means "nothing was
20004
+ * measured", which is not the same claim as silence, and a lane that cannot
20005
+ * tell them apart paints a quiet hour at full scale — which is exactly what
20006
+ * the count-on-a-level-meter did.
20007
+ */
20008
+ audioDbfs: number().optional()
19999
20009
  });
20000
20010
  /**
20001
20011
  * One camera's row in a `getEventDensityBatch` answer.
@@ -30027,7 +30037,23 @@ var RecordingRangeSchema = object({
30027
30037
  });
30028
30038
  var RecordingAvailabilitySchema = object({
30029
30039
  deviceId: number(),
30030
- ranges: array(RecordingRangeSchema)
30040
+ ranges: array(RecordingRangeSchema),
30041
+ /**
30042
+ * Every profile this camera has footage in — not only the one `ranges`
30043
+ * describes (D433).
30044
+ *
30045
+ * `ranges` answers for ONE profile by design: the timeline is a single bar,
30046
+ * and enumerating all of them triples the directory reads for a bar that
30047
+ * would look identical. But the answer used to say nothing about that, so a
30048
+ * caller asking "what can I export?" read the single preferred profile as
30049
+ * the only one that exists — on this deployment every camera records `high`
30050
+ * AND `low`, the low tree holding 14 GB for camera 615 alone, and the export
30051
+ * UI could not see it.
30052
+ *
30053
+ * Cheap: it is the same shallow directory read the profile CHOICE already
30054
+ * makes. Ask for a specific profile's ranges with the `profile` input.
30055
+ */
30056
+ profilesWithFootage: array(string$2())
30031
30057
  });
30032
30058
  var RecordingDaysSchema = object({
30033
30059
  deviceId: number(),
@@ -30053,7 +30079,11 @@ var RecordingDaysSchema = object({
30053
30079
  var RecordingAvailabilityForDeviceSchema = object({
30054
30080
  deviceId: number(),
30055
30081
  read: _enum(["read", "unreadable"]),
30056
- ranges: array(RecordingRangeSchema).readonly()
30082
+ ranges: array(RecordingRangeSchema).readonly(),
30083
+ /** Same field, same meaning, as the singular answer (D433). A row that
30084
+ * dropped it would tell a grid caller the archive holds one profile.
30085
+ * Empty on an `'unreadable'` row: nobody looked. */
30086
+ profilesWithFootage: array(string$2()).readonly()
30057
30087
  });
30058
30088
  /**
30059
30089
  * One camera's row in a `getDaysWithRecordingsBatch` answer. Same rule as
@@ -30343,7 +30373,14 @@ var ReadWindowBytesResultSchema = discriminatedUnion("kind", [object({
30343
30373
  method(object({
30344
30374
  deviceId: number(),
30345
30375
  fromMs: number(),
30346
- toMs: number()
30376
+ toMs: number(),
30377
+ /**
30378
+ * Answer for THIS profile instead of the preferred one (D433). Absent
30379
+ * keeps the timeline's behaviour — one bar, one profile, one set of
30380
+ * reads. `profilesWithFootage` on the answer says what may be asked
30381
+ * for.
30382
+ */
30383
+ profile: string$2().optional()
30347
30384
  }), RecordingAvailabilitySchema, {
30348
30385
  kind: "query",
30349
30386
  auth: "protected"
package/dist/addon.mjs CHANGED
@@ -19993,7 +19993,17 @@ var EventDensityBucketSchema = object({
19993
19993
  bucketStart: number(),
19994
19994
  motion: number().int(),
19995
19995
  object: number().int(),
19996
- audio: number().int()
19996
+ audio: number().int(),
19997
+ /**
19998
+ * Energy-weighted mean dBFS of the audio events in this bucket — the LEVEL,
19999
+ * as opposed to `audio`, which is their COUNT (D431).
20000
+ *
20001
+ * ABSENT when the bucket holds no audio event. Absence means "nothing was
20002
+ * measured", which is not the same claim as silence, and a lane that cannot
20003
+ * tell them apart paints a quiet hour at full scale — which is exactly what
20004
+ * the count-on-a-level-meter did.
20005
+ */
20006
+ audioDbfs: number().optional()
19997
20007
  });
19998
20008
  /**
19999
20009
  * One camera's row in a `getEventDensityBatch` answer.
@@ -30025,7 +30035,23 @@ var RecordingRangeSchema = object({
30025
30035
  });
30026
30036
  var RecordingAvailabilitySchema = object({
30027
30037
  deviceId: number(),
30028
- ranges: array(RecordingRangeSchema)
30038
+ ranges: array(RecordingRangeSchema),
30039
+ /**
30040
+ * Every profile this camera has footage in — not only the one `ranges`
30041
+ * describes (D433).
30042
+ *
30043
+ * `ranges` answers for ONE profile by design: the timeline is a single bar,
30044
+ * and enumerating all of them triples the directory reads for a bar that
30045
+ * would look identical. But the answer used to say nothing about that, so a
30046
+ * caller asking "what can I export?" read the single preferred profile as
30047
+ * the only one that exists — on this deployment every camera records `high`
30048
+ * AND `low`, the low tree holding 14 GB for camera 615 alone, and the export
30049
+ * UI could not see it.
30050
+ *
30051
+ * Cheap: it is the same shallow directory read the profile CHOICE already
30052
+ * makes. Ask for a specific profile's ranges with the `profile` input.
30053
+ */
30054
+ profilesWithFootage: array(string$2())
30029
30055
  });
30030
30056
  var RecordingDaysSchema = object({
30031
30057
  deviceId: number(),
@@ -30051,7 +30077,11 @@ var RecordingDaysSchema = object({
30051
30077
  var RecordingAvailabilityForDeviceSchema = object({
30052
30078
  deviceId: number(),
30053
30079
  read: _enum(["read", "unreadable"]),
30054
- ranges: array(RecordingRangeSchema).readonly()
30080
+ ranges: array(RecordingRangeSchema).readonly(),
30081
+ /** Same field, same meaning, as the singular answer (D433). A row that
30082
+ * dropped it would tell a grid caller the archive holds one profile.
30083
+ * Empty on an `'unreadable'` row: nobody looked. */
30084
+ profilesWithFootage: array(string$2()).readonly()
30055
30085
  });
30056
30086
  /**
30057
30087
  * One camera's row in a `getDaysWithRecordingsBatch` answer. Same rule as
@@ -30341,7 +30371,14 @@ var ReadWindowBytesResultSchema = discriminatedUnion("kind", [object({
30341
30371
  method(object({
30342
30372
  deviceId: number(),
30343
30373
  fromMs: number(),
30344
- toMs: number()
30374
+ toMs: number(),
30375
+ /**
30376
+ * Answer for THIS profile instead of the preferred one (D433). Absent
30377
+ * keeps the timeline's behaviour — one bar, one profile, one set of
30378
+ * reads. `profilesWithFootage` on the answer says what may be asked
30379
+ * for.
30380
+ */
30381
+ profile: string$2().optional()
30345
30382
  }), RecordingAvailabilitySchema, {
30346
30383
  kind: "query",
30347
30384
  auth: "protected"
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camstack/addon-matter-broker",
3
- "version": "0.2.91",
3
+ "version": "0.2.92",
4
4
  "description": "Matter broker addon for CamStack — owns a Matter fabric (commissioning + the long-lived controller) via the matter.js controller and brokers commissioned Matter nodes into CamStack",
5
5
  "keywords": [
6
6
  "camstack",