@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-
|
|
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(
|
|
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
|
-
/**
|
|
7384
|
-
|
|
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
|
-
/**
|
|
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
|
|
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.
|
|
8306
|
-
*
|
|
8307
|
-
*
|
|
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({
|
|
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
|
|
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
|
|
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
|
|
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({
|
|
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",
|