@camstack/addon-provider-velux 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
@@ -19915,7 +19915,17 @@ var EventDensityBucketSchema = object({
19915
19915
  bucketStart: number(),
19916
19916
  motion: number().int(),
19917
19917
  object: number().int(),
19918
- audio: number().int()
19918
+ audio: number().int(),
19919
+ /**
19920
+ * Energy-weighted mean dBFS of the audio events in this bucket — the LEVEL,
19921
+ * as opposed to `audio`, which is their COUNT (D431).
19922
+ *
19923
+ * ABSENT when the bucket holds no audio event. Absence means "nothing was
19924
+ * measured", which is not the same claim as silence, and a lane that cannot
19925
+ * tell them apart paints a quiet hour at full scale — which is exactly what
19926
+ * the count-on-a-level-meter did.
19927
+ */
19928
+ audioDbfs: number().optional()
19919
19929
  });
19920
19930
  /**
19921
19931
  * One camera's row in a `getEventDensityBatch` answer.
@@ -29930,7 +29940,23 @@ var RecordingRangeSchema = object({
29930
29940
  });
29931
29941
  var RecordingAvailabilitySchema = object({
29932
29942
  deviceId: number(),
29933
- ranges: array(RecordingRangeSchema)
29943
+ ranges: array(RecordingRangeSchema),
29944
+ /**
29945
+ * Every profile this camera has footage in — not only the one `ranges`
29946
+ * describes (D433).
29947
+ *
29948
+ * `ranges` answers for ONE profile by design: the timeline is a single bar,
29949
+ * and enumerating all of them triples the directory reads for a bar that
29950
+ * would look identical. But the answer used to say nothing about that, so a
29951
+ * caller asking "what can I export?" read the single preferred profile as
29952
+ * the only one that exists — on this deployment every camera records `high`
29953
+ * AND `low`, the low tree holding 14 GB for camera 615 alone, and the export
29954
+ * UI could not see it.
29955
+ *
29956
+ * Cheap: it is the same shallow directory read the profile CHOICE already
29957
+ * makes. Ask for a specific profile's ranges with the `profile` input.
29958
+ */
29959
+ profilesWithFootage: array(string())
29934
29960
  });
