@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.
@@ -4617,7 +4617,7 @@ function _instanceof(cls, params = {}) {
4617
4617
  return inst;
4618
4618
  }
4619
4619
  //#endregion
4620
- //#region ../types/dist/index-Ce7RZWP4.mjs
4620
+ //#region ../types/dist/index-CgPd35k5.mjs
4621
4621
  var MODEL_FORMATS = [
4622
4622
  "onnx",
4623
4623
  "coreml",
@@ -4692,6 +4692,12 @@ Object.fromEntries([
4692
4692
  icon: "video",
4693
4693
  order: 35
4694
4694
  },
4695
+ {
4696
+ id: "ptz",
4697
+ label: "PTZ",
4698
+ icon: "move",
4699
+ order: 40
4700
+ },
4695
4701
  {
4696
4702
  id: "pipeline",
4697
4703
  label: "Detection Pipeline",
@@ -4805,6 +4811,10 @@ function hydrateField(field, values) {
4805
4811
  };
4806
4812
  }
4807
4813
  const rawValue = storedValue !== void 0 ? storedValue : defaultValue !== void 0 ? defaultValue : null;
4814
+ if (field.type === "password") return {
4815
+ ...field,
4816
+ value: ""
4817
+ };
4808
4818
  const value = field.type === "textarea" && field.isJson && rawValue !== null && typeof rawValue === "object" ? JSON.stringify(rawValue, null, 2) : rawValue;
4809
4819
  return {
4810
4820
  ...field,
@@ -4883,7 +4893,19 @@ var DecoderSessionConfigSchema = object({
4883
4893
  * on every line so `grep tag=broker:5/high` filters one camera
4884
4894
  * profile cleanly.
4885
4895
  */
4886
- tag: string().optional()
4896
+ tag: string().optional(),
4897
+ /**
4898
+ * Where the session delivers decoded frames (Phase 5 / D9):
4899
+ *
4900
+ * - `'callback'` (default) — the legacy pixel path: decoded frames are
4901
+ * buffered as `DecodedFrame`s and drained via `pullFrames`.
4902
+ * - `'shm'` — the shared-memory frame plane: decoded frames are written
4903
+ * into an OS shared-memory ring and drained as zero-pixel
4904
+ * `FrameHandle`s via `pullHandles`. A session is one mode or the
4905
+ * other — `pullFrames` returns nothing for an `'shm'` session and
4906
+ * `pullHandles` returns nothing for a `'callback'` session.
4907
+ */
4908
+ frameSink: _enum(["callback", "shm"]).default("callback")
4887
4909
  });
4888
4910
  var YAMNET_TO_MACRO = {
4889
4911
  mapping: {
@@ -5536,6 +5558,63 @@ var DecodedFrameSchema = object({
5536
5558
  ]),
5537
5559
  timestamp: number()
5538
5560
  });
5561
+ var FrameHandleSchema = object({
5562
+ shmId: string(),
5563
+ slot: number().int().nonnegative(),
5564
+ seq: number().int().nonnegative(),
5565
+ width: number().int().positive(),
5566
+ height: number().int().positive(),
5567
+ format: _enum([
5568
+ "jpeg",
5569
+ "rgb",
5570
+ "bgr",
5571
+ "yuv420",
5572
+ "gray"
5573
+ ]),
5574
+ pts: number(),
5575
+ byteLength: number().int().nonnegative(),
5576
+ nodeId: string(),
5577
+ slotCount: number().int().positive()
5578
+ });
5579
+ var FrameHandleFormatSchema = _enum([
5580
+ "rgb",
5581
+ "bgr",
5582
+ "yuv420",
5583
+ "gray"
5584
+ ]);
5585
+ var SubscribeFramesInputSchema = object({
5586
+ brokerId: string(),
5587
+ format: FrameHandleFormatSchema,
5588
+ /**
5589
+ * Optional reader-side cadence hint in frames per second. The broker does
5590
+ * NOT throttle — latest-wins ring reads drop frames implicitly for a slow
5591
+ * consumer. The value is echoed back in `SubscribeFramesResult.maxFps` so
5592
+ * the consumer can pace its own `pullFrameHandles` polling.
5593
+ */
5594
+ maxFps: number().positive().optional(),
5595
+ /** Short caller-identity tag (`motion`, `detection`, …) for diagnostics. */
5596
+ tag: string().optional()
5597
+ });
5598
+ var SubscribeFramesResultSchema = object({
5599
+ /** Opaque id the consumer passes to `pullFrameHandles` / `unsubscribeFrames`. */
5600
+ subscriptionId: string(),
5601
+ /** Reader-side cadence hint (frames/s) — echoes `SubscribeFramesInput.maxFps`. */
5602
+ maxFps: number().nonnegative()
5603
+ });
5604
+ var DecodedAudioChunkSchema = object({
5605
+ data: _instanceof(Uint8Array),
5606
+ sampleRate: number().int().positive(),
5607
+ channels: number().int().positive(),
5608
+ timestamp: number()
5609
+ });
5610
+ var SubscribeAudioChunksInputSchema = object({
5611
+ brokerId: string(),
5612
+ /** Short caller-identity tag (`audio-analyzer`, …) for `listClients`. */
5613
+ tag: string().optional()
5614
+ });
5615
+ var SubscribeAudioChunksResultSchema = object({
5616
+ /** Opaque id passed to `pullAudioChunks` / `unsubscribeAudioChunks`. */
5617
+ subscriptionId: string() });
5539
5618
  var BrokerStatsSchema = object({
5540
5619
  status: _enum([
5541
5620
  "idle",
@@ -5737,7 +5816,13 @@ method(object({
5737
5816
  }), {
5738
5817
  kind: "mutation",
5739
5818
  auth: "admin"
5740
- }), method(object({ brokerId: string() }), custom()), method(object({
5819
+ }), method(SubscribeAudioChunksInputSchema, SubscribeAudioChunksResultSchema, { kind: "mutation" }), method(object({
5820
+ subscriptionId: string(),
5821
+ maxCount: number().int().positive().default(8)
5822
+ }), array(DecodedAudioChunkSchema).readonly()), method(object({ subscriptionId: string() }), object({ released: boolean() }), { kind: "mutation" }), method(SubscribeFramesInputSchema, SubscribeFramesResultSchema, { kind: "mutation" }), method(object({
5823
+ subscriptionId: string(),
5824
+ maxCount: number().int().positive().default(4)
5825
+ }), array(FrameHandleSchema).readonly()), method(object({ subscriptionId: string() }), object({ released: boolean() }), { kind: "mutation" }), method(object({
5741
5826
  brokerId: string(),
5742
5827
  seconds: number().min(0).max(30)
5743
5828
  }), _void(), {
@@ -6429,6 +6514,34 @@ DeviceType.Light, DeviceType.Siren, DeviceType.Switch, method(object({
6429
6514
  enabled: boolean(),
6430
6515
  lastChangedAt: number()
6431
6516
  });
6517
+ object({
6518
+ enabled: boolean(),
6519
+ sensitivity: number(),
6520
+ /** Row-major active-cell grid. Length = gridWidth*gridHeight (see getOptions). */
6521
+ cells: array(boolean()),
6522
+ lastFetchedAt: number()
6523
+ });
6524
+ var MotionZoneOptionsSchema = object({
6525
+ gridWidth: number(),
6526
+ gridHeight: number(),
6527
+ sensitivity: object({
6528
+ min: number(),
6529
+ max: number(),
6530
+ step: number()
6531
+ })
6532
+ });
6533
+ var MotionZonePatchSchema = object({
6534
+ enabled: boolean().optional(),
6535
+ sensitivity: number().optional(),
6536
+ cells: array(boolean()).optional()
6537
+ });
6538
+ DeviceType.Camera, method(object({ deviceId: number() }), MotionZoneOptionsSchema), method(object({
6539
+ deviceId: number(),
6540
+ patch: MotionZonePatchSchema
6541
+ }), _void(), {
6542
+ kind: "mutation",
6543
+ auth: "admin"
6544
+ });
6432
6545
  var PtzAutotrackSettingsSchema = object({
6433
6546
  targetType: string().describe("Vendor target string (people/vehicle/pet); empty = camera default"),
6434
6547
  stopDelaySeconds: number().int().min(0).max(300),
@@ -6470,6 +6583,85 @@ DeviceType.Camera, method(object({ deviceId: number() }), PtzAutotrackStatusSche
6470
6583
  deviceId: number(),
6471
6584
  status: PtzAutotrackStatusSchema
6472
6585
  });
6586
+ var StreamProfileSchema = _enum([
6587
+ "main",
6588
+ "sub",
6589
+ "ext"
6590
+ ]);
6591
+ var StreamProfileConfigSchema = object({
6592
+ width: number(),
6593
+ height: number(),
6594
+ codec: _enum(["h264", "h265"]),
6595
+ framerate: number(),
6596
+ bitrate: number(),
6597
+ bitrateMode: _enum(["vbr", "cbr"]).optional(),
6598
+ encoderProfile: _enum([
6599
+ "high",
6600
+ "main",
6601
+ "baseline"
6602
+ ]).optional(),
6603
+ gop: number().optional(),
6604
+ audio: boolean().optional()
6605
+ });
6606
+ object({
6607
+ /** Per-profile current config. A profile absent = the camera doesn't have it. */
6608
+ main: StreamProfileConfigSchema.optional(),
6609
+ sub: StreamProfileConfigSchema.optional(),
6610
+ ext: StreamProfileConfigSchema.optional(),
6611
+ lastFetchedAt: number()
6612
+ });
6613
+ var StreamProfileOptionsSchema = object({
6614
+ resolutions: array(object({
6615
+ width: number(),
6616
+ height: number()
6617
+ })),
6618
+ codecs: array(_enum(["h264", "h265"])),
6619
+ framerates: array(number()),
6620
+ /** Allowed bitrate values (kbps). Empty if the camera takes a free range. */
6621
+ bitrates: array(number()),
6622
+ /** Optional [min,max] kbps when the camera accepts a continuous range. */
6623
+ bitrateRange: tuple([number(), number()]).optional(),
6624
+ supportsBitrateMode: boolean(),
6625
+ supportsEncoderProfile: boolean(),
6626
+ supportsGop: boolean(),
6627
+ /** Allowed GOP / keyframe-interval range, in seconds — drives the
6628
+ * I-frame-interval selector. Absent when the camera advertises GOP
6629
+ * support but no concrete range (callers then fall back to a free
6630
+ * numeric input). `{ min, max, step }` per the getOptions convention. */
6631
+ gop: object({
6632
+ min: number(),
6633
+ max: number(),
6634
+ step: number()
6635
+ }).optional()
6636
+ });
6637
+ var StreamParamsOptionsSchema = object({
6638
+ main: StreamProfileOptionsSchema.optional(),
6639
+ sub: StreamProfileOptionsSchema.optional(),
6640
+ ext: StreamProfileOptionsSchema.optional()
6641
+ });
6642
+ var StreamProfilePatchSchema = object({
6643
+ width: number().optional(),
6644
+ height: number().optional(),
6645
+ codec: _enum(["h264", "h265"]).optional(),
6646
+ framerate: number().optional(),
6647
+ bitrate: number().optional(),
6648
+ bitrateMode: _enum(["vbr", "cbr"]).optional(),
6649
+ encoderProfile: _enum([
6650
+ "high",
6651
+ "main",
6652
+ "baseline"
6653
+ ]).optional(),
6654
+ gop: number().optional(),
6655
+ audio: boolean().optional()
6656
+ });
6657
+ DeviceType.Camera, method(object({ deviceId: number() }), StreamParamsOptionsSchema), method(object({
6658
+ deviceId: number(),
6659
+ profile: StreamProfileSchema,
6660
+ patch: StreamProfilePatchSchema
6661
+ }), _void(), {
6662
+ kind: "mutation",
6663
+ auth: "admin"
6664
+ }), method(object({ deviceId: number() }), unknown().nullable());
6473
6665
  object({
6474
6666
  on: boolean(),
6475
6667
  /** Ms epoch of the last state change. Useful for UI "X minutes ago". */
@@ -7109,6 +7301,85 @@ method(LogEntrySchema, _void(), { kind: "mutation" }), method(object({
7109
7301
  var StaticDirOutputSchema = object({ staticDir: string() });
7110
7302
  var VersionOutputSchema = object({ version: string() });
7111
7303
  method(_void(), StaticDirOutputSchema), method(_void(), VersionOutputSchema);
7304
+ var MethodAccessSchema = _enum([
7305
+ "view",
7306
+ "create",
7307
+ "delete"
7308
+ ]);
7309
+ var AllowedProviderSchema = union([literal("*"), array(string())]);
7310
+ var AllowedDevicesSchema = record(string(), union([literal("*"), array(string())]));
7311
+ var CapScopeSchema = _enum(["device", "system"]);
7312
+ var TokenScopeSchema = discriminatedUnion("type", [
7313
+ object({
7314
+ type: literal("category"),
7315
+ target: CapScopeSchema,
7316
+ access: array(MethodAccessSchema).min(1)
7317
+ }),
7318
+ object({
7319
+ type: literal("capability"),
7320
+ target: string(),
7321
+ access: array(MethodAccessSchema).min(1)
7322
+ }),
7323
+ object({
7324
+ type: literal("addon"),
7325
+ target: string(),
7326
+ access: array(MethodAccessSchema).min(1)
7327
+ }),
7328
+ object({
7329
+ type: literal("device"),
7330
+ /**
7331
+ * One or more deviceIds (serialised as strings for wire-format
7332
+ * consistency with the rest of the union). Matcher accepts if
7333
+ * `input.deviceId` ∈ `targets`. Array shape avoids the row-explosion
7334
+ * of one scope-per-device when granting access to a set of cameras.
7335
+ */
7336
+ targets: array(string()).min(1),
7337
+ access: array(MethodAccessSchema).min(1)
7338
+ })
7339
+ ]);
7340
+ object({
7341
+ id: string(),
7342
+ username: string(),
7343
+ passwordHash: string(),
7344
+ /**
7345
+ * Admin bypass. When true, the middleware skips the scope-access
7346
+ * check entirely. There is no other axis of privilege; the legacy
7347
+ * role enum collapsed onto this boolean in v2.
7348
+ */
7349
+ isAdmin: boolean().default(false),
7350
+ allowedProviders: AllowedProviderSchema,
7351
+ allowedDevices: AllowedDevicesSchema,
7352
+ /**
7353
+ * Scopes granted to this user. Admins bypass; their `scopes` is
7354
+ * ignored. Non-admins without scopes are locked out of every
7355
+ * protected call.
7356
+ */
7357
+ scopes: array(TokenScopeSchema).default([]),
7358
+ createdAt: number(),
7359
+ updatedAt: number()
7360
+ });
7361
+ object({
7362
+ id: string(),
7363
+ label: string(),
7364
+ isAdmin: boolean().default(false),
7365
+ allowedProviders: AllowedProviderSchema,
7366
+ allowedDevices: AllowedDevicesSchema,
7367
+ tokenHash: string(),
7368
+ tokenPrefix: string(),
7369
+ createdAt: number(),
7370
+ lastUsedAt: number().optional()
7371
+ });
7372
+ object({
7373
+ id: string(),
7374
+ userId: string(),
7375
+ name: string(),
7376
+ tokenHash: string(),
7377
+ tokenPrefix: string(),
7378
+ scopes: array(TokenScopeSchema),
7379
+ expiresAt: number().nullish(),
7380
+ lastUsedAt: number().nullish(),
7381
+ createdAt: number()
7382
+ });
7112
7383
  var SsoBridgeClaimsSchema = object({
7113
7384
  userId: string(),
7114
7385
  username: string(),
@@ -7124,12 +7395,36 @@ var SsoBridgeClaimsSchema = object({
7124
7395
  * JWT WITHOUT verifying the signature — the hub re-verifies on every
7125
7396
  * inbound call so trust still rests with the signing hub.
7126
7397
  */
7127
- hubUrl: string().optional()
7398
+ hubUrl: string().optional(),
7399
+ /** Permission scopes baked into the token. Set by the OAuth
7400
+ * account-linking grant; absent on ordinary SSO-login tokens. */
7401
+ scopes: array(TokenScopeSchema).optional(),
7402
+ /** OAuth authorization-code binding — set only on `oauth-code` tokens. */
7403
+ redirectUri: string().optional(),
7404
+ integrationId: string().optional(),
7405
+ /** JWT ID — unique per issued code; consumed-set enforces single-use. */
7406
+ jti: string().optional(),
7407
+ /** OAuth session registry id — set on `oauth-access`/`oauth-refresh`
7408
+ * tokens so the verify path can check the session is not revoked. */
7409
+ sessionId: string().optional()
7128
7410
  });
7129
7411
  method(object({
7130
7412
  claims: SsoBridgeClaimsSchema,
7131
7413
  ttlSec: number().int().positive().optional()
7132
7414
  }), object({ token: string() })), method(object({ token: string() }), SsoBridgeClaimsSchema.nullable());
7415
+ var OauthIntegrationDescriptorSchema = object({
7416
+ /** Stable id used as the `integration=` query param, e.g. 'export-alexa'. */
7417
+ integrationId: string(),
7418
+ /** Human label rendered on the consent page. */
7419
+ displayName: string(),
7420
+ /** Scopes baked into every token issued for this integration. */
7421
+ requestedScopes: array(TokenScopeSchema),
7422
+ /** Allowed redirect_uri prefixes. /api/oauth2/authorize rejects any
7423
+ * redirect_uri that does not start with one of these. Required —
7424
+ * an empty list means the integration can never complete linking. */
7425
+ allowedRedirectPrefixes: array(string()).min(1)
7426
+ });
7427
+ method(_void(), OauthIntegrationDescriptorSchema);
7133
7428
  var PasskeySummarySchema = object({
7134
7429
  credentialId: string(),
7135
7430
  label: string(),
@@ -7375,22 +7670,29 @@ var WidgetSizeEnum = _enum([
7375
7670
  "lg",
7376
7671
  "xl"
7377
7672
  ]);
7673
+ var WidgetRemoteSchema = object({
7674
+ remoteName: string(),
7675
+ exposedModule: string(),
7676
+ componentKey: string().optional()
7677
+ });
7378
7678
  var WidgetMetadataSchema = object({
7379
- /** Stable id within the addon kebab-case. */
7380
- stableId: string(),
7679
+ /** Primary host tab `'dashboard'`, `'device-tab'`, or a device-detail tab id. */
7680
+ tab: string(),
7681
+ /** Optional sub-tab within `tab`. */
7682
+ subTab: string().optional(),
7381
7683
  /** Operator-facing label. */
7382
7684
  label: string(),
7685
+ /** Ordering within `(tab, subTab)`, ascending. */
7686
+ order: number().optional(),
7687
+ /** Always `'remote'` — a widget is a Module Federation remote. */
7688
+ kind: literal("remote"),
7689
+ /** MF remote descriptor. */
7690
+ remote: WidgetRemoteSchema,
7691
+ /** Stable id within the addon — kebab-case. Equals `remote.componentKey`. */
7692
+ stableId: string(),
7383
7693
  description: string().optional(),
7384
7694
  icon: string().optional(),
7385
7695
  /**
7386
- * Module Federation remote name — must match the `name` field on the
7387
- * widget addon's `federation()` plugin config. Used by the host's
7388
- * `<WidgetRegistryProvider>` to call `loadRemote('<remoteName>/widgets')`.
7389
- * Conventionally `addon_<addonid>_widgets` (snake_case; MF names
7390
- * cannot contain hyphens).
7391
- */
7392
- remoteName: string(),
7393
- /**
7394
7696
  * Bundle filename inside the addon's `dist/` dir served at
7395
7697
  * `/api/addon-widgets/<addonId>/<bundle>`. With Module Federation
7396
7698
  * this is always `'remoteEntry.js'` — the value is kept on the
@@ -7398,9 +7700,9 @@ var WidgetMetadataSchema = object({
7398
7700
  * cache-buster URL without a separate filesystem stat.
7399
7701
  */
7400
7702
  bundle: string(),
7401
- /** Where the widget makes sense to render. */
7703
+ /** Every host the widget supports. The picker filters on this set. */
7402
7704
  hosts: array(WidgetHostEnum).readonly(),
7403
- /** Required props the host must supply. Validated at <WidgetSlot> mount. */
7705
+ /** Required props the host must supply. Validated at `<WidgetSlot>` mount. */
7404
7706
  requires: object({
7405
7707
  deviceContext: boolean().default(false),
7406
7708
  integrationContext: boolean().default(false)
@@ -7464,6 +7766,16 @@ var InvokeReplyEnvelopeSchema = object({
7464
7766
  contentType: string().optional()
7465
7767
  });
7466
7768
  method(_void(), array(AddonHttpRouteSchema)), method(InvokeRequestSchema, InvokeReplyEnvelopeSchema, { kind: "mutation" });
7769
+ var ShmRingStatsSchema = object({
7770
+ sessionId: string(),
7771
+ slotCount: number().int(),
7772
+ slotByteLength: number().int(),
7773
+ segmentBytes: number().int(),
7774
+ budgetMb: number().int(),
7775
+ framesWritten: number().int(),
7776
+ getFrameHits: number().int(),
7777
+ getFrameMisses: number().int()
7778
+ });
7467
7779
  method(object({ codec: string() }), boolean()), method(_void(), object({
7468
7780
  id: string(),
7469
7781
  name: string(),
@@ -7482,6 +7794,9 @@ method(object({ codec: string() }), boolean()), method(_void(), object({
7482
7794
  sessionId: string(),
7483
7795
  maxCount: number().default(1)
7484
7796
  }), array(DecodedFrameSchema)), method(object({
7797
+ sessionId: string(),
7798
+ maxCount: number().default(1)
7799
+ }), array(FrameHandleSchema)), method(object({ handle: FrameHandleSchema }), DecodedFrameSchema.nullable()), method(object({ sessionId: string() }), ShmRingStatsSchema.nullable()), method(object({
7485
7800
  sessionId: string(),
7486
7801
  config: DecoderSessionConfigSchema.partial()
7487
7802
  }), _void()), method(object({ sessionId: string() }), DecoderStatsSchema), method(_void(), array(object({
@@ -8226,42 +8541,6 @@ method(object({
8226
8541
  username: string(),
8227
8542
  password: string()
8228
8543
  }), AuthResultSchema.nullable(), { kind: "mutation" }), method(object({ state: string() }), string()), method(record(string(), string()), AuthResultSchema, { kind: "mutation" }), method(object({ token: string() }), AuthResultSchema.nullable());
8229
- var AuthProviderInfoSchema = object({
8230
- /** Stable id matching the addon id (used for `getLoginUrl({addonId,…})`). */
8231
- addonId: string(),
8232
- /**
8233
- * Per-instance id when one addon registers multiple "logical"
8234
- * providers (e.g. OIDC with Google + Microsoft + custom). The login
8235
- * URL becomes `/addon/${addonId}/${instanceId}/start` — handler reads
8236
- * `:instanceId` from the route. Empty/unset means the addon is a
8237
- * single-instance provider; the URL is `/addon/${addonId}/start`.
8238
- */
8239
- instanceId: string().optional(),
8240
- /** Display label shown on the login button + admin row. */
8241
- displayName: string(),
8242
- /** Optional iconography hint (lucide-react icon name OR emoji). */
8243
- icon: string().optional(),
8244
- /** When true, the provider exposes a redirect-based login flow
8245
- * (`getLoginUrl` returns a URL the browser navigates to). */
8246
- hasRedirectFlow: boolean(),
8247
- /** When true, the provider exposes a credential-form login flow
8248
- * (`validateCredentials` accepts username + password). */
8249
- hasCredentialFlow: boolean(),
8250
- /** Provider kind, drives admin-UI hint dispatch (oidc / saml / totp / …). */
8251
- kind: string().optional(),
8252
- /** Operator-facing status string (e.g. "Connected to https://login.acme.com"). */
8253
- status: string().optional(),
8254
- /** When false, the provider is registered but disabled by config; the
8255
- * UI surfaces it as inactive without enumerating it for login. */
8256
- enabled: boolean()
8257
- });
8258
- method(_void(), array(AuthProviderInfoSchema).readonly()), method(object({
8259
- addonId: string(),
8260
- enabled: boolean()
8261
- }), object({ success: literal(true) }), {
8262
- kind: "mutation",
8263
- auth: "admin"
8264
- });
8265
8544
  var NetworkEndpointSchema = object({
8266
8545
  url: string(),
8267
8546
  hostname: string(),
@@ -8290,7 +8569,6 @@ var networkAccessCapability = {
8290
8569
  name: "network-access",
8291
8570
  scope: "system",
8292
8571
  mode: "collection",
8293
- internal: true,
8294
8572
  providerKind: "ingress",
8295
8573
  methods: {
8296
8574
  start: method(_void(), NetworkEndpointSchema, { kind: "mutation" }),
@@ -8298,40 +8576,13 @@ var networkAccessCapability = {
8298
8576
  getEndpoint: method(_void(), NetworkEndpointSchema.nullable()),
8299
8577
  getStatus: method(_void(), NetworkAccessStatusSchema),
8300
8578
  /**
8301
- * Enumerate every active ingress entry. Default implementation (when
8302
- * the provider omits this method) is derived from `getEndpoint()` —
8303
- * see the remote-access orchestrator for the fallback path.
8579
+ * Enumerate every active ingress entry. Providers that expose only a
8580
+ * single endpoint may omit this method; callers fall back to
8581
+ * `getEndpoint()` in that case.
8304
8582
  */
8305
8583
  listEndpoints: method(_void(), array(NetworkEndpointEntrySchema).readonly())
8306
8584
  }
8307
8585
  };
8308
- var RemoteAccessEndpointSchema = object({
8309
- url: string(),
8310
- hostname: string(),
8311
- port: number(),
8312
- protocol: _enum(["http", "https"])
8313
- });
8314
- var RemoteAccessProviderInfoSchema = object({
8315
- /** Stable id matching the addon id. */
8316
- addonId: string(),
8317
- /** Display label shown on the admin row — sourced from the addon manifest. */
8318
- displayName: string(),
8319
- /** When false, the provider is registered but disabled. */
8320
- enabled: boolean(),
8321
- /** True when the underlying tunnel/connection is up. */
8322
- connected: boolean(),
8323
- /** Public-facing endpoint, when connected. Null otherwise. */
8324
- endpoint: RemoteAccessEndpointSchema.nullable(),
8325
- /** Last error message (when connected=false), if available. */
8326
- error: string().optional()
8327
- });
8328
- method(_void(), array(RemoteAccessProviderInfoSchema).readonly()), method(object({ addonId: string() }), RemoteAccessEndpointSchema, {
8329
- kind: "mutation",
8330
- auth: "admin"
8331
- }), method(object({ addonId: string() }), object({ success: literal(true) }), {
8332
- kind: "mutation",
8333
- auth: "admin"
8334
- });
8335
8586
  var TurnServerSchema = object({
8336
8587
  /** Single URL or list of URLs (e.g. "turn:turn.example.com:3478?transport=udp"). */
8337
8588
  urls: union([string(), array(string())]),
@@ -8339,33 +8590,6 @@ var TurnServerSchema = object({
8339
8590
  credential: string().optional()
8340
8591
  });
8341
8592
  method(_void(), array(TurnServerSchema).readonly());
8342
- var TurnProviderInfoSchema = object({
8343
- /** Stable id matching the addon id. */
8344
- addonId: string(),
8345
- /** Display label shown on the admin row — sourced from the addon manifest. */
8346
- displayName: string(),
8347
- /** When false, the provider is registered but disabled. */
8348
- enabled: boolean(),
8349
- /** Number of servers this provider is currently exposing. */
8350
- serverCount: number(),
8351
- /**
8352
- * Flat list of every TURN/STUN URL this provider currently exposes.
8353
- * One row per URL (multi-URL ICE server entries are flattened). The
8354
- * admin UI shows this in a compact per-provider list so operators
8355
- * can verify what's actually being negotiated without having to dig
8356
- * into the combined `getAllServers` output.
8357
- */
8358
- urls: array(string()).readonly(),
8359
- /** Last fetch error (when serverCount=0 due to API failure), if any. */
8360
- error: string().optional()
8361
- });
8362
- method(_void(), array(TurnProviderInfoSchema).readonly()), method(_void(), array(TurnServerSchema).readonly()), method(object({
8363
- addonId: string(),
8364
- enabled: boolean()
8365
- }), object({ success: literal(true) }), {
8366
- kind: "mutation",
8367
- auth: "admin"
8368
- });
8369
8593
  var SnapshotImageSchema = object({
8370
8594
  base64: string(),
8371
8595
  contentType: string()
@@ -8968,10 +9192,38 @@ var PtzMoveCommandSchema = object({
8968
9192
  zoom: number().optional(),
8969
9193
  speed: number().optional()
8970
9194
  });
9195
+ PtzPositionSchema.extend({ autofocus: boolean() });
9196
+ var PtzOptionsSchema = object({
9197
+ hasPan: boolean(),
9198
+ hasTilt: boolean(),
9199
+ hasZoom: boolean(),
9200
+ supportsPresets: boolean(),
9201
+ /** Max number of named presets the camera supports, when known. */
9202
+ maxPresets: number().optional(),
9203
+ /** Whether the camera exposes a controllable autofocus toggle
9204
+ * (boolean `hasX` per the getOptions availability convention). */
9205
+ hasAutofocus: boolean()
9206
+ });
8971
9207
  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({
8972
9208
  deviceId: number(),
8973
9209
  presetId: string()
8974
- }), _void(), { kind: "mutation" }), method(object({ deviceId: number() }), _void(), { kind: "mutation" }), method(object({ deviceId: number() }), PtzPositionSchema);
9210
+ }), _void(), { kind: "mutation" }), method(object({
9211
+ deviceId: number(),
9212
+ presetId: string(),
9213
+ name: string()
9214
+ }), _void(), {
9215
+ kind: "mutation",
9216
+ auth: "admin"
9217
+ }), method(object({
9218
+ deviceId: number(),
9219
+ presetId: string()
9220
+ }), _void(), {
9221
+ kind: "mutation",
9222
+ auth: "admin"
9223
+ }), method(object({ deviceId: number() }), PtzOptionsSchema), method(object({ deviceId: number() }), _void(), { kind: "mutation" }), method(object({ deviceId: number() }), PtzPositionSchema), method(object({
9224
+ deviceId: number(),
9225
+ enabled: boolean()
9226
+ }), _void(), { kind: "mutation" });
8975
9227
  var EventItemSchema = object({
8976
9228
  id: string(),
8977
9229
  type: string(),
@@ -9459,7 +9711,7 @@ method(_void(), ListResultSchema), method(_void(), PreferredSchema), method(obje
9459
9711
  * tunnel always emits `https://` regardless. */
9460
9712
  scheme: _enum(["http", "https"]).optional()
9461
9713
  }), GetConnectionEndpointsResultSchema), method(_void(), AllowedAddressesSchema), method(AllowedAddressesSchema, object({ success: literal(true) }), { kind: "mutation" }), method(_void(), AllowedAddressesSchema, { kind: "mutation" });
9462
- var MeshEndpointSchema$1 = object({
9714
+ var MeshEndpointSchema = object({
9463
9715
  /** Stable identifier within the provider (e.g. `mesh-ipv4`, `magicdns`, `funnel`). */
9464
9716
  id: string(),
9465
9717
  /** Operator-facing label (e.g. "Mesh IPv4", "MagicDNS"). */
@@ -9536,7 +9788,7 @@ var MeshStatusSchema = object({
9536
9788
  /** Number of peers visible to this host (excluding self). */
9537
9789
  peerCount: number(),
9538
9790
  /** Every endpoint this provider exposes for the current host. */
9539
- endpoints: array(MeshEndpointSchema$1).readonly(),
9791
+ endpoints: array(MeshEndpointSchema).readonly(),
9540
9792
  /** Last error from the daemon, when not joined. */
9541
9793
  error: string().optional(),
9542
9794
  /**
@@ -9611,131 +9863,7 @@ authKey: string().optional() }), object({
9611
9863
  /** Human-readable error when `ok: false`. */
9612
9864
  error: string().optional()
9613
9865
  }), { kind: "mutation" });
9614
- var MeshEndpointSchema = object({
9615
- id: string(),
9616
- label: string(),
9617
- scope: _enum(["mesh", "public"]),
9618
- url: string(),
9619
- hostname: string(),
9620
- port: number(),
9621
- protocol: _enum(["http", "https"])
9622
- });
9623
- var MeshProviderInfoSchema = object({
9624
- /** Stable id matching the addon id. */
9625
- addonId: string(),
9626
- /** Display label shown on the admin row — sourced from the addon manifest. */
9627
- displayName: string(),
9628
- /** True when the host is joined to this provider's mesh. */
9629
- joined: boolean(),
9630
- /** Local mesh IP (empty when not joined). */
9631
- meshIp: string(),
9632
- /** MagicDNS / mesh hostname (empty when not configured). */
9633
- magicDnsHostname: string(),
9634
- /** Peer count (excluding self). */
9635
- peerCount: number(),
9636
- /** Active endpoints (mesh IP + MagicDNS + optional public Funnel). */
9637
- endpoints: array(MeshEndpointSchema).readonly(),
9638
- /** Last error reported by the provider. */
9639
- error: string().optional(),
9640
- /** Tenant / tailnet / network display name. Empty pre-join. */
9641
- tenantName: string(),
9642
- /** Mesh DNS suffix (e.g. tailXXXX.ts.net). Empty when not configured. */
9643
- magicDnsSuffix: string(),
9644
- /** Authenticated user / account login. Null for token-only providers. */
9645
- userLogin: string().nullable(),
9646
- /** Provider control-plane URL. */
9647
- controlPlaneUrl: string(),
9648
- /** Machine-key expiry (epoch ms). Null when keys don't rotate. */
9649
- keyExpiry: number().nullable()
9650
- });
9651
- method(_void(), array(MeshProviderInfoSchema).readonly()), method(object({
9652
- addonId: string(),
9653
- authKey: string().min(8),
9654
- hostname: string().optional()
9655
- }), object({ joined: literal(true) }), { kind: "mutation" }), method(object({ addonId: string() }), object({ success: literal(true) }), { kind: "mutation" }), method(object({
9656
- addonId: string(),
9657
- hostname: string().optional()
9658
- }), object({ loginUrl: string() }), { kind: "mutation" }), method(object({ addonId: string() }), object({ loggedOut: literal(true) }), { kind: "mutation" }), method(object({ addonId: string() }), object({ peers: array(MeshPeerSchema).readonly() }));
9659
- var MethodAccessSchema = _enum([
9660
- "view",
9661
- "create",
9662
- "delete"
9663
- ]);
9664
- var AllowedProviderSchema = union([literal("*"), array(string())]);
9665
- var AllowedDevicesSchema = record(string(), union([literal("*"), array(string())]));
9666
- var CapScopeSchema = _enum(["device", "system"]);
9667
- var TokenScopeSchema = discriminatedUnion("type", [
9668
- object({
9669
- type: literal("category"),
9670
- target: CapScopeSchema,
9671
- access: array(MethodAccessSchema).min(1)
9672
- }),
9673
- object({
9674
- type: literal("capability"),
9675
- target: string(),
9676
- access: array(MethodAccessSchema).min(1)
9677
- }),
9678
- object({
9679
- type: literal("addon"),
9680
- target: string(),
9681
- access: array(MethodAccessSchema).min(1)
9682
- }),
9683
- object({
9684
- type: literal("device"),
9685
- /**
9686
- * One or more deviceIds (serialised as strings for wire-format
9687
- * consistency with the rest of the union). Matcher accepts if
9688
- * `input.deviceId` ∈ `targets`. Array shape avoids the row-explosion
9689
- * of one scope-per-device when granting access to a set of cameras.
9690
- */
9691
- targets: array(string()).min(1),
9692
- access: array(MethodAccessSchema).min(1)
9693
- })
9694
- ]);
9695
- object({
9696
- id: string(),
9697
- username: string(),
9698
- passwordHash: string(),
9699
- /**
9700
- * Admin bypass. When true, the middleware skips the scope-access
9701
- * check entirely. There is no other axis of privilege; the legacy
9702
- * role enum collapsed onto this boolean in v2.
9703
- */
9704
- isAdmin: boolean().default(false),
9705
- allowedProviders: AllowedProviderSchema,
9706
- allowedDevices: AllowedDevicesSchema,
9707
- /**
9708
- * Scopes granted to this user. Admins bypass; their `scopes` is
9709
- * ignored. Non-admins without scopes are locked out of every
9710
- * protected call.
9711
- */
9712
- scopes: array(TokenScopeSchema).default([]),
9713
- createdAt: number(),
9714
- updatedAt: number()
9715
- });
9716
- object({
9717
- id: string(),
9718
- label: string(),
9719
- isAdmin: boolean().default(false),
9720
- allowedProviders: AllowedProviderSchema,
9721
- allowedDevices: AllowedDevicesSchema,
9722
- tokenHash: string(),
9723
- tokenPrefix: string(),
9724
- createdAt: number(),
9725
- lastUsedAt: number().optional()
9726
- });
9727
- object({
9728
- id: string(),
9729
- userId: string(),
9730
- name: string(),
9731
- tokenHash: string(),
9732
- tokenPrefix: string(),
9733
- scopes: array(TokenScopeSchema),
9734
- expiresAt: number().nullish(),
9735
- lastUsedAt: number().nullish(),
9736
- createdAt: number()
9737
- });
9738
- var UserSummarySchema = object({
9866
+ var UserSummarySchema = object({
9739
9867
  id: string(),
9740
9868
  username: string(),
9741
9869
  isAdmin: boolean().default(false),
@@ -9807,6 +9935,16 @@ var CreateScopedTokenResultSchema = object({
9807
9935
  token: string(),
9808
9936
  record: ScopedTokenSummarySchema
9809
9937
  });
9938
+ var OauthSessionSummarySchema = object({
9939
+ id: string(),
9940
+ userId: string(),
9941
+ username: string(),
9942
+ integrationId: string(),
9943
+ scopes: array(TokenScopeSchema),
9944
+ createdAt: number(),
9945
+ lastUsedAt: number(),
9946
+ revokedAt: number().nullable()
9947
+ });
9810
9948
  var TotpSetupResultSchema = object({
9811
9949
  secret: string(),
9812
9950
  otpauthUrl: string()
@@ -9889,6 +10027,41 @@ method(_void(), array(UserSummarySchema), { auth: "admin" }), method(CreateUserI
9889
10027
  }), object({ valid: boolean() }), {
9890
10028
  kind: "mutation",
9891
10029
  access: "view"
10030
+ }), method(object({
10031
+ integrationId: string(),
10032
+ userId: string(),
10033
+ username: string(),
10034
+ scopes: array(TokenScopeSchema),
10035
+ redirectUri: string(),
10036
+ hubUrl: string()
10037
+ }), object({ code: string() }), {
10038
+ kind: "mutation",
10039
+ access: "create"
10040
+ }), method(object({
10041
+ code: string(),
10042
+ redirectUri: string()
10043
+ }), object({
10044
+ accessToken: string(),
10045
+ refreshToken: string(),
10046
+ expiresIn: number()
10047
+ }).nullable(), {
10048
+ kind: "mutation",
10049
+ access: "view"
10050
+ }), method(object({ refreshToken: string() }), object({
10051
+ accessToken: string(),
10052
+ refreshToken: string(),
10053
+ expiresIn: number()
10054
+ }).nullable(), {
10055
+ kind: "mutation",
10056
+ access: "view"
10057
+ }), method(object({ token: string() }), object({
10058
+ userId: string(),
10059
+ username: string(),
10060
+ scopes: array(TokenScopeSchema)
10061
+ }).nullable(), { access: "view" }), method(_void(), array(OauthSessionSummarySchema), { auth: "admin" }), method(object({ id: string() }), object({ success: boolean() }), {
10062
+ kind: "mutation",
10063
+ auth: "admin",
10064
+ access: "delete"
9892
10065
  });
9893
10066
  var FeatureManifestSchema = object({
9894
10067
  streaming: boolean(),
@@ -10057,7 +10230,13 @@ method(_void(), array(TopologyNodeSchema).readonly(), { auth: "admin" }), method
10057
10230
  }), RenameNodeResultSchema, {
10058
10231
  kind: "mutation",
10059
10232
  auth: "admin"
10060
- }), method(_void(), record(string(), ClusterAddonStatusEntrySchema), { auth: "admin" }), method(object({ nodeId: string() }), array(NodeAddonEntrySchema).readonly(), { auth: "admin" }), method(object({
10233
+ }), method(_void(), record(string(), ClusterAddonStatusEntrySchema), { auth: "admin" }), method(object({ windowSeconds: number().int().positive().max(300).default(60) }), array(object({
10234
+ callerAddonId: string(),
10235
+ providerAddonId: string(),
10236
+ capName: string(),
10237
+ callsPerMin: number(),
10238
+ lastCallAtMs: number()
10239
+ })).readonly(), { auth: "admin" }), method(object({ nodeId: string() }), array(NodeAddonEntrySchema).readonly(), { auth: "admin" }), method(object({
10061
10240
  nodeId: string(),
10062
10241
  level: string()
10063
10242
  }), SuccessSchema, {
@@ -10345,6 +10524,13 @@ method(_void(), array(AddonListItemSchema).readonly()), method(object({
10345
10524
  mode: _enum(["singleton", "collection"]),
10346
10525
  isActive: boolean()
10347
10526
  })).readonly()), method(object({
10527
+ capName: string().min(1),
10528
+ addonId: string().min(1),
10529
+ enabled: boolean()
10530
+ }), object({ success: literal(true) }), {
10531
+ kind: "mutation",
10532
+ auth: "admin"
10533
+ }), method(object({
10348
10534
  packageName: string().min(1),
10349
10535
  version: string().optional()
10350
10536
  }), UpdateFrameworkPackageResultSchema, {
@@ -11030,6 +11216,12 @@ Object.freeze({
11030
11216
  addonId: null,
11031
11217
  access: "create"
11032
11218
  },
11219
+ "addons.setCapabilityProviderEnabled": {
11220
+ capName: "addons",
11221
+ capScope: "system",
11222
+ addonId: null,
11223
+ access: "create"
11224
+ },
11033
11225
  "addons.uninstallPackage": {
11034
11226
  capName: "addons",
11035
11227
  capScope: "system",
@@ -11282,18 +11474,6 @@ Object.freeze({
11282
11474
  addonId: null,
11283
11475
  access: "view"
11284
11476
  },
11285
- "authentication.listProviders": {
11286
- capName: "authentication",
11287
- capScope: "system",
11288
- addonId: null,
11289
- access: "view"
11290
- },
11291
- "authentication.setProviderEnabled": {
11292
- capName: "authentication",
11293
- capScope: "system",
11294
- addonId: null,
11295
- access: "create"
11296
- },
11297
11477
  "authProvider.getLoginUrl": {
11298
11478
  capName: "auth-provider",
11299
11479
  capScope: "system",
@@ -11420,12 +11600,24 @@ Object.freeze({
11420
11600
  addonId: null,
11421
11601
  access: "delete"
11422
11602
  },
11603
+ "decoder.getFrame": {
11604
+ capName: "decoder",
11605
+ capScope: "system",
11606
+ addonId: null,
11607
+ access: "view"
11608
+ },
11423
11609
  "decoder.getInfo": {
11424
11610
  capName: "decoder",
11425
11611
  capScope: "system",
11426
11612
  addonId: null,
11427
11613
  access: "view"
11428
11614
  },
11615
+ "decoder.getShmStats": {
11616
+ capName: "decoder",
11617
+ capScope: "system",
11618
+ addonId: null,
11619
+ access: "view"
11620
+ },
11429
11621
  "decoder.getStats": {
11430
11622
  capName: "decoder",
11431
11623
  capScope: "system",
@@ -11450,6 +11642,12 @@ Object.freeze({
11450
11642
  addonId: null,
11451
11643
  access: "view"
11452
11644
  },
11645
+ "decoder.pullHandles": {
11646
+ capName: "decoder",
11647
+ capScope: "system",
11648
+ addonId: null,
11649
+ access: "view"
11650
+ },
11453
11651
  "decoder.pushPacket": {
11454
11652
  capName: "decoder",
11455
11653
  capScope: "system",
@@ -12140,42 +12338,6 @@ Object.freeze({
12140
12338
  addonId: null,
12141
12339
  access: "create"
12142
12340
  },
12143
- "meshOrchestrator.joinProvider": {
12144
- capName: "mesh-orchestrator",
12145
- capScope: "system",
12146
- addonId: null,
12147
- access: "create"
12148
- },
12149
- "meshOrchestrator.leaveProvider": {
12150
- capName: "mesh-orchestrator",
12151
- capScope: "system",
12152
- addonId: null,
12153
- access: "create"
12154
- },
12155
- "meshOrchestrator.listProviderPeers": {
12156
- capName: "mesh-orchestrator",
12157
- capScope: "system",
12158
- addonId: null,
12159
- access: "view"
12160
- },
12161
- "meshOrchestrator.listProviders": {
12162
- capName: "mesh-orchestrator",
12163
- capScope: "system",
12164
- addonId: null,
12165
- access: "view"
12166
- },
12167
- "meshOrchestrator.logoutProvider": {
12168
- capName: "mesh-orchestrator",
12169
- capScope: "system",
12170
- addonId: null,
12171
- access: "create"
12172
- },
12173
- "meshOrchestrator.startLoginProvider": {
12174
- capName: "mesh-orchestrator",
12175
- capScope: "system",
12176
- addonId: null,
12177
- access: "create"
12178
- },
12179
12341
  "metricsProvider.collectSnapshot": {
12180
12342
  capName: "metrics-provider",
12181
12343
  capScope: "system",
@@ -12272,6 +12434,18 @@ Object.freeze({
12272
12434
  addonId: null,
12273
12435
  access: "create"
12274
12436
  },
12437
+ "motionZones.getOptions": {
12438
+ capName: "motion-zones",
12439
+ capScope: "device",
12440
+ addonId: null,
12441
+ access: "view"
12442
+ },
12443
+ "motionZones.setZone": {
12444
+ capName: "motion-zones",
12445
+ capScope: "device",
12446
+ addonId: null,
12447
+ access: "create"
12448
+ },
12275
12449
  "mqttBroker.addBroker": {
12276
12450
  capName: "mqtt-broker",
12277
12451
  capScope: "system",
@@ -12386,6 +12560,12 @@ Object.freeze({
12386
12560
  addonId: null,
12387
12561
  access: "create"
12388
12562
  },
12563
+ "nodes.getCapUsageGraph": {
12564
+ capName: "nodes",
12565
+ capScope: "system",
12566
+ addonId: null,
12567
+ access: "view"
12568
+ },
12389
12569
  "nodes.getNodeAddons": {
12390
12570
  capName: "nodes",
12391
12571
  capScope: "system",
@@ -12452,6 +12632,12 @@ Object.freeze({
12452
12632
  addonId: null,
12453
12633
  access: "create"
12454
12634
  },
12635
+ "oauthIntegration.getDescriptor": {
12636
+ capName: "oauth-integration",
12637
+ capScope: "system",
12638
+ addonId: null,
12639
+ access: "view"
12640
+ },
12455
12641
  "osd.setOverlay": {
12456
12642
  capName: "osd",
12457
12643
  capScope: "device",
@@ -13010,6 +13196,18 @@ Object.freeze({
13010
13196
  addonId: null,
13011
13197
  access: "create"
13012
13198
  },
13199
+ "ptz.deletePreset": {
13200
+ capName: "ptz",
13201
+ capScope: "device",
13202
+ addonId: null,
13203
+ access: "delete"
13204
+ },
13205
+ "ptz.getOptions": {
13206
+ capName: "ptz",
13207
+ capScope: "device",
13208
+ addonId: null,
13209
+ access: "view"
13210
+ },
13013
13211
  "ptz.getPosition": {
13014
13212
  capName: "ptz",
13015
13213
  capScope: "device",
@@ -13040,6 +13238,18 @@ Object.freeze({
13040
13238
  addonId: null,
13041
13239
  access: "create"
13042
13240
  },
13241
+ "ptz.savePreset": {
13242
+ capName: "ptz",
13243
+ capScope: "device",
13244
+ addonId: null,
13245
+ access: "create"
13246
+ },
13247
+ "ptz.setAutofocus": {
13248
+ capName: "ptz",
13249
+ capScope: "device",
13250
+ addonId: null,
13251
+ access: "create"
13252
+ },
13043
13253
  "ptz.stop": {
13044
13254
  capName: "ptz",
13045
13255
  capScope: "device",
@@ -13202,24 +13412,6 @@ Object.freeze({
13202
13412
  addonId: null,
13203
13413
  access: "create"
13204
13414
  },
13205
- "remoteAccess.listProviders": {
13206
- capName: "remote-access",
13207
- capScope: "system",
13208
- addonId: null,
13209
- access: "view"
13210
- },
13211
- "remoteAccess.startProvider": {
13212
- capName: "remote-access",
13213
- capScope: "system",
13214
- addonId: null,
13215
- access: "create"
13216
- },
13217
- "remoteAccess.stopProvider": {
13218
- capName: "remote-access",
13219
- capScope: "system",
13220
- addonId: null,
13221
- access: "create"
13222
- },
13223
13415
  "restreamer.getExposedResources": {
13224
13416
  capName: "restreamer",
13225
13417
  capScope: "system",
@@ -13580,12 +13772,6 @@ Object.freeze({
13580
13772
  addonId: null,
13581
13773
  access: "view"
13582
13774
  },
13583
- "streamBroker.getBroker": {
13584
- capName: "stream-broker",
13585
- capScope: "system",
13586
- addonId: null,
13587
- access: "view"
13588
- },
13589
13775
  "streamBroker.getBrokerStats": {
13590
13776
  capName: "stream-broker",
13591
13777
  capScope: "system",
@@ -13658,6 +13844,18 @@ Object.freeze({
13658
13844
  addonId: null,
13659
13845
  access: "create"
13660
13846
  },
13847
+ "streamBroker.pullAudioChunks": {
13848
+ capName: "stream-broker",
13849
+ capScope: "system",
13850
+ addonId: null,
13851
+ access: "view"
13852
+ },
13853
+ "streamBroker.pullFrameHandles": {
13854
+ capName: "stream-broker",
13855
+ capScope: "system",
13856
+ addonId: null,
13857
+ access: "view"
13858
+ },
13661
13859
  "streamBroker.regenerateRtspToken": {
13662
13860
  capName: "stream-broker",
13663
13861
  capScope: "system",
@@ -13694,12 +13892,36 @@ Object.freeze({
13694
13892
  addonId: null,
13695
13893
  access: "create"
13696
13894
  },
13895
+ "streamBroker.subscribeAudioChunks": {
13896
+ capName: "stream-broker",
13897
+ capScope: "system",
13898
+ addonId: null,
13899
+ access: "create"
13900
+ },
13901
+ "streamBroker.subscribeFrames": {
13902
+ capName: "stream-broker",
13903
+ capScope: "system",
13904
+ addonId: null,
13905
+ access: "create"
13906
+ },
13697
13907
  "streamBroker.unassignProfile": {
13698
13908
  capName: "stream-broker",
13699
13909
  capScope: "system",
13700
13910
  addonId: null,
13701
13911
  access: "create"
13702
13912
  },
13913
+ "streamBroker.unsubscribeAudioChunks": {
13914
+ capName: "stream-broker",
13915
+ capScope: "system",
13916
+ addonId: null,
13917
+ access: "create"
13918
+ },
13919
+ "streamBroker.unsubscribeFrames": {
13920
+ capName: "stream-broker",
13921
+ capScope: "system",
13922
+ addonId: null,
13923
+ access: "create"
13924
+ },
13703
13925
  "streamingEngine.getStreamUrl": {
13704
13926
  capName: "streaming-engine",
13705
13927
  capScope: "system",
@@ -13724,6 +13946,24 @@ Object.freeze({
13724
13946
  addonId: null,
13725
13947
  access: "delete"
13726
13948
  },
13949
+ "streamParams.getConfigSchema": {
13950
+ capName: "stream-params",
13951
+ capScope: "device",
13952
+ addonId: null,
13953
+ access: "view"
13954
+ },
13955
+ "streamParams.getOptions": {
13956
+ capName: "stream-params",
13957
+ capScope: "device",
13958
+ addonId: null,
13959
+ access: "view"
13960
+ },
13961
+ "streamParams.setProfile": {
13962
+ capName: "stream-params",
13963
+ capScope: "device",
13964
+ addonId: null,
13965
+ access: "create"
13966
+ },
13727
13967
  "switch.setState": {
13728
13968
  capName: "switch",
13729
13969
  capScope: "device",
@@ -13778,24 +14018,6 @@ Object.freeze({
13778
14018
  addonId: null,
13779
14019
  access: "view"
13780
14020
  },
13781
- "turnOrchestrator.getAllServers": {
13782
- capName: "turn-orchestrator",
13783
- capScope: "system",
13784
- addonId: null,
13785
- access: "view"
13786
- },
13787
- "turnOrchestrator.listProviders": {
13788
- capName: "turn-orchestrator",
13789
- capScope: "system",
13790
- addonId: null,
13791
- access: "view"
13792
- },
13793
- "turnOrchestrator.setProviderEnabled": {
13794
- capName: "turn-orchestrator",
13795
- capScope: "system",
13796
- addonId: null,
13797
- access: "create"
13798
- },
13799
14021
  "turnProvider.getTurnServers": {
13800
14022
  capName: "turn-provider",
13801
14023
  capScope: "system",
@@ -13850,6 +14072,12 @@ Object.freeze({
13850
14072
  addonId: null,
13851
14073
  access: "view"
13852
14074
  },
14075
+ "userManagement.listOauthSessions": {
14076
+ capName: "user-management",
14077
+ capScope: "system",
14078
+ addonId: null,
14079
+ access: "view"
14080
+ },
13853
14081
  "userManagement.listScopedTokens": {
13854
14082
  capName: "user-management",
13855
14083
  capScope: "system",
@@ -13862,6 +14090,30 @@ Object.freeze({
13862
14090
  addonId: null,
13863
14091
  access: "view"
13864
14092
  },
14093
+ "userManagement.oauthExchangeCode": {
14094
+ capName: "user-management",
14095
+ capScope: "system",
14096
+ addonId: null,
14097
+ access: "view"
14098
+ },
14099
+ "userManagement.oauthIssueCode": {
14100
+ capName: "user-management",
14101
+ capScope: "system",
14102
+ addonId: null,
14103
+ access: "create"
14104
+ },
14105
+ "userManagement.oauthRefresh": {
14106
+ capName: "user-management",
14107
+ capScope: "system",
14108
+ addonId: null,
14109
+ access: "view"
14110
+ },
14111
+ "userManagement.oauthVerifyAccessToken": {
14112
+ capName: "user-management",
14113
+ capScope: "system",
14114
+ addonId: null,
14115
+ access: "view"
14116
+ },
13865
14117
  "userManagement.resetPassword": {
13866
14118
  capName: "user-management",
13867
14119
  capScope: "system",
@@ -13874,6 +14126,12 @@ Object.freeze({
13874
14126
  addonId: null,
13875
14127
  access: "delete"
13876
14128
  },
14129
+ "userManagement.revokeOauthSession": {
14130
+ capName: "user-management",
14131
+ capScope: "system",
14132
+ addonId: null,
14133
+ access: "delete"
14134
+ },
13877
14135
  "userManagement.revokeScopedToken": {
13878
14136
  capName: "user-management",
13879
14137
  capScope: "system",