@camstack/addon-remote-storage 1.2.91 → 1.2.93

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-Dx28ZZTs.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-ZIwBrqd-.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-Dx28ZZTs.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-ZIwBrqd-.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
@@ -16150,6 +16150,7 @@ var NcSystemEventKindSchema = _enum([
16150
16150
  "addon-crash-loop",
16151
16151
  "addon-update-available",
16152
16152
  "server-update-available",
16153
+ "wrapper-update-available",
16153
16154
  "alarm-triggered",
16154
16155
  "alarm-armed",
16155
16156
  "alarm-disarmed",
@@ -19555,7 +19556,17 @@ var EventDensityBucketSchema = object({
19555
19556
  bucketStart: number(),
19556
19557
  motion: number().int(),
19557
19558
  object: number().int(),
19558
- audio: number().int()
19559
+ audio: number().int(),
19560
+ /**
19561
+ * Energy-weighted mean dBFS of the audio events in this bucket — the LEVEL,
19562
+ * as opposed to `audio`, which is their COUNT (D431).
19563
+ *
19564
+ * ABSENT when the bucket holds no audio event. Absence means "nothing was
19565
+ * measured", which is not the same claim as silence, and a lane that cannot
19566
+ * tell them apart paints a quiet hour at full scale — which is exactly what
19567
+ * the count-on-a-level-meter did.
19568
+ */
19569
+ audioDbfs: number().optional()
19559
19570
  });
19560
19571
  /**
19561
19572
  * One camera's row in a `getEventDensityBatch` answer.
@@ -21656,6 +21667,53 @@ var ImageContractSchema = object({
21656
21667
  /** One operator-grade sentence: this node runs image X; the contract says Y. */
21657
21668
  message: string()
21658
21669
  });
