@camstack/system 1.2.437 → 1.2.439

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 (109) hide show
  1. package/dist/addon-runner.js +64 -12
  2. package/dist/addon-runner.mjs +65 -13
  3. package/dist/{agent-https-BZIwS4xF.js → agent-https-DlpTMDqA.js} +252 -22
  4. package/dist/{agent-https-BPfHrI4c.mjs → agent-https-U0d4uvn2.mjs} +211 -23
  5. package/dist/builtins/addon-pages-aggregator/addon-pages-aggregator.addon.js +1 -1
  6. package/dist/builtins/addon-pages-aggregator/addon-pages-aggregator.addon.mjs +1 -1
  7. package/dist/builtins/addon-widgets-aggregator/addon-widgets-aggregator.addon.js +1 -1
  8. package/dist/builtins/addon-widgets-aggregator/addon-widgets-aggregator.addon.mjs +1 -1
  9. package/dist/builtins/alerts/alerts.addon.js +7 -1
  10. package/dist/builtins/alerts/alerts.addon.mjs +7 -1
  11. package/dist/builtins/autotrack/index.js +1 -1
  12. package/dist/builtins/autotrack/index.mjs +1 -1
  13. package/dist/builtins/backup-orchestrator/backup-orchestrator.addon.js +2 -2
  14. package/dist/builtins/backup-orchestrator/backup-orchestrator.addon.mjs +2 -2
  15. package/dist/builtins/calendars/calendars.addon.js +1 -1
  16. package/dist/builtins/calendars/calendars.addon.mjs +1 -1
  17. package/dist/builtins/camera-grid/index.js +9 -1
  18. package/dist/builtins/camera-grid/index.mjs +9 -1
  19. package/dist/builtins/composer/composer.addon.js +2 -2
  20. package/dist/builtins/composer/composer.addon.mjs +2 -2
  21. package/dist/builtins/console-logging/index.js +12 -5
  22. package/dist/builtins/console-logging/index.mjs +12 -5
  23. package/dist/builtins/core-blocks/core-blocks.addon.js +2 -2
  24. package/dist/builtins/core-blocks/core-blocks.addon.mjs +2 -2
  25. package/dist/builtins/device-manager/device-manager.addon.d.ts +5 -0
  26. package/dist/builtins/device-manager/device-manager.addon.js +717 -28
  27. package/dist/builtins/device-manager/device-manager.addon.mjs +717 -28
  28. package/dist/builtins/device-manager/device-meta-types.d.ts +4 -0
  29. package/dist/builtins/device-manager/device-provider-context.d.ts +9 -0
  30. package/dist/builtins/device-manager/device-removal-hooks.d.ts +103 -0
  31. package/dist/builtins/device-manager/device-row-store.d.ts +1 -0
  32. package/dist/builtins/device-manager/device-tombstone-store.d.ts +68 -0
  33. package/dist/builtins/device-manager/removal-cleanup.d.ts +50 -0
  34. package/dist/builtins/hub-forwarder/index.js +1 -1
  35. package/dist/builtins/hub-forwarder/index.mjs +1 -1
  36. package/dist/builtins/keychain/index.js +37 -4
  37. package/dist/builtins/keychain/index.mjs +37 -4
  38. package/dist/builtins/keychain/keychain-service.d.ts +14 -0
  39. package/dist/builtins/keychain/keychain-store.d.ts +1 -1
  40. package/dist/builtins/liveness-monitor/liveness-monitor.addon.js +1 -1
  41. package/dist/builtins/liveness-monitor/liveness-monitor.addon.mjs +1 -1
  42. package/dist/builtins/local-auth/local-auth.addon.js +12 -12
  43. package/dist/builtins/local-auth/local-auth.addon.mjs +12 -12
  44. package/dist/builtins/local-network/local-network.addon.js +16 -2
  45. package/dist/builtins/local-network/local-network.addon.mjs +16 -2
  46. package/dist/builtins/loki-logging/index.js +28 -5
  47. package/dist/builtins/loki-logging/index.mjs +28 -5
  48. package/dist/builtins/native-metrics/native-metrics.addon.js +11 -1
  49. package/dist/builtins/native-metrics/native-metrics.addon.mjs +11 -1
  50. package/dist/builtins/platform-probe/index.js +1 -1
  51. package/dist/builtins/platform-probe/index.mjs +1 -1
  52. package/dist/builtins/remote-access-orchestrator/remote-access-orchestrator.addon.js +1 -1
  53. package/dist/builtins/remote-access-orchestrator/remote-access-orchestrator.addon.mjs +1 -1
  54. package/dist/builtins/snapshot/index.js +11 -1
  55. package/dist/builtins/snapshot/index.mjs +11 -1
  56. package/dist/builtins/sqlite-storage/filesystem-storage.addon.js +4 -1
  57. package/dist/builtins/sqlite-storage/filesystem-storage.addon.mjs +4 -1
  58. package/dist/builtins/sqlite-storage/index.js +1 -1
  59. package/dist/builtins/sqlite-storage/index.mjs +1 -1
  60. package/dist/builtins/sqlite-storage/sqlite-settings.addon.js +3 -3
  61. package/dist/builtins/sqlite-storage/sqlite-settings.addon.mjs +3 -3
  62. package/dist/builtins/storage-orchestrator/storage-orchestrator.addon.js +1 -1
  63. package/dist/builtins/storage-orchestrator/storage-orchestrator.addon.mjs +1 -1
  64. package/dist/builtins/system-config/system-config.addon.js +22 -4
  65. package/dist/builtins/system-config/system-config.addon.mjs +22 -4
  66. package/dist/builtins/winston-logging/index.js +14 -5
  67. package/dist/builtins/winston-logging/index.mjs +14 -5
  68. package/dist/{composition-sources-BIT8IUKm.js → composition-sources-B4jC2FC7.js} +1 -1
  69. package/dist/{composition-sources-tpYR0f1x.mjs → composition-sources-BGOSCGWa.mjs} +1 -1
  70. package/dist/{constants-Bc6trhoW.mjs → constants-B92BjObl.mjs} +1 -1
  71. package/dist/{constants-CwRY32Nx.js → constants-BRsjQwi-.js} +1 -1
  72. package/dist/{device-ca-BhdBByGD.mjs → device-ca-46BUsWD1.mjs} +2 -2
  73. package/dist/{device-ca-DImD8IzR.js → device-ca-DHG9OW2m.js} +2 -2
  74. package/dist/{dist-CEAyXW3Q.js → dist-BOWdLjoK.js} +341 -13
  75. package/dist/{dist-m5JkT8UN.mjs → dist-yI6kF6r6.mjs} +306 -14
  76. package/dist/file-host-worker.js +1 -1
  77. package/dist/file-host-worker.mjs +1 -1
  78. package/dist/{hub-mdns-ciao-CBLvq2oj.js → hub-mdns-ciao-D7S5AJRU.js} +377 -69
  79. package/dist/{hub-mdns-ciao-DMlQTdPU.mjs → hub-mdns-ciao-DGwVc2uh.mjs} +344 -72
  80. package/dist/i18n/catalog-registry.d.ts +35 -0
  81. package/dist/i18n/index.d.ts +2 -0
  82. package/dist/index.d.ts +1 -0
  83. package/dist/index.js +698 -22
  84. package/dist/index.mjs +681 -24
  85. package/dist/kernel/gc-census.d.ts +18 -1
  86. package/dist/kernel/settings-view-types.d.ts +2 -0
  87. package/dist/kernel/transport/local-transport.d.ts +3 -0
  88. package/dist/kernel/transport/peer-answered-error.d.ts +5 -1
  89. package/dist/{lib-NNxHSOIE.js → lib-8oZrELLm.js} +1 -1
  90. package/dist/{lib-BeGzVQcd.mjs → lib-DK38ompL.mjs} +1 -1
  91. package/dist/{restore-archive-DNxAStrJ.mjs → restore-archive-CpdUO-uS.mjs} +1 -1
  92. package/dist/{restore-archive-C75srVbG.js → restore-archive-DiGiI6Jp.js} +1 -1
  93. package/dist/{retired-settings-keys-DNfV28R_.js → retired-settings-keys-CyQ7uvta.js} +1 -1
  94. package/dist/{retired-settings-keys-C5qP9QIf.mjs → retired-settings-keys-UsVtLOT0.mjs} +1 -1
  95. package/dist/tls/agent-https.d.ts +2 -2
  96. package/dist/tls/boot-tls.d.ts +6 -0
  97. package/dist/tls/cert-evaluation.d.ts +1 -1
  98. package/dist/tls/cert-issue.d.ts +5 -1
  99. package/dist/tls/cert-manager.d.ts +18 -0
  100. package/dist/tls/cert-name-constraints.d.ts +53 -0
  101. package/dist/tls/index.d.ts +5 -4
  102. package/dist/tls/tls-actions.d.ts +27 -7
  103. package/dist/tls/tls-status.d.ts +22 -0
  104. package/dist/tls/uploaded-cert.d.ts +36 -4
  105. package/dist/{wal-maintenance-Ch79gy9S.js → wal-maintenance-DEL_jeG0.js} +0 -0
  106. package/dist/{wal-maintenance-DvnVO5IK.mjs → wal-maintenance-xsvdT5Go.mjs} +0 -0
  107. package/dist/{x509.es-r7Ht1thA.js → x509.es-C4cOo48M.js} +36 -0
  108. package/dist/{x509.es-CDvj67p1.mjs → x509.es-DK__ETIe.mjs} +1 -1
  109. package/package.json +3 -1
