@camstack/addon-provider-hikvision 1.2.100 → 1.2.101

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
@@ -20222,7 +20222,17 @@ var EventDensityBucketSchema = object({
20222
20222
  bucketStart: number(),
20223
20223
  motion: number().int(),
20224
20224
  object: number().int(),
20225
- audio: number().int()
20225
+ audio: number().int(),
20226
+ /**
20227
+ * Energy-weighted mean dBFS of the audio events in this bucket — the LEVEL,
20228
+ * as opposed to `audio`, which is their COUNT (D431).
20229
+ *
20230
+ * ABSENT when the bucket holds no audio event. Absence means "nothing was
20231
+ * measured", which is not the same claim as silence, and a lane that cannot
20232
+ * tell them apart paints a quiet hour at full scale — which is exactly what
20233
+ * the count-on-a-level-meter did.
20234
+ */
20235
+ audioDbfs: number().optional()
20226
20236
  });
20227
20237
  /**
20228
20238
  * One camera's row in a `getEventDensityBatch` answer.
@@ -30474,7 +30484,23 @@ var RecordingRangeSchema = object({
30474
30484
  });
30475
30485
  var RecordingAvailabilitySchema = object({
30476
30486
  deviceId: number(),
30477
- ranges: array(RecordingRangeSchema)
30487
+ ranges: array(RecordingRangeSchema),
30488
+ /**
30489
+ * Every profile this camera has footage in — not only the one `ranges`
30490
+ * describes (D433).
30491
+ *
30492
+ * `ranges` answers for ONE profile by design: the timeline is a single bar,
30493
+ * and enumerating all of them triples the directory reads for a bar that
30494
+ * would look identical. But the answer used to say nothing about that, so a
30495
+ * caller asking "what can I export?" read the single preferred profile as
30496
+ * the only one that exists — on this deployment every camera records `high`
30497
+ * AND `low`, the low tree holding 14 GB for camera 615 alone, and the export
30498
+ * UI could not see it.
30499
+ *
30500
+ * Cheap: it is the same shallow directory read the profile CHOICE already
30501
+ * makes. Ask for a specific profile's ranges with the `profile` input.
30502
+ */
30503
+ profilesWithFootage: array(string())
30478
30504
  });
