@camstack/addon-terminal 0.1.97 → 0.1.98

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