@camstack/system 1.2.428 → 1.2.430

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 (101) hide show
  1. package/dist/agent-https-names-CpUSuP4w.js +120 -0
  2. package/dist/agent-https-names-uetr4OQl.mjs +91 -0
  3. package/dist/auth/auth-audit-log.d.ts +1 -1
  4. package/dist/auth/device-ca-store.d.ts +57 -0
  5. package/dist/auth/device-ca.d.ts +75 -0
  6. package/dist/auth/device-credential-manager.d.ts +154 -0
  7. package/dist/auth/login-session-manager.d.ts +14 -2
  8. package/dist/auth/user-management-internal.d.ts +10 -1
  9. package/dist/builtins/addon-pages-aggregator/addon-pages-aggregator.addon.js +1 -1
  10. package/dist/builtins/addon-pages-aggregator/addon-pages-aggregator.addon.mjs +1 -1
  11. package/dist/builtins/addon-widgets-aggregator/addon-widgets-aggregator.addon.js +1 -1
  12. package/dist/builtins/addon-widgets-aggregator/addon-widgets-aggregator.addon.mjs +1 -1
  13. package/dist/builtins/alerts/alerts.addon.js +1 -1
  14. package/dist/builtins/alerts/alerts.addon.mjs +1 -1
  15. package/dist/builtins/autotrack/index.js +1 -1
  16. package/dist/builtins/autotrack/index.mjs +1 -1
  17. package/dist/builtins/backup-orchestrator/backup-orchestrator.addon.js +2 -2
  18. package/dist/builtins/backup-orchestrator/backup-orchestrator.addon.mjs +2 -2
  19. package/dist/builtins/calendars/calendars.addon.js +1 -1
  20. package/dist/builtins/calendars/calendars.addon.mjs +1 -1
  21. package/dist/builtins/camera-grid/index.js +1 -1
  22. package/dist/builtins/camera-grid/index.mjs +1 -1
  23. package/dist/builtins/composer/composer.addon.js +2 -2
  24. package/dist/builtins/composer/composer.addon.mjs +2 -2
  25. package/dist/builtins/console-logging/index.js +1 -1
  26. package/dist/builtins/console-logging/index.mjs +1 -1
  27. package/dist/builtins/core-blocks/core-blocks.addon.js +2 -2
  28. package/dist/builtins/core-blocks/core-blocks.addon.mjs +2 -2
  29. package/dist/builtins/device-manager/device-manager.addon.js +2 -2
  30. package/dist/builtins/device-manager/device-manager.addon.mjs +2 -2
  31. package/dist/builtins/hub-forwarder/index.js +1 -1
  32. package/dist/builtins/hub-forwarder/index.mjs +1 -1
  33. package/dist/builtins/keychain/index.js +10 -6
  34. package/dist/builtins/keychain/index.mjs +8 -4
  35. package/dist/builtins/liveness-monitor/liveness-monitor.addon.js +1 -1
  36. package/dist/builtins/liveness-monitor/liveness-monitor.addon.mjs +1 -1
  37. package/dist/builtins/local-auth/local-auth.addon.d.ts +6 -0
  38. package/dist/builtins/local-auth/local-auth.addon.js +955 -47
  39. package/dist/builtins/local-auth/local-auth.addon.mjs +946 -41
  40. package/dist/builtins/local-network/local-network.addon.js +2 -2
  41. package/dist/builtins/local-network/local-network.addon.mjs +2 -2
  42. package/dist/builtins/loki-logging/index.js +1 -1
  43. package/dist/builtins/loki-logging/index.mjs +1 -1
  44. package/dist/builtins/native-metrics/native-metrics.addon.js +1 -1
  45. package/dist/builtins/native-metrics/native-metrics.addon.mjs +1 -1
  46. package/dist/builtins/platform-probe/index.js +1 -1
  47. package/dist/builtins/platform-probe/index.mjs +1 -1
  48. package/dist/builtins/remote-access-orchestrator/remote-access-orchestrator.addon.js +1 -1
  49. package/dist/builtins/remote-access-orchestrator/remote-access-orchestrator.addon.mjs +1 -1
  50. package/dist/builtins/snapshot/index.js +1 -1
  51. package/dist/builtins/snapshot/index.mjs +1 -1
  52. package/dist/builtins/sqlite-storage/file-host-client.d.ts +11 -0
  53. package/dist/builtins/sqlite-storage/filesystem-storage.addon.js +1 -1
  54. package/dist/builtins/sqlite-storage/filesystem-storage.addon.mjs +1 -1
  55. package/dist/builtins/sqlite-storage/index.js +1 -1
  56. package/dist/builtins/sqlite-storage/index.mjs +1 -1
  57. package/dist/builtins/sqlite-storage/sqlite-settings.addon.js +34 -4
  58. package/dist/builtins/sqlite-storage/sqlite-settings.addon.mjs +34 -4
  59. package/dist/builtins/storage-orchestrator/storage-orchestrator.addon.js +1 -1
  60. package/dist/builtins/storage-orchestrator/storage-orchestrator.addon.mjs +1 -1
  61. package/dist/builtins/system-config/system-config.addon.d.ts +18 -0
  62. package/dist/builtins/system-config/system-config.addon.js +834 -18
  63. package/dist/builtins/system-config/system-config.addon.mjs +819 -19
  64. package/dist/builtins/winston-logging/index.js +1 -1
  65. package/dist/builtins/winston-logging/index.mjs +1 -1
  66. package/dist/{composition-sources-BQNxXQZG.mjs → composition-sources-Cw_TXEq9.mjs} +1 -1
  67. package/dist/{composition-sources-DvCGZEUI.js → composition-sources-o5MPSlk6.js} +1 -1
  68. package/dist/{constants-CCSJGnjs.js → constants-BcNaVkvI.js} +1 -1
  69. package/dist/{constants-CR4If_lP.mjs → constants-CttE77VF.mjs} +1 -1
  70. package/dist/device-ca-B-BTxeCj.mjs +355 -0
  71. package/dist/device-ca-CKiqh2Iu.js +462 -0
  72. package/dist/{dist-DHSJV4Qc.mjs → dist-CXG6muCR.mjs} +1052 -35
  73. package/dist/{dist-BQG3QFg7.js → dist-DxJdci75.js} +1099 -34
  74. package/dist/file-host-worker.js +1 -1
  75. package/dist/file-host-worker.mjs +1 -1
  76. package/dist/index.d.ts +4 -1
  77. package/dist/index.js +59 -12
  78. package/dist/index.mjs +10 -9
  79. package/dist/kernel/index.d.ts +2 -2
  80. package/dist/kernel/moleculer/mesh-mtls/index.d.ts +4 -1
  81. package/dist/kernel/moleculer/mesh-mtls/mesh-certificate-registry.d.ts +91 -0
  82. package/dist/kernel/moleculer/mesh-mtls/mesh-enroll.d.ts +4 -0
  83. package/dist/kernel/moleculer/mesh-mtls/mesh-peer-transport.d.ts +23 -0
  84. package/dist/kernel/moleculer/mesh-mtls/mesh-renewal.d.ts +126 -0
  85. package/dist/kernel/moleculer/mesh-mtls/mesh-tls-gate.d.ts +40 -0
  86. package/dist/kernel/moleculer/mesh-mtls/tls-tcp-transporter.d.ts +15 -0
  87. package/dist/{restore-archive-Dccm8lkA.js → restore-archive-CQJNoqRK.js} +1 -1
  88. package/dist/{restore-archive-DH1Pxq_1.mjs → restore-archive-D_wBL1OO.mjs} +1 -1
  89. package/dist/{retired-settings-keys-CPz7zpza.mjs → retired-settings-keys-EmDe11cP.mjs} +1 -1
  90. package/dist/{retired-settings-keys-BfGaSeQI.js → retired-settings-keys-g1oifXxR.js} +1 -1
  91. package/dist/tls/agent-https-names.d.ts +27 -0
  92. package/dist/tls/agent-https.d.ts +111 -0
  93. package/dist/tls/cert-issue.d.ts +7 -0
  94. package/dist/tls/index.d.ts +3 -0
  95. package/dist/{tls-BgImdxCO.js → tls-C5IYg3V5.js} +406 -0
  96. package/dist/{tls-CaOLZ09W.mjs → tls-CpcGkeJV.mjs} +314 -4
  97. package/dist/{wal-maintenance-DItkuOvu.js → wal-maintenance-BW1LIHi0.js} +0 -0
  98. package/dist/{wal-maintenance-Drqhcjit.mjs → wal-maintenance-vhPZLYuA.mjs} +0 -0
  99. package/package.json +4 -1
  100. package/dist/jwt-signing-key-BZm055IP.js +0 -174
  101. package/dist/jwt-signing-key-DL-qk1SM.mjs +0 -127
