@camstack/system 1.2.358 → 1.2.360
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/addon-runner.js +1 -1
- package/dist/addon-runner.mjs +1 -1
- package/dist/builtins/addon-pages-aggregator/addon-pages-aggregator.addon.js +1 -1
- package/dist/builtins/addon-pages-aggregator/addon-pages-aggregator.addon.mjs +1 -1
- package/dist/builtins/addon-widgets-aggregator/addon-widgets-aggregator.addon.js +1 -1
- package/dist/builtins/addon-widgets-aggregator/addon-widgets-aggregator.addon.mjs +1 -1
- package/dist/builtins/alerts/alerts.addon.js +1 -1
- package/dist/builtins/alerts/alerts.addon.mjs +1 -1
- package/dist/builtins/autotrack/index.js +1 -1
- package/dist/builtins/autotrack/index.mjs +1 -1
- package/dist/builtins/backup-orchestrator/backup-orchestrator.addon.js +1 -1
- package/dist/builtins/backup-orchestrator/backup-orchestrator.addon.mjs +1 -1
- package/dist/builtins/calendars/calendars.addon.js +1 -1
- package/dist/builtins/calendars/calendars.addon.mjs +1 -1
- package/dist/builtins/camera-grid/index.js +1 -1
- package/dist/builtins/camera-grid/index.mjs +1 -1
- package/dist/builtins/composer/composer.addon.js +2 -2
- package/dist/builtins/composer/composer.addon.mjs +2 -2
- package/dist/builtins/console-logging/index.js +1 -1
- package/dist/builtins/console-logging/index.mjs +1 -1
- package/dist/builtins/core-blocks/core-blocks.addon.js +2 -2
- package/dist/builtins/core-blocks/core-blocks.addon.mjs +2 -2
- package/dist/builtins/device-manager/device-manager.addon.js +2 -2
- package/dist/builtins/device-manager/device-manager.addon.mjs +2 -2
- package/dist/builtins/hub-forwarder/index.js +1 -1
- package/dist/builtins/hub-forwarder/index.mjs +1 -1
- package/dist/builtins/liveness-monitor/liveness-monitor.addon.js +1 -1
- package/dist/builtins/liveness-monitor/liveness-monitor.addon.mjs +1 -1
- package/dist/builtins/local-auth/local-auth.addon.js +1 -1
- package/dist/builtins/local-auth/local-auth.addon.mjs +1 -1
- package/dist/builtins/local-network/address-book.d.ts +69 -0
- package/dist/builtins/local-network/local-network.addon.d.ts +43 -47
- package/dist/builtins/local-network/local-network.addon.js +366 -81
- package/dist/builtins/local-network/local-network.addon.mjs +367 -80
- package/dist/builtins/loki-logging/index.js +1 -1
- package/dist/builtins/loki-logging/index.mjs +1 -1
- package/dist/builtins/native-metrics/native-metrics.addon.js +1 -1
- package/dist/builtins/native-metrics/native-metrics.addon.mjs +1 -1
- package/dist/builtins/platform-probe/index.js +1 -1
- package/dist/builtins/platform-probe/index.mjs +1 -1
- package/dist/builtins/remote-access-orchestrator/remote-access-orchestrator.addon.js +1 -1
- package/dist/builtins/remote-access-orchestrator/remote-access-orchestrator.addon.mjs +1 -1
- package/dist/builtins/snapshot/index.js +1 -1
- package/dist/builtins/snapshot/index.mjs +1 -1
- package/dist/builtins/sqlite-storage/filesystem-storage.addon.js +1 -1
- package/dist/builtins/sqlite-storage/filesystem-storage.addon.mjs +1 -1
- package/dist/builtins/sqlite-storage/sqlite-settings.addon.js +0 -0
- package/dist/builtins/sqlite-storage/sqlite-settings.addon.mjs +0 -0
- package/dist/builtins/storage-orchestrator/storage-orchestrator.addon.js +1 -1
- package/dist/builtins/storage-orchestrator/storage-orchestrator.addon.mjs +1 -1
- package/dist/builtins/system-config/system-config.addon.js +1 -1
- package/dist/builtins/system-config/system-config.addon.mjs +1 -1
- package/dist/builtins/winston-logging/index.js +1 -1
- package/dist/builtins/winston-logging/index.mjs +1 -1
- package/dist/{child-cap-dispatch-C2dFiu87.mjs → child-cap-dispatch-StBHObCA.mjs} +1 -1
- package/dist/{child-cap-dispatch-BWk99kmA.js → child-cap-dispatch-T3Kdhbb3.js} +1 -1
- package/dist/{composition-sources-D8Hapyav.mjs → composition-sources-DASc7NBj.mjs} +1 -1
- package/dist/{composition-sources-BaHPH661.js → composition-sources-DFgayxCc.js} +1 -1
- package/dist/{dist-D3bhbMY3.mjs → dist-C9Rk6KVv.mjs} +381 -115
- package/dist/{dist-DzAHit0a.js → dist-Cv1lnnQq.js} +414 -118
- package/dist/index.js +2 -2
- package/dist/index.mjs +2 -2
- package/dist/{retired-settings-keys-CkXoPjKy.js → retired-settings-keys-BGNqRNhu.js} +1 -1
- package/dist/{retired-settings-keys-B6AFmtlO.mjs → retired-settings-keys-BjG8bQVI.mjs} +1 -1
- package/package.json +1 -1
|
@@ -710,7 +710,7 @@ var EventCategory = /* @__PURE__ */ function(EventCategory) {
|
|
|
710
710
|
return EventCategory;
|
|
711
711
|
}({});
|
|
712
712
|
//#endregion
|
|
713
|
-
//#region ../types/dist/sleep-
|
|
713
|
+
//#region ../types/dist/sleep-C16NCZR2.mjs
|
|
714
714
|
/**
|
|
715
715
|
* The audio chunk plane's byte format, and the ONE expansion from a coded
|
|
716
716
|
* window to float samples (D455).
|
|
@@ -17178,6 +17178,65 @@ var filesystemBrowseCapability = {
|
|
|
17178
17178
|
})
|
|
17179
17179
|
}
|
|
17180
17180
|
};
|
|
17181
|
+
/** The central link domain the viewer app claims (Universal Links / App Links). */
|
|
17182
|
+
var CAMSTACK_APP_LINK_ORIGIN = "https://camstack.zentik.app";
|
|
17183
|
+
/** True when `baseUrl` names the CamStack app link rather than a hub address. */
|
|
17184
|
+
function isAppLinkBase(baseUrl) {
|
|
17185
|
+
if (baseUrl === null || baseUrl === void 0 || baseUrl === "") return false;
|
|
17186
|
+
try {
|
|
17187
|
+
return new URL(baseUrl).origin === CAMSTACK_APP_LINK_ORIGIN;
|
|
17188
|
+
} catch {
|
|
17189
|
+
return false;
|
|
17190
|
+
}
|
|
17191
|
+
}
|
|
17192
|
+
/**
|
|
17193
|
+
* Reduce a base URL to the bare origin the central page accepts as `hub=`,
|
|
17194
|
+
* or `null` when it cannot be one: not http(s), carries credentials, or does
|
|
17195
|
+
* not parse. A path/query/fragment is dropped — the central page mounts the
|
|
17196
|
+
* viewer under the origin itself.
|
|
17197
|
+
*/
|
|
17198
|
+
function toAppLinkHubOrigin(baseUrl) {
|
|
17199
|
+
let parsed;
|
|
17200
|
+
try {
|
|
17201
|
+
parsed = new URL(baseUrl);
|
|
17202
|
+
} catch {
|
|
17203
|
+
return null;
|
|
17204
|
+
}
|
|
17205
|
+
if (parsed.protocol !== "https:" && parsed.protocol !== "http:") return null;
|
|
17206
|
+
if (parsed.username !== "" || parsed.password !== "") return null;
|
|
17207
|
+
if (parsed.hostname === "") return null;
|
|
17208
|
+
return parsed.origin;
|
|
17209
|
+
}
|
|
17210
|
+
/**
|
|
17211
|
+
* The hub address an app link carries as `hub=`, chosen from the hub's OWN
|
|
17212
|
+
* advertised palette so it always agrees with what the Network page lists:
|
|
17213
|
+
* the public tunnel first, then the mesh (Tailscale MagicDNS) — HTTPS only,
|
|
17214
|
+
* because the app and the hosted viewer reach it from off the LAN. `null`
|
|
17215
|
+
* when the hub advertises neither.
|
|
17216
|
+
*/
|
|
17217
|
+
function pickAppLinkHub(endpoints) {
|
|
17218
|
+
const rank = (e) => {
|
|
17219
|
+
if (e.kind !== "public" || !e.baseUrl.startsWith("https://")) return null;
|
|
17220
|
+
if (e.interfaceKind === "public") return 0;
|
|
17221
|
+
if (e.interfaceKind === "vpn") return 1;
|
|
17222
|
+
return null;
|
|
17223
|
+
};
|
|
17224
|
+
return endpoints.flatMap((e) => {
|
|
17225
|
+
const r = rank(e);
|
|
17226
|
+
const origin = toAppLinkHubOrigin(e.baseUrl);
|
|
17227
|
+
return r === null || origin === null ? [] : [{
|
|
17228
|
+
r,
|
|
17229
|
+
p: e.priority,
|
|
17230
|
+
origin
|
|
17231
|
+
}];
|
|
17232
|
+
}).toSorted((a, b) => a.r - b.r || a.p - b.p)[0]?.origin ?? null;
|
|
17233
|
+
}
|
|
17234
|
+
var HUB_ADDRESS_ROLES = [
|
|
17235
|
+
"appConnections",
|
|
17236
|
+
"notificationTaps",
|
|
17237
|
+
"internal",
|
|
17238
|
+
"publicEndpoint"
|
|
17239
|
+
];
|
|
17181
17240
|
var IPV4_LITERAL = /^\d{1,3}(?:\.\d{1,3}){3}$/;
|
|
17182
17241
|
function hostnameOf(baseUrl) {
|
|
17183
17242
|
try {
|
|
@@ -17187,6 +17246,9 @@ function hostnameOf(baseUrl) {
|
|
|
17187
17246
|
return null;
|
|
17188
17247
|
}
|
|
17189
17248
|
}
|
|
17249
|
+
function trimSlash(baseUrl) {
|
|
17250
|
+
return baseUrl.replace(/\/+$/, "");
|
|
17251
|
+
}
|
|
17190
17252
|
function isMesh(endpoint) {
|
|
17191
17253
|
return endpoint.kind === "public" && endpoint.interfaceKind === "vpn";
|
|
17192
17254
|
}
|
|
@@ -17201,11 +17263,11 @@ function isLanIpv4Literal(endpoint) {
|
|
|
17201
17263
|
const host = hostnameOf(endpoint.baseUrl);
|
|
17202
17264
|
return host !== null && IPV4_LITERAL.test(host);
|
|
17203
17265
|
}
|
|
17204
|
-
/** Lower = better; `null` = never this
|
|
17205
|
-
function
|
|
17206
|
-
if (endpoint.kind === "loopback" || endpoint.kind === "app-link") return null;
|
|
17266
|
+
/** Lower = better; `null` = never this role's AUTOMATIC answer. */
|
|
17267
|
+
function autoRankFor(role, endpoint) {
|
|
17268
|
+
if (endpoint.kind === "loopback" || endpoint.kind === "app-link" || endpoint.kind === "custom") return null;
|
|
17207
17269
|
if (hostnameOf(endpoint.baseUrl) === null) return null;
|
|
17208
|
-
if (
|
|
17270
|
+
if (role === "internal") {
|
|
17209
17271
|
if (isLanIpv4Literal(endpoint)) return 0;
|
|
17210
17272
|
if (isPlausibleLan(endpoint)) return 1;
|
|
17211
17273
|
if (isMesh(endpoint)) return 2;
|
|
@@ -17231,11 +17293,11 @@ function isLoopbackHost(hostname) {
|
|
|
17231
17293
|
return /^127\.\d{1,3}\.\d{1,3}\.\d{1,3}$/.test(h);
|
|
17232
17294
|
}
|
|
17233
17295
|
/**
|
|
17234
|
-
* Validate an operator-typed
|
|
17296
|
+
* Validate an operator-typed address: an http(s) URL with a host, no
|
|
17235
17297
|
* credentials, no path, and never loopback (it would name whoever dials it).
|
|
17236
17298
|
* Answers the normalised origin (`scheme://host[:port]`).
|
|
17237
17299
|
*/
|
|
17238
|
-
function
|
|
17300
|
+
function validateCustomAddress(raw) {
|
|
17239
17301
|
const trimmed = raw.trim();
|
|
17240
17302
|
if (trimmed === "") return {
|
|
17241
17303
|
ok: false,
|
|
@@ -17275,33 +17337,130 @@ function validateHubAddressOverride(raw) {
|
|
|
17275
17337
|
baseUrl: parsed.origin
|
|
17276
17338
|
};
|
|
17277
17339
|
}
|
|
17278
|
-
/**
|
|
17279
|
-
|
|
17280
|
-
|
|
17281
|
-
|
|
17282
|
-
|
|
17283
|
-
|
|
17284
|
-
|
|
17285
|
-
|
|
17286
|
-
|
|
17287
|
-
|
|
17288
|
-
|
|
17289
|
-
|
|
17290
|
-
|
|
17291
|
-
|
|
17292
|
-
|
|
17340
|
+
/** The reason a plain-http public endpoint is refused unless accepted. */
|
|
17341
|
+
var PUBLIC_ENDPOINT_HTTP_REASON = "The public endpoint needs an https:// address: passkeys and most identity providers refuse a plain-http origin. Accept http only when sign-in and notification links never leave your own network.";
|
|
17342
|
+
/**
|
|
17343
|
+
* May `baseUrl` carry `role`? The address check above, plus two role rules:
|
|
17344
|
+
* the app link carries `notificationTaps` only (it is not a hub address), and
|
|
17345
|
+
* a plain-http address carries `publicEndpoint` only when the operator
|
|
17346
|
+
* explicitly accepted it (`acceptInsecureHttp`) — a LAN-only password or
|
|
17347
|
+
* magic-link sign-in works over http, a passkey or an OIDC callback does not.
|
|
17348
|
+
*/
|
|
17349
|
+
function checkRoleAddress(role, baseUrl, options = {}) {
|
|
17350
|
+
if (isAppLinkBase(baseUrl)) return role === "notificationTaps" ? {
|
|
17351
|
+
ok: true,
|
|
17352
|
+
baseUrl: CAMSTACK_APP_LINK_ORIGIN
|
|
17353
|
+
} : {
|
|
17354
|
+
ok: false,
|
|
17355
|
+
reason: "The CamStack app link is not a hub address — only notification taps can use it."
|
|
17356
|
+
};
|
|
17357
|
+
const check = validateCustomAddress(baseUrl);
|
|
17358
|
+
if (!check.ok) return check;
|
|
17359
|
+
if (role === "publicEndpoint" && check.baseUrl.startsWith("http:") && options.acceptInsecureHttp !== true) return {
|
|
17360
|
+
ok: false,
|
|
17361
|
+
reason: PUBLIC_ENDPOINT_HTTP_REASON
|
|
17293
17362
|
};
|
|
17363
|
+
return check;
|
|
17364
|
+
}
|
|
17365
|
+
/** A stored flag that still validates (stored values are external data). */
|
|
17366
|
+
function validFlag(role, flag) {
|
|
17367
|
+
if (flag === null || flag === "") return null;
|
|
17368
|
+
const check = checkRoleAddress(role, flag, { acceptInsecureHttp: true });
|
|
17369
|
+
return check.ok ? check.baseUrl : null;
|
|
17294
17370
|
}
|
|
17295
|
-
function
|
|
17371
|
+
function pickAuto(endpoints, role) {
|
|
17296
17372
|
const best = endpoints.flatMap((endpoint) => {
|
|
17297
|
-
const rank =
|
|
17373
|
+
const rank = autoRankFor(role, endpoint);
|
|
17298
17374
|
return rank === null ? [] : [{
|
|
17299
17375
|
rank,
|
|
17300
17376
|
priority: endpoint.priority,
|
|
17301
17377
|
endpoint
|
|
17302
17378
|
}];
|
|
17303
17379
|
}).toSorted((a, b) => a.rank - b.rank || a.priority - b.priority)[0];
|
|
17304
|
-
return best === void 0 ? null : best.endpoint.baseUrl
|
|
17380
|
+
return best === void 0 ? null : trimSlash(best.endpoint.baseUrl);
|
|
17381
|
+
}
|
|
17382
|
+
function resolveHubRole(endpoints, role, flag) {
|
|
17383
|
+
const flagged = validFlag(role, flag);
|
|
17384
|
+
if (flagged !== null) return {
|
|
17385
|
+
flagged,
|
|
17386
|
+
resolved: flagged,
|
|
17387
|
+
source: "flagged"
|
|
17388
|
+
};
|
|
17389
|
+
const auto = pickAuto(endpoints, role);
|
|
17390
|
+
return {
|
|
17391
|
+
flagged: null,
|
|
17392
|
+
resolved: auto,
|
|
17393
|
+
source: auto === null ? "none" : "auto"
|
|
17394
|
+
};
|
|
17395
|
+
}
|
|
17396
|
+
/** `internal`: what agents and LAN devices download from. */
|
|
17397
|
+
function resolveInternalAddress(endpoints, flags) {
|
|
17398
|
+
return resolveHubRole(endpoints, "internal", flags.internal);
|
|
17399
|
+
}
|
|
17400
|
+
/**
|
|
17401
|
+
* `publicEndpoint`: every URL that must work off the LAN — sign-in links, OIDC
|
|
17402
|
+
* / OAuth2 callbacks, the relying party, and notification buttons,
|
|
17403
|
+
* attachments, media and admin links.
|
|
17404
|
+
*/
|
|
17405
|
+
function resolvePublicEndpoint(endpoints, flags) {
|
|
17406
|
+
return resolveHubRole(endpoints, "publicEndpoint", flags.publicEndpoint);
|
|
17407
|
+
}
|
|
17408
|
+
/** `notificationTaps`: the flagged address, else the CamStack app link (D709). */
|
|
17409
|
+
function resolveNotificationTapAddress(flags) {
|
|
17410
|
+
const flagged = validFlag("notificationTaps", flags.notificationTaps);
|
|
17411
|
+
if (flagged !== null && !isAppLinkBase(flagged)) return {
|
|
17412
|
+
flagged,
|
|
17413
|
+
resolved: flagged,
|
|
17414
|
+
source: "flagged"
|
|
17415
|
+
};
|
|
17416
|
+
return {
|
|
17417
|
+
flagged: null,
|
|
17418
|
+
resolved: CAMSTACK_APP_LINK_ORIGIN,
|
|
17419
|
+
source: "auto"
|
|
17420
|
+
};
|
|
17421
|
+
}
|
|
17422
|
+
/** AUTO app connections: LAN IPv4 + the public tunnel. Never IPv6, mesh, loopback or custom. */
|
|
17423
|
+
function isDefaultAppConnectionEndpoint(endpoint) {
|
|
17424
|
+
if (endpoint.kind === "lan-ipv4") return true;
|
|
17425
|
+
return endpoint.kind === "public" && endpoint.interfaceKind === "public";
|
|
17426
|
+
}
|
|
17427
|
+
/**
|
|
17428
|
+
* The endpoints the apps race: the flagged ones that are in `endpoints`
|
|
17429
|
+
* (which carries the custom addresses flagged `appConnections`), else AUTO. A flagged
|
|
17430
|
+
* set none of which is currently up falls back to AUTO rather than racing
|
|
17431
|
+
* nothing.
|
|
17432
|
+
*/
|
|
17433
|
+
function selectAppConnectionEndpoints(endpoints, flags) {
|
|
17434
|
+
const auto = endpoints.filter(isDefaultAppConnectionEndpoint);
|
|
17435
|
+
if (flags.appConnections.length === 0) return auto;
|
|
17436
|
+
const wanted = new Set(flags.appConnections);
|
|
17437
|
+
const explicit = endpoints.filter((e) => wanted.has(e.baseUrl));
|
|
17438
|
+
return explicit.length > 0 ? explicit : auto;
|
|
17439
|
+
}
|
|
17440
|
+
/** `appConnections`: what the apps try when connecting. */
|
|
17441
|
+
function resolveAppConnections(endpoints, flags) {
|
|
17442
|
+
const wanted = new Set(flags.appConnections);
|
|
17443
|
+
const selected = selectAppConnectionEndpoints(endpoints, flags);
|
|
17444
|
+
const usedFlags = selected.some((e) => wanted.has(e.baseUrl));
|
|
17445
|
+
return {
|
|
17446
|
+
flagged: flags.appConnections,
|
|
17447
|
+
resolved: selected.map((e) => e.baseUrl),
|
|
17448
|
+
source: selected.length === 0 ? "none" : usedFlags ? "flagged" : "auto"
|
|
17449
|
+
};
|
|
17450
|
+
}
|
|
17451
|
+
/**
|
|
17452
|
+
* Every role at once, each through its own resolver. `appPalette` is what
|
|
17453
|
+
* the apps race (it carries the custom addresses flagged `appConnections`);
|
|
17454
|
+
* `hubPalette` is the detected HTTPS palette `internal` and `publicEndpoint`
|
|
17455
|
+
* resolve over.
|
|
17456
|
+
*/
|
|
17457
|
+
function resolveHubAddressRoles(appPalette, hubPalette, flags) {
|
|
17458
|
+
return {
|
|
17459
|
+
appConnections: resolveAppConnections(appPalette, flags),
|
|
17460
|
+
notificationTaps: resolveNotificationTapAddress(flags),
|
|
17461
|
+
internal: resolveInternalAddress(hubPalette, flags),
|
|
17462
|
+
publicEndpoint: resolvePublicEndpoint(hubPalette, flags)
|
|
17463
|
+
};
|
|
17305
17464
|
}
|
|
17306
17465
|
/**
|
|
17307
17466
|
* Transport bounds for AI capability methods.
|
|
@@ -21860,7 +22019,13 @@ var NcAlarmModeDelaysSchema = zod.z.object({
|
|
|
21860
22019
|
* Absent = false (logged, not sent). Even when true it is not sent when that same sensor
|
|
21861
22020
|
* is the one that starts the entry delay — the entry-delay notification already names it.
|
|
21862
22021
|
*/
|
|
21863
|
-
notifySensorRewatched: zod.z.boolean().optional()
|
|
22022
|
+
notifySensorRewatched: zod.z.boolean().optional(),
|
|
22023
|
+
/**
|
|
22024
|
+
* D735: notify "ignored" when a sensor this arm bypassed really MOVED while armed (its own
|
|
22025
|
+
* change time is after the arm) and set nothing off. Absent = false (logged, not sent). A
|
|
22026
|
+
* re-sync, a recovery from `unavailable` or a duplicate is never announced, switch or not.
|
|
22027
|
+
*/
|
|
22028
|
+
notifySensorIgnored: zod.z.boolean().optional()
|
|
21864
22029
|
});
|
|
21865
22030
|
var NcAlarmModeDelaysListSchema = zod.z.array(NcAlarmModeDelaysSchema).max(8).refine(uniqueModes, { message: "modeDelays: at most one entry per arm mode" });
|
|
21866
22031
|
/**
|
|
@@ -21879,7 +22044,9 @@ var NcAlarmModeDelaysEditSchema = zod.z.object({
|
|
|
21879
22044
|
/** D706: set the switch, or `null` to clear it (back to the default, false). */
|
|
21880
22045
|
notifyDuringEntryDelay: zod.z.boolean().nullable().optional(),
|
|
21881
22046
|
/** D706: set the switch, or `null` to clear it (back to the default, false). */
|
|
21882
|
-
notifySensorRewatched: zod.z.boolean().nullable().optional()
|
|
22047
|
+
notifySensorRewatched: zod.z.boolean().nullable().optional(),
|
|
22048
|
+
/** D735: set the switch, or `null` to clear it (back to the default, false). */
|
|
22049
|
+
notifySensorIgnored: zod.z.boolean().nullable().optional()
|
|
21883
22050
|
});
|
|
21884
22051
|
var NcAlarmModeDelaysEditListSchema = zod.z.array(NcAlarmModeDelaysEditSchema).max(8).refine(uniqueModes, { message: "modeDelays: at most one edit per arm mode" });
|
|
21885
22052
|
/** One switch of the alarm table: put ONE device on, or take it off, ONE mode's list. */
|
|
@@ -31715,50 +31882,6 @@ var videoclipsCapability = {
|
|
|
31715
31882
|
})
|
|
31716
31883
|
}
|
|
31717
31884
|
};
|
|
31718
|
-
/** The central link domain the viewer app claims (Universal Links / App Links). */
|
|
31719
|
-
var CAMSTACK_APP_LINK_ORIGIN = "https://camstack.zentik.app";
|
|
31720
|
-
/**
|
|
31721
|
-
* Reduce a base URL to the bare origin the central page accepts as `hub=`,
|
|
31722
|
-
* or `null` when it cannot be one: not http(s), carries credentials, or does
|
|
31723
|
-
* not parse. A path/query/fragment is dropped — the central page mounts the
|
|
31724
|
-
* viewer under the origin itself.
|
|
31725
|
-
*/
|
|
31726
|
-
function toAppLinkHubOrigin(baseUrl) {
|
|
31727
|
-
let parsed;
|
|
31728
|
-
try {
|
|
31729
|
-
parsed = new URL(baseUrl);
|
|
31730
|
-
} catch {
|
|
31731
|
-
return null;
|
|
31732
|
-
}
|
|
31733
|
-
if (parsed.protocol !== "https:" && parsed.protocol !== "http:") return null;
|
|
31734
|
-
if (parsed.username !== "" || parsed.password !== "") return null;
|
|
31735
|
-
if (parsed.hostname === "") return null;
|
|
31736
|
-
return parsed.origin;
|
|
31737
|
-
}
|
|
31738
|
-
/**
|
|
31739
|
-
* The hub address an app link carries as `hub=`, chosen from the hub's OWN
|
|
31740
|
-
* advertised palette so it always agrees with what the Network page lists:
|
|
31741
|
-
* the public tunnel first, then the mesh (Tailscale MagicDNS) — HTTPS only,
|
|
31742
|
-
* because the app and the hosted viewer reach it from off the LAN. `null`
|
|
31743
|
-
* when the hub advertises neither.
|
|
31744
|
-
*/
|
|
31745
|
-
function pickAppLinkHub(endpoints) {
|
|
31746
|
-
const rank = (e) => {
|
|
31747
|
-
if (e.kind !== "public" || !e.baseUrl.startsWith("https://")) return null;
|
|
31748
|
-
if (e.interfaceKind === "public") return 0;
|
|
31749
|
-
if (e.interfaceKind === "vpn") return 1;
|
|
31750
|
-
return null;
|
|
31751
|
-
};
|
|
31752
|
-
return endpoints.flatMap((e) => {
|
|
31753
|
-
const r = rank(e);
|
|
31754
|
-
const origin = toAppLinkHubOrigin(e.baseUrl);
|
|
31755
|
-
return r === null || origin === null ? [] : [{
|
|
31756
|
-
r,
|
|
31757
|
-
p: e.priority,
|
|
31758
|
-
origin
|
|
31759
|
-
}];
|
|
31760
|
-
}).toSorted((a, b) => a.r - b.r || a.p - b.p)[0]?.origin ?? null;
|
|
31761
|
-
}
|
|
31762
31885
|
/**
|
|
31763
31886
|
* Optional client-side hints sent at session creation to help the provider
|
|
31764
31887
|
* pick the best native source. All fields optional — a viewer that knows
|
|
@@ -32234,6 +32357,35 @@ var webrtcSessionCapability = {
|
|
|
32234
32357
|
alive: zod.z.boolean()
|
|
32235
32358
|
})),
|
|
32236
32359
|
/**
|
|
32360
|
+
* The viewer's downlink probe, for ONE live session (D733).
|
|
32361
|
+
*
|
|
32362
|
+
* The player measures `/adaptive-probe` after the session's first decoded
|
|
32363
|
+
* frame (D635). It used to act on the reading itself, by opening a SECOND
|
|
32364
|
+
* session with `hints.downlinkMbps` — every adaptive live open became two
|
|
32365
|
+
* sessions, two ICE + DTLS handshakes and two server pipelines. It now
|
|
32366
|
+
* hands the measurement to the session it already has; the provider picks
|
|
32367
|
+
* the rung exactly as it would from an offer's hints (same viewport
|
|
32368
|
+
* ceiling) and moves the session there — in place when the negotiated
|
|
32369
|
+
* codec carries the new rendition, by the existing re-offer
|
|
32370
|
+
* (`getSessionState.pendingRenegotiation`) when it cannot.
|
|
32371
|
+
*
|
|
32372
|
+
* A MEASUREMENT, never a tier: the client does not choose. A probe only
|
|
32373
|
+
* raises the rung; lowering it stays the ladder's call on delivery.
|
|
32374
|
+
* `held` answers why nothing moved (`not-adaptive`, `pinned`,
|
|
32375
|
+
* `already-there`, `recorded`, …) — a client that gets ANY answer must not
|
|
32376
|
+
* fall back to a reconnect; only a provider that does not know the method
|
|
32377
|
+
* (an older hub) leaves the client its legacy second session.
|
|
32378
|
+
*/
|
|
32379
|
+
applyDownlinkProbe: method(zod.z.object({
|
|
32380
|
+
deviceId: zod.z.number().int().nonnegative(),
|
|
32381
|
+
sessionId: zod.z.string(),
|
|
32382
|
+
downlinkMbps: zod.z.number().nonnegative()
|
|
32383
|
+
}), zod.z.object({
|
|
32384
|
+
outcome: zod.z.enum(["switching", "held"]),
|
|
32385
|
+
tier: CamProfileSchema.nullable(),
|
|
32386
|
+
reason: zod.z.string()
|
|
32387
|
+
}), { kind: "mutation" }),
|
|
32388
|
+
/**
|
|
32237
32389
|
* The SERVER's half of the stream-debug overlay, for one live session.
|
|
32238
32390
|
*
|
|
32239
32391
|
* The client can measure its own transport (`getStats()`); it cannot see
|
|
@@ -36517,7 +36669,8 @@ var ConnectionEndpointSchema = zod.z.object({
|
|
|
36517
36669
|
"lan-ipv6",
|
|
36518
36670
|
"public",
|
|
36519
36671
|
"loopback",
|
|
36520
|
-
"app-link"
|
|
36672
|
+
"app-link",
|
|
36673
|
+
"custom"
|
|
36521
36674
|
]),
|
|
36522
36675
|
/**
|
|
36523
36676
|
* Originating-interface kind — `lan`/`wifi`/`docker`/`vpn`/`other`/
|
|
@@ -36586,7 +36739,7 @@ var GetConnectionEndpointsResultSchema = zod.z.object({
|
|
|
36586
36739
|
localPort: AdvertisedLocalPortSchema
|
|
36587
36740
|
});
|
|
36588
36741
|
/**
|
|
36589
|
-
* The address flagged for notification
|
|
36742
|
+
* The address flagged for notification taps (`notificationTaps`). `baseUrl: null` = AUTO, which
|
|
36590
36743
|
* since D709 is the CamStack app link; `resolved` reports the effective value,
|
|
36591
36744
|
* so the UI can show it either way.
|
|
36592
36745
|
*/
|
|
@@ -36620,13 +36773,12 @@ var ViewerEndpointsSchema = zod.z.object({
|
|
|
36620
36773
|
resolved: zod.z.array(zod.z.string()).readonly()
|
|
36621
36774
|
});
|
|
36622
36775
|
/**
|
|
36623
|
-
*
|
|
36624
|
-
*
|
|
36776
|
+
* DEPRECATED compatibility shape of `getHubAddresses` (D729 amendment, kept
|
|
36777
|
+
* for addons built against it): `cluster` is the `internal` role, `browser`
|
|
36778
|
+
* the `publicEndpoint` role; `override` is the flagged address.
|
|
36625
36779
|
*/
|
|
36626
36780
|
var HubAddressSnapshotSchema = zod.z.object({
|
|
36627
|
-
/** The operator's override, or null for automatic. */
|
|
36628
36781
|
override: zod.z.string().nullable(),
|
|
36629
|
-
/** The address in use, or null when nothing qualifies (never loopback). */
|
|
36630
36782
|
resolved: zod.z.string().nullable(),
|
|
36631
36783
|
source: zod.z.enum([
|
|
36632
36784
|
"override",
|
|
@@ -36635,11 +36787,63 @@ var HubAddressSnapshotSchema = zod.z.object({
|
|
|
36635
36787
|
])
|
|
36636
36788
|
});
|
|
36637
36789
|
var HubAddressesSchema = zod.z.object({
|
|
36638
|
-
/** "Hub address for agents" — agents' bundle/model pulls, LAN devices. */
|
|
36639
36790
|
cluster: HubAddressSnapshotSchema,
|
|
36640
|
-
/** "Public address for sign-in links" — e-mail links, OIDC, WebAuthn, OAuth2. */
|
|
36641
36791
|
browser: HubAddressSnapshotSchema
|
|
36642
36792
|
});
|
|
36793
|
+
/**
|
|
36794
|
+
* What an address is used for (`hub-address.ts`, D734). `appConnections` is
|
|
36795
|
+
* many-valued; `notificationTaps`, `publicEndpoint` and `internal` are carried
|
|
36796
|
+
* by at most one address.
|
|
36797
|
+
*/
|
|
36798
|
+
var HubAddressRoleSchema = zod.z.enum(HUB_ADDRESS_ROLES);
|
|
36799
|
+
var RoleSourceSchema = zod.z.enum([
|
|
36800
|
+
"flagged",
|
|
36801
|
+
"auto",
|
|
36802
|
+
"none"
|
|
36803
|
+
]);
|
|
36804
|
+
/** One single-valued role: the flagged address, the one in use, and why. */
|
|
36805
|
+
var HubAddressRoleResolutionSchema = zod.z.object({
|
|
36806
|
+
/** The address carrying the flag, or null = automatic. */
|
|
36807
|
+
flagged: zod.z.string().nullable(),
|
|
36808
|
+
/** The address in use, or null when nothing qualifies (never loopback). */
|
|
36809
|
+
resolved: zod.z.string().nullable(),
|
|
36810
|
+
source: RoleSourceSchema
|
|
36811
|
+
});
|
|
36812
|
+
var HubAppConnectionsResolutionSchema = zod.z.object({
|
|
36813
|
+
/** The addresses flagged `appConnections`, or empty = automatic. */
|
|
36814
|
+
flagged: zod.z.array(zod.z.string()).readonly(),
|
|
36815
|
+
/** What the apps race right now. */
|
|
36816
|
+
resolved: zod.z.array(zod.z.string()).readonly(),
|
|
36817
|
+
source: RoleSourceSchema
|
|
36818
|
+
});
|
|
36819
|
+
/**
|
|
36820
|
+
* One row of the Network page's Addresses table: a detected endpoint, an
|
|
36821
|
+
* operator-entered custom address, or the CamStack app link — flagged the
|
|
36822
|
+
* same way. A URL that is both detected and entered is ONE row.
|
|
36823
|
+
*/
|
|
36824
|
+
var HubAddressRowSchema = ConnectionEndpointSchema.extend({
|
|
36825
|
+
/** In the hub's detected palette right now. */
|
|
36826
|
+
detected: zod.z.boolean(),
|
|
36827
|
+
/** Entered by the operator (removable). */
|
|
36828
|
+
custom: zod.z.boolean(),
|
|
36829
|
+
/** The roles explicitly flagged on this address. */
|
|
36830
|
+
flags: zod.z.array(HubAddressRoleSchema).readonly(),
|
|
36831
|
+
/** The roles this address serves right now — flagged or automatic. */
|
|
36832
|
+
inUse: zod.z.array(HubAddressRoleSchema).readonly(),
|
|
36833
|
+
/** The roles this address may be flagged with. */
|
|
36834
|
+
eligible: zod.z.array(HubAddressRoleSchema).readonly()
|
|
36835
|
+
});
|
|
36836
|
+
var HubAddressBookSchema = zod.z.object({
|
|
36837
|
+
rows: zod.z.array(HubAddressRowSchema).readonly(),
|
|
36838
|
+
roles: zod.z.object({
|
|
36839
|
+
appConnections: HubAppConnectionsResolutionSchema,
|
|
36840
|
+
notificationTaps: HubAddressRoleResolutionSchema,
|
|
36841
|
+
internal: HubAddressRoleResolutionSchema,
|
|
36842
|
+
publicEndpoint: HubAddressRoleResolutionSchema
|
|
36843
|
+
}),
|
|
36844
|
+
/** The `hub=` an app link carries (D709), or null. */
|
|
36845
|
+
appLinkHub: zod.z.string().nullable()
|
|
36846
|
+
});
|
|
36643
36847
|
var AllowedAddressesSchema = zod.z.object({
|
|
36644
36848
|
/**
|
|
36645
36849
|
* Allowlist of interface addresses operators have explicitly opted
|
|
@@ -36730,19 +36934,18 @@ var localNetworkCapability = {
|
|
|
36730
36934
|
* tunnel always emits `https://` regardless. */
|
|
36731
36935
|
scheme: zod.z.enum(["http", "https"]).optional(),
|
|
36732
36936
|
/** Append the CamStack app link entry (`kind: 'app-link'`, D709) —
|
|
36733
|
-
* an address notification
|
|
36937
|
+
* an address notification taps can be flagged with, not a hub
|
|
36734
36938
|
* route. Default `false`: racers and rankers never see it. */
|
|
36735
36939
|
includeAppLink: zod.z.boolean().optional()
|
|
36736
36940
|
}), GetConnectionEndpointsResultSchema),
|
|
36737
36941
|
/**
|
|
36738
|
-
* The
|
|
36739
|
-
* AUTO, which is the CamStack app link (D709):
|
|
36740
|
-
* `https://camstack.zentik.app/…?hub=<appLinkHub>` and open the
|
|
36741
|
-
* hub address the palette lists can be flagged instead; then
|
|
36742
|
-
*
|
|
36743
|
-
*
|
|
36744
|
-
*
|
|
36745
|
-
* the LAN), never loopback.
|
|
36942
|
+
* The `notificationTaps` role (D734): where TAPPING a notification opens.
|
|
36943
|
+
* `baseUrl: null` means AUTO, which is the CamStack app link (D709): taps
|
|
36944
|
+
* go through `https://camstack.zentik.app/…?hub=<appLinkHub>` and open the
|
|
36945
|
+
* app. Any hub address the palette lists can be flagged instead; then a
|
|
36946
|
+
* tap opens that address. Only the tap: action buttons, attachment /
|
|
36947
|
+
* media links and admin links follow the `publicEndpoint` role
|
|
36948
|
+
* (`getAddresses().roles.publicEndpoint`), never this one.
|
|
36746
36949
|
*
|
|
36747
36950
|
* Why an explicit marker: the automatic ranking cannot know which of
|
|
36748
36951
|
* several reachable addresses the RECIPIENT can actually open. A link is
|
|
@@ -36752,46 +36955,80 @@ var localNetworkCapability = {
|
|
|
36752
36955
|
*/
|
|
36753
36956
|
getNotificationEndpoint: method(zod.z.void(), NotificationEndpointSchema),
|
|
36754
36957
|
/**
|
|
36755
|
-
*
|
|
36756
|
-
*
|
|
36757
|
-
*
|
|
36758
|
-
* different address after a reboot.
|
|
36958
|
+
* @deprecated Use `setAddressRole({ role: 'notificationTaps', … })`. It
|
|
36959
|
+
* writes the same `notificationTaps` flag, with the same validation. `baseUrl: null` restores automatic; an
|
|
36960
|
+
* address that is not detected becomes a custom address.
|
|
36759
36961
|
*/
|
|
36760
36962
|
setNotificationEndpoint: method(zod.z.object({ baseUrl: zod.z.string().nullable() }), NotificationEndpointSchema, { kind: "mutation" }),
|
|
36761
36963
|
/**
|
|
36762
|
-
* The
|
|
36763
|
-
*
|
|
36764
|
-
*
|
|
36765
|
-
*
|
|
36964
|
+
* The `appConnections` role as shipped apps read it: the flagged addresses
|
|
36965
|
+
* (detected or custom), or empty for AUTO — every LAN IPv4 address plus
|
|
36966
|
+
* the public tunnel, never IPv6, mesh, loopback or a custom address.
|
|
36967
|
+
* `resolved` is the set as it stands right now; the custom ones in it are
|
|
36968
|
+
* also in `getConnectionEndpoints`, which the apps filter by it.
|
|
36766
36969
|
*/
|
|
36767
36970
|
getViewerEndpoints: method(zod.z.void(), ViewerEndpointsSchema),
|
|
36768
36971
|
/**
|
|
36769
|
-
*
|
|
36770
|
-
*
|
|
36771
|
-
*
|
|
36972
|
+
* @deprecated Use `setAddressRole({ role: 'appConnections', … })`. It
|
|
36973
|
+
* replaces the same `appConnections` flags.
|
|
36974
|
+
* Empty `baseUrls` restores automatic.
|
|
36772
36975
|
*/
|
|
36773
36976
|
setViewerEndpoints: method(zod.z.object({ baseUrls: zod.z.array(zod.z.string()).readonly() }), ViewerEndpointsSchema, { kind: "mutation" }),
|
|
36774
36977
|
/**
|
|
36775
|
-
* The
|
|
36776
|
-
*
|
|
36777
|
-
*
|
|
36778
|
-
*
|
|
36779
|
-
*
|
|
36978
|
+
* The Network page's Addresses table and every role's answer — the ONE
|
|
36979
|
+
* reading of "which address is this hub reached at, for what": detected
|
|
36980
|
+
* endpoints and custom addresses with their role flags, and per role the
|
|
36981
|
+
* flagged address, the one in use and whether it is automatic. Agent
|
|
36982
|
+
* deliveries and LAN devices read `roles.internal`; sign-in, OAuth2 and
|
|
36983
|
+
* the notification centre's buttons / media / admin links read
|
|
36984
|
+
* `roles.publicEndpoint`; nothing ranks the palette itself. `scheme` is
|
|
36985
|
+
* the one the caller shows LAN rows in (as `getConnectionEndpoints`);
|
|
36986
|
+
* `internal` and `publicEndpoint` are always resolved over the HTTPS
|
|
36987
|
+
* palette.
|
|
36780
36988
|
*/
|
|
36781
|
-
|
|
36989
|
+
getAddresses: method(zod.z.object({ scheme: zod.z.enum(["http", "https"]).optional() }).optional(), HubAddressBookSchema),
|
|
36782
36990
|
/**
|
|
36783
|
-
*
|
|
36784
|
-
*
|
|
36785
|
-
*
|
|
36991
|
+
* Add a custom address. Validated: an http(s) origin with a host, no
|
|
36992
|
+
* credentials, no path, never loopback — an invalid one is refused with
|
|
36993
|
+
* the reason and nothing is stored. Adding an address that already exists
|
|
36994
|
+
* only updates its label.
|
|
36786
36995
|
*/
|
|
36787
|
-
|
|
36788
|
-
|
|
36789
|
-
|
|
36790
|
-
}),
|
|
36996
|
+
addCustomAddress: method(zod.z.object({
|
|
36997
|
+
baseUrl: zod.z.string(),
|
|
36998
|
+
label: zod.z.string().max(80)
|
|
36999
|
+
}), HubAddressBookSchema, {
|
|
37000
|
+
kind: "mutation",
|
|
37001
|
+
auth: "admin"
|
|
37002
|
+
}),
|
|
37003
|
+
/** Remove a custom address. Its role flags go with it (those roles turn automatic). */
|
|
37004
|
+
removeCustomAddress: method(zod.z.object({ baseUrl: zod.z.string() }), HubAddressBookSchema, {
|
|
36791
37005
|
kind: "mutation",
|
|
36792
37006
|
auth: "admin"
|
|
36793
37007
|
}),
|
|
36794
37008
|
/**
|
|
37009
|
+
* Flag (`enabled: true`) or unflag an address for a role. For a
|
|
37010
|
+
* single-valued role, flagging moves the flag off every other address.
|
|
37011
|
+
* `baseUrl: null` returns the role to automatic. The address must be a row
|
|
37012
|
+
* of the table (detected, custom, or the app link for `notificationTaps`);
|
|
37013
|
+
* `publicEndpoint` on a plain-http address is refused unless
|
|
37014
|
+
* `acceptInsecureHttp`, and never takes the app link.
|
|
37015
|
+
*/
|
|
37016
|
+
setAddressRole: method(zod.z.object({
|
|
37017
|
+
role: HubAddressRoleSchema,
|
|
37018
|
+
baseUrl: zod.z.string().nullable(),
|
|
37019
|
+
enabled: zod.z.boolean(),
|
|
37020
|
+
acceptInsecureHttp: zod.z.boolean().optional()
|
|
37021
|
+
}), HubAddressBookSchema, {
|
|
37022
|
+
kind: "mutation",
|
|
37023
|
+
auth: "admin"
|
|
37024
|
+
}),
|
|
37025
|
+
/**
|
|
37026
|
+
* @deprecated Read `getAddresses().roles.internal` / `.publicEndpoint`.
|
|
37027
|
+
* Kept so an addon built against the D729 amendment keeps resolving:
|
|
37028
|
+
* `cluster` = the `internal` role, `browser` = the `publicEndpoint` role.
|
|
37029
|
+
*/
|
|
37030
|
+
getHubAddresses: method(zod.z.void(), HubAddressesSchema),
|
|
37031
|
+
/**
|
|
36795
37032
|
* Read the operator's allowlist. Empty = "auto" (no filter). Used
|
|
36796
37033
|
* by the admin UI's address selector to seed its checkbox state.
|
|
36797
37034
|
*/
|
|
@@ -49886,12 +50123,24 @@ var METHOD_ACCESS_MAP = Object.freeze({
|
|
|
49886
50123
|
addonId: null,
|
|
49887
50124
|
access: "view"
|
|
49888
50125
|
},
|
|
50126
|
+
"localNetwork.addCustomAddress": {
|
|
50127
|
+
capName: "local-network",
|
|
50128
|
+
capScope: "system",
|
|
50129
|
+
addonId: null,
|
|
50130
|
+
access: "create"
|
|
50131
|
+
},
|
|
49889
50132
|
"localNetwork.downloadCa": {
|
|
49890
50133
|
capName: "local-network",
|
|
49891
50134
|
capScope: "system",
|
|
49892
50135
|
addonId: null,
|
|
49893
50136
|
access: "view"
|
|
49894
50137
|
},
|
|
50138
|
+
"localNetwork.getAddresses": {
|
|
50139
|
+
capName: "local-network",
|
|
50140
|
+
capScope: "system",
|
|
50141
|
+
addonId: null,
|
|
50142
|
+
access: "view"
|
|
50143
|
+
},
|
|
49895
50144
|
"localNetwork.getAllowedAddresses": {
|
|
49896
50145
|
capName: "local-network",
|
|
49897
50146
|
capScope: "system",
|
|
@@ -49946,6 +50195,12 @@ var METHOD_ACCESS_MAP = Object.freeze({
|
|
|
49946
50195
|
addonId: null,
|
|
49947
50196
|
access: "create"
|
|
49948
50197
|
},
|
|
50198
|
+
"localNetwork.removeCustomAddress": {
|
|
50199
|
+
capName: "local-network",
|
|
50200
|
+
capScope: "system",
|
|
50201
|
+
addonId: null,
|
|
50202
|
+
access: "delete"
|
|
50203
|
+
},
|
|
49949
50204
|
"localNetwork.resetAllowlistToBestMatch": {
|
|
49950
50205
|
capName: "local-network",
|
|
49951
50206
|
capScope: "system",
|
|
@@ -49958,13 +50213,13 @@ var METHOD_ACCESS_MAP = Object.freeze({
|
|
|
49958
50213
|
addonId: null,
|
|
49959
50214
|
access: "create"
|
|
49960
50215
|
},
|
|
49961
|
-
"localNetwork.
|
|
50216
|
+
"localNetwork.setAddressRole": {
|
|
49962
50217
|
capName: "local-network",
|
|
49963
50218
|
capScope: "system",
|
|
49964
50219
|
addonId: null,
|
|
49965
50220
|
access: "create"
|
|
49966
50221
|
},
|
|
49967
|
-
"localNetwork.
|
|
50222
|
+
"localNetwork.setAllowedAddresses": {
|
|
49968
50223
|
capName: "local-network",
|
|
49969
50224
|
capScope: "system",
|
|
49970
50225
|
addonId: null,
|
|
@@ -54218,6 +54473,12 @@ var METHOD_ACCESS_MAP = Object.freeze({
|
|
|
54218
54473
|
addonId: null,
|
|
54219
54474
|
access: "create"
|
|
54220
54475
|
},
|
|
54476
|
+
"webrtcSession.applyDownlinkProbe": {
|
|
54477
|
+
capName: "webrtc-session",
|
|
54478
|
+
capScope: "device",
|
|
54479
|
+
addonId: null,
|
|
54480
|
+
access: "create"
|
|
54481
|
+
},
|
|
54221
54482
|
"webrtcSession.closeSession": {
|
|
54222
54483
|
capName: "webrtc-session",
|
|
54223
54484
|
capScope: "device",
|
|
@@ -58395,6 +58656,11 @@ Object.freeze({
|
|
|
58395
58656
|
form: "single",
|
|
58396
58657
|
optional: false
|
|
58397
58658
|
}],
|
|
58659
|
+
"webrtcSession.applyDownlinkProbe": [{
|
|
58660
|
+
name: "deviceId",
|
|
58661
|
+
form: "single",
|
|
58662
|
+
optional: false
|
|
58663
|
+
}],
|
|
58398
58664
|
"webrtcSession.closeSession": [{
|
|
58399
58665
|
name: "deviceId",
|
|
58400
58666
|
form: "single",
|
|
@@ -60418,6 +60684,12 @@ Object.defineProperty(exports, "cameraGridLayoutCapability", {
|
|
|
60418
60684
|
return cameraGridLayoutCapability;
|
|
60419
60685
|
}
|
|
60420
60686
|
});
|
|
60687
|
+
Object.defineProperty(exports, "checkRoleAddress", {
|
|
60688
|
+
enumerable: true,
|
|
60689
|
+
get: function() {
|
|
60690
|
+
return checkRoleAddress;
|
|
60691
|
+
}
|
|
60692
|
+
});
|
|
60421
60693
|
Object.defineProperty(exports, "cloneStatefulExpressionMemory", {
|
|
60422
60694
|
enumerable: true,
|
|
60423
60695
|
get: function() {
|
|
@@ -60706,6 +60978,12 @@ Object.defineProperty(exports, "hydrateSchema", {
|
|
|
60706
60978
|
return hydrateSchema;
|
|
60707
60979
|
}
|
|
60708
60980
|
});
|
|
60981
|
+
Object.defineProperty(exports, "isAppLinkBase", {
|
|
60982
|
+
enumerable: true,
|
|
60983
|
+
get: function() {
|
|
60984
|
+
return isAppLinkBase;
|
|
60985
|
+
}
|
|
60986
|
+
});
|
|
60709
60987
|
Object.defineProperty(exports, "isArrayOutputSchema", {
|
|
60710
60988
|
enumerable: true,
|
|
60711
60989
|
get: function() {
|
|
@@ -60718,6 +60996,12 @@ Object.defineProperty(exports, "isCollectionArrayMethod", {
|
|
|
60718
60996
|
return isCollectionArrayMethod;
|
|
60719
60997
|
}
|
|
60720
60998
|
});
|
|
60999
|
+
Object.defineProperty(exports, "isDefaultAppConnectionEndpoint", {
|
|
61000
|
+
enumerable: true,
|
|
61001
|
+
get: function() {
|
|
61002
|
+
return isDefaultAppConnectionEndpoint;
|
|
61003
|
+
}
|
|
61004
|
+
});
|
|
60721
61005
|
Object.defineProperty(exports, "isDeviceConfigCap", {
|
|
60722
61006
|
enumerable: true,
|
|
60723
61007
|
get: function() {
|
|
@@ -60934,6 +61218,12 @@ Object.defineProperty(exports, "replacedFieldKeys", {
|
|
|
60934
61218
|
return replacedFieldKeys;
|
|
60935
61219
|
}
|
|
60936
61220
|
});
|
|
61221
|
+
Object.defineProperty(exports, "resolveAppConnections", {
|
|
61222
|
+
enumerable: true,
|
|
61223
|
+
get: function() {
|
|
61224
|
+
return resolveAppConnections;
|
|
61225
|
+
}
|
|
61226
|
+
});
|
|
60937
61227
|
Object.defineProperty(exports, "resolveBucketMs", {
|
|
60938
61228
|
enumerable: true,
|
|
60939
61229
|
get: function() {
|
|
@@ -60958,10 +61248,10 @@ Object.defineProperty(exports, "resolveCoreBlockFiles", {
|
|
|
60958
61248
|
return resolveCoreBlockFiles;
|
|
60959
61249
|
}
|
|
60960
61250
|
});
|
|
60961
|
-
Object.defineProperty(exports, "
|
|
61251
|
+
Object.defineProperty(exports, "resolveHubAddressRoles", {
|
|
60962
61252
|
enumerable: true,
|
|
60963
61253
|
get: function() {
|
|
60964
|
-
return
|
|
61254
|
+
return resolveHubAddressRoles;
|
|
60965
61255
|
}
|
|
60966
61256
|
});
|
|
60967
61257
|
Object.defineProperty(exports, "resolveLocationMode", {
|
|
@@ -60976,6 +61266,12 @@ Object.defineProperty(exports, "resolveMethodAuth", {
|
|
|
60976
61266
|
return resolveMethodAuth;
|
|
60977
61267
|
}
|
|
60978
61268
|
});
|
|
61269
|
+
Object.defineProperty(exports, "resolveNotificationTapAddress", {
|
|
61270
|
+
enumerable: true,
|
|
61271
|
+
get: function() {
|
|
61272
|
+
return resolveNotificationTapAddress;
|
|
61273
|
+
}
|
|
61274
|
+
});
|
|
60979
61275
|
Object.defineProperty(exports, "runtimeStatePolicyFor", {
|
|
60980
61276
|
enumerable: true,
|
|
60981
61277
|
get: function() {
|
|
@@ -61090,10 +61386,10 @@ Object.defineProperty(exports, "validateComposition", {
|
|
|
61090
61386
|
return validateComposition;
|
|
61091
61387
|
}
|
|
61092
61388
|
});
|
|
61093
|
-
Object.defineProperty(exports, "
|
|
61389
|
+
Object.defineProperty(exports, "validateCustomAddress", {
|
|
61094
61390
|
enumerable: true,
|
|
61095
61391
|
get: function() {
|
|
61096
|
-
return
|
|
61392
|
+
return validateCustomAddress;
|
|
61097
61393
|
}
|
|
61098
61394
|
});
|
|
61099
61395
|
Object.defineProperty(exports, "vectorDimFromBase64", {
|