@camstack/addon-provider-petkit 0.2.21 → 0.2.23

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
@@ -21341,6 +21341,14 @@ var ClipSchema = object({
21341
21341
  endMs: number()
21342
21342
  }),
21343
21343
  /**
21344
+ * Distinct object classes attached to this visit (`person`, `car`, …),
21345
+ * dominant first, capped at {@link MAX_CLIP_LABELS}. The ribbon renders these
21346
+ * instead of the bare kind — "Object" tells the operator nothing a colour bar
21347
+ * did not. Absent (never empty) when the visit attached no classified object
21348
+ * event, so a motion/audio-only visit keeps its kind label.
21349
+ */
21350
+ labels: array(string()).max(3).optional(),
21351
+ /**
21344
21352
  * Lazy thumbnail URL, never inlined.
21345
21353
  *
21346
21354
  * Recording-derived clips (events-mode keep-window, and the prepared
@@ -27371,9 +27379,21 @@ var RecordingLocationUsageSchema = object({
27371
27379
  * previously rendered as two identical "disks" with a nonsensical used
27372
27380
  * split — hydrate attribution across aliases is arbitrary by nature. */
27373
27381
  locationIds: array(string()).optional(),
27374
- /** Bytes of recordings stored on this PHYSICAL volume (all aliases). */
27382
+ /**
27383
+ * Filesystem root of the physical volume this row accounts — the only
27384
+ * operator-legible identity when a location has no `displayName` yet, and
27385
+ * what a "which disk is full" alert has to name. OPTIONAL for the same
27386
+ * train-skew reason as `oldestMs`: a recorder that predates the field omits
27387
+ * it, and this schema must keep validating that older provider's payload.
27388
+ */
27389
+ root: string().optional(),
27390
+ /** Bytes of recordings stored on this PHYSICAL volume (all aliases). This is
27391
+ * the footage's SHARE of the volume, not how full the volume is — the disk
27392
+ * also holds everything that is not recordings. Volume fill is
27393
+ * `(totalBytes - availableBytes) / totalBytes`. */
27375
27394
  usedBytes: number(),
27376
- /** Free bytes on the location's volume; null when capacity is unknown (remote). */
27395
+ /** Free bytes on the location's volume; null when capacity is unknown
27396
+ * (remote/unstattable — the recorder logs the statfs failure with the root). */
27377
27397
  availableBytes: number().nullable(),
27378
27398
  /** Total bytes of the location's volume; null when unknown. */
27379
27399
  totalBytes: number().nullable()
@@ -27385,7 +27405,15 @@ var RecordingStorageUsageSchema = object({
27385
27405
  nodeId: string(),
27386
27406
  totalUsedBytes: number(),
27387
27407
  devices: array(RecordingDeviceUsageSchema),
27388
- locations: array(RecordingLocationUsageSchema)
27408
+ /**
27409
+ * Per-physical-volume capacity. OPTIONAL, and consumers must render the rest
27410
+ * of the payload without it: the hub serves this method through a BAKED
27411
+ * router, so a hub whose framework train predates a change to this array
27412
+ * strips it out of an answer a newer recorder happily produced. A UI that
27413
+ * dereferences it unconditionally crashes the whole Storage page over a
27414
+ * missing disk bar.
27415
+ */
27416
+ locations: array(RecordingLocationUsageSchema).optional()
27389
27417
  });
27390
27418
  /**
27391
27419
  * The OPERATOR-ARMED half of multi-location recordings (D116).
@@ -38170,8 +38198,14 @@ Object.freeze({
38170
38198
  "network-access": "ingress",
38171
38199
  "smtp-provider": "email"
38172
38200
  });
38201
+ /** Schema defaults — an untouched sub-field must author exactly these. */
38202
+ var NC_AUDIO_DEFAULTS = {
38203
+ hitPercent: 60,
38204
+ samplingSeconds: 10
38205
+ };
38173
38206
  new Map(AUDIO_MACRO_LABELS.flatMap((macro) => macro.icon === void 0 ? [] : [[macro.id, macro.icon]]));
38174
38207
  new Set(["devices", "classes"]);
