@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-
|
|
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(
|
|
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
|
-
/**
|
|
7380
|
-
|
|
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
|
-
/**
|
|
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
|
|
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.
|
|
8302
|
-
*
|
|
8303
|
-
*
|
|
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({
|
|
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
|
|
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
|
|
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
|
|
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({
|
|
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",
|