@camstack/system 1.2.375 → 1.2.376

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 (74) hide show
  1. package/dist/addon-runner.js +1 -1
  2. package/dist/addon-runner.mjs +1 -1
  3. package/dist/addon-utils.js +1 -1
  4. package/dist/addon-utils.mjs +1 -1
  5. package/dist/auth/external-identity-manager.d.ts +43 -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 +1 -1
  11. package/dist/builtins/alerts/alerts.addon.mjs +1 -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 +1 -1
  15. package/dist/builtins/backup-orchestrator/backup-orchestrator.addon.mjs +1 -1
  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 +1 -1
  19. package/dist/builtins/camera-grid/index.mjs +1 -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 +1 -1
  23. package/dist/builtins/console-logging/index.mjs +1 -1
  24. package/dist/builtins/core-blocks/core-blocks.addon.js +2 -2
  25. package/dist/builtins/core-blocks/core-blocks.addon.mjs +2 -2
  26. package/dist/builtins/device-manager/device-manager.addon.d.ts +2 -0
  27. package/dist/builtins/device-manager/device-manager.addon.js +36 -2
  28. package/dist/builtins/device-manager/device-manager.addon.mjs +36 -2
  29. package/dist/builtins/device-manager/device-projection.d.ts +2 -1
  30. package/dist/builtins/device-manager/device-provider-context.d.ts +3 -0
  31. package/dist/builtins/device-manager/secret-config-paths.d.ts +24 -0
  32. package/dist/builtins/hub-forwarder/index.js +1 -1
  33. package/dist/builtins/hub-forwarder/index.mjs +1 -1
  34. package/dist/builtins/liveness-monitor/liveness-monitor.addon.js +1 -1
  35. package/dist/builtins/liveness-monitor/liveness-monitor.addon.mjs +1 -1
  36. package/dist/builtins/local-auth/auth-schema.d.ts +14 -0
  37. package/dist/builtins/local-auth/local-auth.addon.d.ts +1 -0
  38. package/dist/builtins/local-auth/local-auth.addon.js +1343 -1131
  39. package/dist/builtins/local-auth/local-auth.addon.mjs +1343 -1131
  40. package/dist/builtins/local-network/local-network.addon.js +1 -1
  41. package/dist/builtins/local-network/local-network.addon.mjs +1 -1
  42. package/dist/builtins/loki-logging/index.js +1 -1
  43. package/dist/builtins/loki-logging/index.mjs +1 -1
  44. package/dist/builtins/native-metrics/native-metrics.addon.js +1 -1
  45. package/dist/builtins/native-metrics/native-metrics.addon.mjs +1 -1
  46. package/dist/builtins/platform-probe/index.js +1 -1
  47. package/dist/builtins/platform-probe/index.mjs +1 -1
  48. package/dist/builtins/remote-access-orchestrator/remote-access-orchestrator.addon.js +1 -1
  49. package/dist/builtins/remote-access-orchestrator/remote-access-orchestrator.addon.mjs +1 -1
  50. package/dist/builtins/snapshot/index.js +1 -1
  51. package/dist/builtins/snapshot/index.mjs +1 -1
  52. package/dist/builtins/sqlite-storage/filesystem-storage.addon.js +1 -1
  53. package/dist/builtins/sqlite-storage/filesystem-storage.addon.mjs +1 -1
  54. package/dist/builtins/sqlite-storage/sqlite-settings.addon.js +0 -0
  55. package/dist/builtins/sqlite-storage/sqlite-settings.addon.mjs +0 -0
  56. package/dist/builtins/storage-orchestrator/storage-orchestrator.addon.js +1 -1
  57. package/dist/builtins/storage-orchestrator/storage-orchestrator.addon.mjs +1 -1
  58. package/dist/builtins/system-config/system-config.addon.js +1 -1
  59. package/dist/builtins/system-config/system-config.addon.mjs +1 -1
  60. package/dist/builtins/winston-logging/index.js +1 -1
  61. package/dist/builtins/winston-logging/index.mjs +1 -1
  62. package/dist/{child-cap-dispatch-B9kziY4L.mjs → child-cap-dispatch-8qMgog1O.mjs} +16 -4
  63. package/dist/{child-cap-dispatch-Bfdgkbq3.js → child-cap-dispatch-BWtaSmWf.js} +15 -3
  64. package/dist/{composition-sources-DYlXX2qW.js → composition-sources-DW7CgMsg.js} +1 -1
  65. package/dist/{composition-sources-BfZgiTYD.mjs → composition-sources-zxQPPtP_.mjs} +1 -1
  66. package/dist/{dist-CNbnikIh.js → dist-BcUWQGr9.js} +268 -6
  67. package/dist/{dist-ZdSg09GJ.mjs → dist-D732NygW.mjs} +263 -7
  68. package/dist/{event-loop-stall-monitor-DKcYBHdH.mjs → event-loop-stall-monitor-8W4yWNVW.mjs} +1 -1
  69. package/dist/{event-loop-stall-monitor-CpEH3CoV.js → event-loop-stall-monitor-QX4RjNe7.js} +1 -1
  70. package/dist/index.js +3 -3
  71. package/dist/index.mjs +3 -3
  72. package/dist/{retired-settings-keys-B4ZeKrbR.mjs → retired-settings-keys-CxPOg7BF.mjs} +1 -1
  73. package/dist/{retired-settings-keys-CcWvdy6u.js → retired-settings-keys-MaESpO18.js} +1 -1
  74. package/package.json +1 -1
@@ -1,5 +1,5 @@
1
1
  const require_chunk = require("./chunk-Cek0wNdY.js");
2
- const require_child_cap_dispatch = require("./child-cap-dispatch-Bfdgkbq3.js");
2
+ const require_child_cap_dispatch = require("./child-cap-dispatch-BWtaSmWf.js");
3
3
  const require_custom_action_registry = require("./custom-action-registry-acBY3mHA.js");
4
4
  let node_path = require("node:path");
5
5
  node_path = require_chunk.__toESM(node_path);
