@camstack/addon-smtp-nodemailer 1.2.20 → 1.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.
@@ -19914,6 +19914,14 @@ var ClipSchema = object({
19914
19914
  endMs: number()
19915
19915
  }),
19916
19916
  /**
19917
+ * Distinct object classes attached to this visit (`person`, `car`, …),
19918
+ * dominant first, capped at {@link MAX_CLIP_LABELS}. The ribbon renders these
19919
+ * instead of the bare kind — "Object" tells the operator nothing a colour bar
19920
+ * did not. Absent (never empty) when the visit attached no classified object
19921
+ * event, so a motion/audio-only visit keeps its kind label.
19922
+ */
19923
+ labels: array(string()).max(3).optional(),
19924
+ /**
19917
19925
  * Lazy thumbnail URL, never inlined.
19918
19926
  *
19919
19927
  * Recording-derived clips (events-mode keep-window, and the prepared
@@ -24248,9 +24256,21 @@ var RecordingLocationUsageSchema = object({
24248
24256
  * previously rendered as two identical "disks" with a nonsensical used
24249
24257
  * split — hydrate attribution across aliases is arbitrary by nature. */
24250
24258
  locationIds: array(string()).optional(),
24251
- /** Bytes of recordings stored on this PHYSICAL volume (all aliases). */
24259
+ /**
24260
+ * Filesystem root of the physical volume this row accounts — the only
24261
+ * operator-legible identity when a location has no `displayName` yet, and
24262
+ * what a "which disk is full" alert has to name. OPTIONAL for the same
24263
+ * train-skew reason as `oldestMs`: a recorder that predates the field omits
24264
+ * it, and this schema must keep validating that older provider's payload.
24265
+ */
24266
+ root: string().optional(),
24267
+ /** Bytes of recordings stored on this PHYSICAL volume (all aliases). This is
24268
+ * the footage's SHARE of the volume, not how full the volume is — the disk
24269
+ * also holds everything that is not recordings. Volume fill is
24270
+ * `(totalBytes - availableBytes) / totalBytes`. */
24252
24271
  usedBytes: number(),
24253
- /** Free bytes on the location's volume; null when capacity is unknown (remote). */
24272
+ /** Free bytes on the location's volume; null when capacity is unknown
24273
+ * (remote/unstattable — the recorder logs the statfs failure with the root). */
24254
24274
  availableBytes: number().nullable(),
24255
24275
  /** Total bytes of the location's volume; null when unknown. */
24256
24276
  totalBytes: number().nullable()
@@ -24262,7 +24282,15 @@ var RecordingStorageUsageSchema = object({
24262
24282
  nodeId: string(),
24263
24283
  totalUsedBytes: number(),
24264
24284
  devices: array(RecordingDeviceUsageSchema),
24265
- locations: array(RecordingLocationUsageSchema)
24285
+ /**
24286
+ * Per-physical-volume capacity. OPTIONAL, and consumers must render the rest
24287
+ * of the payload without it: the hub serves this method through a BAKED
24288
+ * router, so a hub whose framework train predates a change to this array
24289
+ * strips it out of an answer a newer recorder happily produced. A UI that
24290
+ * dereferences it unconditionally crashes the whole Storage page over a
24291
+ * missing disk bar.
24292
+ */
24293
+ locations: array(RecordingLocationUsageSchema).optional()
24266
24294
  });
24267
24295
  /**
24268
24296
  * The OPERATOR-ARMED half of multi-location recordings (D116).
@@ -33378,8 +33406,14 @@ Object.freeze({
33378
33406
  "network-access": "ingress",
33379
33407
  "smtp-provider": "email"
33380
33408
  });
33409
+ /** Schema defaults — an untouched sub-field must author exactly these. */
33410
+ var NC_AUDIO_DEFAULTS = {
33411
+ hitPercent: 60,
33412
+ samplingSeconds: 10
33413
+ };
33381
33414
  new Map(AUDIO_MACRO_LABELS.flatMap((macro) => macro.icon === void 0 ? [] : [[macro.id, macro.icon]]));
33382
33415
  new Set(["devices", "classes"]);
