@camstack/addon-remote-storage 1.2.71 → 1.2.73

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-AZZGXMhT.js");
5
+ const require_shared = require("./shared-DorYC8t5.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-Dolhen_U.mjs";
1
+ import { c as BaseAddon, i as rearmIdleAbort, n as getOptionalBasePath, o as scheduleIdleAbort, s as storageProviderCapability, t as createSessionId } from "./shared-DkdzfmAe.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-AZZGXMhT.js");
5
+ const require_shared = require("./shared-DorYC8t5.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-Dolhen_U.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-DkdzfmAe.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
@@ -6446,6 +6446,21 @@ var CameraStreamSchema = object({
6446
6446
  */
6447
6447
  autoEligible: boolean().optional(),
6448
6448
  /**
6449
+ * The profile slot the PUBLISHER says this stream is: `low` for a stream
6450
+ * whose only sensible role is the low-bandwidth one, `high` for a main
6451
+ * stream. Consulted by the broker's automatic ranking
6452
+ * (`rankInitialAssignment`) BEFORE the pixel-count heuristic, and only there:
6453
+ * an operator's manual assignment still wins, and an absent hint is the
6454
+ * pixel-ranked default every camera had before this field existed.
6455
+ *
6456
+ * Why it exists: a camera with ONE stream ranked to `mid` — the slot no
6457
+ * storage class is written for on its own (`recordings` is high|mid,
6458
+ * `recordingsLow` is low) and the one profile scrub does not read. The robot
6459
+ * camera's single 720p relay is a `low` in every respect except the slot the
6460
+ * heuristic put it in.
6461
+ */
6462
+ profileHint: CamProfileSchema.optional(),
6463
+ /**
6449
6464
  * Transport-specific opaque metadata. The broker passes it through to
6450
6465
  * the source reader without inspecting it. Currently used by
6451
6466
  * `pull-rfc4571` streams to carry the upstream SDP (so the reader can
@@ -7879,7 +7894,22 @@ var RecordingTriggersSchema = object({
7879
7894
  * il livello: un contatto trovato già aperto al riavvio del runner non fa
7880
7895
  * registrare.
7881
7896
  */
7882
- sensorDeviceIds: array(number().int().positive()).min(1).max(16).refine(noDuplicates, { message: "sensorDeviceIds must not repeat a device" }).optional()
7897
+ sensorDeviceIds: array(number().int().positive()).min(1).max(16).refine(noDuplicates, { message: "sensorDeviceIds must not repeat a device" }).optional(),
7898
+ /**
7899
+ * La camera registra per tutta la durata del SEGNALE che lei stessa
7900
+ * pubblica — la cap `recording-signal` (`active: true` mentre il device è in
7901
+ * funzione: un robot che pulisce). È un LIVELLO, non un fronte: la finestra
7902
+ * resta aperta finché il segnale è alto e si chiude `postBufferSec` dopo la
7903
+ * caduta, così una pulizia di quaranta minuti è UNA clip.
7904
+ *
7905
+ * Non nomina un device: il segnale è della camera stessa, tenuto fresco dal
7906
+ * suo provider (D224); il recorder lo ascolta su `DeviceStateChanged` e lo
7907
+ * riconcilia leggendo la slice via RPC, con un tetto oltre il quale un
7908
+ * segnale mai abbassato (un evento perso) non può tenere aperta una
7909
+ * registrazione (D11). Vedi `recorder/addon/band-decision.ts`
7910
+ * (`holdTrigger` / `releaseTrigger`).
7911
+ */
7912
+ deviceSignal: boolean().optional()
7883
7913
  });
7884
7914
  /**
7885
7915
  * Mode of a single recording band — the recorder per-band vocabulary.
@@ -11343,6 +11373,8 @@ method(object({
11343
11373
  label: string().optional(),
11344
11374
  deviceFeatures: array(string()).optional(),
11345
11375
  autoEligible: boolean().optional(),
11376
+ /** The slot the publisher says this stream IS — see `CameraStreamSchema.profileHint`. */
11377
+ profileHint: CamProfileSchema.optional(),
11346
11378
  metadata: record(string(), unknown()).optional(),
11347
11379
  /** Required when kind === 'derived' — the source camStreamId the
11348
11380
  * derived broker reads its encoded plane from.
@@ -27712,6 +27744,47 @@ method(object({
27712
27744
  auth: "protected"
27713
27745
  });
27714
27746
  /**
27747
+ * A camera's own "record me NOW" LEVEL — a signal the device raises while
27748
+ * something it knows about is happening (a robot vacuum cleaning, a machine
27749
+ * running, a gate open) and lowers when it stops.
27750
+ *
27751
+ * It is a level, not an edge. The sensor triggers the recorder already listens
27752
+ * to (`SOURCE_CAP_ACTIVE_FIELD`) fire on a rising edge and record for a fixed
27753
+ * post-buffer; a cleaning lasts forty minutes, and forty minutes of "this is
27754
+ * still happening" cannot be expressed as an edge plus a post-buffer without
27755
+ * either re-triggering on a timer (polling — D224 forbids the consumer keeping
27756
+ * the fact fresh) or picking a post-buffer long enough to cover every job,
27757
+ * which records the dock for that long after every short one. So the recorder
27758
+ * reads the LEVEL: it records for as long as `active` is true, plus the band's
27759
+ * own post-buffer once it falls.
27760
+ *
27761
+ * Who owns the fact: the PROVIDER of the device, which already reads the state
27762
+ * the signal is derived from (the vacuum's lifecycle state, for Dreame). It
27763
+ * writes this slice on every change; consumers subscribe to the kernel's
27764
+ * `DeviceStateChanged` for it and read it back through
27765
+ * `deviceState.getCapSlice` to reconcile — never a second copy, never a poll
27766
+ * against the device (D224, D8/D11).
27767
+ *
27768
+ * Deliberately NOT a `binary` sensor on the camera: a binary sensor is exported
27769
+ * to Home Assistant, HomeKit and the sensor picker as a thing an operator can
27770
+ * bind, and "the camera wants to record" is not a room sensor. It is a fact
27771
+ * about the camera, on the camera.
27772
+ */
27773
+ var RecordingSignalStatusSchema = object({
27774
+ /** True while the device asks to be recorded. */
27775
+ active: boolean(),
27776
+ /**
27777
+ * Why, in the provider's own vocabulary (a vacuum's `cleaning` / `docked`,
27778
+ * …). Free text for the log line and the UI badge; the recorder never
27779
+ * branches on it.
27780
+ */
27781
+ reason: string(),
27782
+ /** Ms epoch of the last `active` transition. 0 if never observed. */
27783
+ lastChangedAt: number()
27784
+ });
27785
+ RecordingSignalStatusSchema.extend({ lastFetchedAt: number() });
27786
+ DeviceType.Camera, method(object({ deviceId: number() }), RecordingSignalStatusSchema);
27787
+ /**
27715
27788
  * scene-monitor — device-scoped reference-region state cap. An operator marks
27716
27789
  * a rect ROI on a camera frame and names one or more states; the engine
27717
27790
  * (pipeline-analytics, designated post-processing node) reports which state is
@@ -28084,6 +28157,8 @@ var CamStreamDescriptorSchema = object({
28084
28157
  deviceFeatures: array(string()).optional(),
28085
28158
  /** Eligible for automatic profile assignment. Absent = `true`. */
28086
28159
  autoEligible: boolean().optional(),
28160
+ /** The slot the publisher says this stream IS — see `CameraStreamSchema.profileHint`. */
28161
+ profileHint: CamProfileSchema.optional(),
28087
28162
  /** Transport-specific opaque metadata (e.g. rfc4571 SDP). */
28088
28163
  metadata: record(string(), unknown()).optional()
28089
28164
  });
