@camstack/addon-provider-unifi 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.
@@ -29947,7 +29957,23 @@ var RecordingRangeSchema = object({
29947
29957
  });
29948
29958
  var RecordingAvailabilitySchema = object({
29949
29959
  deviceId: number(),
29950
- ranges: array(RecordingRangeSchema)
29960
+ ranges: array(RecordingRangeSchema),
29961
+ /**
29962
+ * Every profile this camera has footage in — not only the one `ranges`
29963
+ * describes (D433).
29964
+ *
29965
+ * `ranges` answers for ONE profile by design: the timeline is a single bar,
29966
+ * and enumerating all of them triples the directory reads for a bar that
29967
+ * would look identical. But the answer used to say nothing about that, so a
29968
+ * caller asking "what can I export?" read the single preferred profile as
29969
+ * the only one that exists — on this deployment every camera records `high`
29970
+ * AND `low`, the low tree holding 14 GB for camera 615 alone, and the export
29971
+ * UI could not see it.
29972
+ *
29973
+ * Cheap: it is the same shallow directory read the profile CHOICE already
29974
+ * makes. Ask for a specific profile's ranges with the `profile` input.
29975
+ */
29976
+ profilesWithFootage: array(string())
29951
29977
  });
29952
29978
  var RecordingDaysSchema = object({
29953
29979
  deviceId: number(),
@@ -29973,7 +29999,11 @@ var RecordingDaysSchema = object({
29973
29999
  var RecordingAvailabilityForDeviceSchema = object({
29974
30000
  deviceId: number(),
29975
30001
  read: _enum(["read", "unreadable"]),
29976
- ranges: array(RecordingRangeSchema).readonly()
30002
+ ranges: array(RecordingRangeSchema).readonly(),
30003
+ /** Same field, same meaning, as the singular answer (D433). A row that
30004
+ * dropped it would tell a grid caller the archive holds one profile.
30005
+ * Empty on an `'unreadable'` row: nobody looked. */
30006
+ profilesWithFootage: array(string()).readonly()
29977
30007
  });
29978
30008
  /**
29979
30009
  * One camera's row in a `getDaysWithRecordingsBatch` answer. Same rule as
@@ -30263,7 +30293,14 @@ var ReadWindowBytesResultSchema = discriminatedUnion("kind", [object({
30263
30293
  method(object({
30264
30294
  deviceId: number(),
30265
30295
  fromMs: number(),
30266
- toMs: number()
30296
+ toMs: number(),
30297
+ /**
30298
+ * Answer for THIS profile instead of the preferred one (D433). Absent
30299
+ * keeps the timeline's behaviour — one bar, one profile, one set of
30300
+ * reads. `profilesWithFootage` on the answer says what may be asked
30301
+ * for.
30302
+ */
30303
+ profile: string().optional()
30267
30304
  }), RecordingAvailabilitySchema, {
30268
30305
  kind: "query",
30269
30306
  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.
@@ -29946,7 +29956,23 @@ var RecordingRangeSchema = object({
29946
29956
  });
29947
29957
  var RecordingAvailabilitySchema = object({
29948
29958
  deviceId: number(),
29949
- ranges: array(RecordingRangeSchema)
29959
+ ranges: array(RecordingRangeSchema),
29960
+ /**
29961
+ * Every profile this camera has footage in — not only the one `ranges`
29962
+ * describes (D433).
29963
+ *
29964
+ * `ranges` answers for ONE profile by design: the timeline is a single bar,
29965
+ * and enumerating all of them triples the directory reads for a bar that
29966
+ * would look identical. But the answer used to say nothing about that, so a
29967
+ * caller asking "what can I export?" read the single preferred profile as
29968
+ * the only one that exists — on this deployment every camera records `high`
29969
+ * AND `low`, the low tree holding 14 GB for camera 615 alone, and the export
29970
+ * UI could not see it.
29971
+ *
29972
+ * Cheap: it is the same shallow directory read the profile CHOICE already
29973
+ * makes. Ask for a specific profile's ranges with the `profile` input.
29974
+ */
29975
+ profilesWithFootage: array(string())
29950
29976
  });
29951
29977
  var RecordingDaysSchema = object({
29952
29978
  deviceId: number(),
@@ -29972,7 +29998,11 @@ var RecordingDaysSchema = object({
29972
29998
  var RecordingAvailabilityForDeviceSchema = object({
29973
29999
  deviceId: number(),
29974
30000
  read: _enum(["read", "unreadable"]),
29975
- ranges: array(RecordingRangeSchema).readonly()
30001
+ ranges: array(RecordingRangeSchema).readonly(),
30002
+ /** Same field, same meaning, as the singular answer (D433). A row that
30003
+ * dropped it would tell a grid caller the archive holds one profile.
30004
+ * Empty on an `'unreadable'` row: nobody looked. */
30005
+ profilesWithFootage: array(string()).readonly()
29976
30006
  });
29977
30007
  /**
29978
30008
  * One camera's row in a `getDaysWithRecordingsBatch` answer. Same rule as
@@ -30262,7 +30292,14 @@ var ReadWindowBytesResultSchema = discriminatedUnion("kind", [object({
30262
30292
  method(object({
30263
30293
  deviceId: number(),
30264
30294
  fromMs: number(),
30265
- toMs: number()
30295
+ toMs: number(),
30296
+ /**
30297
+ * Answer for THIS profile instead of the preferred one (D433). Absent
30298
+ * keeps the timeline's behaviour — one bar, one profile, one set of
30299
+ * reads. `profilesWithFootage` on the answer says what may be asked
30300
+ * for.
30301
+ */
30302
+ profile: string().optional()
30266
30303
  }), RecordingAvailabilitySchema, {
30267
30304
  kind: "query",
30268
30305
  auth: "protected"
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camstack/addon-provider-unifi",
3
- "version": "0.2.92",
3
+ "version": "0.2.93",
4
4
  "description": "UniFi Network controller device-provider addon for CamStack — local-controller infra switches/APs (as containers) + network-client presence. NO cameras/Protect.",
5
5
  "keywords": [
6
6
  "camstack",