@camstack/addon-provider-rademacher 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
@@ -20900,7 +20900,17 @@ var EventDensityBucketSchema = object({
20900
20900
  bucketStart: number(),
20901
20901
  motion: number().int(),
20902
20902
  object: number().int(),
20903
- audio: number().int()
20903
+ audio: number().int(),
20904
+ /**
20905
+ * Energy-weighted mean dBFS of the audio events in this bucket — the LEVEL,
20906
+ * as opposed to `audio`, which is their COUNT (D431).
20907
+ *
20908
+ * ABSENT when the bucket holds no audio event. Absence means "nothing was
20909
+ * measured", which is not the same claim as silence, and a lane that cannot
20910
+ * tell them apart paints a quiet hour at full scale — which is exactly what
20911
+ * the count-on-a-level-meter did.
20912
+ */
20913
+ audioDbfs: number().optional()
20904
20914
  });
20905
20915
  /**
20906
20916
  * One camera's row in a `getEventDensityBatch` answer.
@@ -30915,7 +30925,23 @@ var RecordingRangeSchema = object({
30915
30925
  });
30916
30926
  var RecordingAvailabilitySchema = object({
30917
30927
  deviceId: number(),
30918
- ranges: array(RecordingRangeSchema)
30928
+ ranges: array(RecordingRangeSchema),
30929
+ /**
30930
+ * Every profile this camera has footage in — not only the one `ranges`
30931
+ * describes (D433).
30932
+ *
30933
+ * `ranges` answers for ONE profile by design: the timeline is a single bar,
30934
+ * and enumerating all of them triples the directory reads for a bar that
30935
+ * would look identical. But the answer used to say nothing about that, so a
30936
+ * caller asking "what can I export?" read the single preferred profile as
30937
+ * the only one that exists — on this deployment every camera records `high`
30938
+ * AND `low`, the low tree holding 14 GB for camera 615 alone, and the export
30939
+ * UI could not see it.
30940
+ *
30941
+ * Cheap: it is the same shallow directory read the profile CHOICE already
30942
+ * makes. Ask for a specific profile's ranges with the `profile` input.
30943
+ */
30944
+ profilesWithFootage: array(string())
30919
30945
  });
