@camstack/ui-library 0.1.47 → 0.1.49

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs CHANGED
@@ -15767,6 +15767,10 @@ var useBatteryGetStatus = trpc.battery.getStatus.useQuery;
15767
15767
  var useBrightnessSetBrightness = trpc.brightness.setBrightness.useMutation;
15768
15768
  /** Generated alias around `trpc.brightness.getStatus.useQuery`. */
15769
15769
  var useBrightnessGetStatus = trpc.brightness.getStatus.useQuery;
15770
+ /** Generated alias around `trpc.cameraCredentials.getCredentials.useQuery`. */
15771
+ var useCameraCredentialsGetCredentials = trpc.cameraCredentials.getCredentials.useQuery;
15772
+ /** Generated alias around `trpc.cameraCredentials.getStatus.useQuery`. */
15773
+ var useCameraCredentialsGetStatus = trpc.cameraCredentials.getStatus.useQuery;
15770
15774
  /** Generated alias around `trpc.cameraStreams.getCameraStreams.useQuery`. */
15771
15775
  var useCameraStreamsGetCameraStreams = trpc.cameraStreams.getCameraStreams.useQuery;
15772
15776
  /** Generated alias around `trpc.cameraStreams.getBrokerStreams.useQuery`. */
@@ -15811,6 +15815,22 @@ var useDeviceDiscoveryAdoptDevice = trpc.deviceDiscovery.adoptDevice.useMutation
15811
15815
  var useDeviceDiscoveryReleaseDevice = trpc.deviceDiscovery.releaseDevice.useMutation;
15812
15816
  /** Generated alias around `trpc.deviceDiscovery.getStatus.useQuery`. */
15813
15817
  var useDeviceDiscoveryGetStatus = trpc.deviceDiscovery.getStatus.useQuery;
15818
+ /** Generated alias around `trpc.deviceExport.getStatus.useQuery`. */
15819
+ var useDeviceExportGetStatus = trpc.deviceExport.getStatus.useQuery;
15820
+ /** Generated alias around `trpc.deviceExport.listSupportedDeviceKinds.useQuery`. */
15821
+ var useDeviceExportListSupportedDeviceKinds = trpc.deviceExport.listSupportedDeviceKinds.useQuery;
15822
+ /** Generated alias around `trpc.deviceExport.listExposedDevices.useQuery`. */
15823
+ var useDeviceExportListExposedDevices = trpc.deviceExport.listExposedDevices.useQuery;
15824
+ /** Generated alias around `trpc.deviceExport.exposeDevice.useMutation`. */
15825
+ var useDeviceExportExposeDevice = trpc.deviceExport.exposeDevice.useMutation;
15826
+ /** Generated alias around `trpc.deviceExport.unexposeDevice.useMutation`. */
15827
+ var useDeviceExportUnexposeDevice = trpc.deviceExport.unexposeDevice.useMutation;
15828
+ /** Generated alias around `trpc.deviceExport.getDeviceSettingsContribution.useQuery`. */
15829
+ var useDeviceExportGetDeviceSettingsContribution = trpc.deviceExport.getDeviceSettingsContribution.useQuery;
15830
+ /** Generated alias around `trpc.deviceExport.getDeviceLiveContribution.useQuery`. */
15831
+ var useDeviceExportGetDeviceLiveContribution = trpc.deviceExport.getDeviceLiveContribution.useQuery;
15832
+ /** Generated alias around `trpc.deviceExport.applyDeviceSettingsPatch.useMutation`. */
15833
+ var useDeviceExportApplyDeviceSettingsPatch = trpc.deviceExport.applyDeviceSettingsPatch.useMutation;
15814
15834
  /** Generated alias around `trpc.deviceManager.allocateDeviceId.useMutation`. */
15815
15835
  var useDeviceManagerAllocateDeviceId = trpc.deviceManager.allocateDeviceId.useMutation;
15816
15836
  /** Generated alias around `trpc.deviceManager.registerDevice.useMutation`. */
@@ -15941,6 +15961,8 @@ var useDeviceStateGetCapSlice = trpc.deviceState.getCapSlice.useQuery;
15941
15961
  var useDeviceStateGetAllSnapshots = trpc.deviceState.getAllSnapshots.useQuery;
15942
15962
  /** Generated alias around `trpc.deviceState.setCapSlice.useMutation`. */
15943
15963
  var useDeviceStateSetCapSlice = trpc.deviceState.setCapSlice.useMutation;
15964
+ /** Generated alias around `trpc.deviceStatus.getStatus.useQuery`. */
15965
+ var useDeviceStatusGetStatus = trpc.deviceStatus.getStatus.useQuery;
15944
15966
  /** Generated alias around `trpc.doorbell.getStatus.useQuery`. */
15945
15967
  var useDoorbellGetStatus = trpc.doorbell.getStatus.useQuery;
15946
15968
  /** Generated alias around `trpc.events.getEvents.useQuery`. */
@@ -15949,6 +15971,8 @@ var useEventsGetEvents = trpc.events.getEvents.useQuery;
15949
15971
  var useEventsGetEventThumbnail = trpc.events.getEventThumbnail.useQuery;
15950
15972
  /** Generated alias around `trpc.events.getEventClipUrl.useQuery`. */
15951
15973
  var useEventsGetEventClipUrl = trpc.events.getEventClipUrl.useQuery;
15974
+ /** Generated alias around `trpc.featureProbe.getStatus.useQuery`. */
15975
+ var useFeatureProbeGetStatus = trpc.featureProbe.getStatus.useQuery;
15952
15976
  /** Generated alias around `trpc.integrations.list.useQuery`. */
15953
15977
  var useIntegrationsList = trpc.integrations.list.useQuery;
15954
15978
  /** Generated alias around `trpc.integrations.get.useQuery`. */
@@ -15975,6 +15999,12 @@ var useIntercomStartSession = trpc.intercom.startSession.useMutation;
15975
15999
  var useIntercomHandleAnswer = trpc.intercom.handleAnswer.useMutation;
15976
16000
  /** Generated alias around `trpc.intercom.stopSession.useMutation`. */
15977
16001
  var useIntercomStopSession = trpc.intercom.stopSession.useMutation;