@@ -34029,6 +34104,12 @@ Object.freeze({
34029
34104
  addonId: null,
34030
34105
  access: "view"
34031
34106
  },
34107
+ "recordingSignal.getStatus": {
34108
+ capName: "recording-signal",
34109
+ capScope: "device",
34110
+ addonId: null,
34111
+ access: "view"
34112
+ },
34032
34113
  "sceneMonitor.captureReference": {
34033
34114
  capName: "scene-monitor",
34034
34115
  capScope: "device",
@@ -37021,6 +37102,11 @@ Object.freeze({
37021
37102
  form: "single",
37022
37103
  optional: true
37023
37104
  }],
37105
+ "recordingSignal.getStatus": [{
37106
+ name: "deviceId",
37107
+ form: "single",
37108
+ optional: false
37109
+ }],
37024
37110
  "sceneMonitor.captureReference": [{
37025
37111
  name: "deviceId",
37026
37112
  form: "single",
@@ -6469,6 +6469,21 @@ var CameraStreamSchema = object({
6469
6469
  */
6470
6470
  autoEligible: boolean().optional(),
6471
6471
  /**
6472
+ * The profile slot the PUBLISHER says this stream is: `low` for a stream
6473
+ * whose only sensible role is the low-bandwidth one, `high` for a main
6474
+ * stream. Consulted by the broker's automatic ranking
6475
+ * (`rankInitialAssignment`) BEFORE the pixel-count heuristic, and only there:
6476
+ * an operator's manual assignment still wins, and an absent hint is the
6477
+ * pixel-ranked default every camera had before this field existed.
6478
+ *
6479
+ * Why it exists: a camera with ONE stream ranked to `mid` — the slot no
6480
+ * storage class is written for on its own (`recordings` is high|mid,
6481
+ * `recordingsLow` is low) and the one profile scrub does not read. The robot
6482
+ * camera's single 720p relay is a `low` in every respect except the slot the
6483
+ * heuristic put it in.
6484
+ */
6485
+ profileHint: CamProfileSchema.optional(),
6486
+ /**
6472
6487
  * Transport-specific opaque metadata. The broker passes it through to
6473
6488
  * the source reader without inspecting it. Currently used by
6474
6489
  * `pull-rfc4571` streams to carry the upstream SDP (so the reader can
@@ -7902,7 +7917,22 @@ var RecordingTriggersSchema = object({
7902
7917
  * il livello: un contatto trovato già aperto al riavvio del runner non fa
7903
7918
  * registrare.
7904
7919
  */
7905
- sensorDeviceIds: array(number().int().positive()).min(1).max(16).refine(noDuplicates, { message: "sensorDeviceIds must not repeat a device" }).optional()
7920
+ sensorDeviceIds: array(number().int().positive()).min(1).max(16).refine(noDuplicates, { message: "sensorDeviceIds must not repeat a device" }).optional(),
7921
+ /**
7922
+ * La camera registra per tutta la durata del SEGNALE che lei stessa
7923
+ * pubblica — la cap `recording-signal` (`active: true` mentre il device è in
7924
+ * funzione: un robot che pulisce). È un LIVELLO, non un fronte: la finestra
7925
+ * resta aperta finché il segnale è alto e si chiude `postBufferSec` dopo la
7926
+ * caduta, così una pulizia di quaranta minuti è UNA clip.
7927
+ *
7928
+ * Non nomina un device: il segnale è della camera stessa, tenuto fresco dal
7929
+ * suo provider (D224); il recorder lo ascolta su `DeviceStateChanged` e lo
7930
+ * riconcilia leggendo la slice via RPC, con un tetto oltre il quale un
7931
+ * segnale mai abbassato (un evento perso) non può tenere aperta una
7932
+ * registrazione (D11). Vedi `recorder/addon/band-decision.ts`
7933
+ * (`holdTrigger` / `releaseTrigger`).
7934
+ */
7935
+ deviceSignal: boolean().optional()
7906
7936
  });
7907
7937
  /**
7908
7938
  * Mode of a single recording band — the recorder per-band vocabulary.
@@ -11366,6 +11396,8 @@ method(object({
11366
11396
  label: string().optional(),
11367
11397
  deviceFeatures: array(string()).optional(),
11368
11398
  autoEligible: boolean().optional(),
11399
+ /** The slot the publisher says this stream IS — see `CameraStreamSchema.profileHint`. */
11400
+ profileHint: CamProfileSchema.optional(),
11369
11401
  metadata: record(string(), unknown()).optional(),
11370
11402
  /** Required when kind === 'derived' — the source camStreamId the
11371
11403
  * derived broker reads its encoded plane from.
@@ -27735,6 +27767,47 @@ method(object({
27735
27767
  auth: "protected"
27736
27768
  });
27737
27769
  /**
27770
+ * A camera's own "record me NOW" LEVEL — a signal the device raises while
27771
+ * something it knows about is happening (a robot vacuum cleaning, a machine
27772
+ * running, a gate open) and lowers when it stops.
27773
+ *
27774
+ * It is a level, not an edge. The sensor triggers the recorder already listens
27775
+ * to (`SOURCE_CAP_ACTIVE_FIELD`) fire on a rising edge and record for a fixed
27776
+ * post-buffer; a cleaning lasts forty minutes, and forty minutes of "this is
27777
+ * still happening" cannot be expressed as an edge plus a post-buffer without
27778
+ * either re-triggering on a timer (polling — D224 forbids the consumer keeping
27779
+ * the fact fresh) or picking a post-buffer long enough to cover every job,
27780
+ * which records the dock for that long after every short one. So the recorder
27781
+ * reads the LEVEL: it records for as long as `active` is true, plus the band's
27782
+ * own post-buffer once it falls.
27783
+ *
27784
+ * Who owns the fact: the PROVIDER of the device, which already reads the state
27785
+ * the signal is derived from (the vacuum's lifecycle state, for Dreame). It
27786
+ * writes this slice on every change; consumers subscribe to the kernel's
27787
+ * `DeviceStateChanged` for it and read it back through
27788
+ * `deviceState.getCapSlice` to reconcile — never a second copy, never a poll
27789
+ * against the device (D224, D8/D11).
27790
+ *
27791
+ * Deliberately NOT a `binary` sensor on the camera: a binary sensor is exported
27792
+ * to Home Assistant, HomeKit and the sensor picker as a thing an operator can
27793
+ * bind, and "the camera wants to record" is not a room sensor. It is a fact
27794
+ * about the camera, on the camera.
27795
+ */
27796
+ var RecordingSignalStatusSchema = object({
27797
+ /** True while the device asks to be recorded. */
27798
+ active: boolean(),
27799
+ /**
27800
+ * Why, in the provider's own vocabulary (a vacuum's `cleaning` / `docked`,
27801
+ * …). Free text for the log line and the UI badge; the recorder never
27802
+ * branches on it.
27803
+ */
27804
+ reason: string(),
27805
+ /** Ms epoch of the last `active` transition. 0 if never observed. */
27806
+ lastChangedAt: number()
27807
+ });
27808
+ RecordingSignalStatusSchema.extend({ lastFetchedAt: number() });
27809
+ DeviceType.Camera, method(object({ deviceId: number() }), RecordingSignalStatusSchema);
27810
+ /**
27738
27811
  * scene-monitor — device-scoped reference-region state cap. An operator marks
27739
27812
  * a rect ROI on a camera frame and names one or more states; the engine
27740
27813
  * (pipeline-analytics, designated post-processing node) reports which state is
@@ -28107,6 +28180,8 @@ var CamStreamDescriptorSchema = object({
28107
28180
  deviceFeatures: array(string()).optional(),
28108
28181
  /** Eligible for automatic profile assignment. Absent = `true`. */
28109
28182
  autoEligible: boolean().optional(),
28183
+ /** The slot the publisher says this stream IS — see `CameraStreamSchema.profileHint`. */
28184
+ profileHint: CamProfileSchema.optional(),
28110
28185
  /** Transport-specific opaque metadata (e.g. rfc4571 SDP). */
28111
28186
  metadata: record(string(), unknown()).optional()
28112
28187
  });
@@ -34052,6 +34127,12 @@ Object.freeze({
34052
34127
  addonId: null,
34053
34128
  access: "view"
34054
34129
  },
34130
+ "recordingSignal.getStatus": {
34131
+ capName: "recording-signal",
34132
+ capScope: "device",
34133
+ addonId: null,
34134
+ access: "view"
34135
+ },
34055
34136
  "sceneMonitor.captureReference": {
34056
34137
  capName: "scene-monitor",
34057
34138
  capScope: "device",
@@ -37044,6 +37125,11 @@ Object.freeze({
37044
37125
  form: "single",
37045
37126
  optional: true
37046
37127
  }],
37128
+ "recordingSignal.getStatus": [{
37129
+ name: "deviceId",
37130
+ form: "single",
37131
+ optional: false
37132
+ }],
37047
37133
  "sceneMonitor.captureReference": [{
37048
37134
  name: "deviceId",
37049
37135
  form: "single",
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-AZZGXMhT.js");
5
+ const require_shared = require("./shared-DorYC8t5.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-Dolhen_U.mjs";
1
+ import { c as BaseAddon, i as rearmIdleAbort, o as scheduleIdleAbort, s as storageProviderCapability } from "./shared-DkdzfmAe.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-AZZGXMhT.js");
5
+ const require_shared = require("./shared-DorYC8t5.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-Dolhen_U.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-DkdzfmAe.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.71",
3
+ "version": "1.2.73",
4
4
  "description": "Remote storage providers (SFTP, S3, WebDAV, SMB) — unifies remote backends behind the storage-provider cap",
5
5
  "keywords": [
6
6
  "camstack",