@camstack/addon-remote-storage 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.
package/dist/s3.addon.js CHANGED
@@ -2,7 +2,7 @@ Object.defineProperties(exports, {
2
2
  __esModule: { value: true },
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
- const require_shared = require("./shared-CGc-WGwO.js");
5
+ const require_shared = require("./shared-BJAy3oN8.js");
6
6
  let node_stream = require("node:stream");
7
7
  let _aws_sdk_client_s3 = require("@aws-sdk/client-s3");
8
8
  let _aws_sdk_lib_storage = require("@aws-sdk/lib-storage");
package/dist/s3.addon.mjs CHANGED
@@ -1,4 +1,4 @@
1
- import { c as BaseAddon, i as rearmIdleAbort, n as getOptionalBasePath, o as scheduleIdleAbort, s as storageProviderCapability, t as createSessionId } from "./shared-C-bqmSqc.mjs";
1
+ import { c as BaseAddon, i as rearmIdleAbort, n as getOptionalBasePath, o as scheduleIdleAbort, s as storageProviderCapability, t as createSessionId } from "./shared-BRLPgCy4.mjs";
2
2
  import { PassThrough } from "node:stream";
3
3
  import { DeleteObjectCommand, GetObjectCommand, HeadBucketCommand, HeadObjectCommand, ListObjectsV2Command, PutObjectCommand, S3Client } from "@aws-sdk/client-s3";
4
4
  import { Upload } from "@aws-sdk/lib-storage";
@@ -2,7 +2,7 @@ Object.defineProperties(exports, {
2
2
  __esModule: { value: true },
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
- const require_shared = require("./shared-CGc-WGwO.js");
5
+ const require_shared = require("./shared-BJAy3oN8.js");
6
6
  let ssh2 = require("ssh2");
7
7
  let node_path = require("node:path");
8
8
  node_path = require_shared.__toESM(node_path);
@@ -1,4 +1,4 @@
1
- import { a as safeJoinRemotePath, c as BaseAddon, i as rearmIdleAbort, o as scheduleIdleAbort, r as getRequiredBasePath, s as storageProviderCapability, t as createSessionId } from "./shared-C-bqmSqc.mjs";
1
+ import { a as safeJoinRemotePath, c as BaseAddon, i as rearmIdleAbort, o as scheduleIdleAbort, r as getRequiredBasePath, s as storageProviderCapability, t as createSessionId } from "./shared-BRLPgCy4.mjs";
2
2
  import { Client } from "ssh2";
3
3
  import * as path from "node:path";
4
4
  //#region src/providers/sftp/sftp-config-schema.ts
@@ -19933,6 +19933,14 @@ var ClipSchema = object({
19933
19933
  endMs: number()
19934
19934
  }),
19935
19935
  /**
19936
+ * Distinct object classes attached to this visit (`person`, `car`, …),
19937
+ * dominant first, capped at {@link MAX_CLIP_LABELS}. The ribbon renders these
19938
+ * instead of the bare kind — "Object" tells the operator nothing a colour bar
19939
+ * did not. Absent (never empty) when the visit attached no classified object
19940
+ * event, so a motion/audio-only visit keeps its kind label.
19941
+ */
19942
+ labels: array(string()).max(3).optional(),
19943
+ /**
19936
19944
  * Lazy thumbnail URL, never inlined.
19937
19945
  *
19938
19946
  * Recording-derived clips (events-mode keep-window, and the prepared
@@ -24267,9 +24275,21 @@ var RecordingLocationUsageSchema = object({
24267
24275
  * previously rendered as two identical "disks" with a nonsensical used
24268
24276
  * split — hydrate attribution across aliases is arbitrary by nature. */
24269
24277
  locationIds: array(string()).optional(),
24270
- /** Bytes of recordings stored on this PHYSICAL volume (all aliases). */
24278
+ /**
24279
+ * Filesystem root of the physical volume this row accounts — the only
24280
+ * operator-legible identity when a location has no `displayName` yet, and
24281
+ * what a "which disk is full" alert has to name. OPTIONAL for the same
24282
+ * train-skew reason as `oldestMs`: a recorder that predates the field omits
24283
+ * it, and this schema must keep validating that older provider's payload.
24284
+ */
24285
+ root: string().optional(),
24286
+ /** Bytes of recordings stored on this PHYSICAL volume (all aliases). This is
24287
+ * the footage's SHARE of the volume, not how full the volume is — the disk
24288
+ * also holds everything that is not recordings. Volume fill is
24289
+ * `(totalBytes - availableBytes) / totalBytes`. */
24271
24290
  usedBytes: number(),
24272
- /** Free bytes on the location's volume; null when capacity is unknown (remote). */
24291
+ /** Free bytes on the location's volume; null when capacity is unknown
24292
+ * (remote/unstattable — the recorder logs the statfs failure with the root). */
24273
24293
  availableBytes: number().nullable(),
24274
24294
  /** Total bytes of the location's volume; null when unknown. */
24275
24295
  totalBytes: number().nullable()
@@ -24281,7 +24301,15 @@ var RecordingStorageUsageSchema = object({
24281
24301
  nodeId: string(),
24282
24302
  totalUsedBytes: number(),
24283
24303
  devices: array(RecordingDeviceUsageSchema),
24284
- locations: array(RecordingLocationUsageSchema)
24304
+ /**
24305
+ * Per-physical-volume capacity. OPTIONAL, and consumers must render the rest
24306
+ * of the payload without it: the hub serves this method through a BAKED
24307
+ * router, so a hub whose framework train predates a change to this array
24308
+ * strips it out of an answer a newer recorder happily produced. A UI that
24309
+ * dereferences it unconditionally crashes the whole Storage page over a
24310
+ * missing disk bar.
24311
+ */
24312
+ locations: array(RecordingLocationUsageSchema).optional()
24285
24313
  });
24286
24314
  /**
24287
24315
  * The OPERATOR-ARMED half of multi-location recordings (D116).
@@ -33397,8 +33425,14 @@ Object.freeze({
33397
33425
  "network-access": "ingress",
33398
33426
  "smtp-provider": "email"
33399
33427
  });
33428
+ /** Schema defaults — an untouched sub-field must author exactly these. */
33429
+ var NC_AUDIO_DEFAULTS = {
33430
+ hitPercent: 60,
33431
+ samplingSeconds: 10
33432
+ };
33400
33433
  new Map(AUDIO_MACRO_LABELS.flatMap((macro) => macro.icon === void 0 ? [] : [[macro.id, macro.icon]]));
33401
33434
  new Set(["devices", "classes"]);
33435
+ NC_AUDIO_DEFAULTS.hitPercent, NC_AUDIO_DEFAULTS.samplingSeconds;
33402
33436
  /**
33403
33437
  * TimelapseRule — the STANDALONE scheduled timelapse producer's rule model.
33404
33438
  *
@@ -19910,6 +19910,14 @@ var ClipSchema = object({
19910
19910
  endMs: number()
19911
19911
  }),
19912
19912
  /**
19913
+ * Distinct object classes attached to this visit (`person`, `car`, …),
19914
+ * dominant first, capped at {@link MAX_CLIP_LABELS}. The ribbon renders these
19915
+ * instead of the bare kind — "Object" tells the operator nothing a colour bar
19916
+ * did not. Absent (never empty) when the visit attached no classified object
19917
+ * event, so a motion/audio-only visit keeps its kind label.
19918
+ */
19919
+ labels: array(string()).max(3).optional(),
19920
+ /**
19913
19921
  * Lazy thumbnail URL, never inlined.
19914
19922
  *
19915
19923
  * Recording-derived clips (events-mode keep-window, and the prepared
@@ -24244,9 +24252,21 @@ var RecordingLocationUsageSchema = object({
24244
24252
  * previously rendered as two identical "disks" with a nonsensical used
24245
24253
  * split — hydrate attribution across aliases is arbitrary by nature. */
24246
24254
  locationIds: array(string()).optional(),
24247
- /** Bytes of recordings stored on this PHYSICAL volume (all aliases). */
24255
+ /**
24256
+ * Filesystem root of the physical volume this row accounts — the only
24257
+ * operator-legible identity when a location has no `displayName` yet, and
24258
+ * what a "which disk is full" alert has to name. OPTIONAL for the same
24259
+ * train-skew reason as `oldestMs`: a recorder that predates the field omits
24260
+ * it, and this schema must keep validating that older provider's payload.
24261
+ */
24262
+ root: string().optional(),
24263
+ /** Bytes of recordings stored on this PHYSICAL volume (all aliases). This is
24264
+ * the footage's SHARE of the volume, not how full the volume is — the disk
24265
+ * also holds everything that is not recordings. Volume fill is
24266
+ * `(totalBytes - availableBytes) / totalBytes`. */
24248
24267
  usedBytes: number(),
24249
- /** Free bytes on the location's volume; null when capacity is unknown (remote). */
24268
+ /** Free bytes on the location's volume; null when capacity is unknown
24269
+ * (remote/unstattable — the recorder logs the statfs failure with the root). */
24250
24270
  availableBytes: number().nullable(),
24251
24271
  /** Total bytes of the location's volume; null when unknown. */
24252
24272
  totalBytes: number().nullable()
@@ -24258,7 +24278,15 @@ var RecordingStorageUsageSchema = object({
24258
24278
  nodeId: string(),
24259
24279
  totalUsedBytes: number(),
24260
24280
  devices: array(RecordingDeviceUsageSchema),
24261
- locations: array(RecordingLocationUsageSchema)
24281
+ /**
24282
+ * Per-physical-volume capacity. OPTIONAL, and consumers must render the rest
24283
+ * of the payload without it: the hub serves this method through a BAKED
24284
+ * router, so a hub whose framework train predates a change to this array
24285
+ * strips it out of an answer a newer recorder happily produced. A UI that
24286
+ * dereferences it unconditionally crashes the whole Storage page over a
24287
+ * missing disk bar.
24288
+ */
24289
+ locations: array(RecordingLocationUsageSchema).optional()
24262
24290
  });
24263
24291
  /**
24264
24292
  * The OPERATOR-ARMED half of multi-location recordings (D116).
@@ -33374,8 +33402,14 @@ Object.freeze({
33374
33402
  "network-access": "ingress",
33375
33403
  "smtp-provider": "email"
33376
33404
  });
33405
+ /** Schema defaults — an untouched sub-field must author exactly these. */
33406
+ var NC_AUDIO_DEFAULTS = {
33407
+ hitPercent: 60,
33408
+ samplingSeconds: 10
33409
+ };
33377
33410
  new Map(AUDIO_MACRO_LABELS.flatMap((macro) => macro.icon === void 0 ? [] : [[macro.id, macro.icon]]));
33378
33411
  new Set(["devices", "classes"]);
33412
+ NC_AUDIO_DEFAULTS.hitPercent, NC_AUDIO_DEFAULTS.samplingSeconds;
33379
33413
  /**
33380
33414
  * TimelapseRule — the STANDALONE scheduled timelapse producer's rule model.
33381
33415
  *
@@ -2,7 +2,7 @@ Object.defineProperties(exports, {
2
2
  __esModule: { value: true },
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
- const require_shared = require("./shared-CGc-WGwO.js");
5
+ const require_shared = require("./shared-BJAy3oN8.js");
6
6
  let node_stream = require("node:stream");
7
7
  let webdav = require("webdav");
8
8
  //#region src/providers/webdav/webdav-config-schema.ts
@@ -1,4 +1,4 @@
1
- import { a as safeJoinRemotePath, c as BaseAddon, i as rearmIdleAbort, o as scheduleIdleAbort, r as getRequiredBasePath, s as storageProviderCapability, t as createSessionId } from "./shared-C-bqmSqc.mjs";
1
+ import { a as safeJoinRemotePath, c as BaseAddon, i as rearmIdleAbort, o as scheduleIdleAbort, r as getRequiredBasePath, s as storageProviderCapability, t as createSessionId } from "./shared-BRLPgCy4.mjs";
2
2
  import { PassThrough } from "node:stream";
3
3
  import { AuthType, createClient } from "webdav";
4
4
  //#region src/providers/webdav/webdav-config-schema.ts
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camstack/addon-remote-storage",
3
- "version": "1.2.20",
3
+ "version": "1.2.22",
4
4
  "description": "Remote storage providers (SFTP, S3, WebDAV) — unifies remote backends behind the storage-provider cap",
5
5
  "keywords": [
6
6
  "camstack",