@camstack/addon-smtp-nodemailer 1.1.7 → 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.
@@ -8994,18 +8994,47 @@ object({
8994
8994
  lastUpdated: number().nullable()
8995
8995
  });
8996
8996
  DeviceType.Image;
8997
+ /**
8998
+ * Robotic lawn-mower cap. Models HA `lawn_mower.*` entities — anything
8999
+ * with a mowing lifecycle plus a dock action.
9000
+ *
9001
+ * Activity follows HA's canonical lawn-mower lifecycle: `idle` /
9002
+ * `mowing` / `paused` / `docked` / `error`. `batteryLevel` (0..100) is
9003
+ * nullable — some mowers don't report a battery percentage.
9004
+ *
9005
+ * `startMowing` begins a mowing run, `pause` halts it in place, and
9006
+ * `dock` sends the mower back to its charging station.
9007
+ */
9008
+ var LawnMowerActivitySchema = _enum([
9009
+ "idle",
9010
+ "mowing",
9011
+ "paused",
9012
+ "docked",
9013
+ "error"
9014
+ ]);
9015
+ /** Severity of the current device/error code — info (status), warning, error. */
9016
+ var DeviceCodeSeveritySchema = _enum([
9017
+ "info",
9018
+ "warning",
9019
+ "error"
9020
+ ]);
8997
9021
  object({
8998
9022
  /** Lifecycle activity of the mower. */
8999
- activity: _enum([
9000
- "idle",
9001
- "mowing",
9002
- "paused",
9003
- "docked",
9004
- "error"
9005
- ]),
9023
+ activity: LawnMowerActivitySchema,
9006
9024
  /** 0..100 battery percentage. Null when the device has no battery
9007
9025
  * reading. */
9008
9026
  batteryLevel: number().min(0).max(100).nullable(),
9027
+ /** 0..100 mowing-completion percentage of the current task, or null when no
9028
+ * task is active / progress is unavailable. */
9029
+ progressPercent: number().min(0).max(100).nullable(),
9030
+ /** Current device/event code (dynamic — mostly status, sometimes an error),
9031
+ * or null when unknown. */
9032
+ currentCode: number().nullable(),
9033
+ /** Human label for {@link currentCode}, or null when undecodable. */
9034
+ currentCodeLabel: string().nullable(),
9035
+ /** Severity of {@link currentCode}. `error` (and often `warning`) warrants UI
9036
+ * attention; `info` is normal status. */
9037
+ severity: DeviceCodeSeveritySchema,
9009
9038
  /** Ms epoch when the slice was last updated. */
9010
9039
  lastChangedAt: number()
9011
9040
  });
@@ -10580,6 +10609,7 @@ var VacuumStateSchema = _enum([
10580
10609
  "paused",
10581
10610
  "returning",
10582
10611
  "docked",
10612
+ "drying",
10583
10613
  "error"
10584
10614
  ]);
10585
10615
  /**
@@ -10618,6 +10648,12 @@ object({
10618
10648
  detergent: TankStatusSchema.nullable(),
10619
10649
  /** Dust bin. Null when the hardware has no dust bin. */
10620
10650
  dustBin: TankStatusSchema.nullable(),
10651
+ /** 0..100 cleaning-completion percentage of the current task, or null. */
10652
+ progressPercent: number().min(0).max(100).nullable(),
10653
+ /** Current error code (0 / null = no error). */
10654
+ errorCode: number().nullable(),
10655
+ /** Human label for {@link errorCode}, or null when none / undecodable. */
10656
+ errorLabel: string().nullable(),
10621
10657
  /** Ms epoch when the slice was last updated. */
10622
10658
  lastChangedAt: number()
10623
10659
  });
@@ -12072,17 +12108,32 @@ var ReleaseInputSchema = object({
12072
12108
  * the parent cascades into every accessory. */
12073
12109
  camDeviceId: number().int().nonnegative()
12074
12110
  });