16002
+ /** Generated alias around `trpc.intercom.startTalkSession.useMutation`. */
16003
+ var useIntercomStartTalkSession = trpc.intercom.startTalkSession.useMutation;
16004
+ /** Generated alias around `trpc.intercom.pushTalkPcm.useMutation`. */
16005
+ var useIntercomPushTalkPcm = trpc.intercom.pushTalkPcm.useMutation;
16006
+ /** Generated alias around `trpc.intercom.endTalkSession.useMutation`. */
16007
+ var useIntercomEndTalkSession = trpc.intercom.endTalkSession.useMutation;
15978
16008
  /** Generated alias around `trpc.intercom.getStatus.useQuery`. */
15979
16009
  var useIntercomGetStatus = trpc.intercom.getStatus.useQuery;
15980
16010
  /** Generated alias around `trpc.localNetwork.list.useQuery`. */
@@ -15989,6 +16019,18 @@ var useLocalNetworkGetAllowedAddresses = trpc.localNetwork.getAllowedAddresses.u
15989
16019
  var useLocalNetworkSetAllowedAddresses = trpc.localNetwork.setAllowedAddresses.useMutation;
15990
16020
  /** Generated alias around `trpc.localNetwork.resetAllowlistToBestMatch.useMutation`. */
15991
16021
  var useLocalNetworkResetAllowlistToBestMatch = trpc.localNetwork.resetAllowlistToBestMatch.useMutation;
16022
+ /** Generated alias around `trpc.meshNetwork.getStatus.useQuery`. */
16023
+ var useMeshNetworkGetStatus = trpc.meshNetwork.getStatus.useQuery;
16024
+ /** Generated alias around `trpc.meshNetwork.join.useMutation`. */
16025
+ var useMeshNetworkJoin = trpc.meshNetwork.join.useMutation;
16026
+ /** Generated alias around `trpc.meshNetwork.startLogin.useMutation`. */
16027
+ var useMeshNetworkStartLogin = trpc.meshNetwork.startLogin.useMutation;
16028
+ /** Generated alias around `trpc.meshNetwork.leave.useMutation`. */
16029
+ var useMeshNetworkLeave = trpc.meshNetwork.leave.useMutation;
16030
+ /** Generated alias around `trpc.meshNetwork.listPeers.useQuery`. */
16031
+ var useMeshNetworkListPeers = trpc.meshNetwork.listPeers.useQuery;
16032
+ /** Generated alias around `trpc.meshNetwork.testConnection.useMutation`. */
16033
+ var useMeshNetworkTestConnection = trpc.meshNetwork.testConnection.useMutation;
15992
16034
  /** Generated alias around `trpc.meshOrchestrator.listProviders.useQuery`. */
15993
16035
  var useMeshOrchestratorListProviders = trpc.meshOrchestrator.listProviders.useQuery;
15994
16036
  /** Generated alias around `trpc.meshOrchestrator.joinProvider.useMutation`. */
@@ -16037,6 +16079,22 @@ var useMotionDetectionApplyDeviceSettingsPatch = trpc.motionDetection.applyDevic
16037
16079
  var useMotionTriggerSetMotionTrigger = trpc.motionTrigger.setMotionTrigger.useMutation;
16038
16080
  /** Generated alias around `trpc.motionTrigger.getStatus.useQuery`. */
16039
16081
  var useMotionTriggerGetStatus = trpc.motionTrigger.getStatus.useQuery;
16082
+ /** Generated alias around `trpc.mqttBroker.listBrokers.useQuery`. */
16083
+ var useMqttBrokerListBrokers = trpc.mqttBroker.listBrokers.useQuery;
16084
+ /** Generated alias around `trpc.mqttBroker.getBrokerConfig.useQuery`. */
16085
+ var useMqttBrokerGetBrokerConfig = trpc.mqttBroker.getBrokerConfig.useQuery;
16086
+ /** Generated alias around `trpc.mqttBroker.addBroker.useMutation`. */
16087
+ var useMqttBrokerAddBroker = trpc.mqttBroker.addBroker.useMutation;
16088
+ /** Generated alias around `trpc.mqttBroker.removeBroker.useMutation`. */
16089
+ var useMqttBrokerRemoveBroker = trpc.mqttBroker.removeBroker.useMutation;
16090
+ /** Generated alias around `trpc.mqttBroker.testConnection.useMutation`. */
16091
+ var useMqttBrokerTestConnection = trpc.mqttBroker.testConnection.useMutation;
16092
+ /** Generated alias around `trpc.mqttBroker.startEmbeddedBroker.useMutation`. */
16093
+ var useMqttBrokerStartEmbeddedBroker = trpc.mqttBroker.startEmbeddedBroker.useMutation;
16094
+ /** Generated alias around `trpc.mqttBroker.stopEmbeddedBroker.useMutation`. */
16095
+ var useMqttBrokerStopEmbeddedBroker = trpc.mqttBroker.stopEmbeddedBroker.useMutation;
16096
+ /** Generated alias around `trpc.mqttBroker.getStatus.useQuery`. */
16097
+ var useMqttBrokerGetStatus = trpc.mqttBroker.getStatus.useQuery;
16040
16098
  /** Generated alias around `trpc.nativeObjectDetection.getStatus.useQuery`. */
16041
16099
  var useNativeObjectDetectionGetStatus = trpc.nativeObjectDetection.getStatus.useQuery;
16042
16100
  /** Generated alias around `trpc.networkQuality.getDeviceStats.useQuery`. */
@@ -16265,6 +16323,10 @@ var usePlatformProbeGetHardware = trpc.platformProbe.getHardware.useQuery;
16265
16323
  var usePlatformProbeResolveInferenceConfig = trpc.platformProbe.resolveInferenceConfig.useQuery;
16266
16324
  /** Generated alias around `trpc.platformProbe.resolveHwAccel.useQuery`. */
16267
16325
  var usePlatformProbeResolveHwAccel = trpc.platformProbe.resolveHwAccel.useQuery;
16326
+ /** Generated alias around `trpc.platformProbe.getHardwareEncoders.useQuery`. */
16327
+ var usePlatformProbeGetHardwareEncoders = trpc.platformProbe.getHardwareEncoders.useQuery;
16328
+ /** Generated alias around `trpc.platformProbe.refreshHardwareEncoders.useMutation`. */
16329
+ var usePlatformProbeRefreshHardwareEncoders = trpc.platformProbe.refreshHardwareEncoders.useMutation;
16268
16330
  /** Generated alias around `trpc.ptz.move.useMutation`. */