@@ -1,4 +1,4 @@
1
- import { Cr as BaseAddon, pi as EventCategory } from "../../dist-m5JkT8UN.mjs";
1
+ import { Or as BaseAddon, yi as EventCategory } from "../../dist-yI6kF6r6.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-CEAyXW3Q.js");
6
+ const require_dist = require("../../dist-BOWdLjoK.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");
@@ -1707,13 +1707,17 @@ var SnapshotAddon = class SnapshotAddon extends require_dist.BaseAddon {
1707
1707
  return this.schema({ sections: [{
1708
1708
  id: "snapshot-cache",
1709
1709
  title: "Snapshot Cache",
1710
+ titleKey: "server:globalSettings.s_snapshot-cache.title",
1710
1711
  description: "Stale fallback when live capture fails. Per-device freshness is configured under Device → Snapshot → Max cache age.",
1712
+ descriptionKey: "server:globalSettings.s_snapshot-cache.description",
1711
1713
  columns: 1,
1712
1714
  fields: [this.field({
1713
1715
  type: "number",
1714
1716
  key: "staleTtlMs",
1715
1717
  label: "Stale fallback TTL (ms)",
1718
+ labelKey: "server:globalSettings.s_snapshot-cache.staleTtlMs.label",
1716
1719
  description: "If live capture fails, cached snapshot younger than this is still returned.",
1720
+ descriptionKey: "server:globalSettings.s_snapshot-cache.staleTtlMs.description",
1717
1721
  min: 0,
1718
1722
  max: 36e5,
1719
1723
  step: 1e3,
@@ -2322,6 +2326,7 @@ var SnapshotAddon = class SnapshotAddon extends require_dist.BaseAddon {
2322
2326
  return { sections: [{
2323
2327
  id: "snapshot-preferences",
2324
2328
  title: "Snapshot",
2329
+ titleKey: "server:deviceSettingsContribution.s_snapshot-preferences.title",
2325
2330
  tab: "snapshot",
2326
2331
  order: 60,
2327
2332
  fields: [
@@ -2329,7 +2334,9 @@ var SnapshotAddon = class SnapshotAddon extends require_dist.BaseAddon {
2329
2334
  type: "select",
2330
2335
  key: "snapshotStreamId",
2331
2336
  label: "Preferred stream",
2337
+ labelKey: "server:deviceSettingsContribution.s_snapshot-preferences.snapshotStreamId.label",
2332
2338
  description: "Stream used when grabbing a snapshot",
2339
+ descriptionKey: "server:deviceSettingsContribution.s_snapshot-preferences.snapshotStreamId.description",
2333
2340
  options: streamOptions,
2334
2341
  required: true,
2335
2342
  value: current.snapshotStreamId || "auto"
@@ -2338,6 +2345,7 @@ var SnapshotAddon = class SnapshotAddon extends require_dist.BaseAddon {
2338
2345
  type: "number",
2339
2346
  key: "snapshotMaxAgeS",
2340
2347
  label: "Max cache age (s)",
2348
+ labelKey: "server:deviceSettingsContribution.s_snapshot-preferences.snapshotMaxAgeS.label",
2341
2349
  description: `Serve cached snapshot up to this age before re-capturing. Default ${defaultMaxAgeS}s for ${isBattery ? "battery cams (avoids gratuitous wake-ups)" : "non-battery cams (live-feel)"}. The UI refresh button always forces a fresh capture regardless of this value.`,
2342
2350
  min: 0,
2343
2351
  max: 24 * 3600,
@@ -2348,7 +2356,9 @@ var SnapshotAddon = class SnapshotAddon extends require_dist.BaseAddon {
2348
2356
  type: "boolean",
2349
2357
  key: "snapshotDebug",
2350
2358
  label: "Debug logging",
2359
+ labelKey: "server:deviceSettingsContribution.s_snapshot-preferences.snapshotDebug.label",
2351
2360
  description: "Log stream selection and timing details for this device.",
2361
+ descriptionKey: "server:deviceSettingsContribution.s_snapshot-preferences.snapshotDebug.description",
2352
2362
  value: current.snapshotDebug ?? false
2353
2363
  }
2354
2364
  ]
@@ -1,4 +1,4 @@
1
- import { $r as nodePin, Cr as BaseAddon, Kn as snapshotCapability, Qn as streamQualityLabel, Sr as errMsg, at as bareAddonId, hn as memoizePinnedFfmpeg, kt as deriveBatteryPresence, ot as batteryCapability, pi as EventCategory, s as BatteryStatusSchema, xr as DeviceType, yr as DeviceFeature } from "../../dist-m5JkT8UN.mjs";
1
+ import { Dr as errMsg, Er as DeviceType, Mt as deriveBatteryPresence, Or as BaseAddon, Xn as snapshotCapability, ct as bareAddonId, ii as nodePin, lt as batteryCapability, rr as streamQualityLabel, s as BatteryStatusSchema, wr as DeviceFeature, yi as EventCategory, yn as memoizePinnedFfmpeg } from "../../dist-yI6kF6r6.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";
@@ -1701,13 +1701,17 @@ var SnapshotAddon = class SnapshotAddon extends BaseAddon {
1701
1701
  return this.schema({ sections: [{
1702
1702
  id: "snapshot-cache",
1703
1703
  title: "Snapshot Cache",
1704
+ titleKey: "server:globalSettings.s_snapshot-cache.title",
1704
1705
  description: "Stale fallback when live capture fails. Per-device freshness is configured under Device → Snapshot → Max cache age.",
1706
+ descriptionKey: "server:globalSettings.s_snapshot-cache.description",
1705
1707
  columns: 1,
1706
1708
  fields: [this.field({
1707
1709
  type: "number",
1708
1710
  key: "staleTtlMs",
1709
1711
  label: "Stale fallback TTL (ms)",
1712
+ labelKey: "server:globalSettings.s_snapshot-cache.staleTtlMs.label",
1710
1713
  description: "If live capture fails, cached snapshot younger than this is still returned.",
1714
+ descriptionKey: "server:globalSettings.s_snapshot-cache.staleTtlMs.description",
1711
1715
  min: 0,
1712
1716
  max: 36e5,
1713
1717
  step: 1e3,
@@ -2316,6 +2320,7 @@ var SnapshotAddon = class SnapshotAddon extends BaseAddon {
2316
2320
  return { sections: [{
2317
2321
  id: "snapshot-preferences",
2318
2322
  title: "Snapshot",
2323
+ titleKey: "server:deviceSettingsContribution.s_snapshot-preferences.title",
2319
2324
  tab: "snapshot",
2320
2325
  order: 60,
2321
2326
  fields: [
@@ -2323,7 +2328,9 @@ var SnapshotAddon = class SnapshotAddon extends BaseAddon {
2323
2328
  type: "select",
2324
2329
  key: "snapshotStreamId",
2325
2330
  label: "Preferred stream",
2331
+ labelKey: "server:deviceSettingsContribution.s_snapshot-preferences.snapshotStreamId.label",
2326
2332
  description: "Stream used when grabbing a snapshot",
2333
+ descriptionKey: "server:deviceSettingsContribution.s_snapshot-preferences.snapshotStreamId.description",
2327
2334
  options: streamOptions,
2328
2335
  required: true,
2329
2336
  value: current.snapshotStreamId || "auto"
@@ -2332,6 +2339,7 @@ var SnapshotAddon = class SnapshotAddon extends BaseAddon {
2332
2339
  type: "number",
2333
2340
  key: "snapshotMaxAgeS",
2334
2341
  label: "Max cache age (s)",
2342
+ labelKey: "server:deviceSettingsContribution.s_snapshot-preferences.snapshotMaxAgeS.label",
2335
2343
  description: `Serve cached snapshot up to this age before re-capturing. Default ${defaultMaxAgeS}s for ${isBattery ? "battery cams (avoids gratuitous wake-ups)" : "non-battery cams (live-feel)"}. The UI refresh button always forces a fresh capture regardless of this value.`,
2336
2344
  min: 0,
2337
2345
  max: 24 * 3600,
@@ -2342,7 +2350,9 @@ var SnapshotAddon = class SnapshotAddon extends BaseAddon {
2342
2350
  type: "boolean",
2343
2351
  key: "snapshotDebug",
2344
2352
  label: "Debug logging",
2353
+ labelKey: "server:deviceSettingsContribution.s_snapshot-preferences.snapshotDebug.label",
2345
2354
  description: "Log stream selection and timing details for this device.",
2355
+ descriptionKey: "server:deviceSettingsContribution.s_snapshot-preferences.snapshotDebug.description",
2346
2356
  value: current.snapshotDebug ?? false
2347
2357
  }
2348
2358
  ]
@@ -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-CEAyXW3Q.js");
6
+ const require_dist = require("../../dist-BOWdLjoK.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");
@@ -155,11 +155,14 @@ var FilesystemStorageProvider = class FilesystemStorageProvider {
155
155
  configSchema: { sections: [{
156
156
  id: "filesystem-storage",
157
157
  title: "Filesystem",
158
+ titleKey: "server:providerInfo.s_filesystem-storage.title",
158
159
  fields: [{
159
160
  type: "text",
160
161
  key: "basePath",
161
162
  label: "Base path",
163
+ labelKey: "server:providerInfo.s_filesystem-storage.basePath.label",
162
164
  description: "Absolute directory path where files are stored.",
165
+ descriptionKey: "server:providerInfo.s_filesystem-storage.basePath.description",
163
166
  required: true
164
167
  }]
165
168
  }] }
@@ -1,4 +1,4 @@
1
- import { Cr as BaseAddon, Wt as filesystemBrowseCapability, Xn as storageProviderCapability } from "../../dist-m5JkT8UN.mjs";
1
+ import { Or as BaseAddon, qt as filesystemBrowseCapability, tr as storageProviderCapability } from "../../dist-yI6kF6r6.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";
@@ -149,11 +149,14 @@ var FilesystemStorageProvider = class FilesystemStorageProvider {
149
149
  configSchema: { sections: [{
150
150
  id: "filesystem-storage",
151
151
  title: "Filesystem",
152
+ titleKey: "server:providerInfo.s_filesystem-storage.title",
152
153
  fields: [{
153
154
  type: "text",
154
155
  key: "basePath",
155
156
  label: "Base path",
157
+ labelKey: "server:providerInfo.s_filesystem-storage.basePath.label",
156
158
  description: "Absolute directory path where files are stored.",
159
+ descriptionKey: "server:providerInfo.s_filesystem-storage.basePath.description",
157
160
  required: true
158
161
  }]
159
162
  }] }
@@ -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-Ch79gy9S.js");
7
+ const require_wal_maintenance = require("../../wal-maintenance-DEL_jeG0.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-DvnVO5IK.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-xsvdT5Go.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-CEAyXW3Q.js");
7
- const require_retired_settings_keys = require("../../retired-settings-keys-DNfV28R_.js");
8
- const require_wal_maintenance = require("../../wal-maintenance-Ch79gy9S.js");
6
+ const require_dist = require("../../dist-BOWdLjoK.js");
7
+ const require_retired_settings_keys = require("../../retired-settings-keys-CyQ7uvta.js");
8
+ const require_wal_maintenance = require("../../wal-maintenance-DEL_jeG0.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");
@@ -1,6 +1,6 @@
1
- import { Cr as BaseAddon, Or as RUNTIME_DEFAULTS, Sr as errMsg, Tt as databaseSnapshotCapability, _ as DATABASE_SNAPSHOT_PARTIAL_SUFFIX, ar as vectorStoreCapability, at as bareAddonId, b as DATA_STORE_DATABASES, v as DATABASE_SNAPSHOT_SUFFIX, wt as dataStoreProviderCapability, y as DATABASE_SNAPSHOT_TIMEOUT_MS } from "../../dist-m5JkT8UN.mjs";
2
- import { r as retiredKeyStoreOf, t as purgeRetiredSettingsKeys } from "../../retired-settings-keys-C5qP9QIf.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-DvnVO5IK.mjs";
1
+ import { Dr as errMsg, Dt as dataStoreProviderCapability, Nr as RUNTIME_DEFAULTS, Or as BaseAddon, Ot as databaseSnapshotCapability, S as DATA_STORE_DATABASES, b as DATABASE_SNAPSHOT_SUFFIX, ct as bareAddonId, ur as vectorStoreCapability, x as DATABASE_SNAPSHOT_TIMEOUT_MS, y as DATABASE_SNAPSHOT_PARTIAL_SUFFIX } from "../../dist-yI6kF6r6.mjs";
2
+ import { r as retiredKeyStoreOf, t as purgeRetiredSettingsKeys } from "../../retired-settings-keys-UsVtLOT0.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-xsvdT5Go.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";
@@ -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-CEAyXW3Q.js");
6
+ const require_dist = require("../../dist-BOWdLjoK.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 { $t as isLocationEnabled, Bt as evictionPolicyOfLocation, Cr as BaseAddon, Dr as REDACTED_SECRET, I as LegacyStorageLocationDefaultSchema, In as resolveLocationMode, J as StorageCleanupJobSchema, Jn as storageMigrationCapability, Jt as gbToBytes, Lr as collectSecretConfigKeys, Un as settingsStoreCapability, X as StorageLocationTypeSchema, Y as StorageLocationModeSchema, Z as StorageMigrationJobSchema, Zr as isSecretMarker, _n as modeMayWrite, ci as secretTreeFromPaths, fi as transformSecretWrite, mn as mayWriteToLocation, oi as resolveSecretMarkers, on as legacyModeOf, or as withLocationMode, pi as EventCategory, pn as mayReadLocation, qn as storageCapability, ti as parseJsonObject } from "../../dist-m5JkT8UN.mjs";
1
+ import { $ as StorageLocationTypeSchema, $n as storageMigrationCapability, Bn as resolveLocationMode, Hr as collectSecretConfigKeys, Mr as REDACTED_SECRET, Or as BaseAddon, Q as StorageLocationModeSchema, Qn as storageCapability, Ut as evictionPolicyOfLocation, Z as StorageCleanupJobSchema, Zt as gbToBytes, _i as transformSecretWrite, _n as mayReadLocation, di as resolveSecretMarkers, dr as withLocationMode, et as StorageMigrationJobSchema, ni as isSecretMarker, oi as parseJsonObject, pi as secretTreeFromPaths, qn as settingsStoreCapability, rn as isLocationEnabled, un as legacyModeOf, vn as mayWriteToLocation, xn as modeMayWrite, yi as EventCategory, z as LegacyStorageLocationDefaultSchema } from "../../dist-yI6kF6r6.mjs";
2
2
  import { z } from "zod";
3
3
  import { randomUUID } from "node:crypto";
4
4
  import { containsOrEquals, physicalRootOf } from "@camstack/types/node";
@@ -3,11 +3,11 @@ 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-CEAyXW3Q.js");
6
+ const require_dist = require("../../dist-BOWdLjoK.js");
7
7
  const require_safe_buffer$1 = require("../../safe-buffer-D3aoa-7X.js");
8
- const require_x509_es = require("../../x509.es-r7Ht1thA.js");
9
- const require_agent_https = require("../../agent-https-BZIwS4xF.js");
10
- const require_constants$8 = require("../../constants-CwRY32Nx.js");
8
+ const require_x509_es = require("../../x509.es-C4cOo48M.js");
9
+ const require_agent_https = require("../../agent-https-DlpTMDqA.js");
10
+ const require_constants$8 = require("../../constants-BRsjQwi-.js");
11
11
  const require_src$1 = require("../../src-CnAqG6EF.js");
12
12
  let zod = require("zod");
13
13
  let node_crypto = require("node:crypto");
@@ -88604,6 +88604,7 @@ var SystemConfigAddon = class extends require_dist.BaseAddon {
88604
88604
  id: "system-config-server",
88605
88605
  title: SECTION_TITLES["server"],
88606
88606
  description: "The name of this server, and its connection settings (read-only, loaded from config.yaml at bootstrap).",
88607
+ descriptionKey: "server:global.s_system-config-server.description",
88607
88608
  columns: 2,
88608
88609
  fields: [
88609
88610
  {
@@ -88618,6 +88619,7 @@ var SystemConfigAddon = class extends require_dist.BaseAddon {
88618
88619
  type: "info",
88619
88620
  key: "server-restart-note",
88620
88621
  label: "Restart required",
88622
+ labelKey: "server:global.s_system-config-server.server-restart-note.label",
88621
88623
  content: "Port, host and data path are read-only. Change them in config.yaml and restart.",
88622
88624
  variant: "warning"
88623
88625
  },
@@ -88625,21 +88627,27 @@ var SystemConfigAddon = class extends require_dist.BaseAddon {
88625
88627
  type: "text",
88626
88628
  key: "port",
88627
88629
  label: "Port",
88630
+ labelKey: "server:global.s_system-config-server.port.label",
88628
88631
  description: "Listening port",
88632
+ descriptionKey: "server:global.s_system-config-server.port.description",
88629
88633
  disabled: true
88630
88634
  },
88631
88635
  {
88632
88636
  type: "text",
88633
88637
  key: "host",
88634
88638
  label: "Host",
88639
+ labelKey: "server:global.s_system-config-server.host.label",
88635
88640
  description: "Bind address",
88641
+ descriptionKey: "server:global.s_system-config-server.host.description",
88636
88642
  disabled: true
88637
88643
  },
88638
88644
  {
88639
88645
  type: "text",
88640
88646
  key: "dataPath",
88641
88647
  label: "Data Path",
88648
+ labelKey: "server:global.s_system-config-server.dataPath.label",
88642
88649
  description: "Root data directory",
88650
+ descriptionKey: "server:global.s_system-config-server.dataPath.description",
88643
88651
  disabled: true,
88644
88652
  span: 2
88645
88653
  }
@@ -88649,13 +88657,16 @@ var SystemConfigAddon = class extends require_dist.BaseAddon {
88649
88657
  id: "system-config-auth",
88650
88658
  title: SECTION_TITLES["auth"],
88651
88659
  description: "Token and session settings.",
88660
+ descriptionKey: "server:global.s_system-config-auth.description",
88652
88661
  columns: 1,
88653
88662
  fields: [
88654
88663
  {
88655
88664
  type: "text",
88656
88665
  key: "tokenExpiry",
88657
88666
  label: "Session lifetime",
88667
+ labelKey: "server:global.s_system-config-auth.tokenExpiry.label",
88658
88668
  description: "How long a sign-in lasts without being used, as a duration string (e.g. 7d, 30d). Every refresh starts it again, so a device in use stays signed in; one left unopened this long must sign in again. A bare number is rejected — it would be read as milliseconds. Applies from the next sign-in or refresh.",
88669
+ descriptionKey: "server:global.s_system-config-auth.tokenExpiry.description",
88659
88670
  placeholder: "30d",
88660
88671
  default: "30d"
88661
88672
  },
@@ -88663,7 +88674,9 @@ var SystemConfigAddon = class extends require_dist.BaseAddon {
88663
88674
  type: "text",
88664
88675
  key: "accessTokenExpiry",
88665
88676
  label: "Access token lifetime",
88677
+ labelKey: "server:global.s_system-config-auth.accessTokenExpiry.label",
88666
88678
  description: "How long one access token lives before the app silently swaps it for a new one (e.g. 2h; between 5m and 24h, never longer than the session). Shorter limits how long a copied token is useful. Apps that predate refresh tokens get one token for the whole session instead.",
88679
+ descriptionKey: "server:global.s_system-config-auth.accessTokenExpiry.description",
88667
88680
  placeholder: "2h",
88668
88681
  default: "2h"
88669
88682
  },
@@ -88671,13 +88684,16 @@ var SystemConfigAddon = class extends require_dist.BaseAddon {
88671
88684
  type: "tags",
88672
88685
  key: "trustedProxies",
88673
88686
  label: "Trusted reverse proxies",
88687
+ labelKey: "server:global.s_system-config-auth.trustedProxies.label",
88674
88688
  description: "Addresses or CIDR ranges (e.g. 192.168.1.2 or 10.0.0.0/24) of reverse proxies in front of the hub. Only a request whose direct sender is one of these — or this host itself, as with the Cloudflare tunnel — has its X-Forwarded-For / CF-Connecting-IP read as the real client address for rate limits. Leave empty unless a proxy on another host forwards to the hub.",
88689
+ descriptionKey: "server:global.s_system-config-auth.trustedProxies.description",
88675
88690
  creatable: true
88676
88691
  },
88677
88692
  {
88678
88693
  type: "info",
88679
88694
  key: "trustedNetworksWarning",
88680
88695
  label: "Skipping two-factor authentication",
88696
+ labelKey: "server:global.s_system-config-auth.trustedNetworksWarning.label",
88681
88697
  variant: "danger",
88682
88698
  content: "A sign-in made DIRECTLY from a network listed below skips the second factor (TOTP or passkey): anyone on that network who knows or guesses a password gets in with the password alone — including a compromised camera or a guest device. Requests that come through the Cloudflare tunnel, the public address or any reverse proxy never skip it, whatever address they claim. Every skip is recorded in the authentication audit log. Leave empty (the default) to always ask for the second factor."
88683
88699
  },
@@ -88685,7 +88701,9 @@ var SystemConfigAddon = class extends require_dist.BaseAddon {
88685
88701
  type: "tags",
88686
88702
  key: "trustedNetworks",
88687
88703
  label: "Trusted networks (skip the second factor)",
88704
+ labelKey: "server:global.s_system-config-auth.trustedNetworks.label",
88688
88705
  description: "Addresses or CIDR ranges, e.g. 192.168.1.0/24. Keep it as narrow as you can — a single trusted VLAN, not the whole LAN.",
88706
+ descriptionKey: "server:global.s_system-config-auth.trustedNetworks.description",
88689
88707
  creatable: true
88690
88708
  }
88691
88709
  ]
@@ -1,9 +1,9 @@
1
1
  import { a as __toCommonJS, i as __require, n as __esmMin, o as __toESM, r as __exportAll, t as __commonJSMin } from "../../chunk-CNf5ZN-e.mjs";
2
- import { Br as customAction, Cr as BaseAddon, K as ServerNameSchema, Kr as hydrateSchema, Sr as errMsg, Vr as defineCustomActions, Wn as shortHostname } from "../../dist-m5JkT8UN.mjs";
2
+ import { Dr as errMsg, Gr as customAction, Jn as shortHostname, Kr as defineCustomActions, Or as BaseAddon, Y as ServerNameSchema, Zr as hydrateSchema } from "../../dist-yI6kF6r6.mjs";
3
3
  import { t as require_safe_buffer } from "../../safe-buffer-B1OjL1I9.mjs";
4
- import { a as KeyUsagesExtension, c as Pkcs10CertificateRequestGenerator, d as X509Certificate$1, f as X509CertificateGenerator, g as backdatedNotBefore, i as KeyUsageFlags, n as BasicConstraintsExtension, o as PemConverter, p as cryptoProvider, r as ExtendedKeyUsageExtension, s as Pkcs10CertificateRequest, t as AuthorityKeyIdentifierExtension, u as SubjectKeyIdentifierExtension } from "../../x509.es-CDvj67p1.mjs";
5
- import { A as AgentHttpsNames, M as setProcessAgentHttpsNames, O as AGENT_HTTPS_NAMES_COLLECTION, d as isPrivateAddress, j as getProcessAgentHttpsNames, k as AGENT_HTTPS_NAMES_COLUMNS, u as isLocalOnlyHostname } from "../../agent-https-BPfHrI4c.mjs";
6
- import { a as MESH_CA_KEY_REF, c as SERVER_AUTH_OID, i as MESH_CA_FIELD, n as DEFAULT_HUB_TLS_TCP_PORT, o as MESH_CA_SETTINGS_KEY, r as MESH_CA_COMMON_NAME, s as MESH_CA_VALIDITY_DAYS, t as CLIENT_AUTH_OID } from "../../constants-Bc6trhoW.mjs";
4
+ import { S as backdatedNotBefore, a as KeyUsageFlags, c as Pkcs10CertificateRequest, d as SubjectKeyIdentifierExtension, f as X509Certificate$1, l as Pkcs10CertificateRequestGenerator, m as cryptoProvider, n as BasicConstraintsExtension, o as KeyUsagesExtension, p as X509CertificateGenerator, r as ExtendedKeyUsageExtension, s as PemConverter, t as AuthorityKeyIdentifierExtension } from "../../x509.es-DK__ETIe.mjs";
5
+ import { F as AGENT_HTTPS_NAMES_COLLECTION, I as AGENT_HTTPS_NAMES_COLUMNS, L as AgentHttpsNames, R as getProcessAgentHttpsNames, j as isLocalOnlyHostname, u as isPrivateAddress, z as setProcessAgentHttpsNames } from "../../agent-https-U0d4uvn2.mjs";
6
+ import { a as MESH_CA_KEY_REF, c as SERVER_AUTH_OID, i as MESH_CA_FIELD, n as DEFAULT_HUB_TLS_TCP_PORT, o as MESH_CA_SETTINGS_KEY, r as MESH_CA_COMMON_NAME, s as MESH_CA_VALIDITY_DAYS, t as CLIENT_AUTH_OID } from "../../constants-B92BjObl.mjs";
7
7
  import { t as require_src } from "../../src-hG4grMU4.mjs";
8
8
  import { z } from "zod";
9
9
  import { X509Certificate, createHash, createPrivateKey, randomBytes, randomInt, sign, timingSafeEqual, verify, webcrypto } from "node:crypto";
@@ -88586,6 +88586,7 @@ var SystemConfigAddon = class extends BaseAddon {
88586
88586
  id: "system-config-server",
88587
88587
  title: SECTION_TITLES["server"],
88588
88588
  description: "The name of this server, and its connection settings (read-only, loaded from config.yaml at bootstrap).",
88589
+ descriptionKey: "server:global.s_system-config-server.description",
88589
88590
  columns: 2,
88590
88591
  fields: [
88591
88592
  {
@@ -88600,6 +88601,7 @@ var SystemConfigAddon = class extends BaseAddon {
88600
88601
  type: "info",
88601
88602
  key: "server-restart-note",
88602
88603
  label: "Restart required",
88604
+ labelKey: "server:global.s_system-config-server.server-restart-note.label",
88603
88605
  content: "Port, host and data path are read-only. Change them in config.yaml and restart.",
88604
88606
  variant: "warning"
88605
88607
  },
@@ -88607,21 +88609,27 @@ var SystemConfigAddon = class extends BaseAddon {
88607
88609
  type: "text",
88608
88610
  key: "port",
88609
88611
  label: "Port",
88612
+ labelKey: "server:global.s_system-config-server.port.label",
88610
88613
  description: "Listening port",
88614
+ descriptionKey: "server:global.s_system-config-server.port.description",
88611
88615
  disabled: true
88612
88616
  },
88613
88617
  {
88614
88618
  type: "text",
88615
88619
  key: "host",
88616
88620
  label: "Host",
88621
+ labelKey: "server:global.s_system-config-server.host.label",
88617
88622
  description: "Bind address",
88623
+ descriptionKey: "server:global.s_system-config-server.host.description",
88618
88624
  disabled: true
88619
88625
  },
88620
88626
  {
88621
88627
  type: "text",
88622
88628
  key: "dataPath",
88623
88629
  label: "Data Path",
88630
+ labelKey: "server:global.s_system-config-server.dataPath.label",
88624
88631
  description: "Root data directory",
88632
+ descriptionKey: "server:global.s_system-config-server.dataPath.description",
88625
88633
  disabled: true,
88626
88634
  span: 2
88627
88635
  }
@@ -88631,13 +88639,16 @@ var SystemConfigAddon = class extends BaseAddon {
88631
88639
  id: "system-config-auth",
88632
88640
  title: SECTION_TITLES["auth"],
88633
88641
  description: "Token and session settings.",
88642
+ descriptionKey: "server:global.s_system-config-auth.description",
88634
88643
  columns: 1,
88635
88644
  fields: [
88636
88645
  {
88637
88646
  type: "text",
88638
88647
  key: "tokenExpiry",
88639
88648
  label: "Session lifetime",
88649
+ labelKey: "server:global.s_system-config-auth.tokenExpiry.label",
88640
88650
  description: "How long a sign-in lasts without being used, as a duration string (e.g. 7d, 30d). Every refresh starts it again, so a device in use stays signed in; one left unopened this long must sign in again. A bare number is rejected — it would be read as milliseconds. Applies from the next sign-in or refresh.",
88651
+ descriptionKey: "server:global.s_system-config-auth.tokenExpiry.description",
88641
88652
  placeholder: "30d",
88642
88653
  default: "30d"
88643
88654
  },
@@ -88645,7 +88656,9 @@ var SystemConfigAddon = class extends BaseAddon {
88645
88656
  type: "text",
88646
88657
  key: "accessTokenExpiry",
88647
88658
  label: "Access token lifetime",
88659
+ labelKey: "server:global.s_system-config-auth.accessTokenExpiry.label",
88648
88660
  description: "How long one access token lives before the app silently swaps it for a new one (e.g. 2h; between 5m and 24h, never longer than the session). Shorter limits how long a copied token is useful. Apps that predate refresh tokens get one token for the whole session instead.",
88661
+ descriptionKey: "server:global.s_system-config-auth.accessTokenExpiry.description",
88649
88662
  placeholder: "2h",
88650
88663
  default: "2h"
88651
88664
  },
@@ -88653,13 +88666,16 @@ var SystemConfigAddon = class extends BaseAddon {
88653
88666
  type: "tags",
88654
88667
  key: "trustedProxies",
88655
88668
  label: "Trusted reverse proxies",
88669
+ labelKey: "server:global.s_system-config-auth.trustedProxies.label",
88656
88670
  description: "Addresses or CIDR ranges (e.g. 192.168.1.2 or 10.0.0.0/24) of reverse proxies in front of the hub. Only a request whose direct sender is one of these — or this host itself, as with the Cloudflare tunnel — has its X-Forwarded-For / CF-Connecting-IP read as the real client address for rate limits. Leave empty unless a proxy on another host forwards to the hub.",
88671
+ descriptionKey: "server:global.s_system-config-auth.trustedProxies.description",
88657
88672
  creatable: true
88658
88673
  },
88659
88674
  {
88660
88675
  type: "info",
88661
88676
  key: "trustedNetworksWarning",
88662
88677
  label: "Skipping two-factor authentication",
88678
+ labelKey: "server:global.s_system-config-auth.trustedNetworksWarning.label",
88663
88679
  variant: "danger",
88664
88680
  content: "A sign-in made DIRECTLY from a network listed below skips the second factor (TOTP or passkey): anyone on that network who knows or guesses a password gets in with the password alone — including a compromised camera or a guest device. Requests that come through the Cloudflare tunnel, the public address or any reverse proxy never skip it, whatever address they claim. Every skip is recorded in the authentication audit log. Leave empty (the default) to always ask for the second factor."
88665
88681
  },
@@ -88667,7 +88683,9 @@ var SystemConfigAddon = class extends BaseAddon {
88667
88683
  type: "tags",
88668
88684
  key: "trustedNetworks",
88669
88685
  label: "Trusted networks (skip the second factor)",
88686
+ labelKey: "server:global.s_system-config-auth.trustedNetworks.label",
88670
88687
  description: "Addresses or CIDR ranges, e.g. 192.168.1.0/24. Keep it as narrow as you can — a single trusted VLAN, not the whole LAN.",
88688
+ descriptionKey: "server:global.s_system-config-auth.trustedNetworks.description",
88671
88689
  creatable: true
88672
88690
  }
88673
88691
  ]
@@ -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-CEAyXW3Q.js");
6
+ const require_dist = require("../../dist-BOWdLjoK.js");
7
7
  const require_formatter = require("../../formatter-DqAKDlvN.js");
8
8
  let node_path = require("node:path");
9
9
  node_path = require_chunk.__toESM(node_path);
@@ -106,36 +106,45 @@ var WinstonLoggingAddon = class extends require_dist.BaseAddon {
106
106
  return this.schema({ sections: [{
107
107
  id: "winston-logging",
108
108
  title: "Logging",
109
+ titleKey: "server:globalSettings.s_winston-logging.title",
109
110
  description: "Global log verbosity + retention for rotated log files on this node.",
111
+ descriptionKey: "server:globalSettings.s_winston-logging.description",
110
112
  columns: 2,
111
113
  fields: [this.field({
112
114
  type: "select",
113
115
  key: "level",
114
116
  label: "Log Level",
117
+ labelKey: "server:globalSettings.s_winston-logging.level.label",
115
118
  default: "info",
116
119
  options: [
117
120
  {
118
121
  value: "debug",
119
- label: "Debug"
122
+ label: "Debug",
123
+ labelKey: "server:globalSettings.s_winston-logging.level.o_debug.label"
120
124
  },
121
125
  {
122
126
  value: "info",
123
- label: "Info"
127
+ label: "Info",
128
+ labelKey: "server:globalSettings.s_winston-logging.level.o_info.label"
124
129
  },
125
130
  {
126
131
  value: "warn",
127
- label: "Warn"
132
+ label: "Warn",
133
+ labelKey: "server:globalSettings.s_winston-logging.level.o_warn.label"
128
134
  },
129
135
  {
130
136
  value: "error",
131
- label: "Error"
137
+ label: "Error",
138
+ labelKey: "server:globalSettings.s_winston-logging.level.o_error.label"
132
139
  }
133
140
  ]
134
141
  }), this.field({
135
142
  type: "number",
136
143
  key: "retentionDays",
137
144
  label: "Retention (days)",
145
+ labelKey: "server:globalSettings.s_winston-logging.retentionDays.label",
138
146
  description: "Number of days to keep rotated log files before deletion",
147
+ descriptionKey: "server:globalSettings.s_winston-logging.retentionDays.description",
139
148
  min: 1,
140
149
  max: 365,
141
150
  step: 1,
@@ -1,4 +1,4 @@
1
- import { Cr as BaseAddon, un as logDestinationCapability } from "../../dist-m5JkT8UN.mjs";
1
+ import { Or as BaseAddon, mn as logDestinationCapability } from "../../dist-yI6kF6r6.mjs";
2
2
  import { t as formatLogLine } from "../../formatter-B7qW8bPJ.mjs";
3
3
  import * as path$1 from "node:path";
4
4
  import path from "node:path";
@@ -99,36 +99,45 @@ var WinstonLoggingAddon = class extends BaseAddon {
99
99
  return this.schema({ sections: [{
100
100
  id: "winston-logging",
101
101
  title: "Logging",
102
+ titleKey: "server:globalSettings.s_winston-logging.title",
102
103
  description: "Global log verbosity + retention for rotated log files on this node.",
104
+ descriptionKey: "server:globalSettings.s_winston-logging.description",
103
105
  columns: 2,
104
106
  fields: [this.field({
105
107
  type: "select",
106
108
  key: "level",
107
109
  label: "Log Level",
110
+ labelKey: "server:globalSettings.s_winston-logging.level.label",
108
111
  default: "info",
109
112
  options: [
110
113
  {
111
114
  value: "debug",
112
- label: "Debug"
115
+ label: "Debug",
116
+ labelKey: "server:globalSettings.s_winston-logging.level.o_debug.label"
113
117
  },
114
118
  {
115
119
  value: "info",
116
- label: "Info"
120
+ label: "Info",
121
+ labelKey: "server:globalSettings.s_winston-logging.level.o_info.label"
117
122
  },
118
123
  {
119
124
  value: "warn",
120
- label: "Warn"
125
+ label: "Warn",
126
+ labelKey: "server:globalSettings.s_winston-logging.level.o_warn.label"
121
127
  },
122
128
  {
123
129
  value: "error",
124
- label: "Error"
130
+ label: "Error",
131
+ labelKey: "server:globalSettings.s_winston-logging.level.o_error.label"
125
132
  }
126
133
  ]
127
134
  }), this.field({
128
135
  type: "number",
129
136
  key: "retentionDays",
130
137
  label: "Retention (days)",
138
+ labelKey: "server:globalSettings.s_winston-logging.retentionDays.label",
131
139
  description: "Number of days to keep rotated log files before deletion",
140
+ descriptionKey: "server:globalSettings.s_winston-logging.retentionDays.description",
132
141
  min: 1,
133
142
  max: 365,
134
143
  step: 1,
@@ -1,4 +1,4 @@
1
- const require_dist = require("./dist-CEAyXW3Q.js");
1
+ const require_dist = require("./dist-BOWdLjoK.js");
2
2
  //#region src/builtins/core-blocks/composition-sources.ts
3
3
  /**
4
4
  * Describe what a composition reads and writes for SAVE-time validation
@@ -1,4 +1,4 @@
1
- import { Sr as errMsg, hr as compositionSourceKey } from "./dist-m5JkT8UN.mjs";
1
+ import { Dr as errMsg, br as compositionSourceKey } from "./dist-yI6kF6r6.mjs";
2
2
  //#region src/builtins/core-blocks/composition-sources.ts
3
3
  /**
4
4
  * Describe what a composition reads and writes for SAVE-time validation
@@ -1,4 +1,4 @@
1
- import { Ir as buildSecretRef } from "./dist-m5JkT8UN.mjs";
1
+ import { Vr as buildSecretRef } from "./dist-yI6kF6r6.mjs";
2
2
  /** `secret://system/global/meshCaKey` — EC P-256 PKCS#8 PEM of the hub mesh CA. */
3
3
  var MESH_CA_KEY_REF = buildSecretRef({
4
4
  owner: "system",
@@ -1,5 +1,5 @@
1
1
  /** `secret://system/global/meshCaKey` — EC P-256 PKCS#8 PEM of the hub mesh CA. */
2
- var MESH_CA_KEY_REF = require("./dist-CEAyXW3Q.js").buildSecretRef({
2
+ var MESH_CA_KEY_REF = require("./dist-BOWdLjoK.js").buildSecretRef({
3
3
  owner: "system",
4
4
  scope: { kind: "global" },
5
5
  fieldPath: "meshCaKey"
@@ -1,5 +1,5 @@
1
- import { E as DEVICE_SAN_USER_PREFIX, Ir as buildSecretRef, T as DEVICE_SAN_CREDENTIAL_PREFIX } from "./dist-m5JkT8UN.mjs";
2
- import { a as KeyUsagesExtension, d as X509Certificate$1, f as X509CertificateGenerator, g as backdatedNotBefore, i as KeyUsageFlags, l as SubjectAlternativeNameExtension, n as BasicConstraintsExtension, o as PemConverter, p as cryptoProvider, r as ExtendedKeyUsageExtension, t as AuthorityKeyIdentifierExtension, u as SubjectKeyIdentifierExtension } from "./x509.es-CDvj67p1.mjs";
1
+ import { D as DEVICE_SAN_CREDENTIAL_PREFIX, O as DEVICE_SAN_USER_PREFIX, Vr as buildSecretRef } from "./dist-yI6kF6r6.mjs";
2
+ import { S as backdatedNotBefore, a as KeyUsageFlags, d as SubjectKeyIdentifierExtension, f as X509Certificate$1, m as cryptoProvider, n as BasicConstraintsExtension, o as KeyUsagesExtension, p as X509CertificateGenerator, r as ExtendedKeyUsageExtension, s as PemConverter, t as AuthorityKeyIdentifierExtension, u as SubjectAlternativeNameExtension } from "./x509.es-DK__ETIe.mjs";
3
3
  import { X509Certificate, createPublicKey, randomBytes, verify, webcrypto } from "node:crypto";
4
4
  //#region src/auth/jwt-signing-key.ts
5
5
  /**