@camstack/addon-provider-hikvision 1.2.19 → 1.2.21

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (3) hide show
  1. package/dist/addon.js +1919 -26
  2. package/dist/addon.mjs +1919 -26
  3. package/package.json +1 -1
package/dist/addon.js CHANGED
@@ -3004,6 +3004,9 @@ function handlePipeResult(left, next, ctx) {
3004
3004
  fallback: left.fallback
3005
3005
  }, ctx);
3006
3006
  }
3007
+ var $ZodPreprocess = /*@__PURE__*/ $constructor("$ZodPreprocess", (inst, def) => {
3008
+ $ZodPipe.init(inst, def);
3009
+ });
3007
3010
  var $ZodReadonly = /*@__PURE__*/ $constructor("$ZodReadonly", (inst, def) => {
3008
3011
  $ZodType.init(inst, def);
3009
3012
  defineLazy(inst._zod, "propValues", () => def.innerType._zod.propValues);
@@ -5189,6 +5192,10 @@ function pipe(in_, out) {
5189
5192
  out
5190
5193
  });
5191
5194
  }
5195
+ var ZodPreprocess = /*@__PURE__*/ $constructor("ZodPreprocess", (inst, def) => {
5196
+ ZodPipe.init(inst, def);
5197
+ $ZodPreprocess.init(inst, def);
5198
+ });
5192
5199
  var ZodReadonly = /*@__PURE__*/ $constructor("ZodReadonly", (inst, def) => {
5193
5200
  $ZodReadonly.init(inst, def);
5194
5201
  ZodType.init(inst, def);
@@ -5247,6 +5254,13 @@ function _instanceof(cls, params = {}) {
5247
5254
  };
5248
5255
  return inst;
5249
5256
  }
5257
+ function preprocess(fn, schema) {
5258
+ return new ZodPreprocess({
5259
+ type: "pipe",
5260
+ in: transform(fn),
5261
+ out: schema
5262
+ });
5263
+ }
5250
5264
  //#endregion
5251
5265
  //#region ../../node_modules/zod/v4/classic/compat.js
5252
5266
  /** @deprecated Use the raw string literal codes instead, e.g. "invalid_type". */
@@ -13383,11 +13397,33 @@ var NotificationFormatSchema = _enum([
13383
13397
  * Named by INTENT, never by glyph. "check" would tie the vocabulary to one
13384
13398
  * renderer's icon set; "acknowledge" survives an adapter that draws it
13385
13399
  * differently.
13400
+ *
13401
+ * ── A TOKEN IS NOT A WIRE VALUE ─────────────────────────────────────
13402
+ *
13403
+ * These names are for US. **No adapter may forward one verbatim.** Each maps
13404
+ * the whole set onto its own renderer's vocabulary through a
13405
+ * `Record<NotificationActionIcon, string>` — a Record, never a lookup with a
13406
+ * fallback, so adding a member here fails every adapter's build until someone
13407
+ * decides its glyph, which is the only place that decision can be made
13408
+ * honestly.
13409
+ *
13410
+ * This paragraph is the bug. Zentik declared `actionIcons: true` and passed
13411
+ * `disarm` straight through; iOS feeds that string to
13412
+ * `UNNotificationActionIcon(systemImageName:)`, `disarm` is not an SF Symbol,
13413
+ * and every snooze and alarm button arrived BLANK. A pass-through is not a
13414
+ * mapping, and "the field is documented" is not "the value renders".
13415
+ *
13416
+ * Adding a member is TRAIN-BOUND. The enum lives in the published
13417
+ * `@camstack/server` closure and the cap seam validates against the HUB's copy,
13418
+ * so an addon that emits a token the running hub does not know does not lose an
13419
+ * icon — its whole `send` fails Zod validation and the notification never
13420
+ * arrives. Never emit a new token from an addon before the train carrying it.
13386
13421
  */
13387
13422
  var NotificationActionIconSchema = _enum([
13388
13423
  "acknowledge",
13389
13424
  "dismiss",
13390
13425
  "silence",
13426
+ "snooze",
13391
13427
  "view",
13392
13428
  "play",
13393
13429
  "open",
@@ -13395,9 +13431,13 @@ var NotificationActionIconSchema = _enum([
13395
13431
  "lock",
13396
13432
  "unlock",
13397
13433
  "arm",
13434
+ "arm-home",
13435
+ "arm-away",
13436
+ "arm-night",
13398
13437
  "disarm",
13399
13438
  "light",
13400
- "alert"
13439
+ "alert",
13440
+ "camera"
13401
13441
  ]);
13402
13442
  /** A single tap-through action button. */
13403
13443
  var NotificationActionSchema = object({
@@ -13597,6 +13637,24 @@ method(object({}), array(TargetKindSchema)), method(object({}), array(TargetSche
13597
13637
  targetId: string(),
13598
13638
  enabled: boolean()
13599
13639
  }), _void(), { kind: "mutation" });
13640
+ new Set([
13641
+ {
13642
+ id: "person",
13643
+ name: "Person"
13644
+ },
13645
+ {
13646
+ id: "vehicle",
13647
+ name: "Vehicle"
13648
+ },
13649
+ {
13650
+ id: "animal",
13651
+ name: "Animal"
13652
+ },
13653
+ {
13654
+ id: "package",
13655
+ name: "Package"
13656
+ }
13657
+ ].map((l) => l.id));
13600
13658
  var COCO_TO_MACRO = {
13601
13659
  mapping: {
13602
13660
  person: "person",
@@ -14432,6 +14490,8 @@ var NcSystemEventKindSchema = _enum([
14432
14490
  "alarm-triggered",
14433
14491
  "alarm-armed",
14434
14492
  "alarm-disarmed",
14493
+ "alarm-arming",
14494
+ "alarm-arm-refused",
14435
14495
  "camera-online",
14436
14496
  "camera-offline",
14437
14497
  "camera-disabled",
@@ -15640,7 +15700,87 @@ var MethodAccessSchema = _enum([
15640
15700
  var AllowedProviderSchema = union([literal("*"), array(string())]);
15641
15701
  var AllowedDevicesSchema = record(string(), union([literal("*"), array(string())]));
15642
15702
  var CapScopeSchema = _enum(["device", "system"]);
15643
- var TokenScopeSchema = discriminatedUnion("type", [
15703
+ /**
15704
+ * DeviceSelector (scope model v3 — 2026-08-12).
15705
+ *
15706
+ * A `device` grant no longer carries a frozen list of deviceIds. It carries
15707
+ * a SELECTOR the matcher resolves against the live fleet, so the grant can be
15708
+ * DYNAMIC: a `types:['camera']` selector automatically covers a camera added
15709
+ * AFTER the grant was minted — no re-grant, no re-login.
15710
+ *
15711
+ * - `all` — every device in the deployment. The broad viewer/operator
15712
+ * lever without a `category` grant (a `category` grant also covers device
15713
+ * caps that carry no deviceId; `all` is specifically the device set).
15714
+ * - `ids` — an explicit deviceId list. This is what a v2 `device:[…]`
15715
+ * grant migrates to (see {@link TokenScopeSchema}); STATIC — a new camera
15716
+ * is NOT covered until the grant is edited.
15717
+ * - `types` — every device of a `DeviceType` (e.g. every `camera`).
15718
+ * DYNAMIC. A device that changes type, or a new device of the type,
15719
+ * re-resolves on the next request.
15720
+ * - `locations` — every device whose operator-assigned `location` label is
15721
+ * in the set (e.g. "Garden", "Front door"). DYNAMIC. A device with a
15722
+ * null/unset location matches NO `locations` selector.
15723
+ */
15724
+ var DeviceSelectorSchema = discriminatedUnion("kind", [
15725
+ object({ kind: literal("all") }),
15726
+ object({
15727
+ kind: literal("ids"),
15728
+ ids: array(number().int()).min(1)
15729
+ }),
15730
+ object({
15731
+ kind: literal("types"),
15732
+ types: array(_enum(DeviceType)).min(1)
15733
+ }),
15734
+ object({
15735
+ kind: literal("locations"),
15736
+ locations: array(string().min(1)).min(1)
15737
+ })
15738
+ ]);
15739
+ var DeviceTokenScopeSchema = object({
15740
+ type: literal("device"),
15741
+ /** The device SET this grant covers — resolved against the live fleet. */
15742
+ selector: DeviceSelectorSchema,
15743
+ access: array(MethodAccessSchema).min(1),
15744
+ /**
15745
+ * Whether a grant on a PARENT device transparently covers its accessory
15746
+ * CHILDREN (siren / floodlight / PIR) via the persisted-parentage walk.
15747
+ * Direction is parent → children ONLY.
15748
+ *
15749
+ * Absent → the matcher DERIVES it from the access flavour: `view`
15750
+ * inherits (a camera viewer sees the camera's accessories), `create` /
15751
+ * `delete` do NOT (actuating/removing a child is an explicit act the
15752
+ * operator must grant on the child, not inherit from the parent). Set it
15753
+ * explicitly to override that default per grant.
15754
+ */
15755
+ includeLinked: boolean().optional()
15756
+ });
15757
+ /**
15758
+ * v2 → v3 lazy migration. A pre-v3 `device` grant carried
15759
+ * `targets: string[]` (stringified deviceIds); it rewrites to the equivalent
15760
+ * `selector: {kind:'ids', ids}`. Applied as a `preprocess` so it runs on
15761
+ * EVERY parse path — stored records AND the JWT-carried scope arrays
15762
+ * normalised at the request boundary ({@link normalizeTokenScopes} in
15763
+ * `device-selector.ts`). Chosen over a one-time DB migration because a
15764
+ * migration cannot reach a JWT already in a client's hands; parse-time
15765
+ * migration covers both without a flag day. No cast — the raw object is read
15766
+ * through `Reflect.get` (its static type is `unknown`).
15767
+ */
15768
+ function migrateLegacyTokenScope(raw) {
15769
+ if (raw === null || typeof raw !== "object" || Array.isArray(raw)) return raw;
15770
+ if (Reflect.get(raw, "type") !== "device") return raw;
15771
+ if (Reflect.get(raw, "selector") !== void 0) return raw;
15772
+ const targets = Reflect.get(raw, "targets");
15773
+ if (!Array.isArray(targets)) return raw;
15774
+ return {
15775
+ type: "device",
15776
+ selector: {
15777
+ kind: "ids",
15778
+ ids: targets.map((t) => typeof t === "string" ? Number(t) : t).filter((n) => typeof n === "number" && Number.isInteger(n))
15779
+ },
15780
+ access: Reflect.get(raw, "access")
15781
+ };
15782
+ }
15783
+ var TokenScopeSchema = preprocess(migrateLegacyTokenScope, discriminatedUnion("type", [
15644
15784
  object({
15645
15785
  type: literal("category"),
15646
15786
  target: CapScopeSchema,
@@ -15656,18 +15796,8 @@ var TokenScopeSchema = discriminatedUnion("type", [
15656
15796
  target: string(),
15657
15797
  access: array(MethodAccessSchema).min(1)
15658
15798
  }),
15659
- object({
15660
- type: literal("device"),
15661
- /**
15662
- * One or more deviceIds (serialised as strings for wire-format
15663
- * consistency with the rest of the union). Matcher accepts if
15664
- * `input.deviceId` ∈ `targets`. Array shape avoids the row-explosion
15665
- * of one scope-per-device when granting access to a set of cameras.
15666
- */
15667
- targets: array(string()).min(1),
15668
- access: array(MethodAccessSchema).min(1)
15669
- })
15670
- ]);
15799
+ DeviceTokenScopeSchema
15800
+ ]));
15671
15801
  object({
15672
15802
  id: string(),
15673
15803
  username: string(),
@@ -17704,10 +17834,26 @@ var detectionFpsField = {
17704
17834
  default: 10,
17705
17835
  step: 1
17706
17836
  };
17837
+ /**
17838
+ * The occupancy re-check interval. DEFAULT 300 s (2026-08-13 — was 30 s).
17839
+ *
17840
+ * The recheck is now on by default (a parked car is invisible to occupancy
17841
+ * rules until the stationary registry has been rebuilt by motion, which after a
17842
+ * restart may be never on a quiet camera). Each cycle re-subscribes a detection
17843
+ * session — an RTSP re-dial — so the switch is only affordable at a WIDE
17844
+ * interval: 300 s is ~12 re-dials an hour per camera, against 120 at the old
17845
+ * 30 s. A parked car is therefore counted within 5 minutes of a restart.
17846
+ *
17847
+ * Why not wider: `max` is 300 and raising it is TRAIN-BOUND, not addon-bound —
17848
+ * the host validates `attachCamera` against ITS copy of this schema, so a
17849
+ * runner asked for 600 would be rejected by the hub until a `@camstack/server`
17850
+ * carrying the wider bound is installed everywhere. 300 is the widest value
17851
+ * that ships with an addon deploy.
17852
+ */
17707
17853
  var occupancyRecheckSecField = {
17708
17854
  min: 0,
17709
17855
  max: 300,
17710
- default: 30,
17856
+ default: 300,
17711
17857
  step: 5
17712
17858
  };
17713
17859
  var occupancyRecheckFramesField = {
@@ -17905,15 +18051,21 @@ var RunnerCameraConfigSchema = object({
17905
18051
  */
17906
18052
  onboardMotionDrivesAnalyzer: boolean().default(true),
17907
18053
  /**
17908
- * Master toggle for the occupancy re-check. When `false` (DEFAULT) the runner
17909
- * never arms the periodic recheck timer, regardless of `occupancyRecheckSec`
17910
- * this is off by default because the recheck re-subscribes a detection session
17911
- * every N seconds while `watching`, a major source of pull-decoder re-dial
17912
- * churn (each cycle creates+tears a session → RTSP re-dial → latency). The
18054
+ * Master toggle for the occupancy re-check. When `false` the runner never arms
18055
+ * the periodic recheck timer, regardless of `occupancyRecheckSec`; the
17913
18056
  * `occupancyRecheckSec` / `occupancyRecheckFrames` sliders only take effect
17914
18057
  * (and only render) when this is enabled.
18058
+ *
18059
+ * DEFAULT `true` since 2026-08-13 (was `false`). It was off because the
18060
+ * recheck re-subscribes a detection session every N seconds while `watching`
18061
+ * — each cycle creates+tears a session ⇒ an RTSP re-dial ⇒ latency, a major
18062
+ * pull-decoder churn source. What that bought was a blind spot: a STATIONARY
18063
+ * object is counted only while the stationary registry holds it, and the
18064
+ * registry rebuilds from motion, so after a restart a parked car was invisible
18065
+ * to every occupancy rule until something moved in front of it. The churn is
18066
+ * now paid on the interval instead — see `occupancyRecheckSecField`.
17915
18067
  */
17916
- occupancyRecheckEnabled: boolean().default(false),
18068
+ occupancyRecheckEnabled: boolean().default(true),
17917
18069
  occupancyRecheckSec: number().min(occupancyRecheckSecField.min).max(occupancyRecheckSecField.max).default(occupancyRecheckSecField.default),
17918
18070
  occupancyRecheckFrames: number().min(occupancyRecheckFramesField.min).max(occupancyRecheckFramesField.max).default(occupancyRecheckFramesField.default),
17919
18071
  /**
@@ -23067,7 +23219,41 @@ var intercomCapability = {
23067
23219
  status: {
23068
23220
  schema: IntercomStatusSchema,
23069
23221
  kind: "command-driven"
23070
- }
23222
+ },
23223
+ /**
23224
+ * Runtime-state slice — mirrored by the kernel.
23225
+ *
23226
+ * The cap declared `status` and nothing else, so the only two sources an
23227
+ * exporter has for a value — the `device.state-changed` slice event and the
23228
+ * `deviceState.getAllSnapshots` snapshot, both built from runtime state —
23229
+ * carried nothing for `intercom`. A talk-back entity in Home Assistant would
23230
+ * have been published and never received a value, which is the defect the
23231
+ * export's two classification tables exist to prevent (177 of them, once), so
23232
+ * `intercom` was excluded rather than exported.
23233
+ *
23234
+ * The shape is the status shape: there is exactly one truth about talk-back
23235
+ * and duplicating it into a second schema is how two halves of one capability
23236
+ * come to disagree. Providers write it through
23237
+ * `this.runtimeState.setCapState('intercom', …)` at the four points that open
23238
+ * and close a session, and seed it at registration so the slice exists before
23239
+ * the first session rather than after it.
23240
+ *
23241
+ * **Bound, named rather than hidden:** `talking` mirrors the provider's own
23242
+ * session handle, so a session torn down by a transport death that never
23243
+ * reaches `stopSession` / `endTalkSession` leaves it latched until the next
23244
+ * session or the next restart. That is why the slice is `session` and not
23245
+ * `restored` — a restart must never restore "talking".
23246
+ */
23247
+ runtimeState: IntercomStatusSchema,
23248
+ /**
23249
+ * Runtime-state durability: **session** — `talking` describes a live audio
23250
+ * session, which by definition does not survive the process that held it.
23251
+ * Restoring it would publish a camera as talking to nobody.
23252
+ *
23253
+ * See `RuntimeStateDurability`. Enforced by
23254
+ * `scripts/check-runtime-state-durability.ts`.
23255
+ */
23256
+ durability: "session"
23071
23257
  };
23072
23258
  /**
23073
23259
  * Robotic lawn-mower cap. Models HA `lawn_mower.*` entities — anything
@@ -25898,7 +26084,7 @@ method(object({
25898
26084
  toMs: number()
25899
26085
  }), RecordingAvailabilitySchema, {
25900
26086
  kind: "query",
25901
- auth: "admin"
26087
+ auth: "protected"
25902
26088
  }), method(object({
25903
26089
  deviceId: number(),
25904
26090
  fromMs: number(),
@@ -25906,14 +26092,14 @@ method(object({
25906
26092
  tzOffsetMinutes: number()
25907
26093
  }), RecordingDaysSchema, {
25908
26094
  kind: "query",
25909
- auth: "admin"
26095
+ auth: "protected"
25910
26096
  }), method(object({
25911
26097
  deviceId: number(),
25912
26098
  fromMs: number(),
25913
26099
  toMs: number()
25914
26100
  }), RecordingManifestSchema, {
25915
26101
  kind: "query",
25916
- auth: "admin"
26102
+ auth: "protected"
25917
26103
  }), method(object({}), RecordingStorageUsageSchema, {
25918
26104
  kind: "query",
25919
26105
  auth: "admin"
@@ -28389,6 +28575,7 @@ var DEVICE_LOCAL_STATE_CAPS = {
28389
28575
  humiditySensor: humiditySensorCapability,
28390
28576
  image: imageCapability,
28391
28577
  imageSettings: imageSettingsCapability,
28578
+ intercom: intercomCapability,
28392
28579
  lawnMowerControl: lawnMowerControlCapability,
28393
28580
  lockControl: lockControlCapability,
28394
28581
  mediaPlayer: mediaPlayerCapability,
@@ -34876,6 +35063,1678 @@ Object.freeze({
34876
35063
  access: "create"
34877
35064
  }
34878
35065
  });
35066
+ Object.freeze({
35067
+ "accessories.setChildHidden": [{
35068
+ name: "childDeviceId",
35069
+ form: "single",
35070
+ optional: false
35071
+ }, {
35072
+ name: "deviceId",
35073
+ form: "single",
35074
+ optional: false
35075
+ }],
35076
+ "addonSettings.getDeviceSettings": [{
35077
+ name: "deviceId",
35078
+ form: "single",
35079
+ optional: false
35080
+ }],
35081
+ "addonSettings.updateDeviceSettings": [{
35082
+ name: "deviceId",
35083
+ form: "single",
35084
+ optional: false
35085
+ }],
35086
+ "alarmPanel.arm": [{
35087
+ name: "deviceId",
35088
+ form: "single",
35089
+ optional: false
35090
+ }],
35091
+ "alarmPanel.disarm": [{
35092
+ name: "deviceId",
35093
+ form: "single",
35094
+ optional: false
35095
+ }],
35096
+ "alarmPanel.trigger": [{
35097
+ name: "deviceId",
35098
+ form: "single",
35099
+ optional: false
35100
+ }],
35101
+ "audioAnalysis.resolveDeviceSettings": [{
35102
+ name: "deviceId",
35103
+ form: "single",
35104
+ optional: false
35105
+ }],
35106
+ "audioAnalyzer.classify": [{
35107
+ name: "deviceId",
35108
+ form: "single",
35109
+ optional: true
35110
+ }],
35111
+ "audioMetrics.getCurrentSnapshot": [{
35112
+ name: "deviceId",
35113
+ form: "single",
35114
+ optional: false
35115
+ }],
35116
+ "audioMetrics.getHistory": [{
35117
+ name: "deviceId",
35118
+ form: "single",
35119
+ optional: false
35120
+ }],
35121
+ "automationControl.disable": [{
35122
+ name: "deviceId",
35123
+ form: "single",
35124
+ optional: false
35125
+ }],
35126
+ "automationControl.enable": [{
35127
+ name: "deviceId",
35128
+ form: "single",
35129
+ optional: false
35130
+ }],
35131
+ "automationControl.trigger": [{
35132
+ name: "deviceId",
35133
+ form: "single",
35134
+ optional: false
35135
+ }],
35136
+ "battery.wakeForStream": [{
35137
+ name: "deviceId",
35138
+ form: "single",
35139
+ optional: false
35140
+ }],
35141
+ "brightness.setBrightness": [{
35142
+ name: "deviceId",
35143
+ form: "single",
35144
+ optional: false
35145
+ }],
35146
+ "button.press": [{
35147
+ name: "deviceId",
35148
+ form: "single",
35149
+ optional: false
35150
+ }],
35151
+ "cameraCredentials.getCredentials": [{
35152
+ name: "deviceId",
35153
+ form: "single",
35154
+ optional: false
35155
+ }],
35156
+ "cameraStreams.getBrokerStreams": [{
35157
+ name: "deviceId",
35158
+ form: "single",
35159
+ optional: false
35160
+ }],
35161
+ "cameraStreams.getCameraStreams": [{
35162
+ name: "deviceId",
35163
+ form: "single",
35164
+ optional: false
35165
+ }],
35166
+ "cameraStreams.getProfileRtspEntries": [{
35167
+ name: "deviceId",
35168
+ form: "single",
35169
+ optional: false
35170
+ }],
35171
+ "cameraStreams.getRtspEntries": [{
35172
+ name: "deviceId",
35173
+ form: "single",
35174
+ optional: false
35175
+ }],
35176
+ "cameraStreams.pickStream": [{
35177
+ name: "deviceId",
35178
+ form: "single",
35179
+ optional: false
35180
+ }],
35181
+ "climateControl.setFanMode": [{
35182
+ name: "deviceId",
35183
+ form: "single",
35184
+ optional: false
35185
+ }],
35186
+ "climateControl.setMode": [{
35187
+ name: "deviceId",
35188
+ form: "single",
35189
+ optional: false
35190
+ }],
35191
+ "climateControl.setPreset": [{
35192
+ name: "deviceId",
35193
+ form: "single",
35194
+ optional: false
35195
+ }],
35196
+ "climateControl.setSwingHorizontal": [{
35197
+ name: "deviceId",
35198
+ form: "single",
35199
+ optional: false
35200
+ }],
35201
+ "climateControl.setSwingVertical": [{
35202
+ name: "deviceId",
35203
+ form: "single",
35204
+ optional: false
35205
+ }],
35206
+ "climateControl.setTarget": [{
35207
+ name: "deviceId",
35208
+ form: "single",
35209
+ optional: false
35210
+ }],
35211
+ "climateControl.setTargetHumidity": [{
35212
+ name: "deviceId",
35213
+ form: "single",
35214
+ optional: false
35215
+ }],
35216
+ "climateControl.setTargetRange": [{
35217
+ name: "deviceId",
35218
+ form: "single",
35219
+ optional: false
35220
+ }],
35221
+ "color.setColor": [{
35222
+ name: "deviceId",
35223
+ form: "single",
35224
+ optional: false
35225
+ }],
35226
+ "consumables.reset": [{
35227
+ name: "deviceId",
35228
+ form: "single",
35229
+ optional: false
35230
+ }],
35231
+ "control.setValue": [{
35232
+ name: "deviceId",
35233
+ form: "single",
35234
+ optional: false
35235
+ }],
35236
+ "cover.close": [{
35237
+ name: "deviceId",
35238
+ form: "single",
35239
+ optional: false
35240
+ }],
35241
+ "cover.open": [{
35242
+ name: "deviceId",
35243
+ form: "single",
35244
+ optional: false
35245
+ }],
35246
+ "cover.setPosition": [{
35247
+ name: "deviceId",
35248
+ form: "single",
35249
+ optional: false
35250
+ }],
35251
+ "cover.setTiltPosition": [{
35252
+ name: "deviceId",
35253
+ form: "single",
35254
+ optional: false
35255
+ }],
35256
+ "cover.stop": [{
35257
+ name: "deviceId",
35258
+ form: "single",
35259
+ optional: false
35260
+ }],
35261
+ "dayNight.getOptions": [{
35262
+ name: "deviceId",
35263
+ form: "single",
35264
+ optional: false
35265
+ }],
35266
+ "dayNight.setSettings": [{
35267
+ name: "deviceId",
35268
+ form: "single",
35269
+ optional: false
35270
+ }],
35271
+ "decoder.createSession": [{
35272
+ name: "deviceId",
35273
+ form: "single",
35274
+ optional: true
35275
+ }],
35276
+ "deviceAdoption.release": [{
35277
+ name: "camDeviceId",
35278
+ form: "single",
35279
+ optional: false
35280
+ }],
35281
+ "deviceAdoption.resync": [{
35282
+ name: "camDeviceId",
35283
+ form: "single",
35284
+ optional: false
35285
+ }],
35286
+ "deviceDiscovery.adoptDevice": [{
35287
+ name: "deviceId",
35288
+ form: "single",
35289
+ optional: false
35290
+ }],
35291
+ "deviceDiscovery.listDiscovered": [{
35292
+ name: "deviceId",
35293
+ form: "single",
35294
+ optional: false
35295
+ }],
35296
+ "deviceDiscovery.refreshDiscovery": [{
35297
+ name: "deviceId",
35298
+ form: "single",
35299
+ optional: false
35300
+ }],
35301
+ "deviceDiscovery.releaseDevice": [{
35302
+ name: "childDeviceId",
35303
+ form: "single",
35304
+ optional: false
35305
+ }, {
35306
+ name: "deviceId",
35307
+ form: "single",
35308
+ optional: false
35309
+ }],
35310
+ "deviceManager.adoptionRelease": [{
35311
+ name: "camDeviceId",
35312
+ form: "single",
35313
+ optional: false
35314
+ }],
35315
+ "deviceManager.adoptionResync": [{
35316
+ name: "camDeviceId",
35317
+ form: "single",
35318
+ optional: false
35319
+ }],
35320
+ "deviceManager.applyInitialMeta": [{
35321
+ name: "deviceId",
35322
+ form: "single",
35323
+ optional: false
35324
+ }, {
35325
+ name: "linkDeviceId",
35326
+ form: "single",
35327
+ optional: true
35328
+ }],
35329
+ "deviceManager.disable": [{
35330
+ name: "deviceId",
35331
+ form: "single",
35332
+ optional: false
35333
+ }],
35334
+ "deviceManager.enable": [{
35335
+ name: "deviceId",
35336
+ form: "single",
35337
+ optional: false
35338
+ }],
35339
+ "deviceManager.getBindings": [{
35340
+ name: "deviceId",
35341
+ form: "single",
35342
+ optional: false
35343
+ }],
35344
+ "deviceManager.getChildren": [{
35345
+ name: "parentDeviceId",
35346
+ form: "single",
35347
+ optional: false
35348
+ }],
35349
+ "deviceManager.getConfigSchema": [{
35350
+ name: "deviceId",
35351
+ form: "single",
35352
+ optional: false
35353
+ }],
35354
+ "deviceManager.getDevice": [{
35355
+ name: "deviceId",
35356
+ form: "single",
35357
+ optional: false
35358
+ }],
35359
+ "deviceManager.getDeviceAggregate": [{
35360
+ name: "deviceId",
35361
+ form: "single",
35362
+ optional: false
35363
+ }],
35364
+ "deviceManager.getDeviceLiveInfoAggregate": [{
35365
+ name: "deviceId",
35366
+ form: "single",
35367
+ optional: false
35368
+ }],
35369
+ "deviceManager.getDeviceSettingsAggregate": [{
35370
+ name: "deviceId",
35371
+ form: "single",
35372
+ optional: false
35373
+ }],
35374
+ "deviceManager.getDeviceStatusAggregate": [{
35375
+ name: "deviceId",
35376
+ form: "single",
35377
+ optional: false
35378
+ }],
35379
+ "deviceManager.getDeviceStatusAggregateBatch": [{
35380
+ name: "deviceIds",
35381
+ form: "array",
35382
+ optional: false
35383
+ }],
35384
+ "deviceManager.getLinkedDevices": [{
35385
+ name: "deviceId",
35386
+ form: "single",
35387
+ optional: false
35388
+ }],
35389
+ "deviceManager.getSettingsSchema": [{
35390
+ name: "deviceId",
35391
+ form: "single",
35392
+ optional: false
35393
+ }],
35394
+ "deviceManager.getStreamProfileMap": [{
35395
+ name: "deviceId",
35396
+ form: "single",
35397
+ optional: false
35398
+ }],
35399
+ "deviceManager.getStreamSources": [{
35400
+ name: "deviceId",
35401
+ form: "single",
35402
+ optional: false
35403
+ }],
35404
+ "deviceManager.getWireableFields": [{
35405
+ name: "deviceId",
35406
+ form: "single",
35407
+ optional: false
35408
+ }],
35409
+ "deviceManager.loadConfig": [{
35410
+ name: "deviceId",
35411
+ form: "single",
35412
+ optional: false
35413
+ }],
35414
+ "deviceManager.loadMeta": [{
35415
+ name: "deviceId",
35416
+ form: "single",
35417
+ optional: false
35418
+ }],
35419
+ "deviceManager.loadRuntimeState": [{
35420
+ name: "deviceId",
35421
+ form: "single",
35422
+ optional: false
35423
+ }],
35424
+ "deviceManager.persistConfig": [{
35425
+ name: "deviceId",
35426
+ form: "single",
35427
+ optional: false
35428
+ }],
35429
+ "deviceManager.probeStreams": [{
35430
+ name: "deviceId",
35431
+ form: "single",
35432
+ optional: false
35433
+ }],
35434
+ "deviceManager.registerDevice": [{
35435
+ name: "parentDeviceId",
35436
+ form: "single",
35437
+ optional: true
35438
+ }],
35439
+ "deviceManager.remove": [{
35440
+ name: "deviceId",
35441
+ form: "single",
35442
+ optional: false
35443
+ }],
35444
+ "deviceManager.removeDevice": [{
35445
+ name: "deviceId",
35446
+ form: "single",
35447
+ optional: false
35448
+ }],
35449
+ "deviceManager.runDeviceAction": [{
35450
+ name: "deviceId",
35451
+ form: "single",
35452
+ optional: false
35453
+ }],
35454
+ "deviceManager.setChildLayout": [{
35455
+ name: "deviceId",
35456
+ form: "single",
35457
+ optional: false
35458
+ }],
35459
+ "deviceManager.setDisabled": [{
35460
+ name: "deviceId",
35461
+ form: "single",
35462
+ optional: false
35463
+ }],
35464
+ "deviceManager.setDisplay": [{
35465
+ name: "deviceId",
35466
+ form: "single",
35467
+ optional: false
35468
+ }],
35469
+ "deviceManager.setIntegrationId": [{
35470
+ name: "deviceId",
35471
+ form: "single",
35472
+ optional: false
35473
+ }],
35474
+ "deviceManager.setLinkDeviceId": [{
35475
+ name: "deviceId",
35476
+ form: "single",
35477
+ optional: false
35478
+ }, {
35479
+ name: "linkDeviceId",
35480
+ form: "single",
35481
+ optional: true
35482
+ }],
35483
+ "deviceManager.setLocation": [{
35484
+ name: "deviceId",
35485
+ form: "single",
35486
+ optional: false
35487
+ }],
35488
+ "deviceManager.setMetadata": [{
35489
+ name: "deviceId",
35490
+ form: "single",
35491
+ optional: false
35492
+ }],
35493
+ "deviceManager.setName": [{
35494
+ name: "deviceId",
35495
+ form: "single",
35496
+ optional: false
35497
+ }],
35498
+ "deviceManager.setPrimaryChildEntityId": [{
35499
+ name: "deviceId",
35500
+ form: "single",
35501
+ optional: false
35502
+ }],
35503
+ "deviceManager.setRole": [{
35504
+ name: "deviceId",
35505
+ form: "single",
35506
+ optional: false
35507
+ }],
35508
+ "deviceManager.setStreamProfileMap": [{
35509
+ name: "deviceId",
35510
+ form: "single",
35511
+ optional: false
35512
+ }],
35513
+ "deviceManager.setType": [{
35514
+ name: "deviceId",
35515
+ form: "single",
35516
+ optional: false
35517
+ }],
35518
+ "deviceManager.setWrapperActive": [{
35519
+ name: "deviceId",
35520
+ form: "single",
35521
+ optional: false
35522
+ }],
35523
+ "deviceManager.testField": [{
35524
+ name: "deviceId",
35525
+ form: "single",
35526
+ optional: false
35527
+ }],
35528
+ "deviceManager.updateConfig": [{
35529
+ name: "deviceId",
35530
+ form: "single",
35531
+ optional: false
35532
+ }],
35533
+ "deviceManager.updateDeviceField": [{
35534
+ name: "deviceId",
35535
+ form: "single",
35536
+ optional: false
35537
+ }],
35538
+ "deviceManager.updateDeviceFieldsBatch": [{
35539
+ name: "deviceId",
35540
+ form: "single",
35541
+ optional: false
35542
+ }],
35543
+ "deviceOps.getConfigEntries": [{
35544
+ name: "deviceId",
35545
+ form: "single",
35546
+ optional: false
35547
+ }],
35548
+ "deviceOps.getRawState": [{
35549
+ name: "deviceId",
35550
+ form: "single",
35551
+ optional: false
35552
+ }],
35553
+ "deviceOps.getSettingsSchema": [{
35554
+ name: "deviceId",
35555
+ form: "single",
35556
+ optional: false
35557
+ }],
35558
+ "deviceOps.getStreamSources": [{
35559
+ name: "deviceId",
35560
+ form: "single",
35561
+ optional: false
35562
+ }],
35563
+ "deviceOps.removeDevice": [{
35564
+ name: "deviceId",
35565
+ form: "single",
35566
+ optional: false
35567
+ }],
35568
+ "deviceOps.runAction": [{
35569
+ name: "deviceId",
35570
+ form: "single",
35571
+ optional: false
35572
+ }],
35573
+ "deviceOps.setConfig": [{
35574
+ name: "deviceId",
35575
+ form: "single",
35576
+ optional: false
35577
+ }],
35578
+ "deviceState.getCapSlice": [{
35579
+ name: "deviceId",
35580
+ form: "single",
35581
+ optional: false
35582
+ }],
35583
+ "deviceState.getSnapshot": [{
35584
+ name: "deviceId",
35585
+ form: "single",
35586
+ optional: false
35587
+ }],
35588
+ "deviceState.setCapSlice": [{
35589
+ name: "deviceId",
35590
+ form: "single",
35591
+ optional: false
35592
+ }],
35593
+ "events.getEventClipUrl": [{
35594
+ name: "deviceId",
35595
+ form: "single",
35596
+ optional: false
35597
+ }],
35598
+ "events.getEvents": [{
35599
+ name: "deviceId",
35600
+ form: "single",
35601
+ optional: false
35602
+ }],
35603
+ "events.getEventThumbnail": [{
35604
+ name: "deviceId",
35605
+ form: "single",
35606
+ optional: false
35607
+ }],
35608
+ "faceGallery.getFaceByTrack": [{
35609
+ name: "deviceId",
35610
+ form: "single",
35611
+ optional: false
35612
+ }],
35613
+ "faceGallery.listRecentFaces": [{
35614
+ name: "deviceId",
35615
+ form: "single",
35616
+ optional: true
35617
+ }],
35618
+ "fanControl.setDirection": [{
35619
+ name: "deviceId",
35620
+ form: "single",
35621
+ optional: false
35622
+ }],
35623
+ "fanControl.setOscillating": [{
35624
+ name: "deviceId",
35625
+ form: "single",
35626
+ optional: false
35627
+ }],
35628
+ "fanControl.setPercentage": [{
35629
+ name: "deviceId",
35630
+ form: "single",
35631
+ optional: false
35632
+ }],
35633
+ "fanControl.setPreset": [{
35634
+ name: "deviceId",
35635
+ form: "single",
35636
+ optional: false
35637
+ }],
35638
+ "humidifier.setMode": [{
35639
+ name: "deviceId",
35640
+ form: "single",
35641
+ optional: false
35642
+ }],
35643
+ "humidifier.setOn": [{
35644
+ name: "deviceId",
35645
+ form: "single",
35646
+ optional: false
35647
+ }],
35648
+ "humidifier.setTargetHumidity": [{
35649
+ name: "deviceId",
35650
+ form: "single",
35651
+ optional: false
35652
+ }],
35653
+ "imageSettings.getOptions": [{
35654
+ name: "deviceId",
35655
+ form: "single",
35656
+ optional: false
35657
+ }],
35658
+ "imageSettings.setSettings": [{
35659
+ name: "deviceId",
35660
+ form: "single",
35661
+ optional: false
35662
+ }],
35663
+ "intercom.endTalkSession": [{
35664
+ name: "deviceId",
35665
+ form: "single",
35666
+ optional: false
35667
+ }],
35668
+ "intercom.handleAnswer": [{
35669
+ name: "deviceId",
35670
+ form: "single",
35671
+ optional: false
35672
+ }],
35673
+ "intercom.pushTalkAudio": [{
35674
+ name: "deviceId",
35675
+ form: "single",
35676
+ optional: false
35677
+ }],
35678
+ "intercom.startSession": [{
35679
+ name: "deviceId",
35680
+ form: "single",
35681
+ optional: false
35682
+ }],
35683
+ "intercom.startTalkSession": [{
35684
+ name: "deviceId",
35685
+ form: "single",
35686
+ optional: false
35687
+ }],
35688
+ "intercom.stopSession": [{
35689
+ name: "deviceId",
35690
+ form: "single",
35691
+ optional: false
35692
+ }],
35693
+ "lawnMowerControl.dock": [{
35694
+ name: "deviceId",
35695
+ form: "single",
35696
+ optional: false
35697
+ }],
35698
+ "lawnMowerControl.pause": [{
35699
+ name: "deviceId",
35700
+ form: "single",
35701
+ optional: false
35702
+ }],
35703
+ "lawnMowerControl.startMowing": [{
35704
+ name: "deviceId",
35705
+ form: "single",
35706
+ optional: false
35707
+ }],
35708
+ "lockControl.lock": [{
35709
+ name: "deviceId",
35710
+ form: "single",
35711
+ optional: false
35712
+ }],
35713
+ "lockControl.open": [{
35714
+ name: "deviceId",
35715
+ form: "single",
35716
+ optional: false
35717
+ }],
35718
+ "lockControl.unlock": [{
35719
+ name: "deviceId",
35720
+ form: "single",
35721
+ optional: false
35722
+ }],
35723
+ "mediaPlayer.next": [{
35724
+ name: "deviceId",
35725
+ form: "single",
35726
+ optional: false
35727
+ }],
35728
+ "mediaPlayer.pause": [{
35729
+ name: "deviceId",
35730
+ form: "single",
35731
+ optional: false
35732
+ }],
35733
+ "mediaPlayer.play": [{
35734
+ name: "deviceId",
35735
+ form: "single",
35736
+ optional: false
35737
+ }],
35738
+ "mediaPlayer.playMedia": [{
35739
+ name: "deviceId",
35740
+ form: "single",
35741
+ optional: false
35742
+ }],
35743
+ "mediaPlayer.previous": [{
35744
+ name: "deviceId",
35745
+ form: "single",
35746
+ optional: false
35747
+ }],
35748
+ "mediaPlayer.seek": [{
35749
+ name: "deviceId",
35750
+ form: "single",
35751
+ optional: false
35752
+ }],
35753
+ "mediaPlayer.selectSource": [{
35754
+ name: "deviceId",
35755
+ form: "single",
35756
+ optional: false
35757
+ }],
35758
+ "mediaPlayer.setMute": [{
35759
+ name: "deviceId",
35760
+ form: "single",
35761
+ optional: false
35762
+ }],
35763
+ "mediaPlayer.setRepeat": [{
35764
+ name: "deviceId",
35765
+ form: "single",
35766
+ optional: false
35767
+ }],
35768
+ "mediaPlayer.setShuffle": [{
35769
+ name: "deviceId",
35770
+ form: "single",
35771
+ optional: false
35772
+ }],
35773
+ "mediaPlayer.setVolume": [{
35774
+ name: "deviceId",
35775
+ form: "single",
35776
+ optional: false
35777
+ }],
35778
+ "mediaPlayer.stop": [{
35779
+ name: "deviceId",
35780
+ form: "single",
35781
+ optional: false
35782
+ }],
35783
+ "motion.isDetected": [{
35784
+ name: "deviceId",
35785
+ form: "single",
35786
+ optional: false
35787
+ }],
35788
+ "motionDetection.analyze": [{
35789
+ name: "deviceId",
35790
+ form: "single",
35791
+ optional: false
35792
+ }],
35793
+ "motionDetection.removeCamera": [{
35794
+ name: "deviceId",
35795
+ form: "single",
35796
+ optional: false
35797
+ }],
35798
+ "motionTrigger.setMotionTrigger": [{
35799
+ name: "deviceId",
35800
+ form: "single",
35801
+ optional: false
35802
+ }],
35803
+ "motionZones.getOptions": [{
35804
+ name: "deviceId",
35805
+ form: "single",
35806
+ optional: false
35807
+ }],
35808
+ "motionZones.setZone": [{
35809
+ name: "deviceId",
35810
+ form: "single",
35811
+ optional: false
35812
+ }],
35813
+ "nativeObjectDetection.setEnabled": [{
35814
+ name: "deviceId",
35815
+ form: "single",
35816
+ optional: false
35817
+ }],
35818
+ "networkQuality.getDeviceStats": [{
35819
+ name: "deviceId",
35820
+ form: "single",
35821
+ optional: false
35822
+ }],
35823
+ "networkQuality.reportClientStats": [{
35824
+ name: "deviceId",
35825
+ form: "single",
35826
+ optional: false
35827
+ }],
35828
+ "notificationRules.setDeviceMuted": [{
35829
+ name: "deviceId",
35830
+ form: "single",
35831
+ optional: false
35832
+ }],
35833
+ "notifier.cancel": [{
35834
+ name: "deviceId",
35835
+ form: "single",
35836
+ optional: false
35837
+ }],
35838
+ "notifier.send": [{
35839
+ name: "deviceId",
35840
+ form: "single",
35841
+ optional: false
35842
+ }],
35843
+ "osd.setOverlay": [{
35844
+ name: "deviceId",
35845
+ form: "single",
35846
+ optional: false
35847
+ }],
35848
+ "osdManager.clearSlotBinding": [{
35849
+ name: "deviceId",
35850
+ form: "single",
35851
+ optional: false
35852
+ }],
35853
+ "osdManager.copyDeviceConfiguration": [{
35854
+ name: "sourceDeviceId",
35855
+ form: "single",
35856
+ optional: false
35857
+ }, {
35858
+ name: "targetDeviceId",
35859
+ form: "single",
35860
+ optional: false
35861
+ }],
35862
+ "osdManager.getDeviceOsd": [{
35863
+ name: "deviceId",
35864
+ form: "single",
35865
+ optional: false
35866
+ }],
35867
+ "osdManager.getSourceCatalog": [{
35868
+ name: "deviceId",
35869
+ form: "single",
35870
+ optional: false
35871
+ }],
35872
+ "osdManager.previewSlot": [{
35873
+ name: "deviceId",
35874
+ form: "single",
35875
+ optional: false
35876
+ }],
35877
+ "osdManager.renderDevice": [{
35878
+ name: "deviceId",
35879
+ form: "single",
35880
+ optional: false
35881
+ }],
35882
+ "osdManager.setSlotBinding": [{
35883
+ name: "deviceId",
35884
+ form: "single",
35885
+ optional: false
35886
+ }],
35887
+ "petFeeder.callPet": [{
35888
+ name: "deviceId",
35889
+ form: "single",
35890
+ optional: false
35891
+ }],
35892
+ "petFeeder.cancelFeed": [{
35893
+ name: "deviceId",
35894
+ form: "single",
35895
+ optional: false
35896
+ }],
35897
+ "petFeeder.feed": [{
35898
+ name: "deviceId",
35899
+ form: "single",
35900
+ optional: false
35901
+ }],
35902
+ "petFeeder.markFoodReplenished": [{
35903
+ name: "deviceId",
35904
+ form: "single",
35905
+ optional: false
35906
+ }],
35907
+ "petFeeder.playSound": [{
35908
+ name: "deviceId",
35909
+ form: "single",
35910
+ optional: false
35911
+ }],
35912
+ "petFeeder.resetDesiccant": [{
35913
+ name: "deviceId",
35914
+ form: "single",
35915
+ optional: false
35916
+ }],
35917
+ "petFeeder.setChildLock": [{
35918
+ name: "deviceId",
35919
+ form: "single",
35920
+ optional: false
35921
+ }],
35922
+ "petFeeder.setFeedSound": [{
35923
+ name: "deviceId",
35924
+ form: "single",
35925
+ optional: false
35926
+ }],
35927
+ "petFeeder.setIndicatorLight": [{
35928
+ name: "deviceId",
35929
+ form: "single",
35930
+ optional: false
35931
+ }],
35932
+ "petFeeder.setVolume": [{
35933
+ name: "deviceId",
35934
+ form: "single",
35935
+ optional: false
35936
+ }],
35937
+ "pipelineAnalytics.clearTracks": [{
35938
+ name: "deviceId",
35939
+ form: "single",
35940
+ optional: false
35941
+ }],
35942
+ "pipelineAnalytics.completeRetrainTrack": [{
35943
+ name: "deviceId",
35944
+ form: "single",
35945
+ optional: false
35946
+ }],
35947
+ "pipelineAnalytics.deleteDeviceEvents": [{
35948
+ name: "deviceId",
35949
+ form: "single",
35950
+ optional: false
35951
+ }],
35952
+ "pipelineAnalytics.deleteTracks": [{
35953
+ name: "deviceId",
35954
+ form: "single",
35955
+ optional: false
35956
+ }],
35957
+ "pipelineAnalytics.deselectRetrainFrame": [{
35958
+ name: "deviceId",
35959
+ form: "single",
35960
+ optional: false
35961
+ }],
35962
+ "pipelineAnalytics.getActiveTracks": [{
35963
+ name: "deviceId",
35964
+ form: "single",
35965
+ optional: false
35966
+ }],
35967
+ "pipelineAnalytics.getAudioEvents": [{
35968
+ name: "deviceId",
35969
+ form: "single",
35970
+ optional: false
35971
+ }],
35972
+ "pipelineAnalytics.getEventDensity": [{
35973
+ name: "deviceId",
35974
+ form: "single",
35975
+ optional: false
35976
+ }],
35977
+ "pipelineAnalytics.getKeyEvents": [{
35978
+ name: "deviceId",
35979
+ form: "single",
35980
+ optional: false
35981
+ }],
35982
+ "pipelineAnalytics.getMotionEvents": [{
35983
+ name: "deviceId",
35984
+ form: "single",
35985
+ optional: false
35986
+ }],
35987
+ "pipelineAnalytics.getObjectEvents": [{
35988
+ name: "deviceId",
35989
+ form: "single",
35990
+ optional: false
35991
+ }],
35992
+ "pipelineAnalytics.getRetrainExportUrl": [{
35993
+ name: "deviceIds",
35994
+ form: "array",
35995
+ optional: true
35996
+ }],
35997
+ "pipelineAnalytics.getSensorEvents": [{
35998
+ name: "deviceId",
35999
+ form: "single",
36000
+ optional: false
36001
+ }],
36002
+ "pipelineAnalytics.getTrack": [{
36003
+ name: "deviceId",
36004
+ form: "single",
36005
+ optional: false
36006
+ }],
36007
+ "pipelineAnalytics.getTrainingExportSummary": [{
36008
+ name: "deviceIds",
36009
+ form: "array",
36010
+ optional: true
36011
+ }],
36012
+ "pipelineAnalytics.getTrainingExportUrl": [{
36013
+ name: "deviceIds",
36014
+ form: "array",
36015
+ optional: true
36016
+ }],
36017
+ "pipelineAnalytics.listEventKinds": [{
36018
+ name: "deviceId",
36019
+ form: "single",
36020
+ optional: false
36021
+ }],
36022
+ "pipelineAnalytics.listEventKindsBatch": [{
36023
+ name: "deviceIds",
36024
+ form: "array",
36025
+ optional: false
36026
+ }],
36027
+ "pipelineAnalytics.listOpsLog": [{
36028
+ name: "deviceId",
36029
+ form: "single",
36030
+ optional: true
36031
+ }],
36032
+ "pipelineAnalytics.listRecentTracks": [{
36033
+ name: "deviceIds",
36034
+ form: "array",
36035
+ optional: false
36036
+ }],
36037
+ "pipelineAnalytics.listRetrainStaging": [{
36038
+ name: "deviceIds",
36039
+ form: "array",
36040
+ optional: true
36041
+ }],
36042
+ "pipelineAnalytics.listTracks": [{
36043
+ name: "deviceId",
36044
+ form: "single",
36045
+ optional: false
36046
+ }],
36047
+ "pipelineAnalytics.proposeRetrainAnnotations": [{
36048
+ name: "deviceId",
36049
+ form: "single",
36050
+ optional: false
36051
+ }],
36052
+ "pipelineAnalytics.pruneEventsBefore": [{
36053
+ name: "deviceId",
36054
+ form: "single",
36055
+ optional: false
36056
+ }],
36057
+ "pipelineAnalytics.pruneTracksBefore": [{
36058
+ name: "deviceId",
36059
+ form: "single",
36060
+ optional: false
36061
+ }],
36062
+ "pipelineAnalytics.rebuildObjectEmbeddings": [{
36063
+ name: "deviceId",
36064
+ form: "single",
36065
+ optional: true
36066
+ }],
36067
+ "pipelineAnalytics.restageRetrainTrack": [{
36068
+ name: "deviceId",
36069
+ form: "single",
36070
+ optional: false
36071
+ }],
36072
+ "pipelineAnalytics.saveRetrainAnnotations": [{
36073
+ name: "deviceId",
36074
+ form: "single",
36075
+ optional: false
36076
+ }],
36077
+ "pipelineAnalytics.searchObjectEvents": [{
36078
+ name: "deviceId",
36079
+ form: "single",
36080
+ optional: true
36081
+ }],
36082
+ "pipelineAnalytics.selectRetrainFrames": [{
36083
+ name: "deviceId",
36084
+ form: "single",
36085
+ optional: false
36086
+ }],
36087
+ "pipelineAnalytics.setTrackFlags": [{
36088
+ name: "deviceId",
36089
+ form: "single",
36090
+ optional: false
36091
+ }],
36092
+ "pipelineAnalytics.wipeAllAnalytics": [{
36093
+ name: "deviceId",
36094
+ form: "single",
36095
+ optional: false
36096
+ }],
36097
+ "pipelineExecutor.runPipeline": [{
36098
+ name: "deviceId",
36099
+ form: "single",
36100
+ optional: true
36101
+ }],
36102
+ "pipelineExecutor.runPipelineBatch": [{
36103
+ name: "deviceId",
36104
+ form: "single",
36105
+ optional: true
36106
+ }],
36107
+ "pipelineOrchestrator.assignAudio": [{
36108
+ name: "deviceId",
36109
+ form: "single",
36110
+ optional: false
36111
+ }],
36112
+ "pipelineOrchestrator.assignPipeline": [{
36113
+ name: "deviceId",
36114
+ form: "single",
36115
+ optional: false
36116
+ }],
36117
+ "pipelineOrchestrator.getAudioAssignment": [{
36118
+ name: "deviceId",
36119
+ form: "single",
36120
+ optional: false
36121
+ }],
36122
+ "pipelineOrchestrator.getCameraMetrics": [{
36123
+ name: "deviceId",
36124
+ form: "single",
36125
+ optional: false
36126
+ }],
36127
+ "pipelineOrchestrator.getCameraSettings": [{
36128
+ name: "deviceId",
36129
+ form: "single",
36130
+ optional: false
36131
+ }],
36132
+ "pipelineOrchestrator.getCameraStatus": [{
36133
+ name: "deviceId",
36134
+ form: "single",
36135
+ optional: false
36136
+ }],
36137
+ "pipelineOrchestrator.getCameraStatuses": [{
36138
+ name: "deviceIds",
36139
+ form: "array",
36140
+ optional: true
36141
+ }],
36142
+ "pipelineOrchestrator.getCameraStepOverrides": [{
36143
+ name: "deviceId",
36144
+ form: "single",
36145
+ optional: false
36146
+ }],
36147
+ "pipelineOrchestrator.getCameraSwitches": [{
36148
+ name: "deviceId",
36149
+ form: "single",
36150
+ optional: false
36151
+ }],
36152
+ "pipelineOrchestrator.getPipelineAssignment": [{
36153
+ name: "deviceId",
36154
+ form: "single",
36155
+ optional: false
36156
+ }],
36157
+ "pipelineOrchestrator.getPipelineDevicePin": [{
36158
+ name: "deviceId",
36159
+ form: "single",
36160
+ optional: false
36161
+ }],
36162
+ "pipelineOrchestrator.resolvePipeline": [{
36163
+ name: "deviceId",
36164
+ form: "single",
36165
+ optional: false
36166
+ }],
36167
+ "pipelineOrchestrator.setCameraPipelineForAgent": [{
36168
+ name: "deviceId",
36169
+ form: "single",
36170
+ optional: false
36171
+ }],
36172
+ "pipelineOrchestrator.setCameraStepOverride": [{
36173
+ name: "deviceId",
36174
+ form: "single",
36175
+ optional: false
36176
+ }],
36177
+ "pipelineOrchestrator.setCameraStepToggle": [{
36178
+ name: "deviceId",
36179
+ form: "single",
36180
+ optional: false
36181
+ }],
36182
+ "pipelineOrchestrator.setCameraSwitch": [{
36183
+ name: "deviceId",
36184
+ form: "single",
36185
+ optional: false
36186
+ }],
36187
+ "pipelineOrchestrator.setPipelineDevicePin": [{
36188
+ name: "deviceId",
36189
+ form: "single",
36190
+ optional: false
36191
+ }],
36192
+ "pipelineOrchestrator.unassignAudio": [{
36193
+ name: "deviceId",
36194
+ form: "single",
36195
+ optional: false
36196
+ }],
36197
+ "pipelineOrchestrator.unassignPipeline": [{
36198
+ name: "deviceId",
36199
+ form: "single",
36200
+ optional: false
36201
+ }],
36202
+ "pipelineRunner.attachCamera": [{
36203
+ name: "deviceId",
36204
+ form: "single",
36205
+ optional: false
36206
+ }],
36207
+ "pipelineRunner.detachCamera": [{
36208
+ name: "deviceId",
36209
+ form: "single",
36210
+ optional: false
36211
+ }],
36212
+ "pipelineRunner.getCameraMetrics": [{
36213
+ name: "deviceId",
36214
+ form: "single",
36215
+ optional: false
36216
+ }],
36217
+ "pipelineRunner.reportMotion": [{
36218
+ name: "deviceId",
36219
+ form: "single",
36220
+ optional: false
36221
+ }],
36222
+ "pipelineRunner.runDetailSubtree": [{
36223
+ name: "deviceId",
36224
+ form: "single",
36225
+ optional: false
36226
+ }],
36227
+ "pipelineRunner.runStatelessStep": [{
36228
+ name: "sourceDeviceId",
36229
+ form: "single",
36230
+ optional: false
36231
+ }],
36232
+ "plateGallery.getPlateByTrack": [{
36233
+ name: "deviceId",
36234
+ form: "single",
36235
+ optional: false
36236
+ }],
36237
+ "plateGallery.listPlates": [{
36238
+ name: "deviceId",
36239
+ form: "single",
36240
+ optional: true
36241
+ }],
36242
+ "privacyMask.getOptions": [{
36243
+ name: "deviceId",
36244
+ form: "single",
36245
+ optional: false
36246
+ }],
36247
+ "privacyMask.setAudioEnabled": [{
36248
+ name: "deviceId",
36249
+ form: "single",
36250
+ optional: false
36251
+ }],
36252
+ "privacyMask.setMask": [{
36253
+ name: "deviceId",
36254
+ form: "single",
36255
+ optional: false
36256
+ }],
36257
+ "ptz.continuousMove": [{
36258
+ name: "deviceId",
36259
+ form: "single",
36260
+ optional: false
36261
+ }],
36262
+ "ptz.deletePreset": [{
36263
+ name: "deviceId",
36264
+ form: "single",
36265
+ optional: false
36266
+ }],
36267
+ "ptz.getOptions": [{
36268
+ name: "deviceId",
36269
+ form: "single",
36270
+ optional: false
36271
+ }],
36272
+ "ptz.getPosition": [{
36273
+ name: "deviceId",
36274
+ form: "single",
36275
+ optional: false
36276
+ }],
36277
+ "ptz.getPresets": [{
36278
+ name: "deviceId",
36279
+ form: "single",
36280
+ optional: false
36281
+ }],
36282
+ "ptz.goHome": [{
36283
+ name: "deviceId",
36284
+ form: "single",
36285
+ optional: false
36286
+ }],
36287
+ "ptz.goToPreset": [{
36288
+ name: "deviceId",
36289
+ form: "single",
36290
+ optional: false
36291
+ }],
36292
+ "ptz.move": [{
36293
+ name: "deviceId",
36294
+ form: "single",
36295
+ optional: false
36296
+ }],
36297
+ "ptz.savePreset": [{
36298
+ name: "deviceId",
36299
+ form: "single",
36300
+ optional: false
36301
+ }],
36302
+ "ptz.setAutofocus": [{
36303
+ name: "deviceId",
36304
+ form: "single",
36305
+ optional: false
36306
+ }],
36307
+ "ptz.stop": [{
36308
+ name: "deviceId",
36309
+ form: "single",
36310
+ optional: false
36311
+ }],
36312
+ "ptzAutotrack.getSettings": [{
36313
+ name: "deviceId",
36314
+ form: "single",
36315
+ optional: false
36316
+ }],
36317
+ "ptzAutotrack.getStatus": [{
36318
+ name: "deviceId",
36319
+ form: "single",
36320
+ optional: false
36321
+ }],
36322
+ "ptzAutotrack.setEnabled": [{
36323
+ name: "deviceId",
36324
+ form: "single",
36325
+ optional: false
36326
+ }],
36327
+ "ptzAutotrack.setSettings": [{
36328
+ name: "deviceId",
36329
+ form: "single",
36330
+ optional: false
36331
+ }],
36332
+ "reboot.reboot": [{
36333
+ name: "deviceId",
36334
+ form: "single",
36335
+ optional: false
36336
+ }],
36337
+ "recording.deleteFootprint": [{
36338
+ name: "deviceId",
36339
+ form: "single",
36340
+ optional: false
36341
+ }],
36342
+ "recording.getAvailability": [{
36343
+ name: "deviceId",
36344
+ form: "single",
36345
+ optional: false
36346
+ }],
36347
+ "recording.getDaysWithRecordings": [{
36348
+ name: "deviceId",
36349
+ form: "single",
36350
+ optional: false
36351
+ }],
36352
+ "recording.getDeviceConfig": [{
36353
+ name: "deviceId",
36354
+ form: "single",
36355
+ optional: false
36356
+ }],
36357
+ "recording.getPlaybackManifest": [{
36358
+ name: "deviceId",
36359
+ form: "single",
36360
+ optional: false
36361
+ }],
36362
+ "recording.listOpsLog": [{
36363
+ name: "deviceId",
36364
+ form: "single",
36365
+ optional: true
36366
+ }],
36367
+ "recording.locateSegment": [{
36368
+ name: "deviceId",
36369
+ form: "single",
36370
+ optional: false
36371
+ }],
36372
+ "recording.pruneFootage": [{
36373
+ name: "deviceId",
36374
+ form: "single",
36375
+ optional: false
36376
+ }],
36377
+ "recording.readGopBytes": [{
36378
+ name: "deviceId",
36379
+ form: "single",
36380
+ optional: false
36381
+ }],
36382
+ "recording.readSegmentBytes": [{
36383
+ name: "deviceId",
36384
+ form: "single",
36385
+ optional: false
36386
+ }],
36387
+ "recording.relocateFootage": [{
36388
+ name: "deviceId",
36389
+ form: "single",
36390
+ optional: true
36391
+ }],
36392
+ "recording.renderClip": [{
36393
+ name: "deviceId",
36394
+ form: "single",
36395
+ optional: false
36396
+ }],
36397
+ "recording.renderGif": [{
36398
+ name: "deviceId",
36399
+ form: "single",
36400
+ optional: false
36401
+ }],
36402
+ "recording.rescanStorage": [{
36403
+ name: "deviceId",
36404
+ form: "single",
36405
+ optional: false
36406
+ }],
36407
+ "recording.setDeviceConfig": [{
36408
+ name: "deviceId",
36409
+ form: "single",
36410
+ optional: false
36411
+ }],
36412
+ "recording.startStorageMigrationMove": [{
36413
+ name: "deviceId",
36414
+ form: "single",
36415
+ optional: true
36416
+ }],
36417
+ "recordingExport.createExport": [{
36418
+ name: "deviceId",
36419
+ form: "single",
36420
+ optional: false
36421
+ }],
36422
+ "recordingExport.listExports": [{
36423
+ name: "deviceId",
36424
+ form: "single",
36425
+ optional: true
36426
+ }],
36427
+ "sceneMonitor.captureReference": [{
36428
+ name: "deviceId",
36429
+ form: "single",
36430
+ optional: false
36431
+ }],
36432
+ "sceneMonitor.createScene": [{
36433
+ name: "deviceId",
36434
+ form: "single",
36435
+ optional: false
36436
+ }],
36437
+ "sceneMonitor.deleteReference": [{
36438
+ name: "deviceId",
36439
+ form: "single",
36440
+ optional: false
36441
+ }],
36442
+ "sceneMonitor.deleteScene": [{
36443
+ name: "deviceId",
36444
+ form: "single",
36445
+ optional: false
36446
+ }],
36447
+ "sceneMonitor.listScenes": [{
36448
+ name: "deviceId",
36449
+ form: "single",
36450
+ optional: false
36451
+ }],
36452
+ "sceneMonitor.recheckNow": [{
36453
+ name: "deviceId",
36454
+ form: "single",
36455
+ optional: false
36456
+ }],
36457
+ "sceneMonitor.updateScene": [{
36458
+ name: "deviceId",
36459
+ form: "single",
36460
+ optional: false
36461
+ }],
36462
+ "scriptRunner.run": [{
36463
+ name: "deviceId",
36464
+ form: "single",
36465
+ optional: false
36466
+ }],
36467
+ "scriptRunner.stop": [{
36468
+ name: "deviceId",
36469
+ form: "single",
36470
+ optional: false
36471
+ }],
36472
+ "snapshot.getSnapshot": [{
36473
+ name: "deviceId",
36474
+ form: "single",
36475
+ optional: false
36476
+ }],
36477
+ "snapshot.getSnapshotOverview": [{
36478
+ name: "deviceIds",
36479
+ form: "array",
36480
+ optional: false
36481
+ }],
36482
+ "snapshot.invalidateCache": [{
36483
+ name: "deviceId",
36484
+ form: "single",
36485
+ optional: false
36486
+ }],
36487
+ "streamBroker.acquireEgressTranscode": [{
36488
+ name: "deviceId",
36489
+ form: "single",
36490
+ optional: false
36491
+ }],
36492
+ "streamBroker.assignProfile": [{
36493
+ name: "deviceId",
36494
+ form: "single",
36495
+ optional: false
36496
+ }],
36497
+ "streamBroker.getDeviceAudioMute": [{
36498
+ name: "deviceId",
36499
+ form: "single",
36500
+ optional: false
36501
+ }],
36502
+ "streamBroker.getStreamWithCodec": [{
36503
+ name: "deviceId",
36504
+ form: "single",
36505
+ optional: false
36506
+ }],
36507
+ "streamBroker.produceEventMedia": [{
36508
+ name: "deviceId",
36509
+ form: "single",
36510
+ optional: false
36511
+ }],
36512
+ "streamBroker.publishCameraStream": [{
36513
+ name: "deviceId",
36514
+ form: "single",
36515
+ optional: false
36516
+ }],
36517
+ "streamBroker.renderPreBufferClip": [{
36518
+ name: "deviceId",
36519
+ form: "single",
36520
+ optional: false
36521
+ }],
36522
+ "streamBroker.restartProfile": [{
36523
+ name: "deviceId",
36524
+ form: "single",
36525
+ optional: false
36526
+ }],
36527
+ "streamBroker.retractCameraStream": [{
36528
+ name: "deviceId",
36529
+ form: "single",
36530
+ optional: false
36531
+ }],
36532
+ "streamBroker.setDeviceAudioMute": [{
36533
+ name: "deviceId",
36534
+ form: "single",
36535
+ optional: false
36536
+ }],
36537
+ "streamBroker.unassignProfile": [{
36538
+ name: "deviceId",
36539
+ form: "single",
36540
+ optional: false
36541
+ }],
36542
+ "streamCatalog.getCatalog": [{
36543
+ name: "deviceId",
36544
+ form: "single",
36545
+ optional: false
36546
+ }],
36547
+ "streamParams.getConfigSchema": [{
36548
+ name: "deviceId",
36549
+ form: "single",
36550
+ optional: false
36551
+ }],
36552
+ "streamParams.getOptions": [{
36553
+ name: "deviceId",
36554
+ form: "single",
36555
+ optional: false
36556
+ }],
36557
+ "streamParams.setProfile": [{
36558
+ name: "deviceId",
36559
+ form: "single",
36560
+ optional: false
36561
+ }],
36562
+ "switch.setState": [{
36563
+ name: "deviceId",
36564
+ form: "single",
36565
+ optional: false
36566
+ }],
36567
+ "vacuumControl.locate": [{
36568
+ name: "deviceId",
36569
+ form: "single",
36570
+ optional: false
36571
+ }],
36572
+ "vacuumControl.pause": [{
36573
+ name: "deviceId",
36574
+ form: "single",
36575
+ optional: false
36576
+ }],
36577
+ "vacuumControl.returnToBase": [{
36578
+ name: "deviceId",
36579
+ form: "single",
36580
+ optional: false
36581
+ }],
36582
+ "vacuumControl.setFanSpeed": [{
36583
+ name: "deviceId",
36584
+ form: "single",
36585
+ optional: false
36586
+ }],
36587
+ "vacuumControl.start": [{
36588
+ name: "deviceId",
36589
+ form: "single",
36590
+ optional: false
36591
+ }],
36592
+ "vacuumControl.stop": [{
36593
+ name: "deviceId",
36594
+ form: "single",
36595
+ optional: false
36596
+ }],
36597
+ "valve.close": [{
36598
+ name: "deviceId",
36599
+ form: "single",
36600
+ optional: false
36601
+ }],
36602
+ "valve.open": [{
36603
+ name: "deviceId",
36604
+ form: "single",
36605
+ optional: false
36606
+ }],
36607
+ "valve.setPosition": [{
36608
+ name: "deviceId",
36609
+ form: "single",
36610
+ optional: false
36611
+ }],
36612
+ "valve.stop": [{
36613
+ name: "deviceId",
36614
+ form: "single",
36615
+ optional: false
36616
+ }],
36617
+ "videoclips.getClipPlayback": [{
36618
+ name: "deviceId",
36619
+ form: "single",
36620
+ optional: false
36621
+ }],
36622
+ "videoclips.listClips": [{
36623
+ name: "deviceId",
36624
+ form: "single",
36625
+ optional: false
36626
+ }],
36627
+ "waterHeater.setAway": [{
36628
+ name: "deviceId",
36629
+ form: "single",
36630
+ optional: false
36631
+ }],
36632
+ "waterHeater.setOperationMode": [{
36633
+ name: "deviceId",
36634
+ form: "single",
36635
+ optional: false
36636
+ }],
36637
+ "waterHeater.setTargetTemp": [{
36638
+ name: "deviceId",
36639
+ form: "single",
36640
+ optional: false
36641
+ }],
36642
+ "webrtcSession.addIceCandidate": [{
36643
+ name: "deviceId",
36644
+ form: "single",
36645
+ optional: false
36646
+ }],
36647
+ "webrtcSession.closeSession": [{
36648
+ name: "deviceId",
36649
+ form: "single",
36650
+ optional: false
36651
+ }],
36652
+ "webrtcSession.createSession": [{
36653
+ name: "deviceId",
36654
+ form: "single",
36655
+ optional: false
36656
+ }],
36657
+ "webrtcSession.getIceCandidates": [{
36658
+ name: "deviceId",
36659
+ form: "single",
36660
+ optional: false
36661
+ }],
36662
+ "webrtcSession.getSessionState": [{
36663
+ name: "deviceId",
36664
+ form: "single",
36665
+ optional: false
36666
+ }],
36667
+ "webrtcSession.handleAnswer": [{
36668
+ name: "deviceId",
36669
+ form: "single",
36670
+ optional: false
36671
+ }],
36672
+ "webrtcSession.handleOffer": [{
36673
+ name: "deviceId",
36674
+ form: "single",
36675
+ optional: false
36676
+ }],
36677
+ "webrtcSession.hasAdaptiveBitrate": [{
36678
+ name: "deviceId",
36679
+ form: "single",
36680
+ optional: false
36681
+ }],
36682
+ "webrtcSession.listStreams": [{
36683
+ name: "deviceId",
36684
+ form: "single",
36685
+ optional: false
36686
+ }],
36687
+ "zoneAnalytics.getCameraHistory": [{
36688
+ name: "deviceId",
36689
+ form: "single",
36690
+ optional: false
36691
+ }],
36692
+ "zoneAnalytics.getCurrentSnapshot": [{
36693
+ name: "deviceId",
36694
+ form: "single",
36695
+ optional: false
36696
+ }],
36697
+ "zoneAnalytics.getUnzonedHistory": [{
36698
+ name: "deviceId",
36699
+ form: "single",
36700
+ optional: false
36701
+ }],
36702
+ "zoneAnalytics.getZoneHistory": [{
36703
+ name: "deviceId",
36704
+ form: "single",
36705
+ optional: false
36706
+ }],
36707
+ "zoneRules.listRules": [{
36708
+ name: "deviceId",
36709
+ form: "single",
36710
+ optional: false
36711
+ }],
36712
+ "zoneRules.setRules": [{
36713
+ name: "deviceId",
36714
+ form: "single",
36715
+ optional: false
36716
+ }],
36717
+ "zones.addZone": [{
36718
+ name: "deviceId",
36719
+ form: "single",
36720
+ optional: false
36721
+ }],
36722
+ "zones.listZones": [{
36723
+ name: "deviceId",
36724
+ form: "single",
36725
+ optional: false
36726
+ }],
36727
+ "zones.removeZone": [{
36728
+ name: "deviceId",
36729
+ form: "single",
36730
+ optional: false
36731
+ }],
36732
+ "zones.updateZone": [{
36733
+ name: "deviceId",
36734
+ form: "single",
36735
+ optional: false
36736
+ }]
36737
+ });
34879
36738
  Object.freeze({
34880
36739
  "broker": "broker",
34881
36740
  "device-export": "device-export",
@@ -39670,6 +41529,29 @@ var HikvisionCamera = class HikvisionCamera extends BaseDevice {
39670
41529
  * operator flips `twoWayAudioMode`) noop once the cap is already
39671
41530
  * registered.
39672
41531
  */
41532
+ /**
41533
+ * Mirror talk-back into the `intercom` runtime-state slice.
41534
+ *
41535
+ * The cap's `status` is command-driven and nothing reads it: every consumer
41536
+ * outside this process — the admin UI, the Home Assistant export — sees a
41537
+ * capability only through the runtime-state slice, via the
41538
+ * `device.state-changed` event or the `deviceState.getAllSnapshots`
41539
+ * snapshot. Without this write the `intercom` entity Home Assistant
41540
+ * publishes would exist and never receive a value, which is exactly the
41541
+ * defect that kept the capability out of the export.
41542
+ *
41543
+ * Called at the four points that open or close a session — and seeded at
41544
+ * registration, so the slice says `talking: false` from boot rather than
41545
+ * only after the first session.
41546
+ */
41547
+ publishIntercomState(talking) {
41548
+ const previous = this.getCapSlice(intercomCapability);
41549
+ this.setCapSlice(intercomCapability, {
41550
+ talking,
41551
+ lastSessionAt: talking ? Date.now() : previous?.lastSessionAt ?? null,
41552
+ ability: previous?.ability ?? null
41553
+ });
41554
+ }
39673
41555
  registerIntercomIfSupported() {
39674
41556
  if (this.intercomRegistered) return;
39675
41557
  if (!this.intercomEnabled()) return;
@@ -39694,7 +41576,14 @@ var HikvisionCamera = class HikvisionCamera extends BaseDevice {
39694
41576
  deviceTag: `camera-${this.id}`
39695
41577
  })
39696
41578
  });
39697
- return this.intercomOrchestrator.start();
41579
+ try {
41580
+ const opened = await this.intercomOrchestrator.start();
41581
+ this.publishIntercomState(true);
41582
+ return opened;
41583
+ } catch (err) {
41584
+ this.publishIntercomState(false);
41585
+ throw err;
41586
+ }
39698
41587
  },
39699
41588
  handleAnswer: async ({ deviceId, sessionId, sdpAnswer }) => {
39700
41589
  if (deviceId !== this.id) return;
@@ -39705,6 +41594,7 @@ var HikvisionCamera = class HikvisionCamera extends BaseDevice {
39705
41594
  if (deviceId !== this.id) return;
39706
41595
  if (!this.intercomOrchestrator) return;
39707
41596
  await this.intercomOrchestrator.stop(sessionId);
41597
+ this.publishIntercomState(false);
39708
41598
  },
39709
41599
  startTalkSession: async ({ deviceId }) => {
39710
41600
  if (deviceId !== this.id) throw new Error(`HikvisionCamera: intercom deviceId mismatch, expected ${this.id}, got ${deviceId}`);
@@ -39729,6 +41619,7 @@ var HikvisionCamera = class HikvisionCamera extends BaseDevice {
39729
41619
  lastSequenceNumber: -1,
39730
41620
  opusDecode: null
39731
41621
  };
41622
+ this.publishIntercomState(true);
39732
41623
  this.ctx.logger.info("intercom talk session opened", {
39733
41624
  tags: { deviceId: this.id },
39734
41625
  meta: {
@@ -39865,6 +41756,7 @@ var HikvisionCamera = class HikvisionCamera extends BaseDevice {
39865
41756
  }
39866
41757
  });
39867
41758
  });
41759
+ this.publishIntercomState(false);
39868
41760
  this.ctx.logger.info("intercom talk session closed", {
39869
41761
  tags: { deviceId: this.id },
39870
41762
  meta: {
@@ -39874,6 +41766,7 @@ var HikvisionCamera = class HikvisionCamera extends BaseDevice {
39874
41766
  });
39875
41767
  }
39876
41768
  });
41769
+ this.publishIntercomState(false);
39877
41770
  this.ctx.logger.info("intercom cap registered (ISAPI two-way audio)", { tags: { deviceId: this.id } });
39878
41771
  }
39879
41772
  /**