16269
16331
  var usePtzMove = trpc.ptz.move.useMutation;
16270
16332
  /** Generated alias around `trpc.ptz.continuousMove.useMutation`. */
@@ -16437,6 +16499,10 @@ var useStreamBrokerKillClient = trpc.streamBroker.killClient.useMutation;
16437
16499
  var useStreamBrokerRestartProfile = trpc.streamBroker.restartProfile.useMutation;
16438
16500
  /** Generated alias around `trpc.streamBroker.getStreamUrl.useQuery`. */
16439
16501
  var useStreamBrokerGetStreamUrl = trpc.streamBroker.getStreamUrl.useQuery;
16502
+ /** Generated alias around `trpc.streamBroker.getStreamWithCodec.useMutation`. */
16503
+ var useStreamBrokerGetStreamWithCodec = trpc.streamBroker.getStreamWithCodec.useMutation;
16504
+ /** Generated alias around `trpc.streamBroker.releaseStreamWithCodec.useMutation`. */
16505
+ var useStreamBrokerReleaseStreamWithCodec = trpc.streamBroker.releaseStreamWithCodec.useMutation;
16440
16506
  /** Generated alias around `trpc.streamBroker.getBroker.useQuery`. */
16441
16507
  var useStreamBrokerGetBroker = trpc.streamBroker.getBroker.useQuery;
16442
16508
  /** Generated alias around `trpc.streamBroker.setPreBufferDuration.useMutation`. */
@@ -16519,10 +16585,22 @@ var useUserManagementRevokeScopedToken = trpc.userManagement.revokeScopedToken.u
16519
16585
  var useUserManagementValidateScopedToken = trpc.userManagement.validateScopedToken.useQuery;
16520
16586
  /** Generated alias around `trpc.userManagement.listScopedTokens.useQuery`. */
16521
16587
  var useUserManagementListScopedTokens = trpc.userManagement.listScopedTokens.useQuery;
16588
+ /** Generated alias around `trpc.userManagement.setupTotp.useMutation`. */
16589
+ var useUserManagementSetupTotp = trpc.userManagement.setupTotp.useMutation;
16590
+ /** Generated alias around `trpc.userManagement.confirmTotp.useMutation`. */
16591
+ var useUserManagementConfirmTotp = trpc.userManagement.confirmTotp.useMutation;
16592
+ /** Generated alias around `trpc.userManagement.disableTotp.useMutation`. */
16593
+ var useUserManagementDisableTotp = trpc.userManagement.disableTotp.useMutation;
16594
+ /** Generated alias around `trpc.userManagement.getTotpStatus.useQuery`. */
16595
+ var useUserManagementGetTotpStatus = trpc.userManagement.getTotpStatus.useQuery;
16596
+ /** Generated alias around `trpc.userManagement.verifyTotp.useMutation`. */
16597
+ var useUserManagementVerifyTotp = trpc.userManagement.verifyTotp.useMutation;
16522
16598
  /** Generated alias around `trpc.webrtcSession.listStreams.useQuery`. */
16523
16599
  var useWebrtcSessionListStreams = trpc.webrtcSession.listStreams.useQuery;
16524
16600
  /** Generated alias around `trpc.webrtcSession.createSession.useMutation`. */
16525
16601
  var useWebrtcSessionCreateSession = trpc.webrtcSession.createSession.useMutation;
16602
+ /** Generated alias around `trpc.webrtcSession.handleOffer.useMutation`. */
16603
+ var useWebrtcSessionHandleOffer = trpc.webrtcSession.handleOffer.useMutation;
16526
16604
  /** Generated alias around `trpc.webrtcSession.handleAnswer.useMutation`. */
16527
16605
  var useWebrtcSessionHandleAnswer = trpc.webrtcSession.handleAnswer.useMutation;
16528
16606
  /** Generated alias around `trpc.webrtcSession.closeSession.useMutation`. */
@@ -19939,6 +20017,79 @@ function SnapshotPreview({ src, isLoading, onPlay, onRetry, extraOverlay, suppre
19939
20017
  });
19940
20018
  }
19941
20019
  //#endregion
20020
+ //#region src/composites/stream-broker-selector.tsx
20021
+ /**
20022
+ * StreamBrokerSelector — reusable per-device "preferred stream" picker.
20023
+ *
20024
+ * Renders a single `<Select>` with options sourced from the device's
20025
+ * camera-streams cap (`getRtspEntries`). The first option is always
20026
+ * "Auto (best available)"; remaining options are one per enabled
20027
+ * RTSP restream entry, labelled by stream profile (`High` / `Mid` /
20028
+ * `Low` …) and tagged with codec + resolution when the broker reports
20029
+ * them.
20030
+ *
20031
+ * Used by addon-built panels that don't flow through the form-builder
20032
+ * `ConfigUISchema` aggregator (the cap-driven aggregator already
20033
+ * embeds an equivalent `select` field with server-resolved options —
20034
+ * the addons return the same list inline). Reach for this composite
20035
+ * when you need an out-of-form selector in a bespoke React tree (e.g.
20036
+ * an addon's wizard page, a debug panel, etc.).
20037
+ *
20038
+ * Loading / empty / error states all render a degraded select rather
20039
+ * than vanishing — the operator can always pick `Auto` even if the
20040
+ * device's broker is currently unreachable.
20041
+ */
20042
+ var AUTO_OPTION = {
20043
+ value: "auto",
20044
+ label: "Auto (best available)"
20045
+ };
20046
+ /** Friendly profile label — "high" → "High", "mid" → "Mid", etc. */
20047
+ function profileLabel(streamId) {
20048
+ return streamId.charAt(0).toUpperCase() + streamId.slice(1);
20049
+ }
20050
+ function StreamBrokerSelector({ deviceId, value, onChange, disabled, label, className }) {
20051
+ const labelId = (0, react.useId)();
20052
+ const query = useCameraStreamsGetRtspEntries({ deviceId }, { refetchOnWindowFocus: false });
20053
+ const [options, setOptions] = (0, react.useState)([AUTO_OPTION]);
20054
+ (0, react.useEffect)(() => {
20055
+ if (!query.data) return;
20056
+ const prefix = `${deviceId}/`;
20057
+ const next = [AUTO_OPTION];
20058
+ for (const entry of query.data) {
20059
+ if (!entry.enabled) continue;
20060
+ const streamId = entry.brokerId.startsWith(prefix) ? entry.brokerId.slice(prefix.length) : entry.brokerId;
20061
+ next.push({
20062
+ value: streamId,
20063
+ label: profileLabel(streamId)
20064
+ });
20065
+ }
20066
+ setOptions(next);
20067
+ }, [query.data, deviceId]);
20068
+ const resolvedLabel = label ?? "Preferred stream";
20069
+ const helperText = query.isLoading ? "Loading available streams…" : query.isError ? "Could not load streams — only Auto available." : options.length === 1 ? "No enabled streams found — only Auto available." : null;
20070
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
20071
+ className,
20072
+ children: [
20073
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("label", {
20074
+ id: labelId,
20075
+ className: "text-xs font-medium text-foreground-muted block mb-1",
20076
+ children: resolvedLabel
20077
+ }),
20078
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(Select, {
20079
+ "aria-labelledby": labelId,
20080
+ options,
20081
+ value,
20082
+ disabled,
20083
+ onChange: (e) => onChange(e.target.value)
20084
+ }),
20085
+ helperText !== null && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
20086
+ className: "text-foreground-subtle text-[10px] mt-1",
20087
+ children: helperText
20088
+ })
20089
+ ]
20090
+ });
20091
+ }
20092
+ //#endregion
19942
20093
  //#region src/composites/audio-waveform.tsx