@@ -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-BQG3QFg7.js");
4
- const require_tls = require("../../tls-BgImdxCO.js");
3
+ const require_dist = require("../../dist-DxJdci75.js");
4
+ const require_tls = require("../../tls-C5IYg3V5.js");
5
5
  let zod = require("zod");
6
6
  let node_net = require("node:net");
7
7
  let node_os = require("node:os");
@@ -1,6 +1,6 @@
1
1
  import { o as __toESM } from "../../chunk-CNf5ZN-e.mjs";
2
- import { D as HUB_MDNS_TXT_KEYS, E as HUB_MDNS_SERVICE_TYPE, Hn as validateCustomAddress, It as isAppLinkBase, Sn as resolveHubAddressRoles, Tn as resolveNotificationTapAddress, Yt as localNetworkCapability, dn as pickAppLinkHub, lr as BaseAddon, rt as checkRoleAddress, s as CAMSTACK_APP_LINK_ORIGIN, ti as EventCategory, vn as resolveAppConnections, zt as isDefaultAppConnectionEndpoint } from "../../dist-DHSJV4Qc.mjs";
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";
2
+ import { A as HUB_MDNS_SERVICE_TYPE, An as resolveHubAddressRoles, En as resolveAppConnections, Nn as resolveNotificationTapAddress, Wt as isAppLinkBase, Xn as validateCustomAddress, _r as BaseAddon, j as HUB_MDNS_TXT_KEYS, li as EventCategory, lt as checkRoleAddress, qt as isDefaultAppConnectionEndpoint, rn as localNetworkCapability, s as CAMSTACK_APP_LINK_ORIGIN, yn as pickAppLinkHub } from "../../dist-CXG6muCR.mjs";
3
+ import { A as readTlsMode, G as DEFAULT_LAN_HTTP_PORT, M as writeExtraSans, O as readExtraSans, P as ensureTlsCert, T as servedHttpsLeafFingerprint, X as readLanHttpState, _ as regenerateCertificate, g as applyCertificateToListener, k as readTlsAccessStatus, q as applyLanHttp, v as revertToGeneratedCertificate, y as storeUploadedCertificate } from "../../tls-CpcGkeJV.mjs";
4
4
  import { z } from "zod";