29935
29961
  var RecordingDaysSchema = object({
29936
29962
  deviceId: number(),
@@ -29956,7 +29982,11 @@ var RecordingDaysSchema = object({
29956
29982
  var RecordingAvailabilityForDeviceSchema = object({
29957
29983
  deviceId: number(),
29958
29984
  read: _enum(["read", "unreadable"]),
29959
- ranges: array(RecordingRangeSchema).readonly()
29985
+ ranges: array(RecordingRangeSchema).readonly(),
29986
+ /** Same field, same meaning, as the singular answer (D433). A row that
29987
+ * dropped it would tell a grid caller the archive holds one profile.
29988
+ * Empty on an `'unreadable'` row: nobody looked. */
29989
+ profilesWithFootage: array(string()).readonly()
29960
29990
  });
29961
29991
  /**
29962
29992
  * One camera's row in a `getDaysWithRecordingsBatch` answer. Same rule as
@@ -30246,7 +30276,14 @@ var ReadWindowBytesResultSchema = discriminatedUnion("kind", [object({
30246
30276
  method(object({
30247
30277
  deviceId: number(),
30248
30278
  fromMs: number(),
30249
- toMs: number()
30279
+ toMs: number(),
30280
+ /**
30281
+ * Answer for THIS profile instead of the preferred one (D433). Absent
30282
+ * keeps the timeline's behaviour — one bar, one profile, one set of
30283
+ * reads. `profilesWithFootage` on the answer says what may be asked
30284
+ * for.
30285
+ */
30286
+ profile: string().optional()
30250
30287
  }), RecordingAvailabilitySchema, {
30251
30288
  kind: "query",
30252
30289
  auth: "protected"
package/dist/addon.mjs CHANGED
@@ -19914,7 +19914,17 @@ var EventDensityBucketSchema = object({
19914
19914
  bucketStart: number(),
19915
19915
  motion: number().int(),
19916
19916
  object: number().int(),
19917
- audio: number().int()
19917
+ audio: number().int(),
19918
+ /**
19919
+ * Energy-weighted mean dBFS of the audio events in this bucket — the LEVEL,
19920
+ * as opposed to `audio`, which is their COUNT (D431).
19921
+ *
19922
+ * ABSENT when the bucket holds no audio event. Absence means "nothing was
19923
+ * measured", which is not the same claim as silence, and a lane that cannot
19924
+ * tell them apart paints a quiet hour at full scale — which is exactly what
19925
+ * the count-on-a-level-meter did.
19926
+ */
19927
+ audioDbfs: number().optional()
19918
19928
  });
19919
19929
  /**
19920
19930
  * One camera's row in a `getEventDensityBatch` answer.
@@ -29929,7 +29939,23 @@ var RecordingRangeSchema = object({
29929
29939
  });
29930
29940
  var RecordingAvailabilitySchema = object({
29931
29941
  deviceId: number(),
29932
- ranges: array(RecordingRangeSchema)
29942
+ ranges: array(RecordingRangeSchema),
29943
+ /**
29944
+ * Every profile this camera has footage in — not only the one `ranges`
29945
+ * describes (D433).
29946
+ *
29947
+ * `ranges` answers for ONE profile by design: the timeline is a single bar,
29948
+ * and enumerating all of them triples the directory reads for a bar that
29949
+ * would look identical. But the answer used to say nothing about that, so a
29950
+ * caller asking "what can I export?" read the single preferred profile as
29951
+ * the only one that exists — on this deployment every camera records `high`
29952
+ * AND `low`, the low tree holding 14 GB for camera 615 alone, and the export
29953
+ * UI could not see it.
29954
+ *
29955
+ * Cheap: it is the same shallow directory read the profile CHOICE already
29956
+ * makes. Ask for a specific profile's ranges with the `profile` input.
29957
+ */
29958
+ profilesWithFootage: array(string())
29933
29959
  });
29934
29960
  var RecordingDaysSchema = object({
29935
29961
  deviceId: number(),
@@ -29955,7 +29981,11 @@ var RecordingDaysSchema = object({
29955
29981
  var RecordingAvailabilityForDeviceSchema = object({
29956
29982
  deviceId: number(),
29957
29983
  read: _enum(["read", "unreadable"]),
29958
- ranges: array(RecordingRangeSchema).readonly()
29984
+ ranges: array(RecordingRangeSchema).readonly(),
29985
+ /** Same field, same meaning, as the singular answer (D433). A row that
29986
+ * dropped it would tell a grid caller the archive holds one profile.
29987
+ * Empty on an `'unreadable'` row: nobody looked. */
29988
+ profilesWithFootage: array(string()).readonly()
29959
29989
  });
29960
29990
  /**
29961
29991
  * One camera's row in a `getDaysWithRecordingsBatch` answer. Same rule as
@@ -30245,7 +30275,14 @@ var ReadWindowBytesResultSchema = discriminatedUnion("kind", [object({
30245
30275
  method(object({
30246
30276
  deviceId: number(),
30247
30277
  fromMs: number(),
30248
- toMs: number()
30278
+ toMs: number(),
30279
+ /**
30280
+ * Answer for THIS profile instead of the preferred one (D433). Absent
30281
+ * keeps the timeline's behaviour — one bar, one profile, one set of
30282
+ * reads. `profilesWithFootage` on the answer says what may be asked
30283
+ * for.
30284
+ */
30285
+ profile: string().optional()
30249
30286
  }), RecordingAvailabilitySchema, {
30250
30287
  kind: "query",
30251
30288
  auth: "protected"
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camstack/addon-provider-velux",
3
- "version": "0.2.92",
3
+ "version": "0.2.93",
4
4
  "description": "Velux KLF-200 device-provider addon for CamStack — local-gateway window + shutter covers (positional, no tilt)",
5
5
  "keywords": [
6
6
  "camstack",