@camstack/types 1.2.68 → 1.2.70

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.
package/dist/index.js CHANGED
@@ -1,6 +1,6 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
2
  const require_event_category = require("./event-category-DxZbWydC.js");
3
- const require_sleep = require("./sleep-Dh1EJSqF.js");
3
+ const require_sleep = require("./sleep-YuacOD41.js");
4
4
  const require_canonical_hash = require("./canonical-hash-DNV8S5ET.js");
5
5
  const require_enums = require("./enums.js");
6
6
  const require_err_msg = require("./err-msg-COpsHMw2.js");
@@ -12068,7 +12068,16 @@ var NcScheduleSchema = zod.z.object({
12068
12068
  });
12069
12069
  /** Fuzzy plate matcher — OCR noise makes exact match useless (spec row 12/13). */
12070
12070
  var NcPlateMatcherSchema = zod.z.object({
12071
- values: zod.z.array(zod.z.string().min(1)).min(1),
12071
+ /**
12072
+ * Plate texts (or gallery vehicle names) to match. EMPTY = **any plate the
12073
+ * pipeline could read** — the plate half of "no selection = no narrowing",
12074
+ * and the switch that says this rule is about vehicles that were IDENTIFIED
12075
+ * rather than merely seen. A subject carrying no plate still fails.
12076
+ *
12077
+ * The `.min(1)` this used to carry made that state unauthorable; nothing has
12078
+ * ever persisted an empty list, so widening it cannot change an existing rule.
12079
+ */
12080
+ values: zod.z.array(zod.z.string().min(1)),
12072
12081
  /** Max Levenshtein distance after normalization (uppercase alphanumeric). */
12073
12082
  maxDistance: zod.z.number().int().min(0).max(3).default(1)
12074
12083
  });
@@ -12330,18 +12339,47 @@ var NcConditionsSchema = zod.z.object({
12330
12339
  */
12331
12340
  labelEquals: zod.z.array(zod.z.string().min(1)).optional(),
12332
12341
  /**
12333
- * Identity matcher. P1 boundary: matched against the record's collapsed
12334
- * `label` (the identity display name propagated by the face pipeline) —
12335
- * identity-ID matching rides in P2 when identity ids reach the record.
12342
+ * KNOWN FACES the rule's identity scope, and the switch that says the rule
12343
+ * is about recognised people at all.
12344
+ *
12345
+ * Three states, and the empty one is the point:
12346
+ *
12347
+ * | value | meaning |
12348
+ * | --- | --- |
12349
+ * | absent | the rule does not care who it is; an unrecognised person matches |
12350
+ * | `[]` | **only known faces** — any identity in the gallery, nobody in particular |
12351
+ * | a list | only these identities |
12352
+ *
12353
+ * `[]` is the repo-wide "no selection = no narrowing" reading (an absent
12354
+ * `devices` list is every device), applied one level down: the operator has
12355
+ * turned the face scope ON and narrowed it to nothing, which is every known
12356
+ * face. No second field states the same thing — a switch that can disagree
12357
+ * with the list under it is worse than no switch (D62).
12358
+ *
12359
+ * MEMBERS ARE FACE-GALLERY `Identity.id`s (uuid), not display names. A name is
12360
+ * renameable, and a rule authored on "Gianluca" went silently dark the moment
12361
+ * the operator fixed the spelling. The id reaches the record on
12362
+ * `LabelAttribution.identityId`; the name is what the editor shows and what
12363
+ * `{{label}}` renders.
12364
+ *
12365
+ * Rules written before this carry NAMES, and are resolved to ids lazily at
12366
+ * load (`NcRuleStore.load`) against the live gallery — a name nothing answers
12367
+ * for is left as it stands and reported, never dropped. The engine also
12368
+ * accepts a display-name hit as a compatibility leg, so a rule whose
12369
+ * migration could not resolve keeps matching exactly what it matched before.
12336
12370
  */
12337
12371
  identities: zod.z.array(zod.z.string().min(1)).optional(),
12338
- /** Fuzzy plate matcher against the record's `label` (plate text). */
12372
+ /**
12373
+ * KNOWN PLATES / VEHICLES — the plate mirror of {@link identities}, including
12374
+ * the empty-list reading: `values: []` is "any plate the OCR could read",
12375
+ * a non-empty list is those plates (fuzzily). See {@link NcPlateMatcherSchema}.
12376
+ */
12339
12377
  plates: NcPlateMatcherSchema.optional(),
12340
12378
  /**
12341
- * Identity EXCLUDE — mirror of {@link identities} with `notIn` semantics.
12342
- * Same P1 boundary: matched against the record's collapsed `label` (the
12343
- * identity display name). A record with NO label passes (nothing to
12344
- * exclude), unlike the include variant which fails on an absent label.
12379
+ * Identity EXCLUDE — mirror of {@link identities} with `notIn` semantics, and
12380
+ * the same id members and the same lazy name→id migration. A record with NO
12381
+ * identity passes (nothing to exclude), unlike the include variant which
12382
+ * fails on an unrecognised subject. An EMPTY list excludes nobody.
12345
12383
  */
12346
12384
  identitiesExclude: zod.z.array(zod.z.string().min(1)).optional(),
12347
12385
  /**
@@ -12734,7 +12772,37 @@ var NcRuleInputSchema = zod.z.object({
12734
12772
  * a rule that predates the gate must keep delivering byte-for-byte as it
12735
12773
  * did, and absent is the only way to say that without a migration.
12736
12774
  */
12737
- confirm: NcConfirmSchema.optional()
12775
+ confirm: NcConfirmSchema.optional(),
12776
+ /**
12777
+ * WAIT for face/plate recognition before saying anything.
12778
+ *
12779
+ * A notification's TEXT is frozen at enqueue and its media is re-resolved at
12780
+ * send; the identity is neither. A face is confirmed after `confirmFrames`
12781
+ * agreeing observations — p50 **11.4 s** after the track was first seen,
12782
+ * measured on this hub — and an `immediate` rule enqueues on the first object
12783
+ * event, seconds before that. So "Gianluca è arrivato" is unsayable on the
12784
+ * immediate path, and no amount of media re-resolution fixes a sentence.
12785
+ *
12786
+ * Only two honest answers exist, and this flag picks between them. It has
12787
+ * effect ONLY on a rule that declares a recognition scope
12788
+ * ({@link NcConditions.identities} or {@link NcConditions.plates}) — on any
12789
+ * other rule there is nothing to wait for and the flag is inert.
12790
+ *
12791
+ * | value | what happens |
12792
+ * | --- | --- |
12793
+ * | `true` | the rule stops firing on the object event and fires at TRACK CLOSE instead, once, with the name — later, and complete |
12794
+ * | absent / `false` | it fires at once WITHOUT the name, and if recognition lands before the track closes a SECOND, "…is Gianluca" notification follows (one per track, per rule, per target) |
12795
+ *
12796
+ * `.optional()` and deliberately NOT `.default()`: a Zod default does not run
12797
+ * on the addon cap path, and absent has to keep meaning exactly what every
12798
+ * rule authored before this field meant.
12799
+ *
12800
+ * The cost of `true` is stated here because the editor states it too: a rule
12801
+ * that waits also inherits track-close SEMANTICS — its `zones` condition
12802
+ * tests every zone the track visited and a `crossing` condition can no longer
12803
+ * be satisfied, because a closed track carries no crossing.
12804
+ */
12805
+ waitForEnhancement: zod.z.boolean().optional()
12738
12806
  });