5
5
  import { isIP } from "node:net";
6
6
  import * as os from "node:os";
@@ -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-BQG3QFg7.js");
6
+ const require_dist = require("../../dist-DxJdci75.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 { Zt as logDestinationCapability, lr as BaseAddon } from "../../dist-DHSJV4Qc.mjs";
1
+ import { _r as BaseAddon, an as logDestinationCapability } from "../../dist-CXG6muCR.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-BQG3QFg7.js");
6
+ const require_dist = require("../../dist-DxJdci75.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);
@@ -1,4 +1,4 @@
1
- import { Nt as foldSnapshotByFunction, Tr as createEvent, cr as errMsg, gn as reducePoints, lr as BaseAddon, rn as metricsProviderCapability, ti as EventCategory, yn as resolveBucketMs } from "../../dist-DHSJV4Qc.mjs";
1
+ import { Bt as foldSnapshotByFunction, Dn as resolveBucketMs, Nr as createEvent, _r as BaseAddon, dn as metricsProviderCapability, gr as errMsg, li as EventCategory, wn as reducePoints } from "../../dist-CXG6muCR.mjs";
2
2
  import { access, readFile, readdir } from "node:fs/promises";
3
3
  import * as os from "node:os";
4
4
  import { platform } from "node:os";
@@ -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-BQG3QFg7.js");
6
+ const require_dist = require("../../dist-DxJdci75.js");
7
7
  let node_os = require("node:os");
8
8
  node_os = require_chunk.__toESM(node_os);
9
9
  let node_fs = require("node:fs");
@@ -1,5 +1,5 @@
1
1
  import { o as __toESM, r as __exportAll } from "../../chunk-CNf5ZN-e.mjs";
2
- import { cr as errMsg, kn as scoreRuntimes, kr as emitReadiness, lr as BaseAddon, pn as platformProbeCapability, ti as EventCategory, wt as enumerateInferenceDevices } from "../../dist-DHSJV4Qc.mjs";
2
+ import { Ln as scoreRuntimes, Lr as emitReadiness, _r as BaseAddon, gr as errMsg, jt as enumerateInferenceDevices, li as EventCategory, xn as platformProbeCapability } from "../../dist-CXG6muCR.mjs";
3
3
  import * as os from "node:os";
4
4
  import * as fs from "node:fs";
5
5
  import { execFile } from "node:child_process";
@@ -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-BQG3QFg7.js");
6
+ const require_dist = require("../../dist-DxJdci75.js");
7
7
  //#region src/builtins/remote-access-orchestrator/enabled-providers-reconcile.ts
8
8
  /**
9
9
  * Reconcile the durable `enabledProviders` set against authoritative
@@ -1,4 +1,4 @@
1
- import { lr as BaseAddon, ti as EventCategory } from "../../dist-DHSJV4Qc.mjs";
1
+ import { _r as BaseAddon, li as EventCategory } from "../../dist-CXG6muCR.mjs";
2
2
  //#region src/builtins/remote-access-orchestrator/enabled-providers-reconcile.ts
3
3
  /**
4
4
  * Reconcile the durable `enabledProviders` set against authoritative
@@ -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-BQG3QFg7.js");
6
+ const require_dist = require("../../dist-DxJdci75.js");
7
7
  const require_snapshot_courtesy = require("../../snapshot-courtesy-D_C5-nC0.js");
8
8
  let zod = require("zod");
9
9
  let node_crypto = require("node:crypto");
@@ -1,4 +1,4 @@
1
- import { Br as nodePin, Mn as snapshotCapability, Rn as streamQualityLabel, X as bareAddonId, Z as batteryCapability, a as BatteryStatusSchema, ar as DeviceFeature, cr as errMsg, lr as BaseAddon, nn as memoizePinnedFfmpeg, sr as DeviceType, ti as EventCategory, vt as deriveBatteryPresence } from "../../dist-DHSJV4Qc.mjs";
1
+ import { Bn as snapshotCapability, Jr as nodePin, Kn as streamQualityLabel, _r as BaseAddon, a as BatteryStatusSchema, et as bareAddonId, gr as errMsg, hr as DeviceType, li as EventCategory, pr as DeviceFeature, tt as batteryCapability, un as memoizePinnedFfmpeg, wt as deriveBatteryPresence } from "../../dist-CXG6muCR.mjs";
2
2
  import { i as renderCourtesyOverlayJpeg, n as courtesyCacheKey, r as renderCourtesyJpeg } from "../../snapshot-courtesy-CyFs1M3I.mjs";
3
3
  import { z } from "zod";
4
4
  import { randomUUID } from "node:crypto";
@@ -34,6 +34,8 @@ export declare class FileHostClient {
34
34
  private nextId;
35
35
  private lastOp;
36
36
  private stopping;
37
+ /** Settles when the thread's event loop has ended and its isolate is gone. */
38
+ private readonly exited;
37
39
  private dead;
38
40
  private lastBusyLogAt;
39
41
  private declared;
@@ -49,6 +51,15 @@ export declare class FileHostClient {
49
51
  control<K extends ControlOp>(op: K, input: ControlOps[K]["input"]): Promise<ControlOps[K]["output"]>;
50
52
  /** Ask the thread to close its connection, then end it. */
51
53
  stop(): Promise<void>;
54
+ /**
55
+ * Let the thread END ITSELF after it answered `stop`: it has closed every
56
+ * statement and the connection and closed its port, so its loop drains and
57
+ * the isolate is disposed from inside. `terminate()` straight after the
58
+ * answer races that disposal and, on macOS, took the whole process down with
59
+ * a SIGSEGV in the isolate's teardown GC. Terminate is only the fallback for
60
+ * a thread that does not leave in time.
61
+ */
62
+ private awaitExit;
52
63
  inFlight(): number;
53
64
  private request;
54
65
  private logBusy;
@@ -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-BQG3QFg7.js");
6
+ const require_dist = require("../../dist-DxJdci75.js");
7
7
  let node_crypto = require("node:crypto");
8
8
  let node_fs_promises = require("node:fs/promises");
9
9
  let node_path = require("node:path");
@@ -1,4 +1,4 @@
1
- import { In as storageProviderCapability, Mt as filesystemBrowseCapability, lr as BaseAddon } from "../../dist-DHSJV4Qc.mjs";
1
+ import { Wn as storageProviderCapability, _r as BaseAddon, zt as filesystemBrowseCapability } from "../../dist-CXG6muCR.mjs";
2
2
  import { randomUUID } from "node:crypto";
3
3
  import { mkdir, readdir, realpath, statfs } from "node:fs/promises";
4
4
  import * as path$1 from "node:path";
@@ -4,7 +4,7 @@ Object.defineProperties(exports, {
4
4
  });
5
5
  require("../../chunk-Cek0wNdY.js");
6
6
  const require_builtins_sqlite_storage_filesystem_storage_addon = require("./filesystem-storage.addon.js");
7
- const require_wal_maintenance = require("../../wal-maintenance-DItkuOvu.js");
7
+ const require_wal_maintenance = require("../../wal-maintenance-BW1LIHi0.js");
8
8
  const require_builtins_sqlite_storage_sqlite_settings_addon = require("./sqlite-settings.addon.js");
9
9
  //#region src/builtins/sqlite-storage/config-store.ts
10
10
  var ConfigStore = class {
@@ -1,5 +1,5 @@
1
1
  import { FilesystemStorageAddon, t as FilesystemStorageProvider } from "./filesystem-storage.addon.mjs";
2
- import { A as SQLITE_PAGE_CACHE_CEILING_KIB, B as sqliteEngineStorm, D as SQLITE_JOURNAL_SIZE_LIMIT_BYTES, F as SQLITE_PROFILE_REPORT_FLOOR_MS, I as SQLITE_PROFILE_REPORT_INTERVAL_MS, L as SQLITE_PROFILE_TOP_N, M as sqliteMmapSizeFor, N as sqlitePageCacheKibFor, O as SQLITE_MMAP_CEILING_BYTES, P as SQLITE_ENGINE_STORM_WALL_SHARE, R as SQLITE_SLOW_CALL_MS, a as WalMaintenance, c as SqliteSettingsBackend, i as WAL_MAINTENANCE_INTERVAL_MS, j as SQLITE_PAGE_CACHE_FLOOR_KIB, k as SQLITE_MMAP_FLOOR_BYTES, n as WAL_HIGH_WATER_BYTES, r as WAL_IDLE_QUIET_MS, t as WAL_CHECKPOINT_BUSY_TIMEOUT_MS, z as SqliteOpProfiler } from "../../wal-maintenance-Drqhcjit.mjs";
2
+ import { A as SQLITE_PAGE_CACHE_CEILING_KIB, B as sqliteEngineStorm, D as SQLITE_JOURNAL_SIZE_LIMIT_BYTES, F as SQLITE_PROFILE_REPORT_FLOOR_MS, I as SQLITE_PROFILE_REPORT_INTERVAL_MS, L as SQLITE_PROFILE_TOP_N, M as sqliteMmapSizeFor, N as sqlitePageCacheKibFor, O as SQLITE_MMAP_CEILING_BYTES, P as SQLITE_ENGINE_STORM_WALL_SHARE, R as SQLITE_SLOW_CALL_MS, a as WalMaintenance, c as SqliteSettingsBackend, i as WAL_MAINTENANCE_INTERVAL_MS, j as SQLITE_PAGE_CACHE_FLOOR_KIB, k as SQLITE_MMAP_FLOOR_BYTES, n as WAL_HIGH_WATER_BYTES, r as WAL_IDLE_QUIET_MS, t as WAL_CHECKPOINT_BUSY_TIMEOUT_MS, z as SqliteOpProfiler } from "../../wal-maintenance-vhPZLYuA.mjs";
3
3
  import { SqliteSettingsAddon } from "./sqlite-settings.addon.mjs";
4
4
  //#region src/builtins/sqlite-storage/config-store.ts
5
5
  var ConfigStore = class {
@@ -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-BQG3QFg7.js");
7
- const require_retired_settings_keys = require("../../retired-settings-keys-BfGaSeQI.js");
8
- const require_wal_maintenance = require("../../wal-maintenance-DItkuOvu.js");
6
+ const require_dist = require("../../dist-DxJdci75.js");
7
+ const require_retired_settings_keys = require("../../retired-settings-keys-g1oifXxR.js");
8
+ const require_wal_maintenance = require("../../wal-maintenance-BW1LIHi0.js");
9
9
  const require_sqlite_snapshot_protocol = require("../../sqlite-snapshot-protocol-B9OndqZv.js");
10
10
  const require_wal_checkpoint_policy = require("../../wal-checkpoint-policy-d2z2qPqx.js");
11
11
  let node_fs_promises = require("node:fs/promises");
@@ -27,6 +27,8 @@ function defaultFileHostWorkerPath() {
27
27
  const packageRoot = node_path.default.dirname(require_.resolve("@camstack/system/package.json"));
28
28
  return node_path.default.join(packageRoot, "dist", "file-host-worker.js");
29
29
  }
30
+ /** How long a stopped thread has to end on its own before it is terminated. */
31
+ var FILE_HOST_EXIT_GRACE_MS = 5e3;
30
32
  var FileHostClient = class {
31
33
  spec;
32
34
  logger;
@@ -38,6 +40,8 @@ var FileHostClient = class {
38
40
  nextId = 1;
39
41
  lastOp = "(none yet)";
40
42
  stopping = false;
43
+ /** Settles when the thread's event loop has ended and its isolate is gone. */
44
+ exited;
41
45
  dead = false;
42
46
  lastBusyLogAt = -Infinity;
43
47
  declared = /* @__PURE__ */ new Set();
@@ -62,8 +66,14 @@ var FileHostClient = class {
62
66
  });
63
67
  this.thread.on("message", (message) => this.onMessage(message));
64
68
  this.thread.on("error", (err) => this.die(`worker error: ${require_dist.errMsg(err)}`));
69
+ this.exited = new Promise((resolve) => {
70
+ this.thread.on("exit", () => resolve());
71
+ });
65
72
  this.thread.on("exit", (code) => {
66
- if (this.stopping) return;
73
+ if (this.stopping) {
74
+ for (const pending of this.pending.values()) if (pending.op === "stop") pending.resolve(void 0);
75
+ return;
76
+ }
67
77
  this.die(`worker exited with code ${code}`);
68
78
  });
69
79
  }
@@ -122,6 +132,26 @@ var FileHostClient = class {
122
132
  });
123
133
  });
124
134
  } finally {
135
+ await this.awaitExit();
136
+ }
137
+ }
138
+ /**
139
+ * Let the thread END ITSELF after it answered `stop`: it has closed every
140
+ * statement and the connection and closed its port, so its loop drains and
141
+ * the isolate is disposed from inside. `terminate()` straight after the
142
+ * answer races that disposal and, on macOS, took the whole process down with
143
+ * a SIGSEGV in the isolate's teardown GC. Terminate is only the fallback for
144
+ * a thread that does not leave in time.
145
+ */
146
+ async awaitExit() {
147
+ let timer;
148
+ const timedOut = new Promise((resolve) => {
149
+ timer = setTimeout(() => resolve("timeout"), FILE_HOST_EXIT_GRACE_MS);
150
+ });
151
+ const outcome = await Promise.race([this.exited.then(() => "exited"), timedOut]);
152
+ if (timer !== void 0) clearTimeout(timer);
153
+ if (outcome === "timeout") {
154
+ this.logger.warn("database worker did not leave after stop — terminating it", { tags: { database: this.spec.databaseId } });
125
155
  await this.thread.terminate();
126
156
  }
127
157
  }
