@camstack/addon-provider-unraid 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
@@ -20222,6 +20222,14 @@ var ClipSchema = object({
20222
20222
  endMs: number()
20223
20223
  }),
20224
20224
  /**
20225
+ * Distinct object classes attached to this visit (`person`, `car`, …),
20226
+ * dominant first, capped at {@link MAX_CLIP_LABELS}. The ribbon renders these
20227
+ * instead of the bare kind — "Object" tells the operator nothing a colour bar
20228
+ * did not. Absent (never empty) when the visit attached no classified object
20229
+ * event, so a motion/audio-only visit keeps its kind label.
20230
+ */
20231
+ labels: array(string()).max(3).optional(),
20232
+ /**
20225
20233
  * Lazy thumbnail URL, never inlined.
20226
20234
  *
20227
20235
  * Recording-derived clips (events-mode keep-window, and the prepared
@@ -26261,9 +26269,21 @@ var RecordingLocationUsageSchema = object({
26261
26269
  * previously rendered as two identical "disks" with a nonsensical used
26262
26270
  * split — hydrate attribution across aliases is arbitrary by nature. */
26263
26271
  locationIds: array(string()).optional(),
26264
- /** Bytes of recordings stored on this PHYSICAL volume (all aliases). */
26272
+ /**
26273
+ * Filesystem root of the physical volume this row accounts — the only
26274
+ * operator-legible identity when a location has no `displayName` yet, and
26275
+ * what a "which disk is full" alert has to name. OPTIONAL for the same
26276
+ * train-skew reason as `oldestMs`: a recorder that predates the field omits
26277
+ * it, and this schema must keep validating that older provider's payload.
26278
+ */
26279
+ root: string().optional(),
26280
+ /** Bytes of recordings stored on this PHYSICAL volume (all aliases). This is
26281
+ * the footage's SHARE of the volume, not how full the volume is — the disk
26282
+ * also holds everything that is not recordings. Volume fill is
26283
+ * `(totalBytes - availableBytes) / totalBytes`. */
26265
26284
  usedBytes: number(),
26266
- /** Free bytes on the location's volume; null when capacity is unknown (remote). */
26285
+ /** Free bytes on the location's volume; null when capacity is unknown
26286
+ * (remote/unstattable — the recorder logs the statfs failure with the root). */
26267
26287
  availableBytes: number().nullable(),
26268
26288
  /** Total bytes of the location's volume; null when unknown. */
26269
26289
  totalBytes: number().nullable()
@@ -26275,7 +26295,15 @@ var RecordingStorageUsageSchema = object({
26275
26295
  nodeId: string(),
26276
26296
  totalUsedBytes: number(),
26277
26297
  devices: array(RecordingDeviceUsageSchema),
26278
- locations: array(RecordingLocationUsageSchema)
26298
+ /**
26299
+ * Per-physical-volume capacity. OPTIONAL, and consumers must render the rest
26300
+ * of the payload without it: the hub serves this method through a BAKED
26301
+ * router, so a hub whose framework train predates a change to this array
26302
+ * strips it out of an answer a newer recorder happily produced. A UI that
26303
+ * dereferences it unconditionally crashes the whole Storage page over a
26304
+ * missing disk bar.
26305
+ */
26306
+ locations: array(RecordingLocationUsageSchema).optional()
26279
26307
  });
26280
26308
  /**
26281
26309
  * The OPERATOR-ARMED half of multi-location recordings (D116).
@@ -37060,8 +37088,14 @@ Object.freeze({
37060
37088
  "network-access": "ingress",
37061
37089
  "smtp-provider": "email"
37062
37090
  });
37091
+ /** Schema defaults — an untouched sub-field must author exactly these. */
37092
+ var NC_AUDIO_DEFAULTS = {
37093
+ hitPercent: 60,
37094
+ samplingSeconds: 10
37095
+ };
37063
37096
  new Map(AUDIO_MACRO_LABELS.flatMap((macro) => macro.icon === void 0 ? [] : [[macro.id, macro.icon]]));
37064
37097
  new Set(["devices", "classes"]);
