@camstack/system 1.2.436 → 1.2.438

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 (96) hide show
  1. package/dist/addon-runner.js +64 -12
  2. package/dist/addon-runner.mjs +65 -13
  3. package/dist/{agent-https-B8lKYVtU.mjs → agent-https-BPfHrI4c.mjs} +3 -3
  4. package/dist/auth/login-session-manager.d.ts +2 -0
  5. package/dist/auth/session-revocation-bus.d.ts +32 -0
  6. package/dist/builtins/addon-pages-aggregator/addon-pages-aggregator.addon.js +1 -1
  7. package/dist/builtins/addon-pages-aggregator/addon-pages-aggregator.addon.mjs +1 -1
  8. package/dist/builtins/addon-widgets-aggregator/addon-widgets-aggregator.addon.js +1 -1
  9. package/dist/builtins/addon-widgets-aggregator/addon-widgets-aggregator.addon.mjs +1 -1
  10. package/dist/builtins/alerts/alerts.addon.js +7 -1
  11. package/dist/builtins/alerts/alerts.addon.mjs +7 -1
  12. package/dist/builtins/autotrack/index.js +1 -1
  13. package/dist/builtins/autotrack/index.mjs +1 -1
  14. package/dist/builtins/backup-orchestrator/backup-orchestrator.addon.js +2 -2
  15. package/dist/builtins/backup-orchestrator/backup-orchestrator.addon.mjs +2 -2
  16. package/dist/builtins/calendars/calendars.addon.js +1 -1
  17. package/dist/builtins/calendars/calendars.addon.mjs +1 -1
  18. package/dist/builtins/camera-grid/index.js +9 -1
  19. package/dist/builtins/camera-grid/index.mjs +9 -1
  20. package/dist/builtins/composer/composer.addon.js +2 -2
  21. package/dist/builtins/composer/composer.addon.mjs +2 -2
  22. package/dist/builtins/console-logging/index.js +12 -5
  23. package/dist/builtins/console-logging/index.mjs +12 -5
  24. package/dist/builtins/core-blocks/core-blocks.addon.js +2 -2
  25. package/dist/builtins/core-blocks/core-blocks.addon.mjs +5 -5
  26. package/dist/builtins/device-manager/device-manager.addon.d.ts +5 -0
  27. package/dist/builtins/device-manager/device-manager.addon.js +702 -28
  28. package/dist/builtins/device-manager/device-manager.addon.mjs +702 -28
  29. package/dist/builtins/device-manager/device-meta-types.d.ts +4 -0
  30. package/dist/builtins/device-manager/device-provider-context.d.ts +9 -0
  31. package/dist/builtins/device-manager/device-removal-hooks.d.ts +103 -0
  32. package/dist/builtins/device-manager/device-row-store.d.ts +1 -0
  33. package/dist/builtins/device-manager/device-tombstone-store.d.ts +58 -0
  34. package/dist/builtins/device-manager/removal-cleanup.d.ts +50 -0
  35. package/dist/builtins/hub-forwarder/index.js +1 -1
  36. package/dist/builtins/hub-forwarder/index.mjs +1 -1
  37. package/dist/builtins/keychain/index.js +37 -4
  38. package/dist/builtins/keychain/index.mjs +37 -4
  39. package/dist/builtins/keychain/keychain-service.d.ts +14 -0
  40. package/dist/builtins/keychain/keychain-store.d.ts +1 -1
  41. package/dist/builtins/liveness-monitor/liveness-monitor.addon.js +1 -1
  42. package/dist/builtins/liveness-monitor/liveness-monitor.addon.mjs +1 -1
  43. package/dist/builtins/local-auth/local-auth.addon.js +53 -12
  44. package/dist/builtins/local-auth/local-auth.addon.mjs +53 -13
  45. package/dist/builtins/local-network/local-network.addon.js +10 -1
  46. package/dist/builtins/local-network/local-network.addon.mjs +13 -4
  47. package/dist/builtins/loki-logging/index.js +28 -5
  48. package/dist/builtins/loki-logging/index.mjs +28 -5
  49. package/dist/builtins/native-metrics/native-metrics.addon.js +11 -1
  50. package/dist/builtins/native-metrics/native-metrics.addon.mjs +20 -10
  51. package/dist/builtins/platform-probe/index.js +1 -1
  52. package/dist/builtins/platform-probe/index.mjs +8 -8
  53. package/dist/builtins/remote-access-orchestrator/remote-access-orchestrator.addon.js +1 -1
  54. package/dist/builtins/remote-access-orchestrator/remote-access-orchestrator.addon.mjs +1 -1
  55. package/dist/builtins/snapshot/index.js +11 -1
  56. package/dist/builtins/snapshot/index.mjs +11 -1
  57. package/dist/builtins/sqlite-storage/filesystem-storage.addon.js +4 -1
  58. package/dist/builtins/sqlite-storage/filesystem-storage.addon.mjs +4 -1
  59. package/dist/builtins/sqlite-storage/index.js +1 -1
  60. package/dist/builtins/sqlite-storage/index.mjs +1 -1
  61. package/dist/builtins/sqlite-storage/sqlite-settings.addon.js +3 -3
  62. package/dist/builtins/sqlite-storage/sqlite-settings.addon.mjs +3 -3
  63. package/dist/builtins/storage-orchestrator/storage-orchestrator.addon.js +1 -1
  64. package/dist/builtins/storage-orchestrator/storage-orchestrator.addon.mjs +1 -1
  65. package/dist/builtins/system-config/system-config.addon.d.ts +9 -0
  66. package/dist/builtins/system-config/system-config.addon.js +135 -72
  67. package/dist/builtins/system-config/system-config.addon.mjs +135 -73
  68. package/dist/builtins/winston-logging/index.js +14 -5
  69. package/dist/builtins/winston-logging/index.mjs +14 -5
  70. package/dist/{composition-sources-BAOlCu4j.js → composition-sources-DI3Z83vG.js} +1 -1
  71. package/dist/{composition-sources-gN_BWUKp.mjs → composition-sources-DpHGCjdL.mjs} +1 -1
  72. package/dist/{constants-BFpowodq.mjs → constants-DQK705Sb.mjs} +1 -1
  73. package/dist/{constants-GENKqk9k.js → constants-wkcn5Ij3.js} +1 -1
  74. package/dist/{device-ca-CuWuRW9N.js → device-ca-BSvkXqyI.js} +1 -1
  75. package/dist/{device-ca-BNM5ai4t.mjs → device-ca-DvIZjXIl.mjs} +1 -1
  76. package/dist/{dist-DjD2M79P.mjs → dist-Dc8GKC5H.mjs} +301 -6
  77. package/dist/{dist-DVe0Nsp8.js → dist-GgG-7amw.js} +348 -5
  78. package/dist/file-host-worker.js +1 -1
  79. package/dist/file-host-worker.mjs +1 -1
  80. package/dist/{hub-mdns-ciao-DJRwtlA8.mjs → hub-mdns-ciao-DMlQTdPU.mjs} +1 -1
  81. package/dist/i18n/catalog-registry.d.ts +35 -0
  82. package/dist/i18n/index.d.ts +2 -0
  83. package/dist/index.d.ts +3 -0
  84. package/dist/index.js +666 -21
  85. package/dist/index.mjs +676 -38
  86. package/dist/kernel/gc-census.d.ts +18 -1
  87. package/dist/kernel/settings-view-types.d.ts +2 -0
  88. package/dist/kernel/transport/local-transport.d.ts +3 -0
  89. package/dist/kernel/transport/peer-answered-error.d.ts +5 -1
  90. package/dist/{restore-archive-D4h904rb.js → restore-archive-CTRz8v9o.js} +1 -1
  91. package/dist/{restore-archive-BxmP1ChO.mjs → restore-archive-DPg9duVY.mjs} +1 -1
  92. package/dist/{retired-settings-keys-CYP5IZJ5.js → retired-settings-keys-Dr_4lfKu.js} +1 -1
  93. package/dist/{retired-settings-keys-CQaknvx1.mjs → retired-settings-keys-Is0zO8gX.mjs} +1 -1
  94. package/dist/{wal-maintenance-CaDsrJM_.mjs → wal-maintenance-Bx3lcVA7.mjs} +0 -0
  95. package/dist/{wal-maintenance-Br60onAQ.js → wal-maintenance-mjB2i-VR.js} +0 -0
  96. package/package.json +1 -1
package/dist/index.mjs CHANGED
@@ -1,6 +1,6 @@
1
1
  import { i as __require } from "./chunk-CNf5ZN-e.mjs";
2
- import { $ as addonSettingsCapability, $r as parseJsonObject, $t as isObjectInput, Bn as scopesAllowDeviceCap, Br as emitDownForOwnedCaps, Cr as DEVICE_SETTINGS_CONTRIBUTION_METHODS, Dr as ReadinessRegistry, En as procedureAuthKey, Er as RUNTIME_DEFAULTS, F as LOG_LEVEL_RANK, Hr as expandCapMethods, Ht as extractNestedAddonId, In as resolveMethodAuth, L as METHOD_ACCESS_MAP, Lr as createEvent$1, Mr as asNumber, Nr as asString$1, Or as ReadinessTimeoutError, Sr as DATAPLANE_SECRET_HEADER$1, Xt as isCollectionArrayMethod, Yt as isArrayOutputSchema, Zn as supportedRuntimes, ai as scopeKey, bn as objectInputDeclaresAddonId, br as errMsg$1, di as EventCategory$1, dn as looseSchema, ei as parseJsonUnknown, en as isVoidInput, jr as asJsonObject$1, n as AGENT_MDNS_TXT_KEYS, ni as readinessKey, on as lifecycleJobSchema, r as ALL_CAPABILITY_DEFINITIONS, ri as resolveCapMount, t as AGENT_MDNS_SERVICE_TYPE, tn as kebabToCamel$1, un as logLevelAtMost, wr as DEVICE_STATUS_METHOD, xn as objectInputDeclaresRequiredDeviceId, zn as scopesAllowAddon } from "./dist-DjD2M79P.mjs";
3
- import { d as JWT_SIGNING_KEY_REF, f as JwtSigningKeyUnavailableError, g as processJwtSigningKey, i as generateDeviceCa, l as verifyDeviceLeaf, m as getProcessJwtSigningKeyState, n as DEVICE_CA_KEY_REF, o as issueDeviceLeaf, p as SYSTEM_SECRET_OWNER, s as loadDeviceCa, u as verifyDeviceSignature, v as staticJwtSigningKey } from "./device-ca-BNM5ai4t.mjs";
2
+ import { Ar as DEVICE_SETTINGS_CONTRIBUTION_METHODS, B as METHOD_ACCESS_MAP, Br as asString$1, Dr as errMsg$1, En as objectInputDeclaresRequiredDeviceId, Fr as ReadinessTimeoutError, Gn as scopesAllowDeviceCap, Kt as extractNestedAddonId, Nr as RUNTIME_DEFAULTS, Pr as ReadinessRegistry, Qt as interpolate, R as LOG_LEVEL_RANK, Rr as asJsonObject$1, Tn as objectInputDeclaresAddonId, Vn as resolveMethodAuth, Wn as scopesAllowAddon, Wr as createEvent$1, Yr as expandCapMethods, Zn as splitTranslationRef, _ as CatalogFileSchema, an as isVoidInput, d as CATALOG_LANGS, dn as lifecycleJobSchema, en as isArrayOutputSchema, fi as scopeKey, gn as looseSchema, hn as logLevelAtMost, in as isObjectInput, ir as supportedRuntimes, jn as procedureAuthKey, jr as DEVICE_STATUS_METHOD, kr as DATAPLANE_SECRET_HEADER$1, li as readinessKey, n as AGENT_MDNS_TXT_KEYS, oi as parseJsonObject, on as kebabToCamel$1, qr as emitDownForOwnedCaps, r as ALL_CAPABILITY_DEFINITIONS, rt as addonSettingsCapability, si as parseJsonUnknown, t as AGENT_MDNS_SERVICE_TYPE, tn as isCollectionArrayMethod, ui as resolveCapMount, vi as userError, yi as EventCategory$1, zr as asNumber } from "./dist-Dc8GKC5H.mjs";
3
+ import { d as JWT_SIGNING_KEY_REF, f as JwtSigningKeyUnavailableError, g as processJwtSigningKey, i as generateDeviceCa, l as verifyDeviceLeaf, m as getProcessJwtSigningKeyState, n as DEVICE_CA_KEY_REF, o as issueDeviceLeaf, p as SYSTEM_SECRET_OWNER, s as loadDeviceCa, u as verifyDeviceSignature, v as staticJwtSigningKey } from "./device-ca-DvIZjXIl.mjs";
4
4
  import { AlertCenterAddon } from "./builtins/alerts/alerts.addon.mjs";
5
5
  import "./builtins/alerts/index.mjs";
6
6
  import { CalendarsAddon } from "./builtins/calendars/calendars.addon.mjs";
@@ -16,26 +16,26 @@ import "./builtins/device-manager/index.mjs";
16
16
  import { HubForwarderAddon, HubForwarderDestination } from "./builtins/hub-forwarder/index.mjs";
17
17
  import { LivenessMonitorAddon } from "./builtins/liveness-monitor/liveness-monitor.addon.mjs";
18
18
  import "./builtins/liveness-monitor/index.mjs";
19
- import { LocalAuthAddon, _ as AuthManager, a as attachUserManagementInternal, b as isSettingsReadUnavailable, c as DeviceCredentialManager, d as ADMIN_TOKEN_MAX_LIFETIME_MS, f as ADMIN_TOKEN_PREFIX, g as ScopedTokenManager, h as REFRESH_TOKEN_PREFIX, i as USER_MANAGEMENT_INTERNAL, l as PREVIOUS_LEAF_GRACE_MS, m as LoginSessionManager, n as FIRST_BOOT_ADMIN_USERNAME, o as getUserManagementInternal, p as AdminTokenManager, r as UserManager, s as AuthAuditLog, t as FIRST_BOOT_ADMIN_PASSWORD, u as DeviceCaStore, v as parseTokenExpiry, x as ApiKeyManager, y as SettingsReadUnavailableError } from "./builtins/local-auth/local-auth.addon.mjs";
19
+ import { LocalAuthAddon, S as ApiKeyManager, _ as ScopedTokenManager, a as attachUserManagementInternal, b as SettingsReadUnavailableError, c as DeviceCredentialManager, d as ADMIN_TOKEN_MAX_LIFETIME_MS, f as ADMIN_TOKEN_PREFIX, g as onSessionsRevoked, h as REFRESH_TOKEN_PREFIX, i as USER_MANAGEMENT_INTERNAL, l as PREVIOUS_LEAF_GRACE_MS, m as LoginSessionManager, n as FIRST_BOOT_ADMIN_USERNAME, o as getUserManagementInternal, p as AdminTokenManager, r as UserManager, s as AuthAuditLog, t as FIRST_BOOT_ADMIN_PASSWORD, u as DeviceCaStore, v as AuthManager, x as isSettingsReadUnavailable, y as parseTokenExpiry } from "./builtins/local-auth/local-auth.addon.mjs";
20
20
  import "./builtins/local-auth/index.mjs";
21
21
  import { LokiDestination, LokiLoggingAddon } from "./builtins/loki-logging/index.mjs";
22
22
  import NativeMetricsAddon, { a as NativeMetricsProvider, n as nodeProcReader, r as parseProcStat } from "./builtins/native-metrics/native-metrics.addon.mjs";
23
23
  import { FilesystemStorageAddon, t as FilesystemStorageProvider } from "./builtins/sqlite-storage/filesystem-storage.addon.mjs";
24
- import { c as SqliteSettingsBackend, l as prefixRange } from "./wal-maintenance-CaDsrJM_.mjs";
24
+ import { c as SqliteSettingsBackend, l as prefixRange } from "./wal-maintenance-Bx3lcVA7.mjs";
25
25
  import { SqliteSettingsAddon } from "./builtins/sqlite-storage/sqlite-settings.addon.mjs";
26
26
  import { ConfigStore, DeviceStore } from "./builtins/sqlite-storage/index.mjs";
27
27
  import { StorageOrchestratorAddon, a as stripForwardedCaller, i as createHubCapForwardService, n as HUB_CAP_FWD_ACTION, o as buildStorageLocationRegistry, r as HUB_CAP_FWD_SERVICE, t as StorageOrchestratorService } from "./builtins/storage-orchestrator/storage-orchestrator.addon.mjs";
28
28
  import "./builtins/storage-orchestrator/index.mjs";
