@camstack/addon-provider-amcrest 0.2.94 → 0.2.95

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
@@ -19910,7 +19910,17 @@ var EventDensityBucketSchema = object({
19910
19910
  bucketStart: number(),
19911
19911
  motion: number().int(),
19912
19912
  object: number().int(),
19913
- audio: number().int()
19913
+ audio: number().int(),
19914
+ /**
19915
+ * Energy-weighted mean dBFS of the audio events in this bucket — the LEVEL,
19916
+ * as opposed to `audio`, which is their COUNT (D431).
19917
+ *
19918
+ * ABSENT when the bucket holds no audio event. Absence means "nothing was
19919
+ * measured", which is not the same claim as silence, and a lane that cannot
19920
+ * tell them apart paints a quiet hour at full scale — which is exactly what
19921
+ * the count-on-a-level-meter did.
19922
+ */
19923
+ audioDbfs: number().optional()
19914
19924
  });
19915
19925
  /**
19916
19926
  * One camera's row in a `getEventDensityBatch` answer.
@@ -30137,7 +30147,23 @@ var RecordingRangeSchema = object({
30137
30147
  });
30138
30148
  var RecordingAvailabilitySchema = object({
30139
30149
  deviceId: number(),
30140
- ranges: array(RecordingRangeSchema)
30150
+ ranges: array(RecordingRangeSchema),
30151
+ /**
30152
+ * Every profile this camera has footage in — not only the one `ranges`
30153
+ * describes (D433).
30154
+ *
30155
+ * `ranges` answers for ONE profile by design: the timeline is a single bar,
30156
+ * and enumerating all of them triples the directory reads for a bar that
30157
+ * would look identical. But the answer used to say nothing about that, so a
30158
+ * caller asking "what can I export?" read the single preferred profile as
30159
+ * the only one that exists — on this deployment every camera records `high`
30160
+ * AND `low`, the low tree holding 14 GB for camera 615 alone, and the export
30161
+ * UI could not see it.
30162
+ *
30163
+ * Cheap: it is the same shallow directory read the profile CHOICE already
30164
+ * makes. Ask for a specific profile's ranges with the `profile` input.
30165
+ */
30166
+ profilesWithFootage: array(string())
30141
30167
  });