19943
20094
  /**
19944
20095
  * Canvas-based audio waveform visualization.
@@ -23013,23 +23164,20 @@ function KebabMenu({ items, header, triggerClassName, title = "More actions" })
23013
23164
  * <ScopePicker> — operator-facing editor for a `TokenScope[]` value.
23014
23165
  *
23015
23166
  * Two consumers: the user-scope editor on `/system/users` (admin grants
23016
- * a baseline scope set to a viewer / agent / scoped user) and the
23017
- * scoped-token create modal on `/system/api-keys` (a caller carves
23018
- * out a subset of THEIR scopes for a `cst_*` token).
23167
+ * a baseline scope set to a non-admin user) and the scoped-token create
23168
+ * modal on `/system/api-keys` (a caller carves out a subset of THEIR
23169
+ * scopes for a `cst_*` token).
23019
23170
  *
23020
- * Each row is `{ type, target, access }`:
23021
- * - `type`: `addon` or `capability` (route-prefix retired in the
23022
- * caps-only refactor every endpoint lives behind a cap).
23023
- * - `target`: a known addon id (live from `useAddonsList`) or a known
23024
- * cap name (from `KNOWN_CAP_NAMES` emitted by codegen).
23025
- * - `access`: three independent checkboxes (`view` / `create` /
23026
- * `delete`). At least one must be selected; an empty grant is
23027
- * rejected by the server-side Zod schema (`access.min(1)`).
23171
+ * Row shapes per scope `type`:
23172
+ * - category → target: 'device' | 'system'
23173
+ * - capability target: cap name from `KNOWN_CAP_NAMES`
23174
+ * - addon → target: addon id from `useAddonsList`
23175
+ * - device targets: readonly deviceId[] (multi-select)
23176
+ *
23177
+ * `access` is always 3 independent checkboxes (view / create / delete).
23028
23178
  *
23029
23179
  * `clampToParent` narrows the target dropdown + access checkboxes to
23030
- * what the CALLER possesses this is the subset check rendered in
23031
- * the UI, mirroring the structural check in `createScopedToken`.
23032
- * Admins should pass `null` to allow everything.
23180
+ * what the CALLER possesses. Admins pass `null` to allow everything.
23033
23181
  */
