@camstack/addon-model-studio 1.1.268 → 1.1.270

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 (19) hide show
  1. package/dist/{MotionZonesSettings-Bbrx9VW1.mjs → MotionZonesSettings-DzJf18cG.mjs} +2 -2
  2. package/dist/{PrivacyMaskSettings-Bc3Nh1vj.mjs → PrivacyMaskSettings-BfcxIzcV.mjs} +4 -4
  3. package/dist/{SceneMonitorEditor-DoqQ-nbD.mjs → SceneMonitorEditor-CXZ7rmkI.mjs} +3 -3
  4. package/dist/_stub.js +4956 -4393
  5. package/dist/{_virtual_mf-localSharedImportMap___mfe_internal__addon_model_studio_page-BalgjE7Q.mjs → _virtual_mf-localSharedImportMap___mfe_internal__addon_model_studio_page-02gJTlkt.mjs} +4 -4
  6. package/dist/_virtual_mf___mfe_internal__addon_model_studio_page__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-BpItLART.mjs +26 -0
  7. package/dist/addon-model-studio.css +1 -1
  8. package/dist/{hostInit-BxoVlAJO.mjs → hostInit-CLORa_rj.mjs} +3 -3
  9. package/dist/model-studio.addon.js +268 -27
  10. package/dist/model-studio.addon.mjs +268 -27
  11. package/dist/{player-overlays-DqOjIJBM.mjs → player-overlays-mDdhIu2Z.mjs} +1 -1
  12. package/dist/remoteEntry.js +1 -1
  13. package/dist/{responsive-DMQNbXa7.mjs → responsive-BDYhKoco.mjs} +1 -1
  14. package/dist/{scene-monitor-copy-D7Oz3W2_.mjs → scene-monitor-copy-CqHEekjf.mjs} +1 -1
  15. package/dist/{square-cSGFDS5x.mjs → square-Br-2YTir.mjs} +1 -1
  16. package/dist/{trash-2-8LnhGolp.mjs → trash-2-Dyh-Oss-.mjs} +1 -1
  17. package/dist/{virtual_mf-REMOTE_ENTRY_ID___mfe_internal__addon_model_studio_page__remoteEntry_js-BbWnFACc.mjs → virtual_mf-REMOTE_ENTRY_ID___mfe_internal__addon_model_studio_page__remoteEntry_js-CfBTbbuC.mjs} +1 -1
  18. package/package.json +1 -1
  19. package/dist/_virtual_mf___mfe_internal__addon_model_studio_page__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-D4LoTU4p.mjs +0 -26
@@ -36,7 +36,7 @@ async function r() {
36
36
  }
37
37
  },