@@ -1,4 +1,4 @@
1
- import { $t as RUNNER_RSS_BUDGET_ENV, Ft as resolveAddonClass, H as createUdsLoggerWithControl, Pt as installManifestNativeDeps, U as LocalChildClient, _t as getWorkerNativeCapSnapshot, f as installManifestSystemDeps, fn as startRunnerHeapWatch, g as createUdsAddonContext, gt as getWorkerNativeCapProvider, i as killOwnRunnerGroupAfterParentLoss, n as createChildCapDispatch, p as installManifestPythonDeps, u as startRunnerParentDeathWatchdog, wn as emitHeapDiagnosticReport, xt as validateProviderRegistrations, yt as setWorkerNativeCapsChangeListener } from "./child-cap-dispatch-B9kziY4L.mjs";
1
+ import { $t as RUNNER_RSS_BUDGET_ENV, Ft as resolveAddonClass, H as createUdsLoggerWithControl, Pt as installManifestNativeDeps, U as LocalChildClient, _t as getWorkerNativeCapSnapshot, f as installManifestSystemDeps, fn as startRunnerHeapWatch, g as createUdsAddonContext, gt as getWorkerNativeCapProvider, i as killOwnRunnerGroupAfterParentLoss, n as createChildCapDispatch, p as installManifestPythonDeps, u as startRunnerParentDeathWatchdog, wn as emitHeapDiagnosticReport, xt as validateProviderRegistrations, yt as setWorkerNativeCapsChangeListener } from "./child-cap-dispatch-8qMgog1O.mjs";
2
2
  import { t as CustomActionRegistry } from "./custom-action-registry-B4Cf4O_X.mjs";
3
3
  import { register } from "node:module";
4
4
  import * as path$1 from "node:path";
@@ -1,6 +1,6 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
2
  require("./chunk-Cek0wNdY.js");
3
- const require_event_loop_stall_monitor = require("./event-loop-stall-monitor-CpEH3CoV.js");
3
+ const require_event_loop_stall_monitor = require("./event-loop-stall-monitor-QX4RjNe7.js");
4
4
  const require_custom_action_registry = require("./custom-action-registry-acBY3mHA.js");
5
5
  const require_snapshot_courtesy = require("./snapshot-courtesy-D_C5-nC0.js");
6
6
  exports.COURTESY_DEFAULT_WIDTH = require_snapshot_courtesy.COURTESY_DEFAULT_WIDTH;
@@ -1,4 +1,4 @@
1
- import { C as resolveFormatRevision, S as isModelDownloaded, a as createFileDataPlaneHandler, b as getModelFilePath, c as parseRangeHeader, d as ModelDownloadService, f as ModelDownloadHttpError, g as downloadFile, h as deleteModelFromDisk, i as startEventLoopStallMonitor, m as collectModelFiles, n as STALL_TICK_MS, o as contentTypeFor, p as adoptModelRevisions, r as attributeStall, t as STALL_REPORT_MS, v as ensureModel, x as isModelDownloadHttpError } from "./event-loop-stall-monitor-DKcYBHdH.mjs";
1
+ import { C as resolveFormatRevision, S as isModelDownloaded, a as createFileDataPlaneHandler, b as getModelFilePath, c as parseRangeHeader, d as ModelDownloadService, f as ModelDownloadHttpError, g as downloadFile, h as deleteModelFromDisk, i as startEventLoopStallMonitor, m as collectModelFiles, n as STALL_TICK_MS, o as contentTypeFor, p as adoptModelRevisions, r as attributeStall, t as STALL_REPORT_MS, v as ensureModel, x as isModelDownloadHttpError } from "./event-loop-stall-monitor-8W4yWNVW.mjs";
2
2
  import { t as CustomActionRegistry } from "./custom-action-registry-B4Cf4O_X.mjs";
3
3
  import { i as renderCourtesyOverlayJpeg, n as courtesyCacheKey, r as renderCourtesyJpeg, t as COURTESY_DEFAULT_WIDTH } from "./snapshot-courtesy-CyFs1M3I.mjs";
4
4
  export { COURTESY_DEFAULT_WIDTH, CustomActionRegistry, ModelDownloadHttpError, ModelDownloadService, STALL_REPORT_MS, STALL_TICK_MS, adoptModelRevisions, attributeStall, collectModelFiles, contentTypeFor, courtesyCacheKey, createFileDataPlaneHandler, deleteModelFromDisk, downloadFile, ensureModel, getModelFilePath, isModelDownloadHttpError, isModelDownloaded, parseRangeHeader, renderCourtesyJpeg, renderCourtesyOverlayJpeg, resolveFormatRevision, startEventLoopStallMonitor };
