@camstack/addon-remote-storage 1.2.102 → 1.2.104

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-b3T91scO.js");
5
+ const require_shared = require("./shared-Cxbkgr9q.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-DBRkf9F0.mjs";
1
+ import { c as BaseAddon, i as rearmIdleAbort, n as getOptionalBasePath, o as scheduleIdleAbort, s as storageProviderCapability, t as createSessionId } from "./shared-C0GTMbfd.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-b3T91scO.js");
5
+ const require_shared = require("./shared-Cxbkgr9q.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-DBRkf9F0.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-C0GTMbfd.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
@@ -19026,13 +19026,26 @@ var TrackAudioLabelSchema = object({
19026
19026
  * - `audio` — an audio event on the camera itself that was anomalous for
19027
19027
  * THAT camera, loud, and heard while nothing visual was happening (D62).
19028
19028
  *
19029
+ * - `onboard` — the CAMERA's own firmware, paired with a decoded frame in
19030
+ * that frame's pixel space. A real root detector and a SPATIAL one: its
19031
+ * boxes are the same kind of fact `pipeline`'s are, produced by a different
19032
+ * detector.
19033
+ *
19034
+ * `onboard` was missing here while `DetectionSourceSchema` already had it, so
19035
+ * a persisted onboard track failed `safeParse` on read and came back with NO
19036
+ * source at all — which `isSpatialTrack` then admitted by accident, through the
19037
+ * `undefined` arm rather than by anybody's decision, and which `excludeSources`
19038
+ * could not name.
19039
+ *
19029
19040
  * The spatial subsystems (tracker association, occupancy count, re-id /
19030
19041
  * embedding, resurrection) MUST skip every synthetic source. Test for that
19031
- * with `isSpatialTrack`, which allow-lists `pipeline` — a `!== 'sensor'`
19032
- * check silently readmits every source added after it was written.
19042
+ * with `isSpatialTrack`, which allow-lists the spatial sources explicitly — a
19043
+ * `!== 'sensor'` check silently readmits every source added after it was
19044
+ * written.
19033
19045
  */
19034
19046
  var TrackSourceSchema = _enum([
19035
19047
  "pipeline",
19048
+ "onboard",
19036
19049
  "sensor",
19037
19050
  "audio"
19038
19051
  ]);
@@ -19620,6 +19633,7 @@ var MediaFileKindEnum = _enum([
19620
19633
  "keyFrame",
19621
19634
  "keyFrameSmall",
19622
19635
  "thumbnailSmall",
19636
+ "confirmationCrop",
19623
19637
  "sceneFrame"
19624
19638
  ]);
19625
19639
  /**
@@ -21114,13 +21128,39 @@ var MotionSourceEnum = _enum([
21114
21128
  */
21115
21129
  var MotionSourcesSchema = array(MotionSourceEnum);
21116
21130
  /**
21117
- * Which root detectors a camera runs. Deliberately the SAME vocabulary
21118
- * post-analysis already tags every detection with (`DetectionSource`) rather
21119
- * than a second spelling of the same two ideas the value an operator picks
21120
- * here is the value that comes back on the track, the overlay and the debug
21121
- * row.
21131
+ * Which root detector a camera runs EXACTLY ONE.
21132
+ *
21133
+ * Deliberately the SAME vocabulary post-analysis already tags every detection
21134
+ * with (`DetectionSource`) rather than a second spelling of the same two
21135
+ * ideas: the value an operator picks here is the value that comes back on the
21136
+ * track, the overlay and the debug row.
21137
+ *
21138
+ * ## Why one, and why it is still an array
21139
+ *
21140
+ * Two roots on one camera is a capability nobody asked for and the operator has
21141
+ * since ruled out. It was never free: both planes feed the SAME per-device
21142
+ * stationary registry, both can promote the same parked object, and the two
21143
+ * detectors disagree about the same box by construction — which is the
21144
+ * disagreement D505 had to arbitrate. Removing the case removes the arbitration.
21145
+ *
21146
+ * The ARRAY shape survives because the stored settings and the attach payload
21147
+ * already speak it on every camera of every fleet, and a cap input that
21148
+ * suddenly refuses a stored value makes the camera un-attachable — a fail-closed
21149
+ * in the one direction that costs an operator their cameras. So the wire stays
21150
+ * tolerant and the TYPE is exact: a longer list is truncated to its first
21151
+ * element rather than refused, and `max(1)` is what every consumer can then
21152
+ * rely on.
21153
+ *
21154
+ * AT MOST one, not exactly one. The EMPTY list is a legal, deliberate pick —
21155
+ * a camera an operator left with no root detector — and `planDetectionSources`
21156
+ * has always said so: inventing a root for them is how a default acts without
21157
+ * anybody choosing it. Tightening this to `length(1)` broke that, and the
21158
+ * suite caught it.
21159
+ *
21160
+ * Measured before tightening (2026-09-15, this fleet, 6 h of attaches): 3327
21161
+ * `["pipeline"]` and 2 `["onboard"]`. Not one camera had two.
21122
21162
  */
21123
- var DetectionSourcesSchema = array(DetectionSourceSchema);
21163
+ var DetectionSourcesSchema = preprocess((value) => Array.isArray(value) && value.length > 1 ? value.slice(0, 1) : value, array(DetectionSourceSchema).max(1));
21124
21164
  /**
21125
21165
  * Input shape for `pipeline-runner.reportMotion` cap method. Exported
21126
21166
  * so cap-side consumers (the orchestrator forward, the runner addon's
@@ -19049,13 +19049,26 @@ var TrackAudioLabelSchema = object({
19049
19049
  * - `audio` — an audio event on the camera itself that was anomalous for
19050
19050
  * THAT camera, loud, and heard while nothing visual was happening (D62).
19051
19051
  *
19052
+ * - `onboard` — the CAMERA's own firmware, paired with a decoded frame in
19053
+ * that frame's pixel space. A real root detector and a SPATIAL one: its
19054
+ * boxes are the same kind of fact `pipeline`'s are, produced by a different
19055
+ * detector.
19056
+ *
19057
+ * `onboard` was missing here while `DetectionSourceSchema` already had it, so
19058
+ * a persisted onboard track failed `safeParse` on read and came back with NO
19059
+ * source at all — which `isSpatialTrack` then admitted by accident, through the
19060
+ * `undefined` arm rather than by anybody's decision, and which `excludeSources`
19061
+ * could not name.
19062
+ *
19052
19063
  * The spatial subsystems (tracker association, occupancy count, re-id /
19053
19064
  * embedding, resurrection) MUST skip every synthetic source. Test for that
19054
- * with `isSpatialTrack`, which allow-lists `pipeline` — a `!== 'sensor'`
19055
- * check silently readmits every source added after it was written.
19065
+ * with `isSpatialTrack`, which allow-lists the spatial sources explicitly — a
19066
+ * `!== 'sensor'` check silently readmits every source added after it was
19067
+ * written.
19056
19068
  */
19057
19069
  var TrackSourceSchema = _enum([
19058
19070
  "pipeline",
19071
+ "onboard",
19059
19072
  "sensor",
19060
19073
  "audio"
19061
19074
  ]);
@@ -19643,6 +19656,7 @@ var MediaFileKindEnum = _enum([
19643
19656
  "keyFrame",
19644
19657
  "keyFrameSmall",
19645
19658
  "thumbnailSmall",
19659
+ "confirmationCrop",
19646
19660
  "sceneFrame"
19647
19661
  ]);
19648
19662
  /**
@@ -21137,13 +21151,39 @@ var MotionSourceEnum = _enum([
21137
21151
  */
21138
21152
  var MotionSourcesSchema = array(MotionSourceEnum);
21139
21153
  /**
21140
- * Which root detectors a camera runs. Deliberately the SAME vocabulary
21141
- * post-analysis already tags every detection with (`DetectionSource`) rather
21142
- * than a second spelling of the same two ideas the value an operator picks
21143
- * here is the value that comes back on the track, the overlay and the debug
21144
- * row.
21154
+ * Which root detector a camera runs EXACTLY ONE.
21155
+ *
21156
+ * Deliberately the SAME vocabulary post-analysis already tags every detection
21157
+ * with (`DetectionSource`) rather than a second spelling of the same two
21158
+ * ideas: the value an operator picks here is the value that comes back on the
21159
+ * track, the overlay and the debug row.
21160
+ *
21161
+ * ## Why one, and why it is still an array
21162
+ *
21163
+ * Two roots on one camera is a capability nobody asked for and the operator has
21164
+ * since ruled out. It was never free: both planes feed the SAME per-device
21165
+ * stationary registry, both can promote the same parked object, and the two
21166
+ * detectors disagree about the same box by construction — which is the
21167
+ * disagreement D505 had to arbitrate. Removing the case removes the arbitration.
21168
+ *
21169
+ * The ARRAY shape survives because the stored settings and the attach payload
21170
+ * already speak it on every camera of every fleet, and a cap input that
21171
+ * suddenly refuses a stored value makes the camera un-attachable — a fail-closed
21172
+ * in the one direction that costs an operator their cameras. So the wire stays
21173
+ * tolerant and the TYPE is exact: a longer list is truncated to its first
21174
+ * element rather than refused, and `max(1)` is what every consumer can then
21175
+ * rely on.
21176
+ *
21177
+ * AT MOST one, not exactly one. The EMPTY list is a legal, deliberate pick —
21178
+ * a camera an operator left with no root detector — and `planDetectionSources`
21179
+ * has always said so: inventing a root for them is how a default acts without
21180
+ * anybody choosing it. Tightening this to `length(1)` broke that, and the
21181
+ * suite caught it.
21182
+ *
21183
+ * Measured before tightening (2026-09-15, this fleet, 6 h of attaches): 3327
21184
+ * `["pipeline"]` and 2 `["onboard"]`. Not one camera had two.
21145
21185
  */
21146
- var DetectionSourcesSchema = array(DetectionSourceSchema);
21186
+ var DetectionSourcesSchema = preprocess((value) => Array.isArray(value) && value.length > 1 ? value.slice(0, 1) : value, array(DetectionSourceSchema).max(1));
21147
21187
  /**
21148
21188
  * Input shape for `pipeline-runner.reportMotion` cap method. Exported
21149
21189
  * so cap-side consumers (the orchestrator forward, the runner addon's
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-b3T91scO.js");
5
+ const require_shared = require("./shared-Cxbkgr9q.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-DBRkf9F0.mjs";
1
+ import { c as BaseAddon, i as rearmIdleAbort, o as scheduleIdleAbort, s as storageProviderCapability } from "./shared-C0GTMbfd.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-b3T91scO.js");
5
+ const require_shared = require("./shared-Cxbkgr9q.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-DBRkf9F0.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-C0GTMbfd.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.102",
3
+ "version": "1.2.104",
4
4
  "description": "Remote storage providers (SFTP, S3, WebDAV, SMB) — unifies remote backends behind the storage-provider cap",
5
5
  "keywords": [
6
6
  "camstack",