38
38
  "@camstack/types": {
39
- version: "1.2.380",
39
+ version: "1.2.382",
40
40
  scope: "default",
41
41
  shareConfig: {
42
42
  singleton: !0,
@@ -45,7 +45,7 @@ async function r() {
45
45
  }
46
46
  },
47
47
  "@camstack/sdk": {
48
- version: "1.2.132",
48
+ version: "1.2.133",
49
49
  scope: "default",
50
50
  shareConfig: {
51
51
  singleton: !0,
@@ -81,7 +81,7 @@ async function r() {
81
81
  }
82
82
  },
83
83
  "@camstack/ui-library": {
84
- version: "1.2.298",
84
+ version: "1.2.300",
85
85
  scope: "default",
86
86
  shareConfig: {
87
87
  singleton: !0,
@@ -5800,7 +5800,7 @@ var ZodIssueCode = {
5800
5800
  var ZodFirstPartyTypeKind;
5801
5801
  ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
5802
5802
  //#endregion
5803
- //#region ../types/dist/sleep-WsrozGDL.mjs
5803
+ //#region ../types/dist/sleep-BOjuyoPC.mjs
5804
5804
  /**
5805
5805
  * The audio chunk plane's byte format, and the ONE expansion from a coded
5806
5806
  * window to float samples (D455).
@@ -5917,7 +5917,7 @@ function isKeychainStoredField(field) {
5917
5917
  var SECRET_CLEAR = { $secretClear: true };
5918
5918
  /** The `'***'` token D634 redaction writes for non-admins. */
5919
5919
  var LEGACY_DEVICE_REDACTION = "***";
5920
- function isRecord$4(value) {
5920
+ function isRecord$5(value) {
5921
5921
  return typeof value === "object" && value !== null && !Array.isArray(value);
5922
5922
  }
5923
5923
  function makeSecretMarker(ref) {
@@ -5928,12 +5928,12 @@ function makeSecretMarker(ref) {
5928
5928
  }
5929
5929
  /** A stored marker: an object whose `$secret` is a non-empty string. */
5930
5930
  function isSecretMarker(value) {
5931
- if (!isRecord$4(value)) return false;
5931
+ if (!isRecord$5(value)) return false;
5932
5932
  const ref = value["$secret"];
5933
5933
  return typeof ref === "string" && ref.length > 0;
5934
5934
  }
5935
5935
  function isSecretClear(value) {
5936
- return isRecord$4(value) && value["$secretClear"] === true;
5936
+ return isRecord$5(value) && value["$secretClear"] === true;
5937
5937
  }
5938
5938
  /**
5939
5939
  * The UI view of a stored secret field value: a marker becomes "set", inline
@@ -6543,7 +6543,7 @@ var KeychainWriteRefusedError = class extends Error {
6543
6543
  }
6544
6544
  };
6545
6545
  var KEEP = { kind: "keep" };
6546
- function isRecord$3(value) {
6546
+ function isRecord$4(value) {
6547
6547
  return typeof value === "object" && value !== null && !Array.isArray(value);
6548
6548
  }
6549
6549
  function defaultMintId() {
@@ -6556,7 +6556,7 @@ function collectSecretMarkerRefs(value, out = []) {
6556
6556
  return out;
6557
6557
  }
6558
6558
  if (Array.isArray(value)) for (const item of value) collectSecretMarkerRefs(item, out);
6559
- else if (isRecord$3(value)) for (const child of Object.values(value)) collectSecretMarkerRefs(child, out);
6559
+ else if (isRecord$4(value)) for (const child of Object.values(value)) collectSecretMarkerRefs(child, out);
6560
6560
  return out;
6561
6561
  }
6562
6562
  async function storedValueEquals(secrets, marker, candidate) {
@@ -6611,7 +6611,7 @@ function rowId(row, idKey) {
6611
6611
  return null;
6612
6612
  }
6613
6613
  async function writeArray(ctx, node, incoming, stored, fieldPath) {
6614
- const storedRows = Array.isArray(stored) ? stored.filter(isRecord$3) : [];
6614
+ const storedRows = Array.isArray(stored) ? stored.filter(isRecord$4) : [];
6615
6615
  if (!Array.isArray(incoming)) {
6616
6616
  ctx.deletes.push(...collectSecretMarkerRefs(storedRows));
6617
6617
  return {
@@ -6627,7 +6627,7 @@ async function writeArray(ctx, node, incoming, stored, fieldPath) {
6627
6627
  const kept = /* @__PURE__ */ new Set();
6628
6628
  const rows = [];
6629
6629
  for (const row of incoming) {
6630
- if (!isRecord$3(row)) {
6630
+ if (!isRecord$4(row)) {
6631
6631
  rows.push(row);
6632
6632
  continue;
6633
6633
  }
@@ -6652,7 +6652,7 @@ async function writeNode(ctx, node, incoming, stored, fieldPath) {
6652
6652
  case "leaf": return writeLeaf(ctx, incoming, stored, fieldPath);
6653
6653
  case "array": return writeArray(ctx, node, incoming, stored, fieldPath);
6654
6654
  case "object": {
6655
- if (!isRecord$3(incoming)) {
6655
+ if (!isRecord$4(incoming)) {
6656
6656
  if (incoming === void 0) return KEEP;
6657
6657
  ctx.deletes.push(...collectSecretMarkerRefs(stored));
6658
6658
  return {
@@ -6660,7 +6660,7 @@ async function writeNode(ctx, node, incoming, stored, fieldPath) {
6660
6660
  value: incoming
6661
6661
  };
6662
6662
  }
6663
- const storedObj = isRecord$3(stored) ? stored : {};
6663
+ const storedObj = isRecord$4(stored) ? stored : {};
6664
6664
  return {
6665
6665
  kind: "value",
6666
6666
  value: await writeMembers(ctx, node.children, incoming, storedObj, (m) => `${fieldPath}.${m}`)
@@ -6783,7 +6783,7 @@ async function resolveSecretMarkers(value, secrets, options = {}) {
6783
6783
  value: items
6784
6784
  };
6785
6785
  }
6786
- if (isRecord$3(v)) {
6786
+ if (isRecord$4(v)) {
6787
6787
  const out = {};
6788
6788
  for (const [k, child] of Object.entries(v)) {
6789
6789
  const s = substitute(child);
@@ -6815,7 +6815,7 @@ var SecretOverwriteRefusedError = class extends Error {
6815
6815
  this.name = "SecretOverwriteRefusedError";
6816
6816
  }
6817
6817
  };
6818
- function isRecord$2(value) {
6818
+ function isRecord$3(value) {
6819
6819
  return typeof value === "object" && value !== null && !Array.isArray(value);
6820
6820
  }
6821
6821
  function resolvedValue(pass, marker) {
@@ -6844,7 +6844,7 @@ function inArray(pass, incoming, stored) {
6844
6844
  return incoming.map((item, index) => {
6845
6845
  const twin = stored[index];
6846
6846
  if (isSecretMarker(twin)) return typeof item === "string" && item === resolvedValue(pass, twin) ? twin : item;
6847
- if (isRecord$2(item) && isRecord$2(twin)) return inArrayRow(pass, item, twin);
6847
+ if (isRecord$3(item) && isRecord$3(twin)) return inArrayRow(pass, item, twin);
6848
6848
  if (Array.isArray(item) && Array.isArray(twin)) return inArray(pass, item, twin);
6849
6849
  return item;
6850
6850
  });
@@ -6855,7 +6855,7 @@ function inArrayRow(pass, incoming, stored) {
6855
6855
  const twin = stored[key];
6856
6856
  if (isSecretMarker(twin)) {
6857
6857
  if (typeof value === "string" && value === resolvedValue(pass, twin)) out[key] = twin;
6858
- } else if (isRecord$2(value) && isRecord$2(twin)) out[key] = inArrayRow(pass, value, twin);
6858
+ } else if (isRecord$3(value) && isRecord$3(twin)) out[key] = inArrayRow(pass, value, twin);
6859
6859
  else if (Array.isArray(value) && Array.isArray(twin)) out[key] = inArray(pass, value, twin);
6860
6860
  }
6861
6861
  return out;
@@ -6863,7 +6863,7 @@ function inArrayRow(pass, incoming, stored) {
6863
6863
  async function walk(pass, incoming, stored) {
6864
6864
  if (isSecretMarker(stored)) return atMarker(pass, incoming, stored);
6865
6865
  if (Array.isArray(incoming) && Array.isArray(stored)) return inArray(pass, incoming, stored);
6866
- if (!isRecord$2(incoming) || !isRecord$2(stored)) return incoming;
6866
+ if (!isRecord$3(incoming) || !isRecord$3(stored)) return incoming;
6867
6867
  const out = { ...incoming };
6868
6868
  for (const [key, value] of Object.entries(incoming)) out[key] = await walk(pass, value, stored[key]);
6869
6869
  return out;
@@ -6894,7 +6894,7 @@ async function restoreUnchangedSecrets(input) {
6894
6894
  function isJsonEqual(a, b) {
6895
6895
  if (Object.is(a, b)) return true;
6896
6896
  if (Array.isArray(a)) return Array.isArray(b) && a.length === b.length && a.every((v, i) => isJsonEqual(v, b[i]));
6897
- if (isRecord$2(a) && isRecord$2(b)) {
6897
+ if (isRecord$3(a) && isRecord$3(b)) {
6898
6898
  const keys = Object.keys(a);
6899
6899
  if (keys.length !== Object.keys(b).length) return false;
6900
6900
  return keys.every((k) => Object.prototype.hasOwnProperty.call(b, k) && isJsonEqual(a[k], b[k]));
@@ -6918,7 +6918,7 @@ function markerKeysOf(blob, owner) {
6918
6918
  }
6919
6919
  function nodeFromStored(value, owner) {
6920
6920
  if (isSecretMarker(value)) return isSecretRefOwnedBy(value.$secret, owner) ? { kind: "leaf" } : null;
6921
- if (!isRecord$2(value)) return null;
6921
+ if (!isRecord$3(value)) return null;
6922
6922
  const children = /* @__PURE__ */ new Map();
6923
6923
  for (const [key, child] of Object.entries(value)) {
6924
6924
  const node = nodeFromStored(child, owner);
@@ -7706,7 +7706,7 @@ var BaseAddon = class {
7706
7706
  if (!ctx) return;
7707
7707
  const addonId = ctx.id;
7708
7708
  setImmediate(() => {
7709
- ctx.api.addons?.restartAddon?.mutate({ addonId }).then(() => {
7709
+ ctx.api.addons.restartAddon.mutate({ addonId }).then(() => {
7710
7710
  ctx.logger.info("addon auto-restart triggered by restart-required setting change", { meta: { changedFields: patchKeys.filter((k) => restartKeys.has(k)) } });
7711
7711
  }).catch((err) => {
7712
7712
  ctx.logger.error("addon auto-restart failed", { meta: { error: err instanceof Error ? err.message : String(err) } });
@@ -8829,7 +8829,7 @@ object({
8829
8829
  params: record(string(), union([string(), number()])).optional()
8830
8830
  });
8831
8831
  //#endregion
8832
- //#region ../types/dist/err-msg--2RrYiLO.mjs
8832
+ //#region ../types/dist/err-msg-BXKzRBwg.mjs
8833
8833
  var DeviceType = /* @__PURE__ */ function(DeviceType) {
8834
8834
  DeviceType["Camera"] = "camera";
8835
8835
  DeviceType["Hub"] = "hub";
@@ -8921,6 +8921,10 @@ var DeviceType = /* @__PURE__ */ function(DeviceType) {
8921
8921
  * native PetKit (`nodepetkit` `FeederDevice`), reusable by other feeder
8922
8922
  * integrations sharing the same food/desiccant/hopper surface. */
8923
8923
  DeviceType["PetFeeder"] = "pet-feeder";
8924
+ /** Built-in dishwasher — program lifecycle, door / remote-start gates,
8925
+ * salt and rinse-aid levels. Installed with the `dishwasher` cap.
8926
+ * Sources: native Bosch Home Connect, reusable by similar integrations. */
8927
+ DeviceType["Dishwasher"] = "dishwasher";
8924
8928
  return DeviceType;
8925
8929
  }({});
8926
8930
  var DeviceFeature = /* @__PURE__ */ function(DeviceFeature) {
@@ -9168,7 +9172,7 @@ var DeviceRole = /* @__PURE__ */ function(DeviceRole) {
9168
9172
  return DeviceRole;
9169
9173
  }({});
9170
9174
  //#endregion
9171
- //#region ../types/dist/composition-DOwQB_Ua.mjs
9175
+ //#region ../types/dist/composition-CB6PMT9p.mjs
9172
9176
  /**
9173
9177
  * The ffmpeg build every CamStack node downloads, per platform and arch.
9174
9178
  *
@@ -13710,8 +13714,13 @@ var AlertSeveritySchema = _enum([
13710
13714
  "info",
13711
13715
  "success",
13712
13716
  "warning",
13713
- "error"
13717
+ "error",
13718
+ "critical"
13714
13719
  ]);
13720
+ var AlertActionSchema = object({
13721
+ label: string(),
13722
+ href: string().optional()
13723
+ });
13715
13724
  var AlertStatusSchema = _enum([
13716
13725
  "active",
13717
13726
  "in-progress",
@@ -13729,6 +13738,7 @@ var AlertSchema = object({
13729
13738
  severity: AlertSeveritySchema,
13730
13739
  title: string(),
13731
13740
  message: string(),
13741
+ action: AlertActionSchema.optional(),
13732
13742
  status: AlertStatusSchema,
13733
13743
  progress: number().optional(),
13734
13744
  read: boolean(),
@@ -16981,13 +16991,23 @@ method(object({ ownerPrefix: string().min(1).optional() }), object({ tables: arr
16981
16991
  }), RecordQueryResultSchema, { auth: "admin" }), method(object({
16982
16992
  owner: string().min(1),
16983
16993
  kind: RecordKindNameSchema,
16984
- records: array(RecordInputSchema).min(1).max(RECORD_BATCH_MAX),
16994
+ records: array(RecordInputSchema).max(RECORD_BATCH_MAX),
16985
16995
  /** The LAST batch: the copy is complete, the boot guard stops asking. */
16986
16996
  complete: boolean().optional()
16987
- }), object({ adopted: number().int() }), {
16997
+ }).refine((input) => input.records.length > 0 || input.complete === true, { message: "records must be non-empty unless complete is true" }), object({ adopted: number().int() }), {
16988
16998
  kind: "mutation",
16989
16999
  auth: "admin"
16990
- });
17000
+ }), method(object({
17001
+ collection: string().min(1),
17002
+ cursor: string().optional(),
17003
+ limit: number().int().min(1).max(1e3).optional()
17004
+ }), object({
17005
+ rows: array(object({
17006
+ id: string(),
17007
+ data: record(string(), unknown())
17008
+ })),
17009
+ nextCursor: string().nullable()
17010
+ }), { auth: "admin" }), method(object({ collection: string().min(1) }), object({ adopted: boolean() }), { auth: "admin" });
16991
17011
  /**
16992
17012
  * record-entries - the ONE admin surface for every list of user-created entries
16993
17013
  * (D881): notification targets, brokers, LLM profiles, anything an addon
@@ -53687,7 +53707,7 @@ var BatteryStatusSchema = object({
53687
53707
  */
53688
53708
  binary: boolean().optional()
53689
53709
  });
53690
- DeviceType.Camera, DeviceType.Sensor, DeviceType.Button, DeviceType.Switch, DeviceType.PetFeeder, DeviceType.Container, method(object({
53710
+ DeviceType.Camera, DeviceType.Sensor, DeviceType.Button, DeviceType.Switch, DeviceType.PetFeeder, DeviceType.Container, DeviceType.Thermostat, method(object({
53691
53711
  deviceId: number(),
53692
53712
  /** Bound on the wait. Sensible range 3000–10000ms. */
53693
53713
  timeoutMs: number().int().min(500).max(3e4).default(8e3)
@@ -54563,6 +54583,98 @@ object({
54563
54583
  deviceId: number(),
54564
54584
  status: DeviceStatusSchema
54565
54585
  });
54586
+ /**
54587
+ * Smart-dishwasher cap — program lifecycle, door / remote-start gates,
54588
+ * consumable levels (salt, rinse aid) and common program options.
54589
+ *
54590
+ * Sources: native Bosch Home Connect (`dishwasher` device type). Reusable
54591
+ * by any integration that exposes the same program / option surface.
54592
+ *
54593
+ * `kind: 'poll'` — cloud REST APIs typically have no push channel; the
54594
+ * provider refreshes the slice on an interval and eagerly after commands.
54595
+ */
54596
+ var DishwasherStateSchema = _enum([
54597
+ "idle",
54598
+ "running",
54599
+ "paused",
54600
+ "finished",
54601
+ "error",
54602
+ "unavailable"
54603
+ ]);
54604
+ var DishwasherConsumableLevelSchema = _enum([
54605
+ "ok",
54606
+ "low",
54607
+ "empty"
54608
+ ]);
54609
+ object({
54610
+ state: DishwasherStateSchema,
54611
+ /** Active program id/name, or null when none selected / unknown. */
54612
+ program: string().nullable(),
54613
+ /** Program tokens the hardware accepts — drives the UI selector. */
54614
+ availablePrograms: array(string()),
54615
+ /** Minutes remaining on the active cycle, or null when not running. */
54616
+ remainingMinutes: number().int().nonnegative().nullable(),
54617
+ /** Cycle completion 0..100, or null when not applicable. */
54618
+ progressPercent: number().min(0).max(100).nullable(),
54619
+ /** True when the door is reported open. */
54620
+ doorOpen: boolean(),
54621
+ /** True when remote start is allowed (door closed, power on, etc.). */
54622
+ remoteStartAllowed: boolean(),
54623
+ /** Main power / switched-on state. */
54624
+ powerOn: boolean(),
54625
+ saltLevel: DishwasherConsumableLevelSchema.nullable(),
54626
+ rinseAidLevel: DishwasherConsumableLevelSchema.nullable(),
54627
+ halfLoad: boolean(),
54628
+ hygienePlus: boolean(),
54629
+ errorCode: number().nullable(),
54630
+ errorLabel: string().nullable(),
54631
+ lastFetchedAt: number()
54632
+ });
54633
+ DeviceType.Dishwasher, method(object({ deviceId: number().int().nonnegative() }), _void(), {
54634
+ kind: "mutation",
54635
+ auth: "protected"
54636
+ }), method(object({ deviceId: number().int().nonnegative() }), _void(), {
54637
+ kind: "mutation",
54638
+ auth: "protected"
54639
+ }), method(object({ deviceId: number().int().nonnegative() }), _void(), {
54640
+ kind: "mutation",
54641
+ auth: "protected"
54642
+ }), method(object({
54643
+ deviceId: number().int().nonnegative(),
54644
+ program: string().min(1)
54645
+ }), _void(), {
54646
+ kind: "mutation",
54647
+ auth: "protected"
54648
+ }), method(object({
54649
+ deviceId: number().int().nonnegative(),
54650
+ on: boolean()
54651
+ }), _void(), {
54652
+ kind: "mutation",
54653
+ auth: "protected"
54654
+ }), method(object({
54655
+ deviceId: number().int().nonnegative(),
54656
+ on: boolean()
54657
+ }), _void(), {
54658
+ kind: "mutation",
54659
+ auth: "protected"
54660
+ }), method(object({
54661
+ deviceId: number().int().nonnegative(),
54662
+ on: boolean()
54663
+ }), _void(), {
54664
+ kind: "mutation",
54665
+ auth: "protected"
54666
+ }), method(object({
54667
+ deviceId: number().int().nonnegative(),
54668
+ key: string().min(1),
54669
+ value: union([
54670
+ boolean(),
54671
+ string(),
54672
+ number()
54673
+ ])
54674
+ }), _void(), {
54675
+ kind: "mutation",
54676
+ auth: "protected"
54677
+ });
54566
54678
  object({
54567
54679
  /** Ms epoch of the last press. null = never observed since this provider started. */
54568
54680
  lastPressedAt: number().nullable(),
@@ -55128,6 +55240,13 @@ object({
55128
55240
  lastChangedAt: number()
55129
55241
  });
55130
55242
  DeviceType.Sensor;
55243
+ object({
55244
+ /** Radiator valve opening 0 (closed) .. 100 (open). Null = not yet known. */
55245
+ position: number().min(0).max(100).nullable(),
55246
+ /** Ms epoch when the slice was last updated (push or poll). */
55247
+ lastFetchedAt: number()
55248
+ });
55249
+ DeviceType.Thermostat;
55131
55250
  object({
55132
55251
  /** Whether the humidifier is currently on. */
55133
55252
  on: boolean(),
@@ -62292,7 +62411,7 @@ var AccessoryKind = {
62292
62411
  PrivacyMask: DeviceRole.PrivacyMask
62293
62412
  };
62294
62413
  AccessoryKind.Siren, AccessoryKind.Floodlight, AccessoryKind.Spotlight, AccessoryKind.PirSensor, AccessoryKind.Chime, AccessoryKind.Autotrack, AccessoryKind.Nightvision, AccessoryKind.PrivacyMask;
62295
- 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;
62414
+ 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;
62296
62415
  new Set(Object.values(DeviceType));
62297
62416
  Object.freeze({
62298
62417
  "accessories.getStatus": {
@@ -64713,6 +64832,60 @@ Object.freeze({
64713
64832
  addonId: null,
64714
64833
  access: "view"
64715
64834
  },
64835
+ "dishwasher.getStatus": {
64836
+ capName: "dishwasher",
64837
+ capScope: "device",
64838
+ addonId: null,
64839
+ access: "view"
64840
+ },
64841
+ "dishwasher.pause": {
64842
+ capName: "dishwasher",
64843
+ capScope: "device",
64844
+ addonId: null,
64845
+ access: "create"
64846
+ },
64847
+ "dishwasher.setHalfLoad": {
64848
+ capName: "dishwasher",
64849
+ capScope: "device",
64850
+ addonId: null,
64851
+ access: "create"
64852
+ },
64853
+ "dishwasher.setHygienePlus": {
64854
+ capName: "dishwasher",
64855
+ capScope: "device",
64856
+ addonId: null,
64857
+ access: "create"
64858
+ },
64859
+ "dishwasher.setOption": {
64860
+ capName: "dishwasher",
64861
+ capScope: "device",
64862
+ addonId: null,
64863
+ access: "create"
64864
+ },
64865
+ "dishwasher.setPower": {
64866
+ capName: "dishwasher",
64867
+ capScope: "device",
64868
+ addonId: null,
64869
+ access: "create"
64870
+ },
64871
+ "dishwasher.setProgram": {
64872
+ capName: "dishwasher",
64873
+ capScope: "device",
64874
+ addonId: null,
64875
+ access: "create"
64876
+ },
64877
+ "dishwasher.start": {
64878
+ capName: "dishwasher",
64879
+ capScope: "device",
64880
+ addonId: null,
64881
+ access: "create"
64882
+ },
64883
+ "dishwasher.stop": {
64884
+ capName: "dishwasher",
64885
+ capScope: "device",
64886
+ addonId: null,
64887
+ access: "create"
64888
+ },
64716
64889
  "doorbell.getStatus": {
64717
64890
  capName: "doorbell",
64718
64891
  capScope: "device",
@@ -64923,6 +65096,12 @@ Object.freeze({
64923
65096
  addonId: null,
64924
65097
  access: "view"
64925
65098
  },
65099
+ "heatingValve.getStatus": {
65100
+ capName: "heating-valve",
65101
+ capScope: "device",
65102
+ addonId: null,
65103
+ access: "view"
65104
+ },
64926
65105
  "humidifier.getStatus": {
64927
65106
  capName: "humidifier",
64928
65107
  capScope: "device",
@@ -69063,6 +69242,12 @@ Object.freeze({
69063
69242
  addonId: null,
69064
69243
  access: "delete"
69065
69244
  },
69245
+ "storageAdmin.isAdoptedLegacyTable": {
69246
+ capName: "storage-admin",
69247
+ capScope: "system",
69248
+ addonId: null,
69249
+ access: "view"
69250
+ },
69066
69251
  "storageAdmin.listKinds": {
69067
69252
  capName: "storage-admin",
69068
69253
  capScope: "system",
@@ -69075,6 +69260,12 @@ Object.freeze({
69075
69260
  addonId: null,
69076
69261
  access: "view"
69077
69262
  },
69263
+ "storageAdmin.readLegacyCollection": {
69264
+ capName: "storage-admin",
69265
+ capScope: "system",
69266
+ addonId: null,
69267
+ access: "view"
69268
+ },
69078
69269
  "storageAdmin.readRecords": {
69079
69270
  capName: "storage-admin",
69080
69271
  capScope: "system",
@@ -70498,7 +70689,7 @@ Object.freeze({
70498
70689
  access: "create"
70499
70690
  }
70500
70691
  });
70501
- 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;
70692
+ 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;
70502
70693
  DeviceFeature.BatteryOperated;
70503
70694
  Object.freeze({
70504
70695
  "accessories.getStatus": [{
@@ -71322,6 +71513,51 @@ Object.freeze({
71322
71513
  form: "single",
71323
71514
  optional: false
71324
71515
  }],
71516
+ "dishwasher.getStatus": [{
71517
+ name: "deviceId",
71518
+ form: "single",
71519
+ optional: false
71520
+ }],
71521
+ "dishwasher.pause": [{
71522
+ name: "deviceId",
71523
+ form: "single",
71524
+ optional: false
71525
+ }],
71526
+ "dishwasher.setHalfLoad": [{
71527
+ name: "deviceId",
71528
+ form: "single",
71529
+ optional: false
71530
+ }],
71531
+ "dishwasher.setHygienePlus": [{
71532
+ name: "deviceId",
71533
+ form: "single",
71534
+ optional: false
71535
+ }],
71536
+ "dishwasher.setOption": [{
71537
+ name: "deviceId",
71538
+ form: "single",
71539
+ optional: false
71540
+ }],
71541
+ "dishwasher.setPower": [{
71542
+ name: "deviceId",
71543
+ form: "single",
71544
+ optional: false
71545
+ }],
71546
+ "dishwasher.setProgram": [{
71547
+ name: "deviceId",
71548
+ form: "single",
71549
+ optional: false
71550
+ }],
71551
+ "dishwasher.start": [{
71552
+ name: "deviceId",
71553
+ form: "single",
71554
+ optional: false
71555
+ }],
71556
+ "dishwasher.stop": [{
71557
+ name: "deviceId",
71558
+ form: "single",
71559
+ optional: false
71560
+ }],
71325
71561
  "doorbell.getStatus": [{
71326
71562
  name: "deviceId",
71327
71563
  form: "single",
@@ -71391,6 +71627,11 @@ Object.freeze({
71391
71627
  form: "single",
71392
71628
  optional: false
71393
71629
  }],
71630
+ "heatingValve.getStatus": [{
71631
+ name: "deviceId",
71632
+ form: "single",
71633
+ optional: false
71634
+ }],
71394
71635
  "humidifier.getStatus": [{
71395
71636
  name: "deviceId",
71396
71637
  form: "single",