12075
- var ResyncInputSchema = object({
12076
- /** Parent CamStack device id of an adopted device. The provider resolves its
12077
- * source (integration/broker + native id) and re-aligns the device's
12078
- * structural spec (type/role/capabilities/units) with the live mapping,
12079
- * rebuilding any child whose class changed while preserving operator edits. */
12080
- camDeviceId: number().int().nonnegative() });
12111
+ var ResyncInputSchema = object({
12112
+ /** Parent CamStack device id of an adopted device. The provider resolves its
12113
+ * source (integration/broker + native id) and re-aligns the device's
12114
+ * structural spec (type/role/capabilities/units) with the live mapping,
12115
+ * rebuilding any child whose class changed while preserving operator edits. */
12116
+ camDeviceId: number().int().nonnegative(),
12117
+ /** "Resync from zero" (#19). When true, the kernel PURGES every accessory
12118
+ * child of `camDeviceId` BEFORE the provider re-derives the device, so the
12119
+ * children are rebuilt fresh from source — correct names, coords, and units —
12120
+ * instead of being preserved by the incremental reconcile. Use to recover from
12121
+ * legacy generic/placeholder names that the normal name-precedence keeps frozen
12122
+ * (the operator's explicit reset). Push-driven integrations (no-op resync)
12123
+ * rebuild on their next snapshot; pull/command integrations rebuild in `resync`.
12124
+ * Operator edits on the PARENT (its name, layout, primary-child pick) survive —
12125
+ * only the children are torn down. Omitted/false ⇒ the normal incremental
12126
+ * re-sync that preserves children. */
12127
+ resetToSource: boolean().optional()
12128
+ });
12081
12129
  var ResyncResultSchema = object({
12082
12130
  /** True when the persisted spec actually changed (children may have been rebuilt). */
12083
12131
  changed: boolean(),
12084
12132
  /** Number of child devices rebuilt into a new class by this re-sync. */
12085
- rebuiltChildren: number().int().nonnegative()
12133
+ rebuiltChildren: number().int().nonnegative(),
12134
+ /** Number of accessory children torn down by a `resetToSource` purge before the
12135
+ * provider re-derived the device. 0/absent for a normal incremental re-sync. */
12136
+ removedChildren: number().int().nonnegative().optional()
12086
12137
  });
