@camstack/addon-provider-rtsp 1.2.92 → 1.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
@@ -19971,7 +19971,17 @@ var EventDensityBucketSchema = object({
19971
19971
  bucketStart: number(),
19972
19972
  motion: number().int(),
19973
19973
  object: number().int(),
19974
- audio: number().int()
19974
+ audio: number().int(),
19975
+ /**
19976
+ * Energy-weighted mean dBFS of the audio events in this bucket — the LEVEL,
19977
+ * as opposed to `audio`, which is their COUNT (D431).
19978
+ *
19979
+ * ABSENT when the bucket holds no audio event. Absence means "nothing was
19980
+ * measured", which is not the same claim as silence, and a lane that cannot
19981
+ * tell them apart paints a quiet hour at full scale — which is exactly what
19982
+ * the count-on-a-level-meter did.
19983
+ */
19984
+ audioDbfs: number().optional()
19975
19985
  });
19976
19986
  /**
19977
19987
  * One camera's row in a `getEventDensityBatch` answer.
@@ -30098,7 +30108,23 @@ var RecordingRangeSchema = object({
30098
30108
  });
30099
30109
  var RecordingAvailabilitySchema = object({
30100
30110
  deviceId: number(),
30101
- ranges: array(RecordingRangeSchema)
30111
+ ranges: array(RecordingRangeSchema),
30112
+ /**
30113
+ * Every profile this camera has footage in — not only the one `ranges`
30114
+ * describes (D433).
30115
+ *
30116
+ * `ranges` answers for ONE profile by design: the timeline is a single bar,
30117
+ * and enumerating all of them triples the directory reads for a bar that
30118
+ * would look identical. But the answer used to say nothing about that, so a
30119
+ * caller asking "what can I export?" read the single preferred profile as
30120
+ * the only one that exists — on this deployment every camera records `high`
30121
+ * AND `low`, the low tree holding 14 GB for camera 615 alone, and the export
30122
+ * UI could not see it.
30123
+ *
30124
+ * Cheap: it is the same shallow directory read the profile CHOICE already
30125
+ * makes. Ask for a specific profile's ranges with the `profile` input.
30126
+ */
30127
+ profilesWithFootage: array(string())
30102
30128
  });
