@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.
Files changed (65) hide show
  1. package/dist/addon-runner.js +1 -1
  2. package/dist/addon-runner.mjs +1 -1
  3. package/dist/builtins/addon-pages-aggregator/addon-pages-aggregator.addon.js +1 -1
  4. package/dist/builtins/addon-pages-aggregator/addon-pages-aggregator.addon.mjs +1 -1
  5. package/dist/builtins/addon-widgets-aggregator/addon-widgets-aggregator.addon.js +1 -1
  6. package/dist/builtins/addon-widgets-aggregator/addon-widgets-aggregator.addon.mjs +1 -1
  7. package/dist/builtins/alerts/alerts.addon.js +1 -1
  8. package/dist/builtins/alerts/alerts.addon.mjs +1 -1
  9. package/dist/builtins/autotrack/index.js +1 -1
  10. package/dist/builtins/autotrack/index.mjs +1 -1
  11. package/dist/builtins/backup-orchestrator/backup-orchestrator.addon.js +1 -1
  12. package/dist/builtins/backup-orchestrator/backup-orchestrator.addon.mjs +1 -1
  13. package/dist/builtins/calendars/calendars.addon.js +1 -1
  14. package/dist/builtins/calendars/calendars.addon.mjs +1 -1
  15. package/dist/builtins/camera-grid/index.js +1 -1
  16. package/dist/builtins/camera-grid/index.mjs +1 -1
  17. package/dist/builtins/composer/composer.addon.js +2 -2
  18. package/dist/builtins/composer/composer.addon.mjs +2 -2
  19. package/dist/builtins/console-logging/index.js +1 -1
  20. package/dist/builtins/console-logging/index.mjs +1 -1
  21. package/dist/builtins/core-blocks/core-blocks.addon.js +2 -2
  22. package/dist/builtins/core-blocks/core-blocks.addon.mjs +2 -2
  23. package/dist/builtins/device-manager/device-manager.addon.js +2 -2
  24. package/dist/builtins/device-manager/device-manager.addon.mjs +2 -2
  25. package/dist/builtins/hub-forwarder/index.js +1 -1
  26. package/dist/builtins/hub-forwarder/index.mjs +1 -1
  27. package/dist/builtins/liveness-monitor/liveness-monitor.addon.js +1 -1
  28. package/dist/builtins/liveness-monitor/liveness-monitor.addon.mjs +1 -1
  29. package/dist/builtins/local-auth/local-auth.addon.js +1 -1
  30. package/dist/builtins/local-auth/local-auth.addon.mjs +1 -1
  31. package/dist/builtins/local-network/address-book.d.ts +69 -0
  32. package/dist/builtins/local-network/local-network.addon.d.ts +43 -47
  33. package/dist/builtins/local-network/local-network.addon.js +366 -81
  34. package/dist/builtins/local-network/local-network.addon.mjs +367 -80
  35. package/dist/builtins/loki-logging/index.js +1 -1
  36. package/dist/builtins/loki-logging/index.mjs +1 -1
  37. package/dist/builtins/native-metrics/native-metrics.addon.js +1 -1
  38. package/dist/builtins/native-metrics/native-metrics.addon.mjs +1 -1
  39. package/dist/builtins/platform-probe/index.js +1 -1
  40. package/dist/builtins/platform-probe/index.mjs +1 -1
  41. package/dist/builtins/remote-access-orchestrator/remote-access-orchestrator.addon.js +1 -1
  42. package/dist/builtins/remote-access-orchestrator/remote-access-orchestrator.addon.mjs +1 -1
  43. package/dist/builtins/snapshot/index.js +1 -1
  44. package/dist/builtins/snapshot/index.mjs +1 -1
  45. package/dist/builtins/sqlite-storage/filesystem-storage.addon.js +1 -1
  46. package/dist/builtins/sqlite-storage/filesystem-storage.addon.mjs +1 -1
  47. package/dist/builtins/sqlite-storage/sqlite-settings.addon.js +0 -0
  48. package/dist/builtins/sqlite-storage/sqlite-settings.addon.mjs +0 -0
  49. package/dist/builtins/storage-orchestrator/storage-orchestrator.addon.js +1 -1
  50. package/dist/builtins/storage-orchestrator/storage-orchestrator.addon.mjs +1 -1
  51. package/dist/builtins/system-config/system-config.addon.js +1 -1
  52. package/dist/builtins/system-config/system-config.addon.mjs +1 -1
  53. package/dist/builtins/winston-logging/index.js +1 -1
  54. package/dist/builtins/winston-logging/index.mjs +1 -1
  55. package/dist/{child-cap-dispatch-C2dFiu87.mjs → child-cap-dispatch-StBHObCA.mjs} +1 -1
  56. package/dist/{child-cap-dispatch-BWk99kmA.js → child-cap-dispatch-T3Kdhbb3.js} +1 -1
  57. package/dist/{composition-sources-D8Hapyav.mjs → composition-sources-DASc7NBj.mjs} +1 -1
  58. package/dist/{composition-sources-BaHPH661.js → composition-sources-DFgayxCc.js} +1 -1
  59. package/dist/{dist-D3bhbMY3.mjs → dist-C9Rk6KVv.mjs} +381 -115
  60. package/dist/{dist-DzAHit0a.js → dist-Cv1lnnQq.js} +414 -118
  61. package/dist/index.js +2 -2
  62. package/dist/index.mjs +2 -2
  63. package/dist/{retired-settings-keys-CkXoPjKy.js → retired-settings-keys-BGNqRNhu.js} +1 -1
  64. package/dist/{retired-settings-keys-B6AFmtlO.mjs → retired-settings-keys-BjG8bQVI.mjs} +1 -1
  65. 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-DXKLNFvA.mjs
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 audience's answer. */
17205
- function rankFor(audience, endpoint) {
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 (audience === "cluster") {
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 override: an http(s) URL with a host, no
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 validateHubAddressOverride(raw) {
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
- /** {@link pickHubBaseUrl}, saying where the answer came from. */
17279
- function resolveHubAddress(endpoints, audience, override) {
17280
- if (override !== null && override !== "") {
17281
- const check = validateHubAddressOverride(override);
17282
- if (check.ok) return {
17283
- override,
17284
- resolved: check.baseUrl,
17285
- source: "override"
17286
- };
17287
- }
17288
- const auto = pickFromPalette(endpoints, audience);
17289
- return {
17290
- override: override === null || override === "" ? null : override,
17291
- resolved: auto,
17292
- source: auto === null ? "none" : "auto"
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;
17294
17364
  }
17295
- function pickFromPalette(endpoints, audience) {
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;
17370
+ }
17371
+ function pickAuto(endpoints, role) {
17296
17372
  const best = endpoints.flatMap((endpoint) => {
17297
- const rank = rankFor(audience, endpoint);
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.replace(/\/+$/, "");
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 = 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: z.boolean().optional()
22022
+ notifySensorRewatched: 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: z.boolean().optional()
21864
22029
  });
21865
22030
  var NcAlarmModeDelaysListSchema = z.array(NcAlarmModeDelaysSchema).max(8).refine(uniqueModes, { message: "modeDelays: at most one entry per arm mode" });
21866
22031
  /**
@@ -21879,7 +22044,9 @@ var NcAlarmModeDelaysEditSchema = z.object({
21879
22044
  /** D706: set the switch, or `null` to clear it (back to the default, false). */
21880
22045
  notifyDuringEntryDelay: z.boolean().nullable().optional(),
21881
22046
  /** D706: set the switch, or `null` to clear it (back to the default, false). */
21882
- notifySensorRewatched: z.boolean().nullable().optional()
22047
+ notifySensorRewatched: z.boolean().nullable().optional(),
22048
+ /** D735: set the switch, or `null` to clear it (back to the default, false). */
22049
+ notifySensorIgnored: z.boolean().nullable().optional()
21883
22050
  });
21884
22051
  var NcAlarmModeDelaysEditListSchema = 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: 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(z.object({
32380
+ deviceId: z.number().int().nonnegative(),
32381
+ sessionId: z.string(),
32382
+ downlinkMbps: z.number().nonnegative()
32383
+ }), z.object({
32384
+ outcome: z.enum(["switching", "held"]),
32385
+ tier: CamProfileSchema.nullable(),
32386
+ reason: 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 = 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 = z.object({
36586
36739
  localPort: AdvertisedLocalPortSchema
36587
36740
  });
36588
36741
  /**
36589
- * The address flagged for notification links. `baseUrl: null` = AUTO, which
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 = z.object({
36620
36773
  resolved: z.array(z.string()).readonly()
36621
36774
  });
36622
36775
  /**
36623
- * One audience's hub address (see `hub-address.ts`): the operator's stored
36624
- * override, the address in use, and where it came from.
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 = z.object({
36627
- /** The operator's override, or null for automatic. */
36628
36781
  override: z.string().nullable(),
36629
- /** The address in use, or null when nothing qualifies (never loopback). */
36630
36782
  resolved: z.string().nullable(),
36631
36783
  source: z.enum([
36632
36784
  "override",
@@ -36635,11 +36787,63 @@ var HubAddressSnapshotSchema = z.object({
36635
36787
  ])
36636
36788
  });
36637
36789
  var HubAddressesSchema = 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 = z.enum(HUB_ADDRESS_ROLES);
36799
+ var RoleSourceSchema = 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 = z.object({
36806
+ /** The address carrying the flag, or null = automatic. */
36807
+ flagged: z.string().nullable(),
36808
+ /** The address in use, or null when nothing qualifies (never loopback). */
36809
+ resolved: z.string().nullable(),
36810
+ source: RoleSourceSchema
36811
+ });
36812
+ var HubAppConnectionsResolutionSchema = z.object({
36813
+ /** The addresses flagged `appConnections`, or empty = automatic. */
36814
+ flagged: z.array(z.string()).readonly(),
36815
+ /** What the apps race right now. */
36816
+ resolved: z.array(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: z.boolean(),
36827
+ /** Entered by the operator (removable). */
36828
+ custom: z.boolean(),
36829
+ /** The roles explicitly flagged on this address. */
36830
+ flags: z.array(HubAddressRoleSchema).readonly(),
36831
+ /** The roles this address serves right now — flagged or automatic. */
36832
+ inUse: z.array(HubAddressRoleSchema).readonly(),
36833
+ /** The roles this address may be flagged with. */
36834
+ eligible: z.array(HubAddressRoleSchema).readonly()
36835
+ });
36836
+ var HubAddressBookSchema = z.object({
36837
+ rows: z.array(HubAddressRowSchema).readonly(),
36838
+ roles: 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: z.string().nullable()
36846
+ });
36643
36847
  var AllowedAddressesSchema = 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: z.enum(["http", "https"]).optional(),
36732
36936
  /** Append the CamStack app link entry (`kind: 'app-link'`, D709) —
36733
- * an address notification links can be flagged with, not a hub
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: z.boolean().optional()
36736
36940
  }), GetConnectionEndpointsResultSchema),
36737
36941
  /**
36738
- * The address notification links are flagged with. `baseUrl: null` means
36739
- * AUTO, which is the CamStack app link (D709): viewer taps go through
36740
- * `https://camstack.zentik.app/…?hub=<appLinkHub>` and open the app. Any
36741
- * hub address the palette lists can be flagged instead; then viewer taps,
36742
- * attachment links and action buttons all use it. Signed media and
36743
- * buttons never use the app link — with it flagged (or AUTO) they keep
36744
- * the ranked hub ladder (a configured origin, a connected tunnel, then
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,45 +36955,79 @@ var localNetworkCapability = {
36752
36955
  */
36753
36956
  getNotificationEndpoint: method(z.void(), NotificationEndpointSchema),
36754
36957
  /**
36755
- * Mark which endpoint notification artifacts use. `baseUrl: null` restores
36756
- * AUTO. The value is stored verbatim (not an index into the candidate
36757
- * list): interfaces come and go, and an index would silently re-point at a
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(z.object({ baseUrl: z.string().nullable() }), NotificationEndpointSchema, { kind: "mutation" }),
36761
36963
  /**
36762
- * The endpoints the SDK / viewer races for API access. Empty `baseUrls`
36763
- * means AUTO: every LAN IPv4 address plus the public tunnel, never IPv6,
36764
- * never mesh, never loopback. `resolved` is that set (or the operator's
36765
- * explicit subset) as it stands right now.
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(z.void(), ViewerEndpointsSchema),
36768
36971
  /**
36769
- * Replace the viewer race set. Empty `baseUrls` restores AUTO. Stored
36770
- * verbatim (not indices) so a temporarily-down tunnel is not silently
36771
- * dropped from the operator's choice.
36972
+ * @deprecated Use `setAddressRole({ role: 'appConnections', … })`. It
36973
+ * replaces the same `appConnections` flags.
36974
+ * Empty `baseUrls` restores automatic.
36772
36975
  */
36773
36976
  setViewerEndpoints: method(z.object({ baseUrls: z.array(z.string()).readonly() }), ViewerEndpointsSchema, { kind: "mutation" }),
36774
36977
  /**
36775
- * The hub's address for each audience — agents (`cluster`) and sign-in
36776
- * links (`browser`) — as every consumer must read it: the operator's
36777
- * override when set, else the automatic pick from this cap's palette,
36778
- * never loopback. The ONE answer to "at which address is this hub
36779
- * reached?"; there is no environment variable for it.
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
- getHubAddresses: method(z.void(), HubAddressesSchema),
36989
+ getAddresses: method(z.object({ scheme: z.enum(["http", "https"]).optional() }).optional(), HubAddressBookSchema),
36782
36990
  /**
36783
- * Set or clear (`baseUrl: null`) one audience's override. Validated: an
36784
- * http(s) origin with a host, no credentials, no path, never loopback —
36785
- * an invalid value is refused with the reason, nothing is stored.
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
- setHubAddress: method(z.object({
36788
- audience: z.enum(["cluster", "browser"]),
36789
- baseUrl: z.string().nullable()
36790
- }), HubAddressesSchema, {
36996
+ addCustomAddress: method(z.object({
36997
+ baseUrl: z.string(),
36998
+ label: z.string().max(80)
36999
+ }), HubAddressBookSchema, {
36791
37000
  kind: "mutation",
36792
37001
  auth: "admin"
36793
37002
  }),
37003
+ /** Remove a custom address. Its role flags go with it (those roles turn automatic). */
37004
+ removeCustomAddress: method(z.object({ baseUrl: z.string() }), HubAddressBookSchema, {
37005
+ kind: "mutation",
37006
+ auth: "admin"
37007
+ }),
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(z.object({
37017
+ role: HubAddressRoleSchema,
37018
+ baseUrl: z.string().nullable(),
37019
+ enabled: z.boolean(),
37020
+ acceptInsecureHttp: 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(z.void(), HubAddressesSchema),
36794
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.
@@ -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.setAllowedAddresses": {
50216
+ "localNetwork.setAddressRole": {
49962
50217
  capName: "local-network",
49963
50218
  capScope: "system",
49964
50219
  addonId: null,
49965
50220
  access: "create"
49966
50221
  },
49967
- "localNetwork.setHubAddress": {
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",
@@ -59998,4 +60264,4 @@ function enumerateInferenceDevices(hw) {
59998
60264
  return out;
59999
60265
  }
60000
60266
  //#endregion
60001
- export { calendarsCapability as $, errMsg as $n, motionCapability as $t, MOTION_CLOSE_AFTER_MS as A, streamQualityLabel as An, filesystemBrowseCapability as At, StorageLocationTypeSchema as B, cloneStatefulExpressionMemory as Bn, legacyAutoLinkIds as Bt, FieldClaimModeSchema as C, siteZoneKey as Cn, sleep as Cr, enumerateItemArrayFields as Ct, LocationIconIdSchema as D, storageOccupancyCapability as Dn, expandContainer as Dt, LegacyStorageLocationDefaultSchema as E, storageMigrationCapability as En, evictionPolicyOfLocation as Et, STORAGE_ACCESS_FALLBACK as F, vectorIndexDimConflictError as Fn, isCollectionArrayMethod as Ft, addonWidgetsCapability as G, compositionSliceKey as Gn, logDestinationCapability as Gt, UserRecordSchema as H, composedDeviceStableId as Hn, lifecycleJobSchema as Ht, STREAM_PROFILE_META as I, vectorStoreCapability as In, isLocationEnabled as It, backupCapability as J, disarmRoseMemory as Jn, mayReadLocation as Jt, alertsCapability as K, compositionSourceKey as Kn, logLevelAtMost as Kt, ScopedTokenSchema as L, withLocationMode as Ln, isObjectInput as Lt, REDACTED_SECRET as M, validateComposition as Mn, formatMinutes as Mt, RUNTIME_DEFAULTS as N, validateHubAddressOverride as Nn, gbToBytes as Nt, METHOD_ACCESS_MAP as O, storageProviderCapability as On, expressionContainsBuiltinCall as Ot, RecordingStatusSchema as P, vectorDimFromBase64 as Pn, isArrayOutputSchema as Pt, buildStreamParamsConfigSchema as Q, DeviceType as Qn, modeMayWrite as Qt, StorageCleanupJobSchema as R, COMPOSER_ADDON_ID as Rn, isVoidInput as Rt, FIRST_LEVEL_MACRO_CLASSES as S, settingsStoreCapability as Sn, scopeKey as Sr, enumerateInferenceDevices as St, LOG_LEVEL_RANK as T, storageCapability as Tn, EventCategory as Tr, evaluateCompositionField as Tt, addonPagesCapability as U, compositionFeatureEnabled as Un, localNetworkCapability as Ut, StorageMigrationJobSchema as V, composedDeviceRef as Vn, legacyModeOf as Vt, addonSettingsCapability as W, compositionItemFieldPath as Wn, locationIconKey as Wt, batteryCapability as X, DeviceFeature as Xn, memoizePinnedFfmpeg as Xt, bareAddonId as Y, toExpressionValue as Yn, mayWriteToLocation as Yt, buildCapabilityLookup as Z, DeviceRole as Zn, metricsProviderCapability as Zt, DATABASE_SNAPSHOT_TIMEOUT_MS as _, resolveMethodAuth as _n, nodePin as _r, describeComposableCaps as _t, BatteryStatusSchema as a, pickAppLinkHub as an, ReadinessTimeoutError as ar, coreBlockAddonId as at, DeclaredDevices as b, scopesAllowDeviceCap as bn, readinessKey as br, deviceStateCapability as bt, CAP_NAMES_WITH_STATUS as c, procedureAuthKey as cn, asNumber as cr, coreBlockSourceKind as ct, CORE_BLOCKS_ADDON_ID as d, replacedFieldKeys as dn, emitDownForOwnedCaps as dr, dataStoreProviderCapability as dt, normalizeCoreBlockWrite as en, BaseAddon as er, cameraGridLayoutCapability as et, CORE_BLOCK_ADDON_PREFIX as f, resolveBucketMs as fn, emitReadiness as fr, databaseSnapshotCapability as ft, DATABASE_SNAPSHOT_SUFFIX as g, resolveLocationMode as gn, isEvent as gr, deriveBatteryPresence as gt, DATABASE_SNAPSHOT_PARTIAL_SUFFIX as h, resolveHubAddress as hn, isDeviceConfigCap as hr, defineExtensionSlotProvider as ht, BaseDevice as i, parseStreamParamsFormPatch as in, ReadinessRegistry as ir, compositionSourceRefs as it, RECORDING_SOURCE_CAMSTACK_ADDON as j, userManagementCapability as jn, foldSnapshotByFunction as jt, MINUTES_PER_DAY as k, streamCatalogCapability as kn, extractNestedAddonId as kt, COMPOSED_ITEM_FIXED_FIELDS as l, ptzAutotrackCapability as ln, asString$1 as lr, coreBlocksCapability as lt, CoreBlockSchema as m, resolveCoreBlockFiles as mn, hydrateSchema as mr, decodeVectorBase64 as mt, AlertSchema as n, objectInputDeclaresAddonId as nn, DEVICE_SETTINGS_CONTRIBUTION_METHODS as nr, composerCapability as nt, CAMERA_SWITCH_ORDER as o, planComposition as on, WELL_KNOWN_TAB_MAP as or, coreBlockComposition as ot, CalendarPreferencesSchema as p, resolveCoreBlockEntry as pn, expandCapMethods as pr, declarationOwnerNodeId as pt, authProviderCapability as q, createStatefulExpressionMemory as qn, looseSchema as qt, ApiKeyRecordSchema as r, objectInputDeclaresRequiredDeviceId as rn, DEVICE_STATUS_METHOD as rr, compositionFieldKey as rt, CAMSTACK_APP_LINK_ORIGIN as s, platformProbeCapability as sn, asJsonObject as sr, coreBlockIdFromAddonId as st, ALL_CAPABILITY_DEFINITIONS as t, normalizeUnit as tn, DATAPLANE_SECRET_HEADER as tr, collectSecretConfigKeys as tt, COMPOSER_RUNNER_ID as u, reducePoints as un, createEvent as ur, createDeviceExtensionProvider as ut, DAY_NAMES as v, runtimeStatePolicyFor as vn, parseJsonObject as vr, deviceExtensionCapability as vt, FieldClaimSchema as w, snapshotCapability as wn, toNodeId as wr, enumerateSchemaFields as wt, DeviceStatusSchema as x, scoreRuntimes as xn, resolveCapMount as xr, deviceStatusCapability as xt, DERIVED_CAMERA_SILENCED_CAP_NAMES as y, scopesAllowAddon as yn, parseJsonUnknown as yr, deviceManagerCapability as yt, StorageLocationModeSchema as z, buildFfmpegArgs as zn, kebabToCamel as zt };
60267
+ export { calendarsCapability as $, disarmRoseMemory as $n, memoizePinnedFfmpeg as $t, MOTION_CLOSE_AFTER_MS as A, storageCapability as An, EventCategory as Ar, extractNestedAddonId as At, StorageLocationTypeSchema as B, vectorIndexDimConflictError as Bn, isObjectInput as Bt, FieldClaimModeSchema as C, runtimeStatePolicyFor as Cn, parseJsonObject as Cr, enumerateInferenceDevices as Ct, LocationIconIdSchema as D, settingsStoreCapability as Dn, scopeKey as Dr, evictionPolicyOfLocation as Dt, LegacyStorageLocationDefaultSchema as E, scoreRuntimes as En, resolveCapMount as Er, evaluateCompositionField as Et, STORAGE_ACCESS_FALLBACK as F, streamQualityLabel as Fn, isAppLinkBase as Ft, addonWidgetsCapability as G, cloneStatefulExpressionMemory as Gn, lifecycleJobSchema as Gt, UserRecordSchema as H, withLocationMode as Hn, kebabToCamel as Ht, STREAM_PROFILE_META as I, userManagementCapability as In, isArrayOutputSchema as It, backupCapability as J, compositionFeatureEnabled as Jn, logDestinationCapability as Jt, alertsCapability as K, composedDeviceRef as Kn, localNetworkCapability as Kt, ScopedTokenSchema as L, validateComposition as Ln, isCollectionArrayMethod as Lt, REDACTED_SECRET as M, storageOccupancyCapability as Mn, foldSnapshotByFunction as Mt, RUNTIME_DEFAULTS as N, storageProviderCapability as Nn, formatMinutes as Nt, METHOD_ACCESS_MAP as O, siteZoneKey as On, sleep as Or, expandContainer as Ot, RecordingStatusSchema as P, streamCatalogCapability as Pn, gbToBytes as Pt, buildStreamParamsConfigSchema as Q, createStatefulExpressionMemory as Qn, mayWriteToLocation as Qt, StorageCleanupJobSchema as R, validateCustomAddress as Rn, isDefaultAppConnectionEndpoint as Rt, FIRST_LEVEL_MACRO_CLASSES as S, resolveNotificationTapAddress as Sn, nodePin as Sr, deviceStatusCapability as St, LOG_LEVEL_RANK as T, scopesAllowDeviceCap as Tn, readinessKey as Tr, enumerateSchemaFields as Tt, addonPagesCapability as U, COMPOSER_ADDON_ID as Un, legacyAutoLinkIds as Ut, StorageMigrationJobSchema as V, vectorStoreCapability as Vn, isVoidInput as Vt, addonSettingsCapability as W, buildFfmpegArgs as Wn, legacyModeOf as Wt, batteryCapability as X, compositionSliceKey as Xn, looseSchema as Xt, bareAddonId as Y, compositionItemFieldPath as Yn, logLevelAtMost as Yt, buildCapabilityLookup as Z, compositionSourceKey as Zn, mayReadLocation as Zt, DATABASE_SNAPSHOT_TIMEOUT_MS as _, resolveCoreBlockEntry as _n, emitReadiness as _r, deriveBatteryPresence as _t, BatteryStatusSchema as a, objectInputDeclaresAddonId as an, BaseAddon as ar, compositionSourceRefs as at, DeclaredDevices as b, resolveLocationMode as bn, isDeviceConfigCap as br, deviceManagerCapability as bt, CAP_NAMES_WITH_STATUS as c, pickAppLinkHub as cn, DEVICE_STATUS_METHOD as cr, coreBlockIdFromAddonId as ct, CORE_BLOCKS_ADDON_ID as d, procedureAuthKey as dn, WELL_KNOWN_TAB_MAP as dr, createDeviceExtensionProvider as dt, metricsProviderCapability as en, toExpressionValue as er, cameraGridLayoutCapability as et, CORE_BLOCK_ADDON_PREFIX as f, ptzAutotrackCapability as fn, asJsonObject as fr, dataStoreProviderCapability as ft, DATABASE_SNAPSHOT_SUFFIX as g, resolveBucketMs as gn, emitDownForOwnedCaps as gr, defineExtensionSlotProvider as gt, DATABASE_SNAPSHOT_PARTIAL_SUFFIX as h, resolveAppConnections as hn, createEvent as hr, decodeVectorBase64 as ht, BaseDevice as i, normalizeUnit as in, errMsg as ir, compositionFieldKey as it, RECORDING_SOURCE_CAMSTACK_ADDON as j, storageMigrationCapability as jn, filesystemBrowseCapability as jt, MINUTES_PER_DAY as k, snapshotCapability as kn, toNodeId as kr, expressionContainsBuiltinCall as kt, COMPOSED_ITEM_FIXED_FIELDS as l, planComposition as ln, ReadinessRegistry as lr, coreBlockSourceKind as lt, CoreBlockSchema as m, replacedFieldKeys as mn, asString$1 as mr, declarationOwnerNodeId as mt, AlertSchema as n, motionCapability as nn, DeviceRole as nr, collectSecretConfigKeys as nt, CAMERA_SWITCH_ORDER as o, objectInputDeclaresRequiredDeviceId as on, DATAPLANE_SECRET_HEADER as or, coreBlockAddonId as ot, CalendarPreferencesSchema as p, reducePoints as pn, asNumber as pr, databaseSnapshotCapability as pt, authProviderCapability as q, composedDeviceStableId as qn, locationIconKey as qt, ApiKeyRecordSchema as r, normalizeCoreBlockWrite as rn, DeviceType as rr, composerCapability as rt, CAMSTACK_APP_LINK_ORIGIN as s, parseStreamParamsFormPatch as sn, DEVICE_SETTINGS_CONTRIBUTION_METHODS as sr, coreBlockComposition as st, ALL_CAPABILITY_DEFINITIONS as t, modeMayWrite as tn, DeviceFeature as tr, checkRoleAddress as tt, COMPOSER_RUNNER_ID as u, platformProbeCapability as un, ReadinessTimeoutError as ur, coreBlocksCapability as ut, DAY_NAMES as v, resolveCoreBlockFiles as vn, expandCapMethods as vr, describeComposableCaps as vt, FieldClaimSchema as w, scopesAllowAddon as wn, parseJsonUnknown as wr, enumerateItemArrayFields as wt, DeviceStatusSchema as x, resolveMethodAuth as xn, isEvent as xr, deviceStateCapability as xt, DERIVED_CAMERA_SILENCED_CAP_NAMES as y, resolveHubAddressRoles as yn, hydrateSchema as yr, deviceExtensionCapability as yt, StorageLocationModeSchema as z, vectorDimFromBase64 as zn, isLocationEnabled as zt };