12739
12807
  /**
12740
12808
  * Partial patch for `updateRule` — any subset of the input fields, plus the
@@ -13078,32 +13146,32 @@ var NC_CONDITION_CATALOG = [
13078
13146
  {
13079
13147
  id: "identities",
13080
13148
  group: "label",
13081
- label: "Identities",
13149
+ label: "Known faces",
13082
13150
  valueType: "stringList",
13083
13151
  operator: "in",
13084
13152
  appliesTo: ["immediate", "track-end"],
13085
13153
  phase: "P1",
13086
- description: "P1: matched against the identity display name on the record label."
13154
+ description: "Only recognised people. Selecting NOBODY means every identity in the face gallery; selecting some narrows to those. Matched on the gallery id, so renaming a person does not break the rule. On immediate delivery the name is not known yet when the notification is enqueued — see the rule’s \"wait for recognition\" switch."
13087
13155
  },
13088
13156
  {
13089
13157
  id: "plates",
13090
13158
  group: "label",
13091
- label: "License plates",
13159
+ label: "Known plates",
13092
13160
  valueType: "plateMatcher",
13093
13161
  operator: "fuzzyIn",
13094
13162
  appliesTo: ["immediate", "track-end"],
13095
13163
  phase: "P1",
13096
- description: "Levenshtein-tolerant match against the plate text."
13164
+ description: "Only vehicles whose plate was read. Selecting NO plate means any readable plate; listed plates are matched Levenshtein-tolerantly, because OCR noise makes an exact match useless."
13097
13165
  },
13098
13166
  {
13099
13167
  id: "identitiesExclude",
13100
13168
  group: "label",
13101
- label: "Excluded identities",
13169
+ label: "Excluded faces",
13102
13170
  valueType: "stringList",
13103
13171
  operator: "notIn",
13104
13172
  appliesTo: ["immediate", "track-end"],
13105
13173
  phase: "P1",
13106
- description: "Veto by identity display name (mirror of Identities; absent label passes)."
13174
+ description: "Veto by identity (mirror of Known faces, same gallery ids). A subject nobody recognised passes — there is nothing to exclude."
13107
13175
  },
13108
13176
  {
13109
13177
  id: "minLabelConfidence",
@@ -13758,7 +13826,87 @@ var MethodAccessSchema = zod.z.enum([
13758
13826
  var AllowedProviderSchema = zod.z.union([zod.z.literal("*"), zod.z.array(zod.z.string())]);
13759
13827
  var AllowedDevicesSchema = zod.z.record(zod.z.string(), zod.z.union([zod.z.literal("*"), zod.z.array(zod.z.string())]));
13760
13828
  var CapScopeSchema = zod.z.enum(["device", "system"]);
13761
- var TokenScopeSchema = zod.z.discriminatedUnion("type", [
13829
+ /**
13830
+ * DeviceSelector (scope model v3 — 2026-08-12).
13831
+ *
13832
+ * A `device` grant no longer carries a frozen list of deviceIds. It carries
13833
+ * a SELECTOR the matcher resolves against the live fleet, so the grant can be
13834
+ * DYNAMIC: a `types:['camera']` selector automatically covers a camera added
13835
+ * AFTER the grant was minted — no re-grant, no re-login.
13836
+ *
13837
+ * - `all` — every device in the deployment. The broad viewer/operator
13838
+ * lever without a `category` grant (a `category` grant also covers device
13839
+ * caps that carry no deviceId; `all` is specifically the device set).
13840
+ * - `ids` — an explicit deviceId list. This is what a v2 `device:[…]`
13841
+ * grant migrates to (see {@link TokenScopeSchema}); STATIC — a new camera
13842
+ * is NOT covered until the grant is edited.
13843
+ * - `types` — every device of a `DeviceType` (e.g. every `camera`).
13844
+ * DYNAMIC. A device that changes type, or a new device of the type,
13845
+ * re-resolves on the next request.
13846
+ * - `locations` — every device whose operator-assigned `location` label is
13847
+ * in the set (e.g. "Garden", "Front door"). DYNAMIC. A device with a
13848
+ * null/unset location matches NO `locations` selector.
13849
+ */
13850
+ var DeviceSelectorSchema = zod.z.discriminatedUnion("kind", [
13851
+ zod.z.object({ kind: zod.z.literal("all") }),
13852
+ zod.z.object({
13853
+ kind: zod.z.literal("ids"),
13854
+ ids: zod.z.array(zod.z.number().int()).min(1)
13855
+ }),
13856
+ zod.z.object({
13857
+ kind: zod.z.literal("types"),
13858
+ types: zod.z.array(zod.z.enum(require_sleep.DeviceType)).min(1)
13859
+ }),
13860
+ zod.z.object({
13861
+ kind: zod.z.literal("locations"),
13862
+ locations: zod.z.array(zod.z.string().min(1)).min(1)
13863
+ })
13864
+ ]);
13865
+ var DeviceTokenScopeSchema = zod.z.object({
13866
+ type: zod.z.literal("device"),
13867
+ /** The device SET this grant covers — resolved against the live fleet. */
13868
+ selector: DeviceSelectorSchema,
13869
+ access: zod.z.array(MethodAccessSchema).min(1),
13870
+ /**
13871
+ * Whether a grant on a PARENT device transparently covers its accessory
13872
+ * CHILDREN (siren / floodlight / PIR) via the persisted-parentage walk.
13873
+ * Direction is parent → children ONLY.
13874
+ *
13875
+ * Absent → the matcher DERIVES it from the access flavour: `view`
13876
+ * inherits (a camera viewer sees the camera's accessories), `create` /
13877
+ * `delete` do NOT (actuating/removing a child is an explicit act the
13878
+ * operator must grant on the child, not inherit from the parent). Set it
13879
+ * explicitly to override that default per grant.
13880
+ */
13881
+ includeLinked: zod.z.boolean().optional()
13882
+ });
13883
+ /**
13884
+ * v2 → v3 lazy migration. A pre-v3 `device` grant carried
13885
+ * `targets: string[]` (stringified deviceIds); it rewrites to the equivalent
13886
+ * `selector: {kind:'ids', ids}`. Applied as a `preprocess` so it runs on
13887
+ * EVERY parse path — stored records AND the JWT-carried scope arrays
13888
+ * normalised at the request boundary ({@link normalizeTokenScopes} in
13889
+ * `device-selector.ts`). Chosen over a one-time DB migration because a
13890
+ * migration cannot reach a JWT already in a client's hands; parse-time
13891
+ * migration covers both without a flag day. No cast — the raw object is read
13892
+ * through `Reflect.get` (its static type is `unknown`).
13893
+ */
13894
+ function migrateLegacyTokenScope(raw) {
13895
+ if (raw === null || typeof raw !== "object" || Array.isArray(raw)) return raw;
13896
+ if (Reflect.get(raw, "type") !== "device") return raw;
13897
+ if (Reflect.get(raw, "selector") !== void 0) return raw;
13898
+ const targets = Reflect.get(raw, "targets");
13899
+ if (!Array.isArray(targets)) return raw;
13900
+ return {
13901
+ type: "device",
13902
+ selector: {
13903
+ kind: "ids",
13904
+ ids: targets.map((t) => typeof t === "string" ? Number(t) : t).filter((n) => typeof n === "number" && Number.isInteger(n))
13905
+ },
13906
+ access: Reflect.get(raw, "access")
13907
+ };
13908
+ }
13909
+ var TokenScopeSchema = zod.z.preprocess(migrateLegacyTokenScope, zod.z.discriminatedUnion("type", [
13762
13910
  zod.z.object({
13763
13911
  type: zod.z.literal("category"),
13764
13912
  target: CapScopeSchema,
@@ -13774,18 +13922,8 @@ var TokenScopeSchema = zod.z.discriminatedUnion("type", [
13774
13922
  target: zod.z.string(),
13775
13923
  access: zod.z.array(MethodAccessSchema).min(1)
13776
13924
  }),
13777
- zod.z.object({
13778
- type: zod.z.literal("device"),
13779
- /**
13780
- * One or more deviceIds (serialised as strings for wire-format
13781
- * consistency with the rest of the union). Matcher accepts if
13782
- * `input.deviceId` ∈ `targets`. Array shape avoids the row-explosion
13783
- * of one scope-per-device when granting access to a set of cameras.
13784
- */
13785
- targets: zod.z.array(zod.z.string()).min(1),
13786
- access: zod.z.array(MethodAccessSchema).min(1)
13787
- })
13788
- ]);
13925
+ DeviceTokenScopeSchema
13926
+ ]));
13789
13927
  var UserRecordSchema = zod.z.object({
13790
13928
  id: zod.z.string(),
13791
13929
  username: zod.z.string(),
@@ -14264,7 +14402,21 @@ var LabelTierSchema = zod.z.union([zod.z.literal(1), zod.z.literal(2)]);
14264
14402
  var LabelAttributionSchema = zod.z.object({
14265
14403
  stepId: zod.z.string(),
14266
14404
  modelId: zod.z.string().optional(),
14267
- decidedAt: zod.z.number()
14405
+ decidedAt: zod.z.number(),
14406
+ /**
14407
+ * The GALLERY id behind a recognised tier-2 label — a face-gallery
14408
+ * `Identity.id` or a plate-gallery `Vehicle.id` (both `randomUUID`).
14409
+ *
14410
+ * The text alone is a DISPLAY NAME, and a display name is renameable: a
14411
+ * notification rule authored on "Gianluca" stopped matching the moment the
14412
+ * operator fixed the spelling in the gallery, and nothing said so. The id is
14413
+ * the thing that does not move, so it is what a rule matches on
14414
+ * (`NcConditions.identities`) and the text is what a human is shown.
14415
+ *
14416
+ * Absent when the label names no gallery row — a plate the OCR read but no
14417
+ * vehicle claims, a sub-class, a species, any tier-1 value.
14418
+ */
14419
+ identityId: zod.z.string().optional()
14268
14420
  });
14269
14421
  /**
14270
14422
  * The TIERED label model (roadmap 4g), spread into `TrackSchema` and
@@ -23387,7 +23539,41 @@ var intercomCapability = {
23387
23539
  status: {
23388
23540
  schema: IntercomStatusSchema,
23389
23541
  kind: "command-driven"
23390
- }
23542
+ },
23543
+ /**
23544
+ * Runtime-state slice — mirrored by the kernel.
23545
+ *
23546
+ * The cap declared `status` and nothing else, so the only two sources an
23547
+ * exporter has for a value — the `device.state-changed` slice event and the
23548
+ * `deviceState.getAllSnapshots` snapshot, both built from runtime state —
23549
+ * carried nothing for `intercom`. A talk-back entity in Home Assistant would
23550
+ * have been published and never received a value, which is the defect the
23551
+ * export's two classification tables exist to prevent (177 of them, once), so
23552
+ * `intercom` was excluded rather than exported.
23553
+ *
23554
+ * The shape is the status shape: there is exactly one truth about talk-back
23555
+ * and duplicating it into a second schema is how two halves of one capability
23556
+ * come to disagree. Providers write it through
23557
+ * `this.runtimeState.setCapState('intercom', …)` at the four points that open
23558
+ * and close a session, and seed it at registration so the slice exists before
23559
+ * the first session rather than after it.
23560
+ *
23561
+ * **Bound, named rather than hidden:** `talking` mirrors the provider's own
23562
+ * session handle, so a session torn down by a transport death that never
23563
+ * reaches `stopSession` / `endTalkSession` leaves it latched until the next
23564
+ * session or the next restart. That is why the slice is `session` and not
23565
+ * `restored` — a restart must never restore "talking".
23566
+ */
23567
+ runtimeState: IntercomStatusSchema,
23568
+ /**
23569
+ * Runtime-state durability: **session** — `talking` describes a live audio
23570
+ * session, which by definition does not survive the process that held it.
23571
+ * Restoring it would publish a camera as talking to nobody.
23572
+ *
23573
+ * See `RuntimeStateDurability`. Enforced by
23574
+ * `scripts/check-runtime-state-durability.ts`.
23575
+ */
23576
+ durability: "session"
23391
23577
  };
23392
23578
  //#endregion
23393
23579
  //#region src/capabilities/lawn-mower-control.cap.ts
@@ -26651,7 +26837,7 @@ var recordingCapability = {
26651
26837
  toMs: zod.z.number()
26652
26838
  }), RecordingAvailabilitySchema, {
26653
26839
  kind: "query",
26654
- auth: "admin"
26840
+ auth: "protected"
26655
26841
  }),