30103
30129
  var RecordingDaysSchema = object({
30104
30130
  deviceId: number(),
@@ -30124,7 +30150,11 @@ var RecordingDaysSchema = object({
30124
30150
  var RecordingAvailabilityForDeviceSchema = object({
30125
30151
  deviceId: number(),
30126
30152
  read: _enum(["read", "unreadable"]),
30127
- ranges: array(RecordingRangeSchema).readonly()
30153
+ ranges: array(RecordingRangeSchema).readonly(),
30154
+ /** Same field, same meaning, as the singular answer (D433). A row that
30155
+ * dropped it would tell a grid caller the archive holds one profile.
30156
+ * Empty on an `'unreadable'` row: nobody looked. */
30157
+ profilesWithFootage: array(string()).readonly()
30128
30158
  });
30129
30159
  /**
30130
30160
  * One camera's row in a `getDaysWithRecordingsBatch` answer. Same rule as
@@ -30414,7 +30444,14 @@ var ReadWindowBytesResultSchema = discriminatedUnion("kind", [object({
30414
30444
  method(object({
30415
30445
  deviceId: number(),
30416
30446
  fromMs: number(),
30417
- toMs: number()
30447
+ toMs: number(),
30448
+ /**
30449
+ * Answer for THIS profile instead of the preferred one (D433). Absent
30450
+ * keeps the timeline's behaviour — one bar, one profile, one set of
30451
+ * reads. `profilesWithFootage` on the answer says what may be asked
30452
+ * for.
30453
+ */
30454
+ profile: string().optional()
30418
30455
  }), RecordingAvailabilitySchema, {
30419
30456
  kind: "query",
30420
30457
  auth: "protected"
package/dist/addon.mjs CHANGED
@@ -19947,7 +19947,17 @@ var EventDensityBucketSchema = object({
19947
19947
  bucketStart: number(),
19948
19948
  motion: number().int(),
19949
19949
  object: number().int(),
19950
- audio: number().int()
19950
+ audio: number().int(),
19951
+ /**
19952
+ * Energy-weighted mean dBFS of the audio events in this bucket — the LEVEL,
19953
+ * as opposed to `audio`, which is their COUNT (D431).
19954
+ *
19955
+ * ABSENT when the bucket holds no audio event. Absence means "nothing was
19956
+ * measured", which is not the same claim as silence, and a lane that cannot
19957
+ * tell them apart paints a quiet hour at full scale — which is exactly what
19958
+ * the count-on-a-level-meter did.
19959
+ */
19960
+ audioDbfs: number().optional()
19951
19961
  });
19952
19962
  /**
19953
19963
  * One camera's row in a `getEventDensityBatch` answer.
@@ -30074,7 +30084,23 @@ var RecordingRangeSchema = object({
30074
30084
  });
30075
30085
  var RecordingAvailabilitySchema = object({
30076
30086
  deviceId: number(),
30077
- ranges: array(RecordingRangeSchema)
30087
+ ranges: array(RecordingRangeSchema),
30088
+ /**
30089
+ * Every profile this camera has footage in — not only the one `ranges`
30090
+ * describes (D433).
30091
+ *
30092
+ * `ranges` answers for ONE profile by design: the timeline is a single bar,
30093
+ * and enumerating all of them triples the directory reads for a bar that
30094
+ * would look identical. But the answer used to say nothing about that, so a
30095
+ * caller asking "what can I export?" read the single preferred profile as
30096
+ * the only one that exists — on this deployment every camera records `high`
30097
+ * AND `low`, the low tree holding 14 GB for camera 615 alone, and the export
30098
+ * UI could not see it.
30099
+ *
30100
+ * Cheap: it is the same shallow directory read the profile CHOICE already
30101
+ * makes. Ask for a specific profile's ranges with the `profile` input.
30102
+ */
30103
+ profilesWithFootage: array(string())
30078
30104
  });
30079
30105
  var RecordingDaysSchema = object({
30080
30106
  deviceId: number(),
@@ -30100,7 +30126,11 @@ var RecordingDaysSchema = object({
30100
30126
  var RecordingAvailabilityForDeviceSchema = object({
30101
30127
  deviceId: number(),
30102
30128
  read: _enum(["read", "unreadable"]),
30103
- ranges: array(RecordingRangeSchema).readonly()
30129
+ ranges: array(RecordingRangeSchema).readonly(),
30130
+ /** Same field, same meaning, as the singular answer (D433). A row that
30131
+ * dropped it would tell a grid caller the archive holds one profile.
30132
+ * Empty on an `'unreadable'` row: nobody looked. */
30133
+ profilesWithFootage: array(string()).readonly()
30104
30134
  });
30105
30135
  /**
30106
30136
  * One camera's row in a `getDaysWithRecordingsBatch` answer. Same rule as
@@ -30390,7 +30420,14 @@ var ReadWindowBytesResultSchema = discriminatedUnion("kind", [object({
30390
30420
  method(object({
30391
30421
  deviceId: number(),
30392
30422
  fromMs: number(),
30393
- toMs: number()
30423
+ toMs: number(),
30424
+ /**
30425
+ * Answer for THIS profile instead of the preferred one (D433). Absent
30426
+ * keeps the timeline's behaviour — one bar, one profile, one set of
30427
+ * reads. `profilesWithFootage` on the answer says what may be asked
30428
+ * for.
30429
+ */
30430
+ profile: string().optional()
30394
30431
  }), RecordingAvailabilitySchema, {
30395
30432
  kind: "query",
30396
30433
  auth: "protected"
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camstack/addon-provider-rtsp",
3
- "version": "1.2.92",
3
+ "version": "1.2.93",
4
4
  "description": "Generic RTSP camera device provider addon for CamStack",
5
5
  "keywords": [
6
6
  "camstack",