@camstack/addon-remote-storage 1.1.6 → 1.1.8

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-BUmgLZCW.js");
5
+ const require_shared = require("./shared-Dy0MrVpA.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-DR3X5bYm.mjs";
1
+ import { c as BaseAddon, i as rearmIdleAbort, n as getOptionalBasePath, o as scheduleIdleAbort, s as storageProviderCapability, t as createSessionId } from "./shared-DYllOkhk.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-BUmgLZCW.js");
5
+ const require_shared = require("./shared-Dy0MrVpA.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-DR3X5bYm.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-DYllOkhk.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
@@ -4629,7 +4629,7 @@ function _instanceof(cls, params = {}) {
4629
4629
  return inst;
4630
4630
  }
4631
4631
  //#endregion
4632
- //#region ../types/dist/sleep-NOH4yRwj.mjs
4632
+ //#region ../types/dist/sleep-DVmKHFGi.mjs
4633
4633
  var EventCategory = /* @__PURE__ */ function(EventCategory) {
4634
4634
  EventCategory["SystemBoot"] = "system.boot";
4635
4635
  EventCategory["SystemAddonsReady"] = "system.addons-ready";
@@ -6429,6 +6429,17 @@ var DeviceRole = /* @__PURE__ */ function(DeviceRole) {
6429
6429
  DeviceRole["HumiditySensor"] = "humidity-sensor";
6430
6430
  DeviceRole["AmbientLightSensor"] = "ambient-light-sensor";
6431
6431
  DeviceRole["PressureSensor"] = "pressure-sensor";
6432
+ /** Wind speed or direction (weather-station `wind-sensor` cap). */
6433
+ DeviceRole["WindSensor"] = "wind-sensor";
6434
+ /** Rain accumulation or rate (weather-station `rain-sensor` cap). */
6435
+ DeviceRole["RainSensor"] = "rain-sensor";
6436
+ /** UV index (weather-station `uv-sensor` cap). */
6437
+ DeviceRole["UvSensor"] = "uv-sensor";
6438
+ /** Solar irradiance W/m² (weather-station `solar-radiation-sensor` cap).
6439
+ * Distinct from AmbientLightSensor (lux). */
6440
+ DeviceRole["SolarRadiationSensor"] = "solar-radiation-sensor";
6441
+ /** Soil moisture % (garden/weather `soil-moisture-sensor` cap). */
6442
+ DeviceRole["SoilMoistureSensor"] = "soil-moisture-sensor";
6432
6443
  DeviceRole["PowerSensor"] = "power-sensor";
6433
6444
  DeviceRole["EnergySensor"] = "energy-sensor";
6434
6445
  DeviceRole["VoltageSensor"] = "voltage-sensor";
@@ -8947,18 +8958,47 @@ object({
8947
8958
  lastUpdated: number().nullable()
8948
8959
  });
8949
8960
  DeviceType.Image;
8961
+ /**
8962
+ * Robotic lawn-mower cap. Models HA `lawn_mower.*` entities — anything
8963
+ * with a mowing lifecycle plus a dock action.
8964
+ *
8965
+ * Activity follows HA's canonical lawn-mower lifecycle: `idle` /
8966
+ * `mowing` / `paused` / `docked` / `error`. `batteryLevel` (0..100) is
8967
+ * nullable — some mowers don't report a battery percentage.
8968
+ *
8969
+ * `startMowing` begins a mowing run, `pause` halts it in place, and
8970
+ * `dock` sends the mower back to its charging station.
8971
+ */
8972
+ var LawnMowerActivitySchema = _enum([
8973
+ "idle",
8974
+ "mowing",
8975
+ "paused",
8976
+ "docked",
8977
+ "error"
8978
+ ]);
8979
+ /** Severity of the current device/error code — info (status), warning, error. */
8980
+ var DeviceCodeSeveritySchema = _enum([
8981
+ "info",
8982
+ "warning",
8983
+ "error"
8984
+ ]);
8950
8985
  object({
8951
8986
  /** Lifecycle activity of the mower. */
8952
- activity: _enum([
8953
- "idle",
8954
- "mowing",
8955
- "paused",
8956
- "docked",
8957
- "error"
8958
- ]),
8987
+ activity: LawnMowerActivitySchema,
8959
8988
  /** 0..100 battery percentage. Null when the device has no battery
8960
8989
  * reading. */
8961
8990
  batteryLevel: number().min(0).max(100).nullable(),
8991
+ /** 0..100 mowing-completion percentage of the current task, or null when no
8992
+ * task is active / progress is unavailable. */
8993
+ progressPercent: number().min(0).max(100).nullable(),
8994
+ /** Current device/event code (dynamic — mostly status, sometimes an error),
8995
+ * or null when unknown. */
8996
+ currentCode: number().nullable(),
8997
+ /** Human label for {@link currentCode}, or null when undecodable. */
8998
+ currentCodeLabel: string().nullable(),
8999
+ /** Severity of {@link currentCode}. `error` (and often `warning`) warrants UI
9000
+ * attention; `info` is normal status. */
9001
+ severity: DeviceCodeSeveritySchema,
8962
9002
  /** Ms epoch when the slice was last updated. */
8963
9003
  lastChangedAt: number()
8964
9004
  });
@@ -10533,6 +10573,7 @@ var VacuumStateSchema = _enum([
10533
10573
  "paused",
10534
10574
  "returning",
10535
10575
  "docked",
10576
+ "drying",
10536
10577
  "error"
10537
10578
  ]);
10538
10579
  /**
@@ -10571,6 +10612,12 @@ object({
10571
10612
  detergent: TankStatusSchema.nullable(),
10572
10613
  /** Dust bin. Null when the hardware has no dust bin. */
10573
10614
  dustBin: TankStatusSchema.nullable(),
10615
+ /** 0..100 cleaning-completion percentage of the current task, or null. */
10616
+ progressPercent: number().min(0).max(100).nullable(),
10617
+ /** Current error code (0 / null = no error). */
10618
+ errorCode: number().nullable(),
10619
+ /** Human label for {@link errorCode}, or null when none / undecodable. */
10620
+ errorLabel: string().nullable(),
10574
10621
  /** Ms epoch when the slice was last updated. */
10575
10622
  lastChangedAt: number()
10576
10623
  });
@@ -12057,17 +12104,32 @@ var ReleaseInputSchema = object({
12057
12104
  * the parent cascades into every accessory. */
12058
12105
  camDeviceId: number().int().nonnegative()
12059
12106
  });
12060
- var ResyncInputSchema = object({
12061
- /** Parent CamStack device id of an adopted device. The provider resolves its
12062
- * source (integration/broker + native id) and re-aligns the device's
12063
- * structural spec (type/role/capabilities/units) with the live mapping,
12064
- * rebuilding any child whose class changed while preserving operator edits. */
12065
- camDeviceId: number().int().nonnegative() });
12107
+ var ResyncInputSchema = object({
12108
+ /** Parent CamStack device id of an adopted device. The provider resolves its
12109
+ * source (integration/broker + native id) and re-aligns the device's
12110
+ * structural spec (type/role/capabilities/units) with the live mapping,
12111
+ * rebuilding any child whose class changed while preserving operator edits. */
12112
+ camDeviceId: number().int().nonnegative(),
12113
+ /** "Resync from zero" (#19). When true, the kernel PURGES every accessory
12114
+ * child of `camDeviceId` BEFORE the provider re-derives the device, so the
12115
+ * children are rebuilt fresh from source — correct names, coords, and units —
12116
+ * instead of being preserved by the incremental reconcile. Use to recover from
12117
+ * legacy generic/placeholder names that the normal name-precedence keeps frozen
12118
+ * (the operator's explicit reset). Push-driven integrations (no-op resync)
12119
+ * rebuild on their next snapshot; pull/command integrations rebuild in `resync`.
12120
+ * Operator edits on the PARENT (its name, layout, primary-child pick) survive —
12121
+ * only the children are torn down. Omitted/false ⇒ the normal incremental
12122
+ * re-sync that preserves children. */
12123
+ resetToSource: boolean().optional()
12124
+ });
12066
12125
  var ResyncResultSchema = object({
12067
12126
  /** True when the persisted spec actually changed (children may have been rebuilt). */
12068
12127
  changed: boolean(),
12069
12128
  /** Number of child devices rebuilt into a new class by this re-sync. */
12070
- rebuiltChildren: number().int().nonnegative()
12129
+ rebuiltChildren: number().int().nonnegative(),
12130
+ /** Number of accessory children torn down by a `resetToSource` purge before the
12131
+ * provider re-derived the device. 0/absent for a normal incremental re-sync. */
12132
+ removedChildren: number().int().nonnegative().optional()
12071
12133
  });
12072
12134
  method(object({ integrationId: string() }), object({ filters: array(AdoptionFilterSchema) }), { auth: "admin" }), method(ListCandidatesInputSchema, ListCandidatesOutputSchema, { auth: "admin" }), method(GetCandidateInputSchema, DiscoveredChildDeviceSchema.nullable(), { auth: "admin" }), method(object({ integrationId: string() }), AdoptionStatusSchema, {
12073
12135
  kind: "mutation",
@@ -13766,6 +13828,11 @@ var DeviceMetaSchema = object({
13766
13828
  addonId: string(),
13767
13829
  type: string(),
13768
13830
  name: string(),
13831
+ /** True once an operator explicitly renamed the device via `setName`. Drives
13832
+ * reconcile name-precedence (preserve operator name vs adopt fresh provider
13833
+ * name). Absent ⇒ treated as user-named (PRESERVE) for legacy rows. See
13834
+ * `DeviceMeta.userNamed`. */
13835
+ userNamed: boolean().optional(),
13769
13836
  location: string().nullable(),
13770
13837
  disabled: boolean(),
13771
13838
  parentDeviceId: number().nullable(),
@@ -14076,6 +14143,9 @@ method(object({
14076
14143
  }), method(ReleaseInputSchema.extend({ addonId: string() }), _void(), {
14077
14144
  kind: "mutation",
14078
14145
  auth: "admin"
14146
+ }), method(ResyncInputSchema, ResyncResultSchema, {
14147
+ kind: "mutation",
14148
+ auth: "admin"
14079
14149
  }), method(object({
14080
14150
  deviceId: number(),
14081
14151
  key: string(),
@@ -17838,6 +17908,12 @@ Object.freeze({
17838
17908
  addonId: null,
17839
17909
  access: "create"
17840
17910
  },
17911
+ "deviceManager.adoptionResync": {
17912
+ capName: "device-manager",
17913
+ capScope: "system",
17914
+ addonId: null,
17915
+ access: "create"
17916
+ },
17841
17917
  "deviceManager.allocateDeviceId": {
17842
17918
  capName: "device-manager",
17843
17919
  capScope: "system",
@@ -4652,7 +4652,7 @@ function _instanceof(cls, params = {}) {
4652
4652
  return inst;
4653
4653
  }
4654
4654
  //#endregion
4655
- //#region ../types/dist/sleep-NOH4yRwj.mjs
4655
+ //#region ../types/dist/sleep-DVmKHFGi.mjs
4656
4656
  var EventCategory = /* @__PURE__ */ function(EventCategory) {
4657
4657
  EventCategory["SystemBoot"] = "system.boot";
4658
4658
  EventCategory["SystemAddonsReady"] = "system.addons-ready";
@@ -6452,6 +6452,17 @@ var DeviceRole = /* @__PURE__ */ function(DeviceRole) {
6452
6452
  DeviceRole["HumiditySensor"] = "humidity-sensor";
6453
6453
  DeviceRole["AmbientLightSensor"] = "ambient-light-sensor";
6454
6454
  DeviceRole["PressureSensor"] = "pressure-sensor";
6455
+ /** Wind speed or direction (weather-station `wind-sensor` cap). */
6456
+ DeviceRole["WindSensor"] = "wind-sensor";
6457
+ /** Rain accumulation or rate (weather-station `rain-sensor` cap). */
6458
+ DeviceRole["RainSensor"] = "rain-sensor";
6459
+ /** UV index (weather-station `uv-sensor` cap). */
6460
+ DeviceRole["UvSensor"] = "uv-sensor";
6461
+ /** Solar irradiance W/m² (weather-station `solar-radiation-sensor` cap).
6462
+ * Distinct from AmbientLightSensor (lux). */
6463
+ DeviceRole["SolarRadiationSensor"] = "solar-radiation-sensor";
6464
+ /** Soil moisture % (garden/weather `soil-moisture-sensor` cap). */
6465
+ DeviceRole["SoilMoistureSensor"] = "soil-moisture-sensor";
6455
6466
  DeviceRole["PowerSensor"] = "power-sensor";
6456
6467
  DeviceRole["EnergySensor"] = "energy-sensor";
6457
6468
  DeviceRole["VoltageSensor"] = "voltage-sensor";
@@ -8970,18 +8981,47 @@ object({
8970
8981
  lastUpdated: number().nullable()
8971
8982
  });
8972
8983
  DeviceType.Image;
8984
+ /**
8985
+ * Robotic lawn-mower cap. Models HA `lawn_mower.*` entities — anything
8986
+ * with a mowing lifecycle plus a dock action.
8987
+ *
8988
+ * Activity follows HA's canonical lawn-mower lifecycle: `idle` /
8989
+ * `mowing` / `paused` / `docked` / `error`. `batteryLevel` (0..100) is
8990
+ * nullable — some mowers don't report a battery percentage.
8991
+ *
8992
+ * `startMowing` begins a mowing run, `pause` halts it in place, and
8993
+ * `dock` sends the mower back to its charging station.
8994
+ */
8995
+ var LawnMowerActivitySchema = _enum([
8996
+ "idle",
8997
+ "mowing",
8998
+ "paused",
8999
+ "docked",
9000
+ "error"
9001
+ ]);
9002
+ /** Severity of the current device/error code — info (status), warning, error. */
9003
+ var DeviceCodeSeveritySchema = _enum([
9004
+ "info",
9005
+ "warning",
9006
+ "error"
9007
+ ]);
8973
9008
  object({
8974
9009
  /** Lifecycle activity of the mower. */
8975
- activity: _enum([
8976
- "idle",
8977
- "mowing",
8978
- "paused",
8979
- "docked",
8980
- "error"
8981
- ]),
9010
+ activity: LawnMowerActivitySchema,
8982
9011
  /** 0..100 battery percentage. Null when the device has no battery
8983
9012
  * reading. */
8984
9013
  batteryLevel: number().min(0).max(100).nullable(),
9014
+ /** 0..100 mowing-completion percentage of the current task, or null when no
9015
+ * task is active / progress is unavailable. */
9016
+ progressPercent: number().min(0).max(100).nullable(),
9017
+ /** Current device/event code (dynamic — mostly status, sometimes an error),
9018
+ * or null when unknown. */
9019
+ currentCode: number().nullable(),
9020
+ /** Human label for {@link currentCode}, or null when undecodable. */
9021
+ currentCodeLabel: string().nullable(),
9022
+ /** Severity of {@link currentCode}. `error` (and often `warning`) warrants UI
9023
+ * attention; `info` is normal status. */
9024
+ severity: DeviceCodeSeveritySchema,
8985
9025
  /** Ms epoch when the slice was last updated. */
8986
9026
  lastChangedAt: number()
8987
9027
  });
@@ -10556,6 +10596,7 @@ var VacuumStateSchema = _enum([
10556
10596
  "paused",
10557
10597
  "returning",
10558
10598
  "docked",
10599
+ "drying",
10559
10600
  "error"
10560
10601
  ]);
10561
10602
  /**
@@ -10594,6 +10635,12 @@ object({
10594
10635
  detergent: TankStatusSchema.nullable(),
10595
10636
  /** Dust bin. Null when the hardware has no dust bin. */
10596
10637
  dustBin: TankStatusSchema.nullable(),
10638
+ /** 0..100 cleaning-completion percentage of the current task, or null. */
10639
+ progressPercent: number().min(0).max(100).nullable(),
10640
+ /** Current error code (0 / null = no error). */
10641
+ errorCode: number().nullable(),
10642
+ /** Human label for {@link errorCode}, or null when none / undecodable. */
10643
+ errorLabel: string().nullable(),
10597
10644
  /** Ms epoch when the slice was last updated. */
10598
10645
  lastChangedAt: number()
10599
10646
  });
@@ -12080,17 +12127,32 @@ var ReleaseInputSchema = object({
12080
12127
  * the parent cascades into every accessory. */
12081
12128
  camDeviceId: number().int().nonnegative()
12082
12129
  });
12083
- var ResyncInputSchema = object({
12084
- /** Parent CamStack device id of an adopted device. The provider resolves its
12085
- * source (integration/broker + native id) and re-aligns the device's
12086
- * structural spec (type/role/capabilities/units) with the live mapping,
12087
- * rebuilding any child whose class changed while preserving operator edits. */
12088
- camDeviceId: number().int().nonnegative() });
12130
+ var ResyncInputSchema = object({
12131
+ /** Parent CamStack device id of an adopted device. The provider resolves its
12132
+ * source (integration/broker + native id) and re-aligns the device's
12133
+ * structural spec (type/role/capabilities/units) with the live mapping,
12134
+ * rebuilding any child whose class changed while preserving operator edits. */
12135
+ camDeviceId: number().int().nonnegative(),
12136
+ /** "Resync from zero" (#19). When true, the kernel PURGES every accessory
12137
+ * child of `camDeviceId` BEFORE the provider re-derives the device, so the
12138
+ * children are rebuilt fresh from source — correct names, coords, and units —
12139
+ * instead of being preserved by the incremental reconcile. Use to recover from
12140
+ * legacy generic/placeholder names that the normal name-precedence keeps frozen
12141
+ * (the operator's explicit reset). Push-driven integrations (no-op resync)
12142
+ * rebuild on their next snapshot; pull/command integrations rebuild in `resync`.
12143
+ * Operator edits on the PARENT (its name, layout, primary-child pick) survive —
12144
+ * only the children are torn down. Omitted/false ⇒ the normal incremental
12145
+ * re-sync that preserves children. */
12146
+ resetToSource: boolean().optional()
12147
+ });
12089
12148
  var ResyncResultSchema = object({
12090
12149
  /** True when the persisted spec actually changed (children may have been rebuilt). */
12091
12150
  changed: boolean(),
12092
12151
  /** Number of child devices rebuilt into a new class by this re-sync. */
12093
- rebuiltChildren: number().int().nonnegative()
12152
+ rebuiltChildren: number().int().nonnegative(),
12153
+ /** Number of accessory children torn down by a `resetToSource` purge before the
12154
+ * provider re-derived the device. 0/absent for a normal incremental re-sync. */
12155
+ removedChildren: number().int().nonnegative().optional()
12094
12156
  });
12095
12157
  method(object({ integrationId: string() }), object({ filters: array(AdoptionFilterSchema) }), { auth: "admin" }), method(ListCandidatesInputSchema, ListCandidatesOutputSchema, { auth: "admin" }), method(GetCandidateInputSchema, DiscoveredChildDeviceSchema.nullable(), { auth: "admin" }), method(object({ integrationId: string() }), AdoptionStatusSchema, {
12096
12158
  kind: "mutation",
@@ -13789,6 +13851,11 @@ var DeviceMetaSchema = object({
13789
13851
  addonId: string(),
13790
13852
  type: string(),
13791
13853
  name: string(),
13854
+ /** True once an operator explicitly renamed the device via `setName`. Drives
13855
+ * reconcile name-precedence (preserve operator name vs adopt fresh provider
13856
+ * name). Absent ⇒ treated as user-named (PRESERVE) for legacy rows. See
13857
+ * `DeviceMeta.userNamed`. */
13858
+ userNamed: boolean().optional(),
13792
13859
  location: string().nullable(),
13793
13860
  disabled: boolean(),
13794
13861
  parentDeviceId: number().nullable(),
@@ -14099,6 +14166,9 @@ method(object({
14099
14166
  }), method(ReleaseInputSchema.extend({ addonId: string() }), _void(), {
14100
14167
  kind: "mutation",
14101
14168
  auth: "admin"
14169
+ }), method(ResyncInputSchema, ResyncResultSchema, {
14170
+ kind: "mutation",
14171
+ auth: "admin"
14102
14172
  }), method(object({
14103
14173
  deviceId: number(),
14104
14174
  key: string(),
@@ -17861,6 +17931,12 @@ Object.freeze({
17861
17931
  addonId: null,
17862
17932
  access: "create"
17863
17933
  },
17934
+ "deviceManager.adoptionResync": {
17935
+ capName: "device-manager",
17936
+ capScope: "system",
17937
+ addonId: null,
17938
+ access: "create"
17939
+ },
17864
17940
  "deviceManager.allocateDeviceId": {
17865
17941
  capName: "device-manager",
17866
17942
  capScope: "system",
@@ -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-BUmgLZCW.js");
5
+ const require_shared = require("./shared-Dy0MrVpA.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-DR3X5bYm.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-DYllOkhk.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.1.6",
3
+ "version": "1.1.8",
4
4
  "description": "Remote storage providers (SFTP, S3, WebDAV) — unifies remote backends behind the storage-provider cap",
5
5
  "keywords": [
6
6
  "camstack",