@camstack/addon-provider-onvif 1.2.91 → 1.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
@@ -19627,7 +19627,17 @@ var EventDensityBucketSchema = object({
19627
19627
  bucketStart: number(),
19628
19628
  motion: number().int(),
19629
19629
  object: number().int(),
19630
- audio: number().int()
19630
+ audio: number().int(),
19631
+ /**
19632
+ * Energy-weighted mean dBFS of the audio events in this bucket — the LEVEL,
19633
+ * as opposed to `audio`, which is their COUNT (D431).
19634
+ *
19635
+ * ABSENT when the bucket holds no audio event. Absence means "nothing was
19636
+ * measured", which is not the same claim as silence, and a lane that cannot
19637
+ * tell them apart paints a quiet hour at full scale — which is exactly what
19638
+ * the count-on-a-level-meter did.
19639
+ */
19640
+ audioDbfs: number().optional()
19631
19641
  });
19632
19642
  /**
19633
19643
  * One camera's row in a `getEventDensityBatch` answer.
@@ -27940,7 +27950,23 @@ var RecordingRangeSchema = object({
27940
27950
  });
27941
27951
  var RecordingAvailabilitySchema = object({
27942
27952
  deviceId: number(),
27943
- ranges: array(RecordingRangeSchema)
27953
+ ranges: array(RecordingRangeSchema),
27954
+ /**
27955
+ * Every profile this camera has footage in — not only the one `ranges`
27956
+ * describes (D433).
27957
+ *
27958
+ * `ranges` answers for ONE profile by design: the timeline is a single bar,
27959
+ * and enumerating all of them triples the directory reads for a bar that
27960
+ * would look identical. But the answer used to say nothing about that, so a
27961
+ * caller asking "what can I export?" read the single preferred profile as
27962
+ * the only one that exists — on this deployment every camera records `high`
27963
+ * AND `low`, the low tree holding 14 GB for camera 615 alone, and the export
27964
+ * UI could not see it.
27965
+ *
27966
+ * Cheap: it is the same shallow directory read the profile CHOICE already
27967
+ * makes. Ask for a specific profile's ranges with the `profile` input.
27968
+ */
27969
+ profilesWithFootage: array(string())
27944
27970
  });