38208
+ NC_AUDIO_DEFAULTS.hitPercent, NC_AUDIO_DEFAULTS.samplingSeconds;
38175
38209
  /**
38176
38210
  * TimelapseRule — the STANDALONE scheduled timelapse producer's rule model.
38177
38211
  *
package/dist/addon.mjs CHANGED
@@ -21340,6 +21340,14 @@ var ClipSchema = object({
21340
21340
  endMs: number()
21341
21341
  }),
21342
21342
  /**
21343
+ * Distinct object classes attached to this visit (`person`, `car`, …),
21344
+ * dominant first, capped at {@link MAX_CLIP_LABELS}. The ribbon renders these
21345
+ * instead of the bare kind — "Object" tells the operator nothing a colour bar
21346
+ * did not. Absent (never empty) when the visit attached no classified object
21347
+ * event, so a motion/audio-only visit keeps its kind label.
21348
+ */
21349
+ labels: array(string()).max(3).optional(),
21350
+ /**
21343
21351
  * Lazy thumbnail URL, never inlined.
21344
21352
  *
21345
21353
  * Recording-derived clips (events-mode keep-window, and the prepared
@@ -27370,9 +27378,21 @@ var RecordingLocationUsageSchema = object({
27370
27378
  * previously rendered as two identical "disks" with a nonsensical used
27371
27379
  * split — hydrate attribution across aliases is arbitrary by nature. */
27372
27380
  locationIds: array(string()).optional(),
27373
- /** Bytes of recordings stored on this PHYSICAL volume (all aliases). */
27381
+ /**
27382
+ * Filesystem root of the physical volume this row accounts — the only
27383
+ * operator-legible identity when a location has no `displayName` yet, and
27384
+ * what a "which disk is full" alert has to name. OPTIONAL for the same
27385
+ * train-skew reason as `oldestMs`: a recorder that predates the field omits
27386
+ * it, and this schema must keep validating that older provider's payload.
27387
+ */
27388
+ root: string().optional(),
27389
+ /** Bytes of recordings stored on this PHYSICAL volume (all aliases). This is
27390
+ * the footage's SHARE of the volume, not how full the volume is — the disk
27391
+ * also holds everything that is not recordings. Volume fill is
27392
+ * `(totalBytes - availableBytes) / totalBytes`. */
27374
27393
  usedBytes: number(),
27375
- /** Free bytes on the location's volume; null when capacity is unknown (remote). */
27394
+ /** Free bytes on the location's volume; null when capacity is unknown
27395
+ * (remote/unstattable — the recorder logs the statfs failure with the root). */
27376
27396
  availableBytes: number().nullable(),
27377
27397
  /** Total bytes of the location's volume; null when unknown. */
27378
27398
  totalBytes: number().nullable()
@@ -27384,7 +27404,15 @@ var RecordingStorageUsageSchema = object({
27384
27404
  nodeId: string(),
27385
27405
  totalUsedBytes: number(),
27386
27406
  devices: array(RecordingDeviceUsageSchema),
27387
- locations: array(RecordingLocationUsageSchema)
27407
+ /**
27408
+ * Per-physical-volume capacity. OPTIONAL, and consumers must render the rest
27409
+ * of the payload without it: the hub serves this method through a BAKED
27410
+ * router, so a hub whose framework train predates a change to this array
27411
+ * strips it out of an answer a newer recorder happily produced. A UI that
27412
+ * dereferences it unconditionally crashes the whole Storage page over a
27413
+ * missing disk bar.
27414
+ */
27415
+ locations: array(RecordingLocationUsageSchema).optional()
27388
27416
  });
27389
27417
  /**
27390
27418
  * The OPERATOR-ARMED half of multi-location recordings (D116).
@@ -38169,8 +38197,14 @@ Object.freeze({
38169
38197
  "network-access": "ingress",
38170
38198
  "smtp-provider": "email"
38171
38199
  });
38200
+ /** Schema defaults — an untouched sub-field must author exactly these. */
38201
+ var NC_AUDIO_DEFAULTS = {
38202
+ hitPercent: 60,
38203
+ samplingSeconds: 10
38204
+ };
38172
38205
  new Map(AUDIO_MACRO_LABELS.flatMap((macro) => macro.icon === void 0 ? [] : [[macro.id, macro.icon]]));
38173
38206
  new Set(["devices", "classes"]);
38207
+ NC_AUDIO_DEFAULTS.hitPercent, NC_AUDIO_DEFAULTS.samplingSeconds;
38174
38208
  /**
38175
38209
  * TimelapseRule — the STANDALONE scheduled timelapse producer's rule model.
38176
38210
  *
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camstack/addon-provider-petkit",
3
- "version": "0.2.21",
3
+ "version": "0.2.23",
4
4
  "description": "PetKit smart-feeder device-provider addon for CamStack — wraps the @apocaliss92/nodepetkit PetKit cloud client",
5
5
  "keywords": [
6
6
  "camstack",