@camstack/addon-provider-tuya 0.2.92 → 0.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
@@ -20752,7 +20752,17 @@ var EventDensityBucketSchema = object({
20752
20752
  bucketStart: number(),
20753
20753
  motion: number().int(),
20754
20754
  object: number().int(),
20755
- audio: number().int()
20755
+ audio: number().int(),
20756
+ /**
20757
+ * Energy-weighted mean dBFS of the audio events in this bucket — the LEVEL,
20758
+ * as opposed to `audio`, which is their COUNT (D431).
20759
+ *
20760
+ * ABSENT when the bucket holds no audio event. Absence means "nothing was
20761
+ * measured", which is not the same claim as silence, and a lane that cannot
20762
+ * tell them apart paints a quiet hour at full scale — which is exactly what
20763
+ * the count-on-a-level-meter did.
20764
+ */
20765
+ audioDbfs: number().optional()
20756
20766
  });
20757
20767
  /**
20758
20768
  * One camera's row in a `getEventDensityBatch` answer.
@@ -30775,7 +30785,23 @@ var RecordingRangeSchema = object({
30775
30785
  });
30776
30786
  var RecordingAvailabilitySchema = object({
30777
30787
  deviceId: number(),
30778
- ranges: array(RecordingRangeSchema)
30788
+ ranges: array(RecordingRangeSchema),
30789
+ /**
30790
+ * Every profile this camera has footage in — not only the one `ranges`
30791
+ * describes (D433).
30792
+ *
30793
+ * `ranges` answers for ONE profile by design: the timeline is a single bar,
30794
+ * and enumerating all of them triples the directory reads for a bar that
30795
+ * would look identical. But the answer used to say nothing about that, so a
30796
+ * caller asking "what can I export?" read the single preferred profile as
30797
+ * the only one that exists — on this deployment every camera records `high`
30798
+ * AND `low`, the low tree holding 14 GB for camera 615 alone, and the export
30799
+ * UI could not see it.
30800
+ *
30801
+ * Cheap: it is the same shallow directory read the profile CHOICE already
30802
+ * makes. Ask for a specific profile's ranges with the `profile` input.
30803
+ */
30804
+ profilesWithFootage: array(string())
30779
30805
  });