23034
23182
  var ACCESS_OPTIONS = [
23035
23183
  {
@@ -23051,6 +23199,8 @@ var ACCESS_OPTIONS = [
23051
23199
  hint: "Destructive ops (delete/revoke/reset/…)"
23052
23200
  }
23053
23201
  ];
23202
+ /** Static targets for the `category` scope type (auto-grow categories). */
23203
+ var CATEGORY_CHOICES = ["device", "system"];
23054
23204
  function defaultRow() {
23055
23205
  return {
23056
23206
  type: "capability",
@@ -23058,11 +23208,36 @@ function defaultRow() {
23058
23208
  access: ["view"]
23059
23209
  };
23060
23210
  }
23061
- function clampedTargetsForType(type, parent, addonChoices, capChoices) {
23062
- const universe = type === "addon" ? addonChoices : capChoices;
23211
+ /**
23212
+ * Collect the union of device targets a parent grants. Used to clamp
23213
+ * the device picker so a child grant can't refer to a deviceId the
23214
+ * caller themselves doesn't have.
23215
+ */
23216
+ function parentDeviceTargets(parent) {
23217
+ if (parent == null) return [];
23218
+ const out = /* @__PURE__ */ new Set();
23219
+ for (const s of parent) if (s.type === "device") for (const t of s.targets) out.add(t);
23220
+ return [...out];
23221
+ }
23222
+ function clampedSingleTargets(type, parent, addonChoices, capChoices) {
23223
+ let universe;
23224
+ switch (type) {
23225
+ case "addon":
23226
+ universe = addonChoices;
23227
+ break;
23228
+ case "capability":
23229
+ universe = capChoices;
23230
+ break;
23231
+ case "category":
23232
+ universe = CATEGORY_CHOICES.map((c) => ({
23233
+ value: c,
23234
+ label: c
23235
+ }));
23236
+ break;
23237
+ }
23063
23238
  if (parent == null) return universe;
23064
- const allowed = new Set(parent.filter((s) => s.type === type).map((s) => s.target));
23065
- return universe.filter((t) => allowed.has(t));
23239
+ const allowed = new Set(parent.filter((s) => s.type !== "device" && s.type === type).map((s) => s.target));
23240
+ return universe.filter((t) => allowed.has(t.value));
23066
23241
  }
23067
23242
  function clampedAccessForRow(row, parent) {
23068
23243
  if (parent == null) return [
@@ -23070,7 +23245,12 @@ function clampedAccessForRow(row, parent) {
23070
23245
  "create",
23071
23246
  "delete"
23072
23247
  ];
23073
- const matches = parent.filter((s) => s.type === row.type && s.target === row.target);
23248
+ const matches = parent.filter((s) => {
23249
+ if (s.type !== row.type) return false;
23250
+ if (s.type === "device" && row.type === "device") return s.targets.some((t) => row.targets.includes(t));
23251
+ if (s.type !== "device" && row.type !== "device") return s.target === row.target;
23252
+ return false;
23253
+ });
23074
23254
  if (matches.length === 0) return [];
23075
23255
  const out = /* @__PURE__ */ new Set();
23076
23256
  for (const m of matches) for (const a of m.access) out.add(a);
@@ -23078,17 +23258,75 @@ function clampedAccessForRow(row, parent) {
23078
23258
  }
23079
23259
  function ScopePicker({ value, onChange, clampToParent, emptyHint }) {
23080
23260
  const { data: addons } = useAddonsList();
23081
- const addonChoices = (0, react.useMemo)(() => (addons ?? []).map((a) => a.manifest.id).sort(), [addons]);
23082
- const capChoices = (0, react.useMemo)(() => [..._camstack_types.KNOWN_CAP_NAMES].sort(), []);
23261
+ const { data: devices } = useDeviceManagerListAll({});
23262
+ const addonChoices = (0, react.useMemo)(() => (addons ?? []).map((a) => ({
23263
+ value: a.manifest.id,
23264
+ label: a.manifest.id
23265
+ })).sort((a, b) => a.label.localeCompare(b.label)), [addons]);
23266
+ const capChoices = (0, react.useMemo)(() => [..._camstack_types.KNOWN_CAP_NAMES].sort().map((c) => ({
23267
+ value: c,
23268
+ label: c
23269
+ })), []);
23270
+ const deviceChoices = (0, react.useMemo)(() => (devices ?? []).map((d) => ({
23271
+ value: String(d.id),
23272
+ label: `${d.name} (#${d.id} · ${d.addonId})`
23273
+ })).sort((a, b) => a.label.localeCompare(b.label)), [devices]);
23274
+ const parentDeviceClamp = (0, react.useMemo)(() => clampToParent == null ? null : parentDeviceTargets(clampToParent), [clampToParent]);
23275
+ /**
23276
+ * Build a fresh scope row when `type` changes. The discriminated union
23277
+ * forces us to re-construct the object per variant so the resulting
23278
+ * shape matches one of the four union members exactly.
23279
+ */
23280
+ const rebuildForType = (next, access) => {
23281
+ const accessArr = [...access];
23282
+ switch (next) {
23283
+ case "category": return {
23284
+ type: "category",
23285
+ target: "device",
23286
+ access: accessArr
23287
+ };
23288
+ case "capability": return {
23289
+ type: "capability",
23290
+ target: "",
23291
+ access: accessArr
23292
+ };
23293
+ case "addon": return {
23294
+ type: "addon",
23295
+ target: "",
23296
+ access: accessArr
23297
+ };
23298
+ case "device": return {
23299
+ type: "device",
23300
+ targets: [],
23301
+ access: accessArr
23302
+ };
23303
+ }
23304
+ };
23083
23305
  const update = (idx, patch) => {
23084
23306
  onChange(value.map((s, i) => {
23085
23307
  if (i !== idx) return s;
23086
- const next = {
23087
- ...s,
23088
- ...patch
23308
+ if (patch.type !== void 0 && patch.type !== s.type) return rebuildForType(patch.type, patch.access ?? s.access);
23309
+ const access = [...patch.access ?? s.access];
23310
+ if (s.type === "device") return {
23311
+ type: "device",
23312
+ targets: [...patch.targets ?? s.targets],
23313
+ access
23314
+ };
23315
+ if (s.type === "category") return {
23316
+ type: "category",
23317
+ target: patch.target ?? s.target,
23318
+ access
23319
+ };
23320
+ if (s.type === "capability") return {
23321
+ type: "capability",
23322
+ target: patch.target ?? s.target,
23323
+ access
23324
+ };
23325
+ return {
23326
+ type: "addon",
23327
+ target: patch.target ?? s.target,
23328
+ access
23089
23329
  };
23090
- if (patch.type !== void 0 && patch.type !== s.type) next.target = "";
23091
- return next;
23092
23330
  }));
23093
23331
  };
23094
23332
  const removeAt = (idx) => {
@@ -23105,24 +23343,39 @@ function ScopePicker({ value, onChange, clampToParent, emptyHint }) {
23105
23343
  children: emptyHint
23106
23344
  }),
23107
23345
  value.map((row, idx) => {
23108
- const targetChoices = clampedTargetsForType(row.type, clampToParent, addonChoices, capChoices);
23109
23346
  const allowedAccess = clampedAccessForRow(row, clampToParent);
23110
23347
  return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
23111
- className: "flex flex-wrap items-center gap-1.5 rounded border border-border bg-surface px-2 py-1.5",
23348
+ className: "flex flex-wrap items-start gap-1.5 rounded border border-border bg-surface px-2 py-1.5",
23112
23349
  children: [
23113
23350
  /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("select", {
23114
23351
  value: row.type,
23115
23352
  onChange: (e) => update(idx, { type: e.target.value }),
23116
23353
  className: "rounded border border-border bg-background px-2 py-1 text-[11px] focus:outline-none focus:ring-1 focus:ring-primary",
23117
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("option", {
23118
- value: "capability",
23119
- children: "capability"
23120
- }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("option", {
23121
- value: "addon",
23122
- children: "addon"
23123
- })]
23354
+ children: [
23355
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("option", {
23356
+ value: "category",
23357
+ children: "category"
23358
+ }),
23359
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("option", {
23360
+ value: "capability",
23361
+ children: "capability"
23362
+ }),
23363
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("option", {
23364
+ value: "addon",
23365
+ children: "addon"
23366
+ }),
23367
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("option", {
23368
+ value: "device",
23369
+ children: "device"
23370
+ })
23371
+ ]
23124
23372
  }),
23125
- /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("select", {
23373
+ row.type === "device" ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(DeviceTargetPicker, {
23374
+ value: row.targets,
23375
+ choices: deviceChoices,
23376
+ clampToParent: parentDeviceClamp,
23377
+ onChange: (targets) => update(idx, { targets })
23378
+ }) : /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("select", {
23126
23379
  value: row.target,
23127
23380
  onChange: (e) => update(idx, { target: e.target.value }),
23128
23381
  className: "flex-1 min-w-[160px] rounded border border-border bg-background px-2 py-1 text-[11px] font-mono focus:outline-none focus:ring-1 focus:ring-primary",
@@ -23133,10 +23386,10 @@ function ScopePicker({ value, onChange, clampToParent, emptyHint }) {
23133
23386
  row.type,
23134
23387
  " —"
23135
23388
  ]
23136
- }), targetChoices.map((t) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)("option", {
23137
- value: t,
23138
- children: t
23139
- }, t))]
23389
+ }), clampedSingleTargets(row.type, clampToParent, addonChoices, capChoices).map((t) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)("option", {
23390
+ value: t.value,
23391
+ children: t.label
23392
+ }, t.value))]
23140
23393
  }),
23141
23394
  /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
23142
23395
  className: "flex items-center gap-1",
@@ -23184,16 +23437,73 @@ function ScopePicker({ value, onChange, clampToParent, emptyHint }) {
23184
23437
  ]
23185
23438
  });
23186
23439
  }
23440
+ function DeviceTargetPicker({ value, choices, clampToParent, onChange }) {
23441
+ const [pendingAdd, setPendingAdd] = (0, react.useState)("");
23442
+ const visibleChoices = (0, react.useMemo)(() => {
23443
+ const filtered = clampToParent == null ? choices : choices.filter((c) => clampToParent.includes(c.value));
23444
+ const taken = new Set(value);
23445
+ return filtered.filter((c) => !taken.has(c.value));
23446
+ }, [
23447
+ choices,
23448
+ clampToParent,
23449
+ value
23450
+ ]);
23451
+ const labelFor = (id) => choices.find((c) => c.value === id)?.label ?? `#${id}`;
23452
+ const handleAdd = (id) => {
23453
+ if (!id) return;
23454
+ onChange([...value, id]);
23455
+ setPendingAdd("");
23456
+ };
23457
+ const handleRemove = (id) => {
23458
+ onChange(value.filter((v) => v !== id));
23459
+ };
23460
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
23461
+ className: "flex-1 min-w-[160px] flex flex-wrap items-center gap-1",
23462
+ children: [
23463
+ value.length === 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
23464
+ className: "text-[10px] text-foreground-subtle italic px-1",
23465
+ children: "no devices selected"
23466
+ }),
23467
+ value.map((id) => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
23468
+ className: "inline-flex items-center gap-1 rounded bg-primary/10 px-1.5 py-0.5 text-[10px] font-mono text-primary",
23469
+ children: [labelFor(id), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
23470
+ type: "button",
23471
+ onClick: () => handleRemove(id),
23472
+ className: "hover:text-danger transition-colors",
23473
+ title: "Remove device",
23474
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(X, { className: "h-2.5 w-2.5" })
23475
+ })]
23476
+ }, id)),
23477
+ visibleChoices.length > 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("select", {
23478
+ value: pendingAdd,
23479
+ onChange: (e) => handleAdd(e.target.value),
23480
+ className: "rounded border border-border bg-background px-1.5 py-0.5 text-[10px] focus:outline-none focus:ring-1 focus:ring-primary",
23481
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("option", {
23482
+ value: "",
23483
+ children: "+ add device…"
23484
+ }), visibleChoices.map((c) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)("option", {
23485
+ value: c.value,
23486
+ children: c.label
23487
+ }, c.value))]
23488
+ })
23489
+ ]
23490
+ });
23491
+ }
23187
23492
  /**
23188
23493
  * Validation helper. The wire schema (`TokenScopeSchema`) requires every
23189
- * scope to carry a non-empty target and `access.length >= 1`. Use this
23190
- * before passing the picker output to a mutate call so the user sees a
23191
- * clean inline error instead of a tRPC ZodError.
23494
+ * scope to carry a non-empty target/targets and `access.length >= 1`.
23495
+ * Use this before passing the picker output to a mutate call so the
23496
+ * user sees a clean inline error instead of a tRPC ZodError.
23192
23497
  */
