@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.
@@ -5,7 +5,7 @@ import "node:fs";
5
5
  import "node:path";
6
6
  import "node:child_process";
7
7
  import "node:zlib";
8
- //#region ../types/dist/event-category-BvOFi6PY.mjs
8
+ //#region ../types/dist/event-category-DOl51-Ij.mjs
9
9
  var EventCategory = /* @__PURE__ */ function(EventCategory) {
10
10
  EventCategory["SystemBoot"] = "system.boot";
11
11
  EventCategory["SystemAddonsReady"] = "system.addons-ready";
@@ -84,9 +84,18 @@ var EventCategory = /* @__PURE__ */ function(EventCategory) {
84
84
  /**
85
85
  * The node's one-shot runner boot check (D877): planned runners against the
86
86
  * process service, `degraded` when any is failed, refused or missing. The
87
- * alert centre turns it into one alert and a direct critical push.
87
+ * alert centre turns it into one critical alert.
88
88
  */
89
89
  EventCategory["SystemRunnerCheck"] = "system.runner-check";
90
+ /**
91
+ * An alert EPISODE opened or closed, emitted by the alert centre for alerts
92
+ * of severity `critical` or `error` (`AlertEpisodePayload`). The alert
93
+ * centre sends no notification of its own: Notification Center turns this
94
+ * into the `alert-critical` / `alert-error` / `alert-critical-resolved`
95
+ * system-event kinds, and reconciles from the alerts store because a bus
96
+ * event may be dropped (D8, D11).
97
+ */
98
+ EventCategory["AlertEpisode"] = "alert.episode";
90
99
  EventCategory["AddonError"] = "addon.error";
91
100
  EventCategory["AddonPageReady"] = "addon.page-ready";
92
101
  EventCategory["AddonWidgetReady"] = "addon.widget-ready";
@@ -5411,7 +5420,7 @@ var ZodIssueCode = {
5411
5420
  var ZodFirstPartyTypeKind;
5412
5421
  ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
5413
5422
  //#endregion
5414
- //#region ../types/dist/sleep-bZIhUvjd.mjs
5423
+ //#region ../types/dist/sleep-BxjU_fJM.mjs
5415
5424
  /**
5416
5425
  * The audio chunk plane's byte format, and the ONE expansion from a coded
5417
5426
  * window to float samples (D455).
@@ -8381,7 +8390,7 @@ object({
8381
8390
  params: record(string(), union([string(), number()])).optional()
8382
8391
  });
8383
8392
  //#endregion
8384
- //#region ../types/dist/err-msg--2RrYiLO.mjs
8393
+ //#region ../types/dist/err-msg-BXKzRBwg.mjs
8385
8394
  var DeviceType = /* @__PURE__ */ function(DeviceType) {
8386
8395
  DeviceType["Camera"] = "camera";
8387
8396
  DeviceType["Hub"] = "hub";
@@ -8473,6 +8482,10 @@ var DeviceType = /* @__PURE__ */ function(DeviceType) {
8473
8482
  * native PetKit (`nodepetkit` `FeederDevice`), reusable by other feeder
8474
8483
  * integrations sharing the same food/desiccant/hopper surface. */
8475
8484
  DeviceType["PetFeeder"] = "pet-feeder";
8485
+ /** Built-in dishwasher — program lifecycle, door / remote-start gates,
8486
+ * salt and rinse-aid levels. Installed with the `dishwasher` cap.
8487
+ * Sources: native Bosch Home Connect, reusable by similar integrations. */
8488
+ DeviceType["Dishwasher"] = "dishwasher";
8476
8489
  return DeviceType;
8477
8490
  }({});
8478
8491
  var DeviceFeature = /* @__PURE__ */ function(DeviceFeature) {
@@ -8730,7 +8743,7 @@ function errMsg(err) {
8730
8743
  return String(err);
8731
8744
  }
8732
8745
  //#endregion
8733
- //#region ../types/dist/composition-DOwQB_Ua.mjs
8746
+ //#region ../types/dist/composition-CB6PMT9p.mjs
8734
8747
  /**
8735
8748
  * The ffmpeg build every CamStack node downloads, per platform and arch.
8736
8749
  *
@@ -13399,8 +13412,20 @@ var AlertSeveritySchema = _enum([
13399
13412
  "info",
13400
13413
  "success",
13401
13414
  "warning",
13402
- "error"
13415
+ "error",
13416
+ "critical"
13403
13417
  ]);
13418
+ var AlertActionSchema = object({
13419
+ label: string(),
13420
+ href: string().optional(),
13421
+ /**
13422
+ * How `href` is followed. Absent / `app`: an admin-ui route (client-side).
13423
+ * `server`: a route the HUB serves (an addon HTTP route such as an OAuth
13424
+ * start) — the browser must leave the SPA with a full navigation, because
13425
+ * the SPA has no such route and would bounce to the home page.
13426
+ */
13427
+ navigation: _enum(["app", "server"]).optional()
13428
+ });
13404
13429
  var AlertStatusSchema = _enum([
13405
13430
  "active",
13406
13431
  "in-progress",
@@ -13418,6 +13443,7 @@ var AlertSchema = object({
13418
13443
  severity: AlertSeveritySchema,
13419
13444
  title: string(),
13420
13445
  message: string(),
13446
+ action: AlertActionSchema.optional(),
13421
13447
  status: AlertStatusSchema,
13422
13448
  progress: number().optional(),
13423
13449
  read: boolean(),
@@ -17562,7 +17588,11 @@ DeviceType.Hub, DeviceDiscoveryStatusSchema.extend({ lastFetchedAt: number().int
17562
17588
  });
17563
17589
  /**
17564
17590
  * `device-adoption` — generic discovery + adoption surface,
17565
- * system-scoped singleton. The de-HA-ified successor to `ha-discovery`:
17591
+ * system-scoped collection (one provider per integration addon), routed
17592
+ * by explicit `{ addonId }` on direct `deviceAdoption.*` calls — the same
17593
+ * pin model as `connection-test`. The admin UI keeps using
17594
+ * `deviceManager.adoption*` (which already threads `addonId`). The de-HA-ified
17595
+ * successor to `ha-discovery`:
17566
17596
  * keyed by `integrationId` (the addon resolves integrationId → broker
17567
17597
  * internally) rather than a connection-specific `brokerId`, and it
17568
17598
  * REUSES the shared `DiscoveredChildDevice` candidate type from
@@ -41795,6 +41825,9 @@ var NcSystemEventKindSchema = _enum([
41795
41825
  "server-updated",
41796
41826
  "export-completed",
41797
41827
  "backup-completed",
41828
+ "alert-critical",
41829
+ "alert-error",
41830
+ "alert-critical-resolved",
41798
41831
  "camera-online",
41799
41832
  "camera-offline",
41800
41833
  "camera-disabled",
@@ -50843,7 +50876,10 @@ method(StorageMigrationInputSchema, StorageMigrationPlanSchema, { auth: "admin"
50843
50876
  }), method(object({ jobId: string().optional() }), StorageMigrationJobSchema.nullable(), { auth: "admin" }), method(object({ jobId: string() }), object({ cancelled: boolean() }), {
50844
50877
  kind: "mutation",
50845
50878
  auth: "admin"
50846
- }), method(object({}), array(StorageMigrationMoverSchema).readonly(), { auth: "admin" }), method(object({}), array(StorageMigrationResidueSchema).readonly(), { auth: "admin" }), method(StorageMigrationDrainInputSchema, object({ jobId: string() }), {
50879
+ }), method(object({}), array(StorageMigrationMoverSchema).readonly(), { auth: "admin" }), method(object({ locationIds: array(string()).readonly() }), object({
50880
+ clear: boolean(),
50881
+ repointLocationId: string().optional()
50882
+ }), { auth: "admin" }), method(object({}), array(StorageMigrationResidueSchema).readonly(), { auth: "admin" }), method(StorageMigrationDrainInputSchema, object({ jobId: string() }), {
50847
50883
  kind: "mutation",
50848
50884
  auth: "admin"
50849
50885
  }), method(StorageCleanupInputSchema, object({ jobId: string() }), {
@@ -53393,7 +53429,7 @@ var BatteryStatusSchema = object({
53393
53429
  */
53394
53430
  binary: boolean().optional()
53395
53431
  });
53396
- DeviceType.Camera, DeviceType.Sensor, DeviceType.Button, DeviceType.Switch, DeviceType.PetFeeder, DeviceType.Container, method(object({
53432
+ DeviceType.Camera, DeviceType.Sensor, DeviceType.Button, DeviceType.Switch, DeviceType.PetFeeder, DeviceType.Container, DeviceType.Thermostat, method(object({
53397
53433
  deviceId: number(),
53398
53434
  /** Bound on the wait. Sensible range 3000–10000ms. */
53399
53435
  timeoutMs: number().int().min(500).max(3e4).default(8e3)
@@ -54293,6 +54329,250 @@ object({
54293
54329
  deviceId: number(),
54294
54330
  status: DeviceStatusSchema
54295
54331
  });
54332
+ /**
54333
+ * Smart-dishwasher cap — program lifecycle, door / remote-start gates,
54334
+ * consumable levels (salt, rinse aid) and common program options.
54335
+ *
54336
+ * Sources: native Bosch Home Connect (`dishwasher` device type). Reusable
54337
+ * by any integration that exposes the same program / option surface.
54338
+ *
54339
+ * `kind: 'poll'` — cloud REST APIs typically have no push channel; the
54340
+ * provider refreshes the slice on an interval and eagerly after commands.
54341
+ *
54342
+ * UNKNOWN IS NOT OFF. Every field the appliance reports separately is
54343
+ * nullable: `null` means "not known right now" (the appliance has not said,
54344
+ * the link is down, or the description does not carry it) and is never
54345
+ * rendered or exported as `false` / `0`. `availability` says why.
54346
+ */
54347
+ var DishwasherStateSchema = _enum([
54348
+ "idle",
54349
+ "running",
54350
+ "paused",
54351
+ "finished",
54352
+ "error",
54353
+ "unavailable"
54354
+ ]);
54355
+ /**
54356
+ * The appliance's own operation state, uncollapsed. `state` above is the coarse
54357
+ * view for compact surfaces; this is what the appliance said.
54358
+ */
54359
+ var DishwasherOperationStateSchema = _enum([
54360
+ "Inactive",
54361
+ "Ready",
54362
+ "DelayedStart",
54363
+ "Run",
54364
+ "Pause",
54365
+ "ActionRequired",
54366
+ "Finished",
54367
+ "Error",
54368
+ "Aborting"
54369
+ ]);
54370
+ /**
54371
+ * Why fields may be `null`:
54372
+ * - `available` — the link is up and the description is loaded;
54373
+ * - `offline` — the local link is down (values are unknown, not last-known);
54374
+ * - `description-missing` — the link is up but the appliance's description could not
54375
+ * be loaded, so its values cannot be decoded.
54376
+ */
54377
+ var DishwasherAvailabilitySchema = _enum([
54378
+ "available",
54379
+ "offline",
54380
+ "description-missing"
54381
+ ]);
54382
+ var DishwasherConsumableLevelSchema = _enum([
54383
+ "ok",
54384
+ "low",
54385
+ "empty"
54386
+ ]);
54387
+ object({
54388
+ availability: DishwasherAvailabilitySchema,
54389
+ /** Coarse state for compact surfaces; `unavailable` whenever the appliance state is not known. */
54390
+ state: DishwasherStateSchema,
54391
+ /** The appliance's operation state as reported; null when not known. */
54392
+ operationState: DishwasherOperationStateSchema.nullable(),
54393
+ /** Feature key of the ACTIVE (running) program, or null when none runs / not known. */
54394
+ program: string().nullable(),
54395
+ /** Feature key of the SELECTED program (what Start would run), or null when none / not known. */
54396
+ selectedProgram: string().nullable(),
54397
+ /** Feature keys of the programs the appliance currently offers — drives the UI selector. */
54398
+ availablePrograms: array(string()),
54399
+ /** Seconds remaining on the active cycle, or null when not running / not known. */
54400
+ remainingSeconds: number().int().nonnegative().nullable(),
54401
+ /** Seconds the delayed start is set to (time until the cycle starts), or null. */
54402
+ delayedStartSeconds: number().int().nonnegative().nullable(),
54403
+ /** Cycle completion 0..100, or null when not applicable. */
54404
+ progressPercent: number().min(0).max(100).nullable(),
54405
+ /** True when the door is reported open; null when the door state is not known. */
54406
+ doorOpen: boolean().nullable(),
54407
+ /** True when the door is latched (locked) during a cycle; null when not reported. */
54408
+ doorLocked: boolean().nullable(),
54409
+ /** True when remote start is allowed (door closed, power on, etc.); null when not known. */
54410
+ remoteStartAllowed: boolean().nullable(),
54411
+ /** True when the appliance accepts remote control now; null when not known. */
54412
+ remoteControlActive: boolean().nullable(),
54413
+ /** True while somebody operates the appliance at its panel; null when not reported. */
54414
+ localControlActive: boolean().nullable(),
54415
+ /** Main power / switched-on state; null when not known. */
54416
+ powerOn: boolean().nullable(),
54417
+ /** The raw power state (`On`, `Off`, `Standby`, …); null when not known. */
54418
+ powerState: string().nullable(),
54419
+ saltLevel: DishwasherConsumableLevelSchema.nullable(),
54420
+ rinseAidLevel: DishwasherConsumableLevelSchema.nullable(),
54421
+ /** Option states: null when the appliance does not expose the option or has not said. */
54422
+ halfLoad: boolean().nullable(),
54423
+ hygienePlus: boolean().nullable(),
54424
+ /** Extra dry option when the appliance exposes it. */
54425
+ extraDry: boolean().nullable(),
54426
+ /** Intensive zone (lower basket) when the appliance exposes it. */
54427
+ intensiveZone: boolean().nullable(),
54428
+ /** VarioSpeed / VarioSpeed+ when the appliance exposes it. */
54429
+ varioSpeedPlus: boolean().nullable(),
54430
+ /** Child lock (controls disabled on the appliance); null when not known. */
54431
+ childLock: boolean().nullable(),
54432
+ /** Feature keys of the events currently raised (salt low, rinse aid low, program finished, …). */
54433
+ activeEvents: array(string()),
54434
+ /** Numeric error code when the appliance reports one; null otherwise. */
54435
+ errorCode: number().nullable(),
54436
+ /** Name of the raised alert-level event while the appliance is in error; null otherwise. */
54437
+ errorLabel: string().nullable(),
54438
+ /** Ms epoch of the last value received from the appliance; 0 = never. */
54439
+ lastFetchedAt: number()
54440
+ });
54441
+ var DeviceIdSchema = number().int().nonnegative();
54442
+ /** A value a program option or setting can take. */
54443
+ var DishwasherValueSchema = union([
54444
+ boolean(),
54445
+ string(),
54446
+ number()
54447
+ ]);
54448
+ var DishwasherAccessSchema = _enum([
54449
+ "none",
54450
+ "read",
54451
+ "readWrite",
54452
+ "writeOnly",
54453
+ "readStatic"
54454
+ ]);
54455
+ /**
54456
+ * One option or setting the appliance declares, with the constraints its description
54457
+ * gives. A `readWrite` descriptor that is `available` is what `setOption` accepts.
54458
+ */
54459
+ var DishwasherOptionDescriptorSchema = object({
54460
+ /** Feature key (`Dishcare.Dishwasher.Option.ExtraDry`). */
54461
+ key: string(),
54462
+ /** Last segment of the key, for display. */
54463
+ name: string(),
54464
+ type: _enum([
54465
+ "boolean",
54466
+ "number",
54467
+ "enum",
54468
+ "string"
54469
+ ]),
54470
+ access: DishwasherAccessSchema,
54471
+ /** The appliance reports this entity as currently available. */
54472
+ available: boolean(),
54473
+ /** Unit the description declares for a number; null when it declares none. */
54474
+ unit: string().nullable(),
54475
+ min: number().nullable(),
54476
+ max: number().nullable(),
54477
+ step: number().nullable(),
54478
+ /** Allowed members of an enum; null for other types. */
54479
+ enumValues: array(string()).nullable(),
54480
+ defaultValue: DishwasherValueSchema.nullable()
54481
+ });
54482
+ var DishwasherProgramSchema = object({
54483
+ /** Feature key (`Dishcare.Dishwasher.Program.Eco50`) — what `setProgram` / `start` take. */
54484
+ key: string(),
54485
+ name: string(),
54486
+ /** The appliance currently offers this program. */
54487
+ available: boolean(),
54488
+ /** The options this program lists, with the program-level access / availability / default. */
54489
+ options: array(DishwasherOptionDescriptorSchema)
54490
+ });
54491
+ var DishwasherOptionsSchema = object({
54492
+ availability: DishwasherAvailabilitySchema,
54493
+ /** What the appliance can be told to do, from the commands its description declares. */
54494
+ supportsStart: boolean(),
54495
+ supportsPause: boolean(),
54496
+ supportsResume: boolean(),
54497
+ supportsStop: boolean(),
54498
+ supportsPower: boolean(),
54499
+ /** Every program the description lists, with its options. */
54500
+ programs: array(DishwasherProgramSchema),
54501
+ /** Every option and setting entity the description lists (programs reference these by key). */
54502
+ options: array(DishwasherOptionDescriptorSchema)
54503
+ });
54504
+ DeviceType.Dishwasher, method(object({
54505
+ deviceId: DeviceIdSchema,
54506
+ program: string().min(1).optional(),
54507
+ options: record(string(), DishwasherValueSchema).optional()
54508
+ }), _void(), {
54509
+ kind: "mutation",
54510
+ auth: "protected"
54511
+ }), method(object({ deviceId: DeviceIdSchema }), _void(), {
54512
+ kind: "mutation",
54513
+ auth: "protected"
54514
+ }), method(object({ deviceId: DeviceIdSchema }), _void(), {
54515
+ kind: "mutation",
54516
+ auth: "protected"
54517
+ }), method(object({ deviceId: DeviceIdSchema }), _void(), {
54518
+ kind: "mutation",
54519
+ auth: "protected"
54520
+ }), method(object({
54521
+ deviceId: DeviceIdSchema,
54522
+ program: string().min(1)
54523
+ }), _void(), {
54524
+ kind: "mutation",
54525
+ auth: "protected"
54526
+ }), method(object({
54527
+ deviceId: DeviceIdSchema,
54528
+ on: boolean()
54529
+ }), _void(), {
54530
+ kind: "mutation",
54531
+ auth: "protected"
54532
+ }), method(object({
54533
+ deviceId: DeviceIdSchema,
54534
+ on: boolean()
54535
+ }), _void(), {
54536
+ kind: "mutation",
54537
+ auth: "protected"
54538
+ }), method(object({
54539
+ deviceId: DeviceIdSchema,
54540
+ on: boolean()
54541
+ }), _void(), {
54542
+ kind: "mutation",
54543
+ auth: "protected"
54544
+ }), method(object({
54545
+ deviceId: DeviceIdSchema,
54546
+ on: boolean()
54547
+ }), _void(), {
54548
+ kind: "mutation",
54549
+ auth: "protected"
54550
+ }), method(object({
54551
+ deviceId: DeviceIdSchema,
54552
+ on: boolean()
54553
+ }), _void(), {
54554
+ kind: "mutation",
54555
+ auth: "protected"
54556
+ }), method(object({
54557
+ deviceId: DeviceIdSchema,
54558
+ on: boolean()
54559
+ }), _void(), {
54560
+ kind: "mutation",
54561
+ auth: "protected"
54562
+ }), method(object({
54563
+ deviceId: DeviceIdSchema,
54564
+ on: boolean()
54565
+ }), _void(), {
54566
+ kind: "mutation",
54567
+ auth: "protected"
54568
+ }), method(object({
54569
+ deviceId: DeviceIdSchema,
54570
+ key: string().min(1),
54571
+ value: DishwasherValueSchema
54572
+ }), _void(), {
54573
+ kind: "mutation",
54574
+ auth: "protected"
54575
+ }), method(object({ deviceId: DeviceIdSchema }), DishwasherOptionsSchema, { auth: "protected" });
54296
54576
  object({
54297
54577
  /** Ms epoch of the last press. null = never observed since this provider started. */
54298
54578
  lastPressedAt: number().nullable(),
@@ -54858,6 +55138,13 @@ object({
54858
55138
  lastChangedAt: number()
54859
55139
  });
54860
55140
  DeviceType.Sensor;
55141
+ object({
55142
+ /** Radiator valve opening 0 (closed) .. 100 (open). Null = not yet known. */
55143
+ position: number().min(0).max(100).nullable(),
55144
+ /** Ms epoch when the slice was last updated (push or poll). */
55145
+ lastFetchedAt: number()
55146
+ });
55147
+ DeviceType.Thermostat;
54861
55148
  object({
54862
55149
  /** Whether the humidifier is currently on. */
54863
55150
  on: boolean(),
@@ -61955,7 +62242,7 @@ var AccessoryKind = {
61955
62242
  PrivacyMask: DeviceRole.PrivacyMask
61956
62243
  };
61957
62244
  AccessoryKind.Siren, AccessoryKind.Floodlight, AccessoryKind.Spotlight, AccessoryKind.PirSensor, AccessoryKind.Chime, AccessoryKind.Autotrack, AccessoryKind.Nightvision, AccessoryKind.PrivacyMask;
61958
- 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;
62245
+ 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;
61959
62246
  new Set(Object.values(DeviceType));
61960
62247
  Object.freeze({
61961
62248
  "accessories.getStatus": {
@@ -64376,6 +64663,96 @@ Object.freeze({
64376
64663
  addonId: null,
64377
64664
  access: "view"
64378
64665
  },
64666
+ "dishwasher.getOptions": {
64667
+ capName: "dishwasher",
64668
+ capScope: "device",
64669
+ addonId: null,
64670
+ access: "view"
64671
+ },
64672
+ "dishwasher.getStatus": {
64673
+ capName: "dishwasher",
64674
+ capScope: "device",
64675
+ addonId: null,
64676
+ access: "view"
64677
+ },
64678
+ "dishwasher.pause": {
64679
+ capName: "dishwasher",
64680
+ capScope: "device",
64681
+ addonId: null,
64682
+ access: "create"
64683
+ },
64684
+ "dishwasher.resume": {
64685
+ capName: "dishwasher",
64686
+ capScope: "device",
64687
+ addonId: null,
64688
+ access: "create"
64689
+ },
64690
+ "dishwasher.setChildLock": {
64691
+ capName: "dishwasher",
64692
+ capScope: "device",
64693
+ addonId: null,
64694
+ access: "create"
64695
+ },
64696
+ "dishwasher.setExtraDry": {
64697
+ capName: "dishwasher",
64698
+ capScope: "device",
64699
+ addonId: null,
64700
+ access: "create"
64701
+ },
64702
+ "dishwasher.setHalfLoad": {
64703
+ capName: "dishwasher",
64704
+ capScope: "device",
64705
+ addonId: null,
64706
+ access: "create"
64707
+ },
64708
+ "dishwasher.setHygienePlus": {
64709
+ capName: "dishwasher",
64710
+ capScope: "device",
64711
+ addonId: null,
64712
+ access: "create"
64713
+ },
64714
+ "dishwasher.setIntensiveZone": {
64715
+ capName: "dishwasher",
64716
+ capScope: "device",
64717
+ addonId: null,
64718
+ access: "create"
64719
+ },
64720
+ "dishwasher.setOption": {
64721
+ capName: "dishwasher",
64722
+ capScope: "device",
64723
+ addonId: null,
64724
+ access: "create"
64725
+ },
64726
+ "dishwasher.setPower": {
64727
+ capName: "dishwasher",
64728
+ capScope: "device",
64729
+ addonId: null,
64730
+ access: "create"
64731
+ },
64732
+ "dishwasher.setProgram": {
64733
+ capName: "dishwasher",
64734
+ capScope: "device",
64735
+ addonId: null,
64736
+ access: "create"
64737
+ },
64738
+ "dishwasher.setVarioSpeedPlus": {
64739
+ capName: "dishwasher",
64740
+ capScope: "device",
64741
+ addonId: null,
64742
+ access: "create"
64743
+ },
64744
+ "dishwasher.start": {
64745
+ capName: "dishwasher",
64746
+ capScope: "device",
64747
+ addonId: null,
64748
+ access: "create"
64749
+ },
64750
+ "dishwasher.stop": {
64751
+ capName: "dishwasher",
64752
+ capScope: "device",
64753
+ addonId: null,
64754
+ access: "create"
64755
+ },
64379
64756
  "doorbell.getStatus": {
64380
64757
  capName: "doorbell",
64381
64758
  capScope: "device",
@@ -64586,6 +64963,12 @@ Object.freeze({
64586
64963
  addonId: null,
64587
64964
  access: "view"
64588
64965
  },
64966
+ "heatingValve.getStatus": {
64967
+ capName: "heating-valve",
64968
+ capScope: "device",
64969
+ addonId: null,
64970
+ access: "view"
64971
+ },
64589
64972
  "humidifier.getStatus": {
64590
64973
  capName: "humidifier",
64591
64974
  capScope: "device",
@@ -68804,6 +69187,12 @@ Object.freeze({
68804
69187
  addonId: null,
68805
69188
  access: "view"
68806
69189
  },
69190
+ "storageMigration.moverClearance": {
69191
+ capName: "storage-migration",
69192
+ capScope: "system",
69193
+ addonId: null,
69194
+ access: "view"
69195
+ },
68807
69196
  "storageMigration.movers": {
68808
69197
  capName: "storage-migration",
68809
69198
  capScope: "system",
@@ -70173,7 +70562,7 @@ Object.freeze({
70173
70562
  access: "create"
70174
70563
  }
70175
70564
  });
70176
- 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;
70565
+ 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;
70177
70566
  DeviceFeature.BatteryOperated;
70178
70567
  Object.freeze({
70179
70568
  "accessories.getStatus": [{
@@ -70997,6 +71386,81 @@ Object.freeze({
70997
71386
  form: "single",
70998
71387
  optional: false
70999
71388
  }],
71389
+ "dishwasher.getOptions": [{
71390
+ name: "deviceId",
71391
+ form: "single",
71392
+ optional: false
71393
+ }],
71394
+ "dishwasher.getStatus": [{
71395
+ name: "deviceId",
71396
+ form: "single",
71397
+ optional: false
71398
+ }],
71399
+ "dishwasher.pause": [{
71400
+ name: "deviceId",
71401
+ form: "single",
71402
+ optional: false
71403
+ }],
71404
+ "dishwasher.resume": [{
71405
+ name: "deviceId",
71406
+ form: "single",
71407
+ optional: false
71408
+ }],
71409
+ "dishwasher.setChildLock": [{
71410
+ name: "deviceId",
71411
+ form: "single",
71412
+ optional: false
71413
+ }],
71414
+ "dishwasher.setExtraDry": [{
71415
+ name: "deviceId",
71416
+ form: "single",
71417
+ optional: false
71418
+ }],
71419
+ "dishwasher.setHalfLoad": [{
71420
+ name: "deviceId",
71421
+ form: "single",
71422
+ optional: false
71423
+ }],
71424
+ "dishwasher.setHygienePlus": [{
71425
+ name: "deviceId",
71426
+ form: "single",
71427
+ optional: false
71428
+ }],
71429
+ "dishwasher.setIntensiveZone": [{
71430
+ name: "deviceId",
71431
+ form: "single",
71432
+ optional: false
71433
+ }],
71434
+ "dishwasher.setOption": [{
71435
+ name: "deviceId",
71436
+ form: "single",
71437
+ optional: false
71438
+ }],
71439
+ "dishwasher.setPower": [{
71440
+ name: "deviceId",
71441
+ form: "single",
71442
+ optional: false
71443
+ }],
71444
+ "dishwasher.setProgram": [{
71445
+ name: "deviceId",
71446
+ form: "single",
71447
+ optional: false
71448
+ }],
71449
+ "dishwasher.setVarioSpeedPlus": [{
71450
+ name: "deviceId",
71451
+ form: "single",
71452
+ optional: false
71453
+ }],
71454
+ "dishwasher.start": [{
71455
+ name: "deviceId",
71456
+ form: "single",
71457
+ optional: false
71458
+ }],
71459
+ "dishwasher.stop": [{
71460
+ name: "deviceId",
71461
+ form: "single",
71462
+ optional: false
71463
+ }],
71000
71464
  "doorbell.getStatus": [{
71001
71465
  name: "deviceId",
71002
71466
  form: "single",
@@ -71066,6 +71530,11 @@ Object.freeze({
71066
71530
  form: "single",
71067
71531
  optional: false
71068
71532
  }],
71533
+ "heatingValve.getStatus": [{
71534
+ name: "deviceId",
71535
+ form: "single",
71536
+ optional: false
71537
+ }],
71069
71538
  "humidifier.getStatus": [{
71070
71539
  name: "deviceId",
71071
71540
  form: "single",
@@ -73023,6 +73492,9 @@ new Map(Object.entries({
73023
73492
  "wrapper-update-available": "system",
73024
73493
  "backup-completed": "system",
73025
73494
  "export-completed": "system",
73495
+ "alert-critical": "system",
73496
+ "alert-error": "system",
73497
+ "alert-critical-resolved": "system",
73026
73498
  "storage-location-low": "system",
73027
73499
  "storage-location-critical": "system",
73028
73500
  "storage-location-ok": "system",
@@ -73147,6 +73619,16 @@ var NC_SYSTEM_EVENT_KIND_GROUP_SPECS = [
73147
73619
  "storage-location-ok"
73148
73620
  ]
73149
73621
  },
73622
+ {
73623
+ id: "alerts",
73624
+ family: "system",
73625
+ label: "Alerts",
73626
+ kinds: [
73627
+ "alert-critical",
73628
+ "alert-error",
73629
+ "alert-critical-resolved"
73630
+ ]
73631
+ },
73150
73632
  {
73151
73633
  id: "alarm",
73152
73634
  family: "alarm",
@@ -73191,6 +73673,21 @@ var NC_SENSOR_RAISED_FIELD_BY_KIND = Object.freeze(Object.fromEntries(Object.ent
73191
73673
  return [[descriptor.kind, field]];
73192
73674
  })));
73193
73675
  Object.freeze(Object.keys(NC_SENSOR_RAISED_FIELD_BY_KIND));
73676
+ object({
73677
+ phase: _enum(["raised", "resolved"]),
73678
+ episodeId: string().min(1),
73679
+ alertId: string().min(1),
73680
+ severity: AlertSeveritySchema,
73681
+ category: string(),
73682
+ title: string(),
73683
+ message: string(),
73684
+ sourceType: string().optional(),
73685
+ sourceId: string().optional(),
73686
+ nodeId: string().optional(),
73687
+ /** The alert's own action link (where the operator acts on it), when it has one. */
73688
+ actionUrl: string().optional(),
73689
+ at: number()
73690
+ });
73194
73691
  var RULE_BODY_ONLY = ["body"];
73195
73692
  var RULE_TEXT = ["title", "body"];
73196
73693
  var BATTERY = ["device-battery-low", "device-battery-normal"];
@@ -73200,6 +73697,11 @@ var TANK = [
73200
73697
  "device-tank-full",
73201
73698
  "device-tank-normal"
73202
73699
  ];
73700
+ var ALERT_EPISODE = [
73701
+ "alert-critical",
73702
+ "alert-error",
73703
+ "alert-critical-resolved"
73704
+ ];
73203
73705
  var UPDATES = [
73204
73706
  "addon-update-available",
73205
73707
  "server-update-available",
@@ -73392,14 +73894,14 @@ var STATE_SUMMARY_VARS = [
73392
73894
  ([...RULE_TEXT], [...CONSUMABLE]),
73393
73895
  ([...RULE_TEXT], [...TANK]),
73394
73896
  [...RULE_TEXT],
73395
- ([...RULE_TEXT], [...UPDATES]),
73396
- ([...RULE_TEXT], [...UPDATES]),
73397
- [...RULE_TEXT],
73897
+ ([...RULE_TEXT], [...UPDATES, ...ALERT_EPISODE]),
73898
+ ([...RULE_TEXT], [...UPDATES, ...ALERT_EPISODE]),
73398
73899
  [...RULE_TEXT],
73399
73900
  [...RULE_TEXT],
73400
73901
  [...RULE_TEXT],
73401
73902
  [...RULE_TEXT],
73402
73903
  [...RULE_TEXT],
73904
+ ([...RULE_TEXT], [...ALERT_EPISODE]),
73403
73905
  [...RULE_TEXT],
73404
73906
  [...RULE_TEXT],
73405
73907
  [...RULE_TEXT],
@@ -73417,7 +73919,11 @@ var STATE_SUMMARY_VARS = [
73417
73919
  [...RULE_TEXT],
73418
73920
  [...RULE_TEXT],
73419
73921
  [...RULE_TEXT],
73420
- [...RULE_TEXT],
73922
+ ([...RULE_TEXT], [...ALERT_EPISODE]),
73923
+ ([...RULE_TEXT], [...ALERT_EPISODE]),
73924
+ ([...RULE_TEXT], [...ALERT_EPISODE]),
73925
+ ([...RULE_TEXT], [...ALERT_EPISODE]),
73926
+ ([...RULE_TEXT], [...ALERT_EPISODE]),
73421
73927
  [...RULE_TEXT],
73422
73928
  [...RULE_TEXT],
73423
73929
  [...RULE_TEXT],
@@ -83306,13 +83812,20 @@ function buildAlexaOauthIntegration(publicHubUrl) {
83306
83812
  function buildAlexaSetupBlock(input) {
83307
83813
  const base = input.publicHubUrl.replace(/\/+$/, "");
83308
83814
  return {
83309
- fields: [...base ? [{
83310
- label: "Directive endpoint",
83311
- value: `${base}/addon/export-alexa/directive`
83312
- }] : [], ...input.ingressToken && input.skillMode === "custom" ? [{
83313
- label: "Ingress token (Lambda HUB_INGRESS_TOKEN) — use \"Show ingress token\" in settings",
83314
- value: maskSecretTail(input.ingressToken)
83315
- }] : []],
83815
+ fields: [
83816
+ ...base ? [{
83817
+ label: "Hub address to enter in the Alexa app",
83818
+ value: base
83819
+ }] : [],
83820
+ ...base ? [{
83821
+ label: "Directive endpoint",
83822
+ value: `${base}/addon/export-alexa/directive`
83823
+ }] : [],
83824
+ ...input.ingressToken && input.skillMode === "custom" ? [{
83825
+ label: "Ingress token (Lambda HUB_INGRESS_TOKEN) — use \"Show ingress token\" in settings",
83826
+ value: maskSecretTail(input.ingressToken)
83827
+ }] : []
83828
+ ],
83316
83829
  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."
83317
83830
  };
83318
83831
  }