@camstack/addon-provider-wyze 0.2.96 → 0.2.97

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
@@ -19964,7 +19964,17 @@ var EventDensityBucketSchema = object({
19964
19964
  bucketStart: number(),
19965
19965
  motion: number().int(),
19966
19966
  object: number().int(),
19967
- audio: number().int()
19967
+ audio: number().int(),
19968
+ /**
19969
+ * Energy-weighted mean dBFS of the audio events in this bucket — the LEVEL,
19970
+ * as opposed to `audio`, which is their COUNT (D431).
19971
+ *
19972
+ * ABSENT when the bucket holds no audio event. Absence means "nothing was
19973
+ * measured", which is not the same claim as silence, and a lane that cannot
19974
+ * tell them apart paints a quiet hour at full scale — which is exactly what
19975
+ * the count-on-a-level-meter did.
19976
+ */
19977
+ audioDbfs: number().optional()
19968
19978
  });
19969
19979
  /**
19970
19980
  * One camera's row in a `getEventDensityBatch` answer.
@@ -30091,7 +30101,23 @@ var RecordingRangeSchema = object({
30091
30101
  });
30092
30102
  var RecordingAvailabilitySchema = object({
30093
30103
  deviceId: number(),
30094
- ranges: array(RecordingRangeSchema)
30104
+ ranges: array(RecordingRangeSchema),
30105
+ /**
30106
+ * Every profile this camera has footage in — not only the one `ranges`
30107
+ * describes (D433).
30108
+ *
30109
+ * `ranges` answers for ONE profile by design: the timeline is a single bar,
30110
+ * and enumerating all of them triples the directory reads for a bar that
30111
+ * would look identical. But the answer used to say nothing about that, so a
30112
+ * caller asking "what can I export?" read the single preferred profile as
30113
+ * the only one that exists — on this deployment every camera records `high`
30114
+ * AND `low`, the low tree holding 14 GB for camera 615 alone, and the export
30115
+ * UI could not see it.
30116
+ *
30117
+ * Cheap: it is the same shallow directory read the profile CHOICE already
30118
+ * makes. Ask for a specific profile's ranges with the `profile` input.
30119
+ */
30120
+ profilesWithFootage: array(string())
30095
30121
  });
