@camstack/system 1.2.420 → 1.2.422

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 (70) hide show
  1. package/dist/builtins/addon-pages-aggregator/addon-pages-aggregator.addon.js +1 -1
  2. package/dist/builtins/addon-pages-aggregator/addon-pages-aggregator.addon.mjs +1 -1
  3. package/dist/builtins/addon-widgets-aggregator/addon-widgets-aggregator.addon.js +1 -1
  4. package/dist/builtins/addon-widgets-aggregator/addon-widgets-aggregator.addon.mjs +1 -1
  5. package/dist/builtins/alerts/alerts.addon.js +1 -1
  6. package/dist/builtins/alerts/alerts.addon.mjs +1 -1
  7. package/dist/builtins/autotrack/index.js +1 -1
  8. package/dist/builtins/autotrack/index.mjs +1 -1
  9. package/dist/builtins/backup-orchestrator/backup-orchestrator.addon.js +2 -2
  10. package/dist/builtins/backup-orchestrator/backup-orchestrator.addon.mjs +2 -2
  11. package/dist/builtins/calendars/calendars.addon.js +1 -1
  12. package/dist/builtins/calendars/calendars.addon.mjs +1 -1
  13. package/dist/builtins/camera-grid/index.js +1 -1
  14. package/dist/builtins/camera-grid/index.mjs +1 -1
  15. package/dist/builtins/composer/composer.addon.js +2 -2
  16. package/dist/builtins/composer/composer.addon.mjs +2 -2
  17. package/dist/builtins/console-logging/index.js +1 -1
  18. package/dist/builtins/console-logging/index.mjs +1 -1
  19. package/dist/builtins/core-blocks/core-blocks.addon.js +2 -2
  20. package/dist/builtins/core-blocks/core-blocks.addon.mjs +2 -2
  21. package/dist/builtins/device-manager/contribution-cache.d.ts +18 -1
  22. package/dist/builtins/device-manager/device-aggregation.d.ts +7 -1
  23. package/dist/builtins/device-manager/device-manager.addon.js +53 -8
  24. package/dist/builtins/device-manager/device-manager.addon.mjs +53 -8
  25. package/dist/builtins/hub-forwarder/index.js +1 -1
  26. package/dist/builtins/hub-forwarder/index.mjs +1 -1
  27. package/dist/builtins/keychain/index.js +3 -3
  28. package/dist/builtins/keychain/index.mjs +3 -3
  29. package/dist/builtins/liveness-monitor/liveness-monitor.addon.js +1 -1
  30. package/dist/builtins/liveness-monitor/liveness-monitor.addon.mjs +1 -1
  31. package/dist/builtins/local-auth/local-auth.addon.js +2 -2
  32. package/dist/builtins/local-auth/local-auth.addon.mjs +2 -2
  33. package/dist/builtins/local-network/local-network.addon.js +1 -1
  34. package/dist/builtins/local-network/local-network.addon.mjs +1 -1
  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-backend.d.ts +44 -1
  48. package/dist/builtins/sqlite-storage/sqlite-settings.addon.js +0 -0
  49. package/dist/builtins/sqlite-storage/sqlite-settings.addon.mjs +0 -0
  50. package/dist/builtins/storage-orchestrator/storage-orchestrator.addon.js +3 -1
  51. package/dist/builtins/storage-orchestrator/storage-orchestrator.addon.mjs +3 -1
  52. package/dist/builtins/system-config/system-config.addon.js +2 -2
  53. package/dist/builtins/system-config/system-config.addon.mjs +2 -2
  54. package/dist/builtins/winston-logging/index.js +1 -1
  55. package/dist/builtins/winston-logging/index.mjs +1 -1
  56. package/dist/{composition-sources-OaDYklhR.js → composition-sources-BstNkBVe.js} +1 -1
  57. package/dist/{composition-sources-562ib2dL.mjs → composition-sources-f_VjTBgs.mjs} +1 -1
  58. package/dist/{constants-ik5xtasS.js → constants-CY4vXTV-.js} +1 -1
  59. package/dist/{constants-BeQWXybC.mjs → constants-iLQM7god.mjs} +1 -1
  60. package/dist/{dist-C0wYvAHC.mjs → dist-CHsJCqrf.mjs} +325 -4
  61. package/dist/{dist-DLHPmdoV.js → dist-FSNJUw7p.js} +325 -4
  62. package/dist/index.js +4 -4
  63. package/dist/index.mjs +4 -4
  64. package/dist/{jwt-signing-key-CWmNKLQi.js → jwt-signing-key-CPha_bf7.js} +1 -1
  65. package/dist/{jwt-signing-key-dkTVfsLI.mjs → jwt-signing-key-DUVvfILp.mjs} +1 -1
  66. package/dist/{restore-archive-DZeFVS2l.js → restore-archive-BwGWspP1.js} +1 -1
  67. package/dist/{restore-archive-Bt65Em24.mjs → restore-archive-J_BsGRBy.mjs} +1 -1
  68. package/dist/{retired-settings-keys-BHlKEYNL.mjs → retired-settings-keys-3SMjMqj0.mjs} +1 -1
  69. package/dist/{retired-settings-keys-DibNtLmU.js → retired-settings-keys-BuQBYfu0.js} +1 -1
  70. package/package.json +1 -1