33416
+ NC_AUDIO_DEFAULTS.hitPercent, NC_AUDIO_DEFAULTS.samplingSeconds;
33383
33417
  /**
33384
33418
  * TimelapseRule — the STANDALONE scheduled timelapse producer's rule model.
33385
33419
  *
@@ -19912,6 +19912,14 @@ var ClipSchema = object({
19912
19912
  endMs: number()
19913
19913
  }),
19914
19914
  /**
19915
+ * Distinct object classes attached to this visit (`person`, `car`, …),
19916
+ * dominant first, capped at {@link MAX_CLIP_LABELS}. The ribbon renders these
19917
+ * instead of the bare kind — "Object" tells the operator nothing a colour bar
19918
+ * did not. Absent (never empty) when the visit attached no classified object
19919
+ * event, so a motion/audio-only visit keeps its kind label.
19920
+ */
19921
+ labels: array(string()).max(3).optional(),
19922
+ /**
19915
19923
  * Lazy thumbnail URL, never inlined.
19916
19924
  *
19917
19925
  * Recording-derived clips (events-mode keep-window, and the prepared
@@ -24246,9 +24254,21 @@ var RecordingLocationUsageSchema = object({
24246
24254
  * previously rendered as two identical "disks" with a nonsensical used
24247
24255
  * split — hydrate attribution across aliases is arbitrary by nature. */
24248
24256
  locationIds: array(string()).optional(),
24249
- /** Bytes of recordings stored on this PHYSICAL volume (all aliases). */
24257
+ /**
24258
+ * Filesystem root of the physical volume this row accounts — the only
24259
+ * operator-legible identity when a location has no `displayName` yet, and
24260
+ * what a "which disk is full" alert has to name. OPTIONAL for the same
24261
+ * train-skew reason as `oldestMs`: a recorder that predates the field omits
24262
+ * it, and this schema must keep validating that older provider's payload.
24263
+ */
24264
+ root: string().optional(),
24265
+ /** Bytes of recordings stored on this PHYSICAL volume (all aliases). This is
24266
+ * the footage's SHARE of the volume, not how full the volume is — the disk
24267
+ * also holds everything that is not recordings. Volume fill is
24268
+ * `(totalBytes - availableBytes) / totalBytes`. */
24250
24269
  usedBytes: number(),
24251
- /** Free bytes on the location's volume; null when capacity is unknown (remote). */
24270
+ /** Free bytes on the location's volume; null when capacity is unknown
24271
+ * (remote/unstattable — the recorder logs the statfs failure with the root). */
24252
24272
  availableBytes: number().nullable(),
24253
24273
  /** Total bytes of the location's volume; null when unknown. */
24254
24274
  totalBytes: number().nullable()
@@ -24260,7 +24280,15 @@ var RecordingStorageUsageSchema = object({
24260
24280
  nodeId: string(),
24261
24281
  totalUsedBytes: number(),
24262
24282
  devices: array(RecordingDeviceUsageSchema),
24263
- locations: array(RecordingLocationUsageSchema)
24283
+ /**
24284
+ * Per-physical-volume capacity. OPTIONAL, and consumers must render the rest
24285
+ * of the payload without it: the hub serves this method through a BAKED
24286
+ * router, so a hub whose framework train predates a change to this array
24287
+ * strips it out of an answer a newer recorder happily produced. A UI that
24288
+ * dereferences it unconditionally crashes the whole Storage page over a
24289
+ * missing disk bar.
24290
+ */
24291
+ locations: array(RecordingLocationUsageSchema).optional()
24264
24292
  });
24265
24293
  /**
24266
24294
  * The OPERATOR-ARMED half of multi-location recordings (D116).
@@ -33376,8 +33404,14 @@ Object.freeze({
33376
33404
  "network-access": "ingress",
33377
33405
  "smtp-provider": "email"
33378
33406
  });
33407
+ /** Schema defaults — an untouched sub-field must author exactly these. */
33408
+ var NC_AUDIO_DEFAULTS = {
33409
+ hitPercent: 60,
33410
+ samplingSeconds: 10
33411
+ };
33379
33412
  new Map(AUDIO_MACRO_LABELS.flatMap((macro) => macro.icon === void 0 ? [] : [[macro.id, macro.icon]]));
33380
33413
  new Set(["devices", "classes"]);
33414
+ NC_AUDIO_DEFAULTS.hitPercent, NC_AUDIO_DEFAULTS.samplingSeconds;
33381
33415
  /**
33382
33416
  * TimelapseRule — the STANDALONE scheduled timelapse producer's rule model.
33383
33417
  *
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camstack/addon-smtp-nodemailer",
3
- "version": "1.2.20",
3
+ "version": "1.2.22",
4
4
  "description": "SMTP email provider addon for CamStack — wraps `nodemailer` and registers a `smtp-provider` cap collection entry. Used by magic-link login + notifier addons.",
5
5
  "keywords": [
6
6
  "camstack",