@camstack/addon-export-alexa 1.2.146 → 1.2.148

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.
@@ -34,7 +34,7 @@ let node_path = require("node:path");
34
34
  node_path = __toESM(node_path, 1);
35
35
  require("node:child_process");
36
36
  require("node:zlib");
37
- //#region ../types/dist/event-category-BvOFi6PY.mjs
37
+ //#region ../types/dist/event-category-DOl51-Ij.mjs
38
38
  var EventCategory = /* @__PURE__ */ function(EventCategory) {
39
39
  EventCategory["SystemBoot"] = "system.boot";
40
40
  EventCategory["SystemAddonsReady"] = "system.addons-ready";
@@ -113,9 +113,18 @@ var EventCategory = /* @__PURE__ */ function(EventCategory) {
113
113
  /**
114
114
  * The node's one-shot runner boot check (D877): planned runners against the
115
115
  * process service, `degraded` when any is failed, refused or missing. The
116
- * alert centre turns it into one alert and a direct critical push.
116
+ * alert centre turns it into one critical alert.
117
117
  */
118
118
  EventCategory["SystemRunnerCheck"] = "system.runner-check";
119
+ /**
120
+ * An alert EPISODE opened or closed, emitted by the alert centre for alerts
121
+ * of severity `critical` or `error` (`AlertEpisodePayload`). The alert
122
+ * centre sends no notification of its own: Notification Center turns this
123
+ * into the `alert-critical` / `alert-error` / `alert-critical-resolved`
124
+ * system-event kinds, and reconciles from the alerts store because a bus
125
+ * event may be dropped (D8, D11).
126
+ */
127
+ EventCategory["AlertEpisode"] = "alert.episode";
119
128
  EventCategory["AddonError"] = "addon.error";
120
129
  EventCategory["AddonPageReady"] = "addon.page-ready";
121
130
  EventCategory["AddonWidgetReady"] = "addon.widget-ready";
@@ -5440,7 +5449,7 @@ var ZodIssueCode = {
5440
5449
  var ZodFirstPartyTypeKind;
5441
5450
  ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
5442
5451
  //#endregion
5443
- //#region ../types/dist/sleep-bZIhUvjd.mjs
5452
+ //#region ../types/dist/sleep-BxjU_fJM.mjs
5444
5453
  /**
5445
5454
  * The audio chunk plane's byte format, and the ONE expansion from a coded
5446
5455
  * window to float samples (D455).
@@ -8410,7 +8419,7 @@ object({
8410
8419
  params: record(string(), union([string(), number()])).optional()
8411
8420
  });
8412
8421
  //#endregion
8413
- //#region ../types/dist/err-msg--2RrYiLO.mjs
8422
+ //#region ../types/dist/err-msg-BXKzRBwg.mjs
8414
8423
  var DeviceType = /* @__PURE__ */ function(DeviceType) {
8415
8424
  DeviceType["Camera"] = "camera";
8416
8425
  DeviceType["Hub"] = "hub";
@@ -8502,6 +8511,10 @@ var DeviceType = /* @__PURE__ */ function(DeviceType) {
8502
8511
  * native PetKit (`nodepetkit` `FeederDevice`), reusable by other feeder
8503
8512
  * integrations sharing the same food/desiccant/hopper surface. */
8504
8513
  DeviceType["PetFeeder"] = "pet-feeder";
8514
+ /** Built-in dishwasher — program lifecycle, door / remote-start gates,
8515
+ * salt and rinse-aid levels. Installed with the `dishwasher` cap.
8516
+ * Sources: native Bosch Home Connect, reusable by similar integrations. */
8517
+ DeviceType["Dishwasher"] = "dishwasher";
8505
8518
  return DeviceType;
8506
8519
  }({});
8507
8520
  var DeviceFeature = /* @__PURE__ */ function(DeviceFeature) {
@@ -8759,7 +8772,7 @@ function errMsg(err) {
8759
8772
  return String(err);
8760
8773
  }
8761
8774
  //#endregion
8762
- //#region ../types/dist/composition-DOwQB_Ua.mjs
8775
+ //#region ../types/dist/composition-CB6PMT9p.mjs
8763
8776
  /**
8764
8777
  * The ffmpeg build every CamStack node downloads, per platform and arch.
8765
8778
  *
@@ -13428,8 +13441,20 @@ var AlertSeveritySchema = _enum([
13428
13441
  "info",
13429
13442
  "success",
13430
13443
  "warning",
13431
- "error"
13444
+ "error",
13445
+ "critical"
13432
13446
  ]);
13447
+ var AlertActionSchema = object({
13448
+ label: string(),
13449
+ href: string().optional(),
13450
+ /**
13451
+ * How `href` is followed. Absent / `app`: an admin-ui route (client-side).
13452
+ * `server`: a route the HUB serves (an addon HTTP route such as an OAuth
13453
+ * start) — the browser must leave the SPA with a full navigation, because
13454
+ * the SPA has no such route and would bounce to the home page.
13455
+ */
13456
+ navigation: _enum(["app", "server"]).optional()
13457
+ });
13433
13458
  var AlertStatusSchema = _enum([
13434
13459
  "active",
13435
13460
  "in-progress",
@@ -13447,6 +13472,7 @@ var AlertSchema = object({
13447
13472
  severity: AlertSeveritySchema,
13448
13473
  title: string(),
13449
13474
  message: string(),
13475
+ action: AlertActionSchema.optional(),
13450
13476
  status: AlertStatusSchema,
13451
13477
  progress: number().optional(),
13452
13478
  read: boolean(),
@@ -17591,7 +17617,11 @@ DeviceType.Hub, DeviceDiscoveryStatusSchema.extend({ lastFetchedAt: number().int
17591
17617
  });
17592
17618
  /**
17593
17619
  * `device-adoption` — generic discovery + adoption surface,
17594
- * system-scoped singleton. The de-HA-ified successor to `ha-discovery`:
17620
+ * system-scoped collection (one provider per integration addon), routed
17621
+ * by explicit `{ addonId }` on direct `deviceAdoption.*` calls — the same
17622
+ * pin model as `connection-test`. The admin UI keeps using
17623
+ * `deviceManager.adoption*` (which already threads `addonId`). The de-HA-ified
17624
+ * successor to `ha-discovery`:
17595
17625
  * keyed by `integrationId` (the addon resolves integrationId → broker
17596
17626
  * internally) rather than a connection-specific `brokerId`, and it
17597
17627
  * REUSES the shared `DiscoveredChildDevice` candidate type from
@@ -41824,6 +41854,9 @@ var NcSystemEventKindSchema = _enum([
41824
41854
  "server-updated",
41825
41855
  "export-completed",
41826
41856
  "backup-completed",
41857
+ "alert-critical",
41858
+ "alert-error",
41859
+ "alert-critical-resolved",
41827
41860
  "camera-online",
41828
41861
  "camera-offline",
41829
41862
  "camera-disabled",
@@ -50872,7 +50905,10 @@ method(StorageMigrationInputSchema, StorageMigrationPlanSchema, { auth: "admin"
50872
50905
  }), method(object({ jobId: string().optional() }), StorageMigrationJobSchema.nullable(), { auth: "admin" }), method(object({ jobId: string() }), object({ cancelled: boolean() }), {
50873
50906
  kind: "mutation",
50874
50907
  auth: "admin"
50875
- }), method(object({}), array(StorageMigrationMoverSchema).readonly(), { auth: "admin" }), method(object({}), array(StorageMigrationResidueSchema).readonly(), { auth: "admin" }), method(StorageMigrationDrainInputSchema, object({ jobId: string() }), {
50908
+ }), method(object({}), array(StorageMigrationMoverSchema).readonly(), { auth: "admin" }), method(object({ locationIds: array(string()).readonly() }), object({
50909
+ clear: boolean(),
50910
+ repointLocationId: string().optional()
50911
+ }), { auth: "admin" }), method(object({}), array(StorageMigrationResidueSchema).readonly(), { auth: "admin" }), method(StorageMigrationDrainInputSchema, object({ jobId: string() }), {
50876
50912
  kind: "mutation",
50877
50913
  auth: "admin"
50878
50914
  }), method(StorageCleanupInputSchema, object({ jobId: string() }), {
@@ -53422,7 +53458,7 @@ var BatteryStatusSchema = object({
53422
53458
  */
53423
53459
  binary: boolean().optional()
53424
53460
  });
53425
- DeviceType.Camera, DeviceType.Sensor, DeviceType.Button, DeviceType.Switch, DeviceType.PetFeeder, DeviceType.Container, method(object({
53461
+ DeviceType.Camera, DeviceType.Sensor, DeviceType.Button, DeviceType.Switch, DeviceType.PetFeeder, DeviceType.Container, DeviceType.Thermostat, method(object({
53426
53462
  deviceId: number(),
53427
53463
  /** Bound on the wait. Sensible range 3000–10000ms. */
53428
53464
  timeoutMs: number().int().min(500).max(3e4).default(8e3)
@@ -54322,6 +54358,250 @@ object({
54322
54358
  deviceId: number(),
54323
54359
  status: DeviceStatusSchema
54324
54360
  });
54361
+ /**
54362
+ * Smart-dishwasher cap — program lifecycle, door / remote-start gates,
54363
+ * consumable levels (salt, rinse aid) and common program options.
54364
+ *
54365
+ * Sources: native Bosch Home Connect (`dishwasher` device type). Reusable
54366
+ * by any integration that exposes the same program / option surface.
54367
+ *
54368
+ * `kind: 'poll'` — cloud REST APIs typically have no push channel; the
54369
+ * provider refreshes the slice on an interval and eagerly after commands.
54370
+ *
54371
+ * UNKNOWN IS NOT OFF. Every field the appliance reports separately is
54372
+ * nullable: `null` means "not known right now" (the appliance has not said,
54373
+ * the link is down, or the description does not carry it) and is never
54374
+ * rendered or exported as `false` / `0`. `availability` says why.
54375
+ */
54376
+ var DishwasherStateSchema = _enum([
54377
+ "idle",
54378
+ "running",
54379
+ "paused",
54380
+ "finished",
54381
+ "error",
54382
+ "unavailable"
54383
+ ]);
54384
+ /**
54385
+ * The appliance's own operation state, uncollapsed. `state` above is the coarse
54386
+ * view for compact surfaces; this is what the appliance said.
54387
+ */
54388
+ var DishwasherOperationStateSchema = _enum([
54389
+ "Inactive",
54390
+ "Ready",
54391
+ "DelayedStart",
54392
+ "Run",
54393
+ "Pause",
54394
+ "ActionRequired",
54395
+ "Finished",
54396
+ "Error",
54397
+ "Aborting"
54398
+ ]);
54399
+ /**
54400
+ * Why fields may be `null`:
54401
+ * - `available` — the link is up and the description is loaded;
54402
+ * - `offline` — the local link is down (values are unknown, not last-known);
54403
+ * - `description-missing` — the link is up but the appliance's description could not
54404
+ * be loaded, so its values cannot be decoded.
54405
+ */
54406
+ var DishwasherAvailabilitySchema = _enum([
54407
+ "available",
54408
+ "offline",
54409
+ "description-missing"
54410
+ ]);
54411
+ var DishwasherConsumableLevelSchema = _enum([
54412
+ "ok",
54413
+ "low",
54414
+ "empty"
54415
+ ]);
54416
+ object({
54417
+ availability: DishwasherAvailabilitySchema,
54418
+ /** Coarse state for compact surfaces; `unavailable` whenever the appliance state is not known. */
54419
+ state: DishwasherStateSchema,
54420
+ /** The appliance's operation state as reported; null when not known. */
54421
+ operationState: DishwasherOperationStateSchema.nullable(),
54422
+ /** Feature key of the ACTIVE (running) program, or null when none runs / not known. */
54423
+ program: string().nullable(),
54424
+ /** Feature key of the SELECTED program (what Start would run), or null when none / not known. */
54425
+ selectedProgram: string().nullable(),
54426
+ /** Feature keys of the programs the appliance currently offers — drives the UI selector. */
54427
+ availablePrograms: array(string()),
54428
+ /** Seconds remaining on the active cycle, or null when not running / not known. */
54429
+ remainingSeconds: number().int().nonnegative().nullable(),
54430
+ /** Seconds the delayed start is set to (time until the cycle starts), or null. */
54431
+ delayedStartSeconds: number().int().nonnegative().nullable(),
54432
+ /** Cycle completion 0..100, or null when not applicable. */
54433
+ progressPercent: number().min(0).max(100).nullable(),
54434
+ /** True when the door is reported open; null when the door state is not known. */
54435
+ doorOpen: boolean().nullable(),
54436
+ /** True when the door is latched (locked) during a cycle; null when not reported. */
54437
+ doorLocked: boolean().nullable(),
54438
+ /** True when remote start is allowed (door closed, power on, etc.); null when not known. */
54439
+ remoteStartAllowed: boolean().nullable(),
54440
+ /** True when the appliance accepts remote control now; null when not known. */
54441
+ remoteControlActive: boolean().nullable(),
54442
+ /** True while somebody operates the appliance at its panel; null when not reported. */
54443
+ localControlActive: boolean().nullable(),
54444
+ /** Main power / switched-on state; null when not known. */
54445
+ powerOn: boolean().nullable(),
54446
+ /** The raw power state (`On`, `Off`, `Standby`, …); null when not known. */
54447
+ powerState: string().nullable(),
54448
+ saltLevel: DishwasherConsumableLevelSchema.nullable(),
54449
+ rinseAidLevel: DishwasherConsumableLevelSchema.nullable(),
54450
+ /** Option states: null when the appliance does not expose the option or has not said. */
54451
+ halfLoad: boolean().nullable(),
54452
+ hygienePlus: boolean().nullable(),
54453
+ /** Extra dry option when the appliance exposes it. */
54454
+ extraDry: boolean().nullable(),
54455
+ /** Intensive zone (lower basket) when the appliance exposes it. */
54456
+ intensiveZone: boolean().nullable(),
54457
+ /** VarioSpeed / VarioSpeed+ when the appliance exposes it. */
54458
+ varioSpeedPlus: boolean().nullable(),
54459
+ /** Child lock (controls disabled on the appliance); null when not known. */
54460
+ childLock: boolean().nullable(),
54461
+ /** Feature keys of the events currently raised (salt low, rinse aid low, program finished, …). */
54462
+ activeEvents: array(string()),
54463
+ /** Numeric error code when the appliance reports one; null otherwise. */
54464
+ errorCode: number().nullable(),
54465
+ /** Name of the raised alert-level event while the appliance is in error; null otherwise. */
54466
+ errorLabel: string().nullable(),
54467
+ /** Ms epoch of the last value received from the appliance; 0 = never. */
54468
+ lastFetchedAt: number()
54469
+ });
54470
+ var DeviceIdSchema = number().int().nonnegative();
54471
+ /** A value a program option or setting can take. */
54472
+ var DishwasherValueSchema = union([
54473
+ boolean(),
54474
+ string(),
54475
+ number()
54476
+ ]);
54477
+ var DishwasherAccessSchema = _enum([
54478
+ "none",
54479
+ "read",
54480
+ "readWrite",
54481
+ "writeOnly",
54482
+ "readStatic"
54483
+ ]);
54484
+ /**
54485
+ * One option or setting the appliance declares, with the constraints its description
54486
+ * gives. A `readWrite` descriptor that is `available` is what `setOption` accepts.
54487
+ */
54488
+ var DishwasherOptionDescriptorSchema = object({
54489
+ /** Feature key (`Dishcare.Dishwasher.Option.ExtraDry`). */
54490
+ key: string(),
54491
+ /** Last segment of the key, for display. */
54492
+ name: string(),
54493
+ type: _enum([
54494
+ "boolean",
54495
+ "number",
54496
+ "enum",
54497
+ "string"
54498
+ ]),
54499
+ access: DishwasherAccessSchema,
54500
+ /** The appliance reports this entity as currently available. */
54501
+ available: boolean(),
54502
+ /** Unit the description declares for a number; null when it declares none. */
54503
+ unit: string().nullable(),
54504
+ min: number().nullable(),
54505
+ max: number().nullable(),
54506
+ step: number().nullable(),
54507
+ /** Allowed members of an enum; null for other types. */
54508
+ enumValues: array(string()).nullable(),
54509
+ defaultValue: DishwasherValueSchema.nullable()
54510
+ });
54511
+ var DishwasherProgramSchema = object({
54512
+ /** Feature key (`Dishcare.Dishwasher.Program.Eco50`) — what `setProgram` / `start` take. */
54513
+ key: string(),
54514
+ name: string(),
54515
+ /** The appliance currently offers this program. */
54516
+ available: boolean(),
54517
+ /** The options this program lists, with the program-level access / availability / default. */
54518
+ options: array(DishwasherOptionDescriptorSchema)
54519
+ });
54520
+ var DishwasherOptionsSchema = object({
54521
+ availability: DishwasherAvailabilitySchema,
54522
+ /** What the appliance can be told to do, from the commands its description declares. */
54523
+ supportsStart: boolean(),
54524
+ supportsPause: boolean(),
54525
+ supportsResume: boolean(),
54526
+ supportsStop: boolean(),
54527
+ supportsPower: boolean(),
54528
+ /** Every program the description lists, with its options. */
54529
+ programs: array(DishwasherProgramSchema),
54530
+ /** Every option and setting entity the description lists (programs reference these by key). */
54531
+ options: array(DishwasherOptionDescriptorSchema)
54532
+ });
54533
+ DeviceType.Dishwasher, method(object({
54534
+ deviceId: DeviceIdSchema,
54535
+ program: string().min(1).optional(),
54536
+ options: record(string(), DishwasherValueSchema).optional()
54537
+ }), _void(), {
54538
+ kind: "mutation",
54539
+ auth: "protected"
54540
+ }), method(object({ deviceId: DeviceIdSchema }), _void(), {
54541
+ kind: "mutation",
54542
+ auth: "protected"
54543
+ }), method(object({ deviceId: DeviceIdSchema }), _void(), {
54544
+ kind: "mutation",
54545
+ auth: "protected"
54546
+ }), method(object({ deviceId: DeviceIdSchema }), _void(), {
54547
+ kind: "mutation",
54548
+ auth: "protected"
54549
+ }), method(object({
54550
+ deviceId: DeviceIdSchema,
54551
+ program: string().min(1)
54552
+ }), _void(), {
54553
+ kind: "mutation",
54554
+ auth: "protected"
54555
+ }), method(object({
54556
+ deviceId: DeviceIdSchema,
54557
+ on: boolean()
54558
+ }), _void(), {
54559
+ kind: "mutation",
54560
+ auth: "protected"
54561
+ }), method(object({
54562
+ deviceId: DeviceIdSchema,
54563
+ on: boolean()
54564
+ }), _void(), {
54565
+ kind: "mutation",
54566
+ auth: "protected"
54567
+ }), method(object({
54568
+ deviceId: DeviceIdSchema,
54569
+ on: boolean()
54570
+ }), _void(), {
54571
+ kind: "mutation",
54572
+ auth: "protected"
54573
+ }), method(object({
54574
+ deviceId: DeviceIdSchema,
54575
+ on: boolean()
54576
+ }), _void(), {
54577
+ kind: "mutation",
54578
+ auth: "protected"
54579
+ }), method(object({
54580
+ deviceId: DeviceIdSchema,
54581
+ on: boolean()
54582
+ }), _void(), {
54583
+ kind: "mutation",
54584
+ auth: "protected"
54585
+ }), method(object({
54586
+ deviceId: DeviceIdSchema,
54587
+ on: boolean()
54588
+ }), _void(), {
54589
+ kind: "mutation",
54590
+ auth: "protected"
54591
+ }), method(object({
54592
+ deviceId: DeviceIdSchema,
54593
+ on: boolean()
54594
+ }), _void(), {
54595
+ kind: "mutation",
54596
+ auth: "protected"
54597
+ }), method(object({
54598
+ deviceId: DeviceIdSchema,
54599
+ key: string().min(1),
54600
+ value: DishwasherValueSchema
54601
+ }), _void(), {
54602
+ kind: "mutation",
54603
+ auth: "protected"
54604
+ }), method(object({ deviceId: DeviceIdSchema }), DishwasherOptionsSchema, { auth: "protected" });
54325
54605
  object({
54326
54606
  /** Ms epoch of the last press. null = never observed since this provider started. */
54327
54607
  lastPressedAt: number().nullable(),
@@ -54887,6 +55167,13 @@ object({
54887
55167
  lastChangedAt: number()
54888
55168
  });
54889
55169
  DeviceType.Sensor;
55170
+ object({
55171
+ /** Radiator valve opening 0 (closed) .. 100 (open). Null = not yet known. */
55172
+ position: number().min(0).max(100).nullable(),
55173
+ /** Ms epoch when the slice was last updated (push or poll). */
55174
+ lastFetchedAt: number()
55175
+ });
55176
+ DeviceType.Thermostat;
54890
55177
  object({
54891
55178
  /** Whether the humidifier is currently on. */
54892
55179
  on: boolean(),
@@ -61984,7 +62271,7 @@ var AccessoryKind = {
61984
62271
  PrivacyMask: DeviceRole.PrivacyMask
61985
62272
  };
61986
62273
  AccessoryKind.Siren, AccessoryKind.Floodlight, AccessoryKind.Spotlight, AccessoryKind.PirSensor, AccessoryKind.Chime, AccessoryKind.Autotrack, AccessoryKind.Nightvision, AccessoryKind.PrivacyMask;
61987
- DeviceType.Cover, DeviceType.Valve, DeviceType.Humidifier, DeviceType.WaterHeater, DeviceType.Camera, DeviceType.Hub, DeviceType.Switch, DeviceType.Siren, DeviceType.Light, DeviceType.Fan, DeviceType.Sensor, DeviceType.Thermostat, DeviceType.Climate, DeviceType.Button, DeviceType.EventEmitter, DeviceType.Update, DeviceType.Generic, DeviceType.Notifier, DeviceType.Script, DeviceType.Automation, DeviceType.Lock, DeviceType.MediaPlayer, DeviceType.AlarmPanel, DeviceType.Control, DeviceType.Presence, DeviceType.Weather, DeviceType.Vacuum, DeviceType.LawnMower, DeviceType.Container, DeviceType.Image, DeviceType.PetFeeder;
62274
+ DeviceType.Cover, DeviceType.Valve, DeviceType.Humidifier, DeviceType.WaterHeater, DeviceType.Camera, DeviceType.Hub, DeviceType.Switch, DeviceType.Siren, DeviceType.Light, DeviceType.Fan, DeviceType.Sensor, DeviceType.Thermostat, DeviceType.Climate, DeviceType.Button, DeviceType.EventEmitter, DeviceType.Update, DeviceType.Generic, DeviceType.Notifier, DeviceType.Script, DeviceType.Automation, DeviceType.Lock, DeviceType.MediaPlayer, DeviceType.AlarmPanel, DeviceType.Control, DeviceType.Presence, DeviceType.Weather, DeviceType.Vacuum, DeviceType.LawnMower, DeviceType.Container, DeviceType.Image, DeviceType.PetFeeder, DeviceType.Dishwasher;
61988
62275
  new Set(Object.values(DeviceType));
61989
62276
  Object.freeze({
61990
62277
  "accessories.getStatus": {
@@ -64405,6 +64692,96 @@ Object.freeze({
64405
64692
  addonId: null,
64406
64693
  access: "view"
64407
64694
  },
64695
+ "dishwasher.getOptions": {
64696
+ capName: "dishwasher",
64697
+ capScope: "device",
64698
+ addonId: null,
64699
+ access: "view"
64700
+ },
64701
+ "dishwasher.getStatus": {
64702
+ capName: "dishwasher",
64703
+ capScope: "device",
64704
+ addonId: null,
64705
+ access: "view"
64706
+ },
64707
+ "dishwasher.pause": {
64708
+ capName: "dishwasher",
64709
+ capScope: "device",
64710
+ addonId: null,
64711
+ access: "create"
64712
+ },
64713
+ "dishwasher.resume": {
64714
+ capName: "dishwasher",
64715
+ capScope: "device",
64716
+ addonId: null,
64717
+ access: "create"
64718
+ },
64719
+ "dishwasher.setChildLock": {
64720
+ capName: "dishwasher",
64721
+ capScope: "device",
64722
+ addonId: null,
64723
+ access: "create"
64724
+ },
64725
+ "dishwasher.setExtraDry": {
64726
+ capName: "dishwasher",
64727
+ capScope: "device",
64728
+ addonId: null,
64729
+ access: "create"
64730
+ },
64731
+ "dishwasher.setHalfLoad": {
64732
+ capName: "dishwasher",
64733
+ capScope: "device",
64734
+ addonId: null,
64735
+ access: "create"
64736
+ },
64737
+ "dishwasher.setHygienePlus": {
64738
+ capName: "dishwasher",
64739
+ capScope: "device",
64740
+ addonId: null,
64741
+ access: "create"
64742
+ },
64743
+ "dishwasher.setIntensiveZone": {
64744
+ capName: "dishwasher",
64745
+ capScope: "device",
64746
+ addonId: null,
64747
+ access: "create"
64748
+ },
64749
+ "dishwasher.setOption": {
64750
+ capName: "dishwasher",
64751
+ capScope: "device",
64752
+ addonId: null,
64753
+ access: "create"
64754
+ },
64755
+ "dishwasher.setPower": {
64756
+ capName: "dishwasher",
64757
+ capScope: "device",
64758
+ addonId: null,
64759
+ access: "create"
64760
+ },
64761
+ "dishwasher.setProgram": {
64762
+ capName: "dishwasher",
64763
+ capScope: "device",
64764
+ addonId: null,
64765
+ access: "create"
64766
+ },
64767
+ "dishwasher.setVarioSpeedPlus": {
64768
+ capName: "dishwasher",
64769
+ capScope: "device",
64770
+ addonId: null,
64771
+ access: "create"
64772
+ },
64773
+ "dishwasher.start": {
64774
+ capName: "dishwasher",
64775
+ capScope: "device",
64776
+ addonId: null,
64777
+ access: "create"
64778
+ },
64779
+ "dishwasher.stop": {
64780
+ capName: "dishwasher",
64781
+ capScope: "device",
64782
+ addonId: null,
64783
+ access: "create"
64784
+ },
64408
64785
  "doorbell.getStatus": {
64409
64786
  capName: "doorbell",
64410
64787
  capScope: "device",
@@ -64615,6 +64992,12 @@ Object.freeze({
64615
64992
  addonId: null,
64616
64993
  access: "view"
64617
64994
  },
64995
+ "heatingValve.getStatus": {
64996
+ capName: "heating-valve",
64997
+ capScope: "device",
64998
+ addonId: null,
64999
+ access: "view"
65000
+ },
64618
65001
  "humidifier.getStatus": {
64619
65002
  capName: "humidifier",
64620
65003
  capScope: "device",
@@ -68833,6 +69216,12 @@ Object.freeze({
68833
69216
  addonId: null,
68834
69217
  access: "view"
68835
69218
  },
69219
+ "storageMigration.moverClearance": {
69220
+ capName: "storage-migration",
69221
+ capScope: "system",
69222
+ addonId: null,
69223
+ access: "view"
69224
+ },
68836
69225
  "storageMigration.movers": {
68837
69226
  capName: "storage-migration",
68838
69227
  capScope: "system",
@@ -70202,7 +70591,7 @@ Object.freeze({
70202
70591
  access: "create"
70203
70592
  }
70204
70593
  });
70205
- DeviceType.Camera, DeviceType.Hub, DeviceType.Light, DeviceType.Siren, DeviceType.Switch, DeviceType.Sensor, DeviceType.Thermostat, DeviceType.Climate, DeviceType.Button, DeviceType.EventEmitter, DeviceType.Update, DeviceType.Generic, DeviceType.Notifier, DeviceType.Script, DeviceType.Automation, DeviceType.Lock, DeviceType.Cover, DeviceType.Valve, DeviceType.Humidifier, DeviceType.WaterHeater, DeviceType.Fan, DeviceType.MediaPlayer, DeviceType.AlarmPanel, DeviceType.Control, DeviceType.Presence, DeviceType.Weather, DeviceType.Vacuum, DeviceType.LawnMower, DeviceType.Container, DeviceType.Image, DeviceType.PetFeeder;
70594
+ DeviceType.Camera, DeviceType.Hub, DeviceType.Light, DeviceType.Siren, DeviceType.Switch, DeviceType.Sensor, DeviceType.Thermostat, DeviceType.Climate, DeviceType.Button, DeviceType.EventEmitter, DeviceType.Update, DeviceType.Generic, DeviceType.Notifier, DeviceType.Script, DeviceType.Automation, DeviceType.Lock, DeviceType.Cover, DeviceType.Valve, DeviceType.Humidifier, DeviceType.WaterHeater, DeviceType.Fan, DeviceType.MediaPlayer, DeviceType.AlarmPanel, DeviceType.Control, DeviceType.Presence, DeviceType.Weather, DeviceType.Vacuum, DeviceType.LawnMower, DeviceType.Container, DeviceType.Image, DeviceType.PetFeeder, DeviceType.Dishwasher;
70206
70595
  DeviceFeature.BatteryOperated;
70207
70596
  Object.freeze({
70208
70597
  "accessories.getStatus": [{
@@ -71026,6 +71415,81 @@ Object.freeze({
71026
71415
  form: "single",
71027
71416
  optional: false
71028
71417
  }],
71418
+ "dishwasher.getOptions": [{
71419
+ name: "deviceId",
71420
+ form: "single",
71421
+ optional: false
71422
+ }],
71423
+ "dishwasher.getStatus": [{
71424
+ name: "deviceId",
71425
+ form: "single",
71426
+ optional: false
71427
+ }],
71428
+ "dishwasher.pause": [{
71429
+ name: "deviceId",
71430
+ form: "single",
71431
+ optional: false
71432
+ }],
71433
+ "dishwasher.resume": [{
71434
+ name: "deviceId",
71435
+ form: "single",
71436
+ optional: false
71437
+ }],
71438
+ "dishwasher.setChildLock": [{
71439
+ name: "deviceId",
71440
+ form: "single",
71441
+ optional: false
71442
+ }],
71443
+ "dishwasher.setExtraDry": [{
71444
+ name: "deviceId",
71445
+ form: "single",
71446
+ optional: false
71447
+ }],
71448
+ "dishwasher.setHalfLoad": [{
71449
+ name: "deviceId",
71450
+ form: "single",
71451
+ optional: false
71452
+ }],
71453
+ "dishwasher.setHygienePlus": [{
71454
+ name: "deviceId",
71455
+ form: "single",
71456
+ optional: false
71457
+ }],
71458
+ "dishwasher.setIntensiveZone": [{
71459
+ name: "deviceId",
71460
+ form: "single",
71461
+ optional: false
71462
+ }],
71463
+ "dishwasher.setOption": [{
71464
+ name: "deviceId",
71465
+ form: "single",
71466
+ optional: false
71467
+ }],
71468
+ "dishwasher.setPower": [{
71469
+ name: "deviceId",
71470
+ form: "single",
71471
+ optional: false
71472
+ }],
71473
+ "dishwasher.setProgram": [{
71474
+ name: "deviceId",
71475
+ form: "single",
71476
+ optional: false
71477
+ }],
71478
+ "dishwasher.setVarioSpeedPlus": [{
71479
+ name: "deviceId",
71480
+ form: "single",
71481
+ optional: false
71482
+ }],
71483
+ "dishwasher.start": [{
71484
+ name: "deviceId",
71485
+ form: "single",
71486
+ optional: false
71487
+ }],
71488
+ "dishwasher.stop": [{
71489
+ name: "deviceId",
71490
+ form: "single",
71491
+ optional: false
71492
+ }],
71029
71493
  "doorbell.getStatus": [{
71030
71494
  name: "deviceId",
71031
71495
  form: "single",
@@ -71095,6 +71559,11 @@ Object.freeze({
71095
71559
  form: "single",
71096
71560
  optional: false
71097
71561
  }],
71562
+ "heatingValve.getStatus": [{
71563
+ name: "deviceId",
71564
+ form: "single",
71565
+ optional: false
71566
+ }],
71098
71567
  "humidifier.getStatus": [{
71099
71568
  name: "deviceId",
71100
71569
  form: "single",
@@ -73052,6 +73521,9 @@ new Map(Object.entries({
73052
73521
  "wrapper-update-available": "system",
73053
73522
  "backup-completed": "system",
73054
73523
  "export-completed": "system",
73524
+ "alert-critical": "system",
73525
+ "alert-error": "system",
73526
+ "alert-critical-resolved": "system",
73055
73527
  "storage-location-low": "system",
73056
73528
  "storage-location-critical": "system",
73057
73529
  "storage-location-ok": "system",
@@ -73176,6 +73648,16 @@ var NC_SYSTEM_EVENT_KIND_GROUP_SPECS = [
73176
73648
  "storage-location-ok"
73177
73649
  ]
73178
73650
  },
73651
+ {
73652
+ id: "alerts",
73653
+ family: "system",
73654
+ label: "Alerts",
73655
+ kinds: [
73656
+ "alert-critical",
73657
+ "alert-error",
73658
+ "alert-critical-resolved"
73659
+ ]
73660
+ },
73179
73661
  {
73180
73662
  id: "alarm",
73181
73663
  family: "alarm",
@@ -73220,6 +73702,21 @@ var NC_SENSOR_RAISED_FIELD_BY_KIND = Object.freeze(Object.fromEntries(Object.ent
73220
73702
  return [[descriptor.kind, field]];
73221
73703
  })));
73222
73704
  Object.freeze(Object.keys(NC_SENSOR_RAISED_FIELD_BY_KIND));
73705
+ object({
73706
+ phase: _enum(["raised", "resolved"]),
73707
+ episodeId: string().min(1),
73708
+ alertId: string().min(1),
73709
+ severity: AlertSeveritySchema,
73710
+ category: string(),
73711
+ title: string(),
73712
+ message: string(),
73713
+ sourceType: string().optional(),
73714
+ sourceId: string().optional(),
73715
+ nodeId: string().optional(),
73716
+ /** The alert's own action link (where the operator acts on it), when it has one. */
73717
+ actionUrl: string().optional(),
73718
+ at: number()
73719
+ });
73223
73720
  var RULE_BODY_ONLY = ["body"];
73224
73721
  var RULE_TEXT = ["title", "body"];
73225
73722
  var BATTERY = ["device-battery-low", "device-battery-normal"];
@@ -73229,6 +73726,11 @@ var TANK = [
73229
73726
  "device-tank-full",
73230
73727
  "device-tank-normal"
73231
73728
  ];
73729
+ var ALERT_EPISODE = [
73730
+ "alert-critical",
73731
+ "alert-error",
73732
+ "alert-critical-resolved"
73733
+ ];
73232
73734
  var UPDATES = [
73233
73735
  "addon-update-available",
73234
73736
  "server-update-available",
@@ -73421,14 +73923,14 @@ var STATE_SUMMARY_VARS = [
73421
73923
  ([...RULE_TEXT], [...CONSUMABLE]),
73422
73924
  ([...RULE_TEXT], [...TANK]),
73423
73925
  [...RULE_TEXT],
73424
- ([...RULE_TEXT], [...UPDATES]),
73425
- ([...RULE_TEXT], [...UPDATES]),
73426
- [...RULE_TEXT],
73926
+ ([...RULE_TEXT], [...UPDATES, ...ALERT_EPISODE]),
73927
+ ([...RULE_TEXT], [...UPDATES, ...ALERT_EPISODE]),
73427
73928
  [...RULE_TEXT],
73428
73929
  [...RULE_TEXT],
73429
73930
  [...RULE_TEXT],
73430
73931
  [...RULE_TEXT],
73431
73932
  [...RULE_TEXT],
73933
+ ([...RULE_TEXT], [...ALERT_EPISODE]),
73432
73934
  [...RULE_TEXT],
73433
73935
  [...RULE_TEXT],
73434
73936
  [...RULE_TEXT],
@@ -73446,7 +73948,11 @@ var STATE_SUMMARY_VARS = [
73446
73948
  [...RULE_TEXT],
73447
73949
  [...RULE_TEXT],
73448
73950
  [...RULE_TEXT],
73449
- [...RULE_TEXT],
73951
+ ([...RULE_TEXT], [...ALERT_EPISODE]),
73952
+ ([...RULE_TEXT], [...ALERT_EPISODE]),
73953
+ ([...RULE_TEXT], [...ALERT_EPISODE]),
73954
+ ([...RULE_TEXT], [...ALERT_EPISODE]),
73955
+ ([...RULE_TEXT], [...ALERT_EPISODE]),
73450
73956
  [...RULE_TEXT],
73451
73957
  [...RULE_TEXT],
73452
73958
  [...RULE_TEXT],
@@ -83335,13 +83841,20 @@ function buildAlexaOauthIntegration(publicHubUrl) {
83335
83841
  function buildAlexaSetupBlock(input) {
83336
83842
  const base = input.publicHubUrl.replace(/\/+$/, "");
83337
83843
  return {
83338
- fields: [...base ? [{
83339
- label: "Directive endpoint",
83340
- value: `${base}/addon/export-alexa/directive`
83341
- }] : [], ...input.ingressToken && input.skillMode === "custom" ? [{
83342
- label: "Ingress token (Lambda HUB_INGRESS_TOKEN) — use \"Show ingress token\" in settings",
83343
- value: maskSecretTail(input.ingressToken)
83344
- }] : []],
83844
+ fields: [
83845
+ ...base ? [{
83846
+ label: "Hub address to enter in the Alexa app",
83847
+ value: base
83848
+ }] : [],
83849
+ ...base ? [{
83850
+ label: "Directive endpoint",
83851
+ value: `${base}/addon/export-alexa/directive`
83852
+ }] : [],
83853
+ ...input.ingressToken && input.skillMode === "custom" ? [{
83854
+ label: "Ingress token (Lambda HUB_INGRESS_TOKEN) — use \"Show ingress token\" in settings",
83855
+ value: maskSecretTail(input.ingressToken)
83856
+ }] : []
83857
+ ],
83345
83858
  note: base ? "Account linking is handled by the core OAuth server. Use the hub's /api/oauth2/authorize endpoint with integration=export-alexa." : "Set the public hub URL on the settings form first — the directive endpoint URL is derived from it."
83346
83859
  };
83347
83860
  }