@@ -0,0 +1,43 @@
1
+ import { SettingsStoreClient } from '@camstack/types';
2
+ export interface ExternalIdentityRecord {
3
+ readonly provider: string;
4
+ readonly subject: string;
5
+ /** Verified `iss` the identity was linked under. */
6
+ readonly issuer: string;
7
+ readonly userId: string;
8
+ readonly label?: string;
9
+ readonly linkedAt: number;
10
+ }
11
+ export interface ExternalIdentityKey {
12
+ readonly provider: string;
13
+ readonly subject: string;
14
+ }
15
+ /** The identity is already linked to a different user. */
16
+ export declare class ExternalIdentityConflictError extends Error {
17
+ constructor();
18
+ }
19
+ export declare class ExternalIdentityManager {
20
+ private readonly store;
21
+ constructor(store: SettingsStoreClient);
22
+ private find;
23
+ /** The link of `(provider, subject)`, or `null`. */
24
+ findLink(provider: string, subject: string): Promise<ExternalIdentityRecord | null>;
25
+ /** The user `(provider, subject)` is linked to, or `null`. */
26
+ findUser(provider: string, subject: string): Promise<string | null>;
27
+ listForUser(userId: string): Promise<readonly ExternalIdentityRecord[]>;
28
+ /**
29
+ * Link `(provider, subject)` to `userId`. Idempotent for the same user;
30
+ * {@link ExternalIdentityConflictError} when another user holds it.
31
+ */
32
+ link(input: ExternalIdentityKey & {
33
+ userId: string;
34
+ issuer: string;
35
+ label?: string;
36
+ }): Promise<void>;
37
+ /** Remove one link of `userId`; `false` when that user did not hold it. */
38
+ unlink(input: ExternalIdentityKey & {
39
+ userId: string;
40
+ }): Promise<boolean>;
41
+ /** Delete every link of a user being deleted. Returns how many were removed. */
42
+ removeAllForUser(userId: string): Promise<number>;
43
+ }
@@ -3,7 +3,7 @@ Object.defineProperties(exports, {
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
5
  const require_chunk = require("../../chunk-Cek0wNdY.js");
6
- const require_dist = require("../../dist-CNbnikIh.js");
6
+ const require_dist = require("../../dist-BcUWQGr9.js");
7
7
  const require_settle_sources = require("../../settle-sources-Bhsy57y-.js");
8
8
  let node_crypto = require("node:crypto");
9
9
  let node_path = require("node:path");
@@ -1,4 +1,4 @@
1
- import { G as addonPagesCapability, Nr as EventCategory, cr as BaseAddon, sr as errMsg } from "../../dist-ZdSg09GJ.mjs";
1
+ import { G as addonPagesCapability, Pr as EventCategory, cr as BaseAddon, sr as errMsg } from "../../dist-D732NygW.mjs";
2
2
  import { t as settleSourcesWithTimeout } from "../../settle-sources-CDtNC8ub.mjs";
3
3
  import { createHash, randomUUID } from "node:crypto";
4
4
  import * as path$1 from "node:path";
@@ -3,7 +3,7 @@ Object.defineProperties(exports, {
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
5
  const require_chunk = require("../../chunk-Cek0wNdY.js");
6
- const require_dist = require("../../dist-CNbnikIh.js");
6
+ const require_dist = require("../../dist-BcUWQGr9.js");
7
7
  const require_settle_sources = require("../../settle-sources-Bhsy57y-.js");
8
8
  let node_crypto = require("node:crypto");
9
9
  let node_path = require("node:path");
@@ -1,4 +1,4 @@
1
- import { Nr as EventCategory, cr as BaseAddon, q as addonWidgetsCapability, sr as errMsg } from "../../dist-ZdSg09GJ.mjs";
1
+ import { Pr as EventCategory, cr as BaseAddon, q as addonWidgetsCapability, sr as errMsg } from "../../dist-D732NygW.mjs";
2
2
  import { t as settleSourcesWithTimeout } from "../../settle-sources-CDtNC8ub.mjs";
3
3
  import { createHash, randomUUID } from "node:crypto";
4
4
  import * as path$1 from "node:path";
@@ -3,7 +3,7 @@ Object.defineProperties(exports, {
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
5
  require("../../chunk-Cek0wNdY.js");
6
- const require_dist = require("../../dist-CNbnikIh.js");
6
+ const require_dist = require("../../dist-BcUWQGr9.js");
7
7
  //#region src/builtins/alerts/device-label.ts
8
8
  /**
9
9
  * Operator-facing device label for alert messages.
@@ -1,4 +1,4 @@
1
- import { J as alertsCapability, Nr as EventCategory, cr as BaseAddon, n as AlertSchema, sr as errMsg, vr as createEvent } from "../../dist-ZdSg09GJ.mjs";
1
+ import { J as alertsCapability, Pr as EventCategory, cr as BaseAddon, n as AlertSchema, sr as errMsg, yr as createEvent } from "../../dist-D732NygW.mjs";
2
2
  //#region src/builtins/alerts/device-label.ts
3
3
  /**
4
4
  * Operator-facing device label for alert messages.
@@ -3,7 +3,7 @@ Object.defineProperties(exports, {
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
5
  require("../../chunk-Cek0wNdY.js");
6
- const require_dist = require("../../dist-CNbnikIh.js");
6
+ const require_dist = require("../../dist-BcUWQGr9.js");
7
7
  //#region src/builtins/autotrack/autotrack-config.ts
8
8
  var DEFAULT_AUTOTRACK_LOOP_CONFIG = {
9
9
  deadZoneFraction: .5,
@@ -1,4 +1,4 @@
1
- import { Nr as EventCategory, S as FIRST_LEVEL_MACRO_CLASSES, Z as bareAddonId, cr as BaseAddon, hn as ptzAutotrackCapability, sr as errMsg, wr as isEvent } from "../../dist-ZdSg09GJ.mjs";
1
+ import { Pr as EventCategory, S as FIRST_LEVEL_MACRO_CLASSES, Tr as isEvent, Z as bareAddonId, cr as BaseAddon, hn as ptzAutotrackCapability, sr as errMsg } from "../../dist-D732NygW.mjs";
2
2
  //#region src/builtins/autotrack/autotrack-config.ts
3
3
  var DEFAULT_AUTOTRACK_LOOP_CONFIG = {
4
4
  deadZoneFraction: .5,
@@ -3,7 +3,7 @@ Object.defineProperties(exports, {
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
5
  const require_chunk = require("../../chunk-Cek0wNdY.js");
6
- const require_dist = require("../../dist-CNbnikIh.js");
6
+ const require_dist = require("../../dist-BcUWQGr9.js");
7
7
  let node_crypto = require("node:crypto");
8
8
  let buffer = require("buffer");
9
9
  let node_fs_promises = require("node:fs/promises");
@@ -1,4 +1,4 @@
1
- import { Fn as storageOccupancyCapability, Mr as toNodeId, Nr as EventCategory, Tr as nodePin, X as backupCapability, cr as BaseAddon, g as DATABASE_SNAPSHOT_SUFFIX, tn as mayWriteToLocation } from "../../dist-ZdSg09GJ.mjs";
1
+ import { Er as nodePin, Fn as storageOccupancyCapability, Nr as toNodeId, Pr as EventCategory, X as backupCapability, cr as BaseAddon, g as DATABASE_SNAPSHOT_SUFFIX, tn as mayWriteToLocation } from "../../dist-D732NygW.mjs";
2
2
  import { randomBytes, randomUUID } from "node:crypto";
3
3
  import { Buffer as Buffer$1 } from "buffer";
4
4
  import * as fsp from "node:fs/promises";
@@ -3,7 +3,7 @@ Object.defineProperties(exports, {
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
5
  require("../../chunk-Cek0wNdY.js");
6
- const require_dist = require("../../dist-CNbnikIh.js");
6
+ const require_dist = require("../../dist-BcUWQGr9.js");
7
7
  const require_settle_sources = require("../../settle-sources-Bhsy57y-.js");
8
8
  let zod = require("zod");
9
9
  //#region src/builtins/calendars/calendar-color.ts
@@ -1,4 +1,4 @@
1
- import { cr as BaseAddon, p as CalendarPreferencesSchema, tt as calendarsCapability } from "../../dist-ZdSg09GJ.mjs";
1
+ import { cr as BaseAddon, p as CalendarPreferencesSchema, tt as calendarsCapability } from "../../dist-D732NygW.mjs";
2
2
  import { t as settleSourcesWithTimeout } from "../../settle-sources-CDtNC8ub.mjs";
3
3
  import { z } from "zod";
4
4
  //#region src/builtins/calendars/calendar-color.ts
@@ -3,7 +3,7 @@ Object.defineProperties(exports, {
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
5
  require("../../chunk-Cek0wNdY.js");
6
- const require_dist = require("../../dist-CNbnikIh.js");
6
+ const require_dist = require("../../dist-BcUWQGr9.js");
7
7
  let zod = require("zod");
8
8
  let _camstack_types_node = require("@camstack/types/node");
9
9
  let node_path = require("node:path");
@@ -1,4 +1,4 @@
1
- import { Ln as streamCatalogCapability, M as MOTION_CLOSE_AFTER_MS, Mn as snapshotCapability, Nr as EventCategory, Sr as hydrateSchema, an as motionCapability, b as DeclaredDevices, cr as BaseAddon, gt as declarationOwnerNodeId, i as BaseDevice, ir as DeviceFeature, nn as memoizePinnedFfmpeg, nt as cameraGridLayoutCapability, or as DeviceType, qn as buildFfmpegArgs, sr as errMsg, vr as createEvent, y as DERIVED_CAMERA_SILENCED_CAP_NAMES } from "../../dist-ZdSg09GJ.mjs";
1
+ import { Cr as hydrateSchema, Ln as streamCatalogCapability, M as MOTION_CLOSE_AFTER_MS, Mn as snapshotCapability, Pr as EventCategory, an as motionCapability, b as DeclaredDevices, cr as BaseAddon, gt as declarationOwnerNodeId, i as BaseDevice, ir as DeviceFeature, nn as memoizePinnedFfmpeg, nt as cameraGridLayoutCapability, or as DeviceType, qn as buildFfmpegArgs, sr as errMsg, y as DERIVED_CAMERA_SILENCED_CAP_NAMES, yr as createEvent } from "../../dist-D732NygW.mjs";
2
2
  import { z } from "zod";
3
3
  import { FfmpegProcess } from "@camstack/types/node";
4
4
  import { join } from "node:path";
@@ -3,8 +3,8 @@ Object.defineProperties(exports, {
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
5
  require("../../chunk-Cek0wNdY.js");
6
- const require_dist = require("../../dist-CNbnikIh.js");
7
- const require_composition_sources = require("../../composition-sources-DYlXX2qW.js");
6
+ const require_dist = require("../../dist-BcUWQGr9.js");
7
+ const require_composition_sources = require("../../composition-sources-DW7CgMsg.js");
8
8
  let zod = require("zod");
9
9
  //#region src/builtins/shared/device-state-changed.ts
10
10
  /** Structural narrowing helper for untrusted bus payloads. */
@@ -1,5 +1,5 @@
1
- import { $ as buildCapabilityLookup, $n as compositionSliceKey, Jn as cloneStatefulExpressionMemory, Kn as COMPOSER_ADDON_ID, Nr as EventCategory, Ot as evaluateCompositionField, Qn as compositionItemFieldPath, Xn as composedDeviceStableId, Yn as composedDeviceRef, Zn as compositionFeatureEnabled, at as composerCapability, b as DeclaredDevices, cr as BaseAddon, er as compositionSourceKey, fn as planComposition, i as BaseDevice, jt as expressionContainsBuiltinCall, l as COMPOSED_ITEM_FIXED_FIELDS, nr as disarmRoseMemory, or as DeviceType, ot as compositionFieldKey, rr as toExpressionValue, sr as errMsg, t as ALL_CAPABILITY_DEFINITIONS, tr as createStatefulExpressionMemory, vr as createEvent } from "../../dist-ZdSg09GJ.mjs";
2
- import { n as normalizedNativeOwner } from "../../composition-sources-BfZgiTYD.mjs";
1
+ import { $ as buildCapabilityLookup, $n as compositionSliceKey, Jn as cloneStatefulExpressionMemory, Kn as COMPOSER_ADDON_ID, Ot as evaluateCompositionField, Pr as EventCategory, Qn as compositionItemFieldPath, Xn as composedDeviceStableId, Yn as composedDeviceRef, Zn as compositionFeatureEnabled, at as composerCapability, b as DeclaredDevices, cr as BaseAddon, er as compositionSourceKey, fn as planComposition, i as BaseDevice, jt as expressionContainsBuiltinCall, l as COMPOSED_ITEM_FIXED_FIELDS, nr as disarmRoseMemory, or as DeviceType, ot as compositionFieldKey, rr as toExpressionValue, sr as errMsg, t as ALL_CAPABILITY_DEFINITIONS, tr as createStatefulExpressionMemory, yr as createEvent } from "../../dist-D732NygW.mjs";
2
+ import { n as normalizedNativeOwner } from "../../composition-sources-zxQPPtP_.mjs";
3
3
  import { z } from "zod";
4
4
  //#region src/builtins/shared/device-state-changed.ts
5
5
  /** Structural narrowing helper for untrusted bus payloads. */
@@ -3,7 +3,7 @@ Object.defineProperties(exports, {
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
5
  require("../../chunk-Cek0wNdY.js");
6
- const require_dist = require("../../dist-CNbnikIh.js");
6
+ const require_dist = require("../../dist-BcUWQGr9.js");
7
7
  const require_formatter = require("../../formatter-DqAKDlvN.js");
8
8
  //#region src/builtins/console-logging/console-destination.ts
9
9
  var LEVEL_RANK = {
@@ -1,4 +1,4 @@
1
- import { Zt as logDestinationCapability, cr as BaseAddon } from "../../dist-ZdSg09GJ.mjs";
1
+ import { Zt as logDestinationCapability, cr as BaseAddon } from "../../dist-D732NygW.mjs";
2
2
  import { t as formatLogLine } from "../../formatter-B7qW8bPJ.mjs";
3
3
  //#region src/builtins/console-logging/console-destination.ts
4
4
  var LEVEL_RANK = {
@@ -1,7 +1,7 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
2
  const require_chunk = require("../../chunk-Cek0wNdY.js");
3
- const require_dist = require("../../dist-CNbnikIh.js");
4
- const require_composition_sources = require("../../composition-sources-DYlXX2qW.js");
3
+ const require_dist = require("../../dist-BcUWQGr9.js");
4
+ const require_composition_sources = require("../../composition-sources-DW7CgMsg.js");
5
5
  let node_crypto = require("node:crypto");
6
6
  let _camstack_types_node = require("@camstack/types/node");
7
7
  let node_fs_promises = require("node:fs/promises");
@@ -1,5 +1,5 @@
1
- import { $ as buildCapabilityLookup, Bn as validateComposition, Sr as hydrateSchema, Yn as composedDeviceRef, _n as replacedFieldKeys, b as DeclaredDevices, bn as resolveCoreBlockEntry, bt as describeComposableCaps, cr as BaseAddon, ct as coreBlockAddonId, d as CORE_BLOCKS_ADDON_ID, dt as coreBlockSourceKind, er as compositionSourceKey, f as CORE_BLOCK_ADDON_PREFIX, fn as planComposition, ft as coreBlocksCapability, lt as coreBlockComposition, m as CoreBlockSchema, on as normalizeCoreBlockWrite, sr as errMsg, st as compositionSourceRefs, t as ALL_CAPABILITY_DEFINITIONS, u as COMPOSER_RUNNER_ID, ut as coreBlockIdFromAddonId, xn as resolveCoreBlockFiles } from "../../dist-ZdSg09GJ.mjs";
2
- import { t as describeCompositionSources } from "../../composition-sources-BfZgiTYD.mjs";
1
+ import { $ as buildCapabilityLookup, Bn as validateComposition, Cr as hydrateSchema, Yn as composedDeviceRef, _n as replacedFieldKeys, b as DeclaredDevices, bn as resolveCoreBlockEntry, bt as describeComposableCaps, cr as BaseAddon, ct as coreBlockAddonId, d as CORE_BLOCKS_ADDON_ID, dt as coreBlockSourceKind, er as compositionSourceKey, f as CORE_BLOCK_ADDON_PREFIX, fn as planComposition, ft as coreBlocksCapability, lt as coreBlockComposition, m as CoreBlockSchema, on as normalizeCoreBlockWrite, sr as errMsg, st as compositionSourceRefs, t as ALL_CAPABILITY_DEFINITIONS, u as COMPOSER_RUNNER_ID, ut as coreBlockIdFromAddonId, xn as resolveCoreBlockFiles } from "../../dist-D732NygW.mjs";
2
+ import { t as describeCompositionSources } from "../../composition-sources-zxQPPtP_.mjs";
3
3
  import { createRequire } from "node:module";
4
4
  import { randomUUID } from "node:crypto";
5
5
  import { customizationBlockName } from "@camstack/types/node";
@@ -69,6 +69,8 @@ export declare class DeviceManagerAddon extends BaseAddon {
69
69
  * `allocateDeviceId` never consults.
70
70
  */
71
71
  private readonly removalFence;
72
+ /** Declared secret config paths per device, as last registered (D783). */
73
+ private readonly secretConfigPaths;
72
74
  /** The runtime-state mirror, asserted present (constructed in onInitialize). */
73
75
  private get stateMirror();
74
76
  /**
@@ -3,8 +3,8 @@ Object.defineProperties(exports, {
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
5
  require("../../chunk-Cek0wNdY.js");
6
- const require_dist = require("../../dist-CNbnikIh.js");
7
- const require_retired_settings_keys = require("../../retired-settings-keys-CcWvdy6u.js");
6
+ const require_dist = require("../../dist-BcUWQGr9.js");
7
+ const require_retired_settings_keys = require("../../retired-settings-keys-MaESpO18.js");
8
8
  let zod = require("zod");
9
9
  let node_crypto = require("node:crypto");
10
10
  let _camstack_types_node = require("@camstack/types/node");
@@ -396,6 +396,13 @@ function isDeviceRole(value) {
396
396
  function toDeviceRole(value) {
397
397
  return value != null && isDeviceRole(value) ? value : null;
398
398
  }
399
+ /** The secret paths a live device's config schema declares (D783), as a spreadable field. */
400
+ function liveSecretConfigPaths(device) {
401
+ const schema = device.config?.schema;
402
+ if (schema === void 0 || schema === null || typeof schema !== "object") return {};
403
+ const paths = require_dist.collectZodSecretPaths(schema);
404
+ return paths.length > 0 ? { secretConfigPaths: [...paths] } : {};
405
+ }
399
406
  function toDeviceInfo(addonId, device, metadata = null, metaRow = null) {
400
407
  const configValues = {};
401
408
  for (const entry of device.config.entries()) configValues[entry.key] = entry.value;
@@ -419,6 +426,7 @@ function toDeviceInfo(addonId, device, metadata = null, metaRow = null) {
419
426
  features: device.features.length > 0 ? [...device.features] : persistedFeatures(metaRow?.features),
420
427
  isCamera: isCameraDevice(device),
421
428
  config: configValues,
429
+ ...liveSecretConfigPaths(device),
422
430
  metadata,
423
431
  ...metaRow?.integrationId !== void 0 ? { integrationId: metaRow.integrationId } : {},
424
432
  ...metaRow?.linkDeviceId !== void 0 ? { linkDeviceId: metaRow.linkDeviceId } : {},
@@ -2491,6 +2499,24 @@ function persistedOnlineFallback(input) {
2491
2499
  return Object.keys(input.config ?? {}).length > 0;
2492
2500
  }
2493
2501
  //#endregion
2502
+ //#region src/builtins/device-manager/secret-config-paths.ts
2503
+ function createSecretConfigPathRegistry() {
2504
+ const byDevice = /* @__PURE__ */ new Map();
2505
+ return {
2506
+ get: (deviceId) => byDevice.get(deviceId),
2507
+ set: (deviceId, paths) => {
2508
+ byDevice.set(deviceId, Object.freeze([...new Set(paths)]));
2509
+ },
2510
+ delete: (deviceId) => {
2511
+ byDevice.delete(deviceId);
2512
+ }
2513
+ };
2514
+ }
2515
+ /** `{ secretConfigPaths }` when any are known, `{}` otherwise — spread into a `DeviceInfo`. */
2516
+ function secretConfigPathsField(paths) {
2517
+ return paths !== void 0 && paths.length > 0 ? { secretConfigPaths: [...paths] } : {};
2518
+ }
2519
+ //#endregion
2494
2520
  //#region src/builtins/device-manager/device-queries.ts
2495
2521
  /**
2496
2522
  * The ORIGINATING addon id off a cap-channel call's `args`, or `undefined`.
@@ -2629,6 +2655,7 @@ async function listAll(pctx, input) {
2629
2655
  features: persistedFeatures(m.features),
2630
2656
  isCamera: persistedIsCamera(persistedType),
2631
2657
  config: persistedConfig ?? {},
2658
+ ...secretConfigPathsField(pctx.secretConfigPaths.get(m.id)),
2632
2659
  metadata,
2633
2660
  ...m.integrationId !== void 0 ? { integrationId: m.integrationId } : {},
2634
2661
  ...m.linkDeviceId !== void 0 ? { linkDeviceId: m.linkDeviceId } : {},
@@ -2678,6 +2705,7 @@ async function getDevice(pctx, input) {
2678
2705
  features: persistedFeatures(m.features),
2679
2706
  isCamera: persistedIsCamera(m.type),
2680
2707
  config: persistedConfig ?? {},
2708
+ ...secretConfigPathsField(pctx.secretConfigPaths.get(deviceId)),
2681
2709
  metadata,
2682
2710
  ...m.integrationId !== void 0 ? { integrationId: m.integrationId } : {},
2683
2711
  ...m.linkDeviceId !== void 0 ? { linkDeviceId: m.linkDeviceId } : {},
@@ -2754,6 +2782,7 @@ function projectChildren(pctx, parentDeviceId, ownerAddonId, childRows, liveChil
2754
2782
  features: persistedFeatures(m.features),
2755
2783
  isCamera: persistedIsCamera(m.type),
2756
2784
  config: persistedConfig,
2785
+ ...secretConfigPathsField(pctx.secretConfigPaths.get(m.id)),
2757
2786
  metadata,
2758
2787
  ...m.integrationId !== void 0 ? { integrationId: m.integrationId } : {},
2759
2788
  ...m.linkDeviceId !== void 0 ? { linkDeviceId: m.linkDeviceId } : {},
@@ -5547,6 +5576,7 @@ async function registerDevice(pctx, input) {
5547
5576
  });
5548
5577
  throw new Error(`[device-manager] registerDevice: device ${id} (${addonId}/${stableId}) was removed — refusing to resurrect it`);
5549
5578
  }
5579
+ if (Array.isArray(input.secretConfigPaths)) pctx.secretConfigPaths.set(id, input.secretConfigPaths);
5550
5580
  const { isFirstRegistration, exportFingerprint, fingerprintChanged, inheritedLocation, inheritedDescendantIds, inheritFailed } = await pctx.metaStore.withMetaWriteLock(async () => {
5551
5581
  const existingRow = await pctx.metaStore.rows.get(id);
5552
5582
  const existingMeta = existingRow?.meta;
@@ -5693,6 +5723,7 @@ async function removeDevice(pctx, input) {
5693
5723
  stableId
5694
5724
  });
5695
5725
  });
5726
+ pctx.secretConfigPaths.delete(deviceId);
5696
5727
  await pctx.settings.clearDeviceStore(deviceId);
5697
5728
  await pctx.host.forgetMirrorDevice(deviceId);
5698
5729
  await pctx.settings.clearDeviceRuntimeState(deviceId);
@@ -9605,6 +9636,8 @@ var DeviceManagerAddon = class extends require_dist.BaseAddon {
9605
9636
  * `allocateDeviceId` never consults.
9606
9637
  */
9607
9638
  removalFence = createRemovalFence();
9639
+ /** Declared secret config paths per device, as last registered (D783). */
9640
+ secretConfigPaths = createSecretConfigPathRegistry();
9608
9641
  /** The runtime-state mirror, asserted present (constructed in onInitialize). */
9609
9642
  get stateMirror() {
9610
9643
  if (!this.stateMirrorImpl) throw new Error("DeviceManagerAddon: state mirror accessed before onInitialize");
@@ -9846,6 +9879,7 @@ var DeviceManagerAddon = class extends require_dist.BaseAddon {
9846
9879
  bindingsDeps: this.bindingsDeps,
9847
9880
  migrationGuard: createMigrationGuard(),
9848
9881
  removalFence: this.removalFence,
9882
+ secretConfigPaths: this.secretConfigPaths,
9849
9883
  requireDeviceOps,
9850
9884
  stampIntegrationId: stampIntegrationId$1,
9851
9885
  get provider() {
@@ -1,5 +1,5 @@
1
- import { A as MINUTES_PER_DAY, At as expandContainer, C as FieldClaimModeSchema, Cr as isDeviceConfigCap, Ct as deviceStateCapability, Dt as enumerateSchemaFields, En as runtimeStatePolicyFor, Et as enumerateItemArrayFields, Ft as formatMinutes, Kt as legacyAutoLinkIds, Nr as EventCategory, O as LocationIconIdSchema, R as STREAM_PROFILE_META, St as deviceManagerCapability, Xt as locationIconKey, ar as DeviceRole, c as CAP_NAMES_WITH_STATUS, cr as BaseAddon, et as buildStreamParamsConfigSchema, ir as DeviceFeature, jn as siteZoneKey, jr as sleep$1, mr as WELL_KNOWN_TAB_MAP, o as CAMERA_SWITCH_ORDER, or as DeviceType, pt as createDeviceExtensionProvider, sn as normalizeUnit, sr as errMsg, t as ALL_CAPABILITY_DEFINITIONS, un as parseStreamParamsFormPatch, v as DAY_NAMES, vt as defineExtensionSlotProvider, w as FieldClaimSchema, wt as deviceStatusCapability, x as DeviceStatusSchema, xt as deviceExtensionCapability } from "../../dist-ZdSg09GJ.mjs";
2
- import { n as purgeRetiredSettingsRows } from "../../retired-settings-keys-B4ZeKrbR.mjs";
1
+ import { A as MINUTES_PER_DAY, At as expandContainer, C as FieldClaimModeSchema, Ct as deviceStateCapability, Dt as enumerateSchemaFields, En as runtimeStatePolicyFor, Et as enumerateItemArrayFields, Ft as formatMinutes, Kt as legacyAutoLinkIds, Mr as sleep$1, O as LocationIconIdSchema, Pr as EventCategory, R as STREAM_PROFILE_META, St as deviceManagerCapability, Xt as locationIconKey, ar as DeviceRole, c as CAP_NAMES_WITH_STATUS, cr as BaseAddon, et as buildStreamParamsConfigSchema, ir as DeviceFeature, jn as siteZoneKey, mr as WELL_KNOWN_TAB_MAP, o as CAMERA_SWITCH_ORDER, or as DeviceType, pt as createDeviceExtensionProvider, sn as normalizeUnit, sr as errMsg, t as ALL_CAPABILITY_DEFINITIONS, un as parseStreamParamsFormPatch, v as DAY_NAMES, vr as collectZodSecretPaths, vt as defineExtensionSlotProvider, w as FieldClaimSchema, wr as isDeviceConfigCap, wt as deviceStatusCapability, x as DeviceStatusSchema, xt as deviceExtensionCapability } from "../../dist-D732NygW.mjs";
2
+ import { n as purgeRetiredSettingsRows } from "../../retired-settings-keys-CxPOg7BF.mjs";
3
3
  import { z } from "zod";
4
4
  import { randomUUID } from "node:crypto";
5
5
  import { canonicalDeviceFingerprint } from "@camstack/types/node";
@@ -391,6 +391,13 @@ function isDeviceRole(value) {
391
391
  function toDeviceRole(value) {
392
392
  return value != null && isDeviceRole(value) ? value : null;
393
393
  }
394
+ /** The secret paths a live device's config schema declares (D783), as a spreadable field. */
395
+ function liveSecretConfigPaths(device) {
396
+ const schema = device.config?.schema;
397
+ if (schema === void 0 || schema === null || typeof schema !== "object") return {};
398
+ const paths = collectZodSecretPaths(schema);
399
+ return paths.length > 0 ? { secretConfigPaths: [...paths] } : {};
400
+ }
394
401
  function toDeviceInfo(addonId, device, metadata = null, metaRow = null) {
395
402
  const configValues = {};
396
403
  for (const entry of device.config.entries()) configValues[entry.key] = entry.value;
@@ -414,6 +421,7 @@ function toDeviceInfo(addonId, device, metadata = null, metaRow = null) {
414
421
  features: device.features.length > 0 ? [...device.features] : persistedFeatures(metaRow?.features),
415
422
  isCamera: isCameraDevice(device),
416
423
  config: configValues,
424
+ ...liveSecretConfigPaths(device),
417
425
  metadata,
418
426
  ...metaRow?.integrationId !== void 0 ? { integrationId: metaRow.integrationId } : {},
419
427
  ...metaRow?.linkDeviceId !== void 0 ? { linkDeviceId: metaRow.linkDeviceId } : {},
@@ -2486,6 +2494,24 @@ function persistedOnlineFallback(input) {
2486
2494
  return Object.keys(input.config ?? {}).length > 0;
2487
2495
  }
2488
2496
  //#endregion
2497
+ //#region src/builtins/device-manager/secret-config-paths.ts
2498
+ function createSecretConfigPathRegistry() {
2499
+ const byDevice = /* @__PURE__ */ new Map();
2500
+ return {
2501
+ get: (deviceId) => byDevice.get(deviceId),
2502
+ set: (deviceId, paths) => {
2503
+ byDevice.set(deviceId, Object.freeze([...new Set(paths)]));
2504
+ },
2505
+ delete: (deviceId) => {
2506
+ byDevice.delete(deviceId);
2507
+ }
2508
+ };
2509
+ }
2510
+ /** `{ secretConfigPaths }` when any are known, `{}` otherwise — spread into a `DeviceInfo`. */
2511
+ function secretConfigPathsField(paths) {
2512
+ return paths !== void 0 && paths.length > 0 ? { secretConfigPaths: [...paths] } : {};
2513
+ }
2514
+ //#endregion
2489
2515
  //#region src/builtins/device-manager/device-queries.ts
2490
2516
  /**
2491
2517
  * The ORIGINATING addon id off a cap-channel call's `args`, or `undefined`.
@@ -2624,6 +2650,7 @@ async function listAll(pctx, input) {
2624
2650
  features: persistedFeatures(m.features),
2625
2651
  isCamera: persistedIsCamera(persistedType),
2626
2652
  config: persistedConfig ?? {},
2653
+ ...secretConfigPathsField(pctx.secretConfigPaths.get(m.id)),
2627
2654
  metadata,
2628
2655
  ...m.integrationId !== void 0 ? { integrationId: m.integrationId } : {},
2629
2656
  ...m.linkDeviceId !== void 0 ? { linkDeviceId: m.linkDeviceId } : {},
@@ -2673,6 +2700,7 @@ async function getDevice(pctx, input) {
2673
2700
  features: persistedFeatures(m.features),
2674
2701
  isCamera: persistedIsCamera(m.type),
2675
2702
  config: persistedConfig ?? {},
2703
+ ...secretConfigPathsField(pctx.secretConfigPaths.get(deviceId)),
2676
2704
  metadata,
2677
2705
  ...m.integrationId !== void 0 ? { integrationId: m.integrationId } : {},
2678
2706
  ...m.linkDeviceId !== void 0 ? { linkDeviceId: m.linkDeviceId } : {},
@@ -2749,6 +2777,7 @@ function projectChildren(pctx, parentDeviceId, ownerAddonId, childRows, liveChil
2749
2777
  features: persistedFeatures(m.features),
2750
2778
  isCamera: persistedIsCamera(m.type),
2751
2779
  config: persistedConfig,
2780
+ ...secretConfigPathsField(pctx.secretConfigPaths.get(m.id)),
2752
2781
  metadata,
2753
2782
  ...m.integrationId !== void 0 ? { integrationId: m.integrationId } : {},
2754
2783
  ...m.linkDeviceId !== void 0 ? { linkDeviceId: m.linkDeviceId } : {},
@@ -5542,6 +5571,7 @@ async function registerDevice(pctx, input) {
5542
5571
  });
5543
5572
  throw new Error(`[device-manager] registerDevice: device ${id} (${addonId}/${stableId}) was removed — refusing to resurrect it`);
5544
5573
  }
5574
+ if (Array.isArray(input.secretConfigPaths)) pctx.secretConfigPaths.set(id, input.secretConfigPaths);
5545
5575
  const { isFirstRegistration, exportFingerprint, fingerprintChanged, inheritedLocation, inheritedDescendantIds, inheritFailed } = await pctx.metaStore.withMetaWriteLock(async () => {
5546
5576
  const existingRow = await pctx.metaStore.rows.get(id);
5547
5577
  const existingMeta = existingRow?.meta;
@@ -5688,6 +5718,7 @@ async function removeDevice(pctx, input) {
5688
5718
  stableId
5689
5719
  });
5690
5720
  });
5721
+ pctx.secretConfigPaths.delete(deviceId);
5691
5722
  await pctx.settings.clearDeviceStore(deviceId);
5692
5723
  await pctx.host.forgetMirrorDevice(deviceId);
5693
5724
  await pctx.settings.clearDeviceRuntimeState(deviceId);
@@ -9600,6 +9631,8 @@ var DeviceManagerAddon = class extends BaseAddon {
9600
9631
  * `allocateDeviceId` never consults.
9601
9632
  */
9602
9633
  removalFence = createRemovalFence();
9634
+ /** Declared secret config paths per device, as last registered (D783). */
9635
+ secretConfigPaths = createSecretConfigPathRegistry();
9603
9636
  /** The runtime-state mirror, asserted present (constructed in onInitialize). */
9604
9637
  get stateMirror() {
9605
9638
  if (!this.stateMirrorImpl) throw new Error("DeviceManagerAddon: state mirror accessed before onInitialize");
@@ -9841,6 +9874,7 @@ var DeviceManagerAddon = class extends BaseAddon {
9841
9874
  bindingsDeps: this.bindingsDeps,
9842
9875
  migrationGuard: createMigrationGuard(),
9843
9876
  removalFence: this.removalFence,
9877
+ secretConfigPaths: this.secretConfigPaths,
9844
9878
  requireDeviceOps,
9845
9879
  stampIntegrationId: stampIntegrationId$1,
9846
9880
  get provider() {
@@ -62,6 +62,8 @@ export declare function toDeviceInfo(addonId: string, device: IDevice, metadata?
62
62
  primaryChildEntityId?: string | null | undefined;
63
63
  linkDeviceId?: number | null | undefined;
64
64
  integrationId?: string | undefined;
65
+ metadata: Record<string, unknown> | null;
66
+ secretConfigPaths?: string[];
65
67
  id: number;
66
68
  stableId: string;
67
69
  addonId: string;
@@ -76,7 +78,6 @@ export declare function toDeviceInfo(addonId: string, device: IDevice, metadata?
76
78
  features: DeviceFeature[];
77
79
  isCamera: boolean;
78
80
  config: Record<string, unknown>;
79
- metadata: Record<string, unknown> | null;
80
81
  };
81
82
  export declare function resolveDeviceById(registry: IDeviceRegistry, deviceId: number): {
82
83
  addonId: string;
@@ -6,6 +6,7 @@ import { FieldClaimsIndex } from './field-claims-index.js';
6
6
  import { OwnedCaps } from './field-ownership.js';
7
7
  import { MigrationGuard } from './migrate-guard.js';
8
8
  import { RemovalFence } from './removal-fence.js';
9
+ import { SecretConfigPathRegistry } from './secret-config-paths.js';
9
10
  import { SeedMode } from './device-state-mirror.js';
10
11
  import { MirrorWriteHold } from './mirror-row-writer.js';
11
12
  type IDeviceProviderCap = InferProvider<typeof deviceProviderCapability>;
@@ -85,6 +86,8 @@ export interface ProviderContext {
85
86
  * tears down, which is how a deleted camera came back as a config-less
86
87
  * shell (D376). */
87
88
  readonly removalFence: RemovalFence;
89
+ /** The secret config paths each device declared at `registerDevice` (D783). */
90
+ readonly secretConfigPaths: SecretConfigPathRegistry;
88
91
  /** Resolve the per-device `device-ops` native provider (throws when absent). */
89
92
  requireDeviceOps(deviceId: number): IDeviceOpsProvider;
90
93
  /** Stamp an integration id onto a device's meta row + emit DeviceMetaChanged. */
@@ -0,0 +1,24 @@
1
+ /**
2
+ * The secret config paths each device DECLARES (D783) — `connection.password`,
3
+ * `localKey`, `rows[].token` — as its runner last reported them at
4
+ * `registerDevice`.
5
+ *
6
+ * In memory on purpose: a runner re-registers every device it owns whenever it
7
+ * (re)starts, and a hub-main restart restarts every runner, so the map refills
8
+ * on its own. Until a device has registered, its `DeviceInfo` carries no paths
9
+ * and the non-admin redaction falls back to its keyword backstop — never to
10
+ * "no redaction". Paths only; never a value.
11
+ */
12
+ export interface SecretConfigPathRegistry {
13
+ /** The paths last reported for `deviceId`, or `undefined` when none were. */
14
+ get(deviceId: number): readonly string[] | undefined;
15
+ /** Replace the paths for `deviceId` with the runner's latest report. */
16
+ set(deviceId: number, paths: readonly string[]): void;
17
+ /** Forget a removed device. */
18
+ delete(deviceId: number): void;
19
+ }
20
+ export declare function createSecretConfigPathRegistry(): SecretConfigPathRegistry;
21
+ /** `{ secretConfigPaths }` when any are known, `{}` otherwise — spread into a `DeviceInfo`. */
22
+ export declare function secretConfigPathsField(paths: readonly string[] | undefined): {
23
+ secretConfigPaths?: string[];
24
+ };
@@ -3,7 +3,7 @@ Object.defineProperties(exports, {
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
5
  require("../../chunk-Cek0wNdY.js");
6
- const require_dist = require("../../dist-CNbnikIh.js");
6
+ const require_dist = require("../../dist-BcUWQGr9.js");
7
7
  const require_formatter = require("../../formatter-DqAKDlvN.js");
8
8
  //#region src/builtins/hub-forwarder/hub-forwarder-destination.ts
9
9
  var DEFAULT_OUTBOUND_BUFFER_SIZE = 500;
@@ -1,4 +1,4 @@
1
- import { Zt as logDestinationCapability, cr as BaseAddon } from "../../dist-ZdSg09GJ.mjs";
1
+ import { Zt as logDestinationCapability, cr as BaseAddon } from "../../dist-D732NygW.mjs";
2
2
  import { t as formatLogLine } from "../../formatter-B7qW8bPJ.mjs";
3
3
  //#region src/builtins/hub-forwarder/hub-forwarder-destination.ts
4
4
  var DEFAULT_OUTBOUND_BUFFER_SIZE = 500;
@@ -1,6 +1,6 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
2
  require("../../chunk-Cek0wNdY.js");
3
- const require_dist = require("../../dist-CNbnikIh.js");
3
+ const require_dist = require("../../dist-BcUWQGr9.js");
4
4
  //#region src/builtins/liveness-monitor/liveness-checks.ts
5
5
  var NO_DEVICES = "liveness:no-devices";
6
6
  var ALL_OFFLINE = "liveness:all-devices-offline";
@@ -1,4 +1,4 @@
1
- import { I as RecordingStatusSchema, N as RECORDING_SOURCE_CAMSTACK_ADDON, Nr as EventCategory, cr as BaseAddon, sr as errMsg, vr as createEvent } from "../../dist-ZdSg09GJ.mjs";
1
+ import { I as RecordingStatusSchema, N as RECORDING_SOURCE_CAMSTACK_ADDON, Pr as EventCategory, cr as BaseAddon, sr as errMsg, yr as createEvent } from "../../dist-D732NygW.mjs";
2
2
  //#region src/builtins/liveness-monitor/liveness-checks.ts
3
3
  var NO_DEVICES = "liveness:no-devices";
4
4
  var ALL_OFFLINE = "liveness:all-devices-offline";
@@ -60,6 +60,20 @@ export declare const OAUTH_SESSIONS_COLLECTION = "oauth_sessions";
60
60
  * enrollment row outlives the account."
61
61
  */
62
62
  export declare const USER_TOTP_COLLECTION = "user_totp";
63
+ /**
64
+ * External sign-in identities linked to local users (D782): one row per
65
+ * `(provider, subject)` — the row id IS the identity, so one identity maps to
66
+ * one user by primary key. Written only by the identity's owner completing a
67
+ * "Link" flow from their profile (bound to their session).
68
+ *
69
+ * @durable class=config owner=local-auth
70
+ * write="`ExternalIdentityManager.link` when a signed-in user completes a
71
+ * link flow; `unlink` from the profile or the Users page"
72
+ * retention="`unlink` deletes one row; deleting the user deletes all of its
73
+ * rows (`deleteUser` → `removeAllForUser`). A row whose provider instance
74
+ * was renamed or removed stays, inert, until someone unlinks it."
75
+ */
76
+ export declare const USER_EXTERNAL_IDENTITIES_COLLECTION = "user_external_identities";
63
77
  /**
64
78
  * Declare every auth collection with the typed schema. Called by
65
79
  * `LocalAuthAddon.onInitialize` before constructing the per-collection