30096
30122
  var RecordingDaysSchema = object({
30097
30123
  deviceId: number(),
@@ -30117,7 +30143,11 @@ var RecordingDaysSchema = object({
30117
30143
  var RecordingAvailabilityForDeviceSchema = object({
30118
30144
  deviceId: number(),
30119
30145
  read: _enum(["read", "unreadable"]),
30120
- ranges: array(RecordingRangeSchema).readonly()
30146
+ ranges: array(RecordingRangeSchema).readonly(),
30147
+ /** Same field, same meaning, as the singular answer (D433). A row that
30148
+ * dropped it would tell a grid caller the archive holds one profile.
30149
+ * Empty on an `'unreadable'` row: nobody looked. */
30150
+ profilesWithFootage: array(string()).readonly()
30121
30151
  });
30122
30152
  /**
30123
30153
  * One camera's row in a `getDaysWithRecordingsBatch` answer. Same rule as
@@ -30407,7 +30437,14 @@ var ReadWindowBytesResultSchema = discriminatedUnion("kind", [object({
30407
30437
  method(object({
30408
30438
  deviceId: number(),
30409
30439
  fromMs: number(),
30410
- toMs: number()
30440
+ toMs: number(),
30441
+ /**
30442
+ * Answer for THIS profile instead of the preferred one (D433). Absent
30443
+ * keeps the timeline's behaviour — one bar, one profile, one set of
30444
+ * reads. `profilesWithFootage` on the answer says what may be asked
30445
+ * for.
30446
+ */
30447
+ profile: string().optional()
30411
30448
  }), RecordingAvailabilitySchema, {
30412
30449
  kind: "query",
30413
30450
  auth: "protected"
package/dist/addon.mjs CHANGED
@@ -19943,7 +19943,17 @@ var EventDensityBucketSchema = object({
19943
19943
  bucketStart: number(),
19944
19944
  motion: number().int(),
19945
19945
  object: number().int(),
19946
- audio: number().int()
19946
+ audio: number().int(),
19947
+ /**
19948
+ * Energy-weighted mean dBFS of the audio events in this bucket — the LEVEL,
19949
+ * as opposed to `audio`, which is their COUNT (D431).
19950
+ *
19951
+ * ABSENT when the bucket holds no audio event. Absence means "nothing was
19952
+ * measured", which is not the same claim as silence, and a lane that cannot
19953
+ * tell them apart paints a quiet hour at full scale — which is exactly what
19954
+ * the count-on-a-level-meter did.
19955
+ */
19956
+ audioDbfs: number().optional()
19947
19957
  });
19948
19958
  /**
19949
19959
  * One camera's row in a `getEventDensityBatch` answer.
@@ -30070,7 +30080,23 @@ var RecordingRangeSchema = object({
30070
30080
  });
30071
30081
  var RecordingAvailabilitySchema = object({
30072
30082
  deviceId: number(),
30073
- ranges: array(RecordingRangeSchema)
30083
+ ranges: array(RecordingRangeSchema),
30084
+ /**
30085
+ * Every profile this camera has footage in — not only the one `ranges`
30086
+ * describes (D433).
30087
+ *
30088
+ * `ranges` answers for ONE profile by design: the timeline is a single bar,
30089
+ * and enumerating all of them triples the directory reads for a bar that
30090
+ * would look identical. But the answer used to say nothing about that, so a
30091
+ * caller asking "what can I export?" read the single preferred profile as
30092
+ * the only one that exists — on this deployment every camera records `high`
30093
+ * AND `low`, the low tree holding 14 GB for camera 615 alone, and the export
30094
+ * UI could not see it.
30095
+ *
30096
+ * Cheap: it is the same shallow directory read the profile CHOICE already
30097
+ * makes. Ask for a specific profile's ranges with the `profile` input.
30098
+ */
30099
+ profilesWithFootage: array(string())
30074
30100
  });
30075
30101
  var RecordingDaysSchema = object({
30076
30102
  deviceId: number(),
@@ -30096,7 +30122,11 @@ var RecordingDaysSchema = object({
30096
30122
  var RecordingAvailabilityForDeviceSchema = object({
30097
30123
  deviceId: number(),
30098
30124
  read: _enum(["read", "unreadable"]),
30099
- ranges: array(RecordingRangeSchema).readonly()
30125
+ ranges: array(RecordingRangeSchema).readonly(),
30126
+ /** Same field, same meaning, as the singular answer (D433). A row that
30127
+ * dropped it would tell a grid caller the archive holds one profile.
30128
+ * Empty on an `'unreadable'` row: nobody looked. */
30129
+ profilesWithFootage: array(string()).readonly()
30100
30130
  });
30101
30131
  /**
30102
30132
  * One camera's row in a `getDaysWithRecordingsBatch` answer. Same rule as
@@ -30386,7 +30416,14 @@ var ReadWindowBytesResultSchema = discriminatedUnion("kind", [object({
30386
30416
  method(object({
30387
30417
  deviceId: number(),
30388
30418
  fromMs: number(),
30389
- toMs: number()
30419
+ toMs: number(),
30420
+ /**
30421
+ * Answer for THIS profile instead of the preferred one (D433). Absent
30422
+ * keeps the timeline's behaviour — one bar, one profile, one set of
30423
+ * reads. `profilesWithFootage` on the answer says what may be asked
30424
+ * for.
30425
+ */
30426
+ profile: string().optional()
30390
30427
  }), RecordingAvailabilitySchema, {
30391
30428
  kind: "query",
30392
30429
  auth: "protected"
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camstack/addon-provider-wyze",
3
- "version": "0.2.96",
3
+ "version": "0.2.97",
4
4
  "description": "Wyze camera device-provider addon for CamStack — wraps the @apocaliss92/wyze-bridge-js P2P/DTLS client, feeding the stream-broker via the pull-rfc4571 lazy-publish path (a structural twin of addon-provider-reolink)",
5
5
  "keywords": [
6
6
  "camstack",