@@ -1,6 +1,6 @@
1
- import { Gn as vectorStoreCapability, X as bareAddonId, _ as DATABASE_SNAPSHOT_TIMEOUT_MS, cr as errMsg, g as DATABASE_SNAPSHOT_SUFFIX, h as DATABASE_SNAPSHOT_PARTIAL_SUFFIX, lr as BaseAddon, mr as RUNTIME_DEFAULTS, mt as databaseSnapshotCapability, pt as dataStoreProviderCapability, v as DATA_STORE_DATABASES } from "../../dist-DHSJV4Qc.mjs";
2
- import { r as retiredKeyStoreOf, t as purgeRetiredSettingsKeys } from "../../retired-settings-keys-CPz7zpza.mjs";
3
- import { C as callControl, E as controlTargetOf, S as trustResult, T as callVector, _ as collectTransferables, a as WalMaintenance, c as SqliteSettingsBackend, d as CrossDatabaseTransactError, f as DatabaseBusyError, m as rehydrateError, o as createVectorIndex, p as DuplicatePlacementError, s as vectorProviderOf, u as CollectionPlacementError, v as isFileHostMessage, w as callData } from "../../wal-maintenance-Drqhcjit.mjs";
1
+ import { $n as vectorStoreCapability, Sr as RUNTIME_DEFAULTS, _ as DATABASE_SNAPSHOT_TIMEOUT_MS, _r as BaseAddon, bt as databaseSnapshotCapability, et as bareAddonId, g as DATABASE_SNAPSHOT_SUFFIX, gr as errMsg, h as DATABASE_SNAPSHOT_PARTIAL_SUFFIX, v as DATA_STORE_DATABASES, yt as dataStoreProviderCapability } from "../../dist-CXG6muCR.mjs";
2
+ import { r as retiredKeyStoreOf, t as purgeRetiredSettingsKeys } from "../../retired-settings-keys-EmDe11cP.mjs";
3
+ import { C as callControl, E as controlTargetOf, S as trustResult, T as callVector, _ as collectTransferables, a as WalMaintenance, c as SqliteSettingsBackend, d as CrossDatabaseTransactError, f as DatabaseBusyError, m as rehydrateError, o as createVectorIndex, p as DuplicatePlacementError, s as vectorProviderOf, u as CollectionPlacementError, v as isFileHostMessage, w as callData } from "../../wal-maintenance-vhPZLYuA.mjs";
4
4
  import { r as isSnapshotWorkerMessage } from "../../sqlite-snapshot-protocol-2QaTouWV.mjs";