30142
30168
  var RecordingDaysSchema = object({
30143
30169
  deviceId: number(),
@@ -30163,7 +30189,11 @@ var RecordingDaysSchema = object({
30163
30189
  var RecordingAvailabilityForDeviceSchema = object({
30164
30190
  deviceId: number(),
30165
30191
  read: _enum(["read", "unreadable"]),
30166
- ranges: array(RecordingRangeSchema).readonly()
30192
+ ranges: array(RecordingRangeSchema).readonly(),
30193
+ /** Same field, same meaning, as the singular answer (D433). A row that
30194
+ * dropped it would tell a grid caller the archive holds one profile.
30195
+ * Empty on an `'unreadable'` row: nobody looked. */
30196
+ profilesWithFootage: array(string()).readonly()
30167
30197
  });
30168
30198
  /**
30169
30199
  * One camera's row in a `getDaysWithRecordingsBatch` answer. Same rule as
@@ -30453,7 +30483,14 @@ var ReadWindowBytesResultSchema = discriminatedUnion("kind", [object({
30453
30483
  method(object({
30454
30484
  deviceId: number(),
30455
30485
  fromMs: number(),
30456
- toMs: number()
30486
+ toMs: number(),
30487
+ /**
30488
+ * Answer for THIS profile instead of the preferred one (D433). Absent
30489
+ * keeps the timeline's behaviour — one bar, one profile, one set of
30490
+ * reads. `profilesWithFootage` on the answer says what may be asked
30491
+ * for.
30492
+ */
30493
+ profile: string().optional()
30457
30494
  }), RecordingAvailabilitySchema, {
30458
30495
  kind: "query",
30459
30496
  auth: "protected"
package/dist/addon.mjs CHANGED
@@ -19911,7 +19911,17 @@ var EventDensityBucketSchema = object({
19911
19911
  bucketStart: number(),
19912
19912
  motion: number().int(),
19913
19913
  object: number().int(),
19914
- audio: number().int()
19914
+ audio: number().int(),
19915
+ /**
19916
+ * Energy-weighted mean dBFS of the audio events in this bucket — the LEVEL,
19917
+ * as opposed to `audio`, which is their COUNT (D431).
19918
+ *
19919
+ * ABSENT when the bucket holds no audio event. Absence means "nothing was
19920
+ * measured", which is not the same claim as silence, and a lane that cannot
19921
+ * tell them apart paints a quiet hour at full scale — which is exactly what
19922
+ * the count-on-a-level-meter did.
19923
+ */
19924
+ audioDbfs: number().optional()
19915
19925
  });
19916
19926
  /**
19917
19927
  * One camera's row in a `getEventDensityBatch` answer.
@@ -30138,7 +30148,23 @@ var RecordingRangeSchema = object({
30138
30148
  });
30139
30149
  var RecordingAvailabilitySchema = object({
30140
30150
  deviceId: number(),
30141
- ranges: array(RecordingRangeSchema)
30151
+ ranges: array(RecordingRangeSchema),
30152
+ /**
30153
+ * Every profile this camera has footage in — not only the one `ranges`
30154
+ * describes (D433).
30155
+ *
30156
+ * `ranges` answers for ONE profile by design: the timeline is a single bar,
30157
+ * and enumerating all of them triples the directory reads for a bar that
30158
+ * would look identical. But the answer used to say nothing about that, so a
30159
+ * caller asking "what can I export?" read the single preferred profile as
30160
+ * the only one that exists — on this deployment every camera records `high`
30161
+ * AND `low`, the low tree holding 14 GB for camera 615 alone, and the export
30162
+ * UI could not see it.
30163
+ *
30164
+ * Cheap: it is the same shallow directory read the profile CHOICE already
30165
+ * makes. Ask for a specific profile's ranges with the `profile` input.
30166
+ */
30167
+ profilesWithFootage: array(string())
30142
30168
  });
30143
30169
  var RecordingDaysSchema = object({
30144
30170
  deviceId: number(),
@@ -30164,7 +30190,11 @@ var RecordingDaysSchema = object({
30164
30190
  var RecordingAvailabilityForDeviceSchema = object({
30165
30191
  deviceId: number(),
30166
30192
  read: _enum(["read", "unreadable"]),
30167
- ranges: array(RecordingRangeSchema).readonly()
30193
+ ranges: array(RecordingRangeSchema).readonly(),
30194
+ /** Same field, same meaning, as the singular answer (D433). A row that
30195
+ * dropped it would tell a grid caller the archive holds one profile.
30196
+ * Empty on an `'unreadable'` row: nobody looked. */
30197
+ profilesWithFootage: array(string()).readonly()
30168
30198
  });
30169
30199
  /**
30170
30200
  * One camera's row in a `getDaysWithRecordingsBatch` answer. Same rule as
@@ -30454,7 +30484,14 @@ var ReadWindowBytesResultSchema = discriminatedUnion("kind", [object({
30454
30484
  method(object({
30455
30485
  deviceId: number(),
30456
30486
  fromMs: number(),
30457
- toMs: number()
30487
+ toMs: number(),
30488
+ /**
30489
+ * Answer for THIS profile instead of the preferred one (D433). Absent
30490
+ * keeps the timeline's behaviour — one bar, one profile, one set of
30491
+ * reads. `profilesWithFootage` on the answer says what may be asked
30492
+ * for.
30493
+ */
30494
+ profile: string().optional()
30458
30495
  }), RecordingAvailabilitySchema, {
30459
30496
  kind: "query",
30460
30497
  auth: "protected"
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camstack/addon-provider-amcrest",
3
- "version": "0.2.94",
3
+ "version": "0.2.95",
4
4
  "description": "Amcrest/Dahua camera device provider addon for CamStack — Dahua CGI over HTTP(S) with digest auth (snapshot, RTSP catalog, PTZ, image/day-night config)",
5
5
  "keywords": [
6
6
  "camstack",