@camstack/addon-provider-ecowitt 0.2.20 → 0.2.22

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
@@ -20225,6 +20225,14 @@ var ClipSchema = object({
20225
20225
  endMs: number()
20226
20226
  }),
20227
20227
  /**
20228
+ * Distinct object classes attached to this visit (`person`, `car`, …),
20229
+ * dominant first, capped at {@link MAX_CLIP_LABELS}. The ribbon renders these
20230
+ * instead of the bare kind — "Object" tells the operator nothing a colour bar
20231
+ * did not. Absent (never empty) when the visit attached no classified object
20232
+ * event, so a motion/audio-only visit keeps its kind label.
20233
+ */
20234
+ labels: array(string()).max(3).optional(),
20235
+ /**
20228
20236
  * Lazy thumbnail URL, never inlined.
20229
20237
  *
20230
20238
  * Recording-derived clips (events-mode keep-window, and the prepared
@@ -26247,9 +26255,21 @@ var RecordingLocationUsageSchema = object({
26247
26255
  * previously rendered as two identical "disks" with a nonsensical used
26248
26256
  * split — hydrate attribution across aliases is arbitrary by nature. */
26249
26257
  locationIds: array(string()).optional(),
26250
- /** Bytes of recordings stored on this PHYSICAL volume (all aliases). */
26258
+ /**
26259
+ * Filesystem root of the physical volume this row accounts — the only
26260
+ * operator-legible identity when a location has no `displayName` yet, and
26261
+ * what a "which disk is full" alert has to name. OPTIONAL for the same
26262
+ * train-skew reason as `oldestMs`: a recorder that predates the field omits
26263
+ * it, and this schema must keep validating that older provider's payload.
26264
+ */
26265
+ root: string().optional(),
26266
+ /** Bytes of recordings stored on this PHYSICAL volume (all aliases). This is
26267
+ * the footage's SHARE of the volume, not how full the volume is — the disk
26268
+ * also holds everything that is not recordings. Volume fill is
26269
+ * `(totalBytes - availableBytes) / totalBytes`. */
26251
26270
  usedBytes: number(),
26252
- /** Free bytes on the location's volume; null when capacity is unknown (remote). */
26271
+ /** Free bytes on the location's volume; null when capacity is unknown
26272
+ * (remote/unstattable — the recorder logs the statfs failure with the root). */
26253
26273
  availableBytes: number().nullable(),
26254
26274
  /** Total bytes of the location's volume; null when unknown. */
26255
26275
  totalBytes: number().nullable()
@@ -26261,7 +26281,15 @@ var RecordingStorageUsageSchema = object({
26261
26281
  nodeId: string(),
26262
26282
  totalUsedBytes: number(),
26263
26283
  devices: array(RecordingDeviceUsageSchema),
26264
- locations: array(RecordingLocationUsageSchema)
26284
+ /**
26285
+ * Per-physical-volume capacity. OPTIONAL, and consumers must render the rest
26286
+ * of the payload without it: the hub serves this method through a BAKED
26287
+ * router, so a hub whose framework train predates a change to this array
26288
+ * strips it out of an answer a newer recorder happily produced. A UI that
26289
+ * dereferences it unconditionally crashes the whole Storage page over a
26290
+ * missing disk bar.
26291
+ */
26292
+ locations: array(RecordingLocationUsageSchema).optional()
26265
26293
  });
26266
26294
  /**
26267
26295
  * The OPERATOR-ARMED half of multi-location recordings (D116).
@@ -37046,8 +37074,14 @@ Object.freeze({
37046
37074
  "network-access": "ingress",
37047
37075
  "smtp-provider": "email"
37048
37076
  });
37077
+ /** Schema defaults — an untouched sub-field must author exactly these. */
37078
+ var NC_AUDIO_DEFAULTS = {
37079
+ hitPercent: 60,
37080
+ samplingSeconds: 10
37081
+ };
37049
37082
  new Map(AUDIO_MACRO_LABELS.flatMap((macro) => macro.icon === void 0 ? [] : [[macro.id, macro.icon]]));
37050
37083
  new Set(["devices", "classes"]);