5
5
  import { a as isWorkerMessage, t as WAL_CHECKPOINT_LARGE_PASS_FRAMES } from "../../wal-checkpoint-policy-BahrTtyD.mjs";
6
6
  import { createRequire } from "node:module";
@@ -21,6 +21,8 @@ function defaultFileHostWorkerPath() {
21
21
  const packageRoot = path.dirname(require_.resolve("@camstack/system/package.json"));
22
22
  return path.join(packageRoot, "dist", "file-host-worker.js");
23
23
  }
24
+ /** How long a stopped thread has to end on its own before it is terminated. */
25
+ var FILE_HOST_EXIT_GRACE_MS = 5e3;
24
26
  var FileHostClient = class {
25
27
  spec;
26
28
  logger;
@@ -32,6 +34,8 @@ var FileHostClient = class {
32
34
  nextId = 1;
33
35
  lastOp = "(none yet)";
34
36
  stopping = false;
37
+ /** Settles when the thread's event loop has ended and its isolate is gone. */
38
+ exited;
35
39
  dead = false;
36
40
  lastBusyLogAt = -Infinity;
37
41
  declared = /* @__PURE__ */ new Set();
@@ -56,8 +60,14 @@ var FileHostClient = class {
56
60
  });
57
61
  this.thread.on("message", (message) => this.onMessage(message));
58
62
  this.thread.on("error", (err) => this.die(`worker error: ${errMsg(err)}`));
63
+ this.exited = new Promise((resolve) => {
64
+ this.thread.on("exit", () => resolve());
65
+ });
59
66
  this.thread.on("exit", (code) => {
60
- if (this.stopping) return;
67
+ if (this.stopping) {
68
+ for (const pending of this.pending.values()) if (pending.op === "stop") pending.resolve(void 0);
69
+ return;
70
+ }
61
71
  this.die(`worker exited with code ${code}`);
62
72
  });
63
73
  }