30780
30806
  var RecordingDaysSchema = object({
30781
30807
  deviceId: number(),
@@ -30801,7 +30827,11 @@ var RecordingDaysSchema = object({
30801
30827
  var RecordingAvailabilityForDeviceSchema = object({
30802
30828
  deviceId: number(),
30803
30829
  read: _enum(["read", "unreadable"]),
30804
- ranges: array(RecordingRangeSchema).readonly()
30830
+ ranges: array(RecordingRangeSchema).readonly(),
30831
+ /** Same field, same meaning, as the singular answer (D433). A row that
30832
+ * dropped it would tell a grid caller the archive holds one profile.
30833
+ * Empty on an `'unreadable'` row: nobody looked. */
30834
+ profilesWithFootage: array(string()).readonly()
30805
30835
  });
30806
30836
  /**
30807
30837
  * One camera's row in a `getDaysWithRecordingsBatch` answer. Same rule as
@@ -31091,7 +31121,14 @@ var ReadWindowBytesResultSchema = discriminatedUnion("kind", [object({
31091
31121
  method(object({
31092
31122
  deviceId: number(),
31093
31123
  fromMs: number(),
31094
- toMs: number()
31124
+ toMs: number(),
31125
+ /**
31126
+ * Answer for THIS profile instead of the preferred one (D433). Absent
31127
+ * keeps the timeline's behaviour — one bar, one profile, one set of
31128
+ * reads. `profilesWithFootage` on the answer says what may be asked
31129
+ * for.
31130
+ */
31131
+ profile: string().optional()
31095
31132
  }), RecordingAvailabilitySchema, {
31096
31133
  kind: "query",
31097
31134
  auth: "protected"
package/dist/addon.mjs CHANGED
@@ -20751,7 +20751,17 @@ var EventDensityBucketSchema = object({
20751
20751
  bucketStart: number(),
20752
20752
  motion: number().int(),
20753
20753
  object: number().int(),
20754
- audio: number().int()
20754
+ audio: number().int(),
20755
+ /**
20756
+ * Energy-weighted mean dBFS of the audio events in this bucket — the LEVEL,
20757
+ * as opposed to `audio`, which is their COUNT (D431).
20758
+ *
20759
+ * ABSENT when the bucket holds no audio event. Absence means "nothing was
20760
+ * measured", which is not the same claim as silence, and a lane that cannot
20761
+ * tell them apart paints a quiet hour at full scale — which is exactly what
20762
+ * the count-on-a-level-meter did.
20763
+ */
20764
+ audioDbfs: number().optional()
20755
20765
  });
20756
20766
  /**
20757
20767
  * One camera's row in a `getEventDensityBatch` answer.
@@ -30774,7 +30784,23 @@ var RecordingRangeSchema = object({
30774
30784
  });
30775
30785
  var RecordingAvailabilitySchema = object({
30776
30786
  deviceId: number(),
30777
- ranges: array(RecordingRangeSchema)
30787
+ ranges: array(RecordingRangeSchema),
30788
+ /**
30789
+ * Every profile this camera has footage in — not only the one `ranges`
30790
+ * describes (D433).
30791
+ *
30792
+ * `ranges` answers for ONE profile by design: the timeline is a single bar,
30793
+ * and enumerating all of them triples the directory reads for a bar that
30794
+ * would look identical. But the answer used to say nothing about that, so a
30795
+ * caller asking "what can I export?" read the single preferred profile as
30796
+ * the only one that exists — on this deployment every camera records `high`
30797
+ * AND `low`, the low tree holding 14 GB for camera 615 alone, and the export
30798
+ * UI could not see it.
30799
+ *
30800
+ * Cheap: it is the same shallow directory read the profile CHOICE already
30801
+ * makes. Ask for a specific profile's ranges with the `profile` input.
30802
+ */
30803
+ profilesWithFootage: array(string())
30778
30804
  });
30779
30805
  var RecordingDaysSchema = object({
30780
30806
  deviceId: number(),
@@ -30800,7 +30826,11 @@ var RecordingDaysSchema = object({
30800
30826
  var RecordingAvailabilityForDeviceSchema = object({
30801
30827
  deviceId: number(),
30802
30828
  read: _enum(["read", "unreadable"]),
30803
- ranges: array(RecordingRangeSchema).readonly()
30829
+ ranges: array(RecordingRangeSchema).readonly(),
30830
+ /** Same field, same meaning, as the singular answer (D433). A row that
30831
+ * dropped it would tell a grid caller the archive holds one profile.
30832
+ * Empty on an `'unreadable'` row: nobody looked. */
30833
+ profilesWithFootage: array(string()).readonly()
30804
30834
  });
30805
30835
  /**
30806
30836
  * One camera's row in a `getDaysWithRecordingsBatch` answer. Same rule as
@@ -31090,7 +31120,14 @@ var ReadWindowBytesResultSchema = discriminatedUnion("kind", [object({
31090
31120
  method(object({
31091
31121
  deviceId: number(),
31092
31122
  fromMs: number(),
31093
- toMs: number()
31123
+ toMs: number(),
31124
+ /**
31125
+ * Answer for THIS profile instead of the preferred one (D433). Absent
31126
+ * keeps the timeline's behaviour — one bar, one profile, one set of
31127
+ * reads. `profilesWithFootage` on the answer says what may be asked
31128
+ * for.
31129
+ */
31130
+ profile: string().optional()
31094
31131
  }), RecordingAvailabilitySchema, {
31095
31132
  kind: "query",
31096
31133
  auth: "protected"
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camstack/addon-provider-tuya",
3
- "version": "0.2.92",
3
+ "version": "0.2.93",
4
4
  "description": "Tuya / Smart Life device-provider addon for CamStack — account-onboarded (Tuya IoT cloud fetch of device localKeys) + LOCAL DP control via the @apocaliss92/nodetuya encrypted-LAN client, exposing switch / water-heater-family kettle entities",
5
5
  "keywords": [
6
6
  "camstack",