27945
27971
  var RecordingDaysSchema = object({
27946
27972
  deviceId: number(),
@@ -27966,7 +27992,11 @@ var RecordingDaysSchema = object({
27966
27992
  var RecordingAvailabilityForDeviceSchema = object({
27967
27993
  deviceId: number(),
27968
27994
  read: _enum(["read", "unreadable"]),
27969
- ranges: array(RecordingRangeSchema).readonly()
27995
+ ranges: array(RecordingRangeSchema).readonly(),
27996
+ /** Same field, same meaning, as the singular answer (D433). A row that
27997
+ * dropped it would tell a grid caller the archive holds one profile.
27998
+ * Empty on an `'unreadable'` row: nobody looked. */
27999
+ profilesWithFootage: array(string()).readonly()
27970
28000
  });
27971
28001
  /**
27972
28002
  * One camera's row in a `getDaysWithRecordingsBatch` answer. Same rule as
@@ -28256,7 +28286,14 @@ var ReadWindowBytesResultSchema = discriminatedUnion("kind", [object({
28256
28286
  method(object({
28257
28287
  deviceId: number(),
28258
28288
  fromMs: number(),
28259
- toMs: number()
28289
+ toMs: number(),
28290
+ /**
28291
+ * Answer for THIS profile instead of the preferred one (D433). Absent
28292
+ * keeps the timeline's behaviour — one bar, one profile, one set of
28293
+ * reads. `profilesWithFootage` on the answer says what may be asked
28294
+ * for.
28295
+ */
28296
+ profile: string().optional()
28260
28297
  }), RecordingAvailabilitySchema, {
28261
28298
  kind: "query",
28262
28299
  auth: "protected"
package/dist/addon.mjs CHANGED
@@ -19628,7 +19628,17 @@ var EventDensityBucketSchema = object({
19628
19628
  bucketStart: number(),
19629
19629
  motion: number().int(),
19630
19630
  object: number().int(),
19631
- audio: number().int()
19631
+ audio: number().int(),
19632
+ /**
19633
+ * Energy-weighted mean dBFS of the audio events in this bucket — the LEVEL,
19634
+ * as opposed to `audio`, which is their COUNT (D431).
19635
+ *
19636
+ * ABSENT when the bucket holds no audio event. Absence means "nothing was
19637
+ * measured", which is not the same claim as silence, and a lane that cannot
19638
+ * tell them apart paints a quiet hour at full scale — which is exactly what
19639
+ * the count-on-a-level-meter did.
19640
+ */
19641
+ audioDbfs: number().optional()
19632
19642
  });
19633
19643
  /**
19634
19644
  * One camera's row in a `getEventDensityBatch` answer.
@@ -27941,7 +27951,23 @@ var RecordingRangeSchema = object({
27941
27951
  });
27942
27952
  var RecordingAvailabilitySchema = object({
27943
27953
  deviceId: number(),
27944
- ranges: array(RecordingRangeSchema)
27954
+ ranges: array(RecordingRangeSchema),
27955
+ /**
27956
+ * Every profile this camera has footage in — not only the one `ranges`
27957
+ * describes (D433).
27958
+ *
27959
+ * `ranges` answers for ONE profile by design: the timeline is a single bar,
27960
+ * and enumerating all of them triples the directory reads for a bar that
27961
+ * would look identical. But the answer used to say nothing about that, so a
27962
+ * caller asking "what can I export?" read the single preferred profile as
27963
+ * the only one that exists — on this deployment every camera records `high`
27964
+ * AND `low`, the low tree holding 14 GB for camera 615 alone, and the export
27965
+ * UI could not see it.
27966
+ *
27967
+ * Cheap: it is the same shallow directory read the profile CHOICE already
27968
+ * makes. Ask for a specific profile's ranges with the `profile` input.
27969
+ */
27970
+ profilesWithFootage: array(string())
27945
27971
  });
27946
27972
  var RecordingDaysSchema = object({
27947
27973
  deviceId: number(),
@@ -27967,7 +27993,11 @@ var RecordingDaysSchema = object({
27967
27993
  var RecordingAvailabilityForDeviceSchema = object({
27968
27994
  deviceId: number(),
27969
27995
  read: _enum(["read", "unreadable"]),
27970
- ranges: array(RecordingRangeSchema).readonly()
27996
+ ranges: array(RecordingRangeSchema).readonly(),
27997
+ /** Same field, same meaning, as the singular answer (D433). A row that
27998
+ * dropped it would tell a grid caller the archive holds one profile.
27999
+ * Empty on an `'unreadable'` row: nobody looked. */
28000
+ profilesWithFootage: array(string()).readonly()
27971
28001
  });
27972
28002
  /**
27973
28003
  * One camera's row in a `getDaysWithRecordingsBatch` answer. Same rule as
@@ -28257,7 +28287,14 @@ var ReadWindowBytesResultSchema = discriminatedUnion("kind", [object({
28257
28287
  method(object({
28258
28288
  deviceId: number(),
28259
28289
  fromMs: number(),
28260
- toMs: number()
28290
+ toMs: number(),
28291
+ /**
28292
+ * Answer for THIS profile instead of the preferred one (D433). Absent
28293
+ * keeps the timeline's behaviour — one bar, one profile, one set of
28294
+ * reads. `profilesWithFootage` on the answer says what may be asked
28295
+ * for.
28296
+ */
28297
+ profile: string().optional()
28261
28298
  }), RecordingAvailabilitySchema, {
28262
28299
  kind: "query",
28263
28300
  auth: "protected"
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camstack/addon-provider-onvif",
3
- "version": "1.2.91",
3
+ "version": "1.2.92",
4
4
  "description": "ONVIF camera device provider addon for CamStack",
5
5
  "keywords": [
6
6
  "camstack",