23193
23498
  function validateScopes(scopes) {
23194
23499
  for (const s of scopes) {
23195
- if (s.target.trim().length === 0) return `Scope ${s.type}: pick a target`;
23196
- if (s.access.length === 0) return `Scope ${s.type}:${s.target}: pick at least one access`;
23500
+ if (s.type === "device") {
23501
+ if (s.targets.length === 0) return `Scope device: pick at least one device`;
23502
+ } else if (s.target.trim().length === 0) return `Scope ${s.type}: pick a target`;
23503
+ if (s.access.length === 0) {
23504
+ const targetDesc = s.type === "device" ? `[${s.targets.join(",")}]` : s.target;
23505
+ return `Scope ${s.type}:${targetDesc}: pick at least one access`;
23506
+ }
23197
23507
  }
23198
23508
  return null;
23199
23509
  }
@@ -24042,6 +24352,7 @@ exports.StateValuesStream = StateValuesStream;
24042
24352
  exports.StatusBadge = StatusBadge;
24043
24353
  exports.StepTimings = StepTimings;
24044
24354
  exports.StepTreeMaster = StepTreeMaster;
24355
+ exports.StreamBrokerSelector = StreamBrokerSelector;
24045
24356
  exports.StreamPanel = StreamPanel;
24046
24357
  exports.Switch = Switch;
24047
24358
  exports.SystemProvider = SystemProvider;
@@ -24158,6 +24469,8 @@ exports.useBackupUpsertDestinationPolicy = useBackupUpsertDestinationPolicy;
24158
24469
  exports.useBatteryGetStatus = useBatteryGetStatus;
24159
24470
  exports.useBrightnessGetStatus = useBrightnessGetStatus;
24160
24471
  exports.useBrightnessSetBrightness = useBrightnessSetBrightness;
24472
+ exports.useCameraCredentialsGetCredentials = useCameraCredentialsGetCredentials;
24473
+ exports.useCameraCredentialsGetStatus = useCameraCredentialsGetStatus;
24161
24474
  exports.useCameraStreamsGetBrokerStreams = useCameraStreamsGetBrokerStreams;
24162
24475
  exports.useCameraStreamsGetCameraStreams = useCameraStreamsGetCameraStreams;
24163
24476
  exports.useCameraStreamsGetRtspEntries = useCameraStreamsGetRtspEntries;
@@ -24189,6 +24502,14 @@ exports.useDeviceDiscoveryGetStatus = useDeviceDiscoveryGetStatus;
24189
24502
  exports.useDeviceDiscoveryListDiscovered = useDeviceDiscoveryListDiscovered;
24190
24503
  exports.useDeviceDiscoveryRefreshDiscovery = useDeviceDiscoveryRefreshDiscovery;