30920
30946
  var RecordingDaysSchema = object({
30921
30947
  deviceId: number(),
@@ -30941,7 +30967,11 @@ var RecordingDaysSchema = object({
30941
30967
  var RecordingAvailabilityForDeviceSchema = object({
30942
30968
  deviceId: number(),
30943
30969
  read: _enum(["read", "unreadable"]),
30944
- ranges: array(RecordingRangeSchema).readonly()
30970
+ ranges: array(RecordingRangeSchema).readonly(),
30971
+ /** Same field, same meaning, as the singular answer (D433). A row that
30972
+ * dropped it would tell a grid caller the archive holds one profile.
30973
+ * Empty on an `'unreadable'` row: nobody looked. */
30974
+ profilesWithFootage: array(string()).readonly()
30945
30975
  });
30946
30976
  /**
30947
30977
  * One camera's row in a `getDaysWithRecordingsBatch` answer. Same rule as
@@ -31231,7 +31261,14 @@ var ReadWindowBytesResultSchema = discriminatedUnion("kind", [object({
31231
31261
  method(object({
31232
31262
  deviceId: number(),
31233
31263
  fromMs: number(),
31234
- toMs: number()
31264
+ toMs: number(),
31265
+ /**
31266
+ * Answer for THIS profile instead of the preferred one (D433). Absent
31267
+ * keeps the timeline's behaviour — one bar, one profile, one set of
31268
+ * reads. `profilesWithFootage` on the answer says what may be asked
31269
+ * for.
31270
+ */
31271
+ profile: string().optional()
31235
31272
  }), RecordingAvailabilitySchema, {
31236
31273
  kind: "query",
31237
31274
  auth: "protected"
package/dist/addon.mjs CHANGED
@@ -20899,7 +20899,17 @@ var EventDensityBucketSchema = object({
20899
20899
  bucketStart: number(),
20900
20900
  motion: number().int(),
20901
20901
  object: number().int(),
20902
- audio: number().int()
20902
+ audio: number().int(),
20903
+ /**
20904
+ * Energy-weighted mean dBFS of the audio events in this bucket — the LEVEL,
20905
+ * as opposed to `audio`, which is their COUNT (D431).
20906
+ *
20907
+ * ABSENT when the bucket holds no audio event. Absence means "nothing was
20908
+ * measured", which is not the same claim as silence, and a lane that cannot
20909
+ * tell them apart paints a quiet hour at full scale — which is exactly what
20910
+ * the count-on-a-level-meter did.
20911
+ */
20912
+ audioDbfs: number().optional()
20903
20913
  });
20904
20914
  /**
20905
20915
  * One camera's row in a `getEventDensityBatch` answer.
@@ -30914,7 +30924,23 @@ var RecordingRangeSchema = object({
30914
30924
  });
30915
30925
  var RecordingAvailabilitySchema = object({
30916
30926
  deviceId: number(),
30917
- ranges: array(RecordingRangeSchema)
30927
+ ranges: array(RecordingRangeSchema),
30928
+ /**
30929
+ * Every profile this camera has footage in — not only the one `ranges`
30930
+ * describes (D433).
30931
+ *
30932
+ * `ranges` answers for ONE profile by design: the timeline is a single bar,
30933
+ * and enumerating all of them triples the directory reads for a bar that
30934
+ * would look identical. But the answer used to say nothing about that, so a
30935
+ * caller asking "what can I export?" read the single preferred profile as
30936
+ * the only one that exists — on this deployment every camera records `high`
30937
+ * AND `low`, the low tree holding 14 GB for camera 615 alone, and the export
30938
+ * UI could not see it.
30939
+ *
30940
+ * Cheap: it is the same shallow directory read the profile CHOICE already
30941
+ * makes. Ask for a specific profile's ranges with the `profile` input.
30942
+ */
30943
+ profilesWithFootage: array(string())
30918
30944
  });
30919
30945
  var RecordingDaysSchema = object({
30920
30946
  deviceId: number(),
@@ -30940,7 +30966,11 @@ var RecordingDaysSchema = object({
30940
30966
  var RecordingAvailabilityForDeviceSchema = object({
30941
30967
  deviceId: number(),
30942
30968
  read: _enum(["read", "unreadable"]),
30943
- ranges: array(RecordingRangeSchema).readonly()
30969
+ ranges: array(RecordingRangeSchema).readonly(),
30970
+ /** Same field, same meaning, as the singular answer (D433). A row that
30971
+ * dropped it would tell a grid caller the archive holds one profile.
30972
+ * Empty on an `'unreadable'` row: nobody looked. */
30973
+ profilesWithFootage: array(string()).readonly()
30944
30974
  });
30945
30975
  /**
30946
30976
  * One camera's row in a `getDaysWithRecordingsBatch` answer. Same rule as
@@ -31230,7 +31260,14 @@ var ReadWindowBytesResultSchema = discriminatedUnion("kind", [object({
31230
31260
  method(object({
31231
31261
  deviceId: number(),
31232
31262
  fromMs: number(),
31233
- toMs: number()
31263
+ toMs: number(),
31264
+ /**
31265
+ * Answer for THIS profile instead of the preferred one (D433). Absent
31266
+ * keeps the timeline's behaviour — one bar, one profile, one set of
31267
+ * reads. `profilesWithFootage` on the answer says what may be asked
31268
+ * for.
31269
+ */
31270
+ profile: string().optional()
31234
31271
  }), RecordingAvailabilitySchema, {
31235
31272
  kind: "query",
31236
31273
  auth: "protected"
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camstack/addon-provider-rademacher",
3
- "version": "0.2.91",
3
+ "version": "0.2.92",
4
4
  "description": "Rademacher HomePilot device-provider addon for CamStack — wraps the @apocaliss92/noderademacher local-hub client (roller shutters over the cover cap)",
5
5
  "keywords": [
6
6
  "camstack",