@camstack/addon-remote-storage 1.2.102 → 1.2.103

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-DqWt_U16.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-DPTTju9B.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-DqWt_U16.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-DPTTju9B.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
  ]);
@@ -21114,13 +21127,39 @@ var MotionSourceEnum = _enum([
21114
21127
  */
21115
21128
  var MotionSourcesSchema = array(MotionSourceEnum);
21116
21129
  /**
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.
21130
+ * Which root detector a camera runs EXACTLY ONE.
21131
+ *
21132
+ * Deliberately the SAME vocabulary post-analysis already tags every detection
21133
+ * with (`DetectionSource`) rather than a second spelling of the same two
21134
+ * ideas: the value an operator picks here is the value that comes back on the
21135
+ * track, the overlay and the debug row.
21136
+ *
21137
+ * ## Why one, and why it is still an array
21138
+ *
21139
+ * Two roots on one camera is a capability nobody asked for and the operator has
21140
+ * since ruled out. It was never free: both planes feed the SAME per-device
21141
+ * stationary registry, both can promote the same parked object, and the two
21142
+ * detectors disagree about the same box by construction — which is the
21143
+ * disagreement D505 had to arbitrate. Removing the case removes the arbitration.
21144
+ *
21145
+ * The ARRAY shape survives because the stored settings and the attach payload
21146
+ * already speak it on every camera of every fleet, and a cap input that
21147
+ * suddenly refuses a stored value makes the camera un-attachable — a fail-closed
21148
+ * in the one direction that costs an operator their cameras. So the wire stays
21149
+ * tolerant and the TYPE is exact: a longer list is truncated to its first
21150
+ * element rather than refused, and `max(1)` is what every consumer can then
21151
+ * rely on.
21152
+ *
21153
+ * AT MOST one, not exactly one. The EMPTY list is a legal, deliberate pick —
21154
+ * a camera an operator left with no root detector — and `planDetectionSources`
21155
+ * has always said so: inventing a root for them is how a default acts without
21156
+ * anybody choosing it. Tightening this to `length(1)` broke that, and the
21157
+ * suite caught it.
21158
+ *
21159
+ * Measured before tightening (2026-09-15, this fleet, 6 h of attaches): 3327
21160
+ * `["pipeline"]` and 2 `["onboard"]`. Not one camera had two.
21122
21161
  */
21123
- var DetectionSourcesSchema = array(DetectionSourceSchema);
21162
+ var DetectionSourcesSchema = preprocess((value) => Array.isArray(value) && value.length > 1 ? value.slice(0, 1) : value, array(DetectionSourceSchema).max(1));
21124
21163
  /**
21125
21164
  * Input shape for `pipeline-runner.reportMotion` cap method. Exported
21126
21165
  * 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
  ]);
@@ -21137,13 +21150,39 @@ var MotionSourceEnum = _enum([
21137
21150
  */
21138
21151
  var MotionSourcesSchema = array(MotionSourceEnum);
21139
21152
  /**
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.
21153
+ * Which root detector a camera runs EXACTLY ONE.
21154
+ *
21155
+ * Deliberately the SAME vocabulary post-analysis already tags every detection
21156
+ * with (`DetectionSource`) rather than a second spelling of the same two
21157
+ * ideas: the value an operator picks here is the value that comes back on the
21158
+ * track, the overlay and the debug row.
21159
+ *
21160
+ * ## Why one, and why it is still an array
21161
+ *
21162
+ * Two roots on one camera is a capability nobody asked for and the operator has
21163
+ * since ruled out. It was never free: both planes feed the SAME per-device
21164
+ * stationary registry, both can promote the same parked object, and the two
21165
+ * detectors disagree about the same box by construction — which is the
21166
+ * disagreement D505 had to arbitrate. Removing the case removes the arbitration.
21167
+ *
21168
+ * The ARRAY shape survives because the stored settings and the attach payload
21169
+ * already speak it on every camera of every fleet, and a cap input that
21170
+ * suddenly refuses a stored value makes the camera un-attachable — a fail-closed
21171
+ * in the one direction that costs an operator their cameras. So the wire stays
21172
+ * tolerant and the TYPE is exact: a longer list is truncated to its first
21173
+ * element rather than refused, and `max(1)` is what every consumer can then
21174
+ * rely on.
21175
+ *
21176
+ * AT MOST one, not exactly one. The EMPTY list is a legal, deliberate pick —
21177
+ * a camera an operator left with no root detector — and `planDetectionSources`
21178
+ * has always said so: inventing a root for them is how a default acts without
21179
+ * anybody choosing it. Tightening this to `length(1)` broke that, and the
21180
+ * suite caught it.
21181
+ *
21182
+ * Measured before tightening (2026-09-15, this fleet, 6 h of attaches): 3327
21183
+ * `["pipeline"]` and 2 `["onboard"]`. Not one camera had two.
21145
21184
  */
21146
- var DetectionSourcesSchema = array(DetectionSourceSchema);
21185
+ var DetectionSourcesSchema = preprocess((value) => Array.isArray(value) && value.length > 1 ? value.slice(0, 1) : value, array(DetectionSourceSchema).max(1));
21147
21186
  /**
21148
21187
  * Input shape for `pipeline-runner.reportMotion` cap method. Exported
21149
21188
  * 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-DqWt_U16.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-DPTTju9B.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-DqWt_U16.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-DPTTju9B.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.103",
4
4
  "description": "Remote storage providers (SFTP, S3, WebDAV, SMB) — unifies remote backends behind the storage-provider cap",
5
5
  "keywords": [
6
6
  "camstack",