@camstack/addon-provider-reolink 1.2.188 → 1.2.190

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 +340 -36
  2. package/dist/addon.mjs +340 -36
  3. package/package.json +1 -1
package/dist/addon.js CHANGED
@@ -36,7 +36,7 @@ let node_os = require("node:os");
36
36
  node_os = require_chunk.__toESM(node_os, 1);
37
37
  let node_fs = require("node:fs");
38
38
  node_fs = require_chunk.__toESM(node_fs, 1);
39
- //#region ../types/dist/event-category-BvOFi6PY.mjs
39
+ //#region ../types/dist/event-category-DOl51-Ij.mjs
40
40
  var EventCategory = /* @__PURE__ */ function(EventCategory) {
41
41
  EventCategory["SystemBoot"] = "system.boot";
42
42
  EventCategory["SystemAddonsReady"] = "system.addons-ready";
@@ -115,9 +115,18 @@ var EventCategory = /* @__PURE__ */ function(EventCategory) {
115
115
  /**
116
116
  * The node's one-shot runner boot check (D877): planned runners against the
117
117
  * process service, `degraded` when any is failed, refused or missing. The
118
- * alert centre turns it into one alert and a direct critical push.
118
+ * alert centre turns it into one critical alert.
119
119
  */
120
120
  EventCategory["SystemRunnerCheck"] = "system.runner-check";
121
+ /**
122
+ * An alert EPISODE opened or closed, emitted by the alert centre for alerts
123
+ * of severity `critical` or `error` (`AlertEpisodePayload`). The alert
124
+ * centre sends no notification of its own: Notification Center turns this
125
+ * into the `alert-critical` / `alert-error` / `alert-critical-resolved`
126
+ * system-event kinds, and reconciles from the alerts store because a bus
127
+ * event may be dropped (D8, D11).
128
+ */
129
+ EventCategory["AlertEpisode"] = "alert.episode";
121
130
  EventCategory["AddonError"] = "addon.error";
122
131
  EventCategory["AddonPageReady"] = "addon.page-ready";
123
132
  EventCategory["AddonWidgetReady"] = "addon.widget-ready";
@@ -5442,7 +5451,7 @@ var ZodIssueCode = {
5442
5451
  var ZodFirstPartyTypeKind;
5443
5452
  ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
5444
5453
  //#endregion
5445
- //#region ../types/dist/sleep-BOjuyoPC.mjs
5454
+ //#region ../types/dist/sleep-BxjU_fJM.mjs
5446
5455
  /**
5447
5456
  * The audio chunk plane's byte format, and the ONE expansion from a coded
5448
5457
  * window to float samples (D455).
@@ -13823,7 +13832,14 @@ var AlertSeveritySchema = _enum([
13823
13832
  ]);
13824
13833
  var AlertActionSchema = object({
13825
13834
  label: string(),
13826
- href: string().optional()
13835
+ href: string().optional(),
13836
+ /**
13837
+ * How `href` is followed. Absent / `app`: an admin-ui route (client-side).
13838
+ * `server`: a route the HUB serves (an addon HTTP route such as an OAuth
13839
+ * start) — the browser must leave the SPA with a full navigation, because
13840
+ * the SPA has no such route and would bounce to the home page.
13841
+ */
13842
+ navigation: _enum(["app", "server"]).optional()
13827
13843
  });
13828
13844
  var AlertStatusSchema = _enum([
13829
13845
  "active",
@@ -18317,7 +18333,11 @@ var deviceDiscoveryCapability = {
18317
18333
  };
18318
18334
  /**
18319
18335
  * `device-adoption` — generic discovery + adoption surface,
18320
- * system-scoped singleton. The de-HA-ified successor to `ha-discovery`:
18336
+ * system-scoped collection (one provider per integration addon), routed
18337
+ * by explicit `{ addonId }` on direct `deviceAdoption.*` calls — the same
18338
+ * pin model as `connection-test`. The admin UI keeps using
18339
+ * `deviceManager.adoption*` (which already threads `addonId`). The de-HA-ified
18340
+ * successor to `ha-discovery`:
18321
18341
  * keyed by `integrationId` (the addon resolves integrationId → broker
18322
18342
  * internally) rather than a connection-specific `brokerId`, and it
18323
18343
  * REUSES the shared `DiscoveredChildDevice` candidate type from
@@ -42688,6 +42708,9 @@ var NcSystemEventKindSchema = _enum([
42688
42708
  "server-updated",
42689
42709
  "export-completed",
42690
42710
  "backup-completed",
42711
+ "alert-critical",
42712
+ "alert-error",
42713
+ "alert-critical-resolved",
42691
42714
  "camera-online",
42692
42715
  "camera-offline",
42693
42716
  "camera-disabled",
@@ -51868,7 +51891,10 @@ method(StorageMigrationInputSchema, StorageMigrationPlanSchema, { auth: "admin"
51868
51891
  }), method(object({ jobId: string().optional() }), StorageMigrationJobSchema.nullable(), { auth: "admin" }), method(object({ jobId: string() }), object({ cancelled: boolean() }), {
51869
51892
  kind: "mutation",
51870
51893
  auth: "admin"
51871
- }), method(object({}), array(StorageMigrationMoverSchema).readonly(), { auth: "admin" }), method(object({}), array(StorageMigrationResidueSchema).readonly(), { auth: "admin" }), method(StorageMigrationDrainInputSchema, object({ jobId: string() }), {
51894
+ }), method(object({}), array(StorageMigrationMoverSchema).readonly(), { auth: "admin" }), method(object({ locationIds: array(string()).readonly() }), object({
51895
+ clear: boolean(),
51896
+ repointLocationId: string().optional()
51897
+ }), { auth: "admin" }), method(object({}), array(StorageMigrationResidueSchema).readonly(), { auth: "admin" }), method(StorageMigrationDrainInputSchema, object({ jobId: string() }), {
51872
51898
  kind: "mutation",
51873
51899
  auth: "admin"
51874
51900
  }), method(StorageCleanupInputSchema, object({ jobId: string() }), {
@@ -56542,6 +56568,11 @@ onStatusChanged: { data: object({
56542
56568
  *
56543
56569
  * `kind: 'poll'` — cloud REST APIs typically have no push channel; the
56544
56570
  * provider refreshes the slice on an interval and eagerly after commands.
56571
+ *
56572
+ * UNKNOWN IS NOT OFF. Every field the appliance reports separately is
56573
+ * nullable: `null` means "not known right now" (the appliance has not said,
56574
+ * the link is down, or the description does not carry it) and is never
56575
+ * rendered or exported as `false` / `0`. `availability` says why.
56545
56576
  */
56546
56577
  var DishwasherStateSchema = _enum([
56547
56578
  "idle",
@@ -56551,35 +56582,155 @@ var DishwasherStateSchema = _enum([
56551
56582
  "error",
56552
56583
  "unavailable"
56553
56584
  ]);
56585
+ /**
56586
+ * The appliance's own operation state, uncollapsed. `state` above is the coarse
56587
+ * view for compact surfaces; this is what the appliance said.
56588
+ */
56589
+ var DishwasherOperationStateSchema = _enum([
56590
+ "Inactive",
56591
+ "Ready",
56592
+ "DelayedStart",
56593
+ "Run",
56594
+ "Pause",
56595
+ "ActionRequired",
56596
+ "Finished",
56597
+ "Error",
56598
+ "Aborting"
56599
+ ]);
56600
+ /**
56601
+ * Why fields may be `null`:
56602
+ * - `available` — the link is up and the description is loaded;
56603
+ * - `offline` — the local link is down (values are unknown, not last-known);
56604
+ * - `description-missing` — the link is up but the appliance's description could not
56605
+ * be loaded, so its values cannot be decoded.
56606
+ */
56607
+ var DishwasherAvailabilitySchema = _enum([
56608
+ "available",
56609
+ "offline",
56610
+ "description-missing"
56611
+ ]);
56554
56612
  var DishwasherConsumableLevelSchema = _enum([
56555
56613
  "ok",
56556
56614
  "low",
56557
56615
  "empty"
56558
56616
  ]);
56559
56617
  var DishwasherStatusSchema = object({
56618
+ availability: DishwasherAvailabilitySchema,
56619
+ /** Coarse state for compact surfaces; `unavailable` whenever the appliance state is not known. */
56560
56620
  state: DishwasherStateSchema,
56561
- /** Active program id/name, or null when none selected / unknown. */
56621
+ /** The appliance's operation state as reported; null when not known. */
56622
+ operationState: DishwasherOperationStateSchema.nullable(),
56623
+ /** Feature key of the ACTIVE (running) program, or null when none runs / not known. */
56562
56624
  program: string().nullable(),
56563
- /** Program tokens the hardware accepts — drives the UI selector. */
56625
+ /** Feature key of the SELECTED program (what Start would run), or null when none / not known. */
56626
+ selectedProgram: string().nullable(),
56627
+ /** Feature keys of the programs the appliance currently offers — drives the UI selector. */
56564
56628
  availablePrograms: array(string()),
56565
- /** Minutes remaining on the active cycle, or null when not running. */
56566
- remainingMinutes: number().int().nonnegative().nullable(),
56629
+ /** Seconds remaining on the active cycle, or null when not running / not known. */
56630
+ remainingSeconds: number().int().nonnegative().nullable(),
56631
+ /** Seconds the delayed start is set to (time until the cycle starts), or null. */
56632
+ delayedStartSeconds: number().int().nonnegative().nullable(),
56567
56633
  /** Cycle completion 0..100, or null when not applicable. */
56568
56634
  progressPercent: number().min(0).max(100).nullable(),
56569
- /** True when the door is reported open. */
56570
- doorOpen: boolean(),
56571
- /** True when remote start is allowed (door closed, power on, etc.). */
56572
- remoteStartAllowed: boolean(),
56573
- /** Main power / switched-on state. */
56574
- powerOn: boolean(),
56635
+ /** True when the door is reported open; null when the door state is not known. */
56636
+ doorOpen: boolean().nullable(),
56637
+ /** True when the door is latched (locked) during a cycle; null when not reported. */
56638
+ doorLocked: boolean().nullable(),
56639
+ /** True when remote start is allowed (door closed, power on, etc.); null when not known. */
56640
+ remoteStartAllowed: boolean().nullable(),
56641
+ /** True when the appliance accepts remote control now; null when not known. */
56642
+ remoteControlActive: boolean().nullable(),
56643
+ /** True while somebody operates the appliance at its panel; null when not reported. */
56644
+ localControlActive: boolean().nullable(),
56645
+ /** Main power / switched-on state; null when not known. */
56646
+ powerOn: boolean().nullable(),
56647
+ /** The raw power state (`On`, `Off`, `Standby`, …); null when not known. */
56648
+ powerState: string().nullable(),
56575
56649
  saltLevel: DishwasherConsumableLevelSchema.nullable(),
56576
56650
  rinseAidLevel: DishwasherConsumableLevelSchema.nullable(),
56577
- halfLoad: boolean(),
56578
- hygienePlus: boolean(),
56651
+ /** Option states: null when the appliance does not expose the option or has not said. */
56652
+ halfLoad: boolean().nullable(),
56653
+ hygienePlus: boolean().nullable(),
56654
+ /** Extra dry option when the appliance exposes it. */
56655
+ extraDry: boolean().nullable(),
56656
+ /** Intensive zone (lower basket) when the appliance exposes it. */
56657
+ intensiveZone: boolean().nullable(),
56658
+ /** VarioSpeed / VarioSpeed+ when the appliance exposes it. */
56659
+ varioSpeedPlus: boolean().nullable(),
56660
+ /** Child lock (controls disabled on the appliance); null when not known. */
56661
+ childLock: boolean().nullable(),
56662
+ /** Feature keys of the events currently raised (salt low, rinse aid low, program finished, …). */
56663
+ activeEvents: array(string()),
56664
+ /** Numeric error code when the appliance reports one; null otherwise. */
56579
56665
  errorCode: number().nullable(),
56666
+ /** Name of the raised alert-level event while the appliance is in error; null otherwise. */
56580
56667
  errorLabel: string().nullable(),
56668
+ /** Ms epoch of the last value received from the appliance; 0 = never. */
56581
56669
  lastFetchedAt: number()
56582
56670
  });
56671
+ var DeviceIdSchema = number().int().nonnegative();
56672
+ /** A value a program option or setting can take. */
56673
+ var DishwasherValueSchema = union([
56674
+ boolean(),
56675
+ string(),
56676
+ number()
56677
+ ]);
56678
+ var DishwasherAccessSchema = _enum([
56679
+ "none",
56680
+ "read",
56681
+ "readWrite",
56682
+ "writeOnly",
56683
+ "readStatic"
56684
+ ]);
56685
+ /**
56686
+ * One option or setting the appliance declares, with the constraints its description
56687
+ * gives. A `readWrite` descriptor that is `available` is what `setOption` accepts.
56688
+ */
56689
+ var DishwasherOptionDescriptorSchema = object({
56690
+ /** Feature key (`Dishcare.Dishwasher.Option.ExtraDry`). */
56691
+ key: string(),
56692
+ /** Last segment of the key, for display. */
56693
+ name: string(),
56694
+ type: _enum([
56695
+ "boolean",
56696
+ "number",
56697
+ "enum",
56698
+ "string"
56699
+ ]),
56700
+ access: DishwasherAccessSchema,
56701
+ /** The appliance reports this entity as currently available. */
56702
+ available: boolean(),
56703
+ /** Unit the description declares for a number; null when it declares none. */
56704
+ unit: string().nullable(),
56705
+ min: number().nullable(),
56706
+ max: number().nullable(),
56707
+ step: number().nullable(),
56708
+ /** Allowed members of an enum; null for other types. */
56709
+ enumValues: array(string()).nullable(),
56710
+ defaultValue: DishwasherValueSchema.nullable()
56711
+ });
56712
+ var DishwasherProgramSchema = object({
56713
+ /** Feature key (`Dishcare.Dishwasher.Program.Eco50`) — what `setProgram` / `start` take. */
56714
+ key: string(),
56715
+ name: string(),
56716
+ /** The appliance currently offers this program. */
56717
+ available: boolean(),
56718
+ /** The options this program lists, with the program-level access / availability / default. */
56719
+ options: array(DishwasherOptionDescriptorSchema)
56720
+ });
56721
+ var DishwasherOptionsSchema = object({
56722
+ availability: DishwasherAvailabilitySchema,
56723
+ /** What the appliance can be told to do, from the commands its description declares. */
56724
+ supportsStart: boolean(),
56725
+ supportsPause: boolean(),
56726
+ supportsResume: boolean(),
56727
+ supportsStop: boolean(),
56728
+ supportsPower: boolean(),
56729
+ /** Every program the description lists, with its options. */
56730
+ programs: array(DishwasherProgramSchema),
56731
+ /** Every option and setting entity the description lists (programs reference these by key). */
56732
+ options: array(DishwasherOptionDescriptorSchema)
56733
+ });
56583
56734
  var dishwasherCapability = {
56584
56735
  name: "dishwasher",
56585
56736
  scope: "device",
@@ -56587,58 +56738,102 @@ var dishwasherCapability = {
56587
56738
  mode: "singleton",
56588
56739
  deviceTypes: [DeviceType.Dishwasher],
56589
56740
  methods: {
56590
- start: method(object({ deviceId: number().int().nonnegative() }), _void(), {
56741
+ /**
56742
+ * Start a program. Without `program` the selected one starts. `options` are
56743
+ * option feature keys; each is checked against the program's constraints.
56744
+ */
56745
+ start: method(object({
56746
+ deviceId: DeviceIdSchema,
56747
+ program: string().min(1).optional(),
56748
+ options: record(string(), DishwasherValueSchema).optional()
56749
+ }), _void(), {
56591
56750
  kind: "mutation",
56592
56751
  auth: "protected"
56593
56752
  }),
56594
- pause: method(object({ deviceId: number().int().nonnegative() }), _void(), {
56753
+ pause: method(object({ deviceId: DeviceIdSchema }), _void(), {
56595
56754
  kind: "mutation",
56596
56755
  auth: "protected"
56597
56756
  }),
56598
- stop: method(object({ deviceId: number().int().nonnegative() }), _void(), {
56757
+ resume: method(object({ deviceId: DeviceIdSchema }), _void(), {
56599
56758
  kind: "mutation",
56600
56759
  auth: "protected"
56601
56760
  }),
56761
+ stop: method(object({ deviceId: DeviceIdSchema }), _void(), {
56762
+ kind: "mutation",
56763
+ auth: "protected"
56764
+ }),
56765
+ /** Select (not start) a program; refused when the appliance does not offer it. */
56602
56766
  setProgram: method(object({
56603
- deviceId: number().int().nonnegative(),
56767
+ deviceId: DeviceIdSchema,
56604
56768
  program: string().min(1)
56605
56769
  }), _void(), {
56606
56770
  kind: "mutation",
56607
56771
  auth: "protected"
56608
56772
  }),
56609
56773
  setPower: method(object({
56610
- deviceId: number().int().nonnegative(),
56774
+ deviceId: DeviceIdSchema,
56611
56775
  on: boolean()
56612
56776
  }), _void(), {
56613
56777
  kind: "mutation",
56614
56778
  auth: "protected"
56615
56779
  }),
56616
56780
  setHalfLoad: method(object({
56617
- deviceId: number().int().nonnegative(),
56781
+ deviceId: DeviceIdSchema,
56618
56782
  on: boolean()
56619
56783
  }), _void(), {
56620
56784
  kind: "mutation",
56621
56785
  auth: "protected"
56622
56786
  }),
56623
56787
  setHygienePlus: method(object({
56624
- deviceId: number().int().nonnegative(),
56788
+ deviceId: DeviceIdSchema,
56789
+ on: boolean()
56790
+ }), _void(), {
56791
+ kind: "mutation",
56792
+ auth: "protected"
56793
+ }),
56794
+ setExtraDry: method(object({
56795
+ deviceId: DeviceIdSchema,
56796
+ on: boolean()
56797
+ }), _void(), {
56798
+ kind: "mutation",
56799
+ auth: "protected"
56800
+ }),
56801
+ setIntensiveZone: method(object({
56802
+ deviceId: DeviceIdSchema,
56803
+ on: boolean()
56804
+ }), _void(), {
56805
+ kind: "mutation",
56806
+ auth: "protected"
56807
+ }),
56808
+ setVarioSpeedPlus: method(object({
56809
+ deviceId: DeviceIdSchema,
56810
+ on: boolean()
56811
+ }), _void(), {
56812
+ kind: "mutation",
56813
+ auth: "protected"
56814
+ }),
56815
+ setChildLock: method(object({
56816
+ deviceId: DeviceIdSchema,
56625
56817
  on: boolean()
56626
56818
  }), _void(), {
56627
56819
  kind: "mutation",
56628
56820
  auth: "protected"
56629
56821
  }),
56822
+ /**
56823
+ * Write any option or setting by feature key. Refused when the description does
56824
+ * not list it, it is not writable or not available now, or the value is outside
56825
+ * its declared range / members.
56826
+ */
56630
56827
  setOption: method(object({
56631
- deviceId: number().int().nonnegative(),
56828
+ deviceId: DeviceIdSchema,
56632
56829
  key: string().min(1),
56633
- value: union([
56634
- boolean(),
56635
- string(),
56636
- number()
56637
- ])
56830
+ value: DishwasherValueSchema
56638
56831
  }), _void(), {
56639
56832
  kind: "mutation",
56640
56833
  auth: "protected"
56641
- })
56834
+ }),
56835
+ /** What this appliance can do, from its own description — the UI is derived from it. */
56836
+ getOptions: method(object({ deviceId: DeviceIdSchema }), DishwasherOptionsSchema, { auth: "protected" })
56642
56837
  },
56643
56838
  status: {
56644
56839
  schema: DishwasherStatusSchema,
@@ -71172,6 +71367,12 @@ Object.freeze({
71172
71367
  addonId: null,
71173
71368
  access: "view"
71174
71369
  },
71370
+ "dishwasher.getOptions": {
71371
+ capName: "dishwasher",
71372
+ capScope: "device",
71373
+ addonId: null,
71374
+ access: "view"
71375
+ },
71175
71376
  "dishwasher.getStatus": {
71176
71377
  capName: "dishwasher",
71177
71378
  capScope: "device",
@@ -71184,6 +71385,24 @@ Object.freeze({
71184
71385
  addonId: null,
71185
71386
  access: "create"
71186
71387
  },
71388
+ "dishwasher.resume": {
71389
+ capName: "dishwasher",
71390
+ capScope: "device",
71391
+ addonId: null,
71392
+ access: "create"
71393
+ },
71394
+ "dishwasher.setChildLock": {
71395
+ capName: "dishwasher",
71396
+ capScope: "device",
71397
+ addonId: null,
71398
+ access: "create"
71399
+ },
71400
+ "dishwasher.setExtraDry": {
71401
+ capName: "dishwasher",
71402
+ capScope: "device",
71403
+ addonId: null,
71404
+ access: "create"
71405
+ },
71187
71406
  "dishwasher.setHalfLoad": {
71188
71407
  capName: "dishwasher",
71189
71408
  capScope: "device",
@@ -71196,6 +71415,12 @@ Object.freeze({
71196
71415
  addonId: null,
71197
71416
  access: "create"
71198
71417
  },
71418
+ "dishwasher.setIntensiveZone": {
71419
+ capName: "dishwasher",
71420
+ capScope: "device",
71421
+ addonId: null,
71422
+ access: "create"
71423
+ },
71199
71424
  "dishwasher.setOption": {
71200
71425
  capName: "dishwasher",
71201
71426
  capScope: "device",
@@ -71214,6 +71439,12 @@ Object.freeze({
71214
71439
  addonId: null,
71215
71440
  access: "create"
71216
71441
  },
71442
+ "dishwasher.setVarioSpeedPlus": {
71443
+ capName: "dishwasher",
71444
+ capScope: "device",
71445
+ addonId: null,
71446
+ access: "create"
71447
+ },
71217
71448
  "dishwasher.start": {
71218
71449
  capName: "dishwasher",
71219
71450
  capScope: "device",
@@ -75660,6 +75891,12 @@ Object.freeze({
75660
75891
  addonId: null,
75661
75892
  access: "view"
75662
75893
  },
75894
+ "storageMigration.moverClearance": {
75895
+ capName: "storage-migration",
75896
+ capScope: "system",
75897
+ addonId: null,
75898
+ access: "view"
75899
+ },
75663
75900
  "storageMigration.movers": {
75664
75901
  capName: "storage-migration",
75665
75902
  capScope: "system",
@@ -78005,6 +78242,11 @@ Object.freeze({
78005
78242
  form: "single",
78006
78243
  optional: false
78007
78244
  }],
78245
+ "dishwasher.getOptions": [{
78246
+ name: "deviceId",
78247
+ form: "single",
78248
+ optional: false
78249
+ }],
78008
78250
  "dishwasher.getStatus": [{
78009
78251
  name: "deviceId",
78010
78252
  form: "single",
@@ -78015,6 +78257,21 @@ Object.freeze({
78015
78257
  form: "single",
78016
78258
  optional: false
78017
78259
  }],
78260
+ "dishwasher.resume": [{
78261
+ name: "deviceId",
78262
+ form: "single",
78263
+ optional: false
78264
+ }],
78265
+ "dishwasher.setChildLock": [{
78266
+ name: "deviceId",
78267
+ form: "single",
78268
+ optional: false
78269
+ }],
78270
+ "dishwasher.setExtraDry": [{
78271
+ name: "deviceId",
78272
+ form: "single",
78273
+ optional: false
78274
+ }],
78018
78275
  "dishwasher.setHalfLoad": [{
78019
78276
  name: "deviceId",
78020
78277
  form: "single",
@@ -78025,6 +78282,11 @@ Object.freeze({
78025
78282
  form: "single",
78026
78283
  optional: false
78027
78284
  }],
78285
+ "dishwasher.setIntensiveZone": [{
78286
+ name: "deviceId",
78287
+ form: "single",
78288
+ optional: false
78289
+ }],
78028
78290
  "dishwasher.setOption": [{
78029
78291
  name: "deviceId",
78030
78292
  form: "single",
@@ -78040,6 +78302,11 @@ Object.freeze({
78040
78302
  form: "single",
78041
78303
  optional: false
78042
78304
  }],
78305
+ "dishwasher.setVarioSpeedPlus": [{
78306
+ name: "deviceId",
78307
+ form: "single",
78308
+ optional: false
78309
+ }],
78043
78310
  "dishwasher.start": [{
78044
78311
  name: "deviceId",
78045
78312
  form: "single",
@@ -80081,6 +80348,9 @@ new Map(Object.entries({
80081
80348
  "wrapper-update-available": "system",
80082
80349
  "backup-completed": "system",
80083
80350
  "export-completed": "system",
80351
+ "alert-critical": "system",
80352
+ "alert-error": "system",
80353
+ "alert-critical-resolved": "system",
80084
80354
  "storage-location-low": "system",
80085
80355
  "storage-location-critical": "system",
80086
80356
  "storage-location-ok": "system",
@@ -80205,6 +80475,16 @@ var NC_SYSTEM_EVENT_KIND_GROUP_SPECS = [
80205
80475
  "storage-location-ok"
80206
80476
  ]
80207
80477
  },
80478
+ {
80479
+ id: "alerts",
80480
+ family: "system",
80481
+ label: "Alerts",
80482
+ kinds: [
80483
+ "alert-critical",
80484
+ "alert-error",
80485
+ "alert-critical-resolved"
80486
+ ]
80487
+ },
80208
80488
  {
80209
80489
  id: "alarm",
80210
80490
  family: "alarm",
@@ -80249,6 +80529,21 @@ var NC_SENSOR_RAISED_FIELD_BY_KIND = Object.freeze(Object.fromEntries(Object.ent
80249
80529
  return [[descriptor.kind, field]];
80250
80530
  })));
80251
80531
  Object.freeze(Object.keys(NC_SENSOR_RAISED_FIELD_BY_KIND));
80532
+ object({
80533
+ phase: _enum(["raised", "resolved"]),
80534
+ episodeId: string().min(1),
80535
+ alertId: string().min(1),
80536
+ severity: AlertSeveritySchema,
80537
+ category: string(),
80538
+ title: string(),
80539
+ message: string(),
80540
+ sourceType: string().optional(),
80541
+ sourceId: string().optional(),
80542
+ nodeId: string().optional(),
80543
+ /** The alert's own action link (where the operator acts on it), when it has one. */
80544
+ actionUrl: string().optional(),
80545
+ at: number()
80546
+ });
80252
80547
  var RULE_BODY_ONLY = ["body"];
80253
80548
  var RULE_TEXT = ["title", "body"];
80254
80549
  var BATTERY = ["device-battery-low", "device-battery-normal"];
@@ -80258,6 +80553,11 @@ var TANK = [
80258
80553
  "device-tank-full",
80259
80554
  "device-tank-normal"
80260
80555
  ];
80556
+ var ALERT_EPISODE = [
80557
+ "alert-critical",
80558
+ "alert-error",
80559
+ "alert-critical-resolved"
80560
+ ];
80261
80561
  var UPDATES = [
80262
80562
  "addon-update-available",
80263
80563
  "server-update-available",
@@ -80450,14 +80750,14 @@ var STATE_SUMMARY_VARS = [
80450
80750
  ([...RULE_TEXT], [...CONSUMABLE]),
80451
80751
  ([...RULE_TEXT], [...TANK]),
80452
80752
  [...RULE_TEXT],
80453
- ([...RULE_TEXT], [...UPDATES]),
80454
- ([...RULE_TEXT], [...UPDATES]),
80455
- [...RULE_TEXT],
80753
+ ([...RULE_TEXT], [...UPDATES, ...ALERT_EPISODE]),
80754
+ ([...RULE_TEXT], [...UPDATES, ...ALERT_EPISODE]),
80456
80755
  [...RULE_TEXT],
80457
80756
  [...RULE_TEXT],
80458
80757
  [...RULE_TEXT],
80459
80758
  [...RULE_TEXT],
80460
80759
  [...RULE_TEXT],
80760
+ ([...RULE_TEXT], [...ALERT_EPISODE]),
80461
80761
  [...RULE_TEXT],
80462
80762
  [...RULE_TEXT],
80463
80763
  [...RULE_TEXT],
@@ -80475,7 +80775,11 @@ var STATE_SUMMARY_VARS = [
80475
80775
  [...RULE_TEXT],
80476
80776
  [...RULE_TEXT],
80477
80777
  [...RULE_TEXT],
80478
- [...RULE_TEXT],
80778
+ ([...RULE_TEXT], [...ALERT_EPISODE]),
80779
+ ([...RULE_TEXT], [...ALERT_EPISODE]),
80780
+ ([...RULE_TEXT], [...ALERT_EPISODE]),
80781
+ ([...RULE_TEXT], [...ALERT_EPISODE]),
80782
+ ([...RULE_TEXT], [...ALERT_EPISODE]),
80479
80783
  [...RULE_TEXT],
80480
80784
  [...RULE_TEXT],
80481
80785
  [...RULE_TEXT],
package/dist/addon.mjs CHANGED
@@ -28,7 +28,7 @@ import { URL as URL$1 } from "url";
28
28
  import { spawn as spawn$1 } from "node:child_process";
29
29
  import os, { tmpdir } from "node:os";
30
30
  import { createReadStream } from "node:fs";
31
- //#region ../types/dist/event-category-BvOFi6PY.mjs
31
+ //#region ../types/dist/event-category-DOl51-Ij.mjs
32
32
  var EventCategory = /* @__PURE__ */ function(EventCategory) {
33
33
  EventCategory["SystemBoot"] = "system.boot";
34
34
  EventCategory["SystemAddonsReady"] = "system.addons-ready";
@@ -107,9 +107,18 @@ var EventCategory = /* @__PURE__ */ function(EventCategory) {
107
107
  /**
108
108
  * The node's one-shot runner boot check (D877): planned runners against the
109
109
  * process service, `degraded` when any is failed, refused or missing. The
110
- * alert centre turns it into one alert and a direct critical push.
110
+ * alert centre turns it into one critical alert.
111
111
  */
112
112
  EventCategory["SystemRunnerCheck"] = "system.runner-check";
113
+ /**
114
+ * An alert EPISODE opened or closed, emitted by the alert centre for alerts
115
+ * of severity `critical` or `error` (`AlertEpisodePayload`). The alert
116
+ * centre sends no notification of its own: Notification Center turns this
117
+ * into the `alert-critical` / `alert-error` / `alert-critical-resolved`
118
+ * system-event kinds, and reconciles from the alerts store because a bus
119
+ * event may be dropped (D8, D11).
120
+ */
121
+ EventCategory["AlertEpisode"] = "alert.episode";
113
122
  EventCategory["AddonError"] = "addon.error";
114
123
  EventCategory["AddonPageReady"] = "addon.page-ready";
115
124
  EventCategory["AddonWidgetReady"] = "addon.widget-ready";
@@ -5434,7 +5443,7 @@ var ZodIssueCode = {
5434
5443
  var ZodFirstPartyTypeKind;
5435
5444
  ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
5436
5445
  //#endregion
5437
- //#region ../types/dist/sleep-BOjuyoPC.mjs
5446
+ //#region ../types/dist/sleep-BxjU_fJM.mjs
5438
5447
  /**
5439
5448
  * The audio chunk plane's byte format, and the ONE expansion from a coded
5440
5449
  * window to float samples (D455).
@@ -13815,7 +13824,14 @@ var AlertSeveritySchema = _enum([
13815
13824
  ]);
13816
13825
  var AlertActionSchema = object({
13817
13826
  label: string(),
13818
- href: string().optional()
13827
+ href: string().optional(),
13828
+ /**
13829
+ * How `href` is followed. Absent / `app`: an admin-ui route (client-side).
13830
+ * `server`: a route the HUB serves (an addon HTTP route such as an OAuth
13831
+ * start) — the browser must leave the SPA with a full navigation, because
13832
+ * the SPA has no such route and would bounce to the home page.
13833
+ */
13834
+ navigation: _enum(["app", "server"]).optional()
13819
13835
  });
13820
13836
  var AlertStatusSchema = _enum([
13821
13837
  "active",
@@ -18309,7 +18325,11 @@ var deviceDiscoveryCapability = {
18309
18325
  };
18310
18326
  /**
18311
18327
  * `device-adoption` — generic discovery + adoption surface,
18312
- * system-scoped singleton. The de-HA-ified successor to `ha-discovery`:
18328
+ * system-scoped collection (one provider per integration addon), routed
18329
+ * by explicit `{ addonId }` on direct `deviceAdoption.*` calls — the same
18330
+ * pin model as `connection-test`. The admin UI keeps using
18331
+ * `deviceManager.adoption*` (which already threads `addonId`). The de-HA-ified
18332
+ * successor to `ha-discovery`:
18313
18333
  * keyed by `integrationId` (the addon resolves integrationId → broker
18314
18334
  * internally) rather than a connection-specific `brokerId`, and it
18315
18335
  * REUSES the shared `DiscoveredChildDevice` candidate type from
@@ -42680,6 +42700,9 @@ var NcSystemEventKindSchema = _enum([
42680
42700
  "server-updated",
42681
42701
  "export-completed",
42682
42702
  "backup-completed",
42703
+ "alert-critical",
42704
+ "alert-error",
42705
+ "alert-critical-resolved",
42683
42706
  "camera-online",
42684
42707
  "camera-offline",
42685
42708
  "camera-disabled",
@@ -51860,7 +51883,10 @@ method(StorageMigrationInputSchema, StorageMigrationPlanSchema, { auth: "admin"
51860
51883
  }), method(object({ jobId: string().optional() }), StorageMigrationJobSchema.nullable(), { auth: "admin" }), method(object({ jobId: string() }), object({ cancelled: boolean() }), {
51861
51884
  kind: "mutation",
51862
51885
  auth: "admin"
51863
- }), method(object({}), array(StorageMigrationMoverSchema).readonly(), { auth: "admin" }), method(object({}), array(StorageMigrationResidueSchema).readonly(), { auth: "admin" }), method(StorageMigrationDrainInputSchema, object({ jobId: string() }), {
51886
+ }), method(object({}), array(StorageMigrationMoverSchema).readonly(), { auth: "admin" }), method(object({ locationIds: array(string()).readonly() }), object({
51887
+ clear: boolean(),
51888
+ repointLocationId: string().optional()
51889
+ }), { auth: "admin" }), method(object({}), array(StorageMigrationResidueSchema).readonly(), { auth: "admin" }), method(StorageMigrationDrainInputSchema, object({ jobId: string() }), {
51864
51890
  kind: "mutation",
51865
51891
  auth: "admin"
51866
51892
  }), method(StorageCleanupInputSchema, object({ jobId: string() }), {
@@ -56534,6 +56560,11 @@ onStatusChanged: { data: object({
56534
56560
  *
56535
56561
  * `kind: 'poll'` — cloud REST APIs typically have no push channel; the
56536
56562
  * provider refreshes the slice on an interval and eagerly after commands.
56563
+ *
56564
+ * UNKNOWN IS NOT OFF. Every field the appliance reports separately is
56565
+ * nullable: `null` means "not known right now" (the appliance has not said,
56566
+ * the link is down, or the description does not carry it) and is never
56567
+ * rendered or exported as `false` / `0`. `availability` says why.
56537
56568
  */
56538
56569
  var DishwasherStateSchema = _enum([
56539
56570
  "idle",
@@ -56543,35 +56574,155 @@ var DishwasherStateSchema = _enum([
56543
56574
  "error",
56544
56575
  "unavailable"
56545
56576
  ]);
56577
+ /**
56578
+ * The appliance's own operation state, uncollapsed. `state` above is the coarse
56579
+ * view for compact surfaces; this is what the appliance said.
56580
+ */
56581
+ var DishwasherOperationStateSchema = _enum([
56582
+ "Inactive",
56583
+ "Ready",
56584
+ "DelayedStart",
56585
+ "Run",
56586
+ "Pause",
56587
+ "ActionRequired",
56588
+ "Finished",
56589
+ "Error",
56590
+ "Aborting"
56591
+ ]);
56592
+ /**
56593
+ * Why fields may be `null`:
56594
+ * - `available` — the link is up and the description is loaded;
56595
+ * - `offline` — the local link is down (values are unknown, not last-known);
56596
+ * - `description-missing` — the link is up but the appliance's description could not
56597
+ * be loaded, so its values cannot be decoded.
56598
+ */
56599
+ var DishwasherAvailabilitySchema = _enum([
56600
+ "available",
56601
+ "offline",
56602
+ "description-missing"
56603
+ ]);
56546
56604
  var DishwasherConsumableLevelSchema = _enum([
56547
56605
  "ok",
56548
56606
  "low",
56549
56607
  "empty"
56550
56608
  ]);
56551
56609
  var DishwasherStatusSchema = object({
56610
+ availability: DishwasherAvailabilitySchema,
56611
+ /** Coarse state for compact surfaces; `unavailable` whenever the appliance state is not known. */
56552
56612
  state: DishwasherStateSchema,
56553
- /** Active program id/name, or null when none selected / unknown. */
56613
+ /** The appliance's operation state as reported; null when not known. */
56614
+ operationState: DishwasherOperationStateSchema.nullable(),
56615
+ /** Feature key of the ACTIVE (running) program, or null when none runs / not known. */
56554
56616
  program: string().nullable(),
56555
- /** Program tokens the hardware accepts — drives the UI selector. */
56617
+ /** Feature key of the SELECTED program (what Start would run), or null when none / not known. */
56618
+ selectedProgram: string().nullable(),
56619
+ /** Feature keys of the programs the appliance currently offers — drives the UI selector. */
56556
56620
  availablePrograms: array(string()),
56557
- /** Minutes remaining on the active cycle, or null when not running. */
56558
- remainingMinutes: number().int().nonnegative().nullable(),
56621
+ /** Seconds remaining on the active cycle, or null when not running / not known. */
56622
+ remainingSeconds: number().int().nonnegative().nullable(),
56623
+ /** Seconds the delayed start is set to (time until the cycle starts), or null. */
56624
+ delayedStartSeconds: number().int().nonnegative().nullable(),
56559
56625
  /** Cycle completion 0..100, or null when not applicable. */
56560
56626
  progressPercent: number().min(0).max(100).nullable(),
56561
- /** True when the door is reported open. */
56562
- doorOpen: boolean(),
56563
- /** True when remote start is allowed (door closed, power on, etc.). */
56564
- remoteStartAllowed: boolean(),
56565
- /** Main power / switched-on state. */
56566
- powerOn: boolean(),
56627
+ /** True when the door is reported open; null when the door state is not known. */
56628
+ doorOpen: boolean().nullable(),
56629
+ /** True when the door is latched (locked) during a cycle; null when not reported. */
56630
+ doorLocked: boolean().nullable(),
56631
+ /** True when remote start is allowed (door closed, power on, etc.); null when not known. */
56632
+ remoteStartAllowed: boolean().nullable(),
56633
+ /** True when the appliance accepts remote control now; null when not known. */
56634
+ remoteControlActive: boolean().nullable(),
56635
+ /** True while somebody operates the appliance at its panel; null when not reported. */
56636
+ localControlActive: boolean().nullable(),
56637
+ /** Main power / switched-on state; null when not known. */
56638
+ powerOn: boolean().nullable(),
56639
+ /** The raw power state (`On`, `Off`, `Standby`, …); null when not known. */
56640
+ powerState: string().nullable(),
56567
56641
  saltLevel: DishwasherConsumableLevelSchema.nullable(),
56568
56642
  rinseAidLevel: DishwasherConsumableLevelSchema.nullable(),
56569
- halfLoad: boolean(),
56570
- hygienePlus: boolean(),
56643
+ /** Option states: null when the appliance does not expose the option or has not said. */
56644
+ halfLoad: boolean().nullable(),
56645
+ hygienePlus: boolean().nullable(),
56646
+ /** Extra dry option when the appliance exposes it. */
56647
+ extraDry: boolean().nullable(),
56648
+ /** Intensive zone (lower basket) when the appliance exposes it. */
56649
+ intensiveZone: boolean().nullable(),
56650
+ /** VarioSpeed / VarioSpeed+ when the appliance exposes it. */
56651
+ varioSpeedPlus: boolean().nullable(),
56652
+ /** Child lock (controls disabled on the appliance); null when not known. */
56653
+ childLock: boolean().nullable(),
56654
+ /** Feature keys of the events currently raised (salt low, rinse aid low, program finished, …). */
56655
+ activeEvents: array(string()),
56656
+ /** Numeric error code when the appliance reports one; null otherwise. */
56571
56657
  errorCode: number().nullable(),
56658
+ /** Name of the raised alert-level event while the appliance is in error; null otherwise. */
56572
56659
  errorLabel: string().nullable(),
56660
+ /** Ms epoch of the last value received from the appliance; 0 = never. */
56573
56661
  lastFetchedAt: number()
56574
56662
  });
56663
+ var DeviceIdSchema = number().int().nonnegative();
56664
+ /** A value a program option or setting can take. */
56665
+ var DishwasherValueSchema = union([
56666
+ boolean(),
56667
+ string(),
56668
+ number()
56669
+ ]);
56670
+ var DishwasherAccessSchema = _enum([
56671
+ "none",
56672
+ "read",
56673
+ "readWrite",
56674
+ "writeOnly",
56675
+ "readStatic"
56676
+ ]);
56677
+ /**
56678
+ * One option or setting the appliance declares, with the constraints its description
56679
+ * gives. A `readWrite` descriptor that is `available` is what `setOption` accepts.
56680
+ */
56681
+ var DishwasherOptionDescriptorSchema = object({
56682
+ /** Feature key (`Dishcare.Dishwasher.Option.ExtraDry`). */
56683
+ key: string(),
56684
+ /** Last segment of the key, for display. */
56685
+ name: string(),
56686
+ type: _enum([
56687
+ "boolean",
56688
+ "number",
56689
+ "enum",
56690
+ "string"
56691
+ ]),
56692
+ access: DishwasherAccessSchema,
56693
+ /** The appliance reports this entity as currently available. */
56694
+ available: boolean(),
56695
+ /** Unit the description declares for a number; null when it declares none. */
56696
+ unit: string().nullable(),
56697
+ min: number().nullable(),
56698
+ max: number().nullable(),
56699
+ step: number().nullable(),
56700
+ /** Allowed members of an enum; null for other types. */
56701
+ enumValues: array(string()).nullable(),
56702
+ defaultValue: DishwasherValueSchema.nullable()
56703
+ });
56704
+ var DishwasherProgramSchema = object({
56705
+ /** Feature key (`Dishcare.Dishwasher.Program.Eco50`) — what `setProgram` / `start` take. */
56706
+ key: string(),
56707
+ name: string(),
56708
+ /** The appliance currently offers this program. */
56709
+ available: boolean(),
56710
+ /** The options this program lists, with the program-level access / availability / default. */
56711
+ options: array(DishwasherOptionDescriptorSchema)
56712
+ });
56713
+ var DishwasherOptionsSchema = object({
56714
+ availability: DishwasherAvailabilitySchema,
56715
+ /** What the appliance can be told to do, from the commands its description declares. */
56716
+ supportsStart: boolean(),
56717
+ supportsPause: boolean(),
56718
+ supportsResume: boolean(),
56719
+ supportsStop: boolean(),
56720
+ supportsPower: boolean(),
56721
+ /** Every program the description lists, with its options. */
56722
+ programs: array(DishwasherProgramSchema),
56723
+ /** Every option and setting entity the description lists (programs reference these by key). */
56724
+ options: array(DishwasherOptionDescriptorSchema)
56725
+ });
56575
56726
  var dishwasherCapability = {
56576
56727
  name: "dishwasher",
56577
56728
  scope: "device",
@@ -56579,58 +56730,102 @@ var dishwasherCapability = {
56579
56730
  mode: "singleton",
56580
56731
  deviceTypes: [DeviceType.Dishwasher],
56581
56732
  methods: {
56582
- start: method(object({ deviceId: number().int().nonnegative() }), _void(), {
56733
+ /**
56734
+ * Start a program. Without `program` the selected one starts. `options` are
56735
+ * option feature keys; each is checked against the program's constraints.
56736
+ */
56737
+ start: method(object({
56738
+ deviceId: DeviceIdSchema,
56739
+ program: string().min(1).optional(),
56740
+ options: record(string(), DishwasherValueSchema).optional()
56741
+ }), _void(), {
56583
56742
  kind: "mutation",
56584
56743
  auth: "protected"
56585
56744
  }),
56586
- pause: method(object({ deviceId: number().int().nonnegative() }), _void(), {
56745
+ pause: method(object({ deviceId: DeviceIdSchema }), _void(), {
56587
56746
  kind: "mutation",
56588
56747
  auth: "protected"
56589
56748
  }),
56590
- stop: method(object({ deviceId: number().int().nonnegative() }), _void(), {
56749
+ resume: method(object({ deviceId: DeviceIdSchema }), _void(), {
56591
56750
  kind: "mutation",
56592
56751
  auth: "protected"
56593
56752
  }),
56753
+ stop: method(object({ deviceId: DeviceIdSchema }), _void(), {
56754
+ kind: "mutation",
56755
+ auth: "protected"
56756
+ }),
56757
+ /** Select (not start) a program; refused when the appliance does not offer it. */
56594
56758
  setProgram: method(object({
56595
- deviceId: number().int().nonnegative(),
56759
+ deviceId: DeviceIdSchema,
56596
56760
  program: string().min(1)
56597
56761
  }), _void(), {
56598
56762
  kind: "mutation",
56599
56763
  auth: "protected"
56600
56764
  }),
56601
56765
  setPower: method(object({
56602
- deviceId: number().int().nonnegative(),
56766
+ deviceId: DeviceIdSchema,
56603
56767
  on: boolean()
56604
56768
  }), _void(), {
56605
56769
  kind: "mutation",
56606
56770
  auth: "protected"
56607
56771
  }),
56608
56772
  setHalfLoad: method(object({
56609
- deviceId: number().int().nonnegative(),
56773
+ deviceId: DeviceIdSchema,
56610
56774
  on: boolean()
56611
56775
  }), _void(), {
56612
56776
  kind: "mutation",
56613
56777
  auth: "protected"
56614
56778
  }),
56615
56779
  setHygienePlus: method(object({
56616
- deviceId: number().int().nonnegative(),
56780
+ deviceId: DeviceIdSchema,
56781
+ on: boolean()
56782
+ }), _void(), {
56783
+ kind: "mutation",
56784
+ auth: "protected"
56785
+ }),
56786
+ setExtraDry: method(object({
56787
+ deviceId: DeviceIdSchema,
56788
+ on: boolean()
56789
+ }), _void(), {
56790
+ kind: "mutation",
56791
+ auth: "protected"
56792
+ }),
56793
+ setIntensiveZone: method(object({
56794
+ deviceId: DeviceIdSchema,
56795
+ on: boolean()
56796
+ }), _void(), {
56797
+ kind: "mutation",
56798
+ auth: "protected"
56799
+ }),
56800
+ setVarioSpeedPlus: method(object({
56801
+ deviceId: DeviceIdSchema,
56802
+ on: boolean()
56803
+ }), _void(), {
56804
+ kind: "mutation",
56805
+ auth: "protected"
56806
+ }),
56807
+ setChildLock: method(object({
56808
+ deviceId: DeviceIdSchema,
56617
56809
  on: boolean()
56618
56810
  }), _void(), {
56619
56811
  kind: "mutation",
56620
56812
  auth: "protected"
56621
56813
  }),
56814
+ /**
56815
+ * Write any option or setting by feature key. Refused when the description does
56816
+ * not list it, it is not writable or not available now, or the value is outside
56817
+ * its declared range / members.
56818
+ */
56622
56819
  setOption: method(object({
56623
- deviceId: number().int().nonnegative(),
56820
+ deviceId: DeviceIdSchema,
56624
56821
  key: string().min(1),
56625
- value: union([
56626
- boolean(),
56627
- string(),
56628
- number()
56629
- ])
56822
+ value: DishwasherValueSchema
56630
56823
  }), _void(), {
56631
56824
  kind: "mutation",
56632
56825
  auth: "protected"
56633
- })
56826
+ }),
56827
+ /** What this appliance can do, from its own description — the UI is derived from it. */
56828
+ getOptions: method(object({ deviceId: DeviceIdSchema }), DishwasherOptionsSchema, { auth: "protected" })
56634
56829
  },
56635
56830
  status: {
56636
56831
  schema: DishwasherStatusSchema,
@@ -71164,6 +71359,12 @@ Object.freeze({
71164
71359
  addonId: null,
71165
71360
  access: "view"
71166
71361
  },
71362
+ "dishwasher.getOptions": {
71363
+ capName: "dishwasher",
71364
+ capScope: "device",
71365
+ addonId: null,
71366
+ access: "view"
71367
+ },
71167
71368
  "dishwasher.getStatus": {
71168
71369
  capName: "dishwasher",
71169
71370
  capScope: "device",
@@ -71176,6 +71377,24 @@ Object.freeze({
71176
71377
  addonId: null,
71177
71378
  access: "create"
71178
71379
  },
71380
+ "dishwasher.resume": {
71381
+ capName: "dishwasher",
71382
+ capScope: "device",
71383
+ addonId: null,
71384
+ access: "create"
71385
+ },
71386
+ "dishwasher.setChildLock": {
71387
+ capName: "dishwasher",
71388
+ capScope: "device",
71389
+ addonId: null,
71390
+ access: "create"
71391
+ },
71392
+ "dishwasher.setExtraDry": {
71393
+ capName: "dishwasher",
71394
+ capScope: "device",
71395
+ addonId: null,
71396
+ access: "create"
71397
+ },
71179
71398
  "dishwasher.setHalfLoad": {
71180
71399
  capName: "dishwasher",
71181
71400
  capScope: "device",
@@ -71188,6 +71407,12 @@ Object.freeze({
71188
71407
  addonId: null,
71189
71408
  access: "create"
71190
71409
  },
71410
+ "dishwasher.setIntensiveZone": {
71411
+ capName: "dishwasher",
71412
+ capScope: "device",
71413
+ addonId: null,
71414
+ access: "create"
71415
+ },
71191
71416
  "dishwasher.setOption": {
71192
71417
  capName: "dishwasher",
71193
71418
  capScope: "device",
@@ -71206,6 +71431,12 @@ Object.freeze({
71206
71431
  addonId: null,
71207
71432
  access: "create"
71208
71433
  },
71434
+ "dishwasher.setVarioSpeedPlus": {
71435
+ capName: "dishwasher",
71436
+ capScope: "device",
71437
+ addonId: null,
71438
+ access: "create"
71439
+ },
71209
71440
  "dishwasher.start": {
71210
71441
  capName: "dishwasher",
71211
71442
  capScope: "device",
@@ -75652,6 +75883,12 @@ Object.freeze({
75652
75883
  addonId: null,
75653
75884
  access: "view"
75654
75885
  },
75886
+ "storageMigration.moverClearance": {
75887
+ capName: "storage-migration",
75888
+ capScope: "system",
75889
+ addonId: null,
75890
+ access: "view"
75891
+ },
75655
75892
  "storageMigration.movers": {
75656
75893
  capName: "storage-migration",
75657
75894
  capScope: "system",
@@ -77997,6 +78234,11 @@ Object.freeze({
77997
78234
  form: "single",
77998
78235
  optional: false
77999
78236
  }],
78237
+ "dishwasher.getOptions": [{
78238
+ name: "deviceId",
78239
+ form: "single",
78240
+ optional: false
78241
+ }],
78000
78242
  "dishwasher.getStatus": [{
78001
78243
  name: "deviceId",
78002
78244
  form: "single",
@@ -78007,6 +78249,21 @@ Object.freeze({
78007
78249
  form: "single",
78008
78250
  optional: false
78009
78251
  }],
78252
+ "dishwasher.resume": [{
78253
+ name: "deviceId",
78254
+ form: "single",
78255
+ optional: false
78256
+ }],
78257
+ "dishwasher.setChildLock": [{
78258
+ name: "deviceId",
78259
+ form: "single",
78260
+ optional: false
78261
+ }],
78262
+ "dishwasher.setExtraDry": [{
78263
+ name: "deviceId",
78264
+ form: "single",
78265
+ optional: false
78266
+ }],
78010
78267
  "dishwasher.setHalfLoad": [{
78011
78268
  name: "deviceId",
78012
78269
  form: "single",
@@ -78017,6 +78274,11 @@ Object.freeze({
78017
78274
  form: "single",
78018
78275
  optional: false
78019
78276
  }],
78277
+ "dishwasher.setIntensiveZone": [{
78278
+ name: "deviceId",
78279
+ form: "single",
78280
+ optional: false
78281
+ }],
78020
78282
  "dishwasher.setOption": [{
78021
78283
  name: "deviceId",
78022
78284
  form: "single",
@@ -78032,6 +78294,11 @@ Object.freeze({
78032
78294
  form: "single",
78033
78295
  optional: false
78034
78296
  }],
78297
+ "dishwasher.setVarioSpeedPlus": [{
78298
+ name: "deviceId",
78299
+ form: "single",
78300
+ optional: false
78301
+ }],
78035
78302
  "dishwasher.start": [{
78036
78303
  name: "deviceId",
78037
78304
  form: "single",
@@ -80073,6 +80340,9 @@ new Map(Object.entries({
80073
80340
  "wrapper-update-available": "system",
80074
80341
  "backup-completed": "system",
80075
80342
  "export-completed": "system",
80343
+ "alert-critical": "system",
80344
+ "alert-error": "system",
80345
+ "alert-critical-resolved": "system",
80076
80346
  "storage-location-low": "system",
80077
80347
  "storage-location-critical": "system",
80078
80348
  "storage-location-ok": "system",
@@ -80197,6 +80467,16 @@ var NC_SYSTEM_EVENT_KIND_GROUP_SPECS = [
80197
80467
  "storage-location-ok"
80198
80468
  ]
80199
80469
  },
80470
+ {
80471
+ id: "alerts",
80472
+ family: "system",
80473
+ label: "Alerts",
80474
+ kinds: [
80475
+ "alert-critical",
80476
+ "alert-error",
80477
+ "alert-critical-resolved"
80478
+ ]
80479
+ },
80200
80480
  {
80201
80481
  id: "alarm",
80202
80482
  family: "alarm",
@@ -80241,6 +80521,21 @@ var NC_SENSOR_RAISED_FIELD_BY_KIND = Object.freeze(Object.fromEntries(Object.ent
80241
80521
  return [[descriptor.kind, field]];
80242
80522
  })));
80243
80523
  Object.freeze(Object.keys(NC_SENSOR_RAISED_FIELD_BY_KIND));
80524
+ object({
80525
+ phase: _enum(["raised", "resolved"]),
80526
+ episodeId: string().min(1),
80527
+ alertId: string().min(1),
80528
+ severity: AlertSeveritySchema,
80529
+ category: string(),
80530
+ title: string(),
80531
+ message: string(),
80532
+ sourceType: string().optional(),
80533
+ sourceId: string().optional(),
80534
+ nodeId: string().optional(),
80535
+ /** The alert's own action link (where the operator acts on it), when it has one. */
80536
+ actionUrl: string().optional(),
80537
+ at: number()
80538
+ });
80244
80539
  var RULE_BODY_ONLY = ["body"];
80245
80540
  var RULE_TEXT = ["title", "body"];
80246
80541
  var BATTERY = ["device-battery-low", "device-battery-normal"];
@@ -80250,6 +80545,11 @@ var TANK = [
80250
80545
  "device-tank-full",
80251
80546
  "device-tank-normal"
80252
80547
  ];
80548
+ var ALERT_EPISODE = [
80549
+ "alert-critical",
80550
+ "alert-error",
80551
+ "alert-critical-resolved"
80552
+ ];
80253
80553
  var UPDATES = [
80254
80554
  "addon-update-available",
80255
80555
  "server-update-available",
@@ -80442,14 +80742,14 @@ var STATE_SUMMARY_VARS = [
80442
80742
  ([...RULE_TEXT], [...CONSUMABLE]),
80443
80743
  ([...RULE_TEXT], [...TANK]),
80444
80744
  [...RULE_TEXT],
80445
- ([...RULE_TEXT], [...UPDATES]),
80446
- ([...RULE_TEXT], [...UPDATES]),
80447
- [...RULE_TEXT],
80745
+ ([...RULE_TEXT], [...UPDATES, ...ALERT_EPISODE]),
80746
+ ([...RULE_TEXT], [...UPDATES, ...ALERT_EPISODE]),
80448
80747
  [...RULE_TEXT],
80449
80748
  [...RULE_TEXT],
80450
80749
  [...RULE_TEXT],
80451
80750
  [...RULE_TEXT],
80452
80751
  [...RULE_TEXT],
80752
+ ([...RULE_TEXT], [...ALERT_EPISODE]),
80453
80753
  [...RULE_TEXT],
80454
80754
  [...RULE_TEXT],
80455
80755
  [...RULE_TEXT],
@@ -80467,7 +80767,11 @@ var STATE_SUMMARY_VARS = [
80467
80767
  [...RULE_TEXT],
80468
80768
  [...RULE_TEXT],
80469
80769
  [...RULE_TEXT],
80470
- [...RULE_TEXT],
80770
+ ([...RULE_TEXT], [...ALERT_EPISODE]),
80771
+ ([...RULE_TEXT], [...ALERT_EPISODE]),
80772
+ ([...RULE_TEXT], [...ALERT_EPISODE]),
80773
+ ([...RULE_TEXT], [...ALERT_EPISODE]),
80774
+ ([...RULE_TEXT], [...ALERT_EPISODE]),
80471
80775
  [...RULE_TEXT],
80472
80776
  [...RULE_TEXT],
80473
80777
  [...RULE_TEXT],
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camstack/addon-provider-reolink",
3
- "version": "1.2.188",
3
+ "version": "1.2.190",
4
4
  "description": "Reolink camera device provider addon for CamStack — native Baichuan protocol",
5
5
  "keywords": [
6
6
  "camstack",