37084
+ NC_AUDIO_DEFAULTS.hitPercent, NC_AUDIO_DEFAULTS.samplingSeconds;
37051
37085
  /**
37052
37086
  * TimelapseRule — the STANDALONE scheduled timelapse producer's rule model.
37053
37087
  *
package/dist/addon.mjs CHANGED
@@ -20224,6 +20224,14 @@ var ClipSchema = object({
20224
20224
  endMs: number()
20225
20225
  }),
20226
20226
  /**
20227
+ * Distinct object classes attached to this visit (`person`, `car`, …),
20228
+ * dominant first, capped at {@link MAX_CLIP_LABELS}. The ribbon renders these
20229
+ * instead of the bare kind — "Object" tells the operator nothing a colour bar
20230
+ * did not. Absent (never empty) when the visit attached no classified object
20231
+ * event, so a motion/audio-only visit keeps its kind label.
20232
+ */
20233
+ labels: array(string()).max(3).optional(),
20234
+ /**
20227
20235
  * Lazy thumbnail URL, never inlined.
20228
20236
  *
20229
20237
  * Recording-derived clips (events-mode keep-window, and the prepared
@@ -26246,9 +26254,21 @@ var RecordingLocationUsageSchema = object({
26246
26254
  * previously rendered as two identical "disks" with a nonsensical used
26247
26255
  * split — hydrate attribution across aliases is arbitrary by nature. */
26248
26256
  locationIds: array(string()).optional(),
26249
- /** Bytes of recordings stored on this PHYSICAL volume (all aliases). */
26257
+ /**
26258
+ * Filesystem root of the physical volume this row accounts — the only
26259
+ * operator-legible identity when a location has no `displayName` yet, and
26260
+ * what a "which disk is full" alert has to name. OPTIONAL for the same
26261
+ * train-skew reason as `oldestMs`: a recorder that predates the field omits
26262
+ * it, and this schema must keep validating that older provider's payload.
26263
+ */
26264
+ root: string().optional(),
26265
+ /** Bytes of recordings stored on this PHYSICAL volume (all aliases). This is
26266
+ * the footage's SHARE of the volume, not how full the volume is — the disk
26267
+ * also holds everything that is not recordings. Volume fill is
26268
+ * `(totalBytes - availableBytes) / totalBytes`. */
26250
26269
  usedBytes: number(),
26251
- /** Free bytes on the location's volume; null when capacity is unknown (remote). */
26270
+ /** Free bytes on the location's volume; null when capacity is unknown
26271
+ * (remote/unstattable — the recorder logs the statfs failure with the root). */
26252
26272
  availableBytes: number().nullable(),
26253
26273
  /** Total bytes of the location's volume; null when unknown. */
26254
26274
  totalBytes: number().nullable()
@@ -26260,7 +26280,15 @@ var RecordingStorageUsageSchema = object({
26260
26280
  nodeId: string(),
26261
26281
  totalUsedBytes: number(),
26262
26282
  devices: array(RecordingDeviceUsageSchema),
26263
- locations: array(RecordingLocationUsageSchema)
26283
+ /**
26284
+ * Per-physical-volume capacity. OPTIONAL, and consumers must render the rest
26285
+ * of the payload without it: the hub serves this method through a BAKED
26286
+ * router, so a hub whose framework train predates a change to this array
26287
+ * strips it out of an answer a newer recorder happily produced. A UI that
26288
+ * dereferences it unconditionally crashes the whole Storage page over a
26289
+ * missing disk bar.
26290
+ */
26291
+ locations: array(RecordingLocationUsageSchema).optional()
26264
26292
  });
26265
26293
  /**
26266
26294
  * The OPERATOR-ARMED half of multi-location recordings (D116).
@@ -37045,8 +37073,14 @@ Object.freeze({
37045
37073
  "network-access": "ingress",
37046
37074
  "smtp-provider": "email"
37047
37075
  });
37076
+ /** Schema defaults — an untouched sub-field must author exactly these. */
37077
+ var NC_AUDIO_DEFAULTS = {
37078
+ hitPercent: 60,
37079
+ samplingSeconds: 10
37080
+ };
37048
37081
  new Map(AUDIO_MACRO_LABELS.flatMap((macro) => macro.icon === void 0 ? [] : [[macro.id, macro.icon]]));
37049
37082
  new Set(["devices", "classes"]);
37083
+ NC_AUDIO_DEFAULTS.hitPercent, NC_AUDIO_DEFAULTS.samplingSeconds;
37050
37084
  /**
37051
37085
  * TimelapseRule — the STANDALONE scheduled timelapse producer's rule model.
37052
37086
  *
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camstack/addon-provider-ecowitt",
3
- "version": "0.2.20",
3
+ "version": "0.2.22",
4
4
  "description": "Ecowitt weather-station device-provider addon for CamStack — wraps the @apocaliss92/nodewitt local-poll / push client",
5
5
  "keywords": [
6
6
  "camstack",