@camstack/addon-provider-petkit 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
@@ -21034,7 +21034,17 @@ var EventDensityBucketSchema = object({
21034
21034
  bucketStart: number(),
21035
21035
  motion: number().int(),
21036
21036
  object: number().int(),
21037
- audio: number().int()
21037
+ audio: number().int(),
21038
+ /**
21039
+ * Energy-weighted mean dBFS of the audio events in this bucket — the LEVEL,
21040
+ * as opposed to `audio`, which is their COUNT (D431).
21041
+ *
21042
+ * ABSENT when the bucket holds no audio event. Absence means "nothing was
21043
+ * measured", which is not the same claim as silence, and a lane that cannot
21044
+ * tell them apart paints a quiet hour at full scale — which is exactly what
21045
+ * the count-on-a-level-meter did.
21046
+ */
21047
+ audioDbfs: number().optional()
21038
21048
  });
21039
21049
  /**
21040
21050
  * One camera's row in a `getEventDensityBatch` answer.
@@ -31057,7 +31067,23 @@ var RecordingRangeSchema = object({
31057
31067
  });
31058
31068
  var RecordingAvailabilitySchema = object({
31059
31069
  deviceId: number(),
31060
- ranges: array(RecordingRangeSchema)
31070
+ ranges: array(RecordingRangeSchema),
31071
+ /**
31072
+ * Every profile this camera has footage in — not only the one `ranges`
31073
+ * describes (D433).
31074
+ *
31075
+ * `ranges` answers for ONE profile by design: the timeline is a single bar,
31076
+ * and enumerating all of them triples the directory reads for a bar that
31077
+ * would look identical. But the answer used to say nothing about that, so a
31078
+ * caller asking "what can I export?" read the single preferred profile as
31079
+ * the only one that exists — on this deployment every camera records `high`
31080
+ * AND `low`, the low tree holding 14 GB for camera 615 alone, and the export
31081
+ * UI could not see it.
31082
+ *
31083
+ * Cheap: it is the same shallow directory read the profile CHOICE already
31084
+ * makes. Ask for a specific profile's ranges with the `profile` input.
31085
+ */
31086
+ profilesWithFootage: array(string())
31061
31087
  });
