@camstack/addon-remote-storage 1.2.91 → 1.2.92

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-D40Opc8I.js");
5
+ const require_shared = require("./shared-cpT4iCZr.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-BlMaNCjA.mjs";
1
+ import { c as BaseAddon, i as rearmIdleAbort, n as getOptionalBasePath, o as scheduleIdleAbort, s as storageProviderCapability, t as createSessionId } from "./shared-Cle4oyGQ.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-D40Opc8I.js");
5
+ const require_shared = require("./shared-cpT4iCZr.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-BlMaNCjA.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-Cle4oyGQ.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
@@ -19532,7 +19532,17 @@ var EventDensityBucketSchema = object({
19532
19532
  bucketStart: number(),
19533
19533
  motion: number().int(),
19534
19534
  object: number().int(),
19535
- audio: number().int()
19535
+ audio: number().int(),
19536
+ /**
19537
+ * Energy-weighted mean dBFS of the audio events in this bucket — the LEVEL,
19538
+ * as opposed to `audio`, which is their COUNT (D431).
19539
+ *
19540
+ * ABSENT when the bucket holds no audio event. Absence means "nothing was
19541
+ * measured", which is not the same claim as silence, and a lane that cannot
19542
+ * tell them apart paints a quiet hour at full scale — which is exactly what
19543
+ * the count-on-a-level-meter did.
19544
+ */
19545
+ audioDbfs: number().optional()
19536
19546
  });
19537
19547
  /**
19538
19548
  * One camera's row in a `getEventDensityBatch` answer.
@@ -27759,7 +27769,23 @@ var RecordingRangeSchema = object({
27759
27769
  });
27760
27770
  var RecordingAvailabilitySchema = object({
27761
27771
  deviceId: number(),
27762
- ranges: array(RecordingRangeSchema)
27772
+ ranges: array(RecordingRangeSchema),
27773
+ /**
27774
+ * Every profile this camera has footage in — not only the one `ranges`
27775
+ * describes (D433).
27776
+ *
27777
+ * `ranges` answers for ONE profile by design: the timeline is a single bar,
27778
+ * and enumerating all of them triples the directory reads for a bar that
27779
+ * would look identical. But the answer used to say nothing about that, so a
27780
+ * caller asking "what can I export?" read the single preferred profile as
27781
+ * the only one that exists — on this deployment every camera records `high`
27782
+ * AND `low`, the low tree holding 14 GB for camera 615 alone, and the export
27783
+ * UI could not see it.
27784
+ *
27785
+ * Cheap: it is the same shallow directory read the profile CHOICE already
27786
+ * makes. Ask for a specific profile's ranges with the `profile` input.
27787
+ */
27788
+ profilesWithFootage: array(string())
27763
27789
  });