26656
26842
  /** Which calendar days in [fromMs,toMs) have ≥1 recorded segment, bucketed by
26657
26843
  * the client's local day (`tzOffsetMinutes` = minutes to add to UTC). Drives
@@ -26663,7 +26849,7 @@ var recordingCapability = {
26663
26849
  tzOffsetMinutes: zod.z.number()
26664
26850
  }), RecordingDaysSchema, {
26665
26851
  kind: "query",
26666
- auth: "admin"
26852
+ auth: "protected"
26667
26853
  }),
26668
26854
  getPlaybackManifest: require_sleep.method(zod.z.object({
26669
26855
  deviceId: zod.z.number(),
@@ -26671,7 +26857,7 @@ var recordingCapability = {
26671
26857
  toMs: zod.z.number()
26672
26858
  }), RecordingManifestSchema, {
26673
26859
  kind: "query",
26674
- auth: "admin"
26860
+ auth: "protected"
26675
26861
  }),
26676
26862
  getStorageUsage: require_sleep.method(zod.z.object({}), RecordingStorageUsageSchema, {
26677
26863
  kind: "query",
@@ -29648,6 +29834,7 @@ var DEVICE_LOCAL_STATE_CAPS = {
29648
29834
  humiditySensor: humiditySensorCapability,
29649
29835
  image: imageCapability,
29650
29836
  imageSettings: imageSettingsCapability,
29837
+ intercom: intercomCapability,
29651
29838
  lawnMowerControl: lawnMowerControlCapability,
29652
29839
  lockControl: lockControlCapability,
29653
29840
  mediaPlayer: mediaPlayerCapability,
@@ -38763,6 +38950,1808 @@ var SYSTEM_CAP_NAMES = [
38763
38950
  "viewer-ui"
38764
38951
  ];
38765
38952
  //#endregion
38953
+ //#region src/generated/method-device-selectors.ts
38954
+ var METHOD_DEVICE_SELECTORS = Object.freeze({
38955
+ "accessories.setChildHidden": [{
38956
+ name: "childDeviceId",
38957
+ form: "single",
38958
+ optional: false
38959
+ }, {
38960
+ name: "deviceId",
38961
+ form: "single",
38962
+ optional: false
38963
+ }],
38964
+ "addonSettings.getDeviceSettings": [{
38965
+ name: "deviceId",
38966
+ form: "single",
38967
+ optional: false
38968
+ }],
38969
+ "addonSettings.updateDeviceSettings": [{
38970
+ name: "deviceId",
38971
+ form: "single",
38972
+ optional: false
38973
+ }],
38974
+ "alarmPanel.arm": [{
38975
+ name: "deviceId",
38976
+ form: "single",
38977
+ optional: false
38978
+ }],
38979
+ "alarmPanel.disarm": [{
38980
+ name: "deviceId",
38981
+ form: "single",
38982
+ optional: false
38983
+ }],
38984
+ "alarmPanel.trigger": [{
38985
+ name: "deviceId",
38986
+ form: "single",
38987
+ optional: false
38988
+ }],
38989
+ "audioAnalysis.resolveDeviceSettings": [{
38990
+ name: "deviceId",
38991
+ form: "single",
38992
+ optional: false
38993
+ }],
38994
+ "audioAnalyzer.classify": [{
38995
+ name: "deviceId",
38996
+ form: "single",
38997
+ optional: true
38998
+ }],
38999
+ "audioMetrics.getCurrentSnapshot": [{
39000
+ name: "deviceId",
39001
+ form: "single",
39002
+ optional: false
39003
+ }],
39004
+ "audioMetrics.getHistory": [{
39005
+ name: "deviceId",
39006
+ form: "single",
39007
+ optional: false
39008
+ }],
39009
+ "automationControl.disable": [{
39010
+ name: "deviceId",
39011
+ form: "single",
39012
+ optional: false
39013
+ }],
39014
+ "automationControl.enable": [{
39015
+ name: "deviceId",
39016
+ form: "single",
39017
+ optional: false
39018
+ }],
39019
+ "automationControl.trigger": [{
39020
+ name: "deviceId",
39021
+ form: "single",
39022
+ optional: false
39023
+ }],
39024
+ "battery.wakeForStream": [{
39025
+ name: "deviceId",
39026
+ form: "single",
39027
+ optional: false
39028
+ }],
39029
+ "brightness.setBrightness": [{
39030
+ name: "deviceId",
39031
+ form: "single",
39032
+ optional: false
39033
+ }],
39034
+ "button.press": [{
39035
+ name: "deviceId",
39036
+ form: "single",
39037
+ optional: false
39038
+ }],
39039
+ "cameraCredentials.getCredentials": [{
39040
+ name: "deviceId",
39041
+ form: "single",
39042
+ optional: false
39043
+ }],
39044
+ "cameraStreams.getBrokerStreams": [{
39045
+ name: "deviceId",
39046
+ form: "single",
39047
+ optional: false
39048
+ }],
39049
+ "cameraStreams.getCameraStreams": [{
39050
+ name: "deviceId",
39051
+ form: "single",
39052
+ optional: false
39053
+ }],
39054
+ "cameraStreams.getProfileRtspEntries": [{
39055
+ name: "deviceId",
39056
+ form: "single",
39057
+ optional: false
39058
+ }],
39059
+ "cameraStreams.getRtspEntries": [{
39060
+ name: "deviceId",
39061
+ form: "single",
39062
+ optional: false
39063
+ }],
39064
+ "cameraStreams.pickStream": [{
39065
+ name: "deviceId",
39066
+ form: "single",
39067
+ optional: false
39068
+ }],
39069
+ "climateControl.setFanMode": [{
39070
+ name: "deviceId",
39071
+ form: "single",
39072
+ optional: false
39073
+ }],
39074
+ "climateControl.setMode": [{
39075
+ name: "deviceId",
39076
+ form: "single",
39077
+ optional: false
39078
+ }],
39079
+ "climateControl.setPreset": [{
39080
+ name: "deviceId",
39081
+ form: "single",
39082
+ optional: false
39083
+ }],
39084
+ "climateControl.setSwingHorizontal": [{
39085
+ name: "deviceId",
39086
+ form: "single",
39087
+ optional: false
39088
+ }],
39089
+ "climateControl.setSwingVertical": [{
39090
+ name: "deviceId",
39091
+ form: "single",
39092
+ optional: false
39093
+ }],
39094
+ "climateControl.setTarget": [{
39095
+ name: "deviceId",
39096
+ form: "single",
39097
+ optional: false
39098
+ }],
39099
+ "climateControl.setTargetHumidity": [{
39100
+ name: "deviceId",
39101
+ form: "single",
39102
+ optional: false
39103
+ }],
39104
+ "climateControl.setTargetRange": [{
39105
+ name: "deviceId",
39106
+ form: "single",
39107
+ optional: false
39108
+ }],
39109
+ "color.setColor": [{
39110
+ name: "deviceId",
39111
+ form: "single",
39112
+ optional: false
39113
+ }],
39114
+ "consumables.reset": [{
39115
+ name: "deviceId",
39116
+ form: "single",
39117
+ optional: false
39118
+ }],
39119
+ "control.setValue": [{
39120
+ name: "deviceId",
39121
+ form: "single",
39122
+ optional: false
39123
+ }],
39124
+ "cover.close": [{
39125
+ name: "deviceId",
39126
+ form: "single",
39127
+ optional: false
39128
+ }],
39129
+ "cover.open": [{
39130
+ name: "deviceId",
39131
+ form: "single",
39132
+ optional: false
39133
+ }],
39134
+ "cover.setPosition": [{
39135
+ name: "deviceId",
39136
+ form: "single",
39137
+ optional: false
39138
+ }],
39139
+ "cover.setTiltPosition": [{
39140
+ name: "deviceId",
39141
+ form: "single",
39142
+ optional: false
39143
+ }],
39144
+ "cover.stop": [{
39145
+ name: "deviceId",
39146
+ form: "single",
39147
+ optional: false
39148
+ }],
39149
+ "dayNight.getOptions": [{
39150
+ name: "deviceId",
39151
+ form: "single",
39152
+ optional: false
39153
+ }],
39154
+ "dayNight.setSettings": [{
39155
+ name: "deviceId",
39156
+ form: "single",
39157
+ optional: false
39158
+ }],
39159
+ "decoder.createSession": [{
39160
+ name: "deviceId",
39161
+ form: "single",
39162
+ optional: true
39163
+ }],
39164
+ "deviceAdoption.release": [{
39165
+ name: "camDeviceId",
39166
+ form: "single",
39167
+ optional: false
39168
+ }],
39169
+ "deviceAdoption.resync": [{
39170
+ name: "camDeviceId",
39171
+ form: "single",
39172
+ optional: false
39173
+ }],
39174
+ "deviceDiscovery.adoptDevice": [{
39175
+ name: "deviceId",
39176
+ form: "single",
39177
+ optional: false
39178
+ }],
39179
+ "deviceDiscovery.listDiscovered": [{
39180
+ name: "deviceId",
39181
+ form: "single",
39182
+ optional: false
39183
+ }],
39184
+ "deviceDiscovery.refreshDiscovery": [{
39185
+ name: "deviceId",
39186
+ form: "single",
39187
+ optional: false
39188
+ }],
39189
+ "deviceDiscovery.releaseDevice": [{
39190
+ name: "childDeviceId",
39191
+ form: "single",
39192
+ optional: false
39193
+ }, {
39194
+ name: "deviceId",
39195
+ form: "single",
39196
+ optional: false
39197
+ }],
39198
+ "deviceManager.adoptionRelease": [{
39199
+ name: "camDeviceId",
39200
+ form: "single",
39201
+ optional: false
39202
+ }],
39203
+ "deviceManager.adoptionResync": [{
39204
+ name: "camDeviceId",
39205
+ form: "single",
39206
+ optional: false
39207
+ }],
39208
+ "deviceManager.applyInitialMeta": [{
39209
+ name: "deviceId",
39210
+ form: "single",
39211
+ optional: false
39212
+ }, {
39213
+ name: "linkDeviceId",
39214
+ form: "single",
39215
+ optional: true
39216
+ }],
39217
+ "deviceManager.disable": [{
39218
+ name: "deviceId",
39219
+ form: "single",
39220
+ optional: false
39221
+ }],
39222
+ "deviceManager.enable": [{
39223
+ name: "deviceId",
39224
+ form: "single",
39225
+ optional: false
39226
+ }],
39227
+ "deviceManager.getBindings": [{
39228
+ name: "deviceId",
39229
+ form: "single",
39230
+ optional: false
39231
+ }],
39232
+ "deviceManager.getChildren": [{
39233
+ name: "parentDeviceId",
39234
+ form: "single",
39235
+ optional: false
39236
+ }],
39237
+ "deviceManager.getConfigSchema": [{
39238
+ name: "deviceId",
39239
+ form: "single",
39240
+ optional: false
39241
+ }],
39242
+ "deviceManager.getDevice": [{
39243
+ name: "deviceId",
39244
+ form: "single",
39245
+ optional: false
39246
+ }],
39247
+ "deviceManager.getDeviceAggregate": [{
39248
+ name: "deviceId",
39249
+ form: "single",
39250
+ optional: false
39251
+ }],
39252
+ "deviceManager.getDeviceLiveInfoAggregate": [{
39253
+ name: "deviceId",
39254
+ form: "single",
39255
+ optional: false
39256
+ }],
39257
+ "deviceManager.getDeviceSettingsAggregate": [{
39258
+ name: "deviceId",
39259
+ form: "single",
39260
+ optional: false
39261
+ }],
39262
+ "deviceManager.getDeviceStatusAggregate": [{
39263
+ name: "deviceId",
39264
+ form: "single",
39265
+ optional: false
39266
+ }],
39267
+ "deviceManager.getDeviceStatusAggregateBatch": [{
39268
+ name: "deviceIds",
39269
+ form: "array",
39270
+ optional: false
39271
+ }],
39272
+ "deviceManager.getLinkedDevices": [{
39273
+ name: "deviceId",
39274
+ form: "single",
39275
+ optional: false
39276
+ }],
39277
+ "deviceManager.getSettingsSchema": [{
39278
+ name: "deviceId",
39279
+ form: "single",
39280
+ optional: false
39281
+ }],
39282
+ "deviceManager.getStreamProfileMap": [{
39283
+ name: "deviceId",
39284
+ form: "single",
39285
+ optional: false
39286
+ }],
39287
+ "deviceManager.getStreamSources": [{
39288
+ name: "deviceId",
39289
+ form: "single",
39290
+ optional: false
39291
+ }],
39292
+ "deviceManager.getWireableFields": [{
39293
+ name: "deviceId",
39294
+ form: "single",
39295
+ optional: false
39296
+ }],
39297
+ "deviceManager.loadConfig": [{
39298
+ name: "deviceId",
39299
+ form: "single",
39300
+ optional: false
39301
+ }],
39302
+ "deviceManager.loadMeta": [{
39303
+ name: "deviceId",
39304
+ form: "single",
39305
+ optional: false
39306
+ }],
39307
+ "deviceManager.loadRuntimeState": [{
39308
+ name: "deviceId",
39309
+ form: "single",
39310
+ optional: false
39311
+ }],
39312
+ "deviceManager.persistConfig": [{
39313
+ name: "deviceId",
39314
+ form: "single",
39315
+ optional: false
39316
+ }],
39317
+ "deviceManager.probeStreams": [{
39318
+ name: "deviceId",
39319
+ form: "single",
39320
+ optional: false
39321
+ }],
39322
+ "deviceManager.registerDevice": [{
39323
+ name: "parentDeviceId",
39324
+ form: "single",
39325
+ optional: true
39326
+ }],
39327
+ "deviceManager.remove": [{
39328
+ name: "deviceId",
39329
+ form: "single",
39330
+ optional: false
39331
+ }],
39332
+ "deviceManager.removeDevice": [{
39333
+ name: "deviceId",
39334
+ form: "single",
39335
+ optional: false
39336
+ }],
39337
+ "deviceManager.runDeviceAction": [{
39338
+ name: "deviceId",
39339
+ form: "single",
39340
+ optional: false
39341
+ }],
39342
+ "deviceManager.setChildLayout": [{
39343
+ name: "deviceId",
39344
+ form: "single",
39345
+ optional: false
39346
+ }],
39347
+ "deviceManager.setDisabled": [{
39348
+ name: "deviceId",
39349
+ form: "single",
39350
+ optional: false
39351
+ }],
39352
+ "deviceManager.setDisplay": [{
39353
+ name: "deviceId",
39354
+ form: "single",
39355
+ optional: false
39356
+ }],
39357
+ "deviceManager.setIntegrationId": [{
39358
+ name: "deviceId",
39359
+ form: "single",
39360
+ optional: false
39361
+ }],
39362
+ "deviceManager.setLinkDeviceId": [{
39363
+ name: "deviceId",
39364
+ form: "single",
39365
+ optional: false
39366
+ }, {
39367
+ name: "linkDeviceId",
39368
+ form: "single",
39369
+ optional: true
39370
+ }],
39371
+ "deviceManager.setLocation": [{
39372
+ name: "deviceId",
39373
+ form: "single",
39374
+ optional: false
39375
+ }],
39376
+ "deviceManager.setMetadata": [{
39377
+ name: "deviceId",
39378
+ form: "single",
39379
+ optional: false
39380
+ }],
39381
+ "deviceManager.setName": [{
39382
+ name: "deviceId",
39383
+ form: "single",
39384
+ optional: false
39385
+ }],
39386
+ "deviceManager.setPrimaryChildEntityId": [{
39387
+ name: "deviceId",
39388
+ form: "single",
39389
+ optional: false
39390
+ }],
39391
+ "deviceManager.setRole": [{
39392
+ name: "deviceId",
39393
+ form: "single",
39394
+ optional: false
39395
+ }],
39396
+ "deviceManager.setStreamProfileMap": [{
39397
+ name: "deviceId",
39398
+ form: "single",
39399
+ optional: false
39400
+ }],
39401
+ "deviceManager.setType": [{
39402
+ name: "deviceId",
39403
+ form: "single",
39404
+ optional: false
39405
+ }],
39406
+ "deviceManager.setWrapperActive": [{
39407
+ name: "deviceId",
39408
+ form: "single",
39409
+ optional: false
39410
+ }],
39411
+ "deviceManager.testField": [{
39412
+ name: "deviceId",
39413
+ form: "single",
39414
+ optional: false
39415
+ }],
39416
+ "deviceManager.updateConfig": [{
39417
+ name: "deviceId",
39418
+ form: "single",
39419
+ optional: false
39420
+ }],
39421
+ "deviceManager.updateDeviceField": [{
39422
+ name: "deviceId",
39423
+ form: "single",
39424
+ optional: false
39425
+ }],
39426
+ "deviceManager.updateDeviceFieldsBatch": [{
39427
+ name: "deviceId",
39428
+ form: "single",
39429
+ optional: false
39430
+ }],
39431
+ "deviceOps.getConfigEntries": [{
39432
+ name: "deviceId",
39433
+ form: "single",
39434
+ optional: false
39435
+ }],
39436
+ "deviceOps.getRawState": [{
39437
+ name: "deviceId",
39438
+ form: "single",
39439
+ optional: false
39440
+ }],
39441
+ "deviceOps.getSettingsSchema": [{
39442
+ name: "deviceId",
39443
+ form: "single",
39444
+ optional: false
39445
+ }],
39446
+ "deviceOps.getStreamSources": [{
39447
+ name: "deviceId",
39448
+ form: "single",
39449
+ optional: false
39450
+ }],
39451
+ "deviceOps.removeDevice": [{
39452
+ name: "deviceId",
39453
+ form: "single",
39454
+ optional: false
39455
+ }],
39456
+ "deviceOps.runAction": [{
39457
+ name: "deviceId",
39458
+ form: "single",
39459
+ optional: false
39460
+ }],
39461
+ "deviceOps.setConfig": [{
39462
+ name: "deviceId",
39463
+ form: "single",
39464
+ optional: false
39465
+ }],
39466
+ "deviceState.getCapSlice": [{
39467
+ name: "deviceId",
39468
+ form: "single",
39469
+ optional: false
39470
+ }],
39471
+ "deviceState.getSnapshot": [{
39472
+ name: "deviceId",
39473
+ form: "single",
39474
+ optional: false
39475
+ }],
39476
+ "deviceState.setCapSlice": [{
39477
+ name: "deviceId",
39478
+ form: "single",
39479
+ optional: false
39480
+ }],
39481
+ "events.getEventClipUrl": [{
39482
+ name: "deviceId",
39483
+ form: "single",
39484
+ optional: false
39485
+ }],
39486
+ "events.getEvents": [{
39487
+ name: "deviceId",
39488
+ form: "single",
39489
+ optional: false
39490
+ }],
39491
+ "events.getEventThumbnail": [{
39492
+ name: "deviceId",
39493
+ form: "single",
39494
+ optional: false
39495
+ }],
39496
+ "faceGallery.getFaceByTrack": [{
39497
+ name: "deviceId",
39498
+ form: "single",
39499
+ optional: false
39500
+ }],
39501
+ "faceGallery.listRecentFaces": [{
39502
+ name: "deviceId",
39503
+ form: "single",
39504
+ optional: true
39505
+ }],
39506
+ "fanControl.setDirection": [{
39507
+ name: "deviceId",
39508
+ form: "single",
39509
+ optional: false
39510
+ }],
39511
+ "fanControl.setOscillating": [{
39512
+ name: "deviceId",
39513
+ form: "single",
39514
+ optional: false
39515
+ }],
39516
+ "fanControl.setPercentage": [{
39517
+ name: "deviceId",
39518
+ form: "single",
39519
+ optional: false
39520
+ }],
39521
+ "fanControl.setPreset": [{
39522
+ name: "deviceId",
39523
+ form: "single",
39524
+ optional: false
39525
+ }],
39526
+ "humidifier.setMode": [{
39527
+ name: "deviceId",
39528
+ form: "single",
39529
+ optional: false
39530
+ }],
39531
+ "humidifier.setOn": [{
39532
+ name: "deviceId",
39533
+ form: "single",
39534
+ optional: false
39535
+ }],
39536
+ "humidifier.setTargetHumidity": [{
39537
+ name: "deviceId",
39538
+ form: "single",
39539
+ optional: false
39540
+ }],
39541
+ "imageSettings.getOptions": [{
39542
+ name: "deviceId",
39543
+ form: "single",
39544
+ optional: false
39545
+ }],
39546
+ "imageSettings.setSettings": [{
39547
+ name: "deviceId",
39548
+ form: "single",
39549
+ optional: false
39550
+ }],
39551
+ "intercom.endTalkSession": [{
39552
+ name: "deviceId",
39553
+ form: "single",
39554
+ optional: false
39555
+ }],
39556
+ "intercom.handleAnswer": [{
39557
+ name: "deviceId",
39558
+ form: "single",
39559
+ optional: false
39560
+ }],
39561
+ "intercom.pushTalkAudio": [{
39562
+ name: "deviceId",
39563
+ form: "single",
39564
+ optional: false
39565
+ }],
39566
+ "intercom.startSession": [{
39567
+ name: "deviceId",
39568
+ form: "single",
39569
+ optional: false
39570
+ }],
39571
+ "intercom.startTalkSession": [{
39572
+ name: "deviceId",
39573
+ form: "single",
39574
+ optional: false
39575
+ }],
39576
+ "intercom.stopSession": [{
39577
+ name: "deviceId",
39578
+ form: "single",
39579
+ optional: false
39580
+ }],
39581
+ "lawnMowerControl.dock": [{
39582
+ name: "deviceId",
39583
+ form: "single",
39584
+ optional: false
39585
+ }],
39586
+ "lawnMowerControl.pause": [{
39587
+ name: "deviceId",
39588
+ form: "single",
39589
+ optional: false
39590
+ }],
39591
+ "lawnMowerControl.startMowing": [{
39592
+ name: "deviceId",
39593
+ form: "single",
39594
+ optional: false
39595
+ }],
39596
+ "lockControl.lock": [{
39597
+ name: "deviceId",
39598
+ form: "single",
39599
+ optional: false
39600
+ }],
39601
+ "lockControl.open": [{
39602
+ name: "deviceId",
39603
+ form: "single",
39604
+ optional: false
39605
+ }],
39606
+ "lockControl.unlock": [{
39607
+ name: "deviceId",
39608
+ form: "single",
39609
+ optional: false
39610
+ }],
39611
+ "mediaPlayer.next": [{
39612
+ name: "deviceId",
39613
+ form: "single",
39614
+ optional: false
39615
+ }],
39616
+ "mediaPlayer.pause": [{
39617
+ name: "deviceId",
39618
+ form: "single",
39619
+ optional: false
39620
+ }],
39621
+ "mediaPlayer.play": [{
39622
+ name: "deviceId",
39623
+ form: "single",
39624
+ optional: false
39625
+ }],
39626
+ "mediaPlayer.playMedia": [{
39627
+ name: "deviceId",
39628
+ form: "single",
39629
+ optional: false
39630
+ }],
39631
+ "mediaPlayer.previous": [{
39632
+ name: "deviceId",
39633
+ form: "single",
39634
+ optional: false
39635
+ }],
39636
+ "mediaPlayer.seek": [{
39637
+ name: "deviceId",
39638
+ form: "single",
39639
+ optional: false
39640
+ }],
39641
+ "mediaPlayer.selectSource": [{
39642
+ name: "deviceId",
39643
+ form: "single",
39644
+ optional: false
39645
+ }],
39646
+ "mediaPlayer.setMute": [{
39647
+ name: "deviceId",
39648
+ form: "single",
39649
+ optional: false
39650
+ }],
39651
+ "mediaPlayer.setRepeat": [{
39652
+ name: "deviceId",
39653
+ form: "single",
39654
+ optional: false
39655
+ }],
39656
+ "mediaPlayer.setShuffle": [{
39657
+ name: "deviceId",
39658
+ form: "single",
39659
+ optional: false
39660
+ }],
39661
+ "mediaPlayer.setVolume": [{
39662
+ name: "deviceId",
39663
+ form: "single",
39664
+ optional: false
39665
+ }],
39666
+ "mediaPlayer.stop": [{
39667
+ name: "deviceId",
39668
+ form: "single",
39669
+ optional: false
39670
+ }],
39671
+ "motion.isDetected": [{
39672
+ name: "deviceId",
39673
+ form: "single",
39674
+ optional: false
39675
+ }],
39676
+ "motionDetection.analyze": [{
39677
+ name: "deviceId",
39678
+ form: "single",
39679
+ optional: false
39680
+ }],
39681
+ "motionDetection.removeCamera": [{
39682
+ name: "deviceId",
39683
+ form: "single",
39684
+ optional: false
39685
+ }],
39686
+ "motionTrigger.setMotionTrigger": [{
39687
+ name: "deviceId",
39688
+ form: "single",
39689
+ optional: false
39690
+ }],
39691
+ "motionZones.getOptions": [{
39692
+ name: "deviceId",
39693
+ form: "single",
39694
+ optional: false
39695
+ }],
39696
+ "motionZones.setZone": [{
39697
+ name: "deviceId",
39698
+ form: "single",
39699
+ optional: false
39700
+ }],
39701
+ "nativeObjectDetection.setEnabled": [{
39702
+ name: "deviceId",
39703
+ form: "single",
39704
+ optional: false
39705
+ }],
39706
+ "networkQuality.getDeviceStats": [{
39707
+ name: "deviceId",
39708
+ form: "single",
39709
+ optional: false
39710
+ }],
39711
+ "networkQuality.reportClientStats": [{
39712
+ name: "deviceId",
39713
+ form: "single",
39714
+ optional: false
39715
+ }],
39716
+ "notificationRules.setDeviceMuted": [{
39717
+ name: "deviceId",
39718
+ form: "single",
39719
+ optional: false
39720
+ }],
39721
+ "notifier.cancel": [{
39722
+ name: "deviceId",
39723
+ form: "single",
39724
+ optional: false
39725
+ }],
39726
+ "notifier.send": [{
39727
+ name: "deviceId",
39728
+ form: "single",
39729
+ optional: false
39730
+ }],
39731
+ "osd.setOverlay": [{
39732
+ name: "deviceId",
39733
+ form: "single",
39734
+ optional: false
39735
+ }],
39736
+ "osdManager.clearSlotBinding": [{
39737
+ name: "deviceId",
39738
+ form: "single",
39739
+ optional: false
39740
+ }],
39741
+ "osdManager.copyDeviceConfiguration": [{
39742
+ name: "sourceDeviceId",
39743
+ form: "single",
39744
+ optional: false
39745
+ }, {
39746
+ name: "targetDeviceId",
39747
+ form: "single",
39748
+ optional: false
39749
+ }],
39750
+ "osdManager.getDeviceOsd": [{
39751
+ name: "deviceId",
39752
+ form: "single",
39753
+ optional: false
39754
+ }],
39755
+ "osdManager.getSourceCatalog": [{
39756
+ name: "deviceId",
39757
+ form: "single",
39758
+ optional: false
39759
+ }],
39760
+ "osdManager.previewSlot": [{
39761
+ name: "deviceId",
39762
+ form: "single",
39763
+ optional: false
39764
+ }],
39765
+ "osdManager.renderDevice": [{
39766
+ name: "deviceId",
39767
+ form: "single",
39768
+ optional: false
39769
+ }],
39770
+ "osdManager.setSlotBinding": [{
39771
+ name: "deviceId",
39772
+ form: "single",
39773
+ optional: false
39774
+ }],
39775
+ "petFeeder.callPet": [{
39776
+ name: "deviceId",
39777
+ form: "single",
39778
+ optional: false
39779
+ }],
39780
+ "petFeeder.cancelFeed": [{
39781
+ name: "deviceId",
39782
+ form: "single",
39783
+ optional: false
39784
+ }],
39785
+ "petFeeder.feed": [{
39786
+ name: "deviceId",
39787
+ form: "single",
39788
+ optional: false
39789
+ }],
39790
+ "petFeeder.markFoodReplenished": [{
39791
+ name: "deviceId",
39792
+ form: "single",
39793
+ optional: false
39794
+ }],
39795
+ "petFeeder.playSound": [{
39796
+ name: "deviceId",
39797
+ form: "single",
39798
+ optional: false
39799
+ }],
39800
+ "petFeeder.resetDesiccant": [{
39801
+ name: "deviceId",
39802
+ form: "single",
39803
+ optional: false
39804
+ }],
39805
+ "petFeeder.setChildLock": [{
39806
+ name: "deviceId",
39807
+ form: "single",
39808
+ optional: false
39809
+ }],
39810
+ "petFeeder.setFeedSound": [{
39811
+ name: "deviceId",
39812
+ form: "single",
39813
+ optional: false
39814
+ }],
39815
+ "petFeeder.setIndicatorLight": [{
39816
+ name: "deviceId",
39817
+ form: "single",
39818
+ optional: false
39819
+ }],
39820
+ "petFeeder.setVolume": [{
39821
+ name: "deviceId",
39822
+ form: "single",
39823
+ optional: false
39824
+ }],
39825
+ "pipelineAnalytics.clearTracks": [{
39826
+ name: "deviceId",
39827
+ form: "single",
39828
+ optional: false
39829
+ }],
39830
+ "pipelineAnalytics.completeRetrainTrack": [{
39831
+ name: "deviceId",
39832
+ form: "single",
39833
+ optional: false
39834
+ }],
39835
+ "pipelineAnalytics.deleteDeviceEvents": [{
39836
+ name: "deviceId",
39837
+ form: "single",
39838
+ optional: false
39839
+ }],
39840
+ "pipelineAnalytics.deleteTracks": [{
39841
+ name: "deviceId",
39842
+ form: "single",
39843
+ optional: false
39844
+ }],
39845
+ "pipelineAnalytics.deselectRetrainFrame": [{
39846
+ name: "deviceId",
39847
+ form: "single",
39848
+ optional: false
39849
+ }],
39850
+ "pipelineAnalytics.getActiveTracks": [{
39851
+ name: "deviceId",
39852
+ form: "single",
39853
+ optional: false
39854
+ }],
39855
+ "pipelineAnalytics.getAudioEvents": [{
39856
+ name: "deviceId",
39857
+ form: "single",
39858
+ optional: false
39859
+ }],
39860
+ "pipelineAnalytics.getEventDensity": [{
39861
+ name: "deviceId",
39862
+ form: "single",
39863
+ optional: false
39864
+ }],
39865
+ "pipelineAnalytics.getKeyEvents": [{
39866
+ name: "deviceId",
39867
+ form: "single",
39868
+ optional: false
39869
+ }],
39870
+ "pipelineAnalytics.getMotionEvents": [{
39871
+ name: "deviceId",
39872
+ form: "single",
39873
+ optional: false
39874
+ }],
39875
+ "pipelineAnalytics.getObjectEvents": [{
39876
+ name: "deviceId",
39877
+ form: "single",
39878
+ optional: false
39879
+ }],
39880
+ "pipelineAnalytics.getRetrainExportUrl": [{
39881
+ name: "deviceIds",
39882
+ form: "array",
39883
+ optional: true
39884
+ }],
39885
+ "pipelineAnalytics.getSensorEvents": [{
39886
+ name: "deviceId",
39887
+ form: "single",
39888
+ optional: false
39889
+ }],
39890
+ "pipelineAnalytics.getTrack": [{
39891
+ name: "deviceId",
39892
+ form: "single",
39893
+ optional: false
39894
+ }],
39895
+ "pipelineAnalytics.getTrainingExportSummary": [{
39896
+ name: "deviceIds",
39897
+ form: "array",
39898
+ optional: true
39899
+ }],
39900
+ "pipelineAnalytics.getTrainingExportUrl": [{
39901
+ name: "deviceIds",
39902
+ form: "array",
39903
+ optional: true
39904
+ }],
39905
+ "pipelineAnalytics.listEventKinds": [{
39906
+ name: "deviceId",
39907
+ form: "single",
39908
+ optional: false
39909
+ }],
39910
+ "pipelineAnalytics.listEventKindsBatch": [{
39911
+ name: "deviceIds",
39912
+ form: "array",
39913
+ optional: false
39914
+ }],
39915
+ "pipelineAnalytics.listOpsLog": [{
39916
+ name: "deviceId",
39917
+ form: "single",
39918
+ optional: true
39919
+ }],
39920
+ "pipelineAnalytics.listRecentTracks": [{
39921
+ name: "deviceIds",
39922
+ form: "array",
39923
+ optional: false
39924
+ }],
39925
+ "pipelineAnalytics.listRetrainStaging": [{
39926
+ name: "deviceIds",
39927
+ form: "array",
39928
+ optional: true
39929
+ }],
39930
+ "pipelineAnalytics.listTracks": [{
39931
+ name: "deviceId",
39932
+ form: "single",
39933
+ optional: false
39934
+ }],
39935
+ "pipelineAnalytics.proposeRetrainAnnotations": [{
39936
+ name: "deviceId",
39937
+ form: "single",
39938
+ optional: false
39939
+ }],
39940
+ "pipelineAnalytics.pruneEventsBefore": [{
39941
+ name: "deviceId",
39942
+ form: "single",
39943
+ optional: false
39944
+ }],
39945
+ "pipelineAnalytics.pruneTracksBefore": [{
39946
+ name: "deviceId",
39947
+ form: "single",
39948
+ optional: false
39949
+ }],
39950
+ "pipelineAnalytics.rebuildObjectEmbeddings": [{
39951
+ name: "deviceId",
39952
+ form: "single",
39953
+ optional: true
39954
+ }],
39955
+ "pipelineAnalytics.restageRetrainTrack": [{
39956
+ name: "deviceId",
39957
+ form: "single",
39958
+ optional: false
39959
+ }],
39960
+ "pipelineAnalytics.saveRetrainAnnotations": [{
39961
+ name: "deviceId",
39962
+ form: "single",
39963
+ optional: false
39964
+ }],
39965
+ "pipelineAnalytics.searchObjectEvents": [{
39966
+ name: "deviceId",
39967
+ form: "single",
39968
+ optional: true
39969
+ }],
39970
+ "pipelineAnalytics.selectRetrainFrames": [{
39971
+ name: "deviceId",
39972
+ form: "single",
39973
+ optional: false
39974
+ }],
39975
+ "pipelineAnalytics.setTrackFlags": [{
39976
+ name: "deviceId",
39977
+ form: "single",
39978
+ optional: false
39979
+ }],
39980
+ "pipelineAnalytics.wipeAllAnalytics": [{
39981
+ name: "deviceId",
39982
+ form: "single",
39983
+ optional: false
39984
+ }],
39985
+ "pipelineExecutor.runPipeline": [{
39986
+ name: "deviceId",
39987
+ form: "single",
39988
+ optional: true
39989
+ }],
39990
+ "pipelineExecutor.runPipelineBatch": [{
39991
+ name: "deviceId",
39992
+ form: "single",
39993
+ optional: true
39994
+ }],
39995
+ "pipelineOrchestrator.assignAudio": [{
39996
+ name: "deviceId",
39997
+ form: "single",
39998
+ optional: false
39999
+ }],
40000
+ "pipelineOrchestrator.assignPipeline": [{
40001
+ name: "deviceId",
40002
+ form: "single",
40003
+ optional: false
40004
+ }],
40005
+ "pipelineOrchestrator.getAudioAssignment": [{
40006
+ name: "deviceId",
40007
+ form: "single",
40008
+ optional: false
40009
+ }],
40010
+ "pipelineOrchestrator.getCameraMetrics": [{
40011
+ name: "deviceId",
40012
+ form: "single",
40013
+ optional: false
40014
+ }],
40015
+ "pipelineOrchestrator.getCameraSettings": [{
40016
+ name: "deviceId",
40017
+ form: "single",
40018
+ optional: false
40019
+ }],
40020
+ "pipelineOrchestrator.getCameraStatus": [{
40021
+ name: "deviceId",
40022
+ form: "single",
40023
+ optional: false
40024
+ }],
40025
+ "pipelineOrchestrator.getCameraStatuses": [{
40026
+ name: "deviceIds",
40027
+ form: "array",
40028
+ optional: true
40029
+ }],
40030
+ "pipelineOrchestrator.getCameraStepOverrides": [{
40031
+ name: "deviceId",
40032
+ form: "single",
40033
+ optional: false
40034
+ }],
40035
+ "pipelineOrchestrator.getCameraSwitches": [{
40036
+ name: "deviceId",
40037
+ form: "single",
40038
+ optional: false
40039
+ }],
40040
+ "pipelineOrchestrator.getPipelineAssignment": [{
40041
+ name: "deviceId",
40042
+ form: "single",
40043
+ optional: false
40044
+ }],
40045
+ "pipelineOrchestrator.getPipelineDevicePin": [{
40046
+ name: "deviceId",
40047
+ form: "single",
40048
+ optional: false
40049
+ }],
40050
+ "pipelineOrchestrator.resolvePipeline": [{
40051
+ name: "deviceId",
40052
+ form: "single",
40053
+ optional: false
40054
+ }],
40055
+ "pipelineOrchestrator.setCameraPipelineForAgent": [{
40056
+ name: "deviceId",
40057
+ form: "single",
40058
+ optional: false
40059
+ }],
40060
+ "pipelineOrchestrator.setCameraStepOverride": [{
40061
+ name: "deviceId",
40062
+ form: "single",
40063
+ optional: false
40064
+ }],
40065
+ "pipelineOrchestrator.setCameraStepToggle": [{
40066
+ name: "deviceId",
40067
+ form: "single",
40068
+ optional: false
40069
+ }],
40070
+ "pipelineOrchestrator.setCameraSwitch": [{
40071
+ name: "deviceId",
40072
+ form: "single",
40073
+ optional: false
40074
+ }],
40075
+ "pipelineOrchestrator.setPipelineDevicePin": [{
40076
+ name: "deviceId",
40077
+ form: "single",
40078
+ optional: false
40079
+ }],
40080
+ "pipelineOrchestrator.unassignAudio": [{
40081
+ name: "deviceId",
40082
+ form: "single",
40083
+ optional: false
40084
+ }],
40085
+ "pipelineOrchestrator.unassignPipeline": [{
40086
+ name: "deviceId",
40087
+ form: "single",
40088
+ optional: false
40089
+ }],
40090
+ "pipelineRunner.attachCamera": [{
40091
+ name: "deviceId",
40092
+ form: "single",
40093
+ optional: false
40094
+ }],
40095
+ "pipelineRunner.detachCamera": [{
40096
+ name: "deviceId",
40097
+ form: "single",
40098
+ optional: false
40099
+ }],
40100
+ "pipelineRunner.getCameraMetrics": [{
40101
+ name: "deviceId",
40102
+ form: "single",
40103
+ optional: false
40104
+ }],
40105
+ "pipelineRunner.reportMotion": [{
40106
+ name: "deviceId",
40107
+ form: "single",
40108
+ optional: false
40109
+ }],
40110
+ "pipelineRunner.runDetailSubtree": [{
40111
+ name: "deviceId",
40112
+ form: "single",
40113
+ optional: false
40114
+ }],
40115
+ "pipelineRunner.runStatelessStep": [{
40116
+ name: "sourceDeviceId",
40117
+ form: "single",
40118
+ optional: false
40119
+ }],
40120
+ "plateGallery.getPlateByTrack": [{
40121
+ name: "deviceId",
40122
+ form: "single",
40123
+ optional: false
40124
+ }],
40125
+ "plateGallery.listPlates": [{
40126
+ name: "deviceId",
40127
+ form: "single",
40128
+ optional: true
40129
+ }],
40130
+ "privacyMask.getOptions": [{
40131
+ name: "deviceId",
40132
+ form: "single",
40133
+ optional: false
40134
+ }],
40135
+ "privacyMask.setAudioEnabled": [{
40136
+ name: "deviceId",
40137
+ form: "single",
40138
+ optional: false
40139
+ }],
40140
+ "privacyMask.setMask": [{
40141
+ name: "deviceId",
40142
+ form: "single",
40143
+ optional: false
40144
+ }],
40145
+ "ptz.continuousMove": [{
40146
+ name: "deviceId",
40147
+ form: "single",
40148
+ optional: false
40149
+ }],
40150
+ "ptz.deletePreset": [{
40151
+ name: "deviceId",
40152
+ form: "single",
40153
+ optional: false
40154
+ }],
40155
+ "ptz.getOptions": [{
40156
+ name: "deviceId",
40157
+ form: "single",
40158
+ optional: false
40159
+ }],
40160
+ "ptz.getPosition": [{
40161
+ name: "deviceId",
40162
+ form: "single",
40163
+ optional: false
40164
+ }],
40165
+ "ptz.getPresets": [{
40166
+ name: "deviceId",
40167
+ form: "single",
40168
+ optional: false
40169
+ }],
40170
+ "ptz.goHome": [{
40171
+ name: "deviceId",
40172
+ form: "single",
40173
+ optional: false
40174
+ }],
40175
+ "ptz.goToPreset": [{
40176
+ name: "deviceId",
40177
+ form: "single",
40178
+ optional: false
40179
+ }],
40180
+ "ptz.move": [{
40181
+ name: "deviceId",
40182
+ form: "single",
40183
+ optional: false
40184
+ }],
40185
+ "ptz.savePreset": [{
40186
+ name: "deviceId",
40187
+ form: "single",
40188
+ optional: false
40189
+ }],
40190
+ "ptz.setAutofocus": [{
40191
+ name: "deviceId",
40192
+ form: "single",
40193
+ optional: false
40194
+ }],
40195
+ "ptz.stop": [{
40196
+ name: "deviceId",
40197
+ form: "single",
40198
+ optional: false
40199
+ }],
40200
+ "ptzAutotrack.getSettings": [{
40201
+ name: "deviceId",
40202
+ form: "single",
40203
+ optional: false
40204
+ }],
40205
+ "ptzAutotrack.getStatus": [{
40206
+ name: "deviceId",
40207
+ form: "single",
40208
+ optional: false
40209
+ }],
40210
+ "ptzAutotrack.setEnabled": [{
40211
+ name: "deviceId",
40212
+ form: "single",
40213
+ optional: false
40214
+ }],
40215
+ "ptzAutotrack.setSettings": [{
40216
+ name: "deviceId",
40217
+ form: "single",
40218
+ optional: false
40219
+ }],
40220
+ "reboot.reboot": [{
40221
+ name: "deviceId",
40222
+ form: "single",
40223
+ optional: false
40224
+ }],
40225
+ "recording.deleteFootprint": [{
40226
+ name: "deviceId",
40227
+ form: "single",
40228
+ optional: false
40229
+ }],
40230
+ "recording.getAvailability": [{
40231
+ name: "deviceId",
40232
+ form: "single",
40233
+ optional: false
40234
+ }],
40235
+ "recording.getDaysWithRecordings": [{
40236
+ name: "deviceId",
40237
+ form: "single",
40238
+ optional: false
40239
+ }],
40240
+ "recording.getDeviceConfig": [{
40241
+ name: "deviceId",
40242
+ form: "single",
40243
+ optional: false
40244
+ }],
40245
+ "recording.getPlaybackManifest": [{
40246
+ name: "deviceId",
40247
+ form: "single",
40248
+ optional: false
40249
+ }],
40250
+ "recording.listOpsLog": [{
40251
+ name: "deviceId",
40252
+ form: "single",
40253
+ optional: true
40254
+ }],
40255
+ "recording.locateSegment": [{
40256
+ name: "deviceId",
40257
+ form: "single",
40258
+ optional: false
40259
+ }],
40260
+ "recording.pruneFootage": [{
40261
+ name: "deviceId",
40262
+ form: "single",
40263
+ optional: false
40264
+ }],
40265
+ "recording.readGopBytes": [{
40266
+ name: "deviceId",
40267
+ form: "single",
40268
+ optional: false
40269
+ }],
40270
+ "recording.readSegmentBytes": [{
40271
+ name: "deviceId",
40272
+ form: "single",
40273
+ optional: false
40274
+ }],
40275
+ "recording.relocateFootage": [{
40276
+ name: "deviceId",
40277
+ form: "single",
40278
+ optional: true
40279
+ }],
40280
+ "recording.renderClip": [{
40281
+ name: "deviceId",
40282
+ form: "single",
40283
+ optional: false
40284
+ }],
40285
+ "recording.renderGif": [{
40286
+ name: "deviceId",
40287
+ form: "single",
40288
+ optional: false
40289
+ }],
40290
+ "recording.rescanStorage": [{
40291
+ name: "deviceId",
40292
+ form: "single",
40293
+ optional: false
40294
+ }],
40295
+ "recording.setDeviceConfig": [{
40296
+ name: "deviceId",
40297
+ form: "single",
40298
+ optional: false
40299
+ }],
40300
+ "recording.startStorageMigrationMove": [{
40301
+ name: "deviceId",
40302
+ form: "single",
40303
+ optional: true
40304
+ }],
40305
+ "recordingExport.createExport": [{
40306
+ name: "deviceId",
40307
+ form: "single",
40308
+ optional: false
40309
+ }],
40310
+ "recordingExport.listExports": [{
40311
+ name: "deviceId",
40312
+ form: "single",
40313
+ optional: true
40314
+ }],
40315
+ "sceneMonitor.captureReference": [{
40316
+ name: "deviceId",
40317
+ form: "single",
40318
+ optional: false
40319
+ }],
40320
+ "sceneMonitor.createScene": [{
40321
+ name: "deviceId",
40322
+ form: "single",
40323
+ optional: false
40324
+ }],
40325
+ "sceneMonitor.deleteReference": [{
40326
+ name: "deviceId",
40327
+ form: "single",
40328
+ optional: false
40329
+ }],
40330
+ "sceneMonitor.deleteScene": [{
40331
+ name: "deviceId",
40332
+ form: "single",
40333
+ optional: false
40334
+ }],
40335
+ "sceneMonitor.listScenes": [{
40336
+ name: "deviceId",
40337
+ form: "single",
40338
+ optional: false
40339
+ }],
40340
+ "sceneMonitor.recheckNow": [{
40341
+ name: "deviceId",
40342
+ form: "single",
40343
+ optional: false
40344
+ }],
40345
+ "sceneMonitor.updateScene": [{
40346
+ name: "deviceId",
40347
+ form: "single",
40348
+ optional: false
40349
+ }],
40350
+ "scriptRunner.run": [{
40351
+ name: "deviceId",
40352
+ form: "single",
40353
+ optional: false
40354
+ }],
40355
+ "scriptRunner.stop": [{
40356
+ name: "deviceId",
40357
+ form: "single",
40358
+ optional: false
40359
+ }],
40360
+ "snapshot.getSnapshot": [{
40361
+ name: "deviceId",
40362
+ form: "single",
40363
+ optional: false
40364
+ }],
40365
+ "snapshot.getSnapshotOverview": [{
40366
+ name: "deviceIds",
40367
+ form: "array",
40368
+ optional: false
40369
+ }],
40370
+ "snapshot.invalidateCache": [{
40371
+ name: "deviceId",
40372
+ form: "single",
40373
+ optional: false
40374
+ }],
40375
+ "streamBroker.acquireEgressTranscode": [{
40376
+ name: "deviceId",
40377
+ form: "single",
40378
+ optional: false
40379
+ }],
40380
+ "streamBroker.assignProfile": [{
40381
+ name: "deviceId",
40382
+ form: "single",
40383
+ optional: false
40384
+ }],
40385
+ "streamBroker.getDeviceAudioMute": [{
40386
+ name: "deviceId",
40387
+ form: "single",
40388
+ optional: false
40389
+ }],
40390
+ "streamBroker.getStreamWithCodec": [{
40391
+ name: "deviceId",
40392
+ form: "single",
40393
+ optional: false
40394
+ }],
40395
+ "streamBroker.produceEventMedia": [{
40396
+ name: "deviceId",
40397
+ form: "single",
40398
+ optional: false
40399
+ }],
40400
+ "streamBroker.publishCameraStream": [{
40401
+ name: "deviceId",
40402
+ form: "single",
40403
+ optional: false
40404
+ }],
40405
+ "streamBroker.renderPreBufferClip": [{
40406
+ name: "deviceId",
40407
+ form: "single",
40408
+ optional: false
40409
+ }],
40410
+ "streamBroker.restartProfile": [{
40411
+ name: "deviceId",
40412
+ form: "single",
40413
+ optional: false
40414
+ }],
40415
+ "streamBroker.retractCameraStream": [{
40416
+ name: "deviceId",
40417
+ form: "single",
40418
+ optional: false
40419
+ }],
40420
+ "streamBroker.setDeviceAudioMute": [{
40421
+ name: "deviceId",
40422
+ form: "single",
40423
+ optional: false
40424
+ }],
40425
+ "streamBroker.unassignProfile": [{
40426
+ name: "deviceId",
40427
+ form: "single",
40428
+ optional: false
40429
+ }],
40430
+ "streamCatalog.getCatalog": [{
40431
+ name: "deviceId",
40432
+ form: "single",
40433
+ optional: false
40434
+ }],
40435
+ "streamParams.getConfigSchema": [{
40436
+ name: "deviceId",
40437
+ form: "single",
40438
+ optional: false
40439
+ }],
40440
+ "streamParams.getOptions": [{
40441
+ name: "deviceId",
40442
+ form: "single",
40443
+ optional: false
40444
+ }],
40445
+ "streamParams.setProfile": [{
40446
+ name: "deviceId",
40447
+ form: "single",
40448
+ optional: false
40449
+ }],
40450
+ "switch.setState": [{
40451
+ name: "deviceId",
40452
+ form: "single",
40453
+ optional: false
40454
+ }],
40455
+ "vacuumControl.locate": [{
40456
+ name: "deviceId",
40457
+ form: "single",
40458
+ optional: false
40459
+ }],
40460
+ "vacuumControl.pause": [{
40461
+ name: "deviceId",
40462
+ form: "single",
40463
+ optional: false
40464
+ }],
40465
+ "vacuumControl.returnToBase": [{
40466
+ name: "deviceId",
40467
+ form: "single",
40468
+ optional: false
40469
+ }],
40470
+ "vacuumControl.setFanSpeed": [{
40471
+ name: "deviceId",
40472
+ form: "single",
40473
+ optional: false
40474
+ }],
40475
+ "vacuumControl.start": [{
40476
+ name: "deviceId",
40477
+ form: "single",
40478
+ optional: false
40479
+ }],
40480
+ "vacuumControl.stop": [{
40481
+ name: "deviceId",
40482
+ form: "single",
40483
+ optional: false
40484
+ }],
40485
+ "valve.close": [{
40486
+ name: "deviceId",
40487
+ form: "single",
40488
+ optional: false
40489
+ }],
40490
+ "valve.open": [{
40491
+ name: "deviceId",
40492
+ form: "single",
40493
+ optional: false
40494
+ }],
40495
+ "valve.setPosition": [{
40496
+ name: "deviceId",
40497
+ form: "single",
40498
+ optional: false
40499
+ }],
40500
+ "valve.stop": [{
40501
+ name: "deviceId",
40502
+ form: "single",
40503
+ optional: false
40504
+ }],
40505
+ "videoclips.getClipPlayback": [{
40506
+ name: "deviceId",
40507
+ form: "single",
40508
+ optional: false
40509
+ }],
40510
+ "videoclips.listClips": [{
40511
+ name: "deviceId",
40512
+ form: "single",
40513
+ optional: false
40514
+ }],
40515
+ "waterHeater.setAway": [{
40516
+ name: "deviceId",
40517
+ form: "single",
40518
+ optional: false
40519
+ }],
40520
+ "waterHeater.setOperationMode": [{
40521
+ name: "deviceId",
40522
+ form: "single",
40523
+ optional: false
40524
+ }],
40525
+ "waterHeater.setTargetTemp": [{
40526
+ name: "deviceId",
40527
+ form: "single",
40528
+ optional: false
40529
+ }],
40530
+ "webrtcSession.addIceCandidate": [{
40531
+ name: "deviceId",
40532
+ form: "single",
40533
+ optional: false
40534
+ }],
40535
+ "webrtcSession.closeSession": [{
40536
+ name: "deviceId",
40537
+ form: "single",
40538
+ optional: false
40539
+ }],
40540
+ "webrtcSession.createSession": [{
40541
+ name: "deviceId",
40542
+ form: "single",
40543
+ optional: false
40544
+ }],
40545
+ "webrtcSession.getIceCandidates": [{
40546
+ name: "deviceId",
40547
+ form: "single",
40548
+ optional: false
40549
+ }],
40550
+ "webrtcSession.getSessionState": [{
40551
+ name: "deviceId",
40552
+ form: "single",
40553
+ optional: false
40554
+ }],
40555
+ "webrtcSession.handleAnswer": [{
40556
+ name: "deviceId",
40557
+ form: "single",
40558
+ optional: false
40559
+ }],
40560
+ "webrtcSession.handleOffer": [{
40561
+ name: "deviceId",
40562
+ form: "single",
40563
+ optional: false
40564
+ }],
40565
+ "webrtcSession.hasAdaptiveBitrate": [{
40566
+ name: "deviceId",
40567
+ form: "single",
40568
+ optional: false
40569
+ }],
40570
+ "webrtcSession.listStreams": [{
40571
+ name: "deviceId",
40572
+ form: "single",
40573
+ optional: false
40574
+ }],
40575
+ "zoneAnalytics.getCameraHistory": [{
40576
+ name: "deviceId",
40577
+ form: "single",
40578
+ optional: false
40579
+ }],
40580
+ "zoneAnalytics.getCurrentSnapshot": [{
40581
+ name: "deviceId",
40582
+ form: "single",
40583
+ optional: false
40584
+ }],
40585
+ "zoneAnalytics.getUnzonedHistory": [{
40586
+ name: "deviceId",
40587
+ form: "single",
40588
+ optional: false
40589
+ }],
40590
+ "zoneAnalytics.getZoneHistory": [{
40591
+ name: "deviceId",
40592
+ form: "single",
40593
+ optional: false
40594
+ }],
40595
+ "zoneRules.listRules": [{
40596
+ name: "deviceId",
40597
+ form: "single",
40598
+ optional: false
40599
+ }],
40600
+ "zoneRules.setRules": [{
40601
+ name: "deviceId",
40602
+ form: "single",
40603
+ optional: false
40604
+ }],
40605
+ "zones.addZone": [{
40606
+ name: "deviceId",
40607
+ form: "single",
40608
+ optional: false
40609
+ }],
40610
+ "zones.listZones": [{
40611
+ name: "deviceId",
40612
+ form: "single",
40613
+ optional: false
40614
+ }],
40615
+ "zones.removeZone": [{
40616
+ name: "deviceId",
40617
+ form: "single",
40618
+ optional: false
40619
+ }],
40620
+ "zones.updateZone": [{
40621
+ name: "deviceId",
40622
+ form: "single",
40623
+ optional: false
40624
+ }]
40625
+ });
40626
+ /** Cap-method paths that carry a device reference AND live on a system-scope
40627
+ * cap — the set the v3 device check newly reaches. */
40628
+ var SYSTEM_SCOPE_DEVICE_METHODS = [
40629
+ "addonSettings.getDeviceSettings",
40630
+ "addonSettings.updateDeviceSettings",
40631
+ "audioAnalyzer.classify",
40632
+ "decoder.createSession",
40633
+ "deviceAdoption.release",
40634
+ "deviceAdoption.resync",
40635
+ "deviceManager.adoptionRelease",
40636
+ "deviceManager.adoptionResync",
40637
+ "deviceManager.applyInitialMeta",
40638
+ "deviceManager.disable",
40639
+ "deviceManager.enable",
40640
+ "deviceManager.getBindings",
40641
+ "deviceManager.getChildren",
40642
+ "deviceManager.getConfigSchema",
40643
+ "deviceManager.getDevice",
40644
+ "deviceManager.getDeviceAggregate",
40645
+ "deviceManager.getDeviceLiveInfoAggregate",
40646
+ "deviceManager.getDeviceSettingsAggregate",
40647
+ "deviceManager.getDeviceStatusAggregate",
40648
+ "deviceManager.getDeviceStatusAggregateBatch",
40649
+ "deviceManager.getLinkedDevices",
40650
+ "deviceManager.getSettingsSchema",
40651
+ "deviceManager.getStreamProfileMap",
40652
+ "deviceManager.getStreamSources",
40653
+ "deviceManager.getWireableFields",
40654
+ "deviceManager.loadConfig",
40655
+ "deviceManager.loadMeta",
40656
+ "deviceManager.loadRuntimeState",
40657
+ "deviceManager.persistConfig",
40658
+ "deviceManager.probeStreams",
40659
+ "deviceManager.registerDevice",
40660
+ "deviceManager.remove",
40661
+ "deviceManager.removeDevice",
40662
+ "deviceManager.runDeviceAction",
40663
+ "deviceManager.setChildLayout",
40664
+ "deviceManager.setDisabled",
40665
+ "deviceManager.setDisplay",
40666
+ "deviceManager.setIntegrationId",
40667
+ "deviceManager.setLinkDeviceId",
40668
+ "deviceManager.setLocation",
40669
+ "deviceManager.setMetadata",
40670
+ "deviceManager.setName",
40671
+ "deviceManager.setPrimaryChildEntityId",
40672
+ "deviceManager.setRole",
40673
+ "deviceManager.setStreamProfileMap",
40674
+ "deviceManager.setType",
40675
+ "deviceManager.setWrapperActive",
40676
+ "deviceManager.testField",
40677
+ "deviceManager.updateConfig",
40678
+ "deviceManager.updateDeviceField",
40679
+ "deviceManager.updateDeviceFieldsBatch",
40680
+ "deviceState.getCapSlice",
40681
+ "deviceState.getSnapshot",
40682
+ "deviceState.setCapSlice",
40683
+ "faceGallery.getFaceByTrack",
40684
+ "faceGallery.listRecentFaces",
40685
+ "networkQuality.getDeviceStats",
40686
+ "networkQuality.reportClientStats",
40687
+ "notificationRules.setDeviceMuted",
40688
+ "osdManager.clearSlotBinding",
40689
+ "osdManager.copyDeviceConfiguration",
40690
+ "osdManager.getDeviceOsd",
40691
+ "osdManager.getSourceCatalog",
40692
+ "osdManager.previewSlot",
40693
+ "osdManager.renderDevice",
40694
+ "osdManager.setSlotBinding",
40695
+ "pipelineExecutor.runPipeline",
40696
+ "pipelineExecutor.runPipelineBatch",
40697
+ "pipelineOrchestrator.assignAudio",
40698
+ "pipelineOrchestrator.assignPipeline",
40699
+ "pipelineOrchestrator.getAudioAssignment",
40700
+ "pipelineOrchestrator.getCameraMetrics",
40701
+ "pipelineOrchestrator.getCameraSettings",
40702
+ "pipelineOrchestrator.getCameraStatus",
40703
+ "pipelineOrchestrator.getCameraStatuses",
40704
+ "pipelineOrchestrator.getCameraStepOverrides",
40705
+ "pipelineOrchestrator.getCameraSwitches",
40706
+ "pipelineOrchestrator.getPipelineAssignment",
40707
+ "pipelineOrchestrator.getPipelineDevicePin",
40708
+ "pipelineOrchestrator.resolvePipeline",
40709
+ "pipelineOrchestrator.setCameraPipelineForAgent",
40710
+ "pipelineOrchestrator.setCameraStepOverride",
40711
+ "pipelineOrchestrator.setCameraStepToggle",
40712
+ "pipelineOrchestrator.setCameraSwitch",
40713
+ "pipelineOrchestrator.setPipelineDevicePin",
40714
+ "pipelineOrchestrator.unassignAudio",
40715
+ "pipelineOrchestrator.unassignPipeline",
40716
+ "pipelineRunner.attachCamera",
40717
+ "pipelineRunner.detachCamera",
40718
+ "pipelineRunner.getCameraMetrics",
40719
+ "pipelineRunner.reportMotion",
40720
+ "pipelineRunner.runDetailSubtree",
40721
+ "pipelineRunner.runStatelessStep",
40722
+ "plateGallery.getPlateByTrack",
40723
+ "plateGallery.listPlates",
40724
+ "recording.deleteFootprint",
40725
+ "recording.getAvailability",
40726
+ "recording.getDaysWithRecordings",
40727
+ "recording.getDeviceConfig",
40728
+ "recording.getPlaybackManifest",
40729
+ "recording.listOpsLog",
40730
+ "recording.locateSegment",
40731
+ "recording.pruneFootage",
40732
+ "recording.readGopBytes",
40733
+ "recording.readSegmentBytes",
40734
+ "recording.relocateFootage",
40735
+ "recording.renderClip",
40736
+ "recording.renderGif",
40737
+ "recording.rescanStorage",
40738
+ "recording.setDeviceConfig",
40739
+ "recording.startStorageMigrationMove",
40740
+ "recordingExport.createExport",
40741
+ "recordingExport.listExports",
40742
+ "streamBroker.acquireEgressTranscode",
40743
+ "streamBroker.assignProfile",
40744
+ "streamBroker.getDeviceAudioMute",
40745
+ "streamBroker.getStreamWithCodec",
40746
+ "streamBroker.produceEventMedia",
40747
+ "streamBroker.publishCameraStream",
40748
+ "streamBroker.renderPreBufferClip",
40749
+ "streamBroker.restartProfile",
40750
+ "streamBroker.retractCameraStream",
40751
+ "streamBroker.setDeviceAudioMute",
40752
+ "streamBroker.unassignProfile"
40753
+ ];
40754
+ //#endregion
38766
40755
  //#region src/generated/provider-kind-map.ts