@@ -3,7 +3,7 @@ Object.defineProperties(exports, {
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
5
  const require_chunk = require("../../chunk-Cek0wNdY.js");
6
- const require_dist = require("../../dist-DLHPmdoV.js");
6
+ const require_dist = require("../../dist-FSNJUw7p.js");
7
7
  const require_settle_sources = require("../../settle-sources-Bhsy57y-.js");
8
8
  let node_crypto = require("node:crypto");
9
9
  let node_path = require("node:path");
@@ -1,4 +1,4 @@
1
- import { W as addonPagesCapability, cr as BaseAddon, ei as EventCategory, sr as errMsg } from "../../dist-C0wYvAHC.mjs";
1
+ import { W as addonPagesCapability, cr as BaseAddon, ei as EventCategory, sr as errMsg } from "../../dist-CHsJCqrf.mjs";
2
2
  import { t as settleSourcesWithTimeout } from "../../settle-sources-CDtNC8ub.mjs";
3
3
  import { createHash, randomUUID } from "node:crypto";
4
4
  import * as path$1 from "node:path";
@@ -3,7 +3,7 @@ Object.defineProperties(exports, {
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
5
  const require_chunk = require("../../chunk-Cek0wNdY.js");
6
- const require_dist = require("../../dist-DLHPmdoV.js");
6
+ const require_dist = require("../../dist-FSNJUw7p.js");
7
7
  const require_settle_sources = require("../../settle-sources-Bhsy57y-.js");
8
8
  let node_crypto = require("node:crypto");
9
9
  let node_path = require("node:path");
@@ -1,4 +1,4 @@
1
- import { K as addonWidgetsCapability, cr as BaseAddon, ei as EventCategory, sr as errMsg } from "../../dist-C0wYvAHC.mjs";
1
+ import { K as addonWidgetsCapability, cr as BaseAddon, ei as EventCategory, sr as errMsg } from "../../dist-CHsJCqrf.mjs";
2
2
  import { t as settleSourcesWithTimeout } from "../../settle-sources-CDtNC8ub.mjs";
3
3
  import { createHash, randomUUID } from "node:crypto";
4
4
  import * as path$1 from "node:path";
@@ -3,7 +3,7 @@ Object.defineProperties(exports, {
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
5
  require("../../chunk-Cek0wNdY.js");
6
- const require_dist = require("../../dist-DLHPmdoV.js");
6
+ const require_dist = require("../../dist-FSNJUw7p.js");
7
7
  //#region src/builtins/alerts/device-label.ts
8
8
  /**
9
9
  * Operator-facing device label for alert messages.
@@ -1,4 +1,4 @@
1
- import { cr as BaseAddon, ei as EventCategory, n as AlertSchema, q as alertsCapability, sr as errMsg, wr as createEvent } from "../../dist-C0wYvAHC.mjs";
1
+ import { cr as BaseAddon, ei as EventCategory, n as AlertSchema, q as alertsCapability, sr as errMsg, wr as createEvent } from "../../dist-CHsJCqrf.mjs";
2
2
  //#region src/builtins/alerts/device-label.ts
3
3
  /**
4
4
  * Operator-facing device label for alert messages.
@@ -3,7 +3,7 @@ Object.defineProperties(exports, {
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
5
  require("../../chunk-Cek0wNdY.js");
6
- const require_dist = require("../../dist-DLHPmdoV.js");
6
+ const require_dist = require("../../dist-FSNJUw7p.js");
7
7
  //#region src/builtins/autotrack/autotrack-config.ts
8
8
  var DEFAULT_AUTOTRACK_LOOP_CONFIG = {
9
9
  deadZoneFraction: .5,
@@ -1,4 +1,4 @@
1
- import { Nr as isEvent, S as FIRST_LEVEL_MACRO_CLASSES, X as bareAddonId, cr as BaseAddon, ei as EventCategory, mn as ptzAutotrackCapability, sr as errMsg } from "../../dist-C0wYvAHC.mjs";
1
+ import { Nr as isEvent, S as FIRST_LEVEL_MACRO_CLASSES, X as bareAddonId, cr as BaseAddon, ei as EventCategory, mn as ptzAutotrackCapability, sr as errMsg } from "../../dist-CHsJCqrf.mjs";
2
2
  //#region src/builtins/autotrack/autotrack-config.ts
3
3
  var DEFAULT_AUTOTRACK_LOOP_CONFIG = {
4
4
  deadZoneFraction: .5,
@@ -3,8 +3,8 @@ Object.defineProperties(exports, {
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
5
  const require_chunk = require("../../chunk-Cek0wNdY.js");
6
- const require_dist = require("../../dist-DLHPmdoV.js");
7
- const require_restore_archive = require("../../restore-archive-DZeFVS2l.js");
6
+ const require_dist = require("../../dist-FSNJUw7p.js");
7
+ const require_restore_archive = require("../../restore-archive-BwGWspP1.js");
8
8
  let node_crypto = require("node:crypto");
9
9
  let node_fs_promises = require("node:fs/promises");
10
10
  node_fs_promises = require_chunk.__toESM(node_fs_promises);
@@ -1,5 +1,5 @@
1
- import { Pn as storageOccupancyCapability, Y as backupCapability, Zr as toNodeId, cr as BaseAddon, ei as EventCategory, en as mayWriteToLocation, zr as nodePin } from "../../dist-C0wYvAHC.mjs";
2
- import { a as BackupSnapshotRefusedError, c as BackupKeyFormatError, d as generateBackupKeyPair, f as parseBackupPublicKey, i as BackupCancelledError, n as precheckRestoreKey, o as SystemBackupService, p as parseBackupSecretKey, r as prepareRestoreArchive, u as ENCRYPTED_BACKUP_SUFFIX } from "../../restore-archive-Bt65Em24.mjs";
1
+ import { Pn as storageOccupancyCapability, Y as backupCapability, Zr as toNodeId, cr as BaseAddon, ei as EventCategory, en as mayWriteToLocation, zr as nodePin } from "../../dist-CHsJCqrf.mjs";
2
+ import { a as BackupSnapshotRefusedError, c as BackupKeyFormatError, d as generateBackupKeyPair, f as parseBackupPublicKey, i as BackupCancelledError, n as precheckRestoreKey, o as SystemBackupService, p as parseBackupSecretKey, r as prepareRestoreArchive, u as ENCRYPTED_BACKUP_SUFFIX } from "../../restore-archive-J_BsGRBy.mjs";
3
3
  import { randomUUID } from "node:crypto";
4
4
  import * as fsp from "node:fs/promises";
5
5
  import * as path$1 from "node:path";
@@ -3,7 +3,7 @@ Object.defineProperties(exports, {
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
5
  require("../../chunk-Cek0wNdY.js");
6
- const require_dist = require("../../dist-DLHPmdoV.js");
6
+ const require_dist = require("../../dist-FSNJUw7p.js");
7
7
  const require_settle_sources = require("../../settle-sources-Bhsy57y-.js");
8
8
  let zod = require("zod");
9
9
  //#region src/builtins/calendars/calendar-color.ts
@@ -1,4 +1,4 @@
1
- import { cr as BaseAddon, et as calendarsCapability, p as CalendarPreferencesSchema } from "../../dist-C0wYvAHC.mjs";
1
+ import { cr as BaseAddon, et as calendarsCapability, p as CalendarPreferencesSchema } from "../../dist-CHsJCqrf.mjs";
2
2
  import { t as settleSourcesWithTimeout } from "../../settle-sources-CDtNC8ub.mjs";
3
3
  import { z } from "zod";
4
4
  //#region src/builtins/calendars/calendar-color.ts
@@ -3,7 +3,7 @@ Object.defineProperties(exports, {
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
5
  require("../../chunk-Cek0wNdY.js");
6
- const require_dist = require("../../dist-DLHPmdoV.js");
6
+ const require_dist = require("../../dist-FSNJUw7p.js");
7
7
  let zod = require("zod");
8
8
  let _camstack_types_node = require("@camstack/types/node");
9
9
  let node_path = require("node:path");
@@ -1,4 +1,4 @@
1
- import { In as streamCatalogCapability, N as MOTION_CLOSE_AFTER_MS, b as DeclaredDevices, cr as BaseAddon, ei as EventCategory, i as BaseDevice, in as motionCapability, ir as DeviceFeature, jn as snapshotCapability, jr as hydrateSchema, mt as declarationOwnerNodeId, or as DeviceType, qn as buildFfmpegArgs, sr as errMsg, tn as memoizePinnedFfmpeg, tt as cameraGridLayoutCapability, wr as createEvent, y as DERIVED_CAMERA_SILENCED_CAP_NAMES } from "../../dist-C0wYvAHC.mjs";
1
+ import { In as streamCatalogCapability, N as MOTION_CLOSE_AFTER_MS, b as DeclaredDevices, cr as BaseAddon, ei as EventCategory, i as BaseDevice, in as motionCapability, ir as DeviceFeature, jn as snapshotCapability, jr as hydrateSchema, mt as declarationOwnerNodeId, or as DeviceType, qn as buildFfmpegArgs, sr as errMsg, tn as memoizePinnedFfmpeg, tt as cameraGridLayoutCapability, wr as createEvent, y as DERIVED_CAMERA_SILENCED_CAP_NAMES } from "../../dist-CHsJCqrf.mjs";
2
2
  import { z } from "zod";
3
3
  import { FfmpegProcess } from "@camstack/types/node";
4
4
  import { join } from "node:path";
@@ -3,8 +3,8 @@ Object.defineProperties(exports, {
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
5
  require("../../chunk-Cek0wNdY.js");
6
- const require_dist = require("../../dist-DLHPmdoV.js");
7
- const require_composition_sources = require("../../composition-sources-OaDYklhR.js");
6
+ const require_dist = require("../../dist-FSNJUw7p.js");
7
+ const require_composition_sources = require("../../composition-sources-BstNkBVe.js");
8
8
  let zod = require("zod");
9
9
  //#region src/builtins/shared/device-state-changed.ts
10
10
  /** Structural narrowing helper for untrusted bus payloads. */
@@ -1,5 +1,5 @@
1
- import { $n as compositionSliceKey, Et as evaluateCompositionField, Jn as cloneStatefulExpressionMemory, Kn as COMPOSER_ADDON_ID, Q as buildCapabilityLookup, Qn as compositionItemFieldPath, Xn as composedDeviceStableId, Yn as composedDeviceRef, Zn as compositionFeatureEnabled, b as DeclaredDevices, cr as BaseAddon, dn as planComposition, ei as EventCategory, er as compositionSourceKey, i as BaseDevice, it as compositionFieldKey, kt as expressionContainsBuiltinCall, l as COMPOSED_ITEM_FIXED_FIELDS, nr as disarmRoseMemory, or as DeviceType, rr as toExpressionValue, rt as composerCapability, sr as errMsg, t as ALL_CAPABILITY_DEFINITIONS, tr as createStatefulExpressionMemory, wr as createEvent } from "../../dist-C0wYvAHC.mjs";
2
- import { n as normalizedNativeOwner } from "../../composition-sources-562ib2dL.mjs";
1
+ import { $n as compositionSliceKey, Et as evaluateCompositionField, Jn as cloneStatefulExpressionMemory, Kn as COMPOSER_ADDON_ID, Q as buildCapabilityLookup, Qn as compositionItemFieldPath, Xn as composedDeviceStableId, Yn as composedDeviceRef, Zn as compositionFeatureEnabled, b as DeclaredDevices, cr as BaseAddon, dn as planComposition, ei as EventCategory, er as compositionSourceKey, i as BaseDevice, it as compositionFieldKey, kt as expressionContainsBuiltinCall, l as COMPOSED_ITEM_FIXED_FIELDS, nr as disarmRoseMemory, or as DeviceType, rr as toExpressionValue, rt as composerCapability, sr as errMsg, t as ALL_CAPABILITY_DEFINITIONS, tr as createStatefulExpressionMemory, wr as createEvent } from "../../dist-CHsJCqrf.mjs";
2
+ import { n as normalizedNativeOwner } from "../../composition-sources-f_VjTBgs.mjs";
3
3
  import { z } from "zod";
4
4
  //#region src/builtins/shared/device-state-changed.ts
5
5
  /** Structural narrowing helper for untrusted bus payloads. */
@@ -3,7 +3,7 @@ Object.defineProperties(exports, {
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
5
  require("../../chunk-Cek0wNdY.js");
6
- const require_dist = require("../../dist-DLHPmdoV.js");
6
+ const require_dist = require("../../dist-FSNJUw7p.js");
7
7
  const require_formatter = require("../../formatter-DqAKDlvN.js");
8
8
  //#region src/builtins/console-logging/console-destination.ts
9
9
  var LEVEL_RANK = {
@@ -1,4 +1,4 @@
1
- import { Xt as logDestinationCapability, cr as BaseAddon } from "../../dist-C0wYvAHC.mjs";
1
+ import { Xt as logDestinationCapability, cr as BaseAddon } from "../../dist-CHsJCqrf.mjs";
2
2
  import { t as formatLogLine } from "../../formatter-B7qW8bPJ.mjs";
3
3
  //#region src/builtins/console-logging/console-destination.ts
4
4
  var LEVEL_RANK = {
@@ -1,7 +1,7 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
2
  const require_chunk = require("../../chunk-Cek0wNdY.js");
3
- const require_dist = require("../../dist-DLHPmdoV.js");
4
- const require_composition_sources = require("../../composition-sources-OaDYklhR.js");
3
+ const require_dist = require("../../dist-FSNJUw7p.js");
4
+ const require_composition_sources = require("../../composition-sources-BstNkBVe.js");
5
5
  let node_crypto = require("node:crypto");
6
6
  let _camstack_types_node = require("@camstack/types/node");
7
7
  let node_fs_promises = require("node:fs/promises");
@@ -1,5 +1,5 @@
1
- import { Bn as validateComposition, Q as buildCapabilityLookup, Yn as composedDeviceRef, an as normalizeCoreBlockWrite, at as compositionSourceRefs, b as DeclaredDevices, bn as resolveCoreBlockFiles, cr as BaseAddon, ct as coreBlockIdFromAddonId, d as CORE_BLOCKS_ADDON_ID, dn as planComposition, er as compositionSourceKey, f as CORE_BLOCK_ADDON_PREFIX, gn as replacedFieldKeys, jr as hydrateSchema, lt as coreBlockSourceKind, m as CoreBlockSchema, ot as coreBlockAddonId, sr as errMsg, st as coreBlockComposition, t as ALL_CAPABILITY_DEFINITIONS, u as COMPOSER_RUNNER_ID, ut as coreBlocksCapability, vt as describeComposableCaps, yn as resolveCoreBlockEntry } from "../../dist-C0wYvAHC.mjs";
2
- import { t as describeCompositionSources } from "../../composition-sources-562ib2dL.mjs";
1
+ import { Bn as validateComposition, Q as buildCapabilityLookup, Yn as composedDeviceRef, an as normalizeCoreBlockWrite, at as compositionSourceRefs, b as DeclaredDevices, bn as resolveCoreBlockFiles, cr as BaseAddon, ct as coreBlockIdFromAddonId, d as CORE_BLOCKS_ADDON_ID, dn as planComposition, er as compositionSourceKey, f as CORE_BLOCK_ADDON_PREFIX, gn as replacedFieldKeys, jr as hydrateSchema, lt as coreBlockSourceKind, m as CoreBlockSchema, ot as coreBlockAddonId, sr as errMsg, st as coreBlockComposition, t as ALL_CAPABILITY_DEFINITIONS, u as COMPOSER_RUNNER_ID, ut as coreBlocksCapability, vt as describeComposableCaps, yn as resolveCoreBlockEntry } from "../../dist-CHsJCqrf.mjs";
2
+ import { t as describeCompositionSources } from "../../composition-sources-f_VjTBgs.mjs";
3
3
  import { createRequire } from "node:module";
4
4
  import { randomUUID } from "node:crypto";
5
5
  import { customizationBlockName } from "@camstack/types/node";
@@ -42,6 +42,14 @@ export declare const CONTRIBUTION_BUDGET_MS = 1500;
42
42
  * pays the budget again.
43
43
  */
44
44
  export declare const CONTRIBUTION_CACHE_MAX_ENTRIES = 512;
45
+ /**
46
+ * How long a read waits for a provider's answer when the entry was WRITTEN to
47
+ * since it last answered. Longer than the page budget on purpose: right after a
48
+ * write the only honest answers are the provider's new one or "not yet" — the
49
+ * last cached answer is the pre-write view, and showing it is how a saved
50
+ * setting appeared to snap back.
51
+ */
52
+ export declare const WRITE_READBACK_BUDGET_MS = 8e3;
45
53
  /** How a single provider's contribution was resolved. */
46
54
  export type ContributionOutcome<T> = {
47
55
  readonly kind: "fresh";
@@ -63,6 +71,15 @@ export declare class ContributionCache<T = unknown> {
63
71
  * The call is never cancelled: it keeps running and its answer refreshes the
64
72
  * cache, so the provider that overran this page pays for the next one.
65
73
  */
66
- resolve(key: string, call: () => Promise<T | null>, budgetMs?: number): Promise<ContributionOutcome<T>>;
74
+ resolve(key: string, call: () => Promise<T | null>, budgetMs?: number, readbackBudgetMs?: number): Promise<ContributionOutcome<T>>;
75
+ /**
76
+ * Record that the provider behind `key` was written to. What the cache holds
77
+ * for it is now the pre-write view: it is never served again, a call already
78
+ * in flight no longer counts as a refresh to wait for, and the next read asks
79
+ * afresh and is given {@link WRITE_READBACK_BUDGET_MS} to be answered.
80
+ */
81
+ markWritten(key: string): void;
82
+ /** {@link markWritten} for every held key the predicate accepts. */
83
+ markWrittenWhere(matches: (key: string) => boolean): void;
67
84
  private remember;
68
85
  }
@@ -296,7 +296,13 @@ export declare function updateDeviceFieldsBatch(deps: AggregationDeps, input: {
296
296
  }>;
297
297
  /** Apply a single grouped patch to the appropriate provider. Mirrors
298
298
  * `updateDeviceField` routing (special-case device-manager, else
299
- * registry lookup). Used by `updateDeviceFieldsBatch`. */
299
+ * registry lookup). Used by `updateDeviceFieldsBatch`.
300
+ *
301
+ * Whatever the outcome, the contribution cache is told the provider was
302
+ * written to: a write that threw may still have landed part of its patch, and
303
+ * either way the answer cached for the panel is the PRE-write view. Serving it
304
+ * on the read-back is the operator's "it snapped back, I had to change it
305
+ * twice" (see `ContributionCache.markWritten`). */
300
306
  export declare function applyGroupPatch(deps: AggregationDeps, deviceId: number, group: {
301
307
  writerCapName: string;
302
308
  writerAddonId: string;
@@ -3,8 +3,8 @@ Object.defineProperties(exports, {
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
5
  require("../../chunk-Cek0wNdY.js");
6
- const require_dist = require("../../dist-DLHPmdoV.js");
7
- const require_retired_settings_keys = require("../../retired-settings-keys-DibNtLmU.js");
6
+ const require_dist = require("../../dist-FSNJUw7p.js");
7
+ const require_retired_settings_keys = require("../../retired-settings-keys-BuQBYfu0.js");
8
8
  let zod = require("zod");
9
9
  let node_crypto = require("node:crypto");
10
10
  let _camstack_types_node = require("@camstack/types/node");
@@ -825,6 +825,14 @@ function installClaimedStatusOverlay(registry, deps) {
825
825
  */
826
826
  /** How long the page waits for ONE provider before serving what it has. */
827
827
  var CONTRIBUTION_BUDGET_MS = 1500;
828
+ /**
829
+ * How long a read waits for a provider's answer when the entry was WRITTEN to
830
+ * since it last answered. Longer than the page budget on purpose: right after a
831
+ * write the only honest answers are the provider's new one or "not yet" — the
832
+ * last cached answer is the pre-write view, and showing it is how a saved
833
+ * setting appeared to snap back.
834
+ */
835
+ var WRITE_READBACK_BUDGET_MS = 8e3;
828
836
  var ContributionCache = class {
829
837
  maxEntries;
830
838
  entries = /* @__PURE__ */ new Map();
@@ -837,9 +845,9 @@ var ContributionCache = class {
837
845
  * The call is never cancelled: it keeps running and its answer refreshes the
838
846
  * cache, so the provider that overran this page pays for the next one.
839
847
  */
840
- async resolve(key, call, budgetMs = CONTRIBUTION_BUDGET_MS) {
848
+ async resolve(key, call, budgetMs = CONTRIBUTION_BUDGET_MS, readbackBudgetMs = WRITE_READBACK_BUDGET_MS) {
841
849
  const existing = this.entries.get(key);
842
- if (existing?.inFlight) return existing.value !== null ? {
850
+ if (existing?.inFlight && !existing.written) return existing.value !== null ? {
843
851
  kind: "stale",
844
852
  value: existing.value
845
853
  } : {
@@ -848,29 +856,36 @@ var ContributionCache = class {
848
856
  };
849
857
  const entry = existing ?? {
850
858
  value: null,
851
- inFlight: null
859
+ inFlight: null,
860
+ generation: 0,
861
+ written: false
852
862
  };
853
863
  if (!existing) this.remember(key, entry);
864
+ const generation = entry.generation;
865
+ const afterWrite = entry.written;
854
866
  let settled = false;
855
867
  let answer = null;
856
868
  let failed = false;
857
869
  const refresh = call().then((value) => {
858
870
  answer = value;
859
871
  settled = true;
872
+ if (entry.generation !== generation) return;
860
873
  entry.value = value;
861
874
  entry.inFlight = null;
875
+ entry.written = false;
862
876
  }, () => {
863
877
  failed = true;
864
878
  settled = true;
879
+ if (entry.generation !== generation) return;
865
880
  entry.inFlight = null;
866
881
  });
867
882
  entry.inFlight = refresh;
868
- await Promise.race([refresh, sleep(budgetMs)]);
883
+ await Promise.race([refresh, sleep(afterWrite ? readbackBudgetMs : budgetMs)]);
869
884
  if (settled && !failed) return {
870
885
  kind: "fresh",
871
886
  value: answer
872
887
  };
873
- if (entry.value !== null) return {
888
+ if (entry.value !== null && !entry.written) return {
874
889
  kind: "stale",
875
890
  value: entry.value
876
891
  };
@@ -879,6 +894,23 @@ var ContributionCache = class {
879
894
  reason: failed ? "failed" : "slow"
880
895
  };
881
896
  }
897
+ /**
898
+ * Record that the provider behind `key` was written to. What the cache holds
899
+ * for it is now the pre-write view: it is never served again, a call already
900
+ * in flight no longer counts as a refresh to wait for, and the next read asks
901
+ * afresh and is given {@link WRITE_READBACK_BUDGET_MS} to be answered.
902
+ */
903
+ markWritten(key) {
904
+ const entry = this.entries.get(key);
905
+ if (entry === void 0) return;
906
+ entry.generation += 1;
907
+ entry.written = true;
908
+ entry.inFlight = null;
909
+ }
910
+ /** {@link markWritten} for every held key the predicate accepts. */
911
+ markWrittenWhere(matches) {
912
+ for (const key of [...this.entries.keys()]) if (matches(key)) this.markWritten(key);
913
+ }
882
914
  remember(key, entry) {
883
915
  this.entries.set(key, entry);
884
916
  while (this.entries.size > this.maxEntries) {
@@ -4188,8 +4220,21 @@ async function updateDeviceFieldsBatch(deps, input) {
4188
4220
  }
4189
4221
  /** Apply a single grouped patch to the appropriate provider. Mirrors
4190
4222
  * `updateDeviceField` routing (special-case device-manager, else
4191
- * registry lookup). Used by `updateDeviceFieldsBatch`. */
4223
+ * registry lookup). Used by `updateDeviceFieldsBatch`.
4224
+ *
4225
+ * Whatever the outcome, the contribution cache is told the provider was
4226
+ * written to: a write that threw may still have landed part of its patch, and
4227
+ * either way the answer cached for the panel is the PRE-write view. Serving it
4228
+ * on the read-back is the operator's "it snapped back, I had to change it
4229
+ * twice" (see `ContributionCache.markWritten`). */
4192
4230
  async function applyGroupPatch(deps, deviceId, group) {
4231
+ try {
4232
+ await applyGroupPatchUnmarked(deps, deviceId, group);
4233
+ } finally {
4234
+ contributionCache.markWrittenWhere((key) => key.startsWith(`${String(deviceId)}:`) && key.endsWith(`:${group.writerCapName}:${group.writerAddonId}`));
4235
+ }
4236
+ }
4237
+ async function applyGroupPatchUnmarked(deps, deviceId, group) {
4193
4238
  if (group.writerCapName === "device-manager") {
4194
4239
  const retired = Object.keys(group.patch).filter((key) => LINKED_DEVICES_RESERVED_KEYS.has(key));
4195
4240
  if (retired.length > 0) {
@@ -1,5 +1,5 @@
1
- import { $ as buildStreamParamsConfigSchema, $r as transformSecretWrite, A as LocationIconIdSchema, An as siteZoneKey, C as FieldClaimModeSchema, Cr as collectZodSecretPaths, Fr as isSecretClear, Gt as legacyAutoLinkIds, Ir as isSecretMarker, Jr as secretTreeFromPaths, Kr as resolveSecretMarkers, L as STREAM_PROFILE_META, Lr as isSecretMarkerLike, M as MINUTES_PER_DAY, Mr as isDeviceConfigCap, Nt as formatMinutes, Ot as expandContainer, Pr as isKeychainStoredField, Qr as toSecretFieldView, St as deviceStatusCapability, Tn as runtimeStatePolicyFor, Tt as enumerateSchemaFields, Xr as sleep$1, Yt as locationIconKey, _r as WELL_KNOWN_TAB_MAP, ar as DeviceRole, bt as deviceManagerCapability, c as CAP_NAMES_WITH_STATUS, cr as BaseAddon, dt as createDeviceExtensionProvider, ei as EventCategory, gr as SECRET_CLEAR, gt as defineExtensionSlotProvider, ir as DeviceFeature, ln as parseStreamParamsFormPatch, o as CAMERA_SWITCH_ORDER, on as normalizeUnit, or as DeviceType, sr as errMsg, t as ALL_CAPABILITY_DEFINITIONS, v as DAY_NAMES, w as FieldClaimSchema, wt as enumerateItemArrayFields, x as DeviceStatusSchema, xt as deviceStateCapability, yt as deviceExtensionCapability } from "../../dist-C0wYvAHC.mjs";
2
- import { n as purgeRetiredSettingsRows } from "../../retired-settings-keys-BHlKEYNL.mjs";
1
+ import { $ as buildStreamParamsConfigSchema, $r as transformSecretWrite, A as LocationIconIdSchema, An as siteZoneKey, C as FieldClaimModeSchema, Cr as collectZodSecretPaths, Fr as isSecretClear, Gt as legacyAutoLinkIds, Ir as isSecretMarker, Jr as secretTreeFromPaths, Kr as resolveSecretMarkers, L as STREAM_PROFILE_META, Lr as isSecretMarkerLike, M as MINUTES_PER_DAY, Mr as isDeviceConfigCap, Nt as formatMinutes, Ot as expandContainer, Pr as isKeychainStoredField, Qr as toSecretFieldView, St as deviceStatusCapability, Tn as runtimeStatePolicyFor, Tt as enumerateSchemaFields, Xr as sleep$1, Yt as locationIconKey, _r as WELL_KNOWN_TAB_MAP, ar as DeviceRole, bt as deviceManagerCapability, c as CAP_NAMES_WITH_STATUS, cr as BaseAddon, dt as createDeviceExtensionProvider, ei as EventCategory, gr as SECRET_CLEAR, gt as defineExtensionSlotProvider, ir as DeviceFeature, ln as parseStreamParamsFormPatch, o as CAMERA_SWITCH_ORDER, on as normalizeUnit, or as DeviceType, sr as errMsg, t as ALL_CAPABILITY_DEFINITIONS, v as DAY_NAMES, w as FieldClaimSchema, wt as enumerateItemArrayFields, x as DeviceStatusSchema, xt as deviceStateCapability, yt as deviceExtensionCapability } from "../../dist-CHsJCqrf.mjs";
2
+ import { n as purgeRetiredSettingsRows } from "../../retired-settings-keys-3SMjMqj0.mjs";
3
3
  import { z } from "zod";
4
4
  import { randomUUID } from "node:crypto";
5
5
  import { canonicalDeviceFingerprint } from "@camstack/types/node";
@@ -820,6 +820,14 @@ function installClaimedStatusOverlay(registry, deps) {
820
820
  */
821
821
  /** How long the page waits for ONE provider before serving what it has. */
822
822
  var CONTRIBUTION_BUDGET_MS = 1500;
823
+ /**
824
+ * How long a read waits for a provider's answer when the entry was WRITTEN to
825
+ * since it last answered. Longer than the page budget on purpose: right after a
826
+ * write the only honest answers are the provider's new one or "not yet" — the
827
+ * last cached answer is the pre-write view, and showing it is how a saved
828
+ * setting appeared to snap back.
829
+ */
830
+ var WRITE_READBACK_BUDGET_MS = 8e3;
823
831
  var ContributionCache = class {
824
832
  maxEntries;
825
833
  entries = /* @__PURE__ */ new Map();
@@ -832,9 +840,9 @@ var ContributionCache = class {
832
840
  * The call is never cancelled: it keeps running and its answer refreshes the
833
841
  * cache, so the provider that overran this page pays for the next one.
834
842
  */
835
- async resolve(key, call, budgetMs = CONTRIBUTION_BUDGET_MS) {
843
+ async resolve(key, call, budgetMs = CONTRIBUTION_BUDGET_MS, readbackBudgetMs = WRITE_READBACK_BUDGET_MS) {
836
844
  const existing = this.entries.get(key);
837
- if (existing?.inFlight) return existing.value !== null ? {
845
+ if (existing?.inFlight && !existing.written) return existing.value !== null ? {
838
846
  kind: "stale",
839
847
  value: existing.value
840
848
  } : {
@@ -843,29 +851,36 @@ var ContributionCache = class {
843
851
  };
844
852
  const entry = existing ?? {
845
853
  value: null,
846
- inFlight: null
854
+ inFlight: null,
855
+ generation: 0,
856
+ written: false
847
857
  };
848
858
  if (!existing) this.remember(key, entry);
859
+ const generation = entry.generation;
860
+ const afterWrite = entry.written;
849
861
  let settled = false;
850
862
  let answer = null;
851
863
  let failed = false;
852
864
  const refresh = call().then((value) => {
853
865
  answer = value;
854
866
  settled = true;
867
+ if (entry.generation !== generation) return;
855
868
  entry.value = value;
856
869
  entry.inFlight = null;
870
+ entry.written = false;
857
871
  }, () => {
858
872
  failed = true;
859
873
  settled = true;
874
+ if (entry.generation !== generation) return;
860
875
  entry.inFlight = null;
861
876
  });
862
877
  entry.inFlight = refresh;
863
- await Promise.race([refresh, sleep(budgetMs)]);
878
+ await Promise.race([refresh, sleep(afterWrite ? readbackBudgetMs : budgetMs)]);
864
879
  if (settled && !failed) return {
865
880
  kind: "fresh",
866
881
  value: answer
867
882
  };
868
- if (entry.value !== null) return {
883
+ if (entry.value !== null && !entry.written) return {
869
884
  kind: "stale",
870
885
  value: entry.value
871
886
  };
@@ -874,6 +889,23 @@ var ContributionCache = class {
874
889
  reason: failed ? "failed" : "slow"
875
890
  };
876
891
  }
892
+ /**
893
+ * Record that the provider behind `key` was written to. What the cache holds
894
+ * for it is now the pre-write view: it is never served again, a call already
895
+ * in flight no longer counts as a refresh to wait for, and the next read asks
896
+ * afresh and is given {@link WRITE_READBACK_BUDGET_MS} to be answered.
897
+ */
898
+ markWritten(key) {
899
+ const entry = this.entries.get(key);
900
+ if (entry === void 0) return;
901
+ entry.generation += 1;
902
+ entry.written = true;
903
+ entry.inFlight = null;
904
+ }
905
+ /** {@link markWritten} for every held key the predicate accepts. */
906
+ markWrittenWhere(matches) {
907
+ for (const key of [...this.entries.keys()]) if (matches(key)) this.markWritten(key);
908
+ }
877
909
  remember(key, entry) {
878
910
  this.entries.set(key, entry);
879
911
  while (this.entries.size > this.maxEntries) {
@@ -4183,8 +4215,21 @@ async function updateDeviceFieldsBatch(deps, input) {
4183
4215
  }
4184
4216
  /** Apply a single grouped patch to the appropriate provider. Mirrors
4185
4217
  * `updateDeviceField` routing (special-case device-manager, else
4186
- * registry lookup). Used by `updateDeviceFieldsBatch`. */
4218
+ * registry lookup). Used by `updateDeviceFieldsBatch`.
4219
+ *
4220
+ * Whatever the outcome, the contribution cache is told the provider was
4221
+ * written to: a write that threw may still have landed part of its patch, and
4222
+ * either way the answer cached for the panel is the PRE-write view. Serving it
4223
+ * on the read-back is the operator's "it snapped back, I had to change it
4224
+ * twice" (see `ContributionCache.markWritten`). */
4187
4225
  async function applyGroupPatch(deps, deviceId, group) {
4226
+ try {
4227
+ await applyGroupPatchUnmarked(deps, deviceId, group);
4228
+ } finally {
4229
+ contributionCache.markWrittenWhere((key) => key.startsWith(`${String(deviceId)}:`) && key.endsWith(`:${group.writerCapName}:${group.writerAddonId}`));
4230
+ }
4231
+ }
4232
+ async function applyGroupPatchUnmarked(deps, deviceId, group) {
4188
4233
  if (group.writerCapName === "device-manager") {
4189
4234
  const retired = Object.keys(group.patch).filter((key) => LINKED_DEVICES_RESERVED_KEYS.has(key));
4190
4235
  if (retired.length > 0) {
@@ -3,7 +3,7 @@ Object.defineProperties(exports, {
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
5
  require("../../chunk-Cek0wNdY.js");
6
- const require_dist = require("../../dist-DLHPmdoV.js");
6
+ const require_dist = require("../../dist-FSNJUw7p.js");
7
7
  const require_formatter = require("../../formatter-DqAKDlvN.js");
8
8
  //#region src/builtins/hub-forwarder/hub-forwarder-destination.ts
9
9
  var DEFAULT_OUTBOUND_BUFFER_SIZE = 500;
@@ -1,4 +1,4 @@
1
- import { Xt as logDestinationCapability, cr as BaseAddon } from "../../dist-C0wYvAHC.mjs";
1
+ import { Xt as logDestinationCapability, cr as BaseAddon } from "../../dist-CHsJCqrf.mjs";
2
2
  import { t as formatLogLine } from "../../formatter-B7qW8bPJ.mjs";
3
3
  //#region src/builtins/hub-forwarder/hub-forwarder-destination.ts
4
4
  var DEFAULT_OUTBOUND_BUFFER_SIZE = 500;
@@ -3,9 +3,9 @@ Object.defineProperties(exports, {
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
5
  const require_chunk = require("../../chunk-Cek0wNdY.js");
6
- const require_dist = require("../../dist-DLHPmdoV.js");
7
- const require_jwt_signing_key = require("../../jwt-signing-key-CWmNKLQi.js");
8
- const require_constants = require("../../constants-ik5xtasS.js");
6
+ const require_dist = require("../../dist-FSNJUw7p.js");
7
+ const require_jwt_signing_key = require("../../jwt-signing-key-CPha_bf7.js");
8
+ const require_constants = require("../../constants-CY4vXTV-.js");
9
9
  const require_platform_key_source = require("../../platform-key-source-Di7HrlGR.js");
10
10
  let node_crypto = require("node:crypto");
11
11
  let _camstack_types_node = require("@camstack/types/node");
@@ -1,6 +1,6 @@
1
- import { Ar as formatSecretScope, Br as normalizeSecretOwner, D as KEYCHAIN_RESET_TRIGGER_ACTOR, Ur as parseSecretRef, Ut as keychainAdminCapability, Wt as keychainCapability, cr as BaseAddon, ei as EventCategory } from "../../dist-C0wYvAHC.mjs";
2
- import { r as SYSTEM_SECRET_OWNER, t as JWT_SIGNING_KEY_REF } from "../../jwt-signing-key-dkTVfsLI.mjs";
3
- import { a as MESH_CA_KEY_REF, p as CLUSTER_SECRET_SETTINGS_KEY } from "../../constants-BeQWXybC.mjs";
1
+ import { Ar as formatSecretScope, Br as normalizeSecretOwner, D as KEYCHAIN_RESET_TRIGGER_ACTOR, Ur as parseSecretRef, Ut as keychainAdminCapability, Wt as keychainCapability, cr as BaseAddon, ei as EventCategory } from "../../dist-CHsJCqrf.mjs";
2
+ import { r as SYSTEM_SECRET_OWNER, t as JWT_SIGNING_KEY_REF } from "../../jwt-signing-key-DUVvfILp.mjs";
3
+ import { a as MESH_CA_KEY_REF, p as CLUSTER_SECRET_SETTINGS_KEY } from "../../constants-iLQM7god.mjs";
4
4
  import { n as getPlatformKeychainKey } from "../../platform-key-source-BWlq0jjn.mjs";
5
5
  import { createCipheriv, createDecipheriv, createHmac, randomBytes, randomUUID, timingSafeEqual } from "node:crypto";
6
6
  import { restrictDirToOwnerSync, restrictFileToOwnerSync, writeOwnerOnlyFileSync } from "@camstack/types/node";
@@ -1,6 +1,6 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
2
  require("../../chunk-Cek0wNdY.js");
3
- const require_dist = require("../../dist-DLHPmdoV.js");
3
+ const require_dist = require("../../dist-FSNJUw7p.js");
4
4
  //#region src/builtins/liveness-monitor/liveness-checks.ts
5
5
  var NO_DEVICES = "liveness:no-devices";
6
6
  var ALL_OFFLINE = "liveness:all-devices-offline";
@@ -1,4 +1,4 @@
1
- import { F as RecordingStatusSchema, P as RECORDING_SOURCE_CAMSTACK_ADDON, cr as BaseAddon, ei as EventCategory, sr as errMsg, wr as createEvent } from "../../dist-C0wYvAHC.mjs";
1
+ import { F as RecordingStatusSchema, P as RECORDING_SOURCE_CAMSTACK_ADDON, cr as BaseAddon, ei as EventCategory, sr as errMsg, wr as createEvent } from "../../dist-CHsJCqrf.mjs";
2
2
  //#region src/builtins/liveness-monitor/liveness-checks.ts
3
3
  var NO_DEVICES = "liveness:no-devices";
4
4
  var ALL_OFFLINE = "liveness:all-devices-offline";
@@ -3,10 +3,10 @@ Object.defineProperties(exports, {
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
5
  const require_chunk = require("../../chunk-Cek0wNdY.js");
6
- const require_dist = require("../../dist-DLHPmdoV.js");
6
+ const require_dist = require("../../dist-FSNJUw7p.js");
7
7
  const require_safe_buffer$1 = require("../../safe-buffer-D3aoa-7X.js");
8
8
  const require_ms$1 = require("../../ms-LB3giGoU.js");
9
- const require_jwt_signing_key = require("../../jwt-signing-key-CWmNKLQi.js");
9
+ const require_jwt_signing_key = require("../../jwt-signing-key-CPha_bf7.js");
10
10
  let node_crypto = require("node:crypto");
11
11
  node_crypto = require_chunk.__toESM(node_crypto);
12
12
  let crypto$1 = require("crypto");
@@ -1,8 +1,8 @@
1
1
  import { i as __require, o as __toESM, t as __commonJSMin } from "../../chunk-CNf5ZN-e.mjs";
2
- import { J as authProviderCapability, R as ScopedTokenSchema, U as UserRecordSchema, cr as BaseAddon, r as ApiKeyRecordSchema, zn as userManagementCapability } from "../../dist-C0wYvAHC.mjs";
2
+ import { J as authProviderCapability, R as ScopedTokenSchema, U as UserRecordSchema, cr as BaseAddon, r as ApiKeyRecordSchema, zn as userManagementCapability } from "../../dist-CHsJCqrf.mjs";
3
3
  import { t as require_safe_buffer } from "../../safe-buffer-B1OjL1I9.mjs";
4
4
  import { t as require_ms } from "../../ms-CgH2OFlD.mjs";
5
- import { a as loadJwtSigningKey, i as getProcessJwtSigningKeyState, o as processJwtSigningKey, s as setProcessJwtSigningKey, t as JWT_SIGNING_KEY_REF } from "../../jwt-signing-key-dkTVfsLI.mjs";
5
+ import { a as loadJwtSigningKey, i as getProcessJwtSigningKeyState, o as processJwtSigningKey, s as setProcessJwtSigningKey, t as JWT_SIGNING_KEY_REF } from "../../jwt-signing-key-DUVvfILp.mjs";
6
6
  import * as crypto$1 from "node:crypto";
7
7
  import { createHash, randomUUID, timingSafeEqual } from "node:crypto";
8
8
  import nodeCrypto from "crypto";
@@ -1,6 +1,6 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
2
  const require_chunk = require("../../chunk-Cek0wNdY.js");
3
- const require_dist = require("../../dist-DLHPmdoV.js");
3
+ const require_dist = require("../../dist-FSNJUw7p.js");
4
4
  const require_tls = require("../../tls-BgImdxCO.js");
5
5
  let zod = require("zod");
6
6
  let node_net = require("node:net");
@@ -1,5 +1,5 @@
1
1
  import { o as __toESM } from "../../chunk-CNf5ZN-e.mjs";
2
- import { E as HUB_MDNS_TXT_KEYS, Ft as isAppLinkBase, Jt as localNetworkCapability, Rt as isDefaultAppConnectionEndpoint, T as HUB_MDNS_SERVICE_TYPE, Vn as validateCustomAddress, _n as resolveAppConnections, cr as BaseAddon, ei as EventCategory, nt as checkRoleAddress, s as CAMSTACK_APP_LINK_ORIGIN, un as pickAppLinkHub, wn as resolveNotificationTapAddress, xn as resolveHubAddressRoles } from "../../dist-C0wYvAHC.mjs";
2
+ import { E as HUB_MDNS_TXT_KEYS, Ft as isAppLinkBase, Jt as localNetworkCapability, Rt as isDefaultAppConnectionEndpoint, T as HUB_MDNS_SERVICE_TYPE, Vn as validateCustomAddress, _n as resolveAppConnections, cr as BaseAddon, ei as EventCategory, nt as checkRoleAddress, s as CAMSTACK_APP_LINK_ORIGIN, un as pickAppLinkHub, wn as resolveNotificationTapAddress, xn as resolveHubAddressRoles } from "../../dist-CHsJCqrf.mjs";
3
3
  import { P as readLanHttpState, _ as writeExtraSans, h as readTlsMode, i as storeUploadedCertificate, j as applyLanHttp, k as DEFAULT_LAN_HTTP_PORT, m as readTlsAccessStatus, n as regenerateCertificate, p as readExtraSans, r as revertToGeneratedCertificate, t as applyCertificateToListener, u as servedHttpsLeafFingerprint, y as ensureTlsCert } from "../../tls-CaOLZ09W.mjs";
4
4
  import { z } from "zod";
5
5
  import { isIP } from "node:net";
@@ -3,7 +3,7 @@ Object.defineProperties(exports, {
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
5
  require("../../chunk-Cek0wNdY.js");
6
- const require_dist = require("../../dist-DLHPmdoV.js");
6
+ const require_dist = require("../../dist-FSNJUw7p.js");
7
7
  //#region src/builtins/loki-logging/loki-payload.ts
8
8
  /**
9
9
  * Loki rejects a label name that is not a valid Prometheus label
@@ -1,4 +1,4 @@
1
- import { Xt as logDestinationCapability, cr as BaseAddon } from "../../dist-C0wYvAHC.mjs";
1
+ import { Xt as logDestinationCapability, cr as BaseAddon } from "../../dist-CHsJCqrf.mjs";
2
2
  //#region src/builtins/loki-logging/loki-payload.ts
3
3
  /**
4
4
  * Loki rejects a label name that is not a valid Prometheus label
@@ -3,7 +3,7 @@ Object.defineProperties(exports, {
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
5
  const require_chunk = require("../../chunk-Cek0wNdY.js");
6
- const require_dist = require("../../dist-DLHPmdoV.js");
6
+ const require_dist = require("../../dist-FSNJUw7p.js");
7
7
  let node_fs_promises = require("node:fs/promises");
8
8
  let node_os = require("node:os");
9
9
  node_os = require_chunk.__toESM(node_os);