@camstack/addon-provider-wyze 0.2.139 → 0.2.141

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.
Files changed (3) hide show
  1. package/dist/addon.js +341 -37
  2. package/dist/addon.mjs +341 -37
  3. package/package.json +1 -1
package/dist/addon.js CHANGED
@@ -31,7 +31,7 @@ let net = require("net");
31
31
  net = __toESM(net, 1);
32
32
  let node_child_process = require("node:child_process");
33
33
  let node_tls = require("node:tls");
34
- //#region ../types/dist/event-category-BvOFi6PY.mjs
34
+ //#region ../types/dist/event-category-DOl51-Ij.mjs
35
35
  var EventCategory = /* @__PURE__ */ function(EventCategory) {
36
36
  EventCategory["SystemBoot"] = "system.boot";
37
37
  EventCategory["SystemAddonsReady"] = "system.addons-ready";
@@ -110,9 +110,18 @@ var EventCategory = /* @__PURE__ */ function(EventCategory) {
110
110
  /**
111
111
  * The node's one-shot runner boot check (D877): planned runners against the
112
112
  * process service, `degraded` when any is failed, refused or missing. The
113
- * alert centre turns it into one alert and a direct critical push.
113
+ * alert centre turns it into one critical alert.
114
114
  */
115
115
  EventCategory["SystemRunnerCheck"] = "system.runner-check";
116
+ /**
117
+ * An alert EPISODE opened or closed, emitted by the alert centre for alerts
118
+ * of severity `critical` or `error` (`AlertEpisodePayload`). The alert
119
+ * centre sends no notification of its own: Notification Center turns this
120
+ * into the `alert-critical` / `alert-error` / `alert-critical-resolved`
121
+ * system-event kinds, and reconciles from the alerts store because a bus
122
+ * event may be dropped (D8, D11).
123
+ */
124
+ EventCategory["AlertEpisode"] = "alert.episode";
116
125
  EventCategory["AddonError"] = "addon.error";
117
126
  EventCategory["AddonPageReady"] = "addon.page-ready";
118
127
  EventCategory["AddonWidgetReady"] = "addon.widget-ready";
@@ -5437,7 +5446,7 @@ var ZodIssueCode = {
5437
5446
  var ZodFirstPartyTypeKind;
5438
5447
  ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
5439
5448
  //#endregion
5440
- //#region ../types/dist/sleep-BOjuyoPC.mjs
5449
+ //#region ../types/dist/sleep-BxjU_fJM.mjs
5441
5450
  /**
5442
5451
  * The audio chunk plane's byte format, and the ONE expansion from a coded
5443
5452
  * window to float samples (D455).
@@ -13234,7 +13243,14 @@ var AlertSeveritySchema = _enum([
13234
13243
  ]);
13235
13244
  var AlertActionSchema = object({
13236
13245
  label: string(),
13237
- href: string().optional()
13246
+ href: string().optional(),
13247
+ /**
13248
+ * How `href` is followed. Absent / `app`: an admin-ui route (client-side).
13249
+ * `server`: a route the HUB serves (an addon HTTP route such as an OAuth
13250
+ * start) — the browser must leave the SPA with a full navigation, because
13251
+ * the SPA has no such route and would bounce to the home page.
13252
+ */
13253
+ navigation: _enum(["app", "server"]).optional()
13238
13254
  });
13239
13255
  var AlertStatusSchema = _enum([
13240
13256
  "active",
@@ -17615,7 +17631,11 @@ var deviceDiscoveryCapability = {
17615
17631
  };
17616
17632
  /**
17617
17633
  * `device-adoption` — generic discovery + adoption surface,
17618
- * system-scoped singleton. The de-HA-ified successor to `ha-discovery`:
17634
+ * system-scoped collection (one provider per integration addon), routed
17635
+ * by explicit `{ addonId }` on direct `deviceAdoption.*` calls — the same
17636
+ * pin model as `connection-test`. The admin UI keeps using
17637
+ * `deviceManager.adoption*` (which already threads `addonId`). The de-HA-ified
17638
+ * successor to `ha-discovery`:
17619
17639
  * keyed by `integrationId` (the addon resolves integrationId → broker
17620
17640
  * internally) rather than a connection-specific `brokerId`, and it
17621
17641
  * REUSES the shared `DiscoveredChildDevice` candidate type from
@@ -17780,7 +17800,7 @@ var ResyncResultSchema = object({
17780
17800
  var deviceAdoptionCapability = {
17781
17801
  name: "device-adoption",
17782
17802
  scope: "system",
17783
- mode: "singleton",
17803
+ mode: "collection",
17784
17804
  status: {
17785
17805
  schema: AdoptionStatusSchema,
17786
17806
  kind: "poll"
@@ -41963,6 +41983,9 @@ var NcSystemEventKindSchema = _enum([
41963
41983
  "server-updated",
41964
41984
  "export-completed",
41965
41985
  "backup-completed",
41986
+ "alert-critical",
41987
+ "alert-error",
41988
+ "alert-critical-resolved",
41966
41989
  "camera-online",
41967
41990
  "camera-offline",
41968
41991
  "camera-disabled",
@@ -51143,7 +51166,10 @@ method(StorageMigrationInputSchema, StorageMigrationPlanSchema, { auth: "admin"
51143
51166
  }), method(object({ jobId: string().optional() }), StorageMigrationJobSchema.nullable(), { auth: "admin" }), method(object({ jobId: string() }), object({ cancelled: boolean() }), {
51144
51167
  kind: "mutation",
51145
51168
  auth: "admin"
51146
- }), method(object({}), array(StorageMigrationMoverSchema).readonly(), { auth: "admin" }), method(object({}), array(StorageMigrationResidueSchema).readonly(), { auth: "admin" }), method(StorageMigrationDrainInputSchema, object({ jobId: string() }), {
51169
+ }), method(object({}), array(StorageMigrationMoverSchema).readonly(), { auth: "admin" }), method(object({ locationIds: array(string()).readonly() }), object({
51170
+ clear: boolean(),
51171
+ repointLocationId: string().optional()
51172
+ }), { auth: "admin" }), method(object({}), array(StorageMigrationResidueSchema).readonly(), { auth: "admin" }), method(StorageMigrationDrainInputSchema, object({ jobId: string() }), {
51147
51173
  kind: "mutation",
51148
51174
  auth: "admin"
51149
51175
  }), method(StorageCleanupInputSchema, object({ jobId: string() }), {
@@ -55407,6 +55433,11 @@ onStatusChanged: { data: object({
55407
55433
  *
55408
55434
  * `kind: 'poll'` — cloud REST APIs typically have no push channel; the
55409
55435
  * provider refreshes the slice on an interval and eagerly after commands.
55436
+ *
55437
+ * UNKNOWN IS NOT OFF. Every field the appliance reports separately is
55438
+ * nullable: `null` means "not known right now" (the appliance has not said,
55439
+ * the link is down, or the description does not carry it) and is never
55440
+ * rendered or exported as `false` / `0`. `availability` says why.
55410
55441
  */
55411
55442
  var DishwasherStateSchema = _enum([
55412
55443
  "idle",
@@ -55416,35 +55447,155 @@ var DishwasherStateSchema = _enum([
55416
55447
  "error",
55417
55448
  "unavailable"
55418
55449
  ]);
55450
+ /**
55451
+ * The appliance's own operation state, uncollapsed. `state` above is the coarse
55452
+ * view for compact surfaces; this is what the appliance said.
55453
+ */
55454
+ var DishwasherOperationStateSchema = _enum([
55455
+ "Inactive",
55456
+ "Ready",
55457
+ "DelayedStart",
55458
+ "Run",
55459
+ "Pause",
55460
+ "ActionRequired",
55461
+ "Finished",
55462
+ "Error",
55463
+ "Aborting"
55464
+ ]);
55465
+ /**
55466
+ * Why fields may be `null`:
55467
+ * - `available` — the link is up and the description is loaded;
55468
+ * - `offline` — the local link is down (values are unknown, not last-known);
55469
+ * - `description-missing` — the link is up but the appliance's description could not
55470
+ * be loaded, so its values cannot be decoded.
55471
+ */
55472
+ var DishwasherAvailabilitySchema = _enum([
55473
+ "available",
55474
+ "offline",
55475
+ "description-missing"
55476
+ ]);
55419
55477
  var DishwasherConsumableLevelSchema = _enum([
55420
55478
  "ok",
55421
55479
  "low",
55422
55480
  "empty"
55423
55481
  ]);
55424
55482
  var DishwasherStatusSchema = object({
55483
+ availability: DishwasherAvailabilitySchema,
55484
+ /** Coarse state for compact surfaces; `unavailable` whenever the appliance state is not known. */
55425
55485
  state: DishwasherStateSchema,
55426
- /** Active program id/name, or null when none selected / unknown. */
55486
+ /** The appliance's operation state as reported; null when not known. */
55487
+ operationState: DishwasherOperationStateSchema.nullable(),
55488
+ /** Feature key of the ACTIVE (running) program, or null when none runs / not known. */
55427
55489
  program: string().nullable(),
55428
- /** Program tokens the hardware accepts — drives the UI selector. */
55490
+ /** Feature key of the SELECTED program (what Start would run), or null when none / not known. */
55491
+ selectedProgram: string().nullable(),
55492
+ /** Feature keys of the programs the appliance currently offers — drives the UI selector. */
55429
55493
  availablePrograms: array(string()),
55430
- /** Minutes remaining on the active cycle, or null when not running. */
55431
- remainingMinutes: number().int().nonnegative().nullable(),
55494
+ /** Seconds remaining on the active cycle, or null when not running / not known. */
55495
+ remainingSeconds: number().int().nonnegative().nullable(),
55496
+ /** Seconds the delayed start is set to (time until the cycle starts), or null. */
55497
+ delayedStartSeconds: number().int().nonnegative().nullable(),
55432
55498
  /** Cycle completion 0..100, or null when not applicable. */
55433
55499
  progressPercent: number().min(0).max(100).nullable(),
55434
- /** True when the door is reported open. */
55435
- doorOpen: boolean(),
55436
- /** True when remote start is allowed (door closed, power on, etc.). */
55437
- remoteStartAllowed: boolean(),
55438
- /** Main power / switched-on state. */
55439
- powerOn: boolean(),
55500
+ /** True when the door is reported open; null when the door state is not known. */
55501
+ doorOpen: boolean().nullable(),
55502
+ /** True when the door is latched (locked) during a cycle; null when not reported. */
55503
+ doorLocked: boolean().nullable(),
55504
+ /** True when remote start is allowed (door closed, power on, etc.); null when not known. */
55505
+ remoteStartAllowed: boolean().nullable(),
55506
+ /** True when the appliance accepts remote control now; null when not known. */
55507
+ remoteControlActive: boolean().nullable(),
55508
+ /** True while somebody operates the appliance at its panel; null when not reported. */
55509
+ localControlActive: boolean().nullable(),
55510
+ /** Main power / switched-on state; null when not known. */
55511
+ powerOn: boolean().nullable(),
55512
+ /** The raw power state (`On`, `Off`, `Standby`, …); null when not known. */
55513
+ powerState: string().nullable(),
55440
55514
  saltLevel: DishwasherConsumableLevelSchema.nullable(),
55441
55515
  rinseAidLevel: DishwasherConsumableLevelSchema.nullable(),
55442
- halfLoad: boolean(),
55443
- hygienePlus: boolean(),
55516
+ /** Option states: null when the appliance does not expose the option or has not said. */
55517
+ halfLoad: boolean().nullable(),
55518
+ hygienePlus: boolean().nullable(),
55519
+ /** Extra dry option when the appliance exposes it. */
55520
+ extraDry: boolean().nullable(),
55521
+ /** Intensive zone (lower basket) when the appliance exposes it. */
55522
+ intensiveZone: boolean().nullable(),
55523
+ /** VarioSpeed / VarioSpeed+ when the appliance exposes it. */
55524
+ varioSpeedPlus: boolean().nullable(),
55525
+ /** Child lock (controls disabled on the appliance); null when not known. */
55526
+ childLock: boolean().nullable(),
55527
+ /** Feature keys of the events currently raised (salt low, rinse aid low, program finished, …). */
55528
+ activeEvents: array(string()),
55529
+ /** Numeric error code when the appliance reports one; null otherwise. */
55444
55530
  errorCode: number().nullable(),
55531
+ /** Name of the raised alert-level event while the appliance is in error; null otherwise. */
55445
55532
  errorLabel: string().nullable(),
55533
+ /** Ms epoch of the last value received from the appliance; 0 = never. */
55446
55534
  lastFetchedAt: number()
55447
55535
  });
55536
+ var DeviceIdSchema = number().int().nonnegative();
55537
+ /** A value a program option or setting can take. */
55538
+ var DishwasherValueSchema = union([
55539
+ boolean(),
55540
+ string(),
55541
+ number()
55542
+ ]);
55543
+ var DishwasherAccessSchema = _enum([
55544
+ "none",
55545
+ "read",
55546
+ "readWrite",
55547
+ "writeOnly",
55548
+ "readStatic"
55549
+ ]);
55550
+ /**
55551
+ * One option or setting the appliance declares, with the constraints its description
55552
+ * gives. A `readWrite` descriptor that is `available` is what `setOption` accepts.
55553
+ */
55554
+ var DishwasherOptionDescriptorSchema = object({
55555
+ /** Feature key (`Dishcare.Dishwasher.Option.ExtraDry`). */
55556
+ key: string(),
55557
+ /** Last segment of the key, for display. */
55558
+ name: string(),
55559
+ type: _enum([
55560
+ "boolean",
55561
+ "number",
55562
+ "enum",
55563
+ "string"
55564
+ ]),
55565
+ access: DishwasherAccessSchema,
55566
+ /** The appliance reports this entity as currently available. */
55567
+ available: boolean(),
55568
+ /** Unit the description declares for a number; null when it declares none. */
55569
+ unit: string().nullable(),
55570
+ min: number().nullable(),
55571
+ max: number().nullable(),
55572
+ step: number().nullable(),
55573
+ /** Allowed members of an enum; null for other types. */
55574
+ enumValues: array(string()).nullable(),
55575
+ defaultValue: DishwasherValueSchema.nullable()
55576
+ });
55577
+ var DishwasherProgramSchema = object({
55578
+ /** Feature key (`Dishcare.Dishwasher.Program.Eco50`) — what `setProgram` / `start` take. */
55579
+ key: string(),
55580
+ name: string(),
55581
+ /** The appliance currently offers this program. */
55582
+ available: boolean(),
55583
+ /** The options this program lists, with the program-level access / availability / default. */
55584
+ options: array(DishwasherOptionDescriptorSchema)
55585
+ });
55586
+ var DishwasherOptionsSchema = object({
55587
+ availability: DishwasherAvailabilitySchema,
55588
+ /** What the appliance can be told to do, from the commands its description declares. */
55589
+ supportsStart: boolean(),
55590
+ supportsPause: boolean(),
55591
+ supportsResume: boolean(),
55592
+ supportsStop: boolean(),
55593
+ supportsPower: boolean(),
55594
+ /** Every program the description lists, with its options. */
55595
+ programs: array(DishwasherProgramSchema),
55596
+ /** Every option and setting entity the description lists (programs reference these by key). */
55597
+ options: array(DishwasherOptionDescriptorSchema)
55598
+ });
55448
55599
  var dishwasherCapability = {
55449
55600
  name: "dishwasher",
55450
55601
  scope: "device",
@@ -55452,58 +55603,102 @@ var dishwasherCapability = {
55452
55603
  mode: "singleton",
55453
55604
  deviceTypes: [DeviceType.Dishwasher],
55454
55605
  methods: {
55455
- start: method(object({ deviceId: number().int().nonnegative() }), _void(), {
55606
+ /**
55607
+ * Start a program. Without `program` the selected one starts. `options` are
55608
+ * option feature keys; each is checked against the program's constraints.
55609
+ */
55610
+ start: method(object({
55611
+ deviceId: DeviceIdSchema,
55612
+ program: string().min(1).optional(),
55613
+ options: record(string(), DishwasherValueSchema).optional()
55614
+ }), _void(), {
55456
55615
  kind: "mutation",
55457
55616
  auth: "protected"
55458
55617
  }),
55459
- pause: method(object({ deviceId: number().int().nonnegative() }), _void(), {
55618
+ pause: method(object({ deviceId: DeviceIdSchema }), _void(), {
55460
55619
  kind: "mutation",
55461
55620
  auth: "protected"
55462
55621
  }),
55463
- stop: method(object({ deviceId: number().int().nonnegative() }), _void(), {
55622
+ resume: method(object({ deviceId: DeviceIdSchema }), _void(), {
55464
55623
  kind: "mutation",
55465
55624
  auth: "protected"
55466
55625
  }),
55626
+ stop: method(object({ deviceId: DeviceIdSchema }), _void(), {
55627
+ kind: "mutation",
55628
+ auth: "protected"
55629
+ }),
55630
+ /** Select (not start) a program; refused when the appliance does not offer it. */
55467
55631
  setProgram: method(object({
55468
- deviceId: number().int().nonnegative(),
55632
+ deviceId: DeviceIdSchema,
55469
55633
  program: string().min(1)
55470
55634
  }), _void(), {
55471
55635
  kind: "mutation",
55472
55636
  auth: "protected"
55473
55637
  }),
55474
55638
  setPower: method(object({
55475
- deviceId: number().int().nonnegative(),
55639
+ deviceId: DeviceIdSchema,
55476
55640
  on: boolean()
55477
55641
  }), _void(), {
55478
55642
  kind: "mutation",
55479
55643
  auth: "protected"
55480
55644
  }),
55481
55645
  setHalfLoad: method(object({
55482
- deviceId: number().int().nonnegative(),
55646
+ deviceId: DeviceIdSchema,
55483
55647
  on: boolean()
55484
55648
  }), _void(), {
55485
55649
  kind: "mutation",
55486
55650
  auth: "protected"
55487
55651
  }),
55488
55652
  setHygienePlus: method(object({
55489
- deviceId: number().int().nonnegative(),
55653
+ deviceId: DeviceIdSchema,
55490
55654
  on: boolean()
55491
55655
  }), _void(), {
55492
55656
  kind: "mutation",
55493
55657
  auth: "protected"
55494
55658
  }),
55659
+ setExtraDry: method(object({
55660
+ deviceId: DeviceIdSchema,
55661
+ on: boolean()
55662
+ }), _void(), {
55663
+ kind: "mutation",
55664
+ auth: "protected"
55665
+ }),
55666
+ setIntensiveZone: method(object({
55667
+ deviceId: DeviceIdSchema,
55668
+ on: boolean()
55669
+ }), _void(), {
55670
+ kind: "mutation",
55671
+ auth: "protected"
55672
+ }),
55673
+ setVarioSpeedPlus: method(object({
55674
+ deviceId: DeviceIdSchema,
55675
+ on: boolean()
55676
+ }), _void(), {
55677
+ kind: "mutation",
55678
+ auth: "protected"
55679
+ }),
55680
+ setChildLock: method(object({
55681
+ deviceId: DeviceIdSchema,
55682
+ on: boolean()
55683
+ }), _void(), {
55684
+ kind: "mutation",
55685
+ auth: "protected"
55686
+ }),
55687
+ /**
55688
+ * Write any option or setting by feature key. Refused when the description does
55689
+ * not list it, it is not writable or not available now, or the value is outside
55690
+ * its declared range / members.
55691
+ */
55495
55692
  setOption: method(object({
55496
- deviceId: number().int().nonnegative(),
55693
+ deviceId: DeviceIdSchema,
55497
55694
  key: string().min(1),
55498
- value: union([
55499
- boolean(),
55500
- string(),
55501
- number()
55502
- ])
55695
+ value: DishwasherValueSchema
55503
55696
  }), _void(), {
55504
55697
  kind: "mutation",
55505
55698
  auth: "protected"
55506
- })
55699
+ }),
55700
+ /** What this appliance can do, from its own description — the UI is derived from it. */
55701
+ getOptions: method(object({ deviceId: DeviceIdSchema }), DishwasherOptionsSchema, { auth: "protected" })
55507
55702
  },
55508
55703
  status: {
55509
55704
  schema: DishwasherStatusSchema,
@@ -69452,6 +69647,12 @@ Object.freeze({
69452
69647
  addonId: null,
69453
69648
  access: "view"
69454
69649
  },
69650
+ "dishwasher.getOptions": {
69651
+ capName: "dishwasher",
69652
+ capScope: "device",
69653
+ addonId: null,
69654
+ access: "view"
69655
+ },
69455
69656
  "dishwasher.getStatus": {
69456
69657
  capName: "dishwasher",
69457
69658
  capScope: "device",
@@ -69464,6 +69665,24 @@ Object.freeze({
69464
69665
  addonId: null,
69465
69666
  access: "create"
69466
69667
  },
69668
+ "dishwasher.resume": {
69669
+ capName: "dishwasher",
69670
+ capScope: "device",
69671
+ addonId: null,
69672
+ access: "create"
69673
+ },
69674
+ "dishwasher.setChildLock": {
69675
+ capName: "dishwasher",
69676
+ capScope: "device",
69677
+ addonId: null,
69678
+ access: "create"
69679
+ },
69680
+ "dishwasher.setExtraDry": {
69681
+ capName: "dishwasher",
69682
+ capScope: "device",
69683
+ addonId: null,
69684
+ access: "create"
69685
+ },
69467
69686
  "dishwasher.setHalfLoad": {
69468
69687
  capName: "dishwasher",
69469
69688
  capScope: "device",
@@ -69476,6 +69695,12 @@ Object.freeze({
69476
69695
  addonId: null,
69477
69696
  access: "create"
69478
69697
  },
69698
+ "dishwasher.setIntensiveZone": {
69699
+ capName: "dishwasher",
69700
+ capScope: "device",
69701
+ addonId: null,
69702
+ access: "create"
69703
+ },
69479
69704
  "dishwasher.setOption": {
69480
69705
  capName: "dishwasher",
69481
69706
  capScope: "device",
@@ -69494,6 +69719,12 @@ Object.freeze({
69494
69719
  addonId: null,
69495
69720
  access: "create"
69496
69721
  },
69722
+ "dishwasher.setVarioSpeedPlus": {
69723
+ capName: "dishwasher",
69724
+ capScope: "device",
69725
+ addonId: null,
69726
+ access: "create"
69727
+ },
69497
69728
  "dishwasher.start": {
69498
69729
  capName: "dishwasher",
69499
69730
  capScope: "device",
@@ -73940,6 +74171,12 @@ Object.freeze({
73940
74171
  addonId: null,
73941
74172
  access: "view"
73942
74173
  },
74174
+ "storageMigration.moverClearance": {
74175
+ capName: "storage-migration",
74176
+ capScope: "system",
74177
+ addonId: null,
74178
+ access: "view"
74179
+ },
73943
74180
  "storageMigration.movers": {
73944
74181
  capName: "storage-migration",
73945
74182
  capScope: "system",
@@ -76133,6 +76370,11 @@ Object.freeze({
76133
76370
  form: "single",
76134
76371
  optional: false
76135
76372
  }],
76373
+ "dishwasher.getOptions": [{
76374
+ name: "deviceId",
76375
+ form: "single",
76376
+ optional: false
76377
+ }],
76136
76378
  "dishwasher.getStatus": [{
76137
76379
  name: "deviceId",
76138
76380
  form: "single",
@@ -76143,6 +76385,21 @@ Object.freeze({
76143
76385
  form: "single",
76144
76386
  optional: false
76145
76387
  }],
76388
+ "dishwasher.resume": [{
76389
+ name: "deviceId",
76390
+ form: "single",
76391
+ optional: false
76392
+ }],
76393
+ "dishwasher.setChildLock": [{
76394
+ name: "deviceId",
76395
+ form: "single",
76396
+ optional: false
76397
+ }],
76398
+ "dishwasher.setExtraDry": [{
76399
+ name: "deviceId",
76400
+ form: "single",
76401
+ optional: false
76402
+ }],
76146
76403
  "dishwasher.setHalfLoad": [{
76147
76404
  name: "deviceId",
76148
76405
  form: "single",
@@ -76153,6 +76410,11 @@ Object.freeze({
76153
76410
  form: "single",
76154
76411
  optional: false
76155
76412
  }],
76413
+ "dishwasher.setIntensiveZone": [{
76414
+ name: "deviceId",
76415
+ form: "single",
76416
+ optional: false
76417
+ }],
76156
76418
  "dishwasher.setOption": [{
76157
76419
  name: "deviceId",
76158
76420
  form: "single",
@@ -76168,6 +76430,11 @@ Object.freeze({
76168
76430
  form: "single",
76169
76431
  optional: false
76170
76432
  }],
76433
+ "dishwasher.setVarioSpeedPlus": [{
76434
+ name: "deviceId",
76435
+ form: "single",
76436
+ optional: false
76437
+ }],
76171
76438
  "dishwasher.start": [{
76172
76439
  name: "deviceId",
76173
76440
  form: "single",
@@ -78209,6 +78476,9 @@ new Map(Object.entries({
78209
78476
  "wrapper-update-available": "system",
78210
78477
  "backup-completed": "system",
78211
78478
  "export-completed": "system",
78479
+ "alert-critical": "system",
78480
+ "alert-error": "system",
78481
+ "alert-critical-resolved": "system",
78212
78482
  "storage-location-low": "system",
78213
78483
  "storage-location-critical": "system",
78214
78484
  "storage-location-ok": "system",
@@ -78333,6 +78603,16 @@ var NC_SYSTEM_EVENT_KIND_GROUP_SPECS = [
78333
78603
  "storage-location-ok"
78334
78604
  ]
78335
78605
  },
78606
+ {
78607
+ id: "alerts",
78608
+ family: "system",
78609
+ label: "Alerts",
78610
+ kinds: [
78611
+ "alert-critical",
78612
+ "alert-error",
78613
+ "alert-critical-resolved"
78614
+ ]
78615
+ },
78336
78616
  {
78337
78617
  id: "alarm",
78338
78618
  family: "alarm",
@@ -78377,6 +78657,21 @@ var NC_SENSOR_RAISED_FIELD_BY_KIND = Object.freeze(Object.fromEntries(Object.ent
78377
78657
  return [[descriptor.kind, field]];
78378
78658
  })));
78379
78659
  Object.freeze(Object.keys(NC_SENSOR_RAISED_FIELD_BY_KIND));
78660
+ object({
78661
+ phase: _enum(["raised", "resolved"]),
78662
+ episodeId: string().min(1),
78663
+ alertId: string().min(1),
78664
+ severity: AlertSeveritySchema,
78665
+ category: string(),
78666
+ title: string(),
78667
+ message: string(),
78668
+ sourceType: string().optional(),
78669
+ sourceId: string().optional(),
78670
+ nodeId: string().optional(),
78671
+ /** The alert's own action link (where the operator acts on it), when it has one. */
78672
+ actionUrl: string().optional(),
78673
+ at: number()
78674
+ });
78380
78675
  var RULE_BODY_ONLY = ["body"];
78381
78676
  var RULE_TEXT = ["title", "body"];
78382
78677
  var BATTERY = ["device-battery-low", "device-battery-normal"];
@@ -78386,6 +78681,11 @@ var TANK = [
78386
78681
  "device-tank-full",
78387
78682
  "device-tank-normal"
78388
78683
  ];
78684
+ var ALERT_EPISODE = [
78685
+ "alert-critical",
78686
+ "alert-error",
78687
+ "alert-critical-resolved"
78688
+ ];
78389
78689
  var UPDATES = [
78390
78690
  "addon-update-available",
78391
78691
  "server-update-available",
@@ -78578,14 +78878,14 @@ var STATE_SUMMARY_VARS = [
78578
78878
  ([...RULE_TEXT], [...CONSUMABLE]),
78579
78879
  ([...RULE_TEXT], [...TANK]),
78580
78880
  [...RULE_TEXT],
78581
- ([...RULE_TEXT], [...UPDATES]),
78582
- ([...RULE_TEXT], [...UPDATES]),
78583
- [...RULE_TEXT],
78881
+ ([...RULE_TEXT], [...UPDATES, ...ALERT_EPISODE]),
78882
+ ([...RULE_TEXT], [...UPDATES, ...ALERT_EPISODE]),
78584
78883
  [...RULE_TEXT],
78585
78884
  [...RULE_TEXT],
78586
78885
  [...RULE_TEXT],
78587
78886
  [...RULE_TEXT],
78588
78887
  [...RULE_TEXT],
78888
+ ([...RULE_TEXT], [...ALERT_EPISODE]),
78589
78889
  [...RULE_TEXT],
78590
78890
  [...RULE_TEXT],
78591
78891
  [...RULE_TEXT],
@@ -78603,7 +78903,11 @@ var STATE_SUMMARY_VARS = [
78603
78903
  [...RULE_TEXT],
78604
78904
  [...RULE_TEXT],
78605
78905
  [...RULE_TEXT],
78606
- [...RULE_TEXT],
78906
+ ([...RULE_TEXT], [...ALERT_EPISODE]),
78907
+ ([...RULE_TEXT], [...ALERT_EPISODE]),
78908
+ ([...RULE_TEXT], [...ALERT_EPISODE]),
78909
+ ([...RULE_TEXT], [...ALERT_EPISODE]),
78910
+ ([...RULE_TEXT], [...ALERT_EPISODE]),
78607
78911
  [...RULE_TEXT],
78608
78912
  [...RULE_TEXT],
78609
78913
  [...RULE_TEXT],
package/dist/addon.mjs CHANGED
@@ -10,7 +10,7 @@ import { getCACertificates, setDefaultCACertificates } from "node:tls";
10
10
  //#region \0rolldown/runtime.js
11
11
  var __require$1 = /* @__PURE__ */ createRequire(import.meta.url);
12
12
  //#endregion
13
- //#region ../types/dist/event-category-BvOFi6PY.mjs
13
+ //#region ../types/dist/event-category-DOl51-Ij.mjs
14
14
  var EventCategory = /* @__PURE__ */ function(EventCategory) {
15
15
  EventCategory["SystemBoot"] = "system.boot";
16
16
  EventCategory["SystemAddonsReady"] = "system.addons-ready";
@@ -89,9 +89,18 @@ var EventCategory = /* @__PURE__ */ function(EventCategory) {
89
89
  /**
90
90
  * The node's one-shot runner boot check (D877): planned runners against the
91
91
  * process service, `degraded` when any is failed, refused or missing. The
92
- * alert centre turns it into one alert and a direct critical push.
92
+ * alert centre turns it into one critical alert.
93
93
  */
94
94
  EventCategory["SystemRunnerCheck"] = "system.runner-check";
95
+ /**
96
+ * An alert EPISODE opened or closed, emitted by the alert centre for alerts
97
+ * of severity `critical` or `error` (`AlertEpisodePayload`). The alert
98
+ * centre sends no notification of its own: Notification Center turns this
99
+ * into the `alert-critical` / `alert-error` / `alert-critical-resolved`
100
+ * system-event kinds, and reconciles from the alerts store because a bus
101
+ * event may be dropped (D8, D11).
102
+ */
103
+ EventCategory["AlertEpisode"] = "alert.episode";
95
104
  EventCategory["AddonError"] = "addon.error";
96
105
  EventCategory["AddonPageReady"] = "addon.page-ready";
97
106
  EventCategory["AddonWidgetReady"] = "addon.widget-ready";
@@ -5416,7 +5425,7 @@ var ZodIssueCode = {
5416
5425
  var ZodFirstPartyTypeKind;
5417
5426
  ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
5418
5427
  //#endregion
5419
- //#region ../types/dist/sleep-BOjuyoPC.mjs
5428
+ //#region ../types/dist/sleep-BxjU_fJM.mjs
5420
5429
  /**
5421
5430
  * The audio chunk plane's byte format, and the ONE expansion from a coded
5422
5431
  * window to float samples (D455).
@@ -13213,7 +13222,14 @@ var AlertSeveritySchema = _enum([
13213
13222
  ]);
13214
13223
  var AlertActionSchema = object({
13215
13224
  label: string(),
13216
- href: string().optional()
13225
+ href: string().optional(),
13226
+ /**
13227
+ * How `href` is followed. Absent / `app`: an admin-ui route (client-side).
13228
+ * `server`: a route the HUB serves (an addon HTTP route such as an OAuth
13229
+ * start) — the browser must leave the SPA with a full navigation, because
13230
+ * the SPA has no such route and would bounce to the home page.
13231
+ */
13232
+ navigation: _enum(["app", "server"]).optional()
13217
13233
  });
13218
13234
  var AlertStatusSchema = _enum([
13219
13235
  "active",
@@ -17594,7 +17610,11 @@ var deviceDiscoveryCapability = {
17594
17610
  };
17595
17611
  /**
17596
17612
  * `device-adoption` — generic discovery + adoption surface,
17597
- * system-scoped singleton. The de-HA-ified successor to `ha-discovery`:
17613
+ * system-scoped collection (one provider per integration addon), routed
17614
+ * by explicit `{ addonId }` on direct `deviceAdoption.*` calls — the same
17615
+ * pin model as `connection-test`. The admin UI keeps using
17616
+ * `deviceManager.adoption*` (which already threads `addonId`). The de-HA-ified
17617
+ * successor to `ha-discovery`:
17598
17618
  * keyed by `integrationId` (the addon resolves integrationId → broker
17599
17619
  * internally) rather than a connection-specific `brokerId`, and it
17600
17620
  * REUSES the shared `DiscoveredChildDevice` candidate type from
@@ -17759,7 +17779,7 @@ var ResyncResultSchema = object({
17759
17779
  var deviceAdoptionCapability = {
17760
17780
  name: "device-adoption",
17761
17781
  scope: "system",
17762
- mode: "singleton",
17782
+ mode: "collection",
17763
17783
  status: {
17764
17784
  schema: AdoptionStatusSchema,
17765
17785
  kind: "poll"
@@ -41942,6 +41962,9 @@ var NcSystemEventKindSchema = _enum([
41942
41962
  "server-updated",
41943
41963
  "export-completed",
41944
41964
  "backup-completed",
41965
+ "alert-critical",
41966
+ "alert-error",
41967
+ "alert-critical-resolved",
41945
41968
  "camera-online",
41946
41969
  "camera-offline",
41947
41970
  "camera-disabled",
@@ -51122,7 +51145,10 @@ method(StorageMigrationInputSchema, StorageMigrationPlanSchema, { auth: "admin"
51122
51145
  }), method(object({ jobId: string().optional() }), StorageMigrationJobSchema.nullable(), { auth: "admin" }), method(object({ jobId: string() }), object({ cancelled: boolean() }), {
51123
51146
  kind: "mutation",
51124
51147
  auth: "admin"
51125
- }), method(object({}), array(StorageMigrationMoverSchema).readonly(), { auth: "admin" }), method(object({}), array(StorageMigrationResidueSchema).readonly(), { auth: "admin" }), method(StorageMigrationDrainInputSchema, object({ jobId: string() }), {
51148
+ }), method(object({}), array(StorageMigrationMoverSchema).readonly(), { auth: "admin" }), method(object({ locationIds: array(string()).readonly() }), object({
51149
+ clear: boolean(),
51150
+ repointLocationId: string().optional()
51151
+ }), { auth: "admin" }), method(object({}), array(StorageMigrationResidueSchema).readonly(), { auth: "admin" }), method(StorageMigrationDrainInputSchema, object({ jobId: string() }), {
51126
51152
  kind: "mutation",
51127
51153
  auth: "admin"
51128
51154
  }), method(StorageCleanupInputSchema, object({ jobId: string() }), {
@@ -55386,6 +55412,11 @@ onStatusChanged: { data: object({
55386
55412
  *
55387
55413
  * `kind: 'poll'` — cloud REST APIs typically have no push channel; the
55388
55414
  * provider refreshes the slice on an interval and eagerly after commands.
55415
+ *
55416
+ * UNKNOWN IS NOT OFF. Every field the appliance reports separately is
55417
+ * nullable: `null` means "not known right now" (the appliance has not said,
55418
+ * the link is down, or the description does not carry it) and is never
55419
+ * rendered or exported as `false` / `0`. `availability` says why.
55389
55420
  */
55390
55421
  var DishwasherStateSchema = _enum([
55391
55422
  "idle",
@@ -55395,35 +55426,155 @@ var DishwasherStateSchema = _enum([
55395
55426
  "error",
55396
55427
  "unavailable"
55397
55428
  ]);
55429
+ /**
55430
+ * The appliance's own operation state, uncollapsed. `state` above is the coarse
55431
+ * view for compact surfaces; this is what the appliance said.
55432
+ */
55433
+ var DishwasherOperationStateSchema = _enum([
55434
+ "Inactive",
55435
+ "Ready",
55436
+ "DelayedStart",
55437
+ "Run",
55438
+ "Pause",
55439
+ "ActionRequired",
55440
+ "Finished",
55441
+ "Error",
55442
+ "Aborting"
55443
+ ]);
55444
+ /**
55445
+ * Why fields may be `null`:
55446
+ * - `available` — the link is up and the description is loaded;
55447
+ * - `offline` — the local link is down (values are unknown, not last-known);
55448
+ * - `description-missing` — the link is up but the appliance's description could not
55449
+ * be loaded, so its values cannot be decoded.
55450
+ */
55451
+ var DishwasherAvailabilitySchema = _enum([
55452
+ "available",
55453
+ "offline",
55454
+ "description-missing"
55455
+ ]);
55398
55456
  var DishwasherConsumableLevelSchema = _enum([
55399
55457
  "ok",
55400
55458
  "low",
55401
55459
  "empty"
55402
55460
  ]);
55403
55461
  var DishwasherStatusSchema = object({
55462
+ availability: DishwasherAvailabilitySchema,
55463
+ /** Coarse state for compact surfaces; `unavailable` whenever the appliance state is not known. */
55404
55464
  state: DishwasherStateSchema,
55405
- /** Active program id/name, or null when none selected / unknown. */
55465
+ /** The appliance's operation state as reported; null when not known. */
55466
+ operationState: DishwasherOperationStateSchema.nullable(),
55467
+ /** Feature key of the ACTIVE (running) program, or null when none runs / not known. */
55406
55468
  program: string().nullable(),
55407
- /** Program tokens the hardware accepts — drives the UI selector. */
55469
+ /** Feature key of the SELECTED program (what Start would run), or null when none / not known. */
55470
+ selectedProgram: string().nullable(),
55471
+ /** Feature keys of the programs the appliance currently offers — drives the UI selector. */
55408
55472
  availablePrograms: array(string()),
55409
- /** Minutes remaining on the active cycle, or null when not running. */
55410
- remainingMinutes: number().int().nonnegative().nullable(),
55473
+ /** Seconds remaining on the active cycle, or null when not running / not known. */
55474
+ remainingSeconds: number().int().nonnegative().nullable(),
55475
+ /** Seconds the delayed start is set to (time until the cycle starts), or null. */
55476
+ delayedStartSeconds: number().int().nonnegative().nullable(),
55411
55477
  /** Cycle completion 0..100, or null when not applicable. */
55412
55478
  progressPercent: number().min(0).max(100).nullable(),
55413
- /** True when the door is reported open. */
55414
- doorOpen: boolean(),
55415
- /** True when remote start is allowed (door closed, power on, etc.). */
55416
- remoteStartAllowed: boolean(),
55417
- /** Main power / switched-on state. */
55418
- powerOn: boolean(),
55479
+ /** True when the door is reported open; null when the door state is not known. */
55480
+ doorOpen: boolean().nullable(),
55481
+ /** True when the door is latched (locked) during a cycle; null when not reported. */
55482
+ doorLocked: boolean().nullable(),
55483
+ /** True when remote start is allowed (door closed, power on, etc.); null when not known. */
55484
+ remoteStartAllowed: boolean().nullable(),
55485
+ /** True when the appliance accepts remote control now; null when not known. */
55486
+ remoteControlActive: boolean().nullable(),
55487
+ /** True while somebody operates the appliance at its panel; null when not reported. */
55488
+ localControlActive: boolean().nullable(),
55489
+ /** Main power / switched-on state; null when not known. */
55490
+ powerOn: boolean().nullable(),
55491
+ /** The raw power state (`On`, `Off`, `Standby`, …); null when not known. */
55492
+ powerState: string().nullable(),
55419
55493
  saltLevel: DishwasherConsumableLevelSchema.nullable(),
55420
55494
  rinseAidLevel: DishwasherConsumableLevelSchema.nullable(),
55421
- halfLoad: boolean(),
55422
- hygienePlus: boolean(),
55495
+ /** Option states: null when the appliance does not expose the option or has not said. */
55496
+ halfLoad: boolean().nullable(),
55497
+ hygienePlus: boolean().nullable(),
55498
+ /** Extra dry option when the appliance exposes it. */
55499
+ extraDry: boolean().nullable(),
55500
+ /** Intensive zone (lower basket) when the appliance exposes it. */
55501
+ intensiveZone: boolean().nullable(),
55502
+ /** VarioSpeed / VarioSpeed+ when the appliance exposes it. */
55503
+ varioSpeedPlus: boolean().nullable(),
55504
+ /** Child lock (controls disabled on the appliance); null when not known. */
55505
+ childLock: boolean().nullable(),
55506
+ /** Feature keys of the events currently raised (salt low, rinse aid low, program finished, …). */
55507
+ activeEvents: array(string()),
55508
+ /** Numeric error code when the appliance reports one; null otherwise. */
55423
55509
  errorCode: number().nullable(),
55510
+ /** Name of the raised alert-level event while the appliance is in error; null otherwise. */
55424
55511
  errorLabel: string().nullable(),
55512
+ /** Ms epoch of the last value received from the appliance; 0 = never. */
55425
55513
  lastFetchedAt: number()
55426
55514
  });
55515
+ var DeviceIdSchema = number().int().nonnegative();
55516
+ /** A value a program option or setting can take. */
55517
+ var DishwasherValueSchema = union([
55518
+ boolean(),
55519
+ string(),
55520
+ number()
55521
+ ]);
55522
+ var DishwasherAccessSchema = _enum([
55523
+ "none",
55524
+ "read",
55525
+ "readWrite",
55526
+ "writeOnly",
55527
+ "readStatic"
55528
+ ]);
55529
+ /**
55530
+ * One option or setting the appliance declares, with the constraints its description
55531
+ * gives. A `readWrite` descriptor that is `available` is what `setOption` accepts.
55532
+ */
55533
+ var DishwasherOptionDescriptorSchema = object({
55534
+ /** Feature key (`Dishcare.Dishwasher.Option.ExtraDry`). */
55535
+ key: string(),
55536
+ /** Last segment of the key, for display. */
55537
+ name: string(),
55538
+ type: _enum([
55539
+ "boolean",
55540
+ "number",
55541
+ "enum",
55542
+ "string"
55543
+ ]),
55544
+ access: DishwasherAccessSchema,
55545
+ /** The appliance reports this entity as currently available. */
55546
+ available: boolean(),
55547
+ /** Unit the description declares for a number; null when it declares none. */
55548
+ unit: string().nullable(),
55549
+ min: number().nullable(),
55550
+ max: number().nullable(),
55551
+ step: number().nullable(),
55552
+ /** Allowed members of an enum; null for other types. */
55553
+ enumValues: array(string()).nullable(),
55554
+ defaultValue: DishwasherValueSchema.nullable()
55555
+ });
55556
+ var DishwasherProgramSchema = object({
55557
+ /** Feature key (`Dishcare.Dishwasher.Program.Eco50`) — what `setProgram` / `start` take. */
55558
+ key: string(),
55559
+ name: string(),
55560
+ /** The appliance currently offers this program. */
55561
+ available: boolean(),
55562
+ /** The options this program lists, with the program-level access / availability / default. */
55563
+ options: array(DishwasherOptionDescriptorSchema)
55564
+ });
55565
+ var DishwasherOptionsSchema = object({
55566
+ availability: DishwasherAvailabilitySchema,
55567
+ /** What the appliance can be told to do, from the commands its description declares. */
55568
+ supportsStart: boolean(),
55569
+ supportsPause: boolean(),
55570
+ supportsResume: boolean(),
55571
+ supportsStop: boolean(),
55572
+ supportsPower: boolean(),
55573
+ /** Every program the description lists, with its options. */
55574
+ programs: array(DishwasherProgramSchema),
55575
+ /** Every option and setting entity the description lists (programs reference these by key). */
55576
+ options: array(DishwasherOptionDescriptorSchema)
55577
+ });
55427
55578
  var dishwasherCapability = {
55428
55579
  name: "dishwasher",
55429
55580
  scope: "device",
@@ -55431,58 +55582,102 @@ var dishwasherCapability = {
55431
55582
  mode: "singleton",
55432
55583
  deviceTypes: [DeviceType.Dishwasher],
55433
55584
  methods: {
55434
- start: method(object({ deviceId: number().int().nonnegative() }), _void(), {
55585
+ /**
55586
+ * Start a program. Without `program` the selected one starts. `options` are
55587
+ * option feature keys; each is checked against the program's constraints.
55588
+ */
55589
+ start: method(object({
55590
+ deviceId: DeviceIdSchema,
55591
+ program: string().min(1).optional(),
55592
+ options: record(string(), DishwasherValueSchema).optional()
55593
+ }), _void(), {
55435
55594
  kind: "mutation",
55436
55595
  auth: "protected"
55437
55596
  }),
55438
- pause: method(object({ deviceId: number().int().nonnegative() }), _void(), {
55597
+ pause: method(object({ deviceId: DeviceIdSchema }), _void(), {
55439
55598
  kind: "mutation",
55440
55599
  auth: "protected"
55441
55600
  }),
55442
- stop: method(object({ deviceId: number().int().nonnegative() }), _void(), {
55601
+ resume: method(object({ deviceId: DeviceIdSchema }), _void(), {
55443
55602
  kind: "mutation",
55444
55603
  auth: "protected"
55445
55604
  }),
55605
+ stop: method(object({ deviceId: DeviceIdSchema }), _void(), {
55606
+ kind: "mutation",
55607
+ auth: "protected"
55608
+ }),
55609
+ /** Select (not start) a program; refused when the appliance does not offer it. */
55446
55610
  setProgram: method(object({
55447
- deviceId: number().int().nonnegative(),
55611
+ deviceId: DeviceIdSchema,
55448
55612
  program: string().min(1)
55449
55613
  }), _void(), {
55450
55614
  kind: "mutation",
55451
55615
  auth: "protected"
55452
55616
  }),
55453
55617
  setPower: method(object({
55454
- deviceId: number().int().nonnegative(),
55618
+ deviceId: DeviceIdSchema,
55455
55619
  on: boolean()
55456
55620
  }), _void(), {
55457
55621
  kind: "mutation",
55458
55622
  auth: "protected"
55459
55623
  }),
55460
55624
  setHalfLoad: method(object({
55461
- deviceId: number().int().nonnegative(),
55625
+ deviceId: DeviceIdSchema,
55462
55626
  on: boolean()
55463
55627
  }), _void(), {
55464
55628
  kind: "mutation",
55465
55629
  auth: "protected"
55466
55630
  }),
55467
55631
  setHygienePlus: method(object({
55468
- deviceId: number().int().nonnegative(),
55632
+ deviceId: DeviceIdSchema,
55469
55633
  on: boolean()
55470
55634
  }), _void(), {
55471
55635
  kind: "mutation",
55472
55636
  auth: "protected"
55473
55637
  }),
55638
+ setExtraDry: method(object({
55639
+ deviceId: DeviceIdSchema,
55640
+ on: boolean()
55641
+ }), _void(), {
55642
+ kind: "mutation",
55643
+ auth: "protected"
55644
+ }),
55645
+ setIntensiveZone: method(object({
55646
+ deviceId: DeviceIdSchema,
55647
+ on: boolean()
55648
+ }), _void(), {
55649
+ kind: "mutation",
55650
+ auth: "protected"
55651
+ }),
55652
+ setVarioSpeedPlus: method(object({
55653
+ deviceId: DeviceIdSchema,
55654
+ on: boolean()
55655
+ }), _void(), {
55656
+ kind: "mutation",
55657
+ auth: "protected"
55658
+ }),
55659
+ setChildLock: method(object({
55660
+ deviceId: DeviceIdSchema,
55661
+ on: boolean()
55662
+ }), _void(), {
55663
+ kind: "mutation",
55664
+ auth: "protected"
55665
+ }),
55666
+ /**
55667
+ * Write any option or setting by feature key. Refused when the description does
55668
+ * not list it, it is not writable or not available now, or the value is outside
55669
+ * its declared range / members.
55670
+ */
55474
55671
  setOption: method(object({
55475
- deviceId: number().int().nonnegative(),
55672
+ deviceId: DeviceIdSchema,
55476
55673
  key: string().min(1),
55477
- value: union([
55478
- boolean(),
55479
- string(),
55480
- number()
55481
- ])
55674
+ value: DishwasherValueSchema
55482
55675
  }), _void(), {
55483
55676
  kind: "mutation",
55484
55677
  auth: "protected"
55485
- })
55678
+ }),
55679
+ /** What this appliance can do, from its own description — the UI is derived from it. */
55680
+ getOptions: method(object({ deviceId: DeviceIdSchema }), DishwasherOptionsSchema, { auth: "protected" })
55486
55681
  },
55487
55682
  status: {
55488
55683
  schema: DishwasherStatusSchema,
@@ -69431,6 +69626,12 @@ Object.freeze({
69431
69626
  addonId: null,
69432
69627
  access: "view"
69433
69628
  },
69629
+ "dishwasher.getOptions": {
69630
+ capName: "dishwasher",
69631
+ capScope: "device",
69632
+ addonId: null,
69633
+ access: "view"
69634
+ },
69434
69635
  "dishwasher.getStatus": {
69435
69636
  capName: "dishwasher",
69436
69637
  capScope: "device",
@@ -69443,6 +69644,24 @@ Object.freeze({
69443
69644
  addonId: null,
69444
69645
  access: "create"
69445
69646
  },
69647
+ "dishwasher.resume": {
69648
+ capName: "dishwasher",
69649
+ capScope: "device",
69650
+ addonId: null,
69651
+ access: "create"
69652
+ },
69653
+ "dishwasher.setChildLock": {
69654
+ capName: "dishwasher",
69655
+ capScope: "device",
69656
+ addonId: null,
69657
+ access: "create"
69658
+ },
69659
+ "dishwasher.setExtraDry": {
69660
+ capName: "dishwasher",
69661
+ capScope: "device",
69662
+ addonId: null,
69663
+ access: "create"
69664
+ },
69446
69665
  "dishwasher.setHalfLoad": {
69447
69666
  capName: "dishwasher",
69448
69667
  capScope: "device",
@@ -69455,6 +69674,12 @@ Object.freeze({
69455
69674
  addonId: null,
69456
69675
  access: "create"
69457
69676
  },
69677
+ "dishwasher.setIntensiveZone": {
69678
+ capName: "dishwasher",
69679
+ capScope: "device",
69680
+ addonId: null,
69681
+ access: "create"
69682
+ },
69458
69683
  "dishwasher.setOption": {
69459
69684
  capName: "dishwasher",
69460
69685
  capScope: "device",
@@ -69473,6 +69698,12 @@ Object.freeze({
69473
69698
  addonId: null,
69474
69699
  access: "create"
69475
69700
  },
69701
+ "dishwasher.setVarioSpeedPlus": {
69702
+ capName: "dishwasher",
69703
+ capScope: "device",
69704
+ addonId: null,
69705
+ access: "create"
69706
+ },
69476
69707
  "dishwasher.start": {
69477
69708
  capName: "dishwasher",
69478
69709
  capScope: "device",
@@ -73919,6 +74150,12 @@ Object.freeze({
73919
74150
  addonId: null,
73920
74151
  access: "view"
73921
74152
  },
74153
+ "storageMigration.moverClearance": {
74154
+ capName: "storage-migration",
74155
+ capScope: "system",
74156
+ addonId: null,
74157
+ access: "view"
74158
+ },
73922
74159
  "storageMigration.movers": {
73923
74160
  capName: "storage-migration",
73924
74161
  capScope: "system",
@@ -76112,6 +76349,11 @@ Object.freeze({
76112
76349
  form: "single",
76113
76350
  optional: false
76114
76351
  }],
76352
+ "dishwasher.getOptions": [{
76353
+ name: "deviceId",
76354
+ form: "single",
76355
+ optional: false
76356
+ }],
76115
76357
  "dishwasher.getStatus": [{
76116
76358
  name: "deviceId",
76117
76359
  form: "single",
@@ -76122,6 +76364,21 @@ Object.freeze({
76122
76364
  form: "single",
76123
76365
  optional: false
76124
76366
  }],
76367
+ "dishwasher.resume": [{
76368
+ name: "deviceId",
76369
+ form: "single",
76370
+ optional: false
76371
+ }],
76372
+ "dishwasher.setChildLock": [{
76373
+ name: "deviceId",
76374
+ form: "single",
76375
+ optional: false
76376
+ }],
76377
+ "dishwasher.setExtraDry": [{
76378
+ name: "deviceId",
76379
+ form: "single",
76380
+ optional: false
76381
+ }],
76125
76382
  "dishwasher.setHalfLoad": [{
76126
76383
  name: "deviceId",
76127
76384
  form: "single",
@@ -76132,6 +76389,11 @@ Object.freeze({
76132
76389
  form: "single",
76133
76390
  optional: false
76134
76391
  }],
76392
+ "dishwasher.setIntensiveZone": [{
76393
+ name: "deviceId",
76394
+ form: "single",
76395
+ optional: false
76396
+ }],
76135
76397
  "dishwasher.setOption": [{
76136
76398
  name: "deviceId",
76137
76399
  form: "single",
@@ -76147,6 +76409,11 @@ Object.freeze({
76147
76409
  form: "single",
76148
76410
  optional: false
76149
76411
  }],
76412
+ "dishwasher.setVarioSpeedPlus": [{
76413
+ name: "deviceId",
76414
+ form: "single",
76415
+ optional: false
76416
+ }],
76150
76417
  "dishwasher.start": [{
76151
76418
  name: "deviceId",
76152
76419
  form: "single",
@@ -78188,6 +78455,9 @@ new Map(Object.entries({
78188
78455
  "wrapper-update-available": "system",
78189
78456
  "backup-completed": "system",
78190
78457
  "export-completed": "system",
78458
+ "alert-critical": "system",
78459
+ "alert-error": "system",
78460
+ "alert-critical-resolved": "system",
78191
78461
  "storage-location-low": "system",
78192
78462
  "storage-location-critical": "system",
78193
78463
  "storage-location-ok": "system",
@@ -78312,6 +78582,16 @@ var NC_SYSTEM_EVENT_KIND_GROUP_SPECS = [
78312
78582
  "storage-location-ok"
78313
78583
  ]
78314
78584
  },
78585
+ {
78586
+ id: "alerts",
78587
+ family: "system",
78588
+ label: "Alerts",
78589
+ kinds: [
78590
+ "alert-critical",
78591
+ "alert-error",
78592
+ "alert-critical-resolved"
78593
+ ]
78594
+ },
78315
78595
  {
78316
78596
  id: "alarm",
78317
78597
  family: "alarm",
@@ -78356,6 +78636,21 @@ var NC_SENSOR_RAISED_FIELD_BY_KIND = Object.freeze(Object.fromEntries(Object.ent
78356
78636
  return [[descriptor.kind, field]];
78357
78637
  })));
78358
78638
  Object.freeze(Object.keys(NC_SENSOR_RAISED_FIELD_BY_KIND));
78639
+ object({
78640
+ phase: _enum(["raised", "resolved"]),
78641
+ episodeId: string().min(1),
78642
+ alertId: string().min(1),
78643
+ severity: AlertSeveritySchema,
78644
+ category: string(),
78645
+ title: string(),
78646
+ message: string(),
78647
+ sourceType: string().optional(),
78648
+ sourceId: string().optional(),
78649
+ nodeId: string().optional(),
78650
+ /** The alert's own action link (where the operator acts on it), when it has one. */
78651
+ actionUrl: string().optional(),
78652
+ at: number()
78653
+ });
78359
78654
  var RULE_BODY_ONLY = ["body"];
78360
78655
  var RULE_TEXT = ["title", "body"];
78361
78656
  var BATTERY = ["device-battery-low", "device-battery-normal"];
@@ -78365,6 +78660,11 @@ var TANK = [
78365
78660
  "device-tank-full",
78366
78661
  "device-tank-normal"
78367
78662
  ];
78663
+ var ALERT_EPISODE = [
78664
+ "alert-critical",
78665
+ "alert-error",
78666
+ "alert-critical-resolved"
78667
+ ];
78368
78668
  var UPDATES = [
78369
78669
  "addon-update-available",
78370
78670
  "server-update-available",
@@ -78557,14 +78857,14 @@ var STATE_SUMMARY_VARS = [
78557
78857
  ([...RULE_TEXT], [...CONSUMABLE]),
78558
78858
  ([...RULE_TEXT], [...TANK]),
78559
78859
  [...RULE_TEXT],
78560
- ([...RULE_TEXT], [...UPDATES]),
78561
- ([...RULE_TEXT], [...UPDATES]),
78562
- [...RULE_TEXT],
78860
+ ([...RULE_TEXT], [...UPDATES, ...ALERT_EPISODE]),
78861
+ ([...RULE_TEXT], [...UPDATES, ...ALERT_EPISODE]),
78563
78862
  [...RULE_TEXT],
78564
78863
  [...RULE_TEXT],
78565
78864
  [...RULE_TEXT],
78566
78865
  [...RULE_TEXT],
78567
78866
  [...RULE_TEXT],
78867
+ ([...RULE_TEXT], [...ALERT_EPISODE]),
78568
78868
  [...RULE_TEXT],
78569
78869
  [...RULE_TEXT],
78570
78870
  [...RULE_TEXT],
@@ -78582,7 +78882,11 @@ var STATE_SUMMARY_VARS = [
78582
78882
  [...RULE_TEXT],
78583
78883
  [...RULE_TEXT],
78584
78884
  [...RULE_TEXT],
78585
- [...RULE_TEXT],
78885
+ ([...RULE_TEXT], [...ALERT_EPISODE]),
78886
+ ([...RULE_TEXT], [...ALERT_EPISODE]),
78887
+ ([...RULE_TEXT], [...ALERT_EPISODE]),
78888
+ ([...RULE_TEXT], [...ALERT_EPISODE]),
78889
+ ([...RULE_TEXT], [...ALERT_EPISODE]),
78586
78890
  [...RULE_TEXT],
78587
78891
  [...RULE_TEXT],
78588
78892
  [...RULE_TEXT],
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camstack/addon-provider-wyze",
3
- "version": "0.2.139",
3
+ "version": "0.2.141",
4
4
  "description": "Wyze camera device-provider addon for CamStack — wraps the @apocaliss92/wyze-bridge-js P2P/DTLS client, feeding the stream-broker via the pull-rfc4571 lazy-publish path (a structural twin of addon-provider-reolink)",
5
5
  "keywords": [
6
6
  "camstack",