12087
12138
  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, {
12088
12139
  kind: "mutation",
@@ -13781,6 +13832,11 @@ var DeviceMetaSchema = object({
13781
13832
  addonId: string(),
13782
13833
  type: string(),
13783
13834
  name: string(),
13835
+ /** True once an operator explicitly renamed the device via `setName`. Drives
13836
+ * reconcile name-precedence (preserve operator name vs adopt fresh provider
13837
+ * name). Absent ⇒ treated as user-named (PRESERVE) for legacy rows. See
13838
+ * `DeviceMeta.userNamed`. */
13839
+ userNamed: boolean().optional(),
13784
13840
  location: string().nullable(),
13785
13841
  disabled: boolean(),
13786
13842
  parentDeviceId: number().nullable(),
@@ -14091,6 +14147,9 @@ method(object({
14091
14147
  }), method(ReleaseInputSchema.extend({ addonId: string() }), _void(), {
14092
14148
  kind: "mutation",
14093
14149
  auth: "admin"
14150
+ }), method(ResyncInputSchema, ResyncResultSchema, {
14151
+ kind: "mutation",
14152
+ auth: "admin"
14094
14153
  }), method(object({
14095
14154
  deviceId: number(),
14096
14155
  key: string(),
@@ -17853,6 +17912,12 @@ Object.freeze({
17853
17912
  addonId: null,
17854
17913
  access: "create"
17855
17914
  },
17915
+ "deviceManager.adoptionResync": {
17916
+ capName: "device-manager",
17917
+ capScope: "system",
17918
+ addonId: null,
17919
+ access: "create"
17920
+ },
17856
17921
  "deviceManager.allocateDeviceId": {
17857
17922
  capName: "device-manager",
17858
17923
  capScope: "system",
@@ -8992,18 +8992,47 @@ object({
8992
8992
  lastUpdated: number().nullable()
8993
8993
  });
8994
8994
  DeviceType.Image;
8995
+ /**
8996
+ * Robotic lawn-mower cap. Models HA `lawn_mower.*` entities — anything
8997
+ * with a mowing lifecycle plus a dock action.
8998
+ *
8999
+ * Activity follows HA's canonical lawn-mower lifecycle: `idle` /
9000
+ * `mowing` / `paused` / `docked` / `error`. `batteryLevel` (0..100) is
9001
+ * nullable — some mowers don't report a battery percentage.
9002
+ *
9003
+ * `startMowing` begins a mowing run, `pause` halts it in place, and
9004
+ * `dock` sends the mower back to its charging station.
9005
+ */
9006
+ var LawnMowerActivitySchema = _enum([
9007
+ "idle",
9008
+ "mowing",
9009
+ "paused",
9010
+ "docked",
9011
+ "error"
9012
+ ]);
9013
+ /** Severity of the current device/error code — info (status), warning, error. */
9014
+ var DeviceCodeSeveritySchema = _enum([
9015
+ "info",
9016
+ "warning",
9017
+ "error"
9018
+ ]);
8995
9019
  object({
8996
9020
  /** Lifecycle activity of the mower. */
8997
- activity: _enum([
8998
- "idle",
8999
- "mowing",
9000
- "paused",
9001
- "docked",
9002
- "error"
9003
- ]),
9021
+ activity: LawnMowerActivitySchema,
9004
9022
  /** 0..100 battery percentage. Null when the device has no battery
9005
9023
  * reading. */
9006
9024
  batteryLevel: number().min(0).max(100).nullable(),
9025
+ /** 0..100 mowing-completion percentage of the current task, or null when no
9026
+ * task is active / progress is unavailable. */
9027
+ progressPercent: number().min(0).max(100).nullable(),
9028
+ /** Current device/event code (dynamic — mostly status, sometimes an error),
9029
+ * or null when unknown. */
9030
+ currentCode: number().nullable(),
9031
+ /** Human label for {@link currentCode}, or null when undecodable. */
9032
+ currentCodeLabel: string().nullable(),
9033
+ /** Severity of {@link currentCode}. `error` (and often `warning`) warrants UI
9034
+ * attention; `info` is normal status. */
9035
+ severity: DeviceCodeSeveritySchema,
9007
9036
  /** Ms epoch when the slice was last updated. */
9008
9037
  lastChangedAt: number()
9009
9038
  });
@@ -10578,6 +10607,7 @@ var VacuumStateSchema = _enum([
10578
10607
  "paused",
10579
10608
  "returning",
10580
10609
  "docked",
10610
+ "drying",
10581
10611
  "error"
10582
10612
  ]);
10583
10613
  /**
@@ -10616,6 +10646,12 @@ object({
10616
10646
  detergent: TankStatusSchema.nullable(),
10617
10647
  /** Dust bin. Null when the hardware has no dust bin. */
10618
10648
  dustBin: TankStatusSchema.nullable(),
10649
+ /** 0..100 cleaning-completion percentage of the current task, or null. */
10650
+ progressPercent: number().min(0).max(100).nullable(),
10651
+ /** Current error code (0 / null = no error). */
10652
+ errorCode: number().nullable(),
10653
+ /** Human label for {@link errorCode}, or null when none / undecodable. */
10654
+ errorLabel: string().nullable(),
10619
10655
  /** Ms epoch when the slice was last updated. */
10620
10656
  lastChangedAt: number()
10621
10657
  });
@@ -12070,17 +12106,32 @@ var ReleaseInputSchema = object({
12070
12106
  * the parent cascades into every accessory. */
12071
12107
  camDeviceId: number().int().nonnegative()
12072
12108
  });
12073
- var ResyncInputSchema = object({
12074
- /** Parent CamStack device id of an adopted device. The provider resolves its
12075
- * source (integration/broker + native id) and re-aligns the device's
12076
- * structural spec (type/role/capabilities/units) with the live mapping,
12077
- * rebuilding any child whose class changed while preserving operator edits. */
12078
- camDeviceId: number().int().nonnegative() });
12109
+ var ResyncInputSchema = object({
12110
+ /** Parent CamStack device id of an adopted device. The provider resolves its
12111
+ * source (integration/broker + native id) and re-aligns the device's
12112
+ * structural spec (type/role/capabilities/units) with the live mapping,
12113
+ * rebuilding any child whose class changed while preserving operator edits. */
12114
+ camDeviceId: number().int().nonnegative(),
12115
+ /** "Resync from zero" (#19). When true, the kernel PURGES every accessory
12116
+ * child of `camDeviceId` BEFORE the provider re-derives the device, so the
12117
+ * children are rebuilt fresh from source — correct names, coords, and units —
12118
+ * instead of being preserved by the incremental reconcile. Use to recover from
12119
+ * legacy generic/placeholder names that the normal name-precedence keeps frozen
12120
+ * (the operator's explicit reset). Push-driven integrations (no-op resync)
12121
+ * rebuild on their next snapshot; pull/command integrations rebuild in `resync`.
12122
+ * Operator edits on the PARENT (its name, layout, primary-child pick) survive —
12123
+ * only the children are torn down. Omitted/false ⇒ the normal incremental
12124
+ * re-sync that preserves children. */
12125
+ resetToSource: boolean().optional()
12126
+ });
12079
12127
  var ResyncResultSchema = object({
12080
12128
  /** True when the persisted spec actually changed (children may have been rebuilt). */
12081
12129
  changed: boolean(),
12082
12130
  /** Number of child devices rebuilt into a new class by this re-sync. */
12083
- rebuiltChildren: number().int().nonnegative()
12131
+ rebuiltChildren: number().int().nonnegative(),
12132
+ /** Number of accessory children torn down by a `resetToSource` purge before the
12133
+ * provider re-derived the device. 0/absent for a normal incremental re-sync. */
12134
+ removedChildren: number().int().nonnegative().optional()
12084
12135
  });
12085
12136
  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, {
12086
12137
  kind: "mutation",
@@ -13779,6 +13830,11 @@ var DeviceMetaSchema = object({
13779
13830
  addonId: string(),
13780
13831
  type: string(),
13781
13832
  name: string(),
13833
+ /** True once an operator explicitly renamed the device via `setName`. Drives
13834
+ * reconcile name-precedence (preserve operator name vs adopt fresh provider
13835
+ * name). Absent ⇒ treated as user-named (PRESERVE) for legacy rows. See
13836
+ * `DeviceMeta.userNamed`. */
13837
+ userNamed: boolean().optional(),
13782
13838
  location: string().nullable(),
13783
13839
  disabled: boolean(),
13784
13840
  parentDeviceId: number().nullable(),
@@ -14089,6 +14145,9 @@ method(object({
14089
14145
  }), method(ReleaseInputSchema.extend({ addonId: string() }), _void(), {
14090
14146
  kind: "mutation",
14091
14147
  auth: "admin"
14148
+ }), method(ResyncInputSchema, ResyncResultSchema, {
14149
+ kind: "mutation",
14150
+ auth: "admin"
14092
14151
  }), method(object({
14093
14152
  deviceId: number(),
14094
14153
  key: string(),
@@ -17851,6 +17910,12 @@ Object.freeze({
17851
17910
  addonId: null,
17852
17911
  access: "create"
17853
17912
  },
17913
+ "deviceManager.adoptionResync": {
17914
+ capName: "device-manager",
17915
+ capScope: "system",
17916
+ addonId: null,
17917
+ access: "create"
17918
+ },
17854
17919
  "deviceManager.allocateDeviceId": {
17855
17920
  capName: "device-manager",
17856
17921
  capScope: "system",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camstack/addon-smtp-nodemailer",
3
- "version": "1.1.7",
3
+ "version": "1.1.8",
4
4
  "description": "SMTP email provider addon for CamStack — wraps `nodemailer` and registers a `smtp-provider` cap collection entry. Used by magic-link login + notifier addons.",
5
5
  "keywords": [
6
6
  "camstack",