21670
+ /**
21671
+ * The shell verdict (see {@link WrapperKindSchema}) with the proofs that
21672
+ * produced it.
21673
+ *
21674
+ * There is deliberately NO `canSelfUpdate` and no apply action: a wrapper
21675
+ * update is an ANNOUNCEMENT. The notification body carries the exact command
21676
+ * for a `docker` shell and says the app restarts into the new build for
21677
+ * `electron`, and that sentence is chosen from `kind` alone — a boolean
21678
+ * nothing reads is the defect this repo keeps paying for.
21679
+ */
21680
+ var WrapperIdentitySchema = object({
21681
+ kind: _enum([
21682
+ "docker",
21683
+ "electron",
21684
+ "native",
21685
+ "contradictory",
21686
+ "unknown"
21687
+ ]),
21688
+ /** Every probe that ran, in a stable order. Never empty. */
21689
+ evidence: array(object({
21690
+ /** Which probe this row reports. */
21691
+ fact: _enum([
21692
+ "dockerenv-file",
21693
+ "proc-1-cgroup",
21694
+ "platform",
21695
+ "electron-app-version-env"
21696
+ ]),
21697
+ /**
21698
+ * `observed` — this process read it itself. `declared` — the shell told the
21699
+ * process and nothing here can check it. Only the Electron app version is
21700
+ * ever `declared`, and only because a child cannot see its parent.
21701
+ */
21702
+ mode: _enum(["observed", "declared"]),
21703
+ /** Did the probe support the fact it names? A `false` row is still evidence. */
21704
+ holds: boolean(),
21705
+ /** What was actually read, verbatim enough for an operator to argue with. */
21706
+ detail: string()
21707
+ })),
21708
+ /**
21709
+ * The version of the SHELL, when the shell has one it can state: the
21710
+ * Electron app version it declared, or the baked seed closure that
21711
+ * fingerprints a container / app bundle. `null` for `contradictory` and
21712
+ * `unknown` — which version belongs to the shell is precisely what is not
21713
+ * known there.
21714
+ */
21715
+ currentVersion: string().nullable()
21716
+ });
21659
21717
  var ServerRollbackInfoSchema = object({
21660
21718
  /** The version that failed (or was manually rolled back). */
21661
21719
  fromVersion: string(),
@@ -21697,7 +21755,13 @@ var ServerPackageStatusSchema = object({
21697
21755
  * Seed-vs-contract verdict (see {@link ImageContractSchema}). Optional for
21698
21756
  * version skew: an older provider's payload simply omits it.
21699
21757
  */
21700
- imageContract: ImageContractSchema.optional()
21758
+ imageContract: ImageContractSchema.optional(),
21759
+ /**
21760
+ * What this node runs INSIDE (see {@link WrapperIdentitySchema}). Optional
21761
+ * for version skew: an older provider's payload simply omits it, and an
21762
+ * absent wrapper is unknown — never `native`.
21763
+ */
21764
+ wrapper: WrapperIdentitySchema.optional()
21701
21765
  });
21702
21766
  var ServerUpdateCheckResultSchema = object({
21703
21767
  packageName: string(),
@@ -27782,7 +27846,23 @@ var RecordingRangeSchema = object({
27782
27846
  });
27783
27847
  var RecordingAvailabilitySchema = object({
27784
27848
  deviceId: number(),
27785
- ranges: array(RecordingRangeSchema)
27849
+ ranges: array(RecordingRangeSchema),
27850
+ /**
27851
+ * Every profile this camera has footage in — not only the one `ranges`
27852
+ * describes (D433).
27853
+ *
27854
+ * `ranges` answers for ONE profile by design: the timeline is a single bar,
27855
+ * and enumerating all of them triples the directory reads for a bar that
27856
+ * would look identical. But the answer used to say nothing about that, so a
27857
+ * caller asking "what can I export?" read the single preferred profile as
27858
+ * the only one that exists — on this deployment every camera records `high`
27859
+ * AND `low`, the low tree holding 14 GB for camera 615 alone, and the export
27860
+ * UI could not see it.
27861
+ *
27862
+ * Cheap: it is the same shallow directory read the profile CHOICE already
27863
+ * makes. Ask for a specific profile's ranges with the `profile` input.
27864
+ */
27865
+ profilesWithFootage: array(string())
27786
27866
  });
27787
27867
  var RecordingDaysSchema = object({
27788
27868
  deviceId: number(),
@@ -27808,7 +27888,11 @@ var RecordingDaysSchema = object({
27808
27888
  var RecordingAvailabilityForDeviceSchema = object({
27809
27889
  deviceId: number(),
27810
27890
  read: _enum(["read", "unreadable"]),
27811
- ranges: array(RecordingRangeSchema).readonly()
27891
+ ranges: array(RecordingRangeSchema).readonly(),
27892
+ /** Same field, same meaning, as the singular answer (D433). A row that
27893
+ * dropped it would tell a grid caller the archive holds one profile.
27894
+ * Empty on an `'unreadable'` row: nobody looked. */
27895
+ profilesWithFootage: array(string()).readonly()
27812
27896
  });
27813
27897
  /**
27814
27898
  * One camera's row in a `getDaysWithRecordingsBatch` answer. Same rule as
@@ -28098,7 +28182,14 @@ var ReadWindowBytesResultSchema = discriminatedUnion("kind", [object({
28098
28182
  method(object({
28099
28183
  deviceId: number(),
28100
28184
  fromMs: number(),
28101
- toMs: number()
28185
+ toMs: number(),
28186
+ /**
28187
+ * Answer for THIS profile instead of the preferred one (D433). Absent
28188
+ * keeps the timeline's behaviour — one bar, one profile, one set of
28189
+ * reads. `profilesWithFootage` on the answer says what may be asked
28190
+ * for.
28191
+ */
28192
+ profile: string().optional()
28102
28193
  }), RecordingAvailabilitySchema, {
28103
28194
  kind: "query",
28104
28195
  auth: "protected"
@@ -16127,6 +16127,7 @@ var NcSystemEventKindSchema = _enum([
16127
16127
  "addon-crash-loop",
16128
16128
  "addon-update-available",
16129
16129
  "server-update-available",
16130
+ "wrapper-update-available",
16130
16131
  "alarm-triggered",
16131
16132
  "alarm-armed",
16132
16133
  "alarm-disarmed",
@@ -19532,7 +19533,17 @@ var EventDensityBucketSchema = object({
19532
19533
  bucketStart: number(),
19533
19534
  motion: number().int(),
19534
19535
  object: number().int(),
19535
- audio: number().int()
19536
+ audio: number().int(),
19537
+ /**
19538
+ * Energy-weighted mean dBFS of the audio events in this bucket — the LEVEL,
19539
+ * as opposed to `audio`, which is their COUNT (D431).
19540
+ *
19541
+ * ABSENT when the bucket holds no audio event. Absence means "nothing was
19542
+ * measured", which is not the same claim as silence, and a lane that cannot
19543
+ * tell them apart paints a quiet hour at full scale — which is exactly what
19544
+ * the count-on-a-level-meter did.
19545
+ */
19546
+ audioDbfs: number().optional()
19536
19547
  });
19537
19548
  /**
19538
19549
  * One camera's row in a `getEventDensityBatch` answer.
@@ -21633,6 +21644,53 @@ var ImageContractSchema = object({
21633
21644
  /** One operator-grade sentence: this node runs image X; the contract says Y. */
21634
21645
  message: string()
21635
21646
  });
21647
+ /**
21648
+ * The shell verdict (see {@link WrapperKindSchema}) with the proofs that
21649
+ * produced it.
21650
+ *
21651
+ * There is deliberately NO `canSelfUpdate` and no apply action: a wrapper
21652
+ * update is an ANNOUNCEMENT. The notification body carries the exact command
21653
+ * for a `docker` shell and says the app restarts into the new build for
21654
+ * `electron`, and that sentence is chosen from `kind` alone — a boolean
21655
+ * nothing reads is the defect this repo keeps paying for.
21656
+ */
21657
+ var WrapperIdentitySchema = object({
21658
+ kind: _enum([
21659
+ "docker",
21660
+ "electron",
21661
+ "native",
21662
+ "contradictory",
21663
+ "unknown"
21664
+ ]),
21665
+ /** Every probe that ran, in a stable order. Never empty. */
21666
+ evidence: array(object({
21667
+ /** Which probe this row reports. */
21668
+ fact: _enum([
21669
+ "dockerenv-file",
21670
+ "proc-1-cgroup",
21671
+ "platform",
21672
+ "electron-app-version-env"
21673
+ ]),
21674
+ /**
21675
+ * `observed` — this process read it itself. `declared` — the shell told the
21676
+ * process and nothing here can check it. Only the Electron app version is
21677
+ * ever `declared`, and only because a child cannot see its parent.
21678
+ */
21679
+ mode: _enum(["observed", "declared"]),
21680
+ /** Did the probe support the fact it names? A `false` row is still evidence. */
21681
+ holds: boolean(),
21682
+ /** What was actually read, verbatim enough for an operator to argue with. */
21683
+ detail: string()
21684
+ })),
21685
+ /**
21686
+ * The version of the SHELL, when the shell has one it can state: the
21687
+ * Electron app version it declared, or the baked seed closure that
21688
+ * fingerprints a container / app bundle. `null` for `contradictory` and
21689
+ * `unknown` — which version belongs to the shell is precisely what is not
21690
+ * known there.
21691
+ */
21692
+ currentVersion: string().nullable()
21693
+ });
21636
21694
  var ServerRollbackInfoSchema = object({
21637
21695
  /** The version that failed (or was manually rolled back). */
21638
21696
  fromVersion: string(),
@@ -21674,7 +21732,13 @@ var ServerPackageStatusSchema = object({
21674
21732
  * Seed-vs-contract verdict (see {@link ImageContractSchema}). Optional for
21675
21733
  * version skew: an older provider's payload simply omits it.
21676
21734
  */
21677
- imageContract: ImageContractSchema.optional()
21735
+ imageContract: ImageContractSchema.optional(),
21736
+ /**
21737
+ * What this node runs INSIDE (see {@link WrapperIdentitySchema}). Optional
21738
+ * for version skew: an older provider's payload simply omits it, and an
21739
+ * absent wrapper is unknown — never `native`.
21740
+ */
21741
+ wrapper: WrapperIdentitySchema.optional()
21678
21742
  });
21679
21743
  var ServerUpdateCheckResultSchema = object({
21680
21744
  packageName: string(),
@@ -27759,7 +27823,23 @@ var RecordingRangeSchema = object({
27759
27823
  });
27760
27824
  var RecordingAvailabilitySchema = object({
27761
27825
  deviceId: number(),
27762
- ranges: array(RecordingRangeSchema)
27826
+ ranges: array(RecordingRangeSchema),
27827
+ /**
27828
+ * Every profile this camera has footage in — not only the one `ranges`
27829
+ * describes (D433).
27830
+ *
27831
+ * `ranges` answers for ONE profile by design: the timeline is a single bar,
27832
+ * and enumerating all of them triples the directory reads for a bar that
27833
+ * would look identical. But the answer used to say nothing about that, so a
27834
+ * caller asking "what can I export?" read the single preferred profile as
27835
+ * the only one that exists — on this deployment every camera records `high`
27836
+ * AND `low`, the low tree holding 14 GB for camera 615 alone, and the export
27837
+ * UI could not see it.
27838
+ *
27839
+ * Cheap: it is the same shallow directory read the profile CHOICE already
27840
+ * makes. Ask for a specific profile's ranges with the `profile` input.
27841
+ */
27842
+ profilesWithFootage: array(string())
27763
27843
  });
27764
27844
  var RecordingDaysSchema = object({
27765
27845
  deviceId: number(),
@@ -27785,7 +27865,11 @@ var RecordingDaysSchema = object({
27785
27865
  var RecordingAvailabilityForDeviceSchema = object({
27786
27866
  deviceId: number(),
27787
27867
  read: _enum(["read", "unreadable"]),
27788
- ranges: array(RecordingRangeSchema).readonly()
27868
+ ranges: array(RecordingRangeSchema).readonly(),
27869
+ /** Same field, same meaning, as the singular answer (D433). A row that
27870
+ * dropped it would tell a grid caller the archive holds one profile.
27871
+ * Empty on an `'unreadable'` row: nobody looked. */
27872
+ profilesWithFootage: array(string()).readonly()
27789
27873
  });
27790
27874
  /**
27791
27875
  * One camera's row in a `getDaysWithRecordingsBatch` answer. Same rule as
@@ -28075,7 +28159,14 @@ var ReadWindowBytesResultSchema = discriminatedUnion("kind", [object({
28075
28159
  method(object({
28076
28160
  deviceId: number(),
28077
28161
  fromMs: number(),
28078
- toMs: number()
28162
+ toMs: number(),
28163
+ /**
28164
+ * Answer for THIS profile instead of the preferred one (D433). Absent
28165
+ * keeps the timeline's behaviour — one bar, one profile, one set of
28166
+ * reads. `profilesWithFootage` on the answer says what may be asked
28167
+ * for.
28168
+ */
28169
+ profile: string().optional()
28079
28170
  }), RecordingAvailabilitySchema, {
28080
28171
  kind: "query",
28081
28172
  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-Dx28ZZTs.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-ZIwBrqd-.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-Dx28ZZTs.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-ZIwBrqd-.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.93",
4
4
  "description": "Remote storage providers (SFTP, S3, WebDAV, SMB) — unifies remote backends behind the storage-provider cap",
5
5
  "keywords": [
6
6
  "camstack",