31062
31088
  var RecordingDaysSchema = object({
31063
31089
  deviceId: number(),
@@ -31083,7 +31109,11 @@ var RecordingDaysSchema = object({
31083
31109
  var RecordingAvailabilityForDeviceSchema = object({
31084
31110
  deviceId: number(),
31085
31111
  read: _enum(["read", "unreadable"]),
31086
- ranges: array(RecordingRangeSchema).readonly()
31112
+ ranges: array(RecordingRangeSchema).readonly(),
31113
+ /** Same field, same meaning, as the singular answer (D433). A row that
31114
+ * dropped it would tell a grid caller the archive holds one profile.
31115
+ * Empty on an `'unreadable'` row: nobody looked. */
31116
+ profilesWithFootage: array(string()).readonly()
31087
31117
  });
31088
31118
  /**
31089
31119
  * One camera's row in a `getDaysWithRecordingsBatch` answer. Same rule as
@@ -31373,7 +31403,14 @@ var ReadWindowBytesResultSchema = discriminatedUnion("kind", [object({
31373
31403
  method(object({
31374
31404
  deviceId: number(),
31375
31405
  fromMs: number(),
31376
- toMs: number()
31406
+ toMs: number(),
31407
+ /**
31408
+ * Answer for THIS profile instead of the preferred one (D433). Absent
31409
+ * keeps the timeline's behaviour — one bar, one profile, one set of
31410
+ * reads. `profilesWithFootage` on the answer says what may be asked
31411
+ * for.
31412
+ */
31413
+ profile: string().optional()
31377
31414
  }), RecordingAvailabilitySchema, {
31378
31415
  kind: "query",
31379
31416
  auth: "protected"
package/dist/addon.mjs CHANGED
@@ -21033,7 +21033,17 @@ var EventDensityBucketSchema = object({
21033
21033
  bucketStart: number(),
21034
21034
  motion: number().int(),
21035
21035
  object: number().int(),
21036
- audio: number().int()
21036
+ audio: number().int(),
21037
+ /**
21038
+ * Energy-weighted mean dBFS of the audio events in this bucket — the LEVEL,
21039
+ * as opposed to `audio`, which is their COUNT (D431).
21040
+ *
21041
+ * ABSENT when the bucket holds no audio event. Absence means "nothing was
21042
+ * measured", which is not the same claim as silence, and a lane that cannot
21043
+ * tell them apart paints a quiet hour at full scale — which is exactly what
21044
+ * the count-on-a-level-meter did.
21045
+ */
21046
+ audioDbfs: number().optional()
21037
21047
  });
21038
21048
  /**
21039
21049
  * One camera's row in a `getEventDensityBatch` answer.
@@ -31056,7 +31066,23 @@ var RecordingRangeSchema = object({
31056
31066
  });
31057
31067
  var RecordingAvailabilitySchema = object({
31058
31068
  deviceId: number(),
31059
- ranges: array(RecordingRangeSchema)
31069
+ ranges: array(RecordingRangeSchema),
31070
+ /**
31071
+ * Every profile this camera has footage in — not only the one `ranges`
31072
+ * describes (D433).
31073
+ *
31074
+ * `ranges` answers for ONE profile by design: the timeline is a single bar,
31075
+ * and enumerating all of them triples the directory reads for a bar that
31076
+ * would look identical. But the answer used to say nothing about that, so a
31077
+ * caller asking "what can I export?" read the single preferred profile as
31078
+ * the only one that exists — on this deployment every camera records `high`
31079
+ * AND `low`, the low tree holding 14 GB for camera 615 alone, and the export
31080
+ * UI could not see it.
31081
+ *
31082
+ * Cheap: it is the same shallow directory read the profile CHOICE already
31083
+ * makes. Ask for a specific profile's ranges with the `profile` input.
31084
+ */
31085
+ profilesWithFootage: array(string())
31060
31086
  });
31061
31087
  var RecordingDaysSchema = object({
31062
31088
  deviceId: number(),
@@ -31082,7 +31108,11 @@ var RecordingDaysSchema = object({
31082
31108
  var RecordingAvailabilityForDeviceSchema = object({
31083
31109
  deviceId: number(),
31084
31110
  read: _enum(["read", "unreadable"]),
31085
- ranges: array(RecordingRangeSchema).readonly()
31111
+ ranges: array(RecordingRangeSchema).readonly(),
31112
+ /** Same field, same meaning, as the singular answer (D433). A row that
31113
+ * dropped it would tell a grid caller the archive holds one profile.
31114
+ * Empty on an `'unreadable'` row: nobody looked. */
31115
+ profilesWithFootage: array(string()).readonly()
31086
31116
  });
31087
31117
  /**
31088
31118
  * One camera's row in a `getDaysWithRecordingsBatch` answer. Same rule as
@@ -31372,7 +31402,14 @@ var ReadWindowBytesResultSchema = discriminatedUnion("kind", [object({
31372
31402
  method(object({
31373
31403
  deviceId: number(),
31374
31404
  fromMs: number(),
31375
- toMs: number()
31405
+ toMs: number(),
31406
+ /**
31407
+ * Answer for THIS profile instead of the preferred one (D433). Absent
31408
+ * keeps the timeline's behaviour — one bar, one profile, one set of
31409
+ * reads. `profilesWithFootage` on the answer says what may be asked
31410
+ * for.
31411
+ */
31412
+ profile: string().optional()
31376
31413
  }), RecordingAvailabilitySchema, {
31377
31414
  kind: "query",
31378
31415
  auth: "protected"
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camstack/addon-provider-petkit",
3
- "version": "0.2.92",
3
+ "version": "0.2.93",
4
4
  "description": "PetKit smart-feeder device-provider addon for CamStack — wraps the @apocaliss92/nodepetkit PetKit cloud client",
5
5
  "keywords": [
6
6
  "camstack",