@@ -116,6 +126,26 @@ var FileHostClient = class {
116
126
  });
117
127
  });
118
128
  } finally {
129
+ await this.awaitExit();
130
+ }
131
+ }
132
+ /**
133
+ * Let the thread END ITSELF after it answered `stop`: it has closed every
134
+ * statement and the connection and closed its port, so its loop drains and
135
+ * the isolate is disposed from inside. `terminate()` straight after the
136
+ * answer races that disposal and, on macOS, took the whole process down with
137
+ * a SIGSEGV in the isolate's teardown GC. Terminate is only the fallback for
138
+ * a thread that does not leave in time.
139
+ */
140
+ async awaitExit() {
141
+ let timer;
142
+ const timedOut = new Promise((resolve) => {
143
+ timer = setTimeout(() => resolve("timeout"), FILE_HOST_EXIT_GRACE_MS);
144
+ });
145
+ const outcome = await Promise.race([this.exited.then(() => "exited"), timedOut]);
146
+ if (timer !== void 0) clearTimeout(timer);
147
+ if (outcome === "timeout") {
148
+ this.logger.warn("database worker did not leave after stop — terminating it", { tags: { database: this.spec.databaseId } });
119
149
  await this.thread.terminate();
120
150
  }
121
151
  }
@@ -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-BQG3QFg7.js");
6
+ const require_dist = require("../../dist-DxJdci75.js");
7
7
  let zod = require("zod");