29
- import { A as AgentHttpsNames, C as LEAF_RENEWAL_WINDOW_DAYS, E as evaluateExistingCert, M as setProcessAgentHttpsNames, O as AGENT_HTTPS_NAMES_COLLECTION, S as CA_VALIDITY_DAYS, T as SERVER_AUTH_OID, a as collectAgentNames, b as collectCertIdentity, c as installAgentHttps, d as isPrivateAddress, f as issueAgentHttpsLeaf, g as CA_COMMON_NAME, h as pinnedHttpsCaFingerprint, i as certificateNames, j as getProcessAgentHttpsNames, k as AGENT_HTTPS_NAMES_COLUMNS, l as isContainerBridgeAddress, m as pemDigest, n as acceptAgentSans, o as createAgentHttpsRequest, p as loadAgentHttps, r as agentHttpsPaths, s as describeHttpsLeaf, t as AgentHttpsInstallError, u as isLocalOnlyHostname, w as MAX_LEAF_VALIDITY_DAYS, x as systemHostFacts } from "./agent-https-B8lKYVtU.mjs";
30
- import { a as MESH_CA_KEY_REF, i as MESH_CA_FIELD, n as DEFAULT_HUB_TLS_TCP_PORT, o as MESH_CA_SETTINGS_KEY } from "./constants-BFpowodq.mjs";
29
+ import { A as AgentHttpsNames, C as LEAF_RENEWAL_WINDOW_DAYS, E as evaluateExistingCert, M as setProcessAgentHttpsNames, O as AGENT_HTTPS_NAMES_COLLECTION, S as CA_VALIDITY_DAYS, T as SERVER_AUTH_OID, a as collectAgentNames, b as collectCertIdentity, c as installAgentHttps, d as isPrivateAddress, f as issueAgentHttpsLeaf, g as CA_COMMON_NAME, h as pinnedHttpsCaFingerprint, i as certificateNames, j as getProcessAgentHttpsNames, k as AGENT_HTTPS_NAMES_COLUMNS, l as isContainerBridgeAddress, m as pemDigest, n as acceptAgentSans, o as createAgentHttpsRequest, p as loadAgentHttps, r as agentHttpsPaths, s as describeHttpsLeaf, t as AgentHttpsInstallError, u as isLocalOnlyHostname, w as MAX_LEAF_VALIDITY_DAYS, x as systemHostFacts } from "./agent-https-BPfHrI4c.mjs";
30
+ import { a as MESH_CA_KEY_REF, i as MESH_CA_FIELD, n as DEFAULT_HUB_TLS_TCP_PORT, o as MESH_CA_SETTINGS_KEY } from "./constants-DQK705Sb.mjs";
31
31
  import { $ as generateMeshKeyPair, A as setProcessMeshPeerTransportLookup, B as describeMeshLeaf, C as setProcessMeshTlsEnabler, D as getProcessPeerLeaf, E as getProcessNodeMeshTransport, F as setProcessMeshTlsListenerState, G as MeshCaKeeper, H as setProcessMeshCertificateRegistry, I as MESH_NODE_CERTIFICATES_COLLECTION, J as caFingerprint, K as getProcessMeshCaState, L as MESH_NODE_CERTIFICATES_COLUMNS, M as revokeMeshCertificate, N as getProcessMeshTlsListenerState, O as isProcessVerifiedMeshPeer, P as openMeshTlsWhenRevocationsLoaded, Q as generateMeshCa, R as MeshCertificateRegistry, S as ServiceBroker, SystemConfigAddon, T as emitProcessNodeRegistered, U as MeshCrl, V as getProcessMeshCertificateRegistry, W as processMeshCrl, X as createMeshCsrPem, Y as caFingerprintCompact, Z as exportMeshPrivateKeyPem, _ as signPairingProof, _t as readCidrSetting, a as hubHostFromMeshAddress, at as AGENT_UI_UNLOCK_TTL_MS, b as TlsTcpTransporter, c as PAIRING_MAX_SESSIONS, ct as AGENT_UI_UNLOCK_VERSION, d as PAIRING_PROTOCOL, dt as mintAgentUiUnlockTicket, et as isValidAgentNodeId, f as PAIRING_TTL_MS, ft as parseAgentDashboardOrigins, g as keyFingerprintShort, gt as parseCidrList, h as describeCsr, ht as normalizeIp, i as AgentPairing, it as AGENT_DASHBOARD_ORIGINS_FIELD, j as renewMeshCertificate, k as onProcessNodeRegistered, l as PAIRING_PATHS, lt as UnlockTicketJtiStore, m as computePairingSas, mt as createCidrMatcher, n as HubPairing, nt as issueMeshLeafFromCsr, o as PAIRING_CODE_DIGITS, ot as AGENT_UI_UNLOCK_TYP, p as computePairingCommitment, pt as verifyAgentUiUnlockTicket, q as requireProcessMeshCa, r as PairingHttpError, rt as loadMeshCa, s as PAIRING_MAX_CODE_ATTEMPTS, st as AGENT_UI_UNLOCK_USE, tt as issueMeshLeafForNode, u as PAIRING_PIN_DIGITS, ut as isAllowedAgentDashboardReturnTo, v as verifyPairingProof, w as dropProcessPeer, x as Errors, y as MESH_TLS_PORT_HELLO_FIELD, z as RENEWAL_ABANDONED } from "./builtins/system-config/system-config.addon.mjs";
32
32
  import "./builtins/system-config/index.mjs";
33
33
  import { WinstonDestination, WinstonLoggingAddon } from "./builtins/winston-logging/index.mjs";
34
34
  import { C as isModelDownloaded, T as revisionWeightUrl, _ as downloadFile, a as startEventLoopStallMonitor, b as fetchJson, c as createAuthenticatedFileServer, d as resolveFilePath, f as ModelDownloadService, g as deleteModelFromDisk, h as collectModelFiles, i as attributeStall, l as parseRangeHeader, m as adoptModelRevisions, n as STALL_REPORT_MS, o as createFileDataPlaneHandler, r as STALL_TICK_MS, s as contentTypeFor, t as CustomActionRegistry, u as parseTokenizedUrl, v as downloadModel, w as resolveFormatRevision, x as getModelFilePath, y as ensureModel } from "./custom-action-registry-BQnbN0DP.mjs";
35
- import { C as DEFAULT_LAN_HTTP_PORT, D as closeLanHttp, E as bindPendingLanHttp, O as readLanHttpState, S as reissueTlsLeaf, T as applyLanHttp, _ as splitPemCertificates, a as storeUploadedCertificate, b as ensureTlsCert, c as leafFingerprintOf, d as servedHttpsLeafFingerprint, f as prepareBootTls, g as readTlsMode, h as readTlsAccessStatus, i as revertToGeneratedCertificate, k as registerLanHttpHandler, l as registerHttpsListener, m as readExtraSans, n as applyCertificateToListener, o as validateUploadedTls, p as UPLOADED_CA_FILE, r as regenerateCertificate, s as clearHttpsListener, t as createCiaoPublisher, u as reloadHttpsListener, v as writeExtraSans, w as allFamiliesListenHost, x as loadTlsCert, y as writeTlsMode } from "./hub-mdns-ciao-DJRwtlA8.mjs";
35
+ import { C as DEFAULT_LAN_HTTP_PORT, D as closeLanHttp, E as bindPendingLanHttp, O as readLanHttpState, S as reissueTlsLeaf, T as applyLanHttp, _ as splitPemCertificates, a as storeUploadedCertificate, b as ensureTlsCert, c as leafFingerprintOf, d as servedHttpsLeafFingerprint, f as prepareBootTls, g as readTlsMode, h as readTlsAccessStatus, i as revertToGeneratedCertificate, k as registerLanHttpHandler, l as registerHttpsListener, m as readExtraSans, n as applyCertificateToListener, o as validateUploadedTls, p as UPLOADED_CA_FILE, r as regenerateCertificate, s as clearHttpsListener, t as createCiaoPublisher, u as reloadHttpsListener, v as writeExtraSans, w as allFamiliesListenHost, x as loadTlsCert, y as writeTlsMode } from "./hub-mdns-ciao-DMlQTdPU.mjs";
36
36
  import { n as getPlatformKeychainKey, r as setPlatformKeychainKey, t as clearPlatformKeychainKey } from "./platform-key-source-BWlq0jjn.mjs";
37
37
  import { n as getSinglePidStats, t as getPidStats } from "./resource-monitor-Di9daRwI.mjs";
38
- import { c as BackupDecryptError, f as generateBackupKeyPair, h as readBackupEncryptionHeader, l as BackupKeyFormatError, r as prepareRestoreArchive, s as SystemBackupService, t as BackupKeyRequiredError, u as BackupKeyMismatchError } from "./restore-archive-BxmP1ChO.mjs";
38
+ import { c as BackupDecryptError, f as generateBackupKeyPair, h as readBackupEncryptionHeader, l as BackupKeyFormatError, r as prepareRestoreArchive, s as SystemBackupService, t as BackupKeyRequiredError, u as BackupKeyMismatchError } from "./restore-archive-DPg9duVY.mjs";
39
39
  import { z } from "zod";
40
40
  import * as crypto$1 from "node:crypto";
41
41
  import { createHash, randomBytes, randomUUID } from "node:crypto";
@@ -44,7 +44,7 @@ import { connect, createConnection, createServer } from "node:net";
44
44
  import { mkdir, rm, stat, unlink } from "node:fs/promises";
45
45
  import * as path$1 from "node:path";
46
46
  import { dirname, isAbsolute, join, resolve } from "node:path";
47
- import * as os from "node:os";
47
+ import * as os$1 from "node:os";
48
48
  import { tmpdir } from "node:os";
49
49
  import { pathToFileURL } from "node:url";
50
50
  import * as fs from "node:fs";
@@ -53,7 +53,7 @@ import { execFile, spawn } from "node:child_process";
53
53
  import * as util from "node:util";
54
54
  import { promisify } from "node:util";
55
55
  import { once } from "node:events";
56
- import { BOOT_RECOVERY_BACKOFF_MS, DATAPLANE_SECRET_HEADER, DEVICE_CHILDREN_BATCH_MAX, DeviceType, DisposerChain, EventCategory, PEER_BYTES_CHUNK_BYTES, PEER_BYTES_MAX_OUTSTANDING, PEER_BYTES_STALL_MS, PEER_BYTES_TICKET_TTL_MS, ReadinessRegistry as ReadinessRegistry$1, asJsonObject, asString, collectZodSecretPaths, createDeviceProxy, createEvent, createEventBusSliceSource, createSecretsAccess, deviceOpsCapability, emitReadiness, errMsg, expandCapMethods as expandCapMethods$1, maskUrlCredentials, readNodePin, scopeKey as scopeKey$1, scrubKnownSecrets, sleep, withCapInputDefaults } from "@camstack/types/addon";
56
+ import { BOOT_RECOVERY_BACKOFF_MS, DATAPLANE_SECRET_HEADER, DEVICE_CHILDREN_BATCH_MAX, DeviceType, DisposerChain, ErrorI18nPayloadSchema, EventCategory, PEER_BYTES_CHUNK_BYTES, PEER_BYTES_MAX_OUTSTANDING, PEER_BYTES_STALL_MS, PEER_BYTES_TICKET_TTL_MS, ReadinessRegistry as ReadinessRegistry$1, asJsonObject, asString, collectZodSecretPaths, createDeviceProxy, createEvent, createEventBusSliceSource, createSecretsAccess, deviceOpsCapability, emitReadiness, errMsg, expandCapMethods as expandCapMethods$1, maskUrlCredentials, readErrorI18n, readNodePin, scopeKey as scopeKey$1, scrubKnownSecrets, sleep, withCapInputDefaults } from "@camstack/types/addon";
57
57
  import { createServer as createServer$1, request } from "node:http";
58
58
  import * as v8 from "node:v8";
59
59
  import { Session } from "node:inspector/promises";
@@ -1799,7 +1799,8 @@ function formatArrayBufferCensus(label, report, context) {
1799
1799
  }
1800
1800
  //#endregion
1801
1801
  //#region src/kernel/gc-census.ts
