@camstack/addon-tailscale-ingress 0.1.4 → 0.1.6

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.
@@ -4621,7 +4621,7 @@ function _instanceof(cls, params = {}) {
4621
4621
  return inst;
4622
4622
  }
4623
4623
  //#endregion
4624
- //#region ../types/dist/index-Ce7RZWP4.mjs
4624
+ //#region ../types/dist/index-CgPd35k5.mjs
4625
4625
  var MODEL_FORMATS = [
4626
4626
  "onnx",
4627
4627
  "coreml",
@@ -4696,6 +4696,12 @@ Object.fromEntries([
4696
4696
  icon: "video",
4697
4697
  order: 35
4698
4698
  },
4699
+ {
4700
+ id: "ptz",
4701
+ label: "PTZ",
4702
+ icon: "move",
4703
+ order: 40
4704
+ },
4699
4705
  {
4700
4706
  id: "pipeline",
4701
4707
  label: "Detection Pipeline",
@@ -4809,6 +4815,10 @@ function hydrateField(field, values) {
4809
4815
  };
4810
4816
  }
4811
4817
  const rawValue = storedValue !== void 0 ? storedValue : defaultValue !== void 0 ? defaultValue : null;
4818
+ if (field.type === "password") return {
4819
+ ...field,
4820
+ value: ""
4821
+ };
4812
4822
  const value = field.type === "textarea" && field.isJson && rawValue !== null && typeof rawValue === "object" ? JSON.stringify(rawValue, null, 2) : rawValue;
4813
4823
  return {
4814
4824
  ...field,
@@ -4887,7 +4897,19 @@ var DecoderSessionConfigSchema = object({
4887
4897
  * on every line so `grep tag=broker:5/high` filters one camera
4888
4898
  * profile cleanly.
4889
4899
  */
4890
- tag: string().optional()
4900
+ tag: string().optional(),
4901
+ /**
4902
+ * Where the session delivers decoded frames (Phase 5 / D9):
4903
+ *
4904
+ * - `'callback'` (default) — the legacy pixel path: decoded frames are
4905
+ * buffered as `DecodedFrame`s and drained via `pullFrames`.
4906
+ * - `'shm'` — the shared-memory frame plane: decoded frames are written
4907
+ * into an OS shared-memory ring and drained as zero-pixel
4908
+ * `FrameHandle`s via `pullHandles`. A session is one mode or the
4909
+ * other — `pullFrames` returns nothing for an `'shm'` session and
4910
+ * `pullHandles` returns nothing for a `'callback'` session.
4911
+ */
4912
+ frameSink: _enum(["callback", "shm"]).default("callback")
4891
4913
  });
4892
4914
  var YAMNET_TO_MACRO = {
4893
4915
  mapping: {
@@ -5540,6 +5562,63 @@ var DecodedFrameSchema = object({
5540
5562
  ]),
5541
5563
  timestamp: number()
5542
5564
  });
5565
+ var FrameHandleSchema = object({
5566
+ shmId: string(),
5567
+ slot: number().int().nonnegative(),
5568
+ seq: number().int().nonnegative(),
5569
+ width: number().int().positive(),
5570
+ height: number().int().positive(),
5571
+ format: _enum([
5572
+ "jpeg",
5573
+ "rgb",
5574
+ "bgr",
5575
+ "yuv420",
5576
+ "gray"
5577
+ ]),
5578
+ pts: number(),
5579
+ byteLength: number().int().nonnegative(),
5580
+ nodeId: string(),
5581
+ slotCount: number().int().positive()
5582
+ });
5583
+ var FrameHandleFormatSchema = _enum([
5584
+ "rgb",
5585
+ "bgr",
5586
+ "yuv420",
5587
+ "gray"
5588
+ ]);
5589
+ var SubscribeFramesInputSchema = object({
5590
+ brokerId: string(),
5591
+ format: FrameHandleFormatSchema,
5592
+ /**
5593
+ * Optional reader-side cadence hint in frames per second. The broker does
5594
+ * NOT throttle — latest-wins ring reads drop frames implicitly for a slow
5595
+ * consumer. The value is echoed back in `SubscribeFramesResult.maxFps` so
5596
+ * the consumer can pace its own `pullFrameHandles` polling.
5597
+ */
5598
+ maxFps: number().positive().optional(),
5599
+ /** Short caller-identity tag (`motion`, `detection`, …) for diagnostics. */
5600
+ tag: string().optional()
5601
+ });
5602
+ var SubscribeFramesResultSchema = object({
5603
+ /** Opaque id the consumer passes to `pullFrameHandles` / `unsubscribeFrames`. */
5604
+ subscriptionId: string(),
5605
+ /** Reader-side cadence hint (frames/s) — echoes `SubscribeFramesInput.maxFps`. */
5606
+ maxFps: number().nonnegative()
5607
+ });
5608
+ var DecodedAudioChunkSchema = object({
5609
+ data: _instanceof(Uint8Array),
5610
+ sampleRate: number().int().positive(),
5611
+ channels: number().int().positive(),
5612
+ timestamp: number()
5613
+ });
5614
+ var SubscribeAudioChunksInputSchema = object({
5615
+ brokerId: string(),
5616
+ /** Short caller-identity tag (`audio-analyzer`, …) for `listClients`. */
5617
+ tag: string().optional()
5618
+ });
5619
+ var SubscribeAudioChunksResultSchema = object({
5620
+ /** Opaque id passed to `pullAudioChunks` / `unsubscribeAudioChunks`. */
5621
+ subscriptionId: string() });
5543
5622
  var BrokerStatsSchema = object({
5544
5623
  status: _enum([
5545
5624
  "idle",
@@ -5741,7 +5820,13 @@ method(object({
5741
5820
  }), {
5742
5821
  kind: "mutation",
5743
5822
  auth: "admin"
5744
- }), method(object({ brokerId: string() }), custom()), method(object({
5823
+ }), method(SubscribeAudioChunksInputSchema, SubscribeAudioChunksResultSchema, { kind: "mutation" }), method(object({
5824
+ subscriptionId: string(),
5825
+ maxCount: number().int().positive().default(8)
5826
+ }), array(DecodedAudioChunkSchema).readonly()), method(object({ subscriptionId: string() }), object({ released: boolean() }), { kind: "mutation" }), method(SubscribeFramesInputSchema, SubscribeFramesResultSchema, { kind: "mutation" }), method(object({
5827
+ subscriptionId: string(),
5828
+ maxCount: number().int().positive().default(4)
5829
+ }), array(FrameHandleSchema).readonly()), method(object({ subscriptionId: string() }), object({ released: boolean() }), { kind: "mutation" }), method(object({
5745
5830
  brokerId: string(),
5746
5831
  seconds: number().min(0).max(30)
5747
5832
  }), _void(), {
@@ -6433,6 +6518,34 @@ DeviceType.Light, DeviceType.Siren, DeviceType.Switch, method(object({
6433
6518
  enabled: boolean(),
6434
6519
  lastChangedAt: number()
6435
6520
  });
6521
+ object({
6522
+ enabled: boolean(),
6523
+ sensitivity: number(),
6524
+ /** Row-major active-cell grid. Length = gridWidth*gridHeight (see getOptions). */
6525
+ cells: array(boolean()),
6526
+ lastFetchedAt: number()
6527
+ });
6528
+ var MotionZoneOptionsSchema = object({
6529
+ gridWidth: number(),
6530
+ gridHeight: number(),
6531
+ sensitivity: object({
6532
+ min: number(),
6533
+ max: number(),
6534
+ step: number()
6535
+ })
6536
+ });
6537
+ var MotionZonePatchSchema = object({
6538
+ enabled: boolean().optional(),
6539
+ sensitivity: number().optional(),
6540
+ cells: array(boolean()).optional()
6541
+ });
6542
+ DeviceType.Camera, method(object({ deviceId: number() }), MotionZoneOptionsSchema), method(object({
6543
+ deviceId: number(),
6544
+ patch: MotionZonePatchSchema
6545
+ }), _void(), {
6546
+ kind: "mutation",
6547
+ auth: "admin"
6548
+ });
6436
6549
  var PtzAutotrackSettingsSchema = object({
6437
6550
  targetType: string().describe("Vendor target string (people/vehicle/pet); empty = camera default"),
6438
6551
  stopDelaySeconds: number().int().min(0).max(300),
@@ -6474,6 +6587,85 @@ DeviceType.Camera, method(object({ deviceId: number() }), PtzAutotrackStatusSche
6474
6587
  deviceId: number(),
6475
6588
  status: PtzAutotrackStatusSchema
6476
6589
  });
6590
+ var StreamProfileSchema = _enum([
6591
+ "main",
6592
+ "sub",
6593
+ "ext"
6594
+ ]);
6595
+ var StreamProfileConfigSchema = object({
6596
+ width: number(),
6597
+ height: number(),
6598
+ codec: _enum(["h264", "h265"]),
6599
+ framerate: number(),
6600
+ bitrate: number(),
6601
+ bitrateMode: _enum(["vbr", "cbr"]).optional(),
6602
+ encoderProfile: _enum([
6603
+ "high",
6604
+ "main",
6605
+ "baseline"
6606
+ ]).optional(),
6607
+ gop: number().optional(),
6608
+ audio: boolean().optional()
6609
+ });
6610
+ object({
6611
+ /** Per-profile current config. A profile absent = the camera doesn't have it. */
6612
+ main: StreamProfileConfigSchema.optional(),
6613
+ sub: StreamProfileConfigSchema.optional(),
6614
+ ext: StreamProfileConfigSchema.optional(),
6615
+ lastFetchedAt: number()
6616
+ });
6617
+ var StreamProfileOptionsSchema = object({
6618
+ resolutions: array(object({
6619
+ width: number(),
6620
+ height: number()
6621
+ })),
6622
+ codecs: array(_enum(["h264", "h265"])),
6623
+ framerates: array(number()),
6624
+ /** Allowed bitrate values (kbps). Empty if the camera takes a free range. */
6625
+ bitrates: array(number()),
6626
+ /** Optional [min,max] kbps when the camera accepts a continuous range. */
6627
+ bitrateRange: tuple([number(), number()]).optional(),
6628
+ supportsBitrateMode: boolean(),
6629
+ supportsEncoderProfile: boolean(),
6630
+ supportsGop: boolean(),
6631
+ /** Allowed GOP / keyframe-interval range, in seconds — drives the
6632
+ * I-frame-interval selector. Absent when the camera advertises GOP
6633
+ * support but no concrete range (callers then fall back to a free
6634
+ * numeric input). `{ min, max, step }` per the getOptions convention. */
6635
+ gop: object({
6636
+ min: number(),
6637
+ max: number(),
6638
+ step: number()
6639
+ }).optional()
6640
+ });
6641
+ var StreamParamsOptionsSchema = object({
6642
+ main: StreamProfileOptionsSchema.optional(),
6643
+ sub: StreamProfileOptionsSchema.optional(),
6644
+ ext: StreamProfileOptionsSchema.optional()
6645
+ });
6646
+ var StreamProfilePatchSchema = object({
6647
+ width: number().optional(),
6648
+ height: number().optional(),
6649
+ codec: _enum(["h264", "h265"]).optional(),
6650
+ framerate: number().optional(),
6651
+ bitrate: number().optional(),
6652
+ bitrateMode: _enum(["vbr", "cbr"]).optional(),
6653
+ encoderProfile: _enum([
6654
+ "high",
6655
+ "main",
6656
+ "baseline"
6657
+ ]).optional(),
6658
+ gop: number().optional(),
6659
+ audio: boolean().optional()
6660
+ });
6661
+ DeviceType.Camera, method(object({ deviceId: number() }), StreamParamsOptionsSchema), method(object({
6662
+ deviceId: number(),
6663
+ profile: StreamProfileSchema,
6664
+ patch: StreamProfilePatchSchema
6665
+ }), _void(), {
6666
+ kind: "mutation",
6667
+ auth: "admin"
6668
+ }), method(object({ deviceId: number() }), unknown().nullable());
6477
6669
  object({
6478
6670
  on: boolean(),
6479
6671
  /** Ms epoch of the last state change. Useful for UI "X minutes ago". */
@@ -7113,6 +7305,85 @@ method(LogEntrySchema, _void(), { kind: "mutation" }), method(object({
7113
7305
  var StaticDirOutputSchema = object({ staticDir: string() });
7114
7306
  var VersionOutputSchema = object({ version: string() });
7115
7307
  method(_void(), StaticDirOutputSchema), method(_void(), VersionOutputSchema);
7308
+ var MethodAccessSchema = _enum([
7309
+ "view",
7310
+ "create",
7311
+ "delete"
7312
+ ]);
7313
+ var AllowedProviderSchema = union([literal("*"), array(string())]);
7314
+ var AllowedDevicesSchema = record(string(), union([literal("*"), array(string())]));
7315
+ var CapScopeSchema = _enum(["device", "system"]);
7316
+ var TokenScopeSchema = discriminatedUnion("type", [
7317
+ object({
7318
+ type: literal("category"),
7319
+ target: CapScopeSchema,
7320
+ access: array(MethodAccessSchema).min(1)
7321
+ }),
7322
+ object({
7323
+ type: literal("capability"),
7324
+ target: string(),
7325
+ access: array(MethodAccessSchema).min(1)
7326
+ }),
7327
+ object({
7328
+ type: literal("addon"),
7329
+ target: string(),
7330
+ access: array(MethodAccessSchema).min(1)
7331
+ }),
7332
+ object({
7333
+ type: literal("device"),
7334
+ /**
7335
+ * One or more deviceIds (serialised as strings for wire-format
7336
+ * consistency with the rest of the union). Matcher accepts if
7337
+ * `input.deviceId` ∈ `targets`. Array shape avoids the row-explosion
7338
+ * of one scope-per-device when granting access to a set of cameras.
7339
+ */
7340
+ targets: array(string()).min(1),
7341
+ access: array(MethodAccessSchema).min(1)
7342
+ })
7343
+ ]);
7344
+ object({
7345
+ id: string(),
7346
+ username: string(),
7347
+ passwordHash: string(),
7348
+ /**
7349
+ * Admin bypass. When true, the middleware skips the scope-access
7350
+ * check entirely. There is no other axis of privilege; the legacy
7351
+ * role enum collapsed onto this boolean in v2.
7352
+ */
7353
+ isAdmin: boolean().default(false),
7354
+ allowedProviders: AllowedProviderSchema,
7355
+ allowedDevices: AllowedDevicesSchema,
7356
+ /**
7357
+ * Scopes granted to this user. Admins bypass; their `scopes` is
7358
+ * ignored. Non-admins without scopes are locked out of every
7359
+ * protected call.
7360
+ */
7361
+ scopes: array(TokenScopeSchema).default([]),
7362
+ createdAt: number(),
7363
+ updatedAt: number()
7364
+ });
7365
+ object({
7366
+ id: string(),
7367
+ label: string(),
7368
+ isAdmin: boolean().default(false),
7369
+ allowedProviders: AllowedProviderSchema,
7370
+ allowedDevices: AllowedDevicesSchema,
7371
+ tokenHash: string(),
7372
+ tokenPrefix: string(),
7373
+ createdAt: number(),
7374
+ lastUsedAt: number().optional()
7375
+ });
7376
+ object({
7377
+ id: string(),
7378
+ userId: string(),
7379
+ name: string(),
7380
+ tokenHash: string(),
7381
+ tokenPrefix: string(),
7382
+ scopes: array(TokenScopeSchema),
7383
+ expiresAt: number().nullish(),
7384
+ lastUsedAt: number().nullish(),
7385
+ createdAt: number()
7386
+ });
7116
7387
  var SsoBridgeClaimsSchema = object({
7117
7388
  userId: string(),
7118
7389
  username: string(),
@@ -7128,12 +7399,36 @@ var SsoBridgeClaimsSchema = object({
7128
7399
  * JWT WITHOUT verifying the signature — the hub re-verifies on every
7129
7400
  * inbound call so trust still rests with the signing hub.
7130
7401
  */
7131
- hubUrl: string().optional()
7402
+ hubUrl: string().optional(),
7403
+ /** Permission scopes baked into the token. Set by the OAuth
7404
+ * account-linking grant; absent on ordinary SSO-login tokens. */
7405
+ scopes: array(TokenScopeSchema).optional(),
7406
+ /** OAuth authorization-code binding — set only on `oauth-code` tokens. */
7407
+ redirectUri: string().optional(),
7408
+ integrationId: string().optional(),
7409
+ /** JWT ID — unique per issued code; consumed-set enforces single-use. */
7410
+ jti: string().optional(),
7411
+ /** OAuth session registry id — set on `oauth-access`/`oauth-refresh`
7412
+ * tokens so the verify path can check the session is not revoked. */
7413
+ sessionId: string().optional()
7132
7414
  });
7133
7415
  method(object({
7134
7416
  claims: SsoBridgeClaimsSchema,
7135
7417
  ttlSec: number().int().positive().optional()
7136
7418
  }), object({ token: string() })), method(object({ token: string() }), SsoBridgeClaimsSchema.nullable());
7419
+ var OauthIntegrationDescriptorSchema = object({
7420
+ /** Stable id used as the `integration=` query param, e.g. 'export-alexa'. */
7421
+ integrationId: string(),
7422
+ /** Human label rendered on the consent page. */
7423
+ displayName: string(),
7424
+ /** Scopes baked into every token issued for this integration. */
7425
+ requestedScopes: array(TokenScopeSchema),
7426
+ /** Allowed redirect_uri prefixes. /api/oauth2/authorize rejects any
7427
+ * redirect_uri that does not start with one of these. Required —
7428
+ * an empty list means the integration can never complete linking. */
7429
+ allowedRedirectPrefixes: array(string()).min(1)
7430
+ });
7431
+ method(_void(), OauthIntegrationDescriptorSchema);
7137
7432
  var PasskeySummarySchema = object({
7138
7433
  credentialId: string(),
7139
7434
  label: string(),
@@ -7379,22 +7674,29 @@ var WidgetSizeEnum = _enum([
7379
7674
  "lg",
7380
7675
  "xl"
7381
7676
  ]);
7677
+ var WidgetRemoteSchema = object({
7678
+ remoteName: string(),
7679
+ exposedModule: string(),
7680
+ componentKey: string().optional()
7681
+ });
7382
7682
  var WidgetMetadataSchema = object({
7383
- /** Stable id within the addon kebab-case. */
7384
- stableId: string(),
7683
+ /** Primary host tab `'dashboard'`, `'device-tab'`, or a device-detail tab id. */
7684
+ tab: string(),
7685
+ /** Optional sub-tab within `tab`. */
7686
+ subTab: string().optional(),
7385
7687
  /** Operator-facing label. */
7386
7688
  label: string(),
7689
+ /** Ordering within `(tab, subTab)`, ascending. */
7690
+ order: number().optional(),
7691
+ /** Always `'remote'` — a widget is a Module Federation remote. */
7692
+ kind: literal("remote"),
7693
+ /** MF remote descriptor. */
7694
+ remote: WidgetRemoteSchema,
7695
+ /** Stable id within the addon — kebab-case. Equals `remote.componentKey`. */
7696
+ stableId: string(),
7387
7697
  description: string().optional(),
7388
7698
  icon: string().optional(),
7389
7699
  /**
7390
- * Module Federation remote name — must match the `name` field on the
7391
- * widget addon's `federation()` plugin config. Used by the host's
7392
- * `<WidgetRegistryProvider>` to call `loadRemote('<remoteName>/widgets')`.
7393
- * Conventionally `addon_<addonid>_widgets` (snake_case; MF names
7394
- * cannot contain hyphens).
7395
- */
7396
- remoteName: string(),
7397
- /**
7398
7700
  * Bundle filename inside the addon's `dist/` dir served at
7399
7701
  * `/api/addon-widgets/<addonId>/<bundle>`. With Module Federation
7400
7702
  * this is always `'remoteEntry.js'` — the value is kept on the
@@ -7402,9 +7704,9 @@ var WidgetMetadataSchema = object({
7402
7704
  * cache-buster URL without a separate filesystem stat.
7403
7705
  */
7404
7706
  bundle: string(),
7405
- /** Where the widget makes sense to render. */
7707
+ /** Every host the widget supports. The picker filters on this set. */
7406
7708
  hosts: array(WidgetHostEnum).readonly(),
7407
- /** Required props the host must supply. Validated at <WidgetSlot> mount. */
7709
+ /** Required props the host must supply. Validated at `<WidgetSlot>` mount. */
7408
7710
  requires: object({
7409
7711
  deviceContext: boolean().default(false),
7410
7712
  integrationContext: boolean().default(false)
@@ -7468,6 +7770,16 @@ var InvokeReplyEnvelopeSchema = object({
7468
7770
  contentType: string().optional()
7469
7771
  });
7470
7772
  method(_void(), array(AddonHttpRouteSchema)), method(InvokeRequestSchema, InvokeReplyEnvelopeSchema, { kind: "mutation" });
7773
+ var ShmRingStatsSchema = object({
7774
+ sessionId: string(),
7775
+ slotCount: number().int(),
7776
+ slotByteLength: number().int(),
7777
+ segmentBytes: number().int(),
7778
+ budgetMb: number().int(),
7779
+ framesWritten: number().int(),
7780
+ getFrameHits: number().int(),
7781
+ getFrameMisses: number().int()
7782
+ });
7471
7783
  method(object({ codec: string() }), boolean()), method(_void(), object({
7472
7784
  id: string(),
7473
7785
  name: string(),
@@ -7486,6 +7798,9 @@ method(object({ codec: string() }), boolean()), method(_void(), object({
7486
7798
  sessionId: string(),
7487
7799
  maxCount: number().default(1)
7488
7800
  }), array(DecodedFrameSchema)), method(object({
7801
+ sessionId: string(),
7802
+ maxCount: number().default(1)
7803
+ }), array(FrameHandleSchema)), method(object({ handle: FrameHandleSchema }), DecodedFrameSchema.nullable()), method(object({ sessionId: string() }), ShmRingStatsSchema.nullable()), method(object({
7489
7804
  sessionId: string(),
7490
7805
  config: DecoderSessionConfigSchema.partial()
7491
7806
  }), _void()), method(object({ sessionId: string() }), DecoderStatsSchema), method(_void(), array(object({
@@ -8230,42 +8545,6 @@ method(object({
8230
8545
  username: string(),
8231
8546
  password: string()
8232
8547
  }), AuthResultSchema.nullable(), { kind: "mutation" }), method(object({ state: string() }), string()), method(record(string(), string()), AuthResultSchema, { kind: "mutation" }), method(object({ token: string() }), AuthResultSchema.nullable());
8233
- var AuthProviderInfoSchema = object({
8234
- /** Stable id matching the addon id (used for `getLoginUrl({addonId,…})`). */
8235
- addonId: string(),
8236
- /**
8237
- * Per-instance id when one addon registers multiple "logical"
8238
- * providers (e.g. OIDC with Google + Microsoft + custom). The login
8239
- * URL becomes `/addon/${addonId}/${instanceId}/start` — handler reads
8240
- * `:instanceId` from the route. Empty/unset means the addon is a
8241
- * single-instance provider; the URL is `/addon/${addonId}/start`.
8242
- */
8243
- instanceId: string().optional(),
8244
- /** Display label shown on the login button + admin row. */
8245
- displayName: string(),
8246
- /** Optional iconography hint (lucide-react icon name OR emoji). */
8247
- icon: string().optional(),
8248
- /** When true, the provider exposes a redirect-based login flow
8249
- * (`getLoginUrl` returns a URL the browser navigates to). */
8250
- hasRedirectFlow: boolean(),
8251
- /** When true, the provider exposes a credential-form login flow
8252
- * (`validateCredentials` accepts username + password). */
8253
- hasCredentialFlow: boolean(),
8254
- /** Provider kind, drives admin-UI hint dispatch (oidc / saml / totp / …). */
8255
- kind: string().optional(),
8256
- /** Operator-facing status string (e.g. "Connected to https://login.acme.com"). */
8257
- status: string().optional(),
8258
- /** When false, the provider is registered but disabled by config; the
8259
- * UI surfaces it as inactive without enumerating it for login. */
8260
- enabled: boolean()
8261
- });
8262
- method(_void(), array(AuthProviderInfoSchema).readonly()), method(object({
8263
- addonId: string(),
8264
- enabled: boolean()
8265
- }), object({ success: literal(true) }), {
8266
- kind: "mutation",
8267
- auth: "admin"
8268
- });
8269
8548
  var NetworkEndpointSchema = object({
8270
8549
  url: string(),
8271
8550
  hostname: string(),
@@ -8294,7 +8573,6 @@ var networkAccessCapability = {
8294
8573
  name: "network-access",
8295
8574
  scope: "system",
8296
8575
  mode: "collection",
8297
- internal: true,
8298
8576
  providerKind: "ingress",
8299
8577
  methods: {
8300
8578
  start: method(_void(), NetworkEndpointSchema, { kind: "mutation" }),
@@ -8302,40 +8580,13 @@ var networkAccessCapability = {
8302
8580
  getEndpoint: method(_void(), NetworkEndpointSchema.nullable()),
8303
8581
  getStatus: method(_void(), NetworkAccessStatusSchema),
8304
8582
  /**
8305
- * Enumerate every active ingress entry. Default implementation (when
8306
- * the provider omits this method) is derived from `getEndpoint()` —
8307
- * see the remote-access orchestrator for the fallback path.
8583
+ * Enumerate every active ingress entry. Providers that expose only a
8584
+ * single endpoint may omit this method; callers fall back to
8585
+ * `getEndpoint()` in that case.
8308
8586
  */
8309
8587
  listEndpoints: method(_void(), array(NetworkEndpointEntrySchema).readonly())
8310
8588
  }
8311
8589
  };
8312
- var RemoteAccessEndpointSchema = object({
8313
- url: string(),
8314
- hostname: string(),
8315
- port: number(),
8316
- protocol: _enum(["http", "https"])
8317
- });
8318
- var RemoteAccessProviderInfoSchema = object({
8319
- /** Stable id matching the addon id. */
8320
- addonId: string(),
8321
- /** Display label shown on the admin row — sourced from the addon manifest. */
8322
- displayName: string(),
8323
- /** When false, the provider is registered but disabled. */
8324
- enabled: boolean(),
8325
- /** True when the underlying tunnel/connection is up. */
8326
- connected: boolean(),
8327
- /** Public-facing endpoint, when connected. Null otherwise. */
8328
- endpoint: RemoteAccessEndpointSchema.nullable(),
8329
- /** Last error message (when connected=false), if available. */
8330
- error: string().optional()
8331
- });
8332
- method(_void(), array(RemoteAccessProviderInfoSchema).readonly()), method(object({ addonId: string() }), RemoteAccessEndpointSchema, {
8333
- kind: "mutation",
8334
- auth: "admin"
8335
- }), method(object({ addonId: string() }), object({ success: literal(true) }), {
8336
- kind: "mutation",
8337
- auth: "admin"
8338
- });
8339
8590
  var TurnServerSchema = object({
8340
8591
  /** Single URL or list of URLs (e.g. "turn:turn.example.com:3478?transport=udp"). */
8341
8592
  urls: union([string(), array(string())]),
@@ -8343,33 +8594,6 @@ var TurnServerSchema = object({
8343
8594
  credential: string().optional()
8344
8595
  });
8345
8596
  method(_void(), array(TurnServerSchema).readonly());
8346
- var TurnProviderInfoSchema = object({
8347
- /** Stable id matching the addon id. */
8348
- addonId: string(),
8349
- /** Display label shown on the admin row — sourced from the addon manifest. */
8350
- displayName: string(),
8351
- /** When false, the provider is registered but disabled. */
8352
- enabled: boolean(),
8353
- /** Number of servers this provider is currently exposing. */
8354
- serverCount: number(),
8355
- /**
8356
- * Flat list of every TURN/STUN URL this provider currently exposes.
8357
- * One row per URL (multi-URL ICE server entries are flattened). The
8358
- * admin UI shows this in a compact per-provider list so operators
8359
- * can verify what's actually being negotiated without having to dig
8360
- * into the combined `getAllServers` output.
8361
- */
8362
- urls: array(string()).readonly(),
8363
- /** Last fetch error (when serverCount=0 due to API failure), if any. */
8364
- error: string().optional()
8365
- });
8366
- method(_void(), array(TurnProviderInfoSchema).readonly()), method(_void(), array(TurnServerSchema).readonly()), method(object({
8367
- addonId: string(),
8368
- enabled: boolean()
8369
- }), object({ success: literal(true) }), {
8370
- kind: "mutation",
8371
- auth: "admin"
8372
- });
8373
8597
  var SnapshotImageSchema = object({
8374
8598
  base64: string(),
8375
8599
  contentType: string()
@@ -8972,10 +9196,38 @@ var PtzMoveCommandSchema = object({
8972
9196
  zoom: number().optional(),
8973
9197
  speed: number().optional()
8974
9198
  });
9199
+ PtzPositionSchema.extend({ autofocus: boolean() });
9200
+ var PtzOptionsSchema = object({
9201
+ hasPan: boolean(),
9202
+ hasTilt: boolean(),
9203
+ hasZoom: boolean(),
9204
+ supportsPresets: boolean(),
9205
+ /** Max number of named presets the camera supports, when known. */
9206
+ maxPresets: number().optional(),
9207
+ /** Whether the camera exposes a controllable autofocus toggle
9208
+ * (boolean `hasX` per the getOptions availability convention). */
9209
+ hasAutofocus: boolean()
9210
+ });
8975
9211
  DeviceType.Camera, method(PtzMoveCommandSchema.extend({ deviceId: number() }), _void(), { kind: "mutation" }), method(PtzMoveCommandSchema.extend({ deviceId: number() }), _void(), { kind: "mutation" }), method(object({ deviceId: number() }), _void(), { kind: "mutation" }), method(object({ deviceId: number() }), array(PtzPresetSchema)), method(object({
8976
9212
  deviceId: number(),
8977
9213
  presetId: string()
8978
- }), _void(), { kind: "mutation" }), method(object({ deviceId: number() }), _void(), { kind: "mutation" }), method(object({ deviceId: number() }), PtzPositionSchema);
9214
+ }), _void(), { kind: "mutation" }), method(object({
9215
+ deviceId: number(),
9216
+ presetId: string(),
9217
+ name: string()
9218
+ }), _void(), {
9219
+ kind: "mutation",
9220
+ auth: "admin"
9221
+ }), method(object({
9222
+ deviceId: number(),
9223
+ presetId: string()
9224
+ }), _void(), {
9225
+ kind: "mutation",
9226
+ auth: "admin"
9227
+ }), method(object({ deviceId: number() }), PtzOptionsSchema), method(object({ deviceId: number() }), _void(), { kind: "mutation" }), method(object({ deviceId: number() }), PtzPositionSchema), method(object({
9228
+ deviceId: number(),
9229
+ enabled: boolean()
9230
+ }), _void(), { kind: "mutation" });
8979
9231
  var EventItemSchema = object({
8980
9232
  id: string(),
8981
9233
  type: string(),
@@ -9463,7 +9715,7 @@ method(_void(), ListResultSchema), method(_void(), PreferredSchema), method(obje
9463
9715
  * tunnel always emits `https://` regardless. */
9464
9716
  scheme: _enum(["http", "https"]).optional()
9465
9717
  }), GetConnectionEndpointsResultSchema), method(_void(), AllowedAddressesSchema), method(AllowedAddressesSchema, object({ success: literal(true) }), { kind: "mutation" }), method(_void(), AllowedAddressesSchema, { kind: "mutation" });
9466
- var MeshEndpointSchema$1 = object({
9718
+ var MeshEndpointSchema = object({
9467
9719
  /** Stable identifier within the provider (e.g. `mesh-ipv4`, `magicdns`, `funnel`). */
9468
9720
  id: string(),
9469
9721
  /** Operator-facing label (e.g. "Mesh IPv4", "MagicDNS"). */
@@ -9540,7 +9792,7 @@ var MeshStatusSchema = object({
9540
9792
  /** Number of peers visible to this host (excluding self). */
9541
9793
  peerCount: number(),
9542
9794
  /** Every endpoint this provider exposes for the current host. */
9543
- endpoints: array(MeshEndpointSchema$1).readonly(),
9795
+ endpoints: array(MeshEndpointSchema).readonly(),
9544
9796
  /** Last error from the daemon, when not joined. */
9545
9797
  error: string().optional(),
9546
9798
  /**
@@ -9615,131 +9867,7 @@ authKey: string().optional() }), object({
9615
9867
  /** Human-readable error when `ok: false`. */
9616
9868
  error: string().optional()
9617
9869
  }), { kind: "mutation" });
9618
- var MeshEndpointSchema = object({
9619
- id: string(),
9620
- label: string(),
9621
- scope: _enum(["mesh", "public"]),
9622
- url: string(),
9623
- hostname: string(),
9624
- port: number(),
9625
- protocol: _enum(["http", "https"])
9626
- });
9627
- var MeshProviderInfoSchema = object({
9628
- /** Stable id matching the addon id. */
9629
- addonId: string(),
9630
- /** Display label shown on the admin row — sourced from the addon manifest. */
9631
- displayName: string(),
9632
- /** True when the host is joined to this provider's mesh. */
9633
- joined: boolean(),
9634
- /** Local mesh IP (empty when not joined). */
9635
- meshIp: string(),
9636
- /** MagicDNS / mesh hostname (empty when not configured). */
9637
- magicDnsHostname: string(),
9638
- /** Peer count (excluding self). */
9639
- peerCount: number(),
9640
- /** Active endpoints (mesh IP + MagicDNS + optional public Funnel). */
9641
- endpoints: array(MeshEndpointSchema).readonly(),
9642
- /** Last error reported by the provider. */
9643
- error: string().optional(),
9644
- /** Tenant / tailnet / network display name. Empty pre-join. */
9645
- tenantName: string(),
9646
- /** Mesh DNS suffix (e.g. tailXXXX.ts.net). Empty when not configured. */
9647
- magicDnsSuffix: string(),
9648
- /** Authenticated user / account login. Null for token-only providers. */
9649
- userLogin: string().nullable(),
9650
- /** Provider control-plane URL. */
9651
- controlPlaneUrl: string(),
9652
- /** Machine-key expiry (epoch ms). Null when keys don't rotate. */
9653
- keyExpiry: number().nullable()
9654
- });
9655
- method(_void(), array(MeshProviderInfoSchema).readonly()), method(object({
9656
- addonId: string(),
9657
- authKey: string().min(8),
9658
- hostname: string().optional()
9659
- }), object({ joined: literal(true) }), { kind: "mutation" }), method(object({ addonId: string() }), object({ success: literal(true) }), { kind: "mutation" }), method(object({
9660
- addonId: string(),
9661
- hostname: string().optional()
9662
- }), object({ loginUrl: string() }), { kind: "mutation" }), method(object({ addonId: string() }), object({ loggedOut: literal(true) }), { kind: "mutation" }), method(object({ addonId: string() }), object({ peers: array(MeshPeerSchema).readonly() }));
9663
- var MethodAccessSchema = _enum([
9664
- "view",
9665
- "create",
9666
- "delete"
9667
- ]);
9668
- var AllowedProviderSchema = union([literal("*"), array(string())]);
9669
- var AllowedDevicesSchema = record(string(), union([literal("*"), array(string())]));
9670
- var CapScopeSchema = _enum(["device", "system"]);
9671
- var TokenScopeSchema = discriminatedUnion("type", [
9672
- object({
9673
- type: literal("category"),
9674
- target: CapScopeSchema,
9675
- access: array(MethodAccessSchema).min(1)
9676
- }),
9677
- object({
9678
- type: literal("capability"),
9679
- target: string(),
9680
- access: array(MethodAccessSchema).min(1)
9681
- }),
9682
- object({
9683
- type: literal("addon"),
9684
- target: string(),
9685
- access: array(MethodAccessSchema).min(1)
9686
- }),
9687
- object({
9688
- type: literal("device"),
9689
- /**
9690
- * One or more deviceIds (serialised as strings for wire-format
9691
- * consistency with the rest of the union). Matcher accepts if
9692
- * `input.deviceId` ∈ `targets`. Array shape avoids the row-explosion
9693
- * of one scope-per-device when granting access to a set of cameras.
9694
- */
9695
- targets: array(string()).min(1),
9696
- access: array(MethodAccessSchema).min(1)
9697
- })
9698
- ]);
9699
- object({
9700
- id: string(),
9701
- username: string(),
9702
- passwordHash: string(),
9703
- /**
9704
- * Admin bypass. When true, the middleware skips the scope-access
9705
- * check entirely. There is no other axis of privilege; the legacy
9706
- * role enum collapsed onto this boolean in v2.
9707
- */
9708
- isAdmin: boolean().default(false),
9709
- allowedProviders: AllowedProviderSchema,
9710
- allowedDevices: AllowedDevicesSchema,
9711
- /**
9712
- * Scopes granted to this user. Admins bypass; their `scopes` is
9713
- * ignored. Non-admins without scopes are locked out of every
9714
- * protected call.
9715
- */
9716
- scopes: array(TokenScopeSchema).default([]),
9717
- createdAt: number(),
9718
- updatedAt: number()
9719
- });
9720
- object({
9721
- id: string(),
9722
- label: string(),
9723
- isAdmin: boolean().default(false),
9724
- allowedProviders: AllowedProviderSchema,
9725
- allowedDevices: AllowedDevicesSchema,
9726
- tokenHash: string(),
9727
- tokenPrefix: string(),
9728
- createdAt: number(),
9729
- lastUsedAt: number().optional()
9730
- });
9731
- object({
9732
- id: string(),
9733
- userId: string(),
9734
- name: string(),
9735
- tokenHash: string(),
9736
- tokenPrefix: string(),
9737
- scopes: array(TokenScopeSchema),
9738
- expiresAt: number().nullish(),
9739
- lastUsedAt: number().nullish(),
9740
- createdAt: number()
9741
- });
9742
- var UserSummarySchema = object({
9870
+ var UserSummarySchema = object({
9743
9871
  id: string(),
9744
9872
  username: string(),
9745
9873
  isAdmin: boolean().default(false),
@@ -9811,6 +9939,16 @@ var CreateScopedTokenResultSchema = object({
9811
9939
  token: string(),
9812
9940
  record: ScopedTokenSummarySchema
9813
9941
  });
9942
+ var OauthSessionSummarySchema = object({
9943
+ id: string(),
9944
+ userId: string(),
9945
+ username: string(),
9946
+ integrationId: string(),
9947
+ scopes: array(TokenScopeSchema),
9948
+ createdAt: number(),
9949
+ lastUsedAt: number(),
9950
+ revokedAt: number().nullable()
9951
+ });
9814
9952
  var TotpSetupResultSchema = object({
9815
9953
  secret: string(),
9816
9954
  otpauthUrl: string()
@@ -9893,6 +10031,41 @@ method(_void(), array(UserSummarySchema), { auth: "admin" }), method(CreateUserI
9893
10031
  }), object({ valid: boolean() }), {
9894
10032
  kind: "mutation",
9895
10033
  access: "view"
10034
+ }), method(object({
10035
+ integrationId: string(),
10036
+ userId: string(),
10037
+ username: string(),
10038
+ scopes: array(TokenScopeSchema),
10039
+ redirectUri: string(),
10040
+ hubUrl: string()
10041
+ }), object({ code: string() }), {
10042
+ kind: "mutation",
10043
+ access: "create"
10044
+ }), method(object({
10045
+ code: string(),
10046
+ redirectUri: string()
10047
+ }), object({
10048
+ accessToken: string(),
10049
+ refreshToken: string(),
10050
+ expiresIn: number()
10051
+ }).nullable(), {
10052
+ kind: "mutation",
10053
+ access: "view"
10054
+ }), method(object({ refreshToken: string() }), object({
10055
+ accessToken: string(),
10056
+ refreshToken: string(),
10057
+ expiresIn: number()
10058
+ }).nullable(), {
10059
+ kind: "mutation",
10060
+ access: "view"
10061
+ }), method(object({ token: string() }), object({
10062
+ userId: string(),
10063
+ username: string(),
10064
+ scopes: array(TokenScopeSchema)
10065
+ }).nullable(), { access: "view" }), method(_void(), array(OauthSessionSummarySchema), { auth: "admin" }), method(object({ id: string() }), object({ success: boolean() }), {
10066
+ kind: "mutation",
10067
+ auth: "admin",
10068
+ access: "delete"
9896
10069
  });
9897
10070
  var FeatureManifestSchema = object({
9898
10071
  streaming: boolean(),
@@ -10061,7 +10234,13 @@ method(_void(), array(TopologyNodeSchema).readonly(), { auth: "admin" }), method
10061
10234
  }), RenameNodeResultSchema, {
10062
10235
  kind: "mutation",
10063
10236
  auth: "admin"
10064
- }), method(_void(), record(string(), ClusterAddonStatusEntrySchema), { auth: "admin" }), method(object({ nodeId: string() }), array(NodeAddonEntrySchema).readonly(), { auth: "admin" }), method(object({
10237
+ }), method(_void(), record(string(), ClusterAddonStatusEntrySchema), { auth: "admin" }), method(object({ windowSeconds: number().int().positive().max(300).default(60) }), array(object({
10238
+ callerAddonId: string(),
10239
+ providerAddonId: string(),
10240
+ capName: string(),
10241
+ callsPerMin: number(),
10242
+ lastCallAtMs: number()
10243
+ })).readonly(), { auth: "admin" }), method(object({ nodeId: string() }), array(NodeAddonEntrySchema).readonly(), { auth: "admin" }), method(object({
10065
10244
  nodeId: string(),
10066
10245
  level: string()
10067
10246
  }), SuccessSchema, {
@@ -10349,6 +10528,13 @@ method(_void(), array(AddonListItemSchema).readonly()), method(object({
10349
10528
  mode: _enum(["singleton", "collection"]),
10350
10529
  isActive: boolean()
10351
10530
  })).readonly()), method(object({
10531
+ capName: string().min(1),
10532
+ addonId: string().min(1),
10533
+ enabled: boolean()
10534
+ }), object({ success: literal(true) }), {
10535
+ kind: "mutation",
10536
+ auth: "admin"
10537
+ }), method(object({
10352
10538
  packageName: string().min(1),
10353
10539
  version: string().optional()
10354
10540
  }), UpdateFrameworkPackageResultSchema, {
@@ -11034,6 +11220,12 @@ Object.freeze({
11034
11220
  addonId: null,
11035
11221
  access: "create"
11036
11222
  },
11223
+ "addons.setCapabilityProviderEnabled": {
11224
+ capName: "addons",
11225
+ capScope: "system",
11226
+ addonId: null,
11227
+ access: "create"
11228
+ },
11037
11229
  "addons.uninstallPackage": {
11038
11230
  capName: "addons",
11039
11231
  capScope: "system",
@@ -11286,18 +11478,6 @@ Object.freeze({
11286
11478
  addonId: null,
11287
11479
  access: "view"
11288
11480
  },
11289
- "authentication.listProviders": {
11290
- capName: "authentication",
11291
- capScope: "system",
11292
- addonId: null,
11293
- access: "view"
11294
- },
11295
- "authentication.setProviderEnabled": {
11296
- capName: "authentication",
11297
- capScope: "system",
11298
- addonId: null,
11299
- access: "create"
11300
- },
11301
11481
  "authProvider.getLoginUrl": {
11302
11482
  capName: "auth-provider",
11303
11483
  capScope: "system",
@@ -11424,12 +11604,24 @@ Object.freeze({
11424
11604
  addonId: null,
11425
11605
  access: "delete"
11426
11606
  },
11607
+ "decoder.getFrame": {
11608
+ capName: "decoder",
11609
+ capScope: "system",
11610
+ addonId: null,
11611
+ access: "view"
11612
+ },
11427
11613
  "decoder.getInfo": {
11428
11614
  capName: "decoder",
11429
11615
  capScope: "system",
11430
11616
  addonId: null,
11431
11617
  access: "view"
11432
11618
  },
11619
+ "decoder.getShmStats": {
11620
+ capName: "decoder",
11621
+ capScope: "system",
11622
+ addonId: null,
11623
+ access: "view"
11624
+ },
11433
11625
  "decoder.getStats": {
11434
11626
  capName: "decoder",
11435
11627
  capScope: "system",
@@ -11454,6 +11646,12 @@ Object.freeze({
11454
11646
  addonId: null,
11455
11647
  access: "view"
11456
11648
  },
11649
+ "decoder.pullHandles": {
11650
+ capName: "decoder",
11651
+ capScope: "system",
11652
+ addonId: null,
11653
+ access: "view"
11654
+ },
11457
11655
  "decoder.pushPacket": {
11458
11656
  capName: "decoder",
11459
11657
  capScope: "system",
@@ -12144,42 +12342,6 @@ Object.freeze({
12144
12342
  addonId: null,
12145
12343
  access: "create"
12146
12344
  },
12147
- "meshOrchestrator.joinProvider": {
12148
- capName: "mesh-orchestrator",
12149
- capScope: "system",
12150
- addonId: null,
12151
- access: "create"
12152
- },
12153
- "meshOrchestrator.leaveProvider": {
12154
- capName: "mesh-orchestrator",
12155
- capScope: "system",
12156
- addonId: null,
12157
- access: "create"
12158
- },
12159
- "meshOrchestrator.listProviderPeers": {
12160
- capName: "mesh-orchestrator",
12161
- capScope: "system",
12162
- addonId: null,
12163
- access: "view"
12164
- },
12165
- "meshOrchestrator.listProviders": {
12166
- capName: "mesh-orchestrator",
12167
- capScope: "system",
12168
- addonId: null,
12169
- access: "view"
12170
- },
12171
- "meshOrchestrator.logoutProvider": {
12172
- capName: "mesh-orchestrator",
12173
- capScope: "system",
12174
- addonId: null,
12175
- access: "create"
12176
- },
12177
- "meshOrchestrator.startLoginProvider": {
12178
- capName: "mesh-orchestrator",
12179
- capScope: "system",
12180
- addonId: null,
12181
- access: "create"
12182
- },
12183
12345
  "metricsProvider.collectSnapshot": {
12184
12346
  capName: "metrics-provider",
12185
12347
  capScope: "system",
@@ -12276,6 +12438,18 @@ Object.freeze({
12276
12438
  addonId: null,
12277
12439
  access: "create"
12278
12440
  },
12441
+ "motionZones.getOptions": {
12442
+ capName: "motion-zones",
12443
+ capScope: "device",
12444
+ addonId: null,
12445
+ access: "view"
12446
+ },
12447
+ "motionZones.setZone": {
12448
+ capName: "motion-zones",
12449
+ capScope: "device",
12450
+ addonId: null,
12451
+ access: "create"
12452
+ },
12279
12453
  "mqttBroker.addBroker": {
12280
12454
  capName: "mqtt-broker",
12281
12455
  capScope: "system",
@@ -12390,6 +12564,12 @@ Object.freeze({
12390
12564
  addonId: null,
12391
12565
  access: "create"
12392
12566
  },
12567
+ "nodes.getCapUsageGraph": {
12568
+ capName: "nodes",
12569
+ capScope: "system",
12570
+ addonId: null,
12571
+ access: "view"
12572
+ },
12393
12573
  "nodes.getNodeAddons": {
12394
12574
  capName: "nodes",
12395
12575
  capScope: "system",
@@ -12456,6 +12636,12 @@ Object.freeze({
12456
12636
  addonId: null,
12457
12637
  access: "create"
12458
12638
  },
12639
+ "oauthIntegration.getDescriptor": {
12640
+ capName: "oauth-integration",
12641
+ capScope: "system",
12642
+ addonId: null,
12643
+ access: "view"
12644
+ },
12459
12645
  "osd.setOverlay": {
12460
12646
  capName: "osd",
12461
12647
  capScope: "device",
@@ -13014,6 +13200,18 @@ Object.freeze({
13014
13200
  addonId: null,
13015
13201
  access: "create"
13016
13202
  },
13203
+ "ptz.deletePreset": {
13204
+ capName: "ptz",
13205
+ capScope: "device",
13206
+ addonId: null,
13207
+ access: "delete"
13208
+ },
13209
+ "ptz.getOptions": {
13210
+ capName: "ptz",
13211
+ capScope: "device",
13212
+ addonId: null,
13213
+ access: "view"
13214
+ },
13017
13215
  "ptz.getPosition": {
13018
13216
  capName: "ptz",
13019
13217
  capScope: "device",
@@ -13044,6 +13242,18 @@ Object.freeze({
13044
13242
  addonId: null,
13045
13243
  access: "create"
13046
13244
  },
13245
+ "ptz.savePreset": {
13246
+ capName: "ptz",
13247
+ capScope: "device",
13248
+ addonId: null,
13249
+ access: "create"
13250
+ },
13251
+ "ptz.setAutofocus": {
13252
+ capName: "ptz",
13253
+ capScope: "device",
13254
+ addonId: null,
13255
+ access: "create"
13256
+ },
13047
13257
  "ptz.stop": {
13048
13258
  capName: "ptz",
13049
13259
  capScope: "device",
@@ -13206,24 +13416,6 @@ Object.freeze({
13206
13416
  addonId: null,
13207
13417
  access: "create"
13208
13418
  },
13209
- "remoteAccess.listProviders": {
13210
- capName: "remote-access",
13211
- capScope: "system",
13212
- addonId: null,
13213
- access: "view"
13214
- },
13215
- "remoteAccess.startProvider": {
13216
- capName: "remote-access",
13217
- capScope: "system",
13218
- addonId: null,
13219
- access: "create"
13220
- },
13221
- "remoteAccess.stopProvider": {
13222
- capName: "remote-access",
13223
- capScope: "system",
13224
- addonId: null,
13225
- access: "create"
13226
- },
13227
13419
  "restreamer.getExposedResources": {
13228
13420
  capName: "restreamer",
13229
13421
  capScope: "system",
@@ -13584,12 +13776,6 @@ Object.freeze({
13584
13776
  addonId: null,
13585
13777
  access: "view"
13586
13778
  },
13587
- "streamBroker.getBroker": {
13588
- capName: "stream-broker",
13589
- capScope: "system",
13590
- addonId: null,
13591
- access: "view"
13592
- },
13593
13779
  "streamBroker.getBrokerStats": {
13594
13780
  capName: "stream-broker",
13595
13781
  capScope: "system",
@@ -13662,6 +13848,18 @@ Object.freeze({
13662
13848
  addonId: null,
13663
13849
  access: "create"
13664
13850
  },
13851
+ "streamBroker.pullAudioChunks": {
13852
+ capName: "stream-broker",
13853
+ capScope: "system",
13854
+ addonId: null,
13855
+ access: "view"
13856
+ },
13857
+ "streamBroker.pullFrameHandles": {
13858
+ capName: "stream-broker",
13859
+ capScope: "system",
13860
+ addonId: null,
13861
+ access: "view"
13862
+ },
13665
13863
  "streamBroker.regenerateRtspToken": {
13666
13864
  capName: "stream-broker",
13667
13865
  capScope: "system",
@@ -13698,12 +13896,36 @@ Object.freeze({
13698
13896
  addonId: null,
13699
13897
  access: "create"
13700
13898
  },
13899
+ "streamBroker.subscribeAudioChunks": {
13900
+ capName: "stream-broker",
13901
+ capScope: "system",
13902
+ addonId: null,
13903
+ access: "create"
13904
+ },
13905
+ "streamBroker.subscribeFrames": {
13906
+ capName: "stream-broker",
13907
+ capScope: "system",
13908
+ addonId: null,
13909
+ access: "create"
13910
+ },
13701
13911
  "streamBroker.unassignProfile": {
13702
13912
  capName: "stream-broker",
13703
13913
  capScope: "system",
13704
13914
  addonId: null,
13705
13915
  access: "create"
13706
13916
  },
13917
+ "streamBroker.unsubscribeAudioChunks": {
13918
+ capName: "stream-broker",
13919
+ capScope: "system",
13920
+ addonId: null,
13921
+ access: "create"
13922
+ },
13923
+ "streamBroker.unsubscribeFrames": {
13924
+ capName: "stream-broker",
13925
+ capScope: "system",
13926
+ addonId: null,
13927
+ access: "create"
13928
+ },
13707
13929
  "streamingEngine.getStreamUrl": {
13708
13930
  capName: "streaming-engine",
13709
13931
  capScope: "system",
@@ -13728,6 +13950,24 @@ Object.freeze({
13728
13950
  addonId: null,
13729
13951
  access: "delete"
13730
13952
  },
13953
+ "streamParams.getConfigSchema": {
13954
+ capName: "stream-params",
13955
+ capScope: "device",
13956
+ addonId: null,
13957
+ access: "view"
13958
+ },
13959
+ "streamParams.getOptions": {
13960
+ capName: "stream-params",
13961
+ capScope: "device",
13962
+ addonId: null,
13963
+ access: "view"
13964
+ },
13965
+ "streamParams.setProfile": {
13966
+ capName: "stream-params",
13967
+ capScope: "device",
13968
+ addonId: null,
13969
+ access: "create"
13970
+ },
13731
13971
  "switch.setState": {
13732
13972
  capName: "switch",
13733
13973
  capScope: "device",
@@ -13782,24 +14022,6 @@ Object.freeze({
13782
14022
  addonId: null,
13783
14023
  access: "view"
13784
14024
  },
13785
- "turnOrchestrator.getAllServers": {
13786
- capName: "turn-orchestrator",
13787
- capScope: "system",
13788
- addonId: null,
13789
- access: "view"
13790
- },
13791
- "turnOrchestrator.listProviders": {
13792
- capName: "turn-orchestrator",
13793
- capScope: "system",
13794
- addonId: null,
13795
- access: "view"
13796
- },
13797
- "turnOrchestrator.setProviderEnabled": {
13798
- capName: "turn-orchestrator",
13799
- capScope: "system",
13800
- addonId: null,
13801
- access: "create"
13802
- },
13803
14025
  "turnProvider.getTurnServers": {
13804
14026
  capName: "turn-provider",
13805
14027
  capScope: "system",
@@ -13854,6 +14076,12 @@ Object.freeze({
13854
14076
  addonId: null,
13855
14077
  access: "view"
13856
14078
  },
14079
+ "userManagement.listOauthSessions": {
14080
+ capName: "user-management",
14081
+ capScope: "system",
14082
+ addonId: null,
14083
+ access: "view"
14084
+ },
13857
14085
  "userManagement.listScopedTokens": {
13858
14086
  capName: "user-management",
13859
14087
  capScope: "system",
@@ -13866,6 +14094,30 @@ Object.freeze({
13866
14094
  addonId: null,
13867
14095
  access: "view"
13868
14096
  },
14097
+ "userManagement.oauthExchangeCode": {
14098
+ capName: "user-management",
14099
+ capScope: "system",
14100
+ addonId: null,
14101
+ access: "view"
14102
+ },
14103
+ "userManagement.oauthIssueCode": {
14104
+ capName: "user-management",
14105
+ capScope: "system",
14106
+ addonId: null,
14107
+ access: "create"
14108
+ },
14109
+ "userManagement.oauthRefresh": {
14110
+ capName: "user-management",
14111
+ capScope: "system",
14112
+ addonId: null,
14113
+ access: "view"
14114
+ },
14115
+ "userManagement.oauthVerifyAccessToken": {
14116
+ capName: "user-management",
14117
+ capScope: "system",
14118
+ addonId: null,
14119
+ access: "view"
14120
+ },
13869
14121
  "userManagement.resetPassword": {
13870
14122
  capName: "user-management",
13871
14123
  capScope: "system",
@@ -13878,6 +14130,12 @@ Object.freeze({
13878
14130
  addonId: null,
13879
14131
  access: "delete"
13880
14132
  },
14133
+ "userManagement.revokeOauthSession": {
14134
+ capName: "user-management",
14135
+ capScope: "system",
14136
+ addonId: null,
14137
+ access: "delete"
14138
+ },
13881
14139
  "userManagement.revokeScopedToken": {
13882
14140
  capName: "user-management",
13883
14141
  capScope: "system",