27764
27790
  var RecordingDaysSchema = object({
27765
27791
  deviceId: number(),
@@ -27785,7 +27811,11 @@ var RecordingDaysSchema = object({
27785
27811
  var RecordingAvailabilityForDeviceSchema = object({
27786
27812
  deviceId: number(),
27787
27813
  read: _enum(["read", "unreadable"]),
27788
- ranges: array(RecordingRangeSchema).readonly()
27814
+ ranges: array(RecordingRangeSchema).readonly(),
27815
+ /** Same field, same meaning, as the singular answer (D433). A row that
27816
+ * dropped it would tell a grid caller the archive holds one profile.
27817
+ * Empty on an `'unreadable'` row: nobody looked. */
27818
+ profilesWithFootage: array(string()).readonly()
27789
27819
  });
27790
27820
  /**
27791
27821
  * One camera's row in a `getDaysWithRecordingsBatch` answer. Same rule as
@@ -28075,7 +28105,14 @@ var ReadWindowBytesResultSchema = discriminatedUnion("kind", [object({
28075
28105
  method(object({
28076
28106
  deviceId: number(),
28077
28107
  fromMs: number(),
28078
- toMs: number()
28108
+ toMs: number(),
28109
+ /**
28110
+ * Answer for THIS profile instead of the preferred one (D433). Absent
28111
+ * keeps the timeline's behaviour — one bar, one profile, one set of
28112
+ * reads. `profilesWithFootage` on the answer says what may be asked
28113
+ * for.
28114
+ */
28115
+ profile: string().optional()
28079
28116
  }), RecordingAvailabilitySchema, {
28080
28117
  kind: "query",
28081
28118
  auth: "protected"
@@ -19555,7 +19555,17 @@ var EventDensityBucketSchema = object({
19555
19555
  bucketStart: number(),
19556
19556
  motion: number().int(),
19557
19557
  object: number().int(),
19558
- audio: number().int()
19558
+ audio: number().int(),
19559
+ /**
19560
+ * Energy-weighted mean dBFS of the audio events in this bucket — the LEVEL,
19561
+ * as opposed to `audio`, which is their COUNT (D431).
19562
+ *
19563
+ * ABSENT when the bucket holds no audio event. Absence means "nothing was
19564
+ * measured", which is not the same claim as silence, and a lane that cannot
19565
+ * tell them apart paints a quiet hour at full scale — which is exactly what
19566
+ * the count-on-a-level-meter did.
19567
+ */
19568
+ audioDbfs: number().optional()
19559
19569
  });
19560
19570
  /**
19561
19571
  * One camera's row in a `getEventDensityBatch` answer.
@@ -27782,7 +27792,23 @@ var RecordingRangeSchema = object({
27782
27792
  });
27783
27793
  var RecordingAvailabilitySchema = object({
27784
27794
  deviceId: number(),
27785
- ranges: array(RecordingRangeSchema)
27795
+ ranges: array(RecordingRangeSchema),
27796
+ /**
27797
+ * Every profile this camera has footage in — not only the one `ranges`
27798
+ * describes (D433).
27799
+ *
27800
+ * `ranges` answers for ONE profile by design: the timeline is a single bar,
27801
+ * and enumerating all of them triples the directory reads for a bar that
27802
+ * would look identical. But the answer used to say nothing about that, so a
27803
+ * caller asking "what can I export?" read the single preferred profile as
27804
+ * the only one that exists — on this deployment every camera records `high`
27805
+ * AND `low`, the low tree holding 14 GB for camera 615 alone, and the export
27806
+ * UI could not see it.
27807
+ *
27808
+ * Cheap: it is the same shallow directory read the profile CHOICE already
27809
+ * makes. Ask for a specific profile's ranges with the `profile` input.
27810
+ */
27811
+ profilesWithFootage: array(string())
27786
27812
  });
27787
27813
  var RecordingDaysSchema = object({
27788
27814
  deviceId: number(),
@@ -27808,7 +27834,11 @@ var RecordingDaysSchema = object({
27808
27834
  var RecordingAvailabilityForDeviceSchema = object({
27809
27835
  deviceId: number(),
27810
27836
  read: _enum(["read", "unreadable"]),
27811
- ranges: array(RecordingRangeSchema).readonly()
27837
+ ranges: array(RecordingRangeSchema).readonly(),
27838
+ /** Same field, same meaning, as the singular answer (D433). A row that
27839
+ * dropped it would tell a grid caller the archive holds one profile.
27840
+ * Empty on an `'unreadable'` row: nobody looked. */
27841
+ profilesWithFootage: array(string()).readonly()
27812
27842
  });
27813
27843
  /**
27814
27844
  * One camera's row in a `getDaysWithRecordingsBatch` answer. Same rule as
@@ -28098,7 +28128,14 @@ var ReadWindowBytesResultSchema = discriminatedUnion("kind", [object({
28098
28128
  method(object({
28099
28129
  deviceId: number(),
28100
28130
  fromMs: number(),
28101
- toMs: number()
28131
+ toMs: number(),
28132
+ /**
28133
+ * Answer for THIS profile instead of the preferred one (D433). Absent
28134
+ * keeps the timeline's behaviour — one bar, one profile, one set of
28135
+ * reads. `profilesWithFootage` on the answer says what may be asked
28136
+ * for.
28137
+ */
28138
+ profile: string().optional()
28102
28139
  }), RecordingAvailabilitySchema, {
28103
28140
  kind: "query",
28104
28141
  auth: "protected"
package/dist/smb.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-D40Opc8I.js");
5
+ const require_shared = require("./shared-cpT4iCZr.js");
6
6
  let node_crypto = require("node:crypto");
7
7
  let node_path = require("node:path");
8
8
  node_path = require_shared.__toESM(node_path);
@@ -1,4 +1,4 @@
1
- import { c as BaseAddon, i as rearmIdleAbort, o as scheduleIdleAbort, s as storageProviderCapability } from "./shared-BlMaNCjA.mjs";
1
+ import { c as BaseAddon, i as rearmIdleAbort, o as scheduleIdleAbort, s as storageProviderCapability } from "./shared-Cle4oyGQ.mjs";
2
2
  import { randomUUID } from "node:crypto";
3
3
  import * as path from "node:path";
4
4
  import * as fsp from "node:fs/promises";
@@ -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-D40Opc8I.js");
5
+ const require_shared = require("./shared-cpT4iCZr.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-BlMaNCjA.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-Cle4oyGQ.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.91",
3
+ "version": "1.2.92",
4
4
  "description": "Remote storage providers (SFTP, S3, WebDAV, SMB) — unifies remote backends behind the storage-provider cap",
5
5
  "keywords": [
6
6
  "camstack",