@camstack/types 1.2.381 → 1.2.382

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 (38) hide show
  1. package/dist/addon.js +78 -2
  2. package/dist/addon.mjs +78 -2
  3. package/dist/capabilities/alerts.cap.d.ts +25 -0
  4. package/dist/capabilities/battery.cap.d.ts +1 -1
  5. package/dist/capabilities/caller-stamp.d.ts +4 -3
  6. package/dist/capabilities/dishwasher.cap.d.ts +178 -0
  7. package/dist/capabilities/heating-valve.cap.d.ts +39 -0
  8. package/dist/capabilities/index.d.ts +5 -1
  9. package/dist/client.js +20 -0
  10. package/dist/client.mjs +20 -0
  11. package/dist/{composition-DOwQB_Ua.mjs → composition-CB6PMT9p.mjs} +1 -1
  12. package/dist/{composition-CUAOHZ38.js → composition-eoYYVfOp.js} +1 -1
  13. package/dist/device/base-device-provider.d.ts +4 -2
  14. package/dist/device/device-control-resolution.d.ts +1 -1
  15. package/dist/device/device-type.d.ts +5 -1
  16. package/dist/{err-msg--2RrYiLO.mjs → err-msg-BXKzRBwg.mjs} +4 -0
  17. package/dist/{err-msg-Bb-s4Xuj.js → err-msg-BhVbr0NX.js} +4 -0
  18. package/dist/generated/addon-api.d.ts +315 -230
  19. package/dist/generated/addon-cap-facts.d.ts +1 -1
  20. package/dist/generated/cap-status-types.d.ts +5 -1
  21. package/dist/generated/capability-router-map.d.ts +8 -2
  22. package/dist/generated/device-local-state.d.ts +6 -0
  23. package/dist/generated/device-proxy.d.ts +6 -0
  24. package/dist/generated/device-scoped-caps.d.ts +1 -1
  25. package/dist/generated/history-catalog.d.ts +1 -1
  26. package/dist/generated/method-access-map.d.ts +1 -1
  27. package/dist/generated/method-device-selectors.d.ts +1 -1
  28. package/dist/generated/runtime-state-durability.d.ts +1 -1
  29. package/dist/index.d.ts +1 -1
  30. package/dist/index.js +363 -9
  31. package/dist/index.mjs +357 -10
  32. package/dist/interfaces/config-ui-secrets.d.ts +2 -0
  33. package/dist/interfaces/config-ui.d.ts +10 -0
  34. package/dist/node.js +2 -2
  35. package/dist/node.mjs +2 -2
  36. package/dist/{sleep-D8yJVc4r.js → sleep--L6qY125.js} +53 -4
  37. package/dist/{sleep-bZIhUvjd.mjs → sleep-BOjuyoPC.mjs} +48 -5
  38. package/package.json +1 -1
@@ -51,6 +51,8 @@ export declare function collectSecretConfigKeys(schema: unknown): ReadonlySet<st
51
51
  * blobs (see {@link isKeychainStoredField}). What a form sends as
52
52
  * `secretKeys` so the owner's door knows which values to keep out of the blob.
53
53
  */
54
+ /** Drop fields marked `omitFromSettings` before an integration settings write. */
55
+ export declare function omitTransientConfig(schema: unknown, config: Record<string, unknown>): Record<string, unknown>;
54
56
  export declare function collectKeychainStoredKeys(schema: unknown): ReadonlySet<string>;
55
57
  /**
56
58
  * True when the value is a readable schema declaring at least one field of any
@@ -143,6 +143,11 @@ export interface ConfigFieldBase {
143
143
  readonly default?: unknown;
144
144
  readonly span?: 1 | 2 | 3 | 4;
145
145
  readonly showWhen?: ConfigCondition;
146
+ /**
147
+ * The value is only for an in-form action (a sign-in). It is not written
148
+ * into the integration settings.
149
+ */
150
+ readonly omitFromSettings?: boolean;
146
151
  /**
147
152
  * The field's stored value is a CREDENTIAL and must never leave the process
148
153
  * on a read surface. Redaction machinery keys off
@@ -942,6 +947,11 @@ export interface ConfigAddonActionButtonField extends ConfigFieldBase {
942
947
  /** Toast/inline success message template. `{key}` placeholders are
943
948
  * resolved against the action result. */
944
949
  successMessage?: string;
950
+ /**
951
+ * After a successful action, copy string fields from the result into form
952
+ * keys (e.g. pairing writes `sslCertificate` without showing PEM fields).
953
+ */
954
+ assignResult?: Readonly<Record<string, string>>;
945
955
  /** Confirmation prompt before executing. */
946
956
  confirmMessage?: string;
947
957
  }
package/dist/node.js CHANGED
@@ -21,8 +21,8 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
21
21
  enumerable: true
22
22
  }) : target, mod));
23
23
  //#endregion
24
- const require_composition = require("./composition-CUAOHZ38.js");
25
- const require_err_msg = require("./err-msg-Bb-s4Xuj.js");
24
+ const require_composition = require("./composition-eoYYVfOp.js");
25
+ const require_err_msg = require("./err-msg-BhVbr0NX.js");
26
26
  let node_crypto = require("node:crypto");
27
27
  let node_fs = require("node:fs");
28
28
  node_fs = __toESM(node_fs);