24191
24504
  exports.useDeviceDiscoveryReleaseDevice = useDeviceDiscoveryReleaseDevice;
24505
+ exports.useDeviceExportApplyDeviceSettingsPatch = useDeviceExportApplyDeviceSettingsPatch;
24506
+ exports.useDeviceExportExposeDevice = useDeviceExportExposeDevice;
24507
+ exports.useDeviceExportGetDeviceLiveContribution = useDeviceExportGetDeviceLiveContribution;
24508
+ exports.useDeviceExportGetDeviceSettingsContribution = useDeviceExportGetDeviceSettingsContribution;
24509
+ exports.useDeviceExportGetStatus = useDeviceExportGetStatus;
24510
+ exports.useDeviceExportListExposedDevices = useDeviceExportListExposedDevices;
24511
+ exports.useDeviceExportListSupportedDeviceKinds = useDeviceExportListSupportedDeviceKinds;
24512
+ exports.useDeviceExportUnexposeDevice = useDeviceExportUnexposeDevice;
24192
24513
  exports.useDeviceId = useDeviceId;
24193
24514
  exports.useDeviceManagerAddLocation = useDeviceManagerAddLocation;
24194
24515
  exports.useDeviceManagerAdoptDevice = useDeviceManagerAdoptDevice;
@@ -24260,6 +24581,7 @@ exports.useDeviceStateGetCapSlice = useDeviceStateGetCapSlice;
24260
24581
  exports.useDeviceStateGetSnapshot = useDeviceStateGetSnapshot;
24261
24582
  exports.useDeviceStateSetCapSlice = useDeviceStateSetCapSlice;
24262
24583
  exports.useDeviceStateSlice = useDeviceStateSlice;
24584
+ exports.useDeviceStatusGetStatus = useDeviceStatusGetStatus;
24263
24585
  exports.useDeviceWebrtc = useDeviceWebrtc;
24264
24586
  exports.useDevices = useDevices;
24265
24587
  exports.useDoorbellEvents = useDoorbellEvents;
@@ -24270,6 +24592,7 @@ exports.useEventStreamMap = useEventStreamMap;
24270
24592
  exports.useEventsGetEventClipUrl = useEventsGetEventClipUrl;
24271
24593
  exports.useEventsGetEventThumbnail = useEventsGetEventThumbnail;
24272
24594
  exports.useEventsGetEvents = useEventsGetEvents;
24595
+ exports.useFeatureProbeGetStatus = useFeatureProbeGetStatus;
24273
24596
  exports.useIntegrationsCreate = useIntegrationsCreate;
24274
24597
  exports.useIntegrationsDelete = useIntegrationsDelete;
24275
24598
  exports.useIntegrationsGet = useIntegrationsGet;
@@ -24280,9 +24603,12 @@ exports.useIntegrationsList = useIntegrationsList;
24280
24603
  exports.useIntegrationsSetSettings = useIntegrationsSetSettings;
24281
24604
  exports.useIntegrationsTestConnection = useIntegrationsTestConnection;
24282
24605
  exports.useIntegrationsUpdate = useIntegrationsUpdate;
24606
+ exports.useIntercomEndTalkSession = useIntercomEndTalkSession;
24283
24607
  exports.useIntercomGetStatus = useIntercomGetStatus;
24284
24608
  exports.useIntercomHandleAnswer = useIntercomHandleAnswer;
24609
+ exports.useIntercomPushTalkPcm = useIntercomPushTalkPcm;
24285
24610
  exports.useIntercomStartSession = useIntercomStartSession;
24611
+ exports.useIntercomStartTalkSession = useIntercomStartTalkSession;
24286
24612
  exports.useIntercomStopSession = useIntercomStopSession;
24287
24613
  exports.useIsMidWidth = useIsMidWidth;
24288
24614
  exports.useIsMobile = useIsMobile;
@@ -24294,6 +24620,12 @@ exports.useLocalNetworkGetPreferred = useLocalNetworkGetPreferred;
24294
24620
  exports.useLocalNetworkList = useLocalNetworkList;
24295
24621
  exports.useLocalNetworkResetAllowlistToBestMatch = useLocalNetworkResetAllowlistToBestMatch;
24296
24622
  exports.useLocalNetworkSetAllowedAddresses = useLocalNetworkSetAllowedAddresses;
24623
+ exports.useMeshNetworkGetStatus = useMeshNetworkGetStatus;
24624
+ exports.useMeshNetworkJoin = useMeshNetworkJoin;
24625
+ exports.useMeshNetworkLeave = useMeshNetworkLeave;
24626
+ exports.useMeshNetworkListPeers = useMeshNetworkListPeers;
24627
+ exports.useMeshNetworkStartLogin = useMeshNetworkStartLogin;
24628
+ exports.useMeshNetworkTestConnection = useMeshNetworkTestConnection;
24297
24629
  exports.useMeshOrchestratorJoinProvider = useMeshOrchestratorJoinProvider;
24298
24630
  exports.useMeshOrchestratorLeaveProvider = useMeshOrchestratorLeaveProvider;
24299
24631
  exports.useMeshOrchestratorListProviders = useMeshOrchestratorListProviders;
@@ -24318,6 +24650,14 @@ exports.useMotionGetStatus = useMotionGetStatus;
24318
24650
  exports.useMotionIsDetected = useMotionIsDetected;
24319
24651
  exports.useMotionTriggerGetStatus = useMotionTriggerGetStatus;
24320
24652
  exports.useMotionTriggerSetMotionTrigger = useMotionTriggerSetMotionTrigger;
24653
+ exports.useMqttBrokerAddBroker = useMqttBrokerAddBroker;
24654
+ exports.useMqttBrokerGetBrokerConfig = useMqttBrokerGetBrokerConfig;
24655
+ exports.useMqttBrokerGetStatus = useMqttBrokerGetStatus;
24656
+ exports.useMqttBrokerListBrokers = useMqttBrokerListBrokers;
24657
+ exports.useMqttBrokerRemoveBroker = useMqttBrokerRemoveBroker;
24658
+ exports.useMqttBrokerStartEmbeddedBroker = useMqttBrokerStartEmbeddedBroker;
24659
+ exports.useMqttBrokerStopEmbeddedBroker = useMqttBrokerStopEmbeddedBroker;
24660
+ exports.useMqttBrokerTestConnection = useMqttBrokerTestConnection;
24321
24661
  exports.useNativeObjectDetectionGetStatus = useNativeObjectDetectionGetStatus;
