@camstack/addon-post-analysis 1.2.337 → 1.2.338
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{clip-model-registry-CD0UYoAb.mjs → clip-model-registry-BLUVLdlY.mjs} +264 -124
- package/dist/{clip-model-registry-CML1YOOa.js → clip-model-registry-BcSLJ8aL.js} +264 -124
- package/dist/embedding-encoder/index.js +1 -1
- package/dist/embedding-encoder/index.mjs +1 -1
- package/dist/pipeline-analytics/_stub.js +2 -2
- package/dist/pipeline-analytics/{_virtual_mf-localSharedImportMap___mfe_internal__addon_pipeline_analytics_widgets-DGaCYQ8R.mjs → _virtual_mf-localSharedImportMap___mfe_internal__addon_pipeline_analytics_widgets-DDfv_NZB.mjs} +2 -2
- package/dist/pipeline-analytics/_virtual_mf___mfe_internal__addon_pipeline_analytics_widgets__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-D3jDbheU.mjs +26 -0
- package/dist/pipeline-analytics/_virtual_mf___mfe_internal__addon_pipeline_analytics_widgets__loadShare___mf_0_camstack_mf_1_ui_mf_2_library__loadShare__.js-BRmdbHeK.mjs +26 -0
- package/dist/pipeline-analytics/{hostInit-Dlhtn22B.mjs → hostInit-BTA95n_5.mjs} +2 -2
- package/dist/pipeline-analytics/index.js +2 -2
- package/dist/pipeline-analytics/index.mjs +2 -2
- package/dist/pipeline-analytics/remoteEntry.js +1 -1
- package/package.json +1 -1
- package/dist/pipeline-analytics/_virtual_mf___mfe_internal__addon_pipeline_analytics_widgets__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-D7NMYqUM.mjs +0 -26
- package/dist/pipeline-analytics/_virtual_mf___mfe_internal__addon_pipeline_analytics_widgets__loadShare___mf_0_camstack_mf_1_ui_mf_2_library__loadShare__.js-bIOxWlPv.mjs +0 -26
|
@@ -5451,7 +5451,7 @@ var ZodIssueCode = {
|
|
|
5451
5451
|
var ZodFirstPartyTypeKind;
|
|
5452
5452
|
ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
|
|
5453
5453
|
//#endregion
|
|
5454
|
-
//#region ../types/dist/sleep-
|
|
5454
|
+
//#region ../types/dist/sleep-C16NCZR2.mjs
|
|
5455
5455
|
/**
|
|
5456
5456
|
* The audio chunk plane's byte format, and the ONE expansion from a coded
|
|
5457
5457
|
* window to float samples (D455).
|
|
@@ -19454,6 +19454,96 @@ var filesystemBrowseCapability = {
|
|
|
19454
19454
|
})
|
|
19455
19455
|
}
|
|
19456
19456
|
};
|
|
19457
|
+
/** The central link domain the viewer app claims (Universal Links / App Links). */
|
|
19458
|
+
var CAMSTACK_APP_LINK_ORIGIN = "https://camstack.zentik.app";
|
|
19459
|
+
/** Where the hub serves the viewer SPA. */
|
|
19460
|
+
var HUB_VIEWER_MOUNT = "/viewer/camstack";
|
|
19461
|
+
/** True when `baseUrl` names the CamStack app link rather than a hub address. */
|
|
19462
|
+
function isAppLinkBase(baseUrl) {
|
|
19463
|
+
if (baseUrl === null || baseUrl === void 0 || baseUrl === "") return false;
|
|
19464
|
+
try {
|
|
19465
|
+
return new URL(baseUrl).origin === CAMSTACK_APP_LINK_ORIGIN;
|
|
19466
|
+
} catch {
|
|
19467
|
+
return false;
|
|
19468
|
+
}
|
|
19469
|
+
}
|
|
19470
|
+
/**
|
|
19471
|
+
* The base a viewer link is built on, from the flagged notification address:
|
|
19472
|
+
* the effective address is the explicit choice, else AUTO's `resolved`. The
|
|
19473
|
+
* one reading of that answer — the NC's tap and the Network page's preview
|
|
19474
|
+
* both go through it.
|
|
19475
|
+
*/
|
|
19476
|
+
function viewerLinkBaseOf(endpoint) {
|
|
19477
|
+
const flagged = endpoint.baseUrl ?? endpoint.resolved;
|
|
19478
|
+
return isAppLinkBase(flagged) ? {
|
|
19479
|
+
form: "app",
|
|
19480
|
+
hubBaseUrl: endpoint.appLinkHub ?? null
|
|
19481
|
+
} : {
|
|
19482
|
+
form: "hub",
|
|
19483
|
+
hubBaseUrl: flagged
|
|
19484
|
+
};
|
|
19485
|
+
}
|
|
19486
|
+
/**
|
|
19487
|
+
* Reduce a base URL to the bare origin the central page accepts as `hub=`,
|
|
19488
|
+
* or `null` when it cannot be one: not http(s), carries credentials, or does
|
|
19489
|
+
* not parse. A path/query/fragment is dropped — the central page mounts the
|
|
19490
|
+
* viewer under the origin itself.
|
|
19491
|
+
*/
|
|
19492
|
+
function toAppLinkHubOrigin(baseUrl) {
|
|
19493
|
+
let parsed;
|
|
19494
|
+
try {
|
|
19495
|
+
parsed = new URL(baseUrl);
|
|
19496
|
+
} catch {
|
|
19497
|
+
return null;
|
|
19498
|
+
}
|
|
19499
|
+
if (parsed.protocol !== "https:" && parsed.protocol !== "http:") return null;
|
|
19500
|
+
if (parsed.username !== "" || parsed.password !== "") return null;
|
|
19501
|
+
if (parsed.hostname === "") return null;
|
|
19502
|
+
return parsed.origin;
|
|
19503
|
+
}
|
|
19504
|
+
/** The viewer route for a destination, or null when it names nothing. */
|
|
19505
|
+
function viewerRoute(destination) {
|
|
19506
|
+
switch (destination.kind) {
|
|
19507
|
+
case "camera": {
|
|
19508
|
+
if (!Number.isInteger(destination.deviceId) || destination.deviceId <= 0) return null;
|
|
19509
|
+
const at = destination.atMs;
|
|
19510
|
+
return {
|
|
19511
|
+
path: `/camera/${String(destination.deviceId)}`,
|
|
19512
|
+
query: at !== void 0 && Number.isFinite(at) ? [["at", String(Math.trunc(at))]] : []
|
|
19513
|
+
};
|
|
19514
|
+
}
|
|
19515
|
+
case "events": return {
|
|
19516
|
+
path: "/events",
|
|
19517
|
+
query: []
|
|
19518
|
+
};
|
|
19519
|
+
case "notifications": return {
|
|
19520
|
+
path: "/notifications",
|
|
19521
|
+
query: []
|
|
19522
|
+
};
|
|
19523
|
+
}
|
|
19524
|
+
}
|
|
19525
|
+
function encodeQuery(query) {
|
|
19526
|
+
if (query.length === 0) return "";
|
|
19527
|
+
return `?${query.map(([k, v]) => `${encodeURIComponent(k)}=${encodeURIComponent(v)}`).join("&")}`;
|
|
19528
|
+
}
|
|
19529
|
+
/**
|
|
19530
|
+
* The link for a viewer destination, or `null` when none can be minted: an
|
|
19531
|
+
* unknown destination, or the `hub` form with no reachable base (a dead link
|
|
19532
|
+
* is worse than none).
|
|
19533
|
+
*/
|
|
19534
|
+
function buildViewerLink(input) {
|
|
19535
|
+
const route = viewerRoute(input.destination);
|
|
19536
|
+
if (route === null) return null;
|
|
19537
|
+
const raw = input.base.hubBaseUrl;
|
|
19538
|
+
const base = raw === null ? "" : raw.replace(/\/+$/, "");
|
|
19539
|
+
if (input.base.form === "app") {
|
|
19540
|
+
const origin = base === "" ? null : toAppLinkHubOrigin(base);
|
|
19541
|
+
const query = origin === null ? route.query : [...route.query, ["hub", origin]];
|
|
19542
|
+
return `${CAMSTACK_APP_LINK_ORIGIN}${route.path}${encodeQuery(query)}`;
|
|
19543
|
+
}
|
|
19544
|
+
if (base === "" || isAppLinkBase(base)) return null;
|
|
19545
|
+
return `${base}${HUB_VIEWER_MOUNT}${route.path}${encodeQuery(route.query)}`;
|
|
19546
|
+
}
|
|
19457
19547
|
/**
|
|
19458
19548
|
* Transport bounds for AI capability methods.
|
|
19459
19549
|
*
|
|
@@ -34531,96 +34621,6 @@ var videoclipsCapability = {
|
|
|
34531
34621
|
})
|
|
34532
34622
|
}
|
|
34533
34623
|
};
|
|
34534
|
-
/** The central link domain the viewer app claims (Universal Links / App Links). */
|
|
34535
|
-
var CAMSTACK_APP_LINK_ORIGIN = "https://camstack.zentik.app";
|
|
34536
|
-
/** Where the hub serves the viewer SPA. */
|
|
34537
|
-
var HUB_VIEWER_MOUNT = "/viewer/camstack";
|
|
34538
|
-
/** True when `baseUrl` names the CamStack app link rather than a hub address. */
|
|
34539
|
-
function isAppLinkBase(baseUrl) {
|
|
34540
|
-
if (baseUrl === null || baseUrl === void 0 || baseUrl === "") return false;
|
|
34541
|
-
try {
|
|
34542
|
-
return new URL(baseUrl).origin === CAMSTACK_APP_LINK_ORIGIN;
|
|
34543
|
-
} catch {
|
|
34544
|
-
return false;
|
|
34545
|
-
}
|
|
34546
|
-
}
|
|
34547
|
-
/**
|
|
34548
|
-
* The base a viewer link is built on, from the flagged notification address:
|
|
34549
|
-
* the effective address is the explicit choice, else AUTO's `resolved`. The
|
|
34550
|
-
* one reading of that answer — the NC's tap and the Network page's preview
|
|
34551
|
-
* both go through it.
|
|
34552
|
-
*/
|
|
34553
|
-
function viewerLinkBaseOf(endpoint) {
|
|
34554
|
-
const flagged = endpoint.baseUrl ?? endpoint.resolved;
|
|
34555
|
-
return isAppLinkBase(flagged) ? {
|
|
34556
|
-
form: "app",
|
|
34557
|
-
hubBaseUrl: endpoint.appLinkHub ?? null
|
|
34558
|
-
} : {
|
|
34559
|
-
form: "hub",
|
|
34560
|
-
hubBaseUrl: flagged
|
|
34561
|
-
};
|
|
34562
|
-
}
|
|
34563
|
-
/**
|
|
34564
|
-
* Reduce a base URL to the bare origin the central page accepts as `hub=`,
|
|
34565
|
-
* or `null` when it cannot be one: not http(s), carries credentials, or does
|
|
34566
|
-
* not parse. A path/query/fragment is dropped — the central page mounts the
|
|
34567
|
-
* viewer under the origin itself.
|
|
34568
|
-
*/
|
|
34569
|
-
function toAppLinkHubOrigin(baseUrl) {
|
|
34570
|
-
let parsed;
|
|
34571
|
-
try {
|
|
34572
|
-
parsed = new URL(baseUrl);
|
|
34573
|
-
} catch {
|
|
34574
|
-
return null;
|
|
34575
|
-
}
|
|
34576
|
-
if (parsed.protocol !== "https:" && parsed.protocol !== "http:") return null;
|
|
34577
|
-
if (parsed.username !== "" || parsed.password !== "") return null;
|
|
34578
|
-
if (parsed.hostname === "") return null;
|
|
34579
|
-
return parsed.origin;
|
|
34580
|
-
}
|
|
34581
|
-
/** The viewer route for a destination, or null when it names nothing. */
|
|
34582
|
-
function viewerRoute(destination) {
|
|
34583
|
-
switch (destination.kind) {
|
|
34584
|
-
case "camera": {
|
|
34585
|
-
if (!Number.isInteger(destination.deviceId) || destination.deviceId <= 0) return null;
|
|
34586
|
-
const at = destination.atMs;
|
|
34587
|
-
return {
|
|
34588
|
-
path: `/camera/${String(destination.deviceId)}`,
|
|
34589
|
-
query: at !== void 0 && Number.isFinite(at) ? [["at", String(Math.trunc(at))]] : []
|
|
34590
|
-
};
|
|
34591
|
-
}
|
|
34592
|
-
case "events": return {
|
|
34593
|
-
path: "/events",
|
|
34594
|
-
query: []
|
|
34595
|
-
};
|
|
34596
|
-
case "notifications": return {
|
|
34597
|
-
path: "/notifications",
|
|
34598
|
-
query: []
|
|
34599
|
-
};
|
|
34600
|
-
}
|
|
34601
|
-
}
|
|
34602
|
-
function encodeQuery(query) {
|
|
34603
|
-
if (query.length === 0) return "";
|
|
34604
|
-
return `?${query.map(([k, v]) => `${encodeURIComponent(k)}=${encodeURIComponent(v)}`).join("&")}`;
|
|
34605
|
-
}
|
|
34606
|
-
/**
|
|
34607
|
-
* The link for a viewer destination, or `null` when none can be minted: an
|
|
34608
|
-
* unknown destination, or the `hub` form with no reachable base (a dead link
|
|
34609
|
-
* is worse than none).
|
|
34610
|
-
*/
|
|
34611
|
-
function buildViewerLink(input) {
|
|
34612
|
-
const route = viewerRoute(input.destination);
|
|
34613
|
-
if (route === null) return null;
|
|
34614
|
-
const raw = input.base.hubBaseUrl;
|
|
34615
|
-
const base = raw === null ? "" : raw.replace(/\/+$/, "");
|
|
34616
|
-
if (input.base.form === "app") {
|
|
34617
|
-
const origin = base === "" ? null : toAppLinkHubOrigin(base);
|
|
34618
|
-
const query = origin === null ? route.query : [...route.query, ["hub", origin]];
|
|
34619
|
-
return `${CAMSTACK_APP_LINK_ORIGIN}${route.path}${encodeQuery(query)}`;
|
|
34620
|
-
}
|
|
34621
|
-
if (base === "" || isAppLinkBase(base)) return null;
|
|
34622
|
-
return `${base}${HUB_VIEWER_MOUNT}${route.path}${encodeQuery(route.query)}`;
|
|
34623
|
-
}
|
|
34624
34624
|
/**
|
|
34625
34625
|
* Optional client-side hints sent at session creation to help the provider
|
|
34626
34626
|
* pick the best native source. All fields optional — a viewer that knows
|
|
@@ -35096,6 +35096,35 @@ var webrtcSessionCapability = {
|
|
|
35096
35096
|
alive: boolean()
|
|
35097
35097
|
})),
|
|
35098
35098
|
/**
|
|
35099
|
+
* The viewer's downlink probe, for ONE live session (D733).
|
|
35100
|
+
*
|
|
35101
|
+
* The player measures `/adaptive-probe` after the session's first decoded
|
|
35102
|
+
* frame (D635). It used to act on the reading itself, by opening a SECOND
|
|
35103
|
+
* session with `hints.downlinkMbps` — every adaptive live open became two
|
|
35104
|
+
* sessions, two ICE + DTLS handshakes and two server pipelines. It now
|
|
35105
|
+
* hands the measurement to the session it already has; the provider picks
|
|
35106
|
+
* the rung exactly as it would from an offer's hints (same viewport
|
|
35107
|
+
* ceiling) and moves the session there — in place when the negotiated
|
|
35108
|
+
* codec carries the new rendition, by the existing re-offer
|
|
35109
|
+
* (`getSessionState.pendingRenegotiation`) when it cannot.
|
|
35110
|
+
*
|
|
35111
|
+
* A MEASUREMENT, never a tier: the client does not choose. A probe only
|
|
35112
|
+
* raises the rung; lowering it stays the ladder's call on delivery.
|
|
35113
|
+
* `held` answers why nothing moved (`not-adaptive`, `pinned`,
|
|
35114
|
+
* `already-there`, `recorded`, …) — a client that gets ANY answer must not
|
|
35115
|
+
* fall back to a reconnect; only a provider that does not know the method
|
|
35116
|
+
* (an older hub) leaves the client its legacy second session.
|
|
35117
|
+
*/
|
|
35118
|
+
applyDownlinkProbe: method(object({
|
|
35119
|
+
deviceId: number().int().nonnegative(),
|
|
35120
|
+
sessionId: string(),
|
|
35121
|
+
downlinkMbps: number().nonnegative()
|
|
35122
|
+
}), object({
|
|
35123
|
+
outcome: _enum(["switching", "held"]),
|
|
35124
|
+
tier: CamProfileSchema.nullable(),
|
|
35125
|
+
reason: string()
|
|
35126
|
+
}), { kind: "mutation" }),
|
|
35127
|
+
/**
|
|
35099
35128
|
* The SERVER's half of the stream-debug overlay, for one live session.
|
|
35100
35129
|
*
|
|
35101
35130
|
* The client can measure its own transport (`getStats()`); it cannot see
|
|
@@ -39346,7 +39375,8 @@ var ConnectionEndpointSchema = object({
|
|
|
39346
39375
|
"lan-ipv6",
|
|
39347
39376
|
"public",
|
|
39348
39377
|
"loopback",
|
|
39349
|
-
"app-link"
|
|
39378
|
+
"app-link",
|
|
39379
|
+
"custom"
|
|
39350
39380
|
]),
|
|
39351
39381
|
/**
|
|
39352
39382
|
* Originating-interface kind — `lan`/`wifi`/`docker`/`vpn`/`other`/
|
|
@@ -39449,13 +39479,12 @@ var ViewerEndpointsSchema = object({
|
|
|
39449
39479
|
resolved: array(string()).readonly()
|
|
39450
39480
|
});
|
|
39451
39481
|
/**
|
|
39452
|
-
*
|
|
39453
|
-
*
|
|
39482
|
+
* DEPRECATED compatibility shape of `getHubAddresses` (D729 amendment, kept
|
|
39483
|
+
* one release for addons built against it): `cluster` is the `agents` role,
|
|
39484
|
+
* `browser` the `signIn` role; `override` is the flagged address.
|
|
39454
39485
|
*/
|
|
39455
39486
|
var HubAddressSnapshotSchema = object({
|
|
39456
|
-
/** The operator's override, or null for automatic. */
|
|
39457
39487
|
override: string().nullable(),
|
|
39458
|
-
/** The address in use, or null when nothing qualifies (never loopback). */
|
|
39459
39488
|
resolved: string().nullable(),
|
|
39460
39489
|
source: _enum([
|
|
39461
39490
|
"override",
|
|
@@ -39464,11 +39493,61 @@ var HubAddressSnapshotSchema = object({
|
|
|
39464
39493
|
])
|
|
39465
39494
|
});
|
|
39466
39495
|
var HubAddressesSchema = object({
|
|
39467
|
-
/** "Hub address for agents" — agents' bundle/model pulls, LAN devices. */
|
|
39468
39496
|
cluster: HubAddressSnapshotSchema,
|
|
39469
|
-
/** "Public address for sign-in links" — e-mail links, OIDC, WebAuthn, OAuth2. */
|
|
39470
39497
|
browser: HubAddressSnapshotSchema
|
|
39471
39498
|
});
|
|
39499
|
+
/**
|
|
39500
|
+
* What an address is used for (`hub-address.ts`). `viewer` is many-valued;
|
|
39501
|
+
* `notifications`, `agents` and `signIn` are carried by at most one address.
|
|
39502
|
+
*/
|
|
39503
|
+
var HubAddressRoleSchema = _enum([
|
|
39504
|
+
"viewer",
|
|
39505
|
+
"notifications",
|
|
39506
|
+
"agents",
|
|
39507
|
+
"signIn"
|
|
39508
|
+
]);
|
|
39509
|
+
var RoleSourceSchema = _enum([
|
|
39510
|
+
"flagged",
|
|
39511
|
+
"auto",
|
|
39512
|
+
"none"
|
|
39513
|
+
]);
|
|
39514
|
+
/** One single-valued role: the flagged address, the one in use, and why. */
|
|
39515
|
+
var HubAddressRoleResolutionSchema = object({
|
|
39516
|
+
/** The address carrying the flag, or null = automatic. */
|
|
39517
|
+
flagged: string().nullable(),
|
|
39518
|
+
/** The address in use, or null when nothing qualifies (never loopback). */
|
|
39519
|
+
resolved: string().nullable(),
|
|
39520
|
+
source: RoleSourceSchema
|
|
39521
|
+
});
|
|
39522
|
+
var HubViewerResolutionSchema = object({
|
|
39523
|
+
/** The addresses flagged `viewer`, or empty = automatic. */
|
|
39524
|
+
flagged: array(string()).readonly(),
|
|
39525
|
+
/** What the apps race right now. */
|
|
39526
|
+
resolved: array(string()).readonly(),
|
|
39527
|
+
source: RoleSourceSchema
|
|
39528
|
+
});
|
|
39529
|
+
var HubAddressBookSchema = object({
|
|
39530
|
+
rows: array(ConnectionEndpointSchema.extend({
|
|
39531
|
+
/** In the hub's detected palette right now. */
|
|
39532
|
+
detected: boolean(),
|
|
39533
|
+
/** Entered by the operator (removable). */
|
|
39534
|
+
custom: boolean(),
|
|
39535
|
+
/** The roles explicitly flagged on this address. */
|
|
39536
|
+
flags: array(HubAddressRoleSchema).readonly(),
|
|
39537
|
+
/** The roles this address serves right now — flagged or automatic. */
|
|
39538
|
+
inUse: array(HubAddressRoleSchema).readonly(),
|
|
39539
|
+
/** The roles this address may be flagged with. */
|
|
39540
|
+
eligible: array(HubAddressRoleSchema).readonly()
|
|
39541
|
+
})).readonly(),
|
|
39542
|
+
roles: object({
|
|
39543
|
+
viewer: HubViewerResolutionSchema,
|
|
39544
|
+
notifications: HubAddressRoleResolutionSchema,
|
|
39545
|
+
agents: HubAddressRoleResolutionSchema,
|
|
39546
|
+
signIn: HubAddressRoleResolutionSchema
|
|
39547
|
+
}),
|
|
39548
|
+
/** The `hub=` an app link carries (D709), or null. */
|
|
39549
|
+
appLinkHub: string().nullable()
|
|
39550
|
+
});
|
|
39472
39551
|
var AllowedAddressesSchema = object({
|
|
39473
39552
|
/**
|
|
39474
39553
|
* Allowlist of interface addresses operators have explicitly opted
|
|
@@ -39581,46 +39660,78 @@ var localNetworkCapability = {
|
|
|
39581
39660
|
*/
|
|
39582
39661
|
getNotificationEndpoint: method(_void(), NotificationEndpointSchema),
|
|
39583
39662
|
/**
|
|
39584
|
-
*
|
|
39585
|
-
*
|
|
39586
|
-
*
|
|
39587
|
-
*
|
|
39663
|
+
* @deprecated Use `setAddressRole({ role: 'notifications', … })`. Kept so
|
|
39664
|
+
* an older admin UI keeps working: it writes the same `notifications`
|
|
39665
|
+
* flag, with the same validation. `baseUrl: null` restores automatic; an
|
|
39666
|
+
* address that is not detected becomes a custom address.
|
|
39588
39667
|
*/
|
|
39589
39668
|
setNotificationEndpoint: method(object({ baseUrl: string().nullable() }), NotificationEndpointSchema, { kind: "mutation" }),
|
|
39590
39669
|
/**
|
|
39591
|
-
* The
|
|
39592
|
-
*
|
|
39593
|
-
*
|
|
39594
|
-
*
|
|
39670
|
+
* The `viewer` role as shipped apps read it: the flagged addresses
|
|
39671
|
+
* (detected or custom), or empty for AUTO — every LAN IPv4 address plus
|
|
39672
|
+
* the public tunnel, never IPv6, mesh, loopback or a custom address.
|
|
39673
|
+
* `resolved` is the set as it stands right now; the custom ones in it are
|
|
39674
|
+
* also in `getConnectionEndpoints`, which the apps filter by it.
|
|
39595
39675
|
*/
|
|
39596
39676
|
getViewerEndpoints: method(_void(), ViewerEndpointsSchema),
|
|
39597
39677
|
/**
|
|
39598
|
-
*
|
|
39599
|
-
*
|
|
39600
|
-
*
|
|
39678
|
+
* @deprecated Use `setAddressRole({ role: 'viewer', … })`. Kept so an
|
|
39679
|
+
* older admin UI keeps working: it replaces the same `viewer` flags.
|
|
39680
|
+
* Empty `baseUrls` restores automatic.
|
|
39601
39681
|
*/
|
|
39602
39682
|
setViewerEndpoints: method(object({ baseUrls: array(string()).readonly() }), ViewerEndpointsSchema, { kind: "mutation" }),
|
|
39603
39683
|
/**
|
|
39604
|
-
* The
|
|
39605
|
-
*
|
|
39606
|
-
*
|
|
39607
|
-
*
|
|
39608
|
-
*
|
|
39684
|
+
* The Network page's Addresses table and every role's answer — the ONE
|
|
39685
|
+
* reading of "which address is this hub reached at, for what": detected
|
|
39686
|
+
* endpoints and custom addresses with their role flags, and per role the
|
|
39687
|
+
* flagged address, the one in use and whether it is automatic. Agent
|
|
39688
|
+
* deliveries, sign-in and LAN devices read `roles.agents` / `roles.signIn`
|
|
39689
|
+
* here; nothing ranks the palette itself. `scheme` is the one the caller
|
|
39690
|
+
* shows LAN rows in (as `getConnectionEndpoints`); agents and sign-in are
|
|
39691
|
+
* always resolved over the HTTPS palette.
|
|
39609
39692
|
*/
|
|
39610
|
-
|
|
39693
|
+
getAddresses: method(object({ scheme: _enum(["http", "https"]).optional() }).optional(), HubAddressBookSchema),
|
|
39694
|
+
/**
|
|
39695
|
+
* Add a custom address. Validated: an http(s) origin with a host, no
|
|
39696
|
+
* credentials, no path, never loopback — an invalid one is refused with
|
|
39697
|
+
* the reason and nothing is stored. Adding an address that already exists
|
|
39698
|
+
* only updates its label.
|
|
39699
|
+
*/
|
|
39700
|
+
addCustomAddress: method(object({
|
|
39701
|
+
baseUrl: string(),
|
|
39702
|
+
label: string().max(80)
|
|
39703
|
+
}), HubAddressBookSchema, {
|
|
39704
|
+
kind: "mutation",
|
|
39705
|
+
auth: "admin"
|
|
39706
|
+
}),
|
|
39707
|
+
/** Remove a custom address. Its role flags go with it (those roles turn automatic). */
|
|
39708
|
+
removeCustomAddress: method(object({ baseUrl: string() }), HubAddressBookSchema, {
|
|
39709
|
+
kind: "mutation",
|
|
39710
|
+
auth: "admin"
|
|
39711
|
+
}),
|
|
39611
39712
|
/**
|
|
39612
|
-
*
|
|
39613
|
-
*
|
|
39614
|
-
*
|
|
39713
|
+
* Flag (`enabled: true`) or unflag an address for a role. For a
|
|
39714
|
+
* single-valued role, flagging moves the flag off every other address.
|
|
39715
|
+
* `baseUrl: null` returns the role to automatic. The address must be a row
|
|
39716
|
+
* of the table (detected, custom, or the app link for notifications);
|
|
39717
|
+
* `signIn` on a plain-http address is refused unless `acceptInsecureHttp`.
|
|
39615
39718
|
*/
|
|
39616
|
-
|
|
39617
|
-
|
|
39618
|
-
baseUrl: string().nullable()
|
|
39619
|
-
|
|
39719
|
+
setAddressRole: method(object({
|
|
39720
|
+
role: HubAddressRoleSchema,
|
|
39721
|
+
baseUrl: string().nullable(),
|
|
39722
|
+
enabled: boolean(),
|
|
39723
|
+
acceptInsecureHttp: boolean().optional()
|
|
39724
|
+
}), HubAddressBookSchema, {
|
|
39620
39725
|
kind: "mutation",
|
|
39621
39726
|
auth: "admin"
|
|
39622
39727
|
}),
|
|
39623
39728
|
/**
|
|
39729
|
+
* @deprecated Read `getAddresses().roles.agents` / `.signIn`. Kept one
|
|
39730
|
+
* release so an addon built against the D729 amendment keeps resolving:
|
|
39731
|
+
* `cluster` = the `agents` role, `browser` = the `signIn` role.
|
|
39732
|
+
*/
|
|
39733
|
+
getHubAddresses: method(_void(), HubAddressesSchema),
|
|
39734
|
+
/**
|
|
39624
39735
|
* Read the operator's allowlist. Empty = "auto" (no filter). Used
|
|
39625
39736
|
* by the admin UI's address selector to seed its checkbox state.
|
|
39626
39737
|
*/
|
|
@@ -51633,12 +51744,24 @@ Object.freeze({
|
|
|
51633
51744
|
addonId: null,
|
|
51634
51745
|
access: "view"
|
|
51635
51746
|
},
|
|
51747
|
+
"localNetwork.addCustomAddress": {
|
|
51748
|
+
capName: "local-network",
|
|
51749
|
+
capScope: "system",
|
|
51750
|
+
addonId: null,
|
|
51751
|
+
access: "create"
|
|
51752
|
+
},
|
|
51636
51753
|
"localNetwork.downloadCa": {
|
|
51637
51754
|
capName: "local-network",
|
|
51638
51755
|
capScope: "system",
|
|
51639
51756
|
addonId: null,
|
|
51640
51757
|
access: "view"
|
|
51641
51758
|
},
|
|
51759
|
+
"localNetwork.getAddresses": {
|
|
51760
|
+
capName: "local-network",
|
|
51761
|
+
capScope: "system",
|
|
51762
|
+
addonId: null,
|
|
51763
|
+
access: "view"
|
|
51764
|
+
},
|
|
51642
51765
|
"localNetwork.getAllowedAddresses": {
|
|
51643
51766
|
capName: "local-network",
|
|
51644
51767
|
capScope: "system",
|
|
@@ -51693,6 +51816,12 @@ Object.freeze({
|
|
|
51693
51816
|
addonId: null,
|
|
51694
51817
|
access: "create"
|
|
51695
51818
|
},
|
|
51819
|
+
"localNetwork.removeCustomAddress": {
|
|
51820
|
+
capName: "local-network",
|
|
51821
|
+
capScope: "system",
|
|
51822
|
+
addonId: null,
|
|
51823
|
+
access: "delete"
|
|
51824
|
+
},
|
|
51696
51825
|
"localNetwork.resetAllowlistToBestMatch": {
|
|
51697
51826
|
capName: "local-network",
|
|
51698
51827
|
capScope: "system",
|
|
@@ -51705,13 +51834,13 @@ Object.freeze({
|
|
|
51705
51834
|
addonId: null,
|
|
51706
51835
|
access: "create"
|
|
51707
51836
|
},
|
|
51708
|
-
"localNetwork.
|
|
51837
|
+
"localNetwork.setAddressRole": {
|
|
51709
51838
|
capName: "local-network",
|
|
51710
51839
|
capScope: "system",
|
|
51711
51840
|
addonId: null,
|
|
51712
51841
|
access: "create"
|
|
51713
51842
|
},
|
|
51714
|
-
"localNetwork.
|
|
51843
|
+
"localNetwork.setAllowedAddresses": {
|
|
51715
51844
|
capName: "local-network",
|
|
51716
51845
|
capScope: "system",
|
|
51717
51846
|
addonId: null,
|
|
@@ -55965,6 +56094,12 @@ Object.freeze({
|
|
|
55965
56094
|
addonId: null,
|
|
55966
56095
|
access: "create"
|
|
55967
56096
|
},
|
|
56097
|
+
"webrtcSession.applyDownlinkProbe": {
|
|
56098
|
+
capName: "webrtc-session",
|
|
56099
|
+
capScope: "device",
|
|
56100
|
+
addonId: null,
|
|
56101
|
+
access: "create"
|
|
56102
|
+
},
|
|
55968
56103
|
"webrtcSession.closeSession": {
|
|
55969
56104
|
capName: "webrtc-session",
|
|
55970
56105
|
capScope: "device",
|
|
@@ -60063,6 +60198,11 @@ Object.freeze({
|
|
|
60063
60198
|
form: "single",
|
|
60064
60199
|
optional: false
|
|
60065
60200
|
}],
|
|
60201
|
+
"webrtcSession.applyDownlinkProbe": [{
|
|
60202
|
+
name: "deviceId",
|
|
60203
|
+
form: "single",
|
|
60204
|
+
optional: false
|
|
60205
|
+
}],
|
|
60066
60206
|
"webrtcSession.closeSession": [{
|
|
60067
60207
|
name: "deviceId",
|
|
60068
60208
|
form: "single",
|