8
8
  let node_crypto = require("node:crypto");
9
9
  let _camstack_types_node = require("@camstack/types/node");
@@ -1,4 +1,4 @@
1
- import { A as LegacyStorageLocationDefaultSchema, An as settingsStoreCapability, B as StorageLocationModeSchema, Bt as isLocationEnabled, Cn as resolveLocationMode, Cr as collectSecretConfigKeys, Ft as gbToBytes, H as StorageMigrationJobSchema, Hr as parseJsonObject, Kn as withLocationMode, Lr as isSecretMarker, Nn as storageCapability, Ot as evictionPolicyOfLocation, Pn as storageMigrationCapability, V as StorageLocationTypeSchema, Yr as secretTreeFromPaths, ei as transformSecretWrite, en as mayReadLocation, in as modeMayWrite, lr as BaseAddon, pr as REDACTED_SECRET, qr as resolveSecretMarkers, qt as legacyModeOf, ti as EventCategory, tn as mayWriteToLocation, z as StorageCleanupJobSchema } from "../../dist-DHSJV4Qc.mjs";
1
+ import { Ft as evictionPolicyOfLocation, G as StorageLocationTypeSchema, Gr as isSecretMarker, Hn as storageMigrationCapability, Jt as isLocationEnabled, K as StorageMigrationJobSchema, P as LegacyStorageLocationDefaultSchema, Rn as settingsStoreCapability, U as StorageCleanupJobSchema, Ut as gbToBytes, Vn as storageCapability, W as StorageLocationModeSchema, Xr as parseJsonObject, _r as BaseAddon, ci as transformSecretWrite, cn as mayReadLocation, er as withLocationMode, fn as modeMayWrite, jn as resolveLocationMode, jr as collectSecretConfigKeys, li as EventCategory, ln as mayWriteToLocation, ri as secretTreeFromPaths, ti as resolveSecretMarkers, tn as legacyModeOf, xr as REDACTED_SECRET } from "../../dist-CXG6muCR.mjs";
2
2
  import { z } from "zod";