37098
+ NC_AUDIO_DEFAULTS.hitPercent, NC_AUDIO_DEFAULTS.samplingSeconds;
37065
37099
  /**
37066
37100
  * TimelapseRule — the STANDALONE scheduled timelapse producer's rule model.
37067
37101
  *
package/dist/addon.mjs CHANGED
@@ -20221,6 +20221,14 @@ var ClipSchema = object({
20221
20221
  endMs: number()
20222
20222
  }),
20223
20223
  /**
20224
+ * Distinct object classes attached to this visit (`person`, `car`, …),
20225
+ * dominant first, capped at {@link MAX_CLIP_LABELS}. The ribbon renders these
20226
+ * instead of the bare kind — "Object" tells the operator nothing a colour bar
20227
+ * did not. Absent (never empty) when the visit attached no classified object
20228
+ * event, so a motion/audio-only visit keeps its kind label.
20229
+ */
20230
+ labels: array(string()).max(3).optional(),
20231
+ /**
20224
20232
  * Lazy thumbnail URL, never inlined.
20225
20233
  *
20226
20234
  * Recording-derived clips (events-mode keep-window, and the prepared
@@ -26260,9 +26268,21 @@ var RecordingLocationUsageSchema = object({
26260
26268
  * previously rendered as two identical "disks" with a nonsensical used
26261
26269
  * split — hydrate attribution across aliases is arbitrary by nature. */
26262
26270
  locationIds: array(string()).optional(),
26263
- /** Bytes of recordings stored on this PHYSICAL volume (all aliases). */
26271
+ /**
26272
+ * Filesystem root of the physical volume this row accounts — the only
26273
+ * operator-legible identity when a location has no `displayName` yet, and
26274
+ * what a "which disk is full" alert has to name. OPTIONAL for the same
26275
+ * train-skew reason as `oldestMs`: a recorder that predates the field omits
26276
+ * it, and this schema must keep validating that older provider's payload.
26277
+ */
26278
+ root: string().optional(),
26279
+ /** Bytes of recordings stored on this PHYSICAL volume (all aliases). This is
26280
+ * the footage's SHARE of the volume, not how full the volume is — the disk
26281
+ * also holds everything that is not recordings. Volume fill is
26282
+ * `(totalBytes - availableBytes) / totalBytes`. */
26264
26283
  usedBytes: number(),
26265
- /** Free bytes on the location's volume; null when capacity is unknown (remote). */
26284
+ /** Free bytes on the location's volume; null when capacity is unknown
26285
+ * (remote/unstattable — the recorder logs the statfs failure with the root). */
26266
26286
  availableBytes: number().nullable(),
26267
26287
  /** Total bytes of the location's volume; null when unknown. */
26268
26288
  totalBytes: number().nullable()
@@ -26274,7 +26294,15 @@ var RecordingStorageUsageSchema = object({
26274
26294
  nodeId: string(),
26275
26295
  totalUsedBytes: number(),
26276
26296
  devices: array(RecordingDeviceUsageSchema),
26277
- locations: array(RecordingLocationUsageSchema)
26297
+ /**
26298
+ * Per-physical-volume capacity. OPTIONAL, and consumers must render the rest
26299
+ * of the payload without it: the hub serves this method through a BAKED
26300
+ * router, so a hub whose framework train predates a change to this array
26301
+ * strips it out of an answer a newer recorder happily produced. A UI that
26302
+ * dereferences it unconditionally crashes the whole Storage page over a
26303
+ * missing disk bar.
26304
+ */
26305
+ locations: array(RecordingLocationUsageSchema).optional()
26278
26306
  });
26279
26307
  /**
26280
26308
  * The OPERATOR-ARMED half of multi-location recordings (D116).
@@ -37059,8 +37087,14 @@ Object.freeze({
37059
37087
  "network-access": "ingress",
37060
37088
  "smtp-provider": "email"
37061
37089
  });
37090
+ /** Schema defaults — an untouched sub-field must author exactly these. */
37091
+ var NC_AUDIO_DEFAULTS = {
37092
+ hitPercent: 60,
37093
+ samplingSeconds: 10
37094
+ };
37062
37095
  new Map(AUDIO_MACRO_LABELS.flatMap((macro) => macro.icon === void 0 ? [] : [[macro.id, macro.icon]]));
37063
37096
  new Set(["devices", "classes"]);
37097
+ NC_AUDIO_DEFAULTS.hitPercent, NC_AUDIO_DEFAULTS.samplingSeconds;
37064
37098
  /**
37065
37099
  * TimelapseRule — the STANDALONE scheduled timelapse producer's rule model.
37066
37100
  *
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camstack/addon-provider-unraid",
3
- "version": "0.2.21",
3
+ "version": "0.2.23",
4
4
  "description": "Unraid device-provider addon for CamStack — one Container per Unraid instance fanning out array, disk, docker and notification entities",
5
5
  "keywords": [
6
6
  "camstack",