24322
24662
  exports.useNetworkQualityGetAllStats = useNetworkQualityGetAllStats;
24323
24663
  exports.useNetworkQualityGetDeviceStats = useNetworkQualityGetDeviceStats;
@@ -24433,6 +24773,8 @@ exports.usePipelineRunnerGetLocalMetrics = usePipelineRunnerGetLocalMetrics;
24433
24773
  exports.usePipelineRunnerReportMotion = usePipelineRunnerReportMotion;
24434
24774
  exports.usePlatformProbeGetCapabilities = usePlatformProbeGetCapabilities;
24435
24775
  exports.usePlatformProbeGetHardware = usePlatformProbeGetHardware;
24776
+ exports.usePlatformProbeGetHardwareEncoders = usePlatformProbeGetHardwareEncoders;
24777
+ exports.usePlatformProbeRefreshHardwareEncoders = usePlatformProbeRefreshHardwareEncoders;
24436
24778
  exports.usePlatformProbeResolveHwAccel = usePlatformProbeResolveHwAccel;
24437
24779
  exports.usePlatformProbeResolveInferenceConfig = usePlatformProbeResolveInferenceConfig;
24438
24780
  exports.usePlayerOverlayLayer = usePlayerOverlayLayer;
@@ -24525,6 +24867,7 @@ exports.useStreamBrokerGetPreBufferInfo = useStreamBrokerGetPreBufferInfo;
24525
24867
  exports.useStreamBrokerGetRtspEntry = useStreamBrokerGetRtspEntry;
24526
24868
  exports.useStreamBrokerGetRtspPort = useStreamBrokerGetRtspPort;
24527
24869
  exports.useStreamBrokerGetStreamUrl = useStreamBrokerGetStreamUrl;
24870
+ exports.useStreamBrokerGetStreamWithCodec = useStreamBrokerGetStreamWithCodec;
24528
24871
  exports.useStreamBrokerIsRtspEnabled = useStreamBrokerIsRtspEnabled;
24529
24872
  exports.useStreamBrokerKillClient = useStreamBrokerKillClient;
24530
24873
  exports.useStreamBrokerListAllCameraStreams = useStreamBrokerListAllCameraStreams;
@@ -24532,6 +24875,7 @@ exports.useStreamBrokerListAllProfileSlots = useStreamBrokerListAllProfileSlots;
24532
24875
  exports.useStreamBrokerListClients = useStreamBrokerListClients;
24533
24876
  exports.useStreamBrokerPublishCameraStream = useStreamBrokerPublishCameraStream;
24534
24877
  exports.useStreamBrokerRegenerateRtspToken = useStreamBrokerRegenerateRtspToken;
24878
+ exports.useStreamBrokerReleaseStreamWithCodec = useStreamBrokerReleaseStreamWithCodec;
24535
24879
  exports.useStreamBrokerRestartProfile = useStreamBrokerRestartProfile;
24536
24880
  exports.useStreamBrokerRetractCameraStream = useStreamBrokerRetractCameraStream;
24537
24881
  exports.useStreamBrokerSetPreBufferDuration = useStreamBrokerSetPreBufferDuration;
@@ -24555,10 +24899,13 @@ exports.useTurnOrchestratorGetAllServers = useTurnOrchestratorGetAllServers;
24555
24899
  exports.useTurnOrchestratorListProviders = useTurnOrchestratorListProviders;
24556
24900
  exports.useTurnOrchestratorSetProviderEnabled = useTurnOrchestratorSetProviderEnabled;
24557
24901
  exports.useTurnProviderGetTurnServers = useTurnProviderGetTurnServers;
24902
+ exports.useUserManagementConfirmTotp = useUserManagementConfirmTotp;
24558
24903
  exports.useUserManagementCreateApiKey = useUserManagementCreateApiKey;
24559
24904
  exports.useUserManagementCreateScopedToken = useUserManagementCreateScopedToken;
24560
24905
  exports.useUserManagementCreateUser = useUserManagementCreateUser;
24561
24906
  exports.useUserManagementDeleteUser = useUserManagementDeleteUser;
24907
+ exports.useUserManagementDisableTotp = useUserManagementDisableTotp;
24908
+ exports.useUserManagementGetTotpStatus = useUserManagementGetTotpStatus;
24562
24909
  exports.useUserManagementListApiKeys = useUserManagementListApiKeys;
24563
24910
  exports.useUserManagementListScopedTokens = useUserManagementListScopedTokens;
24564
24911
  exports.useUserManagementListUsers = useUserManagementListUsers;
@@ -24566,13 +24913,16 @@ exports.useUserManagementResetPassword = useUserManagementResetPassword;
24566
24913
  exports.useUserManagementRevokeApiKey = useUserManagementRevokeApiKey;
24567
24914
  exports.useUserManagementRevokeScopedToken = useUserManagementRevokeScopedToken;
24568
24915
  exports.useUserManagementSetUserScopes = useUserManagementSetUserScopes;
24916
+ exports.useUserManagementSetupTotp = useUserManagementSetupTotp;
24569
24917
  exports.useUserManagementUpdateUser = useUserManagementUpdateUser;
24570
24918
  exports.useUserManagementValidateApiKey = useUserManagementValidateApiKey;
24571
24919
  exports.useUserManagementValidateCredentials = useUserManagementValidateCredentials;
24572
24920
  exports.useUserManagementValidateScopedToken = useUserManagementValidateScopedToken;
24921
+ exports.useUserManagementVerifyTotp = useUserManagementVerifyTotp;
24573
24922
  exports.useWebrtcSessionCloseSession = useWebrtcSessionCloseSession;
24574
24923
  exports.useWebrtcSessionCreateSession = useWebrtcSessionCreateSession;
24575
24924
  exports.useWebrtcSessionHandleAnswer = useWebrtcSessionHandleAnswer;
24925
+ exports.useWebrtcSessionHandleOffer = useWebrtcSessionHandleOffer;
24576
24926
  exports.useWebrtcSessionHasAdaptiveBitrate = useWebrtcSessionHasAdaptiveBitrate;
24577
24927
  exports.useWebrtcSessionListStreams = useWebrtcSessionListStreams;
24578
24928
  exports.useWidget = useWidget;