38767
40756
  var CAP_PROVIDER_KIND_MAP = Object.freeze({
38768
40757
  "broker": "broker",
@@ -38796,7 +40785,7 @@ function getCapsByProviderKind(kind) {
38796
40785
  //#region src/generated/runtime-state-durability.ts
38797
40786
  /**
38798
40787
  * Per-cap runtime-state policy, projected from every `*.cap.ts` that declares
38799
- * `runtimeState`. 62 caps: 33 `restored`, 29 `session`.
40788
+ * `runtimeState`. 63 caps: 33 `restored`, 30 `session`.
38800
40789
  *
38801
40790
  * A cap absent from this map has no runtime-state slice at all. A cap PRESENT
38802
40791
  * with `durability: 'session'` has one and has decided not to keep it.
@@ -38926,6 +40915,10 @@ var RUNTIME_STATE_POLICY = {
38926
40915
  durability: "restored",
38927
40916
  volatileFields: ["lastFetchedAt"]
38928
40917
  },
40918
+ "intercom": {
40919
+ durability: "session",
40920
+ volatileFields: []
40921
+ },
38929
40922
  "lawn-mower-control": {
38930
40923
  durability: "session",
38931
40924
  volatileFields: []
@@ -39112,7 +41105,7 @@ var SCOPE_PRESETS = [
39112
41105
  {
39113
41106
  id: "camera-viewer",
39114
41107
  label: "Camera viewer",
39115
- description: "Read-only over every device — live streams, recordings, motion events, battery state. Combine with `allowedDevices` to restrict to specific cameras.",
41108
+ description: "Read-only over every device — live streams, recordings, motion events, battery state. Pair with a `device` grant (an `ids` / `types` / `locations` selector) to restrict to specific cameras.",
39116
41109
  rows: [{
39117
41110
  type: "category",
39118
41111
  target: "device",
@@ -39129,6 +41122,28 @@ var SCOPE_PRESETS = [
39129
41122
  access: ["view", "create"]
39130
41123
  }]
39131
41124
  },
41125
+ {
41126
+ id: "full-management",
41127
+ label: "Full management",
41128
+ description: "Complete device + system control short of admin: view/create/delete on every device and every system capability. Use for a trusted operator who manages the whole deployment but should not hold the admin bypass.",
41129
+ rows: [{
41130
+ type: "category",
41131
+ target: "device",
41132
+ access: [
41133
+ "view",
41134
+ "create",
41135
+ "delete"
41136
+ ]
41137
+ }, {
41138
+ type: "category",
41139
+ target: "system",
41140
+ access: [
41141
+ "view",
41142
+ "create",
41143
+ "delete"
41144
+ ]
41145
+ }]
41146
+ },
39132
41147
  {
39133
41148
  id: "cli-deployer",
39134
41149
  label: "CLI deployer",
@@ -41125,6 +43140,252 @@ function pickNativeLeaseOverride(view) {
41125
43140
  return readNativeLeaseOverride(flat);
41126
43141
  }
41127
43142
  //#endregion
43143
+ //#region src/schemas/access-roles.ts
43144
+ /**
43145
+ * Ordered widest-last — the panel renders them top to bottom and the operator
43146
+ * reads the list as an escalation.
43147
+ */
43148
+ var ACCESS_ROLES = [
43149
+ {
43150
+ id: "viewer",
43151
+ label: "View",
43152
+ description: "Watch live and recorded video, browse events and read device state. Cannot change anything.",
43153
+ deviceAccess: ["view"],
43154
+ systemAccess: ["view"]
43155
+ },
43156
+ {
43157
+ id: "operator",
43158
+ label: "Operate",
43159
+ description: "Everything View does, plus acting on a device: PTZ, lights, sirens, locks, and snoozing notifications. Cannot delete.",
43160
+ deviceAccess: ["view", "create"],
43161
+ systemAccess: ["view", "create"]
43162
+ },
43163
+ {
43164
+ id: "manager",
43165
+ label: "Full management",
43166
+ description: "Everything Operate does, plus deleting devices, recordings and events. Short of admin — no user or cluster administration.",
43167
+ deviceAccess: [
43168
+ "view",
43169
+ "create",
43170
+ "delete"
43171
+ ],
43172
+ systemAccess: [
43173
+ "view",
43174
+ "create",
43175
+ "delete"
43176
+ ]
43177
+ }
43178
+ ];
43179
+ /** Look a role up by id. Throws on an unknown id — the union makes that
43180
+ * unreachable from typed callers, and a silent fallback would grant the
43181
+ * wrong thing. */
43182
+ function roleSpec(id) {
43183
+ const found = ACCESS_ROLES.find((r) => r.id === id);
43184
+ if (!found) throw new Error(`Unknown access role '${id}'`);
43185
+ return found;
43186
+ }
43187
+ /**
43188
+ * Compose an assignment into the grants the matcher reads.
43189
+ *
43190
+ * `includeLinked` is written explicitly in BOTH directions on purpose. Absent,
43191
+ * the matcher derives it from the access flavour (`view` inherits, `create` /
43192
+ * `delete` do not), so an omitted `false` would silently re-grant the
43193
+ * accessories the operator just excluded, and the panel would be lying about
43194
+ * its own toggle.
43195
+ */
43196
+ function buildRoleScopes(assignment) {
43197
+ const spec = roleSpec(assignment.roleId);
43198
+ return [{
43199
+ type: "device",
43200
+ selector: assignment.selector,
43201
+ access: [...spec.deviceAccess],
43202
+ includeLinked: assignment.includeLinked
43203
+ }, {
43204
+ type: "category",
43205
+ target: "system",
43206
+ access: [...spec.systemAccess]
43207
+ }];
43208
+ }
43209
+ /** Set equality over access arrays — grants round-trip through JSON and Zod
43210
+ * with no order guarantee. */
43211
+ function sameAccess(a, b) {
43212
+ if (a.length !== b.length) return false;
43213
+ const set = new Set(a);
43214
+ return b.every((x) => set.has(x));
43215
+ }
43216
+ /**
43217
+ * Recover the assignment behind a grant set, or `null` when the grants are
43218
+ * not something this panel authored.
43219
+ *
43220
+ * `null` is not an error — it is the "Advanced" case, and the panel MUST show
43221
+ * it as such rather than defaulting the radio to a role the user does not
43222
+ * have. Silently rendering an unrecognised grant set as "View" would make the
43223
+ * next save a downgrade nobody asked for.
43224
+ *
43225
+ * Strict by design: exactly the two rows `buildRoleScopes` writes, an
43226
+ * explicit `includeLinked`, and device/system access that agree on a single
43227
+ * role. Anything else belongs in the raw editor.
43228
+ */
43229
+ function detectAccessRole(scopes) {
43230
+ if (scopes.length !== 2) return null;
43231
+ const deviceRows = scopes.filter((s) => s.type === "device");
43232
+ const systemRows = scopes.filter((s) => s.type === "category" && s.target === "system");
43233
+ if (deviceRows.length !== 1 || systemRows.length !== 1) return null;
43234
+ const [deviceRow] = deviceRows;
43235
+ const [systemRow] = systemRows;
43236
+ if (deviceRow === void 0 || systemRow === void 0) return null;
43237
+ if (deviceRow.type !== "device") return null;
43238
+ if (deviceRow.includeLinked === void 0) return null;
43239
+ const spec = ACCESS_ROLES.find((r) => sameAccess(r.deviceAccess, deviceRow.access) && sameAccess(r.systemAccess, systemRow.access));
43240
+ if (!spec) return null;
43241
+ return {
43242
+ roleId: spec.id,
43243
+ selector: deviceRow.selector,
43244
+ includeLinked: deviceRow.includeLinked
43245
+ };
43246
+ }
43247
+ //#endregion
43248
+ //#region src/schemas/device-selector.ts
43249
+ /** Ancestor-walk bound — defence-in-depth against a corrupt parentage cycle. */
43250
+ var MAX_ANCESTOR_HOPS = 8;
43251
+ /**
43252
+ * Does `selector` cover `device` DIRECTLY (no inheritance)? Inheritance is
43253
+ * layered on by the resolver/matcher, which tests this against a device's
43254
+ * ancestors too.
43255
+ */
43256
+ function deviceSelectorMatches(selector, device) {
43257
+ switch (selector.kind) {
43258
+ case "all": return true;
43259
+ case "ids": return selector.ids.includes(device.id);
43260
+ case "types": return selector.types.some((t) => String(t) === device.type);
43261
+ case "locations": return device.location !== null && selector.locations.includes(device.location);
43262
+ }
43263
+ }
43264
+ /** Whether a `category:device` grant covers `access` (the broad lever). */
43265
+ function hasBroadDeviceGrant(scopes, access) {
43266
+ return scopes.some((s) => s.type === "category" && s.target === "device" && s.access.includes(access));
43267
+ }
43268
+ /** The `device`-typed scopes granting `access`. */
43269
+ function deviceScopesFor(scopes, access) {
43270
+ return scopes.filter((s) => s.type === "device" && s.access.includes(access));
43271
+ }
43272
+ /** Whether inheritance applies for a grant at `access` (view inherits, others
43273
+ * don't, unless the grant overrides via `includeLinked`). */
43274
+ function scopeInherits(scope, access) {
43275
+ return scope.includeLinked ?? access === "view";
43276
+ }
43277
+ /** Ancestors (parent, grandparent, …) of `deviceId` within a fleet map. */
43278
+ function ancestorsOf(deviceId, byId) {
43279
+ const out = [];
43280
+ let current = deviceId;
43281
+ for (let hop = 0; hop < MAX_ANCESTOR_HOPS; hop++) {
43282
+ const parent = current === null ? null : byId.get(current)?.parentDeviceId ?? null;
43283
+ if (parent === null || parent === current) break;
43284
+ out.push(parent);
43285
+ current = parent;
43286
+ }
43287
+ return out;
43288
+ }
43289
+ /**
43290
+ * Resolve the set of deviceIds the caller may reach at `access`, expanded
43291
+ * against the live `fleet`. A `category:device` grant returns the whole
43292
+ * fleet. Device selectors are matched per device — directly, or (when the
43293
+ * grant inherits) against an ancestor, so a parent grant covers its
43294
+ * accessories.
43295
+ */
43296
+ function resolveViewableDeviceIds(scopes, fleet, access) {
43297
+ if (hasBroadDeviceGrant(scopes, access)) return new Set(fleet.map((d) => d.id));
43298
+ const byId = /* @__PURE__ */ new Map();
43299
+ for (const d of fleet) byId.set(d.id, d);
43300
+ const grants = deviceScopesFor(scopes, access);
43301
+ const out = /* @__PURE__ */ new Set();
43302
+ for (const d of fleet) for (const grant of grants) {
43303
+ if (deviceSelectorMatches(grant.selector, d)) {
43304
+ out.add(d.id);
43305
+ break;
43306
+ }
43307
+ if (scopeInherits(grant, access)) {
43308
+ if (ancestorsOf(d.id, byId).some((ancestorId) => {
43309
+ const ancestor = byId.get(ancestorId);
43310
+ return ancestor !== void 0 && deviceSelectorMatches(grant.selector, ancestor);
43311
+ })) {
43312
+ out.add(d.id);
43313
+ break;
43314
+ }
43315
+ }
43316
+ }
43317
+ return out;
43318
+ }
43319
+ /**
43320
+ * Normalise a raw scope array read off a JWT payload or a stored record into
43321
+ * validated v3 `TokenScope`s, migrating any v2 `device:targets` grant on the
43322
+ * way (via {@link TokenScopeSchema}'s preprocess). Applied at the request
43323
+ * boundary (`resolveUser`) so the enforcement matcher only ever sees v3.
43324
+ *
43325
+ * Per-ITEM parse (not whole-array) so a single malformed scope is dropped
43326
+ * without discarding the caller's valid grants — losing a good grant reads as
43327
+ * a lockout, and a lockout reads as broken. A non-array input yields `[]`
43328
+ * (fail closed).
43329
+ */
43330
+ function normalizeTokenScopes(raw) {
43331
+ if (!Array.isArray(raw)) return [];
43332
+ const out = [];
43333
+ for (const item of raw) {
43334
+ const parsed = TokenScopeSchema.safeParse(item);
43335
+ if (parsed.success) out.push(parsed.data);
43336
+ }
43337
+ return out;
43338
+ }
43339
+ var ALL_ACCESS = [
43340
+ "view",
43341
+ "create",
43342
+ "delete"
43343
+ ];
43344
+ function deviceReach(scopes, fleet, access, isAdmin) {
43345
+ if (isAdmin) return {
43346
+ all: true,
43347
+ deviceCount: fleet.length
43348
+ };
43349
+ return {
43350
+ all: hasBroadDeviceGrant(scopes, access) || deviceScopesFor(scopes, access).some((s) => s.selector.kind === "all"),
43351
+ deviceCount: resolveViewableDeviceIds(scopes, fleet, access).size
43352
+ };
43353
+ }
43354
+ function capabilityGrants(scopes) {
43355
+ const out = [];
43356
+ for (const s of scopes) if (s.type === "capability") out.push({
43357
+ name: s.target,
43358
+ access: s.access
43359
+ });
43360
+ return out;
43361
+ }
43362
+ function addonGrants(scopes) {
43363
+ const out = [];
43364
+ for (const s of scopes) if (s.type === "addon") out.push({
43365
+ name: s.target,
43366
+ access: s.access
43367
+ });
43368
+ return out;
43369
+ }
43370
+ /** Build the {@link EffectiveScope} for a caller from their scopes + the fleet. */
43371
+ function summarizeEffectiveScope(scopes, fleet, isAdmin) {
43372
+ const device = {
43373
+ view: deviceReach(scopes, fleet, "view", isAdmin),
43374
+ create: deviceReach(scopes, fleet, "create", isAdmin),
43375
+ delete: deviceReach(scopes, fleet, "delete", isAdmin)
43376
+ };
43377
+ const system = isAdmin ? ALL_ACCESS : ALL_ACCESS.filter((a) => scopes.some((s) => s.type === "category" && s.target === "system" && s.access.includes(a)));
43378
+ return {
43379
+ isAdmin,
43380
+ allDevicesViewable: device.view.all,
43381
+ viewableDeviceCount: device.view.deviceCount,
43382
+ device,
43383
+ system,
43384
+ capabilities: capabilityGrants(scopes),
43385
+ addons: addonGrants(scopes)
43386
+ };
43387
+ }
43388
+ //#endregion
41128
43389
  //#region src/types/device-type.ts
41129
43390
  var DEVICE_TYPE_INFO = { ["camera"]: {
41130
43391
  type: "camera",
@@ -42436,6 +44697,7 @@ function enumerateInferenceDevices(hw) {
42436
44697
  }
42437
44698
  //#endregion
42438
44699
  exports.ACCESSORY_LABEL = ACCESSORY_LABEL;
44700
+ exports.ACCESS_ROLES = ACCESS_ROLES;
42439
44701
  exports.ALEXA_EGRESS_PROFILE = ALEXA_EGRESS_PROFILE;
42440
44702
  exports.ALL_CAPABILITY_DEFINITIONS = ALL_CAPABILITY_DEFINITIONS;
42441
44703
  exports.APPLE_SA_TO_MACRO = APPLE_SA_TO_MACRO;
@@ -42682,6 +44944,7 @@ exports.DeviceInfoSchema = DeviceInfoSchema;
42682
44944
  exports.DeviceNetworkStatsSchema = DeviceNetworkStatsSchema;
42683
44945
  exports.DeviceRole = require_sleep.DeviceRole;
42684
44946
  exports.DeviceRuntimeState = DeviceRuntimeState;
44947
+ exports.DeviceSelectorSchema = DeviceSelectorSchema;
42685
44948
  exports.DeviceStatusSchema = DeviceStatusSchema;
42686
44949
  exports.DeviceType = require_sleep.DeviceType;
42687
44950
  exports.DiscoveredChildDeviceSchema = DiscoveredChildDeviceSchema;
@@ -42831,6 +45094,7 @@ exports.MAX_EXPRESSION_CALL_ARGS = MAX_EXPRESSION_CALL_ARGS;
42831
45094
  exports.MAX_EXPRESSION_EVAL_STEPS = MAX_EXPRESSION_EVAL_STEPS;
42832
45095
  exports.MAX_EXPRESSION_SOURCE_LENGTH = MAX_EXPRESSION_SOURCE_LENGTH;
42833
45096
  exports.METHOD_ACCESS_MAP = METHOD_ACCESS_MAP;
45097
+ exports.METHOD_DEVICE_SELECTORS = METHOD_DEVICE_SELECTORS;
42834
45098
  exports.MODEL_FORMATS = MODEL_FORMATS;
42835
45099
  exports.MOTION_TRIGGER_FEATURE = MOTION_TRIGGER_FEATURE;
42836
45100
  exports.ManagedModelCatalogEntrySchema = ManagedModelCatalogEntrySchema;
@@ -43129,6 +45393,7 @@ exports.STREAM_PROFILE_META = STREAM_PROFILE_META;
43129
45393
  exports.STREAM_QUALITY_LABELS = STREAM_QUALITY_LABELS;
43130
45394
  exports.SUB_DETECTION_TYPES = SUB_DETECTION_TYPES;
43131
45395
  exports.SYSTEM_CAP_NAMES = SYSTEM_CAP_NAMES;
45396
+ exports.SYSTEM_SCOPE_DEVICE_METHODS = SYSTEM_SCOPE_DEVICE_METHODS;
43132
45397
  exports.SceneCheckSchema = SceneCheckSchema;
43133
45398
  exports.SceneConditionSchema = SceneConditionSchema;
43134
45399
  exports.SceneMonitorSchema = SceneMonitorSchema;
@@ -43351,6 +45616,7 @@ exports.buildFfmpegArgs = require_canonical_hash.buildFfmpegArgs;
43351
45616
  exports.buildInputArgs = require_canonical_hash.buildInputArgs;
43352
45617
  exports.buildModelVariantGroups = buildModelVariantGroups;
43353
45618
  exports.buildNcTaxonomy = buildNcTaxonomy;
45619
+ exports.buildRoleScopes = buildRoleScopes;
43354
45620
  exports.buildStreamParamsConfigSchema = buildStreamParamsConfigSchema;
43355
45621
  exports.buildVideoArgs = require_canonical_hash.buildVideoArgs;
43356
45622
  exports.buttonCapability = buttonCapability;
@@ -43408,6 +45674,7 @@ exports.deriveCameraSwitches = deriveCameraSwitches;
43408
45674
  exports.deriveDetailCropRect = deriveDetailCropRect;
43409
45675
  exports.deriveRecordingMode = deriveRecordingMode;
43410
45676
  exports.describeModelVariant = describeModelVariant;
45677
+ exports.detectAccessRole = detectAccessRole;
43411
45678
  exports.detectionPipelineCapability = detectionPipelineCapability;
43412
45679
  exports.deviceAdoptionCapability = deviceAdoptionCapability;
43413
45680
  exports.deviceBackendToFormat = deviceBackendToFormat;
@@ -43418,6 +45685,7 @@ exports.deviceManagerCapability = deviceManagerCapability;
43418
45685
  exports.deviceMatchesProfile = deviceMatchesProfile;
43419
45686
  exports.deviceOpsCapability = require_sleep.deviceOpsCapability;
43420
45687
  exports.deviceProviderCapability = deviceProviderCapability;
45688
+ exports.deviceSelectorMatches = deviceSelectorMatches;
43421
45689
  exports.deviceStateCapability = deviceStateCapability;
43422
45690
  exports.deviceStatusCapability = deviceStatusCapability;
43423
45691
  exports.doorbellCapability = doorbellCapability;
@@ -43530,6 +45798,7 @@ exports.nodePin = require_sleep.nodePin;
43530
45798
  exports.nodesCapability = nodesCapability;
43531
45799
  exports.normalizeAddonInitResult = require_sleep.normalizeAddonInitResult;
43532
45800
  exports.normalizeAudioLabel = normalizeAudioLabel;
45801
+ exports.normalizeTokenScopes = normalizeTokenScopes;
43533
45802
  exports.normalizeUnit = normalizeUnit;
43534
45803
  exports.notificationOutputCapability = notificationOutputCapability;
43535
45804
  exports.notificationRulesCapability = notificationRulesCapability;
@@ -43597,10 +45866,13 @@ exports.resolveMutate = resolveMutate;
43597
45866
  exports.resolveRunnerId = resolveRunnerId;
43598
45867
  exports.resolveScrubThumbnailGeometry = resolveScrubThumbnailGeometry;
43599
45868
  exports.resolveVariantModelId = resolveVariantModelId;
45869
+ exports.resolveViewableDeviceIds = resolveViewableDeviceIds;
45870
+ exports.roleSpec = roleSpec;
43600
45871
  exports.runInferenceStep = runInferenceStep;
43601
45872
  exports.runtimeDevices = runtimeDevices;
43602
45873
  exports.runtimeStatePolicyFor = runtimeStatePolicyFor;
43603
45874
  exports.sceneMonitorCapability = sceneMonitorCapability;
45875
+ exports.scopeInherits = scopeInherits;
43604
45876
  exports.scopeKey = require_sleep.scopeKey;
43605
45877
  exports.scopesAllowAddon = scopesAllowAddon;
43606
45878
  exports.scopesAllowDeviceCap = scopesAllowDeviceCap;
@@ -43629,6 +45901,7 @@ exports.streamPixels = streamPixels;
43629
45901
  exports.streamQualityLabel = streamQualityLabel;
43630
45902
  exports.subKindsOf = subKindsOf;
43631
45903
  exports.summarisePrivacyAudio = summarisePrivacyAudio;
45904
+ exports.summarizeEffectiveScope = summarizeEffectiveScope;
43632
45905
  exports.supportedRuntimes = supportedRuntimes;
43633
45906
  exports.switchCapability = switchCapability;
43634
45907
  exports.switchedOffIds = switchedOffIds;