1802
- function countsOf(entries, kinds) {
1802
+ function countsOf(entries, kinds, flagBits) {
1803
+ const flags = {};
1803
1804
  let majors = 0;
1804
1805
  let minors = 0;
1805
1806
  let incrementals = 0;
@@ -1809,13 +1810,17 @@ function countsOf(entries, kinds) {
1809
1810
  else if (e.kind === kinds.minor) minors++;
1810
1811
  else if (e.kind === kinds.incremental) incrementals++;
1811
1812
  pauseMs += e.durationMs;
1813
+ if (e.flags !== void 0) {
1814
+ for (const f of flagBits) if ((e.flags & f.bit) !== 0) flags[f.name] = (flags[f.name] ?? 0) + 1;
1815
+ }
1812
1816
  }
1813
1817
  return {
1814
1818
  majors,
1815
1819
  minors,
1816
1820
  incrementals,
1817
1821
  pauseMs,
1818
- windowMs: 0
1822
+ windowMs: 0,
1823
+ ...Object.keys(flags).length > 0 ? { flags } : {}
1819
1824
  };
1820
1825
  }
1821
1826
  /**
@@ -1827,7 +1832,7 @@ function countsOf(entries, kinds) {
1827
1832
  * observed and a process that is not collecting look identical on the line, and
1828
1833
  * they are the two answers furthest apart.
1829
1834
  */
1830
- function createGcCensus(install, kinds, startedAt) {
1835
+ function createGcCensus(install, kinds, startedAt, flagBits = []) {
1831
1836
  let pending = [];
1832
1837
  const stopObserving = install((entry) => {
1833
1838
  pending.push(entry);
@@ -1842,7 +1847,7 @@ function createGcCensus(install, kinds, startedAt) {
1842
1847
  pending = [];
1843
1848
  windowStart = at;
1844
1849
  return {
1845
- ...countsOf(taken, kinds),
1850
+ ...countsOf(taken, kinds, flagBits),
1846
1851
  windowMs
1847
1852
  };
1848
1853
  },
@@ -1867,14 +1872,18 @@ function nodeGcObserver() {
1867
1872
  minor: 1,
1868
1873
  incremental: 8
1869
1874
  }),
1875
+ flagBits: readFlagBits(),
1870
1876
  install: (observe) => {
1871
1877
  try {
1872
1878
  const observer = new (process.getBuiltinModule("node:perf_hooks")).PerformanceObserver((list) => {
1873
1879
  for (const entry of list.getEntries()) {
1874
1880
  const detail = "detail" in entry ? entry.detail : void 0;
1881
+ const kind = typeof detail === "object" && detail !== null && "kind" in detail && typeof detail.kind === "number" ? detail.kind : -1;
1882
+ const flags = typeof detail === "object" && detail !== null && "flags" in detail && typeof detail.flags === "number" ? detail.flags : void 0;
1875
1883
  observe({
1876
- kind: typeof detail === "object" && detail !== null && "kind" in detail && typeof detail.kind === "number" ? detail.kind : -1,
1877
- durationMs: entry.duration
1884
+ kind,
1885
+ durationMs: entry.duration,
1886
+ ...flags !== void 0 ? { flags } : {}
1878
1887
  });
1879
1888
  }
1880
1889
  });
@@ -1888,6 +1897,25 @@ function nodeGcObserver() {
1888
1897
  }
1889
1898
  };
1890
1899
  }
1900
+ var GC_FLAG_PREFIX = "NODE_PERFORMANCE_GC_FLAGS_";
1901
+ /**
1902
+ * The flag bits, read from `perf_hooks.constants` by their prefix so a flag V8
1903
+ * adds tomorrow gets a name without anyone editing a table. `NO` (0) can never
1904
+ * match a bit and is dropped.
1905
+ */
1906
+ function readFlagBits() {
1907
+ try {
1908
+ const perf = process.getBuiltinModule("node:perf_hooks");
1909
+ const bits = [];
1910
+ for (const [key, value] of Object.entries(perf.constants)) if (key.startsWith(GC_FLAG_PREFIX) && typeof value === "number" && value > 0) bits.push({
1911
+ name: key.slice(26),
1912
+ bit: value
1913
+ });
1914
+ return bits;
1915
+ } catch {
1916
+ return [];
1917
+ }
1918
+ }
1891
1919
  function readKinds(fallback) {
1892
1920
  try {
1893
1921
  const c = process.getBuiltinModule("node:perf_hooks").constants;
@@ -1914,7 +1942,14 @@ function readKinds(fallback) {
1914
1942
  function formatGcCensus(window) {
1915
1943
  if (window === null || window === void 0) return "";
1916
1944
  const perMin = (n) => window.windowMs <= 0 ? "?" : (n / (window.windowMs / 6e4)).toFixed(1);
1917
- return ` gc=maj${window.majors}/min${window.minors}/inc${window.incrementals}@${Math.round(window.windowMs / 1e3)}s gcMajPerMin=${perMin(window.majors)} gcPauseMs=${Math.round(window.pauseMs)}`;
1945
+ return ` gc=maj${window.majors}/min${window.minors}/inc${window.incrementals}@${Math.round(window.windowMs / 1e3)}s gcMajPerMin=${perMin(window.majors)} gcPauseMs=${Math.round(window.pauseMs)}` + formatGcFlags(window.flags);
1946
+ }
1947
+ /** ` gcFlags=ALL_EXTERNAL_MEMORY:12,FORCED:1` — most frequent first; empty when none. */
1948
+ function formatGcFlags(flags) {
1949
+ if (flags === void 0) return "";
1950
+ const entries = Object.entries(flags).toSorted((a, b) => b[1] - a[1] || a[0].localeCompare(b[0]));
1951
+ if (entries.length === 0) return "";
1952
+ return ` gcFlags=${entries.map(([name, n]) => `${name}:${n}`).join(",")}`;
1918
1953
  }
1919
1954
  /**
1920
1955
  * The census. Always exists — `process.cpuUsage()` is available on every
@@ -2642,7 +2677,7 @@ function startHeapWatch(label = HUB_MAIN_HEAP_WATCH_LABEL, sink = consoleSink, i
2642
2677
  const readMemory = reclaimOptions?.readMemory ?? (() => process.memoryUsage());
2643
2678
  const now = reclaimOptions?.now ?? (() => Date.now());
2644
2679
  const gcObserver = probes?.gcObserver ?? nodeGcObserver();
2645
- const gcCensus = createGcCensus(gcObserver.install, gcObserver.kinds, now());
2680
+ const gcCensus = createGcCensus(gcObserver.install, gcObserver.kinds, now(), gcObserver.flagBits);
2646
2681
  const cpuProbe = probes?.processCpu;
2647
2682
  const processCpu = createProcessCpuCensus({
2648
2683
  cpuUsageUs: cpuProbe?.cpuUsageUs ?? (() => {
@@ -2696,6 +2731,7 @@ function startHeapWatch(label = HUB_MAIN_HEAP_WATCH_LABEL, sink = consoleSink, i
2696
2731
  };
2697
2732
  let mode = "steady";
2698
2733
  let lastLoggedAt = Number.NEGATIVE_INFINITY;
2734
+ let firstLinePending = true;
2699
2735
  const budgetMb = rssBudget?.budgetMb !== void 0 && rssBudget.budgetMb > 0 ? rssBudget.budgetMb : void 0;
2700
2736
  const budgetSource = rssBudget?.source ?? "unspecified";
2701
2737
  const releaseRatio = rssBudget?.releaseRatio ?? .9;
@@ -2754,7 +2790,9 @@ function startHeapWatch(label = HUB_MAIN_HEAP_WATCH_LABEL, sink = consoleSink, i
2754
2790
  const due = at - lastLoggedAt >= intervalMs;
2755
2791
  if (mode === "escalated" || due) {
2756
2792
  lastLoggedAt = at;
2757
- const line = format(label, sample, loopDelay?.read(), budgetMb, `${formatHeapSpaces(readSpaces())}${formatEventPlane(eventPlane?.read())}` + formatSocketPlane(socketPlane?.read()) + formatMeshQueue(meshQueue?.()) + formatGcCensus(gcCensus?.read(at)) + formatProcessCpu(processCpu.read(at)));
2793
+ const firstLine = firstLinePending;
2794
+ firstLinePending = false;
2795
+ const line = format(label, sample, loopDelay?.read(), budgetMb, `${formatHeapSpaces(readSpaces(), firstLine ? 0 : void 0)}${formatEventPlane(eventPlane?.read())}` + formatSocketPlane(socketPlane?.read()) + formatMeshQueue(meshQueue?.()) + formatGcCensus(gcCensus?.read(at)) + formatProcessCpu(processCpu.read(at)));
2758
2796
  if (sample.nearLimit) sink.warn(`${line} — APPROACHING HEAP LIMIT`);
2759
2797
  else if (mode === "escalated") sink.warn(`${line} — heap elevated, sampling every ${probeIntervalMs}ms`);
2760
2798
  else sink.info(line);
@@ -4960,7 +4998,7 @@ var PythonEnvManager = class {
4960
4998
  }
4961
4999
  async ensure(options) {
4962
5000
  const probe = await this.probe();
4963
- if (!probe.available || !probe.path) throw new Error("Python 3.10+ is required but not found on this system");
5001
+ if (!probe.available || !probe.path) throw userError("system.python-required", void 0, "Python 3.10+ is required but not found on this system");
4964
5002
  if (!fs.existsSync(path$1.join(this.venvPath, "bin", "python"))) await execFileAsync$7(probe.path, [
4965
5003
  "-m",
4966
5004
  "venv",
@@ -5228,7 +5266,7 @@ var StorageManager = class {
5228
5266
  }
5229
5267
  getProvider() {
5230
5268
  if (this.legacyProvider) return this.legacyProvider;
5231
- if (!this.newStorageProvider && !this.settingsBackend && !this.locationManager) throw new Error("No storage provider configured");
5269
+ if (!this.newStorageProvider && !this.settingsBackend && !this.locationManager) throw userError("storage.no-provider", void 0, "No storage provider configured");
5232
5270
  return this.createLegacyShim();
5233
5271
  }
5234
5272
  setLocationManager(manager) {
@@ -5251,7 +5289,7 @@ var StorageManager = class {
5251
5289
  * Builds IStorageLocation from settingsBackend (structured) + locationManager (files).
5252
5290
  */
5253
5291
  getLocation(name, namespace) {
5254
- if (!this.legacyProvider && !this.newStorageProvider && !this.settingsBackend && !this.locationManager) throw new Error("No storage provider configured");
5292
+ if (!this.legacyProvider && !this.newStorageProvider && !this.settingsBackend && !this.locationManager) throw userError("storage.no-provider", void 0, "No storage provider configured");
5255
5293
  if (this.legacyProvider) try {
5256
5294
  const LEGACY_MAP = {
5257
5295
  config: "data",
@@ -6912,7 +6950,7 @@ function ensureLibraryBuilt(packageName, packagesDir) {
6912
6950
  * `copyDirRecursive` for the wedge this prevents.
6913
6951
  */
6914
6952
  async function installPackageFromNpm(packageName, targetDir) {
6915
- const tmpDir = await fs.promises.mkdtemp(path$1.join(os.tmpdir(), "camstack-install-"));
6953
+ const tmpDir = await fs.promises.mkdtemp(path$1.join(os$1.tmpdir(), "camstack-install-"));
6916
6954
  try {
6917
6955
  const { stdout } = await execFileAsync$4("npm", [
6918
6956
  "pack",
@@ -7583,7 +7621,7 @@ var execFileAsync$3 = promisify(execFile);
7583
7621
  * installer) pass their own.
7584
7622
  */
7585
7623
  function defaultNpmCacheDir() {
7586
- return path$1.join(os.tmpdir(), "camstack-npm-bootstrap");
7624
+ return path$1.join(os$1.tmpdir(), "camstack-npm-bootstrap");
7587
7625
  }
7588
7626
  /**
7589
7627
  * Native node modules an addon needs at runtime but cannot be bundled
@@ -8527,7 +8565,7 @@ var AddonInstaller = class AddonInstaller {
8527
8565
  * unusual auth, offline mode, etc).
8528
8566
  */
8529
8567
  async installFromNpm(packageName, version) {
8530
- const tmpDir = fs.mkdtempSync(path$1.join(os.tmpdir(), "camstack-addon-npm-"));
8568
+ const tmpDir = fs.mkdtempSync(path$1.join(os$1.tmpdir(), "camstack-addon-npm-"));
8531
8569
  const packageSpec = version ? `${packageName}@${version}` : packageName;
8532
8570
  this.logger.info(`${packageName} — installing from npm`);
8533
8571
  try {
@@ -11677,6 +11715,17 @@ function createDoorSettingsView(addonId, door, sections) {
11677
11715
  }
11678
11716
  return out;
11679
11717
  },
11718
+ async listDeviceStoreIds() {
11719
+ const all = await loadPrefixed(door, "addon-device-settings", `${addonId}:`, () => null);
11720
+ const ids = /* @__PURE__ */ new Set();
11721
+ for (const suffix of Object.keys(all)) {
11722
+ const dot = suffix.indexOf(".");
11723
+ if (dot <= 0) continue;
11724
+ const deviceId = Number(suffix.slice(0, dot));
11725
+ if (Number.isInteger(deviceId) && deviceId > 0) ids.add(deviceId);
11726
+ }
11727
+ return [...ids].toSorted((a, b) => a - b);
11728
+ },
11680
11729
  async writeDeviceStore(deviceId, patch) {
11681
11730
  const scope = `${addonId}:${String(deviceId)}.`;
11682
11731
  await replacePrefixed(door, "addon-device-settings", scope, {
@@ -14448,7 +14497,8 @@ var STORE_READABLE_BOOTSTRAP_KEYS = new Set([
14448
14497
  "auth.tokenExpiry",
14449
14498
  "auth.accessTokenExpiry",
14450
14499
  "auth.trustedProxies",
14451
- "auth.trustedNetworks"
14500
+ "auth.trustedNetworks",
14501
+ "server.name"
14452
14502
  ]);
14453
14503
  /** May the settings store answer `key`, or is it env + config.yaml only? */
14454
14504
  function storeMayAnswer(key) {
@@ -14884,6 +14934,11 @@ var ConfigManager = class {
14884
14934
  writeAddonStore: (patch) => active().writeAddonStore(patch),
14885
14935
  readDeviceStore: (deviceId) => active().readDeviceStore(deviceId),
14886
14936
  readDeviceStoreBatch: (deviceIds) => active().readDeviceStoreBatch(deviceIds),
14937
+ listDeviceStoreIds: async () => {
14938
+ const list = active().listDeviceStoreIds;
14939
+ if (list === void 0) throw new Error("listDeviceStoreIds is not available on this settings view");
14940
+ return list.call(active());
14941
+ },
14887
14942
  writeDeviceStore: (deviceId, patch) => active().writeDeviceStore(deviceId, patch),
14888
14943
  clearDeviceStore: (deviceId) => active().clearDeviceStore(deviceId),
14889
14944
  getSection: (section) => active().getSection(section),
@@ -18558,9 +18613,14 @@ function localEndpointPath(nodeId) {
18558
18613
  * node had answered (2026-09-25, device 3836).
18559
18614
  */
18560
18615
  var PeerAnsweredError = class extends Error {
18561
- constructor(message) {
18616
+ /** The far end's stable error code (D863), carried so the hub can translate it. */
18617
+ i18nCode;
18618
+ i18nParams;
18619
+ constructor(message, i18n) {
18562
18620
  super(message);
18563
18621
  this.name = "PeerAnsweredError";
18622
+ this.i18nCode = i18n?.code;
18623
+ this.i18nParams = i18n?.params;
18564
18624
  }
18565
18625
  };
18566
18626
  //#endregion
@@ -18582,6 +18642,13 @@ var PayloadReply = class {
18582
18642
  this.payload = payload;
18583
18643
  }
18584
18644
  };
18645
+ //#endregion
18646
+ //#region src/kernel/transport/socket-channel.ts
18647
+ /** A peer's `i18n` is untrusted wire data: a malformed one is dropped, the message still travels. */
18648
+ function parseWireI18n(raw) {
18649
+ const parsed = ErrorI18nPayloadSchema.safeParse(raw);
18650
+ return parsed.success ? parsed.data : void 0;
18651
+ }
18585
18652
  var SocketChannel = class {
18586
18653
  socket;
18587
18654
  nextId = 1;
@@ -18793,11 +18860,13 @@ var SocketChannel = class {
18793
18860
  body: result
18794
18861
  });
18795
18862
  } catch (err) {
18863
+ const i18n = readErrorI18n(err);
18796
18864
  resBytes = this.send({
18797
18865
  k: "res",
18798
18866
  id: frame.id,
18799
18867
  ok: false,
18800
- err: err instanceof Error ? err.message : String(err)
18868
+ err: err instanceof Error ? err.message : String(err),
18869
+ ...i18n !== null ? { i18n } : {}
18801
18870
  });
18802
18871
  }
18803
18872
  if (label !== void 0) this.recordAction(label, wireBytes, resBytes);
@@ -18809,7 +18878,7 @@ var SocketChannel = class {
18809
18878
  this.pending.delete(frame.id);
18810
18879
  if (p.timer !== null) clearTimeout(p.timer);
18811
18880
  if (p.action !== null) this.recordAction(p.action.label, p.action.reqBytes, wireBytes);
18812
- if (!frame.ok) p.reject(new PeerAnsweredError(frame.err));
18881
+ if (!frame.ok) p.reject(new PeerAnsweredError(frame.err, parseWireI18n(frame.i18n)));
18813
18882
  else if (frame.pl !== void 0) p.resolve(new PayloadReply(frame.body, frame.pl));
18814
18883
  else p.resolve(frame.body);
18815
18884
  return;
@@ -22115,8 +22184,8 @@ function probeLinuxGpus() {
22115
22184
  return signals;
22116
22185
  }
22117
22186
  function probePlatform() {
22118
- const platform = os.platform();
22119
- const arch = os.arch();
22187
+ const platform = os$1.platform();
22188
+ const arch = os$1.arch();
22120
22189
  if (platform === "linux") return {
22121
22190
  platform,
22122
22191
  arch,
@@ -24273,20 +24342,20 @@ function asNpuType(type) {
24273
24342
  return null;
24274
24343
  }
24275
24344
  function localHardwareInfo() {
24276
- const platform = os.platform();
24345
+ const platform = os$1.platform();
24277
24346
  if (platform !== "darwin" && platform !== "linux" && platform !== "win32") return null;
24278
- const arch = os.arch() === "arm64" ? "arm64" : "x64";
24347
+ const arch = os$1.arch() === "arm64" ? "arm64" : "x64";
24279
24348
  const inference = mapSignalsToInferenceHardware(probePlatform());
24280
24349
  const gpuType = inference.gpu ? asGpuType(inference.gpu.type) : null;
24281
24350
  const npuType = inference.npu ? asNpuType(inference.npu.type) : null;
24282
- const cpus = os.cpus();
24351
+ const cpus = os$1.cpus();
24283
24352
  return {
24284
24353
  platform,
24285
24354
  arch,
24286
24355
  cpuModel: cpus[0]?.model ?? "unknown",
24287
24356
  cpuCores: cpus.length,
24288
- totalRAM_MB: Math.round(os.totalmem() / 1024 / 1024),
24289
- availableRAM_MB: Math.round(os.freemem() / 1024 / 1024),
24357
+ totalRAM_MB: Math.round(os$1.totalmem() / 1024 / 1024),
24358
+ availableRAM_MB: Math.round(os$1.freemem() / 1024 / 1024),
24290
24359
  gpu: gpuType !== null ? {
24291
24360
  type: gpuType,
24292
24361
  name: gpuType
@@ -24644,7 +24713,7 @@ async function defaultHasBinary(binary) {
24644
24713
  }
24645
24714
  }
24646
24715
  async function defaultDetectManager() {
24647
- const candidates = os.platform() === "darwin" ? ["brew"] : [
24716
+ const candidates = os$1.platform() === "darwin" ? ["brew"] : [
24648
24717
  "apt",
24649
24718
  "apk",
24650
24719
  "dnf",
@@ -26491,4 +26560,573 @@ var LifecycleJobEngine = class {
26491
26560
  */
26492
26561
  var CAP_METHOD_NOT_IMPLEMENTED = "CAP_METHOD_NOT_IMPLEMENTED";
26493
26562
  //#endregion
26494
- export { ADMIN_TOKEN_MAX_LIFETIME_MS, ADMIN_TOKEN_PREFIX, AGENT_CAP_FWD_ACTION, AGENT_CAP_FWD_SERVICE, AGENT_DASHBOARD_ORIGINS_FIELD, AGENT_HTTPS_NAMES_COLLECTION, AGENT_HTTPS_NAMES_COLUMNS, AGENT_READINESS_SERVICE_NAME, AGENT_UI_UNLOCK_TTL_MS, AGENT_UI_UNLOCK_TYP, AGENT_UI_UNLOCK_USE, AGENT_UI_UNLOCK_VERSION, ALL_CAPABILITY_DEFINITIONS, ARRAY_BUFFER_CENSUS_COOLDOWN_MS, ARRAY_BUFFER_CENSUS_SUSTAIN_MS, ARRAY_BUFFER_CENSUS_THRESHOLD_MB, ARRAY_BUFFER_RELEASE_MIN_DROP_RATIO, AddonApiFactory, AddonDepsManager, AddonEngineManager, AddonHealthMonitor, AddonInstaller, AddonLoader, AddonManifest, AddonRouteRegistry, AdminTokenManager, AgentHttpsInstallError, AgentHttpsNames, AgentMdnsAdvertiser, AgentMeshIdentityGate, AgentPairing, AlertCenterAddon, ApiKeyManager, AuthAuditLog, AuthManager, BackupDecryptError, BackupKeyFormatError, BackupKeyMismatchError, BackupKeyRequiredError, CAP_ACTION_OVERFLOW_LABEL, CAP_ACTION_UNLABELLED, CAP_METHOD_NOT_IMPLEMENTED, CA_COMMON_NAME, CA_VALIDITY_DAYS, CORE_CAP_SERVICE_NAME, CalendarsAddon, CapRouteError, CapRouteResolver, CapUsageRegistry, CapabilityHandle, CapabilityRegistry, CapabilityUnavailableError, ComposerAddon, ConfigManager, ConfigStore, ConsoleDestination, ConsoleLoggingAddon, CoreBlocksAddon, CustomActionRegistry, DECISIVE_HEAP_SPACES, DEFAULT_DATA_PATH, DEFAULT_HUB_TLS_TCP_PORT, DEFAULT_LAN_HTTP_PORT, DEFAULT_LOG_LEVEL, DEVICE_CA_KEY_REF, DEVICE_SETTINGS_CONTRIBUTION_METHODS, DEVICE_STATUS_METHOD, DataPlaneRegistry, DeviceCaStore, DeviceCredentialManager, DeviceManagerAddon, DeviceRegistry, DeviceStore, EMPTY_CAP_ACTION_READING, EMPTY_SOCKET_DIRECTION, EMPTY_SOCKET_PLANE_BASELINE, EVENT_PLANE_TOP_N, EVENT_TOPIC_PREFIX, EngineManagerResolver, EventBus, FIRST_BOOT_ADMIN_PASSWORD, FIRST_BOOT_ADMIN_USERNAME, FeatureManager, FilesystemStorageAddon, FilesystemStorageProvider, FrameDecoder, FsStorageBackend, GET_STATUS_METHOD, HEALTH_MONITOR_GRACE_PERIOD_MS, HEALTH_MONITOR_RETRY_INTERVALS_MS, HEALTH_MONITOR_TICK_MS, HEAP_RECLAIM_MIN_INTERVAL_MS, HEAP_RECLAIM_STEADY_STATE_INTERVAL_MS, HEAP_RECLAIM_TRIGGER_MB, HEAP_SPACE_REPORT_MIN_MB, HEAP_WATCH_INTERVAL_MS, HEAP_WATCH_WARN_RATIO, HUB_CAP_FWD_ACTION, HUB_CAP_FWD_SERVICE, HUB_MAIN_HEAP_WATCH_LABEL, HUB_MAIN_RSS_BUDGET_MB, HUB_RSS_BUDGET_ENV, HubForwarderAddon, HubForwarderDestination, HubLogForwarder, HubNodeRegistry, HubPairing, INFRA_CAPABILITIES, IntegrationRegistry, JWT_SIGNING_KEY_REF, JobJournal, JwtSigningKeyUnavailableError, LEAF_RENEWAL_WINDOW_DAYS, LifecycleJobEngine, LifecycleStateMachine, LivenessMonitorAddon, LocalAuthAddon, LocalChildClient, LocalChildRegistry, LogManager, LogRingBuffer, LoggingGate, LoginSessionManager, LokiDestination, LokiLoggingAddon, MAX_CAP_ACTIONS_PER_PEER, MAX_LEAF_VALIDITY_DAYS, MESH_ACTION_FORBIDDEN_TYPE, MESH_CA_FIELD, MESH_CA_KEY_REF, MESH_CA_SETTINGS_KEY, MESH_NODE_CERTIFICATES_COLLECTION, MESH_NODE_CERTIFICATES_COLUMNS, MESH_NODE_UNAUTHENTICATED_TYPE, MESH_QUEUE_TOP_N, MESH_TLS_PORT_HELLO_FIELD, METHOD_ACCESS_MAP, MeshCaKeeper, MeshCertificateRegistry, MeshCrl, MeshIdentityGate, ModelDownloadService, NATIVE_PROVIDER_SERVICE_INFIX, NATIVE_SCAN_DEPTH, NativeMetricsAddon, NativeMetricsProvider, NetworkQualityTracker, NotificationService, OUTBOUND_QUEUE_COOLDOWN_MS, OUTBOUND_QUEUE_SUSTAIN_MS, OUTBOUND_QUEUE_THRESHOLD_BYTES, PAIRING_CODE_DIGITS, PAIRING_MAX_CODE_ATTEMPTS, PAIRING_MAX_SESSIONS, PAIRING_PATHS, PAIRING_PIN_DIGITS, PAIRING_PROTOCOL, PAIRING_TTL_MS, PARENT_ROUTED_PROVIDER_ADDON_ID, PREVIOUS_LEAF_GRACE_MS, PYTHON_VERSION, PairingHttpError, PeerAnsweredError, PipelineRunner, PipelineValidator, PythonEnvManager, QUARANTINE_DIRNAME, REFRESH_TOKEN_PREFIX, RENEWAL_ABANDONED, RESTART_MARKER_FILE, RSS_BUDGET_REANNOUNCE_MIN_MS, RSS_BUDGET_RELEASE_RATIO, RUNNER_HEAP_WATCH_INTERVAL_MS, RUNNER_RSS_BUDGET_ENV, RUNTIME_DEFAULTS, ReadinessRegistry, ReadinessTimeoutError, ReplEngine, RingBuffer, SERVER_AUTH_OID, SOCKET_PLANE_TOP_N, SOCKET_QUEUE_TOP_N, STALL_REPORT_MS, STALL_TICK_MS, STORE_READABLE_BOOTSTRAP_KEYS, SYSTEM_SECRET_OWNER, ScopedLogger, ScopedTokenManager, SettingsReadUnavailableError, SocketChannel, SqliteSettingsAddon, SqliteSettingsBackend, StagingArea, StorageLocationManager, StorageManager, StorageOrchestratorAddon, StorageOrchestratorService, SystemBackupService, SystemConfigAddon, SystemEventBus, TRADITIONAL_NATIVE_PACKAGES, TlsTcpTransporter, ToastService, UDS_NO_ROUTE_PREFIX, UNCLAIMED, UPLOADED_CA_FILE, USER_MANAGEMENT_INTERNAL, UdsLocalTransportClient, UdsLocalTransportServer, UnlockTicketJtiStore, UserManager, WinstonDestination, WinstonLoggingAddon, ZERO_LOOP_DELAY, __resetCapUsageRegistryForTests, __resetLoggingGateForTests, acceptAgentSans, adaptBrokerToCluster, addonSettingsCapability, adoptModelRevisions, afterWorkerOnlineAnnounce, agentHttpsPaths, allFamiliesListenHost, answerClaimedGetStatus, applyCertificateToListener, applyLanHttp, attachUserManagementInternal, attributeStall, bindPendingLanHttp, bootstrapSchema, brokerCallForCap, brokerTransportLink, buildAgentAnnouncement, buildBinaryPath, buildCapRouters, buildHeapSample, buildLinkChain, buildNativeCapProxy, buildNodeManifest, buildNpmChildEnv, buildStorageLocationRegistry, buildTransporter, builderMountedCapNames, caFingerprint, caFingerprintCompact, callRegisterNodeWithRetry, callWithServiceDiscovery, canServeDataPlane, capActionLabel, capActionName, capActionSuffix, capBareAction, capServiceName, certificateNames, classifyAddonDir, classifyCapRoute, clearHttpsListener, clearPendingRestart, clearPlatformKeychainKey, closeLanHttp, clusterEventTopic, collectAgentNames, collectCertIdentity, collectModelFiles, computePairingCommitment, computePairingSas, connectBrokerTransport, contentTypeFor, copyDirRecursive, copyExtraFileDirs, createAddonContext, createAddonDataPlaneFacility, createAddonPeerBytesFacility, createAddonService, createAgentEventScope, createAgentHttpsRequest, createAgentTransport, createArrayBufferCensusGate, createAuthenticatedFileServer, createBroker, createBrokerDeviceManagerApi, createCapActionCensus, createCiaoPublisher, createCidrMatcher, createCoreCapService, createDeferredHeapWatchSink, createDoorSettingsView, createEventPlaneMeter, createEventPlaneReader, createFileDataPlaneHandler, createHubCapForwardService, createHubService, createInspectorArrayBufferCensus, createKernelHwAccel, createKernelInferenceEngine, createLocalTransport, createLoopDelayMeter, createMeshAccessMiddleware, createMeshCsrPem, createMeshQueueReader, createOutboundQueueGate, createParentUnownedCallHandler, createProcessService, createReadinessService, createReadinessServiceForRegistry, createScopedProcessManager, createSocketDirectionCounters, createSocketPlaneMeter, createSocketPlaneReader, createStreamProbeBrokerService, createUdsAddonContext, createUdsEventBridge, createUdsEventBus, createUdsLogger, createUdsLoggerWithControl, createV8Reclaimer, currentBrokerTransporter, deleteModelFromDisk, deriveAgentListenPort, describeCsr, describeHttpsLeaf, describeMeshLeaf, describeProviderKindDrift, describeRss, detectWorkspacePackagesDir, deviceCapResolverLink, deviceOfGetStatus, diffCapActionCensus, diffEventPlane, diffSocketPlane, disconnectBrokerTransport, downloadBinary, downloadFile, downloadModel, dropProcessPeer, emitDownForOwnedCaps, emitHeapDiagnosticReport, emitProcessNodeRegistered, encodeFrame, ensureAddonNativePrebuilds, ensureBinary, ensureDir, ensureFfmpeg, ensureLibraryBuilt, ensureModel, ensureNativePrebuilds, ensurePython, ensureTlsCert, evaluateExistingCert, expandCapMethods, exportMeshPrivateKeyPem, fetchJson, findInPath, formatArrayBufferCensus, formatEventPlane, formatHeapSpaces, formatLogLine, formatMeshQueue, formatOutboundQueueVerdict, formatSocketPlane, generateBackupKeyPair, generateDeviceCa, generateMeshCa, generateMeshKeyPair, getBrokerEventBus, getBrokerTlsTransporter, getCapUsageRegistry, getFfmpegDownloadUrl, getLoggingGate, getModelFilePath, getMoleculerEventStats, getOrInitReadinessRegistry, getOrInitReadinessRegistryForClient, getPidStats, getPlatformInfo, getPlatformKeychainKey, getProcessAgentHttpsNames, getProcessJwtSigningKeyState, getProcessMeshCaState, getProcessMeshCertificateRegistry, getProcessMeshTlsListenerState, getProcessNodeMeshTransport, getProcessPeerLeaf, getPythonDownloadUrl, getRestartMarkerPath, getSinglePidStats, getUserManagementInternal, getWorkerDeviceRegistry, hasDotNode, heapSpaceField, hostNodeIdOf, hubHostFromMeshAddress, hubMainRssBudget, installAgentHttps, installBrokerTransporter, installManifestNativeDeps, installManifestPythonDeps, installManifestSystemDeps, installPackageFromNpm, installPythonPackages, installPythonRequirements, ipcParentLink, isAddonDeploySource, isAllowedAgentDashboardReturnTo, isArrayBufferCensusReport, isArrayOutputSchema, isCollectionArrayMethod, isContainerBridgeAddress, isCredentialKeyName, isInfraCapability, isInstalledTransporter, isLocalOnlyHostname, isModelDownloaded, isPeerEventPacket, isPrivateAddress, isProcessVerifiedMeshPeer, isRemoteForbiddenAction, isRemoteForbiddenOnAgent, isSettingsReadUnavailable, isSourceNewer, isValidAgentNodeId, isolatedBuiltinPhase, issueAgentHttpsLeaf, issueDeviceLeaf, issueMeshLeafForNode, issueMeshLeafFromCsr, keyFingerprintShort, leafFingerprintOf, loadAgentHttps, loadDeviceCa, loadMeshCa, loadTlsCert, localEndpointPath, localProviderLink, localSupportedPythonRuntimes, mapSignalsToInferenceHardware, meshErrorType, mintAgentUiUnlockTicket, mountNativeCapService, nextRssBudgetState, normalizeIp, onProcessNodeRegistered, openMeshTlsWhenRevocationsLoaded, overlayGetStatus, parseAgentDashboardOrigins, parseCapAction, parseCidrList, parseRangeHeader, parseRssBudgetMb, parseTokenExpiry, parseTokenizedUrl, partitionIsolatedBuiltinIds, pemDigest, pinnedHttpsCaFingerprint, prepareBootTls, prepareRestoreArchive, probePlatform, processJwtSigningKey, processMeshCrl, proxyToUpstream, quarantineAddonResidue, readBackupEncryptionHeader, readCidrSetting, readExtraSans, readHeapSpaces, readLanHttpState, readPendingRestart, readSocketQueues, readTlsAccessStatus, readTlsMode, readinessKey, reclaimIntervalMs, recordSocketFrame, redactLogEntry, redactLogMeta, redactLogText, regenerateCertificate, registerEventBusService, registerHttpsListener, registerLanHttpHandler, reissueTlsLeaf, reloadHttpsListener, renewMeshCertificate, requireProcessMeshCa, resolveFilePath, resolveFormatRevision, resolveHwAccel, resolveNpmInvocation, revertToGeneratedCertificate, revisionWeightUrl, revokeMeshCertificate, runHubAddonBoot, runNpm, sampleSocketDirection, scheduleSelfRestart, scopeKey, scopesAllowAddon, scopesAllowDeviceCap, selectAddonResidue, selectReportedSpaces, serializeTypedArrays, servedHttpsLeafFingerprint, setHubConnected, setNodeEventInterest, setPlatformKeychainKey, setProcessAgentHttpsNames, setProcessMeshCertificateRegistry, setProcessMeshPeerTransportLookup, setProcessMeshTlsEnabler, setProcessMeshTlsListenerState, setWrapperActive, shouldReclaim, signPairingProof, signalAllRunnerGroups, socketDirectionBytes, socketDirectionMessages, splitPemCertificates, stampCallerAddonId, startEventLoopStallMonitor, startHeapWatch, startRunnerHeapWatch, staticJwtSigningKey, storeMayAnswer, storeUploadedCertificate, strandedMb, stripCamstackDeps, stripForgedIdentity, stripForwardedCaller, subscribePassthrough, systemHostFacts, udsChildLogToWorkerEntry, validateProviderRegistrations, validateUploadedTls, verifyAgentUiUnlockTicket, verifyDeviceLeaf, verifyDeviceSignature, verifyPairingProof, waitUntilReady, writeExtraSans, writePendingRestart, writeTlsMode };
26563
+ //#region src/i18n/en.json
26564
+ var en_default = {
26565
+ "auth.invalid-credentials": "Invalid credentials",
26566
+ "auth.invalid-totp": "Invalid TOTP code",
26567
+ "auth.not-authenticated": "Not authenticated",
26568
+ "auth.login-challenge-expired": "Invalid or expired login challenge — please re-enter your password",
26569
+ "auth.passkey-verification-failed": "Passkey verification failed",
26570
+ "auth.user-gone": "User no longer exists",
26571
+ "auth.no-session-cookie": "No session cookie",
26572
+ "auth.invalid-session-cookie": "Invalid session cookie",
26573
+ "auth.handoff-code-invalid": "Invalid or expired handoff code",
26574
+ "auth.share-never-expiring-extend": "A never-expiring share token cannot be extended",
26575
+ "auth.share-owner-only-extend": "Only the token owner or an admin can extend a share token",
26576
+ "auth.share-owner-only-revoke": "Only the token owner or an admin can revoke a share token",
26577
+ "auth.share-token-not-found": "Share token not found: {id}",
26578
+ "auth.password-incorrect": "Password is incorrect",
26579
+ "auth.session-required": "Requires a signed-in user session",
26580
+ "auth.admin-required": "Admin required",
26581
+ "auth.session-ended": "Session ended — sign in again",
26582
+ "auth.access-denied": "Access denied",
26583
+ "auth.totp-confirm-failed": "TOTP confirmation failed — code did not match",
26584
+ "device.certificates-unavailable": "Device certificates are not available",
26585
+ "device.not-found": "Device {id} not found",
26586
+ "device.credentials-unavailable": "Device credentials not available",
26587
+ "device.credential-not-found": "Device credential not found: {id}",
26588
+ "storage.no-provider": "No storage provider configured",
26589
+ "recording.export-unknown": "Unknown export \"{id}\"",
26590
+ "recording.export-invalid-range": "Invalid time range {fromMs}..{toMs}",
26591
+ "recording.export-no-profiles": "The export needs at least one stream profile",
26592
+ "recording.export-not-ready": "Export \"{id}\" is not ready ({state})",
26593
+ "recording.export-expired": "Export \"{id}\" has expired",
26594
+ "recording.export-no-file": "Export \"{id}\" has no file on disk",
26595
+ "recording.clip-render-unavailable": "Clip rendering is unavailable on this node",
26596
+ "reolink.hub-host-missing": "Reolink Hub: host not configured",
26597
+ "reolink.hub-password-missing": "Reolink Hub: password not configured",
26598
+ "reolink.email-push-hub-attached": "Email push is not available for hub-attached cameras",
26599
+ "reolink.email-push-not-wired": "Email Push Server is not wired — restart the Reolink addon",
26600
+ "reolink.webhook-not-wired": "HaCfg Webhook Server is not wired — restart the Reolink addon",
26601
+ "reolink.webhook-unsupported": "Camera firmware does not support Baichuan HaCfg webhook (cmd 806)",
26602
+ "reolink.preset-invalid": "Invalid presetId: {presetId}",
26603
+ "reolink.home-preset-not-baichuan": "Configured home preset is not a Baichuan id: {presetId}",
26604
+ "reolink.day-night-schedule-unsupported": "Reolink cameras do not support a scheduled day/night mode",
26605
+ "reolink.clip-device-not-reolink": "clip refresh: device {deviceId} is not a Reolink camera here",
26606
+ "notifiers.gotify-server-url-required": "gotify: serverUrl is required",
26607
+ "notifiers.gotify-app-token-required": "gotify: appToken is required",
26608
+ "notifiers.email-to-required": "email: missing required config 'to'",
26609
+ "hikvision.camera-name-required": "Camera name is required",
26610
+ "hikvision.camera-ip-required": "Camera IP is required",
26611
+ "hikvision.password-required": "Password is required",
26612
+ "hikvision.home-preset-missing": "No home preset configured for this camera — set one in the PTZ settings",
26613
+ "amcrest.camera-name-required": "Camera name is required",
26614
+ "amcrest.camera-ip-required": "Camera IP is required",
26615
+ "amcrest.password-required": "Password is required",
26616
+ "amcrest.home-preset-missing": "No home preset configured for this camera — set one in the PTZ settings",
26617
+ "wyze.camera-name-required": "Camera name is required",
26618
+ "wyze.camera-mac-required": "Wyze: cannot persist a camera without a MAC address",
26619
+ "dreame.manual-create-refused": "Dreame devices are adopted from the cloud, not created manually",
26620
+ "rtsp.camera-name-required": "Camera name is required",
26621
+ "rtsp.stream-required": "At least one RTSP stream URL is required",
26622
+ "rtsp.too-many-streams": "At most 3 RTSP stream URLs are supported",
26623
+ "gree.name-required": "Air conditioner name is required",
26624
+ "gree.ip-required": "Air conditioner IP address is required",
26625
+ "ecowitt.name-required": "Gateway name is required",
26626
+ "ecowitt.host-required": "Gateway host is required for local-poll transport",
26627
+ "unifi.name-required": "Controller name is required",
26628
+ "unifi.host-required": "Controller host is required",
26629
+ "vesync.name-required": "Account name is required",
26630
+ "vesync.email-required": "Account email is required",
26631
+ "unraid.name-required": "Server name is required",
26632
+ "unraid.host-required": "Server host is required",
26633
+ "velux.name-required": "Gateway name is required",
26634
+ "velux.host-required": "Gateway host is required",
26635
+ "cloudflare.custom-not-configured": "Custom tunnel not configured — run \"Enable\" from settings first",
26636
+ "cloudflare.custom-needs-settings": "Custom tunnel needs: {missing}. Fill the settings above first.",
26637
+ "cloudflare.zone-token-missing": "listZones: no Cloudflare API token is set",
26638
+ "cloudflare.zone-not-visible": "Selected zone {zoneId} is not visible to this token",
26639
+ "google.from-address-required": "Set From address on the Google broker (or Connect an account).",
26640
+ "google.client-credentials-required": "Configure Client ID and Client secret before refreshing the Google token",
26641
+ "globalSettings.s_alerts.title": "Alert Center",
26642
+ "globalSettings.s_alerts.description": "Configure alert storage and retention.",
26643
+ "globalSettings.s_alerts.maxAlerts.label": "Maximum stored alerts",
26644
+ "globalSettings.s_alerts.maxAlerts.description": "Oldest read alerts are deleted when this limit is exceeded.",
26645
+ "globalSettings.s_alerts.retentionDays.label": "Alert retention (days)",
26646
+ "globalSettings.s_alerts.retentionDays.description": "Alerts older than this are automatically removed.",
26647
+ "globalSettings.s_camera-grids.title": "Camera grids",
26648
+ "globalSettings.s_camera-grids.description": "A grid is a composite camera: several cameras composed into one picture, recorded and played back like any other camera. Create one here with a name; open its camera to lay it out. Object detection is switched OFF on a new grid — the cameras it is composed from are already analysed.",
26649
+ "globalSettings.s_camera-grids.cameraGrids.label": "Grids",
26650
+ "globalSettings.s_camera-grids.cameraGrids.name.label": "Name",
26651
+ "globalSettings.s_camera-grids.cameraGrids.enabled.label": "Enabled",
26652
+ "globalSettings.s_camera-grids.cameraGrids.enabled.description": "A disabled grid withdraws its camera.",
26653
+ "gridDevice.s_camera-grid-layout.title": "Grid layout",
26654
+ "gridDevice.s_camera-grid-layout._gridLayout.label": "",
26655
+ "globalSettings.s_console-logging.title": "Console Logging",
26656
+ "globalSettings.s_console-logging.description": "Minimum log level to emit on stdout/stderr. Independent from the rotated-file (Winston) destination.",
26657
+ "globalSettings.s_console-logging.level.label": "Log Level",
26658
+ "globalSettings.s_console-logging.level.o_debug.label": "Debug",
26659
+ "globalSettings.s_console-logging.level.o_info.label": "Info",
26660
+ "globalSettings.s_console-logging.level.o_warn.label": "Warn",
26661
+ "globalSettings.s_console-logging.level.o_error.label": "Error",
26662
+ "dayNightConfig.dayNight_mode.label": "Mode",
26663
+ "dayNightConfig.dayNight_sensitivity.label": "IR-cut sensitivity",
26664
+ "dayNightConfig.dayNight_switchDelaySec.label": "Switch delay",
26665
+ "section.s_day-night.title": "Day / Night",
26666
+ "section.s_day-night.description": "IR-cut switching mode and the photocell knobs that gate it.",
26667
+ "baseDeviceSection.s_driver-settings-unavailable.title": "Driver Settings",
26668
+ "baseDeviceSection.s_driver-settings-unavailable.driver-settings-unavailable-notice.label": "Temporarily unavailable",
26669
+ "imageSettingsConfig.imageSettings_brightness.label": "Brightness",
26670
+ "imageSettingsConfig.imageSettings_contrast.label": "Contrast",
26671
+ "imageSettingsConfig.imageSettings_saturation.label": "Saturation",
26672
+ "imageSettingsConfig.imageSettings_sharpness.label": "Sharpness",
26673
+ "imageSettingsConfig.imageSettings_mirror.label": "Mirror",
26674
+ "imageSettingsConfig.imageSettings_flip.label": "Flip",
26675
+ "imageSettingsConfig.imageSettings_rotate.label": "Rotation",
26676
+ "imageSettingsConfig.imageSettings_whiteBalance.label": "White balance",
26677
+ "imageSettingsConfig.imageSettings_warmth.label": "Warmth",
26678
+ "imageSettingsConfig.imageSettings_exposureMode.label": "Exposure mode",
26679
+ "imageSettingsConfig.imageSettings_backlightMode.label": "Backlight compensation",
26680
+ "section.s_image-settings.title": "Image adjustment",
26681
+ "section.s_image-settings.description": "Picture sliders, orientation and exposure. Option lists are read live from the camera — fields the firmware doesn't expose are hidden.",
26682
+ "volumesField.id.label": "Id",
26683
+ "volumesField.label.label": "Name",
26684
+ "volumesField.status.label": "Status",
26685
+ "volumesField.capacity.label": "Capacity",
26686
+ "volumesField.free.label": "Free",
26687
+ "tracksField.id.label": "Track",
26688
+ "tracksField.primary.label": "Primary",
26689
+ "tracksField.enabled.label": "Enabled",
26690
+ "tracksField.codec.label": "Codec",
26691
+ "tracksField.resolution.label": "Resolution",
26692
+ "storageSection.s_recording-onboard-storage.title": "Camera storage",
26693
+ "storageSection.s_recording-onboard-storage.description": "The card in the camera, as the camera itself describes it.",
26694
+ "recordingSection.s_recording-onboard-recording.title": "Camera recording",
26695
+ "recordingSection.s_recording-onboard-recording.description": "What the camera records to its own card. This writes the camera, not CamStack's recorder.",
26696
+ "globalSettings.s_local-access.title": "LAN HTTP",
26697
+ "globalSettings.s_local-access.description": "Native apps on this Wi-Fi use http:// and skip the private certificate. The tunnel and this admin UI stay on HTTPS. Turn off once a publicly-trusted certificate covers the LAN name.",
26698
+ "globalSettings.s_local-access.httpEnabled.label": "Enable HTTP on the LAN",
26699
+ "globalSettings.s_local-access.httpPort.label": "HTTP port",
26700
+ "globalSettings.s_local-access.httpPort.description": "Dedicated listener. Must not equal the HTTPS port (4443 by default).",
26701
+ "globalSettings.s_local-access.mdnsAdvertise.label": "Announce this hub on the LAN (mDNS)",
26702
+ "globalSettings.s_local-access.mdnsAdvertise.description": "Lets `camstack login` find the hub without an address. Advertises only the HTTPS address, never a secret. Needs UDP 5353 multicast to reach the LAN (host networking or a dedicated container IP).",
26703
+ "globalSettings.s_local-access.localHostname.label": "Local hostname",
26704
+ "globalSettings.s_local-access.localHostname.description": "Advertised to the viewer instead of the raw LAN IP, and added to the certificate SAN. Requires this name to resolve on the LAN (router DNS, mDNS, or a hosts file). Leave empty to keep using the IP.",
26705
+ "globalSettings.s_loki-logging.title": "Loki",
26706
+ "globalSettings.s_loki-logging.description": "Ship this node’s logs to a Grafana Loki instance. Independent of the rotated-file and console destinations. Turn it on or off with the Enable/Disable control on this destination — the same one every other destination uses.",
26707
+ "globalSettings.s_loki-logging.url.label": "Loki URL",
26708
+ "globalSettings.s_loki-logging.url.description": "Base URL, e.g. http://loki:3100 — the /loki/api/v1/push path is added.",
26709
+ "globalSettings.s_loki-logging.level.label": "Minimum level",
26710
+ "globalSettings.s_loki-logging.level.o_debug.label": "Debug",
26711
+ "globalSettings.s_loki-logging.level.o_info.label": "Info",
26712
+ "globalSettings.s_loki-logging.level.o_warn.label": "Warn",
26713
+ "globalSettings.s_loki-logging.level.o_error.label": "Error",
26714
+ "globalSettings.s_loki-logging.job.label": "Job label",
26715
+ "globalSettings.s_loki-logging.job.description": "The Loki `job` label. Keep it fixed — labels are indexed.",
26716
+ "globalSettings.s_loki-logging.extraLabels.label": "Extra labels",
26717
+ "globalSettings.s_loki-logging.extraLabels.description": "Static `key=value,key2=value2`. Low-cardinality only: per-entry values belong in the line body, and a high-cardinality label will bring Loki down.",
26718
+ "globalSettings.s_loki-logging.tenantId.label": "Tenant ID",
26719
+ "globalSettings.s_loki-logging.tenantId.description": "Sent as X-Scope-OrgID. Required by Grafana Cloud and multi-tenant Loki.",
26720
+ "globalSettings.s_loki-logging.username.label": "Username",
26721
+ "globalSettings.s_loki-logging.username.description": "HTTP basic auth. Leave empty for none.",
26722
+ "globalSettings.s_loki-logging.password.label": "Password",
26723
+ "globalSettings.s_loki-logging.batchIntervalMs.label": "Flush interval",
26724
+ "globalSettings.s_loki-logging.batchIntervalMs.description": "How often a partial batch is pushed.",
26725
+ "globalSettings.s_loki-logging.batchSize.label": "Batch size",
26726
+ "globalSettings.s_loki-logging.batchSize.description": "Push early once this many entries are queued.",
26727
+ "globalSettings.s_loki-logging.timeoutMs.label": "Request timeout",
26728
+ "globalSettings.s_native-metrics-settings.title": "System Metrics",
26729
+ "globalSettings.s_native-metrics-settings.samplingIntervalMs.label": "Sampling Interval",
26730
+ "globalSettings.s_native-metrics-settings.samplingIntervalMs.description": "How often to collect system metrics",
26731
+ "globalSettings.s_native-metrics-load-series.title": "Load history",
26732
+ "globalSettings.s_native-metrics-load-series.loadSeriesCadenceSec.label": "Sampling cadence",
26733
+ "globalSettings.s_native-metrics-load-series.loadSeriesCadenceSec.description": "How often every node reports its process tree. FIXED — a sample is emitted on every interval whether or not anything changed, so a gap in the chart means one thing only: nobody reported. Outside 5-60 s the value is refused.",
26734
+ "globalSettings.s_native-metrics-load-series.loadSeriesRetentionHours.label": "Retention",
26735
+ "globalSettings.s_native-metrics-load-series.loadSeriesRetentionHours.description": "How long the load history is kept on disk (the hub database, on the NVMe cache — never the recordings disk). This is the INTENTION; the row cap below is the guarantee.",
26736
+ "globalSettings.s_native-metrics-load-series.load-series-cost.label": "What this configuration costs",
26737
+ "globalSettings.s_native-metrics-load-series.load-series-cap.label": "Hard row cap",
26738
+ "globalSettings.s_snapshot-cache.title": "Snapshot Cache",
26739
+ "globalSettings.s_snapshot-cache.description": "Stale fallback when live capture fails. Per-device freshness is configured under Device → Snapshot → Max cache age.",
26740
+ "globalSettings.s_snapshot-cache.staleTtlMs.label": "Stale fallback TTL (ms)",
26741
+ "globalSettings.s_snapshot-cache.staleTtlMs.description": "If live capture fails, cached snapshot younger than this is still returned.",
26742
+ "deviceSettingsContribution.s_snapshot-preferences.title": "Snapshot",
26743
+ "deviceSettingsContribution.s_snapshot-preferences.snapshotStreamId.label": "Preferred stream",
26744
+ "deviceSettingsContribution.s_snapshot-preferences.snapshotStreamId.description": "Stream used when grabbing a snapshot",
26745
+ "deviceSettingsContribution.s_snapshot-preferences.snapshotMaxAgeS.label": "Max cache age (s)",
26746
+ "deviceSettingsContribution.s_snapshot-preferences.snapshotDebug.label": "Debug logging",
26747
+ "deviceSettingsContribution.s_snapshot-preferences.snapshotDebug.description": "Log stream selection and timing details for this device.",
26748
+ "providerInfo.s_filesystem-storage.title": "Filesystem",
26749
+ "providerInfo.s_filesystem-storage.basePath.label": "Base path",
26750
+ "providerInfo.s_filesystem-storage.basePath.description": "Absolute directory path where files are stored.",
26751
+ "global.s_system-config-server.description": "The name of this server, and its connection settings (read-only, loaded from config.yaml at bootstrap).",
26752
+ "global.s_system-config-server.server-restart-note.label": "Restart required",
26753
+ "global.s_system-config-server.port.label": "Port",
26754
+ "global.s_system-config-server.port.description": "Listening port",
26755
+ "global.s_system-config-server.host.label": "Host",
26756
+ "global.s_system-config-server.host.description": "Bind address",
26757
+ "global.s_system-config-server.dataPath.label": "Data Path",
26758
+ "global.s_system-config-server.dataPath.description": "Root data directory",
26759
+ "global.s_system-config-auth.description": "Token and session settings.",
26760
+ "global.s_system-config-auth.tokenExpiry.label": "Session lifetime",
26761
+ "global.s_system-config-auth.tokenExpiry.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.",
26762
+ "global.s_system-config-auth.accessTokenExpiry.label": "Access token lifetime",
26763
+ "global.s_system-config-auth.accessTokenExpiry.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.",
26764
+ "global.s_system-config-auth.trustedProxies.label": "Trusted reverse proxies",
26765
+ "global.s_system-config-auth.trustedProxies.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.",
26766
+ "global.s_system-config-auth.trustedNetworksWarning.label": "Skipping two-factor authentication",
26767
+ "global.s_system-config-auth.trustedNetworks.label": "Trusted networks (skip the second factor)",
26768
+ "global.s_system-config-auth.trustedNetworks.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.",
26769
+ "globalSettings.s_winston-logging.title": "Logging",
26770
+ "globalSettings.s_winston-logging.description": "Global log verbosity + retention for rotated log files on this node.",
26771
+ "globalSettings.s_winston-logging.level.label": "Log Level",
26772
+ "globalSettings.s_winston-logging.level.o_debug.label": "Debug",
26773
+ "globalSettings.s_winston-logging.level.o_info.label": "Info",
26774
+ "globalSettings.s_winston-logging.level.o_warn.label": "Warn",
26775
+ "globalSettings.s_winston-logging.level.o_error.label": "Error",
26776
+ "globalSettings.s_winston-logging.retentionDays.label": "Retention (days)",
26777
+ "globalSettings.s_winston-logging.retentionDays.description": "Number of days to keep rotated log files before deletion",
26778
+ "system.python-required": "Python 3.10+ is required but not found on this system",
26779
+ "system.device-enrollment-busy": "Too many pending device enrollments — try again shortly",
26780
+ "system.admin-token-expiry-too-long": "An admin token must expire within 90 days",
26781
+ "system.admin-token-name-required": "An admin token needs a name",
26782
+ "system.user-exists": "User with username \"{username}\" already exists",
26783
+ "system.user-not-found": "User with id \"{id}\" not found",
26784
+ "system.addon-no-discovery": "Addon \"{addonId}\" does not support device discovery",
26785
+ "system.addon-no-adoption": "Addon \"{addonId}\" does not support device adoption",
26786
+ "system.addon-no-manual-create": "Addon \"{addonId}\" does not support manual device creation",
26787
+ "system.location-name-required": "[device-manager] addLocation: name must be non-empty",
26788
+ "system.location-required": "[device-manager] setLocationIcon: location must be non-empty",
26789
+ "system.site-zone-name-required": "[device-manager] setSiteZone: name must be non-empty",
26790
+ "server.handoff-busy": "Too many pending handoff codes — try again shortly",
26791
+ "server.app-confirmations-busy": "Too many pending app confirmations",
26792
+ "server.step-up-busy": "Too many pending step-up proofs",
26793
+ "server.login-unavailable": "Login unavailable — `user-management` capability not registered",
26794
+ "server.share-token-expired": "Share token expired: {id}",
26795
+ "server.package-not-allowed": "Package \"{name}\" is not an allowed @camstack/* package",
26796
+ "server.package-protected": "Cannot uninstall protected package \"{name}\"",
26797
+ "server.package-required": "Package {packageName} is required and cannot be uninstalled"
26798
+ };
26799
+ //#endregion
26800
+ //#region src/i18n/it.json
26801
+ var it_default = {
26802
+ "auth.invalid-credentials": "Credenziali non valide",
26803
+ "auth.invalid-totp": "Codice TOTP non valido",
26804
+ "auth.not-authenticated": "Non autenticato",
26805
+ "auth.login-challenge-expired": "Richiesta di accesso non valida o scaduta — reinserisci la password",
26806
+ "auth.passkey-verification-failed": "Verifica della passkey non riuscita",
26807
+ "auth.user-gone": "L'utente non esiste più",
26808
+ "auth.no-session-cookie": "Nessun cookie di sessione",
26809
+ "auth.invalid-session-cookie": "Cookie di sessione non valido",
26810
+ "auth.handoff-code-invalid": "Codice di passaggio non valido o scaduto",
26811
+ "auth.share-never-expiring-extend": "Un token di condivisione senza scadenza non può essere prorogato",
26812
+ "auth.share-owner-only-extend": "Solo il proprietario del token o un amministratore può prorogare un token di condivisione",
26813
+ "auth.share-owner-only-revoke": "Solo il proprietario del token o un amministratore può revocare un token di condivisione",
26814
+ "auth.share-token-not-found": "Token di condivisione non trovato: {id}",
26815
+ "auth.password-incorrect": "La password non è corretta",
26816
+ "auth.session-required": "Serve una sessione utente con accesso effettuato",
26817
+ "auth.admin-required": "Serve un amministratore",
26818
+ "auth.session-ended": "Sessione terminata — accedi di nuovo",
26819
+ "auth.access-denied": "Accesso negato",
26820
+ "auth.totp-confirm-failed": "Conferma TOTP non riuscita — il codice non corrisponde",
26821
+ "device.certificates-unavailable": "I certificati dei dispositivi non sono disponibili",
26822
+ "device.not-found": "Dispositivo {id} non trovato",
26823
+ "device.credentials-unavailable": "Le credenziali del dispositivo non sono disponibili",
26824
+ "device.credential-not-found": "Credenziale del dispositivo non trovata: {id}",
26825
+ "storage.no-provider": "Nessun provider di archiviazione configurato",
26826
+ "recording.export-unknown": "Esportazione \"{id}\" sconosciuta",
26827
+ "recording.export-invalid-range": "Intervallo di tempo non valido {fromMs}..{toMs}",
26828
+ "recording.export-no-profiles": "L'esportazione richiede almeno un profilo di flusso",
26829
+ "recording.export-not-ready": "L'esportazione \"{id}\" non è pronta ({state})",
26830
+ "recording.export-expired": "L'esportazione \"{id}\" è scaduta",
26831
+ "recording.export-no-file": "L'esportazione \"{id}\" non ha alcun file su disco",
26832
+ "recording.clip-render-unavailable": "La creazione delle clip non è disponibile su questo nodo",
26833
+ "reolink.hub-host-missing": "Hub Reolink: host non configurato",
26834
+ "reolink.hub-password-missing": "Hub Reolink: password non configurata",
26835
+ "reolink.email-push-hub-attached": "Email push non è disponibile per le telecamere collegate a un hub",
26836
+ "reolink.email-push-not-wired": "Il server Email Push non è collegato — riavvia l'addon Reolink",
26837
+ "reolink.webhook-not-wired": "Il server webhook HaCfg non è collegato — riavvia l'addon Reolink",
26838
+ "reolink.webhook-unsupported": "Il firmware della telecamera non supporta il webhook HaCfg Baichuan (cmd 806)",
26839
+ "reolink.preset-invalid": "presetId non valido: {presetId}",
26840
+ "reolink.home-preset-not-baichuan": "Il preset home configurato non è un id Baichuan: {presetId}",
26841
+ "reolink.day-night-schedule-unsupported": "Le telecamere Reolink non supportano una modalità giorno/notte programmata",
26842
+ "reolink.clip-device-not-reolink": "aggiornamento clip: il dispositivo {deviceId} non è una telecamera Reolink qui",
26843
+ "notifiers.gotify-server-url-required": "gotify: serverUrl è obbligatorio",
26844
+ "notifiers.gotify-app-token-required": "gotify: appToken è obbligatorio",
26845
+ "notifiers.email-to-required": "email: manca la configurazione obbligatoria 'to'",
26846
+ "hikvision.camera-name-required": "Il nome della telecamera è obbligatorio",
26847
+ "hikvision.camera-ip-required": "L'IP della telecamera è obbligatorio",
26848
+ "hikvision.password-required": "La password è obbligatoria",
26849
+ "hikvision.home-preset-missing": "Nessun preset home configurato per questa telecamera — impostane uno nelle impostazioni PTZ",
26850
+ "amcrest.camera-name-required": "Il nome della telecamera è obbligatorio",
26851
+ "amcrest.camera-ip-required": "L'IP della telecamera è obbligatorio",
26852
+ "amcrest.password-required": "La password è obbligatoria",
26853
+ "amcrest.home-preset-missing": "Nessun preset home configurato per questa telecamera — impostane uno nelle impostazioni PTZ",
26854
+ "wyze.camera-name-required": "Il nome della telecamera è obbligatorio",
26855
+ "wyze.camera-mac-required": "Wyze: impossibile salvare una telecamera senza indirizzo MAC",
26856
+ "dreame.manual-create-refused": "I dispositivi Dreame si acquisiscono dal cloud, non si creano a mano",
26857
+ "rtsp.camera-name-required": "Il nome della telecamera è obbligatorio",
26858
+ "rtsp.stream-required": "È richiesto almeno un URL di flusso RTSP",
26859
+ "rtsp.too-many-streams": "Sono supportati al massimo 3 URL di flusso RTSP",
26860
+ "gree.name-required": "Il nome del condizionatore è obbligatorio",
26861
+ "gree.ip-required": "L'indirizzo IP del condizionatore è obbligatorio",
26862
+ "ecowitt.name-required": "Il nome del gateway è obbligatorio",
26863
+ "ecowitt.host-required": "L'host del gateway è obbligatorio per la lettura locale",
26864
+ "unifi.name-required": "Il nome del controller è obbligatorio",
26865
+ "unifi.host-required": "L'host del controller è obbligatorio",
26866
+ "vesync.name-required": "Il nome dell'account è obbligatorio",
26867
+ "vesync.email-required": "L'email dell'account è obbligatoria",
26868
+ "unraid.name-required": "Il nome del server è obbligatorio",
26869
+ "unraid.host-required": "L'host del server è obbligatorio",
26870
+ "velux.name-required": "Il nome del gateway è obbligatorio",
26871
+ "velux.host-required": "L'host del gateway è obbligatorio",
26872
+ "cloudflare.custom-not-configured": "Tunnel personalizzato non configurato — avvia «Attiva» dalle impostazioni",
26873
+ "cloudflare.custom-needs-settings": "Il tunnel personalizzato richiede: {missing}. Compila prima le impostazioni qui sopra.",
26874
+ "cloudflare.zone-token-missing": "listZones: nessun token API Cloudflare impostato",
26875
+ "cloudflare.zone-not-visible": "La zona selezionata {zoneId} non è visibile a questo token",
26876
+ "google.from-address-required": "Imposta l'indirizzo del mittente sul broker Google (oppure collega un account).",
26877
+ "google.client-credentials-required": "Configura ID client e segreto del client prima di aggiornare il token Google",
26878
+ "globalSettings.s_alerts.title": "Centro avvisi",
26879
+ "globalSettings.s_alerts.description": "Configura l'archiviazione e la conservazione degli avvisi.",
26880
+ "globalSettings.s_alerts.maxAlerts.label": "Numero massimo di avvisi memorizzati",
26881
+ "globalSettings.s_alerts.maxAlerts.description": "Quando si supera questo limite vengono eliminati gli avvisi letti più vecchi.",
26882
+ "globalSettings.s_alerts.retentionDays.label": "Conservazione degli avvisi (giorni)",
26883
+ "globalSettings.s_alerts.retentionDays.description": "Gli avvisi più vecchi di questo valore vengono rimossi automaticamente.",
26884
+ "globalSettings.s_camera-grids.title": "Griglie di telecamere",
26885
+ "globalSettings.s_camera-grids.description": "Una griglia è una telecamera composita: più telecamere unite in un'unica immagine, registrata e riprodotta come qualsiasi altra telecamera. Creane una qui con un nome; apri la sua telecamera per disporne i riquadri. Il rilevamento oggetti è DISATTIVATO su una nuova griglia, perché le telecamere che la compongono sono già analizzate.",
26886
+ "globalSettings.s_camera-grids.cameraGrids.label": "Griglie",
26887
+ "globalSettings.s_camera-grids.cameraGrids.name.label": "Nome",
26888
+ "globalSettings.s_camera-grids.cameraGrids.enabled.label": "Attiva",
26889
+ "globalSettings.s_camera-grids.cameraGrids.enabled.description": "Una griglia disattivata ritira la sua telecamera.",
26890
+ "gridDevice.s_camera-grid-layout.title": "Disposizione della griglia",
26891
+ "gridDevice.s_camera-grid-layout._gridLayout.label": "",
26892
+ "globalSettings.s_console-logging.title": "Log su console",
26893
+ "globalSettings.s_console-logging.description": "Livello minimo di log da emettere su stdout/stderr. Indipendente dalla destinazione su file ruotati (Winston).",
26894
+ "globalSettings.s_console-logging.level.label": "Livello di log",
26895
+ "globalSettings.s_console-logging.level.o_debug.label": "Debug",
26896
+ "globalSettings.s_console-logging.level.o_info.label": "Info",
26897
+ "globalSettings.s_console-logging.level.o_warn.label": "Avviso",
26898
+ "globalSettings.s_console-logging.level.o_error.label": "Errore",
26899
+ "dayNightConfig.dayNight_mode.label": "Modalità",
26900
+ "dayNightConfig.dayNight_sensitivity.label": "Sensibilità del filtro IR-cut",
26901
+ "dayNightConfig.dayNight_switchDelaySec.label": "Ritardo di commutazione",
26902
+ "section.s_day-night.title": "Giorno / Notte",
26903
+ "section.s_day-night.description": "Modalità di commutazione del filtro IR-cut e i parametri della fotocellula che la regolano.",
26904
+ "baseDeviceSection.s_driver-settings-unavailable.title": "Impostazioni del driver",
26905
+ "baseDeviceSection.s_driver-settings-unavailable.driver-settings-unavailable-notice.label": "Temporaneamente non disponibile",
26906
+ "imageSettingsConfig.imageSettings_brightness.label": "Luminosità",
26907
+ "imageSettingsConfig.imageSettings_contrast.label": "Contrasto",
26908
+ "imageSettingsConfig.imageSettings_saturation.label": "Saturazione",
26909
+ "imageSettingsConfig.imageSettings_sharpness.label": "Nitidezza",
26910
+ "imageSettingsConfig.imageSettings_mirror.label": "Specchio",
26911
+ "imageSettingsConfig.imageSettings_flip.label": "Capovolgi",
26912
+ "imageSettingsConfig.imageSettings_rotate.label": "Rotazione",
26913
+ "imageSettingsConfig.imageSettings_whiteBalance.label": "Bilanciamento del bianco",
26914
+ "imageSettingsConfig.imageSettings_warmth.label": "Calore",
26915
+ "imageSettingsConfig.imageSettings_exposureMode.label": "Modalità di esposizione",
26916
+ "imageSettingsConfig.imageSettings_backlightMode.label": "Compensazione del controluce",
26917
+ "section.s_image-settings.title": "Regolazione immagine",
26918
+ "section.s_image-settings.description": "Cursori dell'immagine, orientamento ed esposizione. Gli elenchi delle opzioni sono letti in tempo reale dalla telecamera: i campi che il firmware non espone sono nascosti.",
26919
+ "volumesField.id.label": "ID",
26920
+ "volumesField.label.label": "Nome",
26921
+ "volumesField.status.label": "Stato",
26922
+ "volumesField.capacity.label": "Capacità",
26923
+ "volumesField.free.label": "Libero",
26924
+ "tracksField.id.label": "Traccia",
26925
+ "tracksField.primary.label": "Principale",
26926
+ "tracksField.enabled.label": "Attiva",
26927
+ "tracksField.codec.label": "Codec",
26928
+ "tracksField.resolution.label": "Risoluzione",
26929
+ "storageSection.s_recording-onboard-storage.title": "Memoria della telecamera",
26930
+ "storageSection.s_recording-onboard-storage.description": "La scheda nella telecamera, come la descrive la telecamera stessa.",
26931
+ "recordingSection.s_recording-onboard-recording.title": "Registrazione sulla telecamera",
26932
+ "recordingSection.s_recording-onboard-recording.description": "Ciò che la telecamera registra sulla propria scheda. Questo configura la telecamera, non il registratore di CamStack.",
26933
+ "globalSettings.s_local-access.title": "HTTP sulla LAN",
26934
+ "globalSettings.s_local-access.description": "Le app native su questo Wi-Fi usano http:// e saltano il certificato privato. Il tunnel e questa interfaccia restano su HTTPS. Disattivalo quando un certificato pubblicamente attendibile copre il nome della LAN.",
26935
+ "globalSettings.s_local-access.httpEnabled.label": "Attiva HTTP sulla LAN",
26936
+ "globalSettings.s_local-access.httpPort.label": "Porta HTTP",
26937
+ "globalSettings.s_local-access.httpPort.description": "Listener dedicato. Non deve coincidere con la porta HTTPS (4443 per impostazione predefinita).",
26938
+ "globalSettings.s_local-access.mdnsAdvertise.label": "Annuncia questo hub sulla LAN (mDNS)",
26939
+ "globalSettings.s_local-access.mdnsAdvertise.description": "Permette a `camstack login` di trovare l'hub senza indirizzo. Annuncia solo l'indirizzo HTTPS, mai un segreto. Richiede il multicast UDP 5353 per raggiungere la LAN (rete host o IP dedicato del container).",
26940
+ "globalSettings.s_local-access.localHostname.label": "Nome host locale",
26941
+ "globalSettings.s_local-access.localHostname.description": "Annunciato al visualizzatore al posto dell'IP LAN grezzo e aggiunto al SAN del certificato. Richiede che questo nome si risolva sulla LAN (DNS del router, mDNS o file hosts). Lascia vuoto per continuare a usare l'IP.",
26942
+ "globalSettings.s_loki-logging.title": "Loki",
26943
+ "globalSettings.s_loki-logging.description": "Invia i log di questo nodo a un'istanza Grafana Loki. Indipendente dalle destinazioni su file ruotati e su console. Attivala o disattivala con il controllo Attiva/Disattiva di questa destinazione, lo stesso usato da tutte le altre.",
26944
+ "globalSettings.s_loki-logging.url.label": "URL di Loki",
26945
+ "globalSettings.s_loki-logging.url.description": "URL base, ad es. http://loki:3100: il percorso /loki/api/v1/push viene aggiunto.",
26946
+ "globalSettings.s_loki-logging.level.label": "Livello minimo",
26947
+ "globalSettings.s_loki-logging.level.o_debug.label": "Debug",
26948
+ "globalSettings.s_loki-logging.level.o_info.label": "Info",
26949
+ "globalSettings.s_loki-logging.level.o_warn.label": "Avviso",
26950
+ "globalSettings.s_loki-logging.level.o_error.label": "Errore",
26951
+ "globalSettings.s_loki-logging.job.label": "Etichetta job",
26952
+ "globalSettings.s_loki-logging.job.description": "L'etichetta `job` di Loki. Tienila fissa: le etichette sono indicizzate.",
26953
+ "globalSettings.s_loki-logging.extraLabels.label": "Etichette aggiuntive",
26954
+ "globalSettings.s_loki-logging.extraLabels.description": "`chiave=valore,chiave2=valore2` statici. Solo a bassa cardinalità: i valori per singola voce vanno nel corpo della riga, e un'etichetta ad alta cardinalità manderà in crisi Loki.",
26955
+ "globalSettings.s_loki-logging.tenantId.label": "ID tenant",
26956
+ "globalSettings.s_loki-logging.tenantId.description": "Inviato come X-Scope-OrgID. Richiesto da Grafana Cloud e da Loki multi-tenant.",
26957
+ "globalSettings.s_loki-logging.username.label": "Nome utente",
26958
+ "globalSettings.s_loki-logging.username.description": "Autenticazione HTTP basic. Lascia vuoto se non serve.",
26959
+ "globalSettings.s_loki-logging.password.label": "Password",
26960
+ "globalSettings.s_loki-logging.batchIntervalMs.label": "Intervallo di invio",
26961
+ "globalSettings.s_loki-logging.batchIntervalMs.description": "Ogni quanto viene inviato un lotto parziale.",
26962
+ "globalSettings.s_loki-logging.batchSize.label": "Dimensione del lotto",
26963
+ "globalSettings.s_loki-logging.batchSize.description": "Invia in anticipo quando sono in coda così tante voci.",
26964
+ "globalSettings.s_loki-logging.timeoutMs.label": "Timeout della richiesta",
26965
+ "globalSettings.s_native-metrics-settings.title": "Metriche di sistema",
26966
+ "globalSettings.s_native-metrics-settings.samplingIntervalMs.label": "Intervallo di campionamento",
26967
+ "globalSettings.s_native-metrics-settings.samplingIntervalMs.description": "Ogni quanto raccogliere le metriche di sistema",
26968
+ "globalSettings.s_native-metrics-load-series.title": "Storico del carico",
26969
+ "globalSettings.s_native-metrics-load-series.loadSeriesCadenceSec.label": "Cadenza di campionamento",
26970
+ "globalSettings.s_native-metrics-load-series.loadSeriesCadenceSec.description": "Ogni quanto ogni nodo riporta il proprio albero di processi. FISSO: un campione viene emesso a ogni intervallo, che qualcosa sia cambiato o no, quindi un buco nel grafico significa una sola cosa: nessuno ha riportato. Fuori dall'intervallo 5-60 s il valore viene rifiutato.",
26971
+ "globalSettings.s_native-metrics-load-series.loadSeriesRetentionHours.label": "Conservazione",
26972
+ "globalSettings.s_native-metrics-load-series.loadSeriesRetentionHours.description": "Per quanto tempo lo storico del carico viene conservato su disco (il database dell'hub, sulla cache NVMe, mai sul disco delle registrazioni). Questa è l'INTENZIONE; il limite di righe qui sotto è la garanzia.",
26973
+ "globalSettings.s_native-metrics-load-series.load-series-cost.label": "Costo di questa configurazione",
26974
+ "globalSettings.s_native-metrics-load-series.load-series-cap.label": "Limite rigido di righe",
26975
+ "globalSettings.s_snapshot-cache.title": "Cache degli snapshot",
26976
+ "globalSettings.s_snapshot-cache.description": "Ripiego obsoleto quando la cattura dal vivo fallisce. La freschezza per dispositivo si configura in Dispositivo → Snapshot → Età massima della cache.",
26977
+ "globalSettings.s_snapshot-cache.staleTtlMs.label": "TTL del ripiego obsoleto (ms)",
26978
+ "globalSettings.s_snapshot-cache.staleTtlMs.description": "Se la cattura dal vivo fallisce, viene comunque restituito uno snapshot in cache più recente di questo valore.",
26979
+ "deviceSettingsContribution.s_snapshot-preferences.title": "Snapshot",
26980
+ "deviceSettingsContribution.s_snapshot-preferences.snapshotStreamId.label": "Flusso preferito",
26981
+ "deviceSettingsContribution.s_snapshot-preferences.snapshotStreamId.description": "Flusso usato per acquisire uno snapshot",
26982
+ "deviceSettingsContribution.s_snapshot-preferences.snapshotMaxAgeS.label": "Età massima della cache (s)",
26983
+ "deviceSettingsContribution.s_snapshot-preferences.snapshotDebug.label": "Log di debug",
26984
+ "deviceSettingsContribution.s_snapshot-preferences.snapshotDebug.description": "Registra la scelta del flusso e i tempi per questo dispositivo.",
26985
+ "providerInfo.s_filesystem-storage.title": "File system",
26986
+ "providerInfo.s_filesystem-storage.basePath.label": "Percorso base",
26987
+ "providerInfo.s_filesystem-storage.basePath.description": "Percorso assoluto della cartella dove vengono salvati i file.",
26988
+ "global.s_system-config-server.description": "Il nome di questo server e le sue impostazioni di connessione (sola lettura, caricate da config.yaml all'avvio).",
26989
+ "global.s_system-config-server.server-restart-note.label": "Riavvio necessario",
26990
+ "global.s_system-config-server.port.label": "Porta",
26991
+ "global.s_system-config-server.port.description": "Porta di ascolto",
26992
+ "global.s_system-config-server.host.label": "Host",
26993
+ "global.s_system-config-server.host.description": "Indirizzo di bind",
26994
+ "global.s_system-config-server.dataPath.label": "Percorso dei dati",
26995
+ "global.s_system-config-server.dataPath.description": "Cartella radice dei dati",
26996
+ "global.s_system-config-auth.description": "Impostazioni di token e sessione.",
26997
+ "global.s_system-config-auth.tokenExpiry.label": "Durata della sessione",
26998
+ "global.s_system-config-auth.tokenExpiry.description": "Per quanto tempo resta valido un accesso senza essere usato, come stringa di durata (ad es. 7d, 30d). Ogni rinnovo lo fa ripartire, quindi un dispositivo in uso resta connesso; uno lasciato inutilizzato per questo tempo deve accedere di nuovo. Un numero senza unità viene rifiutato: sarebbe letto come millisecondi. Si applica dal prossimo accesso o rinnovo.",
26999
+ "global.s_system-config-auth.accessTokenExpiry.label": "Durata del token di accesso",
27000
+ "global.s_system-config-auth.accessTokenExpiry.description": "Per quanto vive un token di accesso prima che l'app lo sostituisca in silenzio con uno nuovo (ad es. 2h; tra 5m e 24h, mai più della sessione). Più breve significa che un token copiato è utile per meno tempo. Le app precedenti ai token di rinnovo ricevono invece un unico token per tutta la sessione.",
27001
+ "global.s_system-config-auth.trustedProxies.label": "Reverse proxy fidati",
27002
+ "global.s_system-config-auth.trustedProxies.description": "Indirizzi o intervalli CIDR (ad es. 192.168.1.2 o 10.0.0.0/24) dei reverse proxy davanti all'hub. Solo una richiesta il cui mittente diretto è uno di questi, o questo stesso host come con il tunnel Cloudflare, ha X-Forwarded-For / CF-Connecting-IP letto come indirizzo reale del client per i limiti di frequenza. Lascia vuoto a meno che un proxy su un altro host inoltri verso l'hub.",
27003
+ "global.s_system-config-auth.trustedNetworksWarning.label": "Salto dell'autenticazione a due fattori",
27004
+ "global.s_system-config-auth.trustedNetworks.label": "Reti fidate (salta il secondo fattore)",
27005
+ "global.s_system-config-auth.trustedNetworks.description": "Indirizzi o intervalli CIDR, ad es. 192.168.1.0/24. Mantienili il più stretti possibile: una singola VLAN fidata, non tutta la LAN.",
27006
+ "globalSettings.s_winston-logging.title": "Log",
27007
+ "globalSettings.s_winston-logging.description": "Dettaglio globale dei log e conservazione dei file di log ruotati su questo nodo.",
27008
+ "globalSettings.s_winston-logging.level.label": "Livello di log",
27009
+ "globalSettings.s_winston-logging.level.o_debug.label": "Debug",
27010
+ "globalSettings.s_winston-logging.level.o_info.label": "Info",
27011
+ "globalSettings.s_winston-logging.level.o_warn.label": "Avviso",
27012
+ "globalSettings.s_winston-logging.level.o_error.label": "Errore",
27013
+ "globalSettings.s_winston-logging.retentionDays.label": "Conservazione (giorni)",
27014
+ "globalSettings.s_winston-logging.retentionDays.description": "Numero di giorni per cui conservare i file di log ruotati prima dell'eliminazione",
27015
+ "system.python-required": "Serve Python 3.10 o successivo, ma non è stato trovato su questo sistema",
27016
+ "system.device-enrollment-busy": "Troppe registrazioni di dispositivi in attesa — riprova tra poco",
27017
+ "system.admin-token-expiry-too-long": "Un token amministratore deve scadere entro 90 giorni",
27018
+ "system.admin-token-name-required": "Un token amministratore richiede un nome",
27019
+ "system.user-exists": "Esiste già un utente con nome utente \"{username}\"",
27020
+ "system.user-not-found": "Utente con ID \"{id}\" non trovato",
27021
+ "system.addon-no-discovery": "L'addon \"{addonId}\" non supporta il rilevamento dei dispositivi",
27022
+ "system.addon-no-adoption": "L'addon \"{addonId}\" non supporta l'acquisizione dei dispositivi",
27023
+ "system.addon-no-manual-create": "L'addon \"{addonId}\" non supporta la creazione manuale di dispositivi",
27024
+ "system.location-name-required": "Il nome del luogo non può essere vuoto",
27025
+ "system.location-required": "Il luogo non può essere vuoto",
27026
+ "system.site-zone-name-required": "Il nome della zona non può essere vuoto",
27027
+ "server.handoff-busy": "Troppi codici di passaggio in attesa — riprova tra poco",
27028
+ "server.app-confirmations-busy": "Troppe conferme di app in attesa",
27029
+ "server.step-up-busy": "Troppe verifiche di sicurezza in attesa",
27030
+ "server.login-unavailable": "Accesso non disponibile — la capacità `user-management` non è registrata",
27031
+ "server.share-token-expired": "Token di condivisione scaduto: {id}",
27032
+ "server.package-not-allowed": "Il pacchetto \"{name}\" non è un pacchetto @camstack/* consentito",
27033
+ "server.package-protected": "Impossibile disinstallare il pacchetto protetto \"{name}\"",
27034
+ "server.package-required": "Il pacchetto {packageName} è necessario e non può essere disinstallato"
27035
+ };
27036
+ //#endregion
27037
+ //#region src/i18n/catalog-registry.ts
27038
+ /**
27039
+ * The hub's translation catalogs (D863).
27040
+ *
27041
+ * Core namespace `server` ships inside this package (`en.json` / `it.json`:
27042
+ * user-facing error texts + core schema labels). Every installed addon may add
27043
+ * `i18n/<lang>.json` in its package directory; its namespace is its addon id.
27044
+ * Every file is validated with zod; a broken file is logged and ignored, never
27045
+ * fatal - the English text that travels beside every key is the floor.
27046
+ */
27047
+ /** The core namespace: user-facing error texts and core schema labels. */
27048
+ var SERVER_NAMESPACE = "server";
27049
+ /** `@camstack/addon-provider-reolink` -> `provider-reolink`; `@camstack/system` -> `system`. */
27050
+ function catalogNamespaceOf(packageName) {
27051
+ return packageName.replace(/^@camstack\//, "").replace(/^addon-/, "");
27052
+ }
27053
+ var CatalogRegistry = class {
27054
+ warn;
27055
+ namespaces = /* @__PURE__ */ new Map();
27056
+ constructor(warn = () => void 0) {
27057
+ this.warn = warn;
27058
+ }
27059
+ /** Validates `raw` and installs it; returns false (after warning) when it is not a flat string map. */
27060
+ set(ns, lang, raw, origin) {
27061
+ const parsed = CatalogFileSchema.safeParse(raw);
27062
+ if (!parsed.success) {
27063
+ this.warn(`i18n catalog ignored (${origin}): ${parsed.error.issues[0]?.message ?? "invalid"}`);
27064
+ return false;
27065
+ }
27066
+ const langs = this.namespaces.get(ns) ?? /* @__PURE__ */ new Map();
27067
+ langs.set(lang, parsed.data);
27068
+ this.namespaces.set(ns, langs);
27069
+ return true;
27070
+ }
27071
+ /** Loads `<packageDir>/i18n/<lang>.json` for every language that has a file. */
27072
+ loadAddonDir(ns, packageDir) {
27073
+ for (const lang of CATALOG_LANGS) {
27074
+ const file = path$1.join(packageDir, "i18n", `${lang}.json`);
27075
+ let text;
27076
+ try {
27077
+ text = fs.readFileSync(file, "utf8");
27078
+ } catch {
27079
+ continue;
27080
+ }
27081
+ try {
27082
+ this.set(ns, lang, JSON.parse(text), file);
27083
+ } catch (err) {
27084
+ this.warn(`i18n catalog ignored (${file}): ${err instanceof Error ? err.message : "bad JSON"}`);
27085
+ }
27086
+ }
27087
+ }
27088
+ /** Drops a namespace (addon uninstalled or redeployed before a reload). */
27089
+ clear(ns) {
27090
+ this.namespaces.delete(ns);
27091
+ }
27092
+ /** The text for `ns:key` in `lang`, or `undefined`. Never falls back across languages. */
27093
+ lookup(lang, ns, key) {
27094
+ return this.namespaces.get(ns)?.get(lang)?.[key];
27095
+ }
27096
+ /**
27097
+ * `t(ns, key, params, fallbackEnglish)` - the translation in `lang`, else
27098
+ * the English fallback (also interpolated). English is never looked up: the
27099
+ * fallback IS the English text.
27100
+ */
27101
+ t(lang, ns, key, params, fallbackEnglish) {
27102
+ return interpolate((lang === "en" ? void 0 : this.lookup(lang, ns, key)) ?? fallbackEnglish, params);
27103
+ }
27104
+ /** A lookup bound to one language, for `localizeConfigTree`. English never substitutes. */
27105
+ lookupFor(lang) {
27106
+ return (ns, key) => lang === "en" ? void 0 : this.lookup(lang, ns, key);
27107
+ }
27108
+ /** `t` for a `"ns:key"` reference. */
27109
+ tRef(lang, ref, params, fallbackEnglish) {
27110
+ const parts = splitTranslationRef(ref);
27111
+ return parts === null ? interpolate(fallbackEnglish, params) : this.t(lang, parts.ns, parts.key, params, fallbackEnglish);
27112
+ }
27113
+ };
27114
+ var shared = null;
27115
+ /** A fresh registry holding the core `server` namespace (specs build their own). */
27116
+ function createCoreCatalogRegistry(warn) {
27117
+ const registry = new CatalogRegistry(warn);
27118
+ registry.set(SERVER_NAMESPACE, "en", en_default, "server/en.json");
27119
+ registry.set(SERVER_NAMESPACE, "it", it_default, "server/it.json");
27120
+ return registry;
27121
+ }
27122
+ /** The hub's one registry, core catalogs preloaded. */
27123
+ function getCatalogRegistry(warn) {
27124
+ if (shared === null) shared = createCoreCatalogRegistry(warn);
27125
+ return shared;
27126
+ }
27127
+ /** Spec hook: forget the shared registry. */
27128
+ function resetCatalogRegistryForTests() {
27129
+ shared = null;
27130
+ }
27131
+ //#endregion
27132
+ export { ADMIN_TOKEN_MAX_LIFETIME_MS, ADMIN_TOKEN_PREFIX, AGENT_CAP_FWD_ACTION, AGENT_CAP_FWD_SERVICE, AGENT_DASHBOARD_ORIGINS_FIELD, AGENT_HTTPS_NAMES_COLLECTION, AGENT_HTTPS_NAMES_COLUMNS, AGENT_READINESS_SERVICE_NAME, AGENT_UI_UNLOCK_TTL_MS, AGENT_UI_UNLOCK_TYP, AGENT_UI_UNLOCK_USE, AGENT_UI_UNLOCK_VERSION, ALL_CAPABILITY_DEFINITIONS, ARRAY_BUFFER_CENSUS_COOLDOWN_MS, ARRAY_BUFFER_CENSUS_SUSTAIN_MS, ARRAY_BUFFER_CENSUS_THRESHOLD_MB, ARRAY_BUFFER_RELEASE_MIN_DROP_RATIO, AddonApiFactory, AddonDepsManager, AddonEngineManager, AddonHealthMonitor, AddonInstaller, AddonLoader, AddonManifest, AddonRouteRegistry, AdminTokenManager, AgentHttpsInstallError, AgentHttpsNames, AgentMdnsAdvertiser, AgentMeshIdentityGate, AgentPairing, AlertCenterAddon, ApiKeyManager, AuthAuditLog, AuthManager, BackupDecryptError, BackupKeyFormatError, BackupKeyMismatchError, BackupKeyRequiredError, CAP_ACTION_OVERFLOW_LABEL, CAP_ACTION_UNLABELLED, CAP_METHOD_NOT_IMPLEMENTED, CA_COMMON_NAME, CA_VALIDITY_DAYS, CORE_CAP_SERVICE_NAME, CalendarsAddon, CapRouteError, CapRouteResolver, CapUsageRegistry, CapabilityHandle, CapabilityRegistry, CapabilityUnavailableError, CatalogRegistry, ComposerAddon, ConfigManager, ConfigStore, ConsoleDestination, ConsoleLoggingAddon, CoreBlocksAddon, CustomActionRegistry, DECISIVE_HEAP_SPACES, DEFAULT_DATA_PATH, DEFAULT_HUB_TLS_TCP_PORT, DEFAULT_LAN_HTTP_PORT, DEFAULT_LOG_LEVEL, DEVICE_CA_KEY_REF, DEVICE_SETTINGS_CONTRIBUTION_METHODS, DEVICE_STATUS_METHOD, DataPlaneRegistry, DeviceCaStore, DeviceCredentialManager, DeviceManagerAddon, DeviceRegistry, DeviceStore, EMPTY_CAP_ACTION_READING, EMPTY_SOCKET_DIRECTION, EMPTY_SOCKET_PLANE_BASELINE, EVENT_PLANE_TOP_N, EVENT_TOPIC_PREFIX, EngineManagerResolver, EventBus, FIRST_BOOT_ADMIN_PASSWORD, FIRST_BOOT_ADMIN_USERNAME, FeatureManager, FilesystemStorageAddon, FilesystemStorageProvider, FrameDecoder, FsStorageBackend, GET_STATUS_METHOD, HEALTH_MONITOR_GRACE_PERIOD_MS, HEALTH_MONITOR_RETRY_INTERVALS_MS, HEALTH_MONITOR_TICK_MS, HEAP_RECLAIM_MIN_INTERVAL_MS, HEAP_RECLAIM_STEADY_STATE_INTERVAL_MS, HEAP_RECLAIM_TRIGGER_MB, HEAP_SPACE_REPORT_MIN_MB, HEAP_WATCH_INTERVAL_MS, HEAP_WATCH_WARN_RATIO, HUB_CAP_FWD_ACTION, HUB_CAP_FWD_SERVICE, HUB_MAIN_HEAP_WATCH_LABEL, HUB_MAIN_RSS_BUDGET_MB, HUB_RSS_BUDGET_ENV, HubForwarderAddon, HubForwarderDestination, HubLogForwarder, HubNodeRegistry, HubPairing, INFRA_CAPABILITIES, IntegrationRegistry, JWT_SIGNING_KEY_REF, JobJournal, JwtSigningKeyUnavailableError, LEAF_RENEWAL_WINDOW_DAYS, LifecycleJobEngine, LifecycleStateMachine, LivenessMonitorAddon, LocalAuthAddon, LocalChildClient, LocalChildRegistry, LogManager, LogRingBuffer, LoggingGate, LoginSessionManager, LokiDestination, LokiLoggingAddon, MAX_CAP_ACTIONS_PER_PEER, MAX_LEAF_VALIDITY_DAYS, MESH_ACTION_FORBIDDEN_TYPE, MESH_CA_FIELD, MESH_CA_KEY_REF, MESH_CA_SETTINGS_KEY, MESH_NODE_CERTIFICATES_COLLECTION, MESH_NODE_CERTIFICATES_COLUMNS, MESH_NODE_UNAUTHENTICATED_TYPE, MESH_QUEUE_TOP_N, MESH_TLS_PORT_HELLO_FIELD, METHOD_ACCESS_MAP, MeshCaKeeper, MeshCertificateRegistry, MeshCrl, MeshIdentityGate, ModelDownloadService, NATIVE_PROVIDER_SERVICE_INFIX, NATIVE_SCAN_DEPTH, NativeMetricsAddon, NativeMetricsProvider, NetworkQualityTracker, NotificationService, OUTBOUND_QUEUE_COOLDOWN_MS, OUTBOUND_QUEUE_SUSTAIN_MS, OUTBOUND_QUEUE_THRESHOLD_BYTES, PAIRING_CODE_DIGITS, PAIRING_MAX_CODE_ATTEMPTS, PAIRING_MAX_SESSIONS, PAIRING_PATHS, PAIRING_PIN_DIGITS, PAIRING_PROTOCOL, PAIRING_TTL_MS, PARENT_ROUTED_PROVIDER_ADDON_ID, PREVIOUS_LEAF_GRACE_MS, PYTHON_VERSION, PairingHttpError, PeerAnsweredError, PipelineRunner, PipelineValidator, PythonEnvManager, QUARANTINE_DIRNAME, REFRESH_TOKEN_PREFIX, RENEWAL_ABANDONED, RESTART_MARKER_FILE, RSS_BUDGET_REANNOUNCE_MIN_MS, RSS_BUDGET_RELEASE_RATIO, RUNNER_HEAP_WATCH_INTERVAL_MS, RUNNER_RSS_BUDGET_ENV, RUNTIME_DEFAULTS, ReadinessRegistry, ReadinessTimeoutError, ReplEngine, RingBuffer, SERVER_AUTH_OID, SERVER_NAMESPACE, SOCKET_PLANE_TOP_N, SOCKET_QUEUE_TOP_N, STALL_REPORT_MS, STALL_TICK_MS, STORE_READABLE_BOOTSTRAP_KEYS, SYSTEM_SECRET_OWNER, ScopedLogger, ScopedTokenManager, SettingsReadUnavailableError, SocketChannel, SqliteSettingsAddon, SqliteSettingsBackend, StagingArea, StorageLocationManager, StorageManager, StorageOrchestratorAddon, StorageOrchestratorService, SystemBackupService, SystemConfigAddon, SystemEventBus, TRADITIONAL_NATIVE_PACKAGES, TlsTcpTransporter, ToastService, UDS_NO_ROUTE_PREFIX, UNCLAIMED, UPLOADED_CA_FILE, USER_MANAGEMENT_INTERNAL, UdsLocalTransportClient, UdsLocalTransportServer, UnlockTicketJtiStore, UserManager, WinstonDestination, WinstonLoggingAddon, ZERO_LOOP_DELAY, __resetCapUsageRegistryForTests, __resetLoggingGateForTests, acceptAgentSans, adaptBrokerToCluster, addonSettingsCapability, adoptModelRevisions, afterWorkerOnlineAnnounce, agentHttpsPaths, allFamiliesListenHost, answerClaimedGetStatus, applyCertificateToListener, applyLanHttp, attachUserManagementInternal, attributeStall, bindPendingLanHttp, bootstrapSchema, brokerCallForCap, brokerTransportLink, buildAgentAnnouncement, buildBinaryPath, buildCapRouters, buildHeapSample, buildLinkChain, buildNativeCapProxy, buildNodeManifest, buildNpmChildEnv, buildStorageLocationRegistry, buildTransporter, builderMountedCapNames, caFingerprint, caFingerprintCompact, callRegisterNodeWithRetry, callWithServiceDiscovery, canServeDataPlane, capActionLabel, capActionName, capActionSuffix, capBareAction, capServiceName, catalogNamespaceOf, certificateNames, classifyAddonDir, classifyCapRoute, clearHttpsListener, clearPendingRestart, clearPlatformKeychainKey, closeLanHttp, clusterEventTopic, collectAgentNames, collectCertIdentity, collectModelFiles, computePairingCommitment, computePairingSas, connectBrokerTransport, contentTypeFor, copyDirRecursive, copyExtraFileDirs, createAddonContext, createAddonDataPlaneFacility, createAddonPeerBytesFacility, createAddonService, createAgentEventScope, createAgentHttpsRequest, createAgentTransport, createArrayBufferCensusGate, createAuthenticatedFileServer, createBroker, createBrokerDeviceManagerApi, createCapActionCensus, createCiaoPublisher, createCidrMatcher, createCoreCapService, createCoreCatalogRegistry, createDeferredHeapWatchSink, createDoorSettingsView, createEventPlaneMeter, createEventPlaneReader, createFileDataPlaneHandler, createHubCapForwardService, createHubService, createInspectorArrayBufferCensus, createKernelHwAccel, createKernelInferenceEngine, createLocalTransport, createLoopDelayMeter, createMeshAccessMiddleware, createMeshCsrPem, createMeshQueueReader, createOutboundQueueGate, createParentUnownedCallHandler, createProcessService, createReadinessService, createReadinessServiceForRegistry, createScopedProcessManager, createSocketDirectionCounters, createSocketPlaneMeter, createSocketPlaneReader, createStreamProbeBrokerService, createUdsAddonContext, createUdsEventBridge, createUdsEventBus, createUdsLogger, createUdsLoggerWithControl, createV8Reclaimer, currentBrokerTransporter, deleteModelFromDisk, deriveAgentListenPort, describeCsr, describeHttpsLeaf, describeMeshLeaf, describeProviderKindDrift, describeRss, detectWorkspacePackagesDir, deviceCapResolverLink, deviceOfGetStatus, diffCapActionCensus, diffEventPlane, diffSocketPlane, disconnectBrokerTransport, downloadBinary, downloadFile, downloadModel, dropProcessPeer, emitDownForOwnedCaps, emitHeapDiagnosticReport, emitProcessNodeRegistered, encodeFrame, ensureAddonNativePrebuilds, ensureBinary, ensureDir, ensureFfmpeg, ensureLibraryBuilt, ensureModel, ensureNativePrebuilds, ensurePython, ensureTlsCert, evaluateExistingCert, expandCapMethods, exportMeshPrivateKeyPem, fetchJson, findInPath, formatArrayBufferCensus, formatEventPlane, formatHeapSpaces, formatLogLine, formatMeshQueue, formatOutboundQueueVerdict, formatSocketPlane, generateBackupKeyPair, generateDeviceCa, generateMeshCa, generateMeshKeyPair, getBrokerEventBus, getBrokerTlsTransporter, getCapUsageRegistry, getCatalogRegistry, getFfmpegDownloadUrl, getLoggingGate, getModelFilePath, getMoleculerEventStats, getOrInitReadinessRegistry, getOrInitReadinessRegistryForClient, getPidStats, getPlatformInfo, getPlatformKeychainKey, getProcessAgentHttpsNames, getProcessJwtSigningKeyState, getProcessMeshCaState, getProcessMeshCertificateRegistry, getProcessMeshTlsListenerState, getProcessNodeMeshTransport, getProcessPeerLeaf, getPythonDownloadUrl, getRestartMarkerPath, getSinglePidStats, getUserManagementInternal, getWorkerDeviceRegistry, hasDotNode, heapSpaceField, hostNodeIdOf, hubHostFromMeshAddress, hubMainRssBudget, installAgentHttps, installBrokerTransporter, installManifestNativeDeps, installManifestPythonDeps, installManifestSystemDeps, installPackageFromNpm, installPythonPackages, installPythonRequirements, ipcParentLink, isAddonDeploySource, isAllowedAgentDashboardReturnTo, isArrayBufferCensusReport, isArrayOutputSchema, isCollectionArrayMethod, isContainerBridgeAddress, isCredentialKeyName, isInfraCapability, isInstalledTransporter, isLocalOnlyHostname, isModelDownloaded, isPeerEventPacket, isPrivateAddress, isProcessVerifiedMeshPeer, isRemoteForbiddenAction, isRemoteForbiddenOnAgent, isSettingsReadUnavailable, isSourceNewer, isValidAgentNodeId, isolatedBuiltinPhase, issueAgentHttpsLeaf, issueDeviceLeaf, issueMeshLeafForNode, issueMeshLeafFromCsr, keyFingerprintShort, leafFingerprintOf, loadAgentHttps, loadDeviceCa, loadMeshCa, loadTlsCert, localEndpointPath, localProviderLink, localSupportedPythonRuntimes, mapSignalsToInferenceHardware, meshErrorType, mintAgentUiUnlockTicket, mountNativeCapService, nextRssBudgetState, normalizeIp, onProcessNodeRegistered, onSessionsRevoked, openMeshTlsWhenRevocationsLoaded, overlayGetStatus, parseAgentDashboardOrigins, parseCapAction, parseCidrList, parseRangeHeader, parseRssBudgetMb, parseTokenExpiry, parseTokenizedUrl, partitionIsolatedBuiltinIds, pemDigest, pinnedHttpsCaFingerprint, prepareBootTls, prepareRestoreArchive, probePlatform, processJwtSigningKey, processMeshCrl, proxyToUpstream, quarantineAddonResidue, readBackupEncryptionHeader, readCidrSetting, readExtraSans, readHeapSpaces, readLanHttpState, readPendingRestart, readSocketQueues, readTlsAccessStatus, readTlsMode, readinessKey, reclaimIntervalMs, recordSocketFrame, redactLogEntry, redactLogMeta, redactLogText, regenerateCertificate, registerEventBusService, registerHttpsListener, registerLanHttpHandler, reissueTlsLeaf, reloadHttpsListener, renewMeshCertificate, requireProcessMeshCa, resetCatalogRegistryForTests, resolveFilePath, resolveFormatRevision, resolveHwAccel, resolveNpmInvocation, revertToGeneratedCertificate, revisionWeightUrl, revokeMeshCertificate, runHubAddonBoot, runNpm, sampleSocketDirection, scheduleSelfRestart, scopeKey, scopesAllowAddon, scopesAllowDeviceCap, selectAddonResidue, selectReportedSpaces, serializeTypedArrays, servedHttpsLeafFingerprint, setHubConnected, setNodeEventInterest, setPlatformKeychainKey, setProcessAgentHttpsNames, setProcessMeshCertificateRegistry, setProcessMeshPeerTransportLookup, setProcessMeshTlsEnabler, setProcessMeshTlsListenerState, setWrapperActive, shouldReclaim, signPairingProof, signalAllRunnerGroups, socketDirectionBytes, socketDirectionMessages, splitPemCertificates, stampCallerAddonId, startEventLoopStallMonitor, startHeapWatch, startRunnerHeapWatch, staticJwtSigningKey, storeMayAnswer, storeUploadedCertificate, strandedMb, stripCamstackDeps, stripForgedIdentity, stripForwardedCaller, subscribePassthrough, systemHostFacts, udsChildLogToWorkerEntry, validateProviderRegistrations, validateUploadedTls, verifyAgentUiUnlockTicket, verifyDeviceLeaf, verifyDeviceSignature, verifyPairingProof, waitUntilReady, writeExtraSans, writePendingRestart, writeTlsMode };