30479
30505
  var RecordingDaysSchema = object({
30480
30506
  deviceId: number(),
@@ -30500,7 +30526,11 @@ var RecordingDaysSchema = object({
30500
30526
  var RecordingAvailabilityForDeviceSchema = object({
30501
30527
  deviceId: number(),
30502
30528
  read: _enum(["read", "unreadable"]),
30503
- ranges: array(RecordingRangeSchema).readonly()
30529
+ ranges: array(RecordingRangeSchema).readonly(),
30530
+ /** Same field, same meaning, as the singular answer (D433). A row that
30531
+ * dropped it would tell a grid caller the archive holds one profile.
30532
+ * Empty on an `'unreadable'` row: nobody looked. */
30533
+ profilesWithFootage: array(string()).readonly()
30504
30534
  });
30505
30535
  /**
30506
30536
  * One camera's row in a `getDaysWithRecordingsBatch` answer. Same rule as
@@ -30790,7 +30820,14 @@ var ReadWindowBytesResultSchema = discriminatedUnion("kind", [object({
30790
30820
  method(object({
30791
30821
  deviceId: number(),
30792
30822
  fromMs: number(),
30793
- toMs: number()
30823
+ toMs: number(),
30824
+ /**
30825
+ * Answer for THIS profile instead of the preferred one (D433). Absent
30826
+ * keeps the timeline's behaviour — one bar, one profile, one set of
30827
+ * reads. `profilesWithFootage` on the answer says what may be asked
30828
+ * for.
30829
+ */
30830
+ profile: string().optional()
30794
30831
  }), RecordingAvailabilitySchema, {
30795
30832
  kind: "query",
30796
30833
  auth: "protected"
package/dist/addon.mjs CHANGED
@@ -20223,7 +20223,17 @@ var EventDensityBucketSchema = object({
20223
20223
  bucketStart: number(),
20224
20224
  motion: number().int(),
20225
20225
  object: number().int(),
20226
- audio: number().int()
20226
+ audio: number().int(),
20227
+ /**
20228
+ * Energy-weighted mean dBFS of the audio events in this bucket — the LEVEL,
20229
+ * as opposed to `audio`, which is their COUNT (D431).
20230
+ *
20231
+ * ABSENT when the bucket holds no audio event. Absence means "nothing was
20232
+ * measured", which is not the same claim as silence, and a lane that cannot
20233
+ * tell them apart paints a quiet hour at full scale — which is exactly what
20234
+ * the count-on-a-level-meter did.
20235
+ */
20236
+ audioDbfs: number().optional()
20227
20237
  });
20228
20238
  /**
20229
20239
  * One camera's row in a `getEventDensityBatch` answer.
@@ -30475,7 +30485,23 @@ var RecordingRangeSchema = object({
30475
30485
  });
30476
30486
  var RecordingAvailabilitySchema = object({
30477
30487
  deviceId: number(),
30478
- ranges: array(RecordingRangeSchema)
30488
+ ranges: array(RecordingRangeSchema),
30489
+ /**
30490
+ * Every profile this camera has footage in — not only the one `ranges`
30491
+ * describes (D433).
30492
+ *
30493
+ * `ranges` answers for ONE profile by design: the timeline is a single bar,
30494
+ * and enumerating all of them triples the directory reads for a bar that
30495
+ * would look identical. But the answer used to say nothing about that, so a
30496
+ * caller asking "what can I export?" read the single preferred profile as
30497
+ * the only one that exists — on this deployment every camera records `high`
30498
+ * AND `low`, the low tree holding 14 GB for camera 615 alone, and the export
30499
+ * UI could not see it.
30500
+ *
30501
+ * Cheap: it is the same shallow directory read the profile CHOICE already
30502
+ * makes. Ask for a specific profile's ranges with the `profile` input.
30503
+ */
30504
+ profilesWithFootage: array(string())
30479
30505
  });
30480
30506
  var RecordingDaysSchema = object({
30481
30507
  deviceId: number(),
@@ -30501,7 +30527,11 @@ var RecordingDaysSchema = object({
30501
30527
  var RecordingAvailabilityForDeviceSchema = object({
30502
30528
  deviceId: number(),
30503
30529
  read: _enum(["read", "unreadable"]),
30504
- ranges: array(RecordingRangeSchema).readonly()
30530
+ ranges: array(RecordingRangeSchema).readonly(),
30531
+ /** Same field, same meaning, as the singular answer (D433). A row that
30532
+ * dropped it would tell a grid caller the archive holds one profile.
30533
+ * Empty on an `'unreadable'` row: nobody looked. */
30534
+ profilesWithFootage: array(string()).readonly()
30505
30535
  });
30506
30536
  /**
30507
30537
  * One camera's row in a `getDaysWithRecordingsBatch` answer. Same rule as
@@ -30791,7 +30821,14 @@ var ReadWindowBytesResultSchema = discriminatedUnion("kind", [object({
30791
30821
  method(object({
30792
30822
  deviceId: number(),
30793
30823
  fromMs: number(),
30794
- toMs: number()
30824
+ toMs: number(),
30825
+ /**
30826
+ * Answer for THIS profile instead of the preferred one (D433). Absent
30827
+ * keeps the timeline's behaviour — one bar, one profile, one set of
30828
+ * reads. `profilesWithFootage` on the answer says what may be asked
30829
+ * for.
30830
+ */
30831
+ profile: string().optional()
30795
30832
  }), RecordingAvailabilitySchema, {
30796
30833
  kind: "query",
30797
30834
  auth: "protected"
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camstack/addon-provider-hikvision",
3
- "version": "1.2.100",
3
+ "version": "1.2.101",
4
4
  "description": "Hikvision camera device provider addon for CamStack — ISAPI over HTTP(S) with digest auth (snapshot, alarm stream, RTSP discovery)",
5
5
  "keywords": [
6
6
  "camstack",