3
3
  import { randomUUID } from "node:crypto";
4
4
  import { containsOrEquals, physicalRootOf } from "@camstack/types/node";
@@ -7,9 +7,27 @@ export declare class SystemConfigAddon extends BaseAddon {
7
7
  readonly id = "system-config";
8
8
  private clusterSecretKeeper;
9
9
  private meshCaKeeper;
10
+ private meshReapTimer;
11
+ private readonly meshGateTimers;
12
+ private stoppedMesh;
13
+ private loggedNoSettingsStore;
10
14
  constructor();
11
15
  protected onInitialize(): Promise<AddonInitResult<typeof systemConfigMeshActions>>;
12
16
  protected onShutdown(): Promise<void>;
17
+ /**
18
+ * The hub's record of mesh leaves (D856): declared and loaded BEFORE the TLS
19
+ * listener opens, so persisted revocations are in the CRL before any node can
20
+ * connect. Best effort: a hub whose settings store is not up still serves the
21
+ * mesh (the registry then fills from the leaves nodes present).
22
+ */
23
+ private initMeshCertificateRegistry;
24
+ /** Which names the hub certified to which agent. Best effort; nothing waits on it. */
25
+ private loadAgentHttpsNames;
26
+ /**
27
+ * The mesh TLS listener opens ONLY after the revocation registry has loaded and its
28
+ * revocations are in the CRL (D856): until then every agent is refused, because an
29
+ * empty CRL would accept a revoked leaf. Retries until the settings store answers.
30
+ */
13
31
  private onMeshCaReady;
14
32
  private mintJoinToken;
15
33
  /** D821 — short-lived ticket for the agent's `:4444` unlock session. */