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