package/dist/node.mjs CHANGED
@@ -1,5 +1,5 @@
1
- import { At as Fmp4BoxSplitter, Ct as FFMPEG_PATH_ENV, Dt as getFfmpegArtifact, Et as FFMPEG_RELEASE, Ot as getFfmpegDownloadUrl, P as compositionSourceKey, Pt as buildFfmpegArgs, Rt as isSoftwareDecode, Tt as ffmpegBinaryName, a as CUSTOMIZATION_BLOCK_NAME_PREFIX, kt as canonicalHash, wt as chooseFfmpegBinary } from "./composition-DOwQB_Ua.mjs";
2
- import { t as errMsg } from "./err-msg--2RrYiLO.mjs";
1
+ import { At as Fmp4BoxSplitter, Ct as FFMPEG_PATH_ENV, Dt as getFfmpegArtifact, Et as FFMPEG_RELEASE, Ot as getFfmpegDownloadUrl, P as compositionSourceKey, Pt as buildFfmpegArgs, Rt as isSoftwareDecode, Tt as ffmpegBinaryName, a as CUSTOMIZATION_BLOCK_NAME_PREFIX, kt as canonicalHash, wt as chooseFfmpegBinary } from "./composition-CB6PMT9p.mjs";
2
+ import { t as errMsg } from "./err-msg-BXKzRBwg.mjs";
3
3
  import { createHash, createHmac, randomUUID, timingSafeEqual } from "node:crypto";
4
4
  import * as fs from "node:fs";
5
5
  import { chmodSync, createWriteStream, existsSync, mkdirSync, readFileSync, readdirSync, realpathSync, renameSync, rmSync, unlinkSync, writeFileSync } from "node:fs";
@@ -156,6 +156,30 @@ function collectSecretConfigKeys(schema) {
156
156
  * blobs (see {@link isKeychainStoredField}). What a form sends as
157
157
  * `secretKeys` so the owner's door knows which values to keep out of the blob.
158
158
  */
159
+ /** Drop fields marked `omitFromSettings` before an integration settings write. */
160
+ function omitTransientConfig(schema, config) {
161
+ const omit = /* @__PURE__ */ new Set();
162
+ for (const section of sectionsOf(schema)) for (const field of fieldsOf(section)) collectOmitted(field, omit);
163
+ if (omit.size === 0) return config;
164
+ const next = { ...config };
165
+ for (const key of omit) delete next[key];
166
+ return next;
167
+ }
168
+ function collectOmitted(field, out) {
169
+ if (!isRecord$6(field)) return;
170
+ const type = field["type"];
171
+ const key = field["key"];
172
+ if (field["omitFromSettings"] === true && typeof key === "string" && key.length > 0) out.add(key);
173
+ if (type === "group") {
174
+ for (const child of fieldsOf(field)) collectOmitted(child, out);
175
+ return;
176
+ }
177
+ if (type === "sub-tabs") {
178
+ const tabs = field["tabs"];
179
+ if (!Array.isArray(tabs)) return;
180
+ for (const tab of tabs) for (const child of fieldsOf(tab)) collectOmitted(child, out);
181
+ }
182
+ }
159
183
  function collectKeychainStoredKeys(schema) {
160
184
  const keys = /* @__PURE__ */ new Set();
161
185
  for (const section of sectionsOf(schema)) for (const field of fieldsOf(section)) walkKeychainField(field, keys);
@@ -5605,9 +5629,10 @@ function describeCustomActions(catalog) {
5605
5629
  * owner check, device-history's `not-owner`, records' owner).
5606
5630
  *
5607
5631
  * The stamp is set ONLY by the transport (`stampCallerAddonId`, or stated by a
5608
- * hub in-process caller). The generated HTTP/tRPC mount parses input with
5609
- * `.loose()`, so without this a session could add the key itself and act as
5610
- * another addon. The mount strips it for these caps.
5632
+ * hub in-process caller). HTTP/WS mounts parse input with `.loose()`, so a
5633
+ * session could add the key itself and act as another addon — those procedures
5634
+ * strip it when `ctx.req` is present. Mesh / `$core-caps` calls have no request;
5635
+ * the transport stamp must survive to the provider.
5611
5636
  */
5612
5637
  var CALLER_STAMPED_CAPABILITIES = [
5613
5638
  "keychain",
@@ -6355,6 +6380,17 @@ function createDeviceProxy(api, binding, opts) {
6355
6380
  getRawState: (input) => dispatch("device-ops", "deviceOps", "getRawState", "query", input)
6356
6381
  };
6357
6382
  const deviceStatusInterface = { getStatus: (input) => dispatch("device-status", "deviceStatus", "getStatus", "query", input) };
6383
+ const dishwasherInterface = {
6384
+ start: (input) => dispatch("dishwasher", "dishwasher", "start", "mutation", input),
6385
+ pause: (input) => dispatch("dishwasher", "dishwasher", "pause", "mutation", input),
6386
+ stop: (input) => dispatch("dishwasher", "dishwasher", "stop", "mutation", input),
6387
+ setProgram: (input) => dispatch("dishwasher", "dishwasher", "setProgram", "mutation", input),
6388
+ setPower: (input) => dispatch("dishwasher", "dishwasher", "setPower", "mutation", input),
6389
+ setHalfLoad: (input) => dispatch("dishwasher", "dishwasher", "setHalfLoad", "mutation", input),
6390
+ setHygienePlus: (input) => dispatch("dishwasher", "dishwasher", "setHygienePlus", "mutation", input),
6391
+ setOption: (input) => dispatch("dishwasher", "dishwasher", "setOption", "mutation", input),
6392
+ getStatus: (input) => dispatch("dishwasher", "dishwasher", "getStatus", "query", input)
6393
+ };
6358
6394
  const doorbellInterface = { getStatus: (input) => dispatch("doorbell", "doorbell", "getStatus", "query", input) };
6359
6395
  const enumSensorInterface = { getStatus: (input) => dispatch("enum-sensor", "enumSensor", "getStatus", "query", input) };
6360
6396
  const eventEmitterInterface = { getStatus: (input) => dispatch("event-emitter", "eventEmitter", "getStatus", "query", input) };
@@ -6368,6 +6404,7 @@ function createDeviceProxy(api, binding, opts) {
6368
6404
  const featureProbeInterface = { getStatus: (input) => dispatch("feature-probe", "featureProbe", "getStatus", "query", input) };
6369
6405
  const floodInterface = { getStatus: (input) => dispatch("flood", "flood", "getStatus", "query", input) };
6370
6406
  const gasInterface = { getStatus: (input) => dispatch("gas", "gas", "getStatus", "query", input) };
6407
+ const heatingValveInterface = { getStatus: (input) => dispatch("heating-valve", "heatingValve", "getStatus", "query", input) };
6371
6408
  const humidifierInterface = {
6372
6409
  setOn: (input) => dispatch("humidifier", "humidifier", "setOn", "mutation", input),
6373
6410
  setTargetHumidity: (input) => dispatch("humidifier", "humidifier", "setTargetHumidity", "mutation", input),
@@ -6915,6 +6952,7 @@ function createDeviceProxy(api, binding, opts) {
6915
6952
  dayNight: createSliceHandle(stateSource, binding.deviceId, "day-night"),
6916
6953
  deviceDiscovery: createSliceHandle(stateSource, binding.deviceId, "device-discovery"),
6917
6954
  deviceStatus: createSliceHandle(stateSource, binding.deviceId, "device-status"),
6955
+ dishwasher: createSliceHandle(stateSource, binding.deviceId, "dishwasher"),
6918
6956
  doorbell: createSliceHandle(stateSource, binding.deviceId, "doorbell"),
6919
6957
  enumSensor: createSliceHandle(stateSource, binding.deviceId, "enum-sensor"),
6920
6958
  eventEmitter: createSliceHandle(stateSource, binding.deviceId, "event-emitter"),
@@ -6922,6 +6960,7 @@ function createDeviceProxy(api, binding, opts) {
6922
6960
  featureProbe: createSliceHandle(stateSource, binding.deviceId, "feature-probe"),
6923
6961
  flood: createSliceHandle(stateSource, binding.deviceId, "flood"),
6924
6962
  gas: createSliceHandle(stateSource, binding.deviceId, "gas"),
6963
+ heatingValve: createSliceHandle(stateSource, binding.deviceId, "heating-valve"),
6925
6964
  humidifier: createSliceHandle(stateSource, binding.deviceId, "humidifier"),
6926
6965
  humiditySensor: createSliceHandle(stateSource, binding.deviceId, "humidity-sensor"),
6927
6966
  image: createSliceHandle(stateSource, binding.deviceId, "image"),
@@ -6995,6 +7034,7 @@ function createDeviceProxy(api, binding, opts) {
6995
7034
  ...bound("device-extension") ? { deviceExtension: deviceExtensionInterface } : {},
6996
7035
  ...bound("device-ops") ? { deviceOps: deviceOpsInterface } : {},
6997
7036
  ...bound("device-status") ? { deviceStatus: deviceStatusInterface } : {},
7037
+ ...bound("dishwasher") ? { dishwasher: dishwasherInterface } : {},
6998
7038
  ...bound("doorbell") ? { doorbell: doorbellInterface } : {},
6999
7039
  ...bound("enum-sensor") ? { enumSensor: enumSensorInterface } : {},
7000
7040
  ...bound("event-emitter") ? { eventEmitter: eventEmitterInterface } : {},
@@ -7002,6 +7042,7 @@ function createDeviceProxy(api, binding, opts) {
7002
7042
  ...bound("feature-probe") ? { featureProbe: featureProbeInterface } : {},
7003
7043
  ...bound("flood") ? { flood: floodInterface } : {},
7004
7044
  ...bound("gas") ? { gas: gasInterface } : {},
7045
+ ...bound("heating-valve") ? { heatingValve: heatingValveInterface } : {},
7005
7046
  ...bound("humidifier") ? { humidifier: humidifierInterface } : {},
7006
7047
  ...bound("humidity-sensor") ? { humiditySensor: humiditySensorInterface } : {},
7007
7048
  ...bound("image") ? { image: imageInterface } : {},
@@ -7082,7 +7123,7 @@ function createDeviceProxy(api, binding, opts) {
7082
7123
  * can answer "may a rule actuate this?" without importing the schema barrel
7083
7124
  * (~144MB RSS per runner, D28).
7084
7125
  *
7085
- * Coverage: 88 device-scoped capabilities.
7126
+ * Coverage: 90 device-scoped capabilities.
7086
7127
  */
7087
7128
  var DEVICE_SCOPED_CAPS = new Set([
7088
7129
  "accessories",
@@ -7115,6 +7156,7 @@ var DEVICE_SCOPED_CAPS = new Set([
7115
7156
  "device-extension",
7116
7157
  "device-ops",
7117
7158
  "device-status",
7159
+ "dishwasher",
7118
7160
  "doorbell",
7119
7161
  "enum-sensor",
7120
7162
  "event-emitter",
@@ -7122,6 +7164,7 @@ var DEVICE_SCOPED_CAPS = new Set([
7122
7164
  "feature-probe",
7123
7165
  "flood",
7124
7166
  "gas",
7167
+ "heating-valve",
7125
7168
  "humidifier",
7126
7169
  "humidity-sensor",
7127
7170
  "image",
@@ -8540,6 +8583,12 @@ Object.defineProperty(exports, "normalizeSecretOwner", {
8540
8583
  return normalizeSecretOwner;
8541
8584
  }
8542
8585
  });
8586
+ Object.defineProperty(exports, "omitTransientConfig", {
8587
+ enumerable: true,
8588
+ get: function() {
8589
+ return omitTransientConfig;
8590
+ }
8591
+ });
8543
8592
  Object.defineProperty(exports, "optionalMethod", {
8544
8593
  enumerable: true,
8545
8594
  get: function() {
@@ -156,6 +156,30 @@ function collectSecretConfigKeys(schema) {
156
156
  * blobs (see {@link isKeychainStoredField}). What a form sends as
157
157
  * `secretKeys` so the owner's door knows which values to keep out of the blob.
158
158
  */
159
+ /** Drop fields marked `omitFromSettings` before an integration settings write. */
160
+ function omitTransientConfig(schema, config) {
161
+ const omit = /* @__PURE__ */ new Set();
162
+ for (const section of sectionsOf(schema)) for (const field of fieldsOf(section)) collectOmitted(field, omit);
163
+ if (omit.size === 0) return config;
164
+ const next = { ...config };
165
+ for (const key of omit) delete next[key];
166
+ return next;
167
+ }
168
+ function collectOmitted(field, out) {
169
+ if (!isRecord$6(field)) return;
170
+ const type = field["type"];
171
+ const key = field["key"];
172
+ if (field["omitFromSettings"] === true && typeof key === "string" && key.length > 0) out.add(key);
173
+ if (type === "group") {
174
+ for (const child of fieldsOf(field)) collectOmitted(child, out);
175
+ return;
176
+ }
177
+ if (type === "sub-tabs") {
178
+ const tabs = field["tabs"];
179
+ if (!Array.isArray(tabs)) return;
180
+ for (const tab of tabs) for (const child of fieldsOf(tab)) collectOmitted(child, out);
181
+ }
182
+ }
159
183
  function collectKeychainStoredKeys(schema) {
160
184
  const keys = /* @__PURE__ */ new Set();
161
185
  for (const section of sectionsOf(schema)) for (const field of fieldsOf(section)) walkKeychainField(field, keys);
@@ -5605,9 +5629,10 @@ function describeCustomActions(catalog) {
5605
5629
  * owner check, device-history's `not-owner`, records' owner).
5606
5630
  *
5607
5631
  * The stamp is set ONLY by the transport (`stampCallerAddonId`, or stated by a
5608
- * hub in-process caller). The generated HTTP/tRPC mount parses input with
5609
- * `.loose()`, so without this a session could add the key itself and act as
5610
- * another addon. The mount strips it for these caps.
5632
+ * hub in-process caller). HTTP/WS mounts parse input with `.loose()`, so a
5633
+ * session could add the key itself and act as another addon — those procedures
5634
+ * strip it when `ctx.req` is present. Mesh / `$core-caps` calls have no request;
5635
+ * the transport stamp must survive to the provider.
5611
5636
  */
5612
5637
  var CALLER_STAMPED_CAPABILITIES = [
5613
5638
  "keychain",
@@ -6355,6 +6380,17 @@ function createDeviceProxy(api, binding, opts) {
6355
6380
  getRawState: (input) => dispatch("device-ops", "deviceOps", "getRawState", "query", input)
6356
6381
  };
6357
6382
  const deviceStatusInterface = { getStatus: (input) => dispatch("device-status", "deviceStatus", "getStatus", "query", input) };
6383
+ const dishwasherInterface = {
6384
+ start: (input) => dispatch("dishwasher", "dishwasher", "start", "mutation", input),
6385
+ pause: (input) => dispatch("dishwasher", "dishwasher", "pause", "mutation", input),
6386
+ stop: (input) => dispatch("dishwasher", "dishwasher", "stop", "mutation", input),
6387
+ setProgram: (input) => dispatch("dishwasher", "dishwasher", "setProgram", "mutation", input),
6388
+ setPower: (input) => dispatch("dishwasher", "dishwasher", "setPower", "mutation", input),
6389
+ setHalfLoad: (input) => dispatch("dishwasher", "dishwasher", "setHalfLoad", "mutation", input),
6390
+ setHygienePlus: (input) => dispatch("dishwasher", "dishwasher", "setHygienePlus", "mutation", input),
6391
+ setOption: (input) => dispatch("dishwasher", "dishwasher", "setOption", "mutation", input),
6392
+ getStatus: (input) => dispatch("dishwasher", "dishwasher", "getStatus", "query", input)
6393
+ };
6358
6394
  const doorbellInterface = { getStatus: (input) => dispatch("doorbell", "doorbell", "getStatus", "query", input) };
6359
6395
  const enumSensorInterface = { getStatus: (input) => dispatch("enum-sensor", "enumSensor", "getStatus", "query", input) };
6360
6396
  const eventEmitterInterface = { getStatus: (input) => dispatch("event-emitter", "eventEmitter", "getStatus", "query", input) };
@@ -6368,6 +6404,7 @@ function createDeviceProxy(api, binding, opts) {
6368
6404
  const featureProbeInterface = { getStatus: (input) => dispatch("feature-probe", "featureProbe", "getStatus", "query", input) };
6369
6405
  const floodInterface = { getStatus: (input) => dispatch("flood", "flood", "getStatus", "query", input) };
6370
6406
  const gasInterface = { getStatus: (input) => dispatch("gas", "gas", "getStatus", "query", input) };
6407
+ const heatingValveInterface = { getStatus: (input) => dispatch("heating-valve", "heatingValve", "getStatus", "query", input) };
6371
6408
  const humidifierInterface = {
6372
6409
  setOn: (input) => dispatch("humidifier", "humidifier", "setOn", "mutation", input),
6373
6410
  setTargetHumidity: (input) => dispatch("humidifier", "humidifier", "setTargetHumidity", "mutation", input),
@@ -6915,6 +6952,7 @@ function createDeviceProxy(api, binding, opts) {
6915
6952
  dayNight: createSliceHandle(stateSource, binding.deviceId, "day-night"),
6916
6953
  deviceDiscovery: createSliceHandle(stateSource, binding.deviceId, "device-discovery"),
6917
6954
  deviceStatus: createSliceHandle(stateSource, binding.deviceId, "device-status"),
6955
+ dishwasher: createSliceHandle(stateSource, binding.deviceId, "dishwasher"),
6918
6956
  doorbell: createSliceHandle(stateSource, binding.deviceId, "doorbell"),
6919
6957
  enumSensor: createSliceHandle(stateSource, binding.deviceId, "enum-sensor"),
6920
6958
  eventEmitter: createSliceHandle(stateSource, binding.deviceId, "event-emitter"),
@@ -6922,6 +6960,7 @@ function createDeviceProxy(api, binding, opts) {
6922
6960
  featureProbe: createSliceHandle(stateSource, binding.deviceId, "feature-probe"),
6923
6961
  flood: createSliceHandle(stateSource, binding.deviceId, "flood"),
6924
6962
  gas: createSliceHandle(stateSource, binding.deviceId, "gas"),
6963
+ heatingValve: createSliceHandle(stateSource, binding.deviceId, "heating-valve"),
6925
6964
  humidifier: createSliceHandle(stateSource, binding.deviceId, "humidifier"),
6926
6965
  humiditySensor: createSliceHandle(stateSource, binding.deviceId, "humidity-sensor"),
6927
6966
  image: createSliceHandle(stateSource, binding.deviceId, "image"),
@@ -6995,6 +7034,7 @@ function createDeviceProxy(api, binding, opts) {
6995
7034
  ...bound("device-extension") ? { deviceExtension: deviceExtensionInterface } : {},
6996
7035
  ...bound("device-ops") ? { deviceOps: deviceOpsInterface } : {},
6997
7036
  ...bound("device-status") ? { deviceStatus: deviceStatusInterface } : {},
7037
+ ...bound("dishwasher") ? { dishwasher: dishwasherInterface } : {},
6998
7038
  ...bound("doorbell") ? { doorbell: doorbellInterface } : {},
6999
7039
  ...bound("enum-sensor") ? { enumSensor: enumSensorInterface } : {},
7000
7040
  ...bound("event-emitter") ? { eventEmitter: eventEmitterInterface } : {},
@@ -7002,6 +7042,7 @@ function createDeviceProxy(api, binding, opts) {
7002
7042
  ...bound("feature-probe") ? { featureProbe: featureProbeInterface } : {},
7003
7043
  ...bound("flood") ? { flood: floodInterface } : {},
7004
7044
  ...bound("gas") ? { gas: gasInterface } : {},
7045
+ ...bound("heating-valve") ? { heatingValve: heatingValveInterface } : {},
7005
7046
  ...bound("humidifier") ? { humidifier: humidifierInterface } : {},
7006
7047
  ...bound("humidity-sensor") ? { humiditySensor: humiditySensorInterface } : {},
7007
7048
  ...bound("image") ? { image: imageInterface } : {},
@@ -7082,7 +7123,7 @@ function createDeviceProxy(api, binding, opts) {
7082
7123
  * can answer "may a rule actuate this?" without importing the schema barrel
7083
7124
  * (~144MB RSS per runner, D28).
7084
7125
  *
7085
- * Coverage: 88 device-scoped capabilities.
7126
+ * Coverage: 90 device-scoped capabilities.
7086
7127
  */
7087
7128
  var DEVICE_SCOPED_CAPS = new Set([
7088
7129
  "accessories",
@@ -7115,6 +7156,7 @@ var DEVICE_SCOPED_CAPS = new Set([
7115
7156
  "device-extension",
7116
7157
  "device-ops",
7117
7158
  "device-status",
7159
+ "dishwasher",
7118
7160
  "doorbell",
7119
7161
  "enum-sensor",
7120
7162
  "event-emitter",
@@ -7122,6 +7164,7 @@ var DEVICE_SCOPED_CAPS = new Set([
7122
7164
  "feature-probe",
7123
7165
  "flood",
7124
7166
  "gas",
7167
+ "heating-valve",
7125
7168
  "humidifier",
7126
7169
  "humidity-sensor",
7127
7170
  "image",
@@ -7472,4 +7515,4 @@ function sleepCancellable(ms, signal) {
7472
7515
  });
7473
7516
  }
7474
7517
  //#endregion
7475
- export { optionalMethod as $, PEER_BYTES_CHUNK_BYTES as $n, schemaDeclaresAnyField as $r, REMOVE_LEAF as $t, HF_REPO as A, RECORD_BATCH_MAX_BYTES as An, emitReadiness as Ar, makeProfileBrokerId as At, describeCustomActions as B, RECORD_SECRET_COLLECTION_PREFIX as Bn, SECRET_CLEAR as Br, settingsBrokersAdoptsFrom as Bt, addonSliceHandleApi as C, RecordsError as Cn, globalSecretScope as Cr, ProfileRtspEntrySchema as Ct, createSliceHandle as D, asRecordsError as Dn, normalizeNodeId as Dr, StreamSourceSchema as Dt, createMirrorSource as E, UnknownRecordKindError as En, parseSecretRef as Er, StreamSourceEntrySchema$1 as Et, DEVICE_CHILDREN_BATCH_MAX as F, RECORD_ID_MAX_LENGTH as Fn, collectHydratedFieldValues as Fr, SETTINGS_ARRAY_ADOPTS_PREFIX as Ft, DEVICE_STATUS_METHOD as G, createSecretsAccess as Gn, isSecretMarkerLike as Gr, RecordFieldPathSchema as Gt, adminUiCapability as H, RECORD_SWEEP_INTERVAL_MS as Hn, isSecretClear as Hr, entryBody as Ht, CALLER_STAMPED_CAPABILITIES as I, RECORD_MAX_DATA_BYTES as In, dehydrateConfigField as Ir, parseSettingsArrayAdoptsFrom as It, PROVIDER_PIN_FIELD as J, forgetKnownSecret as Jn, REDACTED_SECRET as Jr, RecordKindNameSchema as Jt, HISTORY_DEFAULT_MIN_INTERVAL_MS as K, MIN_SCRUBBED_LENGTH as Kn, makeSecretMarker as Kr, RecordIndexSchema as Kt, withoutCallerStamp as L, RECORD_MAX_INDEXES as Ln, dehydrateSchema as Lr, settingsArrayAdoptsFrom as Lt, RawStateResultSchema as M, RECORD_DATABASES as Mn, WELL_KNOWN_TABS as Mr, parseProfileBrokerId as Mt, deviceOpsCapability as N, RECORD_DEFAULT_MAX_DATA_BYTES as Nn, WELL_KNOWN_TAB_MAP as Nr, selectAssignedProfileSlots as Nt, DEFAULT_TOKEN_EXPIRY as O, recordsErrorFromMessage as On, createDurableState as Or, SubscribeAudioChunksInputSchema as Ot, viewerUiCapability as P, RECORD_DELETE_BATCH as Pn, collectHydratedFieldEntries as Pr, makeInMemoryRecords as Pt, method as Q, shortSecretRefHash as Qn, isSecretConfigField as Qr, defineRecordKinds as Qt, customAction as R, RECORD_MAX_INDEX_FIELDS as Rn, hydrateSchema as Rr, SETTINGS_BROKERS_ADOPTS_PREFIX as Rt, invokeTrpcLeaf as S, RecordUniqueViolationError as Sn, formatSecretScope as Sr, FrameHandleSchema as St, createLazyTrpcSource as T, UnindexedFilterError as Tn, normalizeSecretOwner as Tr, ProfileSlotStatusSchema as Tt, DEFAULT_RUNTIME_STATE_DURABILITY as U, resolveSecretViewsIn as Un, isSecretFieldView as Ur, createRecordsAccess as Ut, deviceCustomAction as V, RECORD_SETTINGS_MAX_ROWS as Vn, classifySecretWrite as Vr, defineEntryKind as Vt, DEVICE_SETTINGS_CONTRIBUTION_METHODS as W, REVALIDATE_AFTER_MS as Wn, isSecretMarker as Wr, EntryDescriptorSchema as Wt, expandCapMethods as X, registerKnownSecret as Xn, collectSecretConfigKeys as Xr, assertValidDeclaration as Xt, event as Y, knownSecretCount as Yn, collectKeychainStoredKeys as Yr, RecordRetentionSchema as Yt, isDeviceConfigCap as Z, scrubKnownSecrets as Zn, isKeychainStoredField as Zr, declarationsOf as Zt, readErrorI18n as _, PlaintextSecretError as _n, resolveSecretMarkers as _r, CamProfileSchema as _t, asJsonArray as a, recordSecretRef as an, SHARE_VIEW_KINDS as ar, toNodeId as at, isDeviceScopedCap as b, RecordSecretUnavailableError as bn, arrayItemFieldPath as br, CameraStreamSchema as bt, asString as c, collectZodSecretPaths as cn, classifyStoreError as cr, ReadinessTimeoutError as ct, parseJsonUnknown as d, BatchTooLargeError as dn, parseSecretStatePath as dr, scopeKey as dt, AUDIO_CHUNK_FORMATS as ei, collectSecretLeaves as en, PEER_BYTES_MAX_OUTSTANDING as er, resolveCapMount as et, hfModelUrl as f, DeclarationRefusedError as fn, secretTreeFromPaths as fr, AudioChunkFormatSchema as ft, ErrorI18nPayloadSchema as g, NoCallerError as gn, isSecretRefOwnedBy as gr, CAM_PROFILE_ORDER as gt, ErrorCodeSchema as h, InvalidRecordError as hn, collectSecretMarkerRefs as hr, BrokerStatusSchema as ht, asBoolean as i, recordSecretCollection as in, DATAPLANE_SECRET_HEADER as ir, readNodePin as it, RUNTIME_DEFAULTS as j, RECORD_CLASSES as jn, isEvent as jr, makeSourceBrokerId as jt, HF_BASE_URL as k, RECORD_BATCH_MAX as kn, createEvent as kr, SubscribeAudioChunksResultSchema as kt, parseJsonArray as l, isZodSecret as ln, normalizeAddonInitResult as lr, emitDownForOwnedCaps as lt, CamstackError as m, ForeignSecretMarkerError as mn, KeychainWriteRefusedError as mr, BrokerStatsSchema as mt, sleepCancellable as n, expandAudioChunkToF32le as ni, parseSecretPath as nn, PEER_BYTES_TICKET_TTL_MS as nr, CAP_NODE_PIN_CONTEXT_KEY as nt, asJsonObject as o, secretArrayPrefixes as on, DisposerChain as or, MODEL_FORMATS as ot, BOOT_RECOVERY_BACKOFF_MS as p, FilterRequiredError as pn, secretTreeFromSchema as pr, AudioStreamPickSchema as pt, HISTORY_UNIT_LABELS as q, clearKnownSecrets as qn, toSecretFieldView as qr, RecordKindDeclarationSchema as qt, maskUrlCredentials as r, isAudioChunkFormat as ri, recordArrayItemPath as rn, PeerBytesTicketSchema as rr, nodePin as rt, asNumber as s, SECRET_META as sn, BaseAddon as sr, ReadinessRegistry as st, sleep as t, audioChunkBytesPerSample as ti, mapSecretLeaves as tn, PEER_BYTES_STALL_MS as tr, systemMethod as tt, parseJsonObject as u, AdoptionPendingError as un, mergeSecretStatePaths as ur, readinessKey as ut, userError as v, RECORDS_ERROR_CODES as vn, transformSecretWrite as vr, CamStreamKindSchema as vt, createEventBusSliceSource as w, RevConflictError as wn, isSecretRef as wr, ProfileSlotSchema as wt, createDeviceProxy as x, RecordTooLargeError as xn, buildSecretRef as xr, DecodedAudioChunkSchema as xt, DEVICE_SCOPED_CAPS as y, RecordNotFoundError as yn, SECRET_REF_SCHEME as yr, CamStreamResolutionSchema as yt, defineCustomActions as z, RECORD_QUERY_MAX as zn, resolveHydratedFieldValue as zr, parseSettingsBrokersAdoptsFrom as zt };
7518
+ export { optionalMethod as $, PEER_BYTES_CHUNK_BYTES as $n, omitTransientConfig as $r, REMOVE_LEAF as $t, HF_REPO as A, RECORD_BATCH_MAX_BYTES as An, emitReadiness as Ar, makeProfileBrokerId as At, describeCustomActions as B, RECORD_SECRET_COLLECTION_PREFIX as Bn, SECRET_CLEAR as Br, settingsBrokersAdoptsFrom as Bt, addonSliceHandleApi as C, RecordsError as Cn, globalSecretScope as Cr, ProfileRtspEntrySchema as Ct, createSliceHandle as D, asRecordsError as Dn, normalizeNodeId as Dr, StreamSourceSchema as Dt, createMirrorSource as E, UnknownRecordKindError as En, parseSecretRef as Er, StreamSourceEntrySchema$1 as Et, DEVICE_CHILDREN_BATCH_MAX as F, RECORD_ID_MAX_LENGTH as Fn, collectHydratedFieldValues as Fr, SETTINGS_ARRAY_ADOPTS_PREFIX as Ft, DEVICE_STATUS_METHOD as G, createSecretsAccess as Gn, isSecretMarkerLike as Gr, RecordFieldPathSchema as Gt, adminUiCapability as H, RECORD_SWEEP_INTERVAL_MS as Hn, isSecretClear as Hr, entryBody as Ht, CALLER_STAMPED_CAPABILITIES as I, RECORD_MAX_DATA_BYTES as In, dehydrateConfigField as Ir, parseSettingsArrayAdoptsFrom as It, PROVIDER_PIN_FIELD as J, forgetKnownSecret as Jn, REDACTED_SECRET as Jr, RecordKindNameSchema as Jt, HISTORY_DEFAULT_MIN_INTERVAL_MS as K, MIN_SCRUBBED_LENGTH as Kn, makeSecretMarker as Kr, RecordIndexSchema as Kt, withoutCallerStamp as L, RECORD_MAX_INDEXES as Ln, dehydrateSchema as Lr, settingsArrayAdoptsFrom as Lt, RawStateResultSchema as M, RECORD_DATABASES as Mn, WELL_KNOWN_TABS as Mr, parseProfileBrokerId as Mt, deviceOpsCapability as N, RECORD_DEFAULT_MAX_DATA_BYTES as Nn, WELL_KNOWN_TAB_MAP as Nr, selectAssignedProfileSlots as Nt, DEFAULT_TOKEN_EXPIRY as O, recordsErrorFromMessage as On, createDurableState as Or, SubscribeAudioChunksInputSchema as Ot, viewerUiCapability as P, RECORD_DELETE_BATCH as Pn, collectHydratedFieldEntries as Pr, makeInMemoryRecords as Pt, method as Q, shortSecretRefHash as Qn, isSecretConfigField as Qr, defineRecordKinds as Qt, customAction as R, RECORD_MAX_INDEX_FIELDS as Rn, hydrateSchema as Rr, SETTINGS_BROKERS_ADOPTS_PREFIX as Rt, invokeTrpcLeaf as S, RecordUniqueViolationError as Sn, formatSecretScope as Sr, FrameHandleSchema as St, createLazyTrpcSource as T, UnindexedFilterError as Tn, normalizeSecretOwner as Tr, ProfileSlotStatusSchema as Tt, DEFAULT_RUNTIME_STATE_DURABILITY as U, resolveSecretViewsIn as Un, isSecretFieldView as Ur, createRecordsAccess as Ut, deviceCustomAction as V, RECORD_SETTINGS_MAX_ROWS as Vn, classifySecretWrite as Vr, defineEntryKind as Vt, DEVICE_SETTINGS_CONTRIBUTION_METHODS as W, REVALIDATE_AFTER_MS as Wn, isSecretMarker as Wr, EntryDescriptorSchema as Wt, expandCapMethods as X, registerKnownSecret as Xn, collectSecretConfigKeys as Xr, assertValidDeclaration as Xt, event as Y, knownSecretCount as Yn, collectKeychainStoredKeys as Yr, RecordRetentionSchema as Yt, isDeviceConfigCap as Z, scrubKnownSecrets as Zn, isKeychainStoredField as Zr, declarationsOf as Zt, readErrorI18n as _, PlaintextSecretError as _n, resolveSecretMarkers as _r, CamProfileSchema as _t, asJsonArray as a, recordSecretRef as an, SHARE_VIEW_KINDS as ar, toNodeId as at, isDeviceScopedCap as b, RecordSecretUnavailableError as bn, arrayItemFieldPath as br, CameraStreamSchema as bt, asString as c, collectZodSecretPaths as cn, classifyStoreError as cr, ReadinessTimeoutError as ct, parseJsonUnknown as d, BatchTooLargeError as dn, parseSecretStatePath as dr, scopeKey as dt, schemaDeclaresAnyField as ei, collectSecretLeaves as en, PEER_BYTES_MAX_OUTSTANDING as er, resolveCapMount as et, hfModelUrl as f, DeclarationRefusedError as fn, secretTreeFromPaths as fr, AudioChunkFormatSchema as ft, ErrorI18nPayloadSchema as g, NoCallerError as gn, isSecretRefOwnedBy as gr, CAM_PROFILE_ORDER as gt, ErrorCodeSchema as h, InvalidRecordError as hn, collectSecretMarkerRefs as hr, BrokerStatusSchema as ht, asBoolean as i, isAudioChunkFormat as ii, recordSecretCollection as in, DATAPLANE_SECRET_HEADER as ir, readNodePin as it, RUNTIME_DEFAULTS as j, RECORD_CLASSES as jn, isEvent as jr, makeSourceBrokerId as jt, HF_BASE_URL as k, RECORD_BATCH_MAX as kn, createEvent as kr, SubscribeAudioChunksResultSchema as kt, parseJsonArray as l, isZodSecret as ln, normalizeAddonInitResult as lr, emitDownForOwnedCaps as lt, CamstackError as m, ForeignSecretMarkerError as mn, KeychainWriteRefusedError as mr, BrokerStatsSchema as mt, sleepCancellable as n, audioChunkBytesPerSample as ni, parseSecretPath as nn, PEER_BYTES_TICKET_TTL_MS as nr, CAP_NODE_PIN_CONTEXT_KEY as nt, asJsonObject as o, secretArrayPrefixes as on, DisposerChain as or, MODEL_FORMATS as ot, BOOT_RECOVERY_BACKOFF_MS as p, FilterRequiredError as pn, secretTreeFromSchema as pr, AudioStreamPickSchema as pt, HISTORY_UNIT_LABELS as q, clearKnownSecrets as qn, toSecretFieldView as qr, RecordKindDeclarationSchema as qt, maskUrlCredentials as r, expandAudioChunkToF32le as ri, recordArrayItemPath as rn, PeerBytesTicketSchema as rr, nodePin as rt, asNumber as s, SECRET_META as sn, BaseAddon as sr, ReadinessRegistry as st, sleep as t, AUDIO_CHUNK_FORMATS as ti, mapSecretLeaves as tn, PEER_BYTES_STALL_MS as tr, systemMethod as tt, parseJsonObject as u, AdoptionPendingError as un, mergeSecretStatePaths as ur, readinessKey as ut, userError as v, RECORDS_ERROR_CODES as vn, transformSecretWrite as vr, CamStreamKindSchema as vt, createEventBusSliceSource as w, RevConflictError as wn, isSecretRef as wr, ProfileSlotSchema as wt, createDeviceProxy as x, RecordTooLargeError as xn, buildSecretRef as xr, DecodedAudioChunkSchema as xt, DEVICE_SCOPED_CAPS as y, RecordNotFoundError as yn, SECRET_REF_SCHEME as yr, CamStreamResolutionSchema as yt, defineCustomActions as z, RECORD_QUERY_MAX as zn, resolveHydratedFieldValue as zr, parseSettingsBrokersAdoptsFrom as zt };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camstack/types",
3
- "version": "1.2.381",
3
+ "version": "1.2.382",
4
4
  "description": "Shared types, interfaces, and model catalogs for the CamStack detection ecosystem",
5
5
  "keywords": [
6
6
  "camstack",