@camstack/system 1.2.443 → 1.2.444

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (101) hide show
  1. package/assets/record-entries/icon.svg +8 -0
  2. package/dist/addon-runner.js +41 -11
  3. package/dist/addon-runner.mjs +42 -12
  4. package/dist/builtins/addon-pages-aggregator/addon-pages-aggregator.addon.js +1 -1
  5. package/dist/builtins/addon-pages-aggregator/addon-pages-aggregator.addon.mjs +1 -1
  6. package/dist/builtins/addon-widgets-aggregator/addon-widgets-aggregator.addon.js +1 -1
  7. package/dist/builtins/addon-widgets-aggregator/addon-widgets-aggregator.addon.mjs +1 -1
  8. package/dist/builtins/alerts/alerts.addon.d.ts +10 -2
  9. package/dist/builtins/alerts/alerts.addon.js +43 -10
  10. package/dist/builtins/alerts/alerts.addon.mjs +43 -10
  11. package/dist/builtins/autotrack/index.js +1 -1
  12. package/dist/builtins/autotrack/index.mjs +1 -1
  13. package/dist/builtins/backup-orchestrator/backup-orchestrator.addon.js +2 -2
  14. package/dist/builtins/backup-orchestrator/backup-orchestrator.addon.mjs +2 -2
  15. package/dist/builtins/calendars/calendars.addon.js +1 -1
  16. package/dist/builtins/calendars/calendars.addon.mjs +1 -1
  17. package/dist/builtins/camera-grid/index.js +1 -1
  18. package/dist/builtins/camera-grid/index.mjs +1 -1
  19. package/dist/builtins/composer/composer.addon.js +2 -2
  20. package/dist/builtins/composer/composer.addon.mjs +2 -2
  21. package/dist/builtins/console-logging/index.js +1 -1
  22. package/dist/builtins/console-logging/index.mjs +1 -1
  23. package/dist/builtins/core-blocks/core-blocks.addon.js +2 -2
  24. package/dist/builtins/core-blocks/core-blocks.addon.mjs +2 -2
  25. package/dist/builtins/device-manager/device-manager.addon.js +1 -1
  26. package/dist/builtins/device-manager/device-manager.addon.mjs +1 -1
  27. package/dist/builtins/hub-forwarder/index.js +1 -1
  28. package/dist/builtins/hub-forwarder/index.mjs +1 -1
  29. package/dist/builtins/keychain/index.js +3 -3
  30. package/dist/builtins/keychain/index.mjs +3 -3
  31. package/dist/builtins/liveness-monitor/liveness-monitor.addon.js +1 -1
  32. package/dist/builtins/liveness-monitor/liveness-monitor.addon.mjs +1 -1
  33. package/dist/builtins/local-auth/local-auth.addon.js +2 -2
  34. package/dist/builtins/local-auth/local-auth.addon.mjs +2 -2
  35. package/dist/builtins/local-network/local-network.addon.js +2 -2
  36. package/dist/builtins/local-network/local-network.addon.mjs +2 -2
  37. package/dist/builtins/loki-logging/index.js +1 -1
  38. package/dist/builtins/loki-logging/index.mjs +1 -1
  39. package/dist/builtins/native-metrics/native-metrics.addon.js +1 -1
  40. package/dist/builtins/native-metrics/native-metrics.addon.mjs +1 -1
  41. package/dist/builtins/platform-probe/index.js +1 -1
  42. package/dist/builtins/platform-probe/index.mjs +1 -1
  43. package/dist/builtins/record-entries/entries-service.d.ts +42 -0
  44. package/dist/builtins/record-entries/index.d.ts +1 -0
  45. package/dist/builtins/record-entries/index.js +142 -0
  46. package/dist/builtins/record-entries/index.mjs +136 -0
  47. package/dist/builtins/record-entries/record-entries.addon.d.ts +13 -0
  48. package/dist/builtins/remote-access-orchestrator/remote-access-orchestrator.addon.js +1 -1
  49. package/dist/builtins/remote-access-orchestrator/remote-access-orchestrator.addon.mjs +1 -1
  50. package/dist/builtins/snapshot/index.js +1 -1
  51. package/dist/builtins/snapshot/index.mjs +1 -1
  52. package/dist/builtins/sqlite-storage/file-host-client.d.ts +2 -0
  53. package/dist/builtins/sqlite-storage/file-host-handlers.d.ts +4 -0
  54. package/dist/builtins/sqlite-storage/file-host-protocol.d.ts +7 -1
  55. package/dist/builtins/sqlite-storage/filesystem-storage.addon.js +1 -1
  56. package/dist/builtins/sqlite-storage/filesystem-storage.addon.mjs +1 -1
  57. package/dist/builtins/sqlite-storage/index.js +1 -1
  58. package/dist/builtins/sqlite-storage/index.mjs +1 -1
  59. package/dist/builtins/sqlite-storage/owned-sqlite-file.d.ts +7 -0
  60. package/dist/builtins/sqlite-storage/placement-router.d.ts +5 -0
  61. package/dist/builtins/sqlite-storage/records/records-catalog.d.ts +29 -0
  62. package/dist/builtins/sqlite-storage/records/records-engine-types.d.ts +46 -0
  63. package/dist/builtins/sqlite-storage/records/records-engine.d.ts +90 -0
  64. package/dist/builtins/sqlite-storage/records/records-explain.d.ts +18 -0
  65. package/dist/builtins/sqlite-storage/records/records-plan.d.ts +90 -0
  66. package/dist/builtins/sqlite-storage/records/records-probe.d.ts +33 -0
  67. package/dist/builtins/sqlite-storage/records/records-provider.d.ts +59 -0
  68. package/dist/builtins/sqlite-storage/records/records-rows.d.ts +46 -0
  69. package/dist/builtins/sqlite-storage/records/records-sql.d.ts +41 -0
  70. package/dist/builtins/sqlite-storage/sqlite-settings-backend.d.ts +0 -10
  71. package/dist/builtins/sqlite-storage/sqlite-settings.addon.d.ts +8 -0
  72. package/dist/builtins/sqlite-storage/sqlite-settings.addon.js +337 -4
  73. package/dist/builtins/sqlite-storage/sqlite-settings.addon.mjs +337 -4
  74. package/dist/builtins/sqlite-storage/storage-admin-provider.d.ts +7 -1
  75. package/dist/builtins/storage-orchestrator/storage-orchestrator.addon.js +1 -1
  76. package/dist/builtins/storage-orchestrator/storage-orchestrator.addon.mjs +1 -1
  77. package/dist/builtins/system-config/system-config.addon.js +2 -2
  78. package/dist/builtins/system-config/system-config.addon.mjs +2 -2
  79. package/dist/builtins/winston-logging/index.js +1 -1
  80. package/dist/builtins/winston-logging/index.mjs +1 -1
  81. package/dist/{composition-sources-C8tUG2uL.mjs → composition-sources-C3rKncIF.mjs} +1 -1
  82. package/dist/{composition-sources-BUXX1e8j.js → composition-sources-NAPZddic.js} +1 -1
  83. package/dist/{constants-CGwVaAV3.mjs → constants-BKX2QnIg.mjs} +1 -1
  84. package/dist/{constants-DWmm7_of.js → constants-BXiNEIeV.js} +1 -1
  85. package/dist/{device-ca-DGayRmC0.js → device-ca-DT9X2S6d.js} +1 -1
  86. package/dist/{device-ca-DBfiJ_SB.mjs → device-ca-jxjSL8Ov.mjs} +1 -1
  87. package/dist/{dist-D9qT3jHr.js → dist-D1vECb_6.js} +1172 -86
  88. package/dist/{dist-Bxt_S-9a.mjs → dist-DERK-gP5.mjs} +1011 -87
  89. package/dist/file-host-worker.js +11 -1
  90. package/dist/file-host-worker.mjs +11 -1
  91. package/dist/{hub-mdns-ciao-DpPcQDg-.mjs → hub-mdns-ciao-CRaC97V0.mjs} +1 -1
  92. package/dist/{hub-mdns-ciao-B-wk9nzx.js → hub-mdns-ciao-Cah9GCIg.js} +1 -1
  93. package/dist/index.js +50 -18
  94. package/dist/index.mjs +51 -19
  95. package/dist/kernel/moleculer/records-api-transport.d.ts +9 -0
  96. package/dist/kernel/settings-view-types.d.ts +0 -7
  97. package/dist/{restore-archive-BMNXwWWD.js → restore-archive-Dy-qKTdF.js} +1 -1
  98. package/dist/{restore-archive-9CGgeBzD.mjs → restore-archive-daKyE24F.mjs} +1 -1
  99. package/dist/{wal-maintenance-cRHR4rUY.js → wal-maintenance-dAv4IdzC.js} +0 -0
  100. package/dist/{wal-maintenance-sIB32ONp.mjs → wal-maintenance-zRc24mOC.mjs} +0 -0
  101. package/package.json +22 -1
@@ -1,5 +1,5 @@
1
1
  require("./chunk-Cek0wNdY.js");
2
- const require_wal_maintenance = require("./wal-maintenance-cRHR4rUY.js");
2
+ const require_wal_maintenance = require("./wal-maintenance-dAv4IdzC.js");
3
3
  let node_worker_threads = require("node:worker_threads");
4
4
  //#region src/builtins/sqlite-storage/file-host-worker.ts
5
5
  /**
@@ -90,6 +90,11 @@ async function main() {
90
90
  return;
91
91
  }
92
92
  const dataTarget = backend;
93
+ const db = backend.getDatabase();
94
+ const recordsEngine = db === null || spec.databaseId === "history" ? null : new require_wal_maintenance.RecordsEngine(db, {
95
+ databaseId: spec.databaseId,
96
+ logger: logger.child("Records")
97
+ });
93
98
  const vectorTarget = vectorIndex === null ? null : require_wal_maintenance.vectorProviderOf(vectorIndex);
94
99
  const control = require_wal_maintenance.controlTargetOf(backend, node_worker_threads.threadId);
95
100
  const answer = (id, result, transfer = false) => post({
@@ -124,6 +129,11 @@ async function main() {
124
129
  answer(request.id, await require_wal_maintenance.callVector(vectorTarget, request.op, require_wal_maintenance.trustInput(request.input)), true);
125
130
  return;
126
131
  }
132
+ if (request.kind === "records") {
133
+ if (recordsEngine === null) throw new Error(`database "${spec.databaseId}" is not open`);
134
+ answer(request.id, await require_wal_maintenance.callRecords(recordsEngine, request.op, require_wal_maintenance.trustInput(request.input)));
135
+ return;
136
+ }
127
137
  answer(request.id, require_wal_maintenance.callControl(control, request.op, require_wal_maintenance.trustInput(request.input)));
128
138
  } catch (err) {
129
139
  refuse(request.id, err);
@@ -1,4 +1,4 @@
1
- import { C as callData, S as callControl, T as controlTargetOf, a as WalMaintenance, b as trustInput, c as SqliteSettingsBackend, g as collectTransferables, m as serializeError, o as createVectorIndex, s as vectorProviderOf, v as isFileHostRequest, w as callVector, y as isFileHostWorkerData } from "./wal-maintenance-sIB32ONp.mjs";
1
+ import { C as callControl, D as controlTargetOf, E as callVector, S as RecordsEngine, T as callRecords, a as WalMaintenance, b as trustInput, c as SqliteSettingsBackend, g as collectTransferables, m as serializeError, o as createVectorIndex, s as vectorProviderOf, v as isFileHostRequest, w as callData, y as isFileHostWorkerData } from "./wal-maintenance-zRc24mOC.mjs";
2
2
  import { parentPort, threadId, workerData } from "node:worker_threads";
3
3
  //#region src/builtins/sqlite-storage/file-host-worker.ts
4
4
  /**
@@ -89,6 +89,11 @@ async function main() {
89
89
  return;
90
90
  }
91
91
  const dataTarget = backend;
92
+ const db = backend.getDatabase();
93
+ const recordsEngine = db === null || spec.databaseId === "history" ? null : new RecordsEngine(db, {
94
+ databaseId: spec.databaseId,
95
+ logger: logger.child("Records")
96
+ });
92
97
  const vectorTarget = vectorIndex === null ? null : vectorProviderOf(vectorIndex);
93
98
  const control = controlTargetOf(backend, threadId);
94
99
  const answer = (id, result, transfer = false) => post({
@@ -123,6 +128,11 @@ async function main() {
123
128
  answer(request.id, await callVector(vectorTarget, request.op, trustInput(request.input)), true);
124
129
  return;
125
130
  }
131
+ if (request.kind === "records") {
132
+ if (recordsEngine === null) throw new Error(`database "${spec.databaseId}" is not open`);
133
+ answer(request.id, await callRecords(recordsEngine, request.op, trustInput(request.input)));
134
+ return;
135
+ }
126
136
  answer(request.id, callControl(control, request.op, trustInput(request.input)));
127
137
  } catch (err) {
128
138
  refuse(request.id, err);
@@ -1,5 +1,5 @@
1
1
  import { o as __toESM } from "./chunk-CNf5ZN-e.mjs";
2
- import { Ti as userError } from "./dist-Bxt_S-9a.mjs";
2
+ import { Qi as userError } from "./dist-DERK-gP5.mjs";
3
3
  import { f as X509Certificate$1 } from "./x509.es-DK__ETIe.mjs";
4
4
  import { A as isConstrainedCa, E as reasonRequiresNewCa, M as permitsIdentity, P as readNameConstraints, T as evaluateExistingCert, _ as issueLeaf, g as generateCa, v as loadCa, y as collectCertIdentity } from "./agent-https-U0d4uvn2.mjs";
5
5
  import { X509Certificate, createPrivateKey } from "node:crypto";
@@ -1,5 +1,5 @@
1
1
  const require_chunk = require("./chunk-Cek0wNdY.js");
2
- const require_dist = require("./dist-D9qT3jHr.js");
2
+ const require_dist = require("./dist-D1vECb_6.js");
3
3
  const require_x509_es = require("./x509.es-C4cOo48M.js");
4
4
  const require_agent_https = require("./agent-https-DlpTMDqA.js");
5
5
  let node_crypto = require("node:crypto");
package/dist/index.js CHANGED
@@ -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-D9qT3jHr.js");
4
- const require_device_ca = require("./device-ca-DGayRmC0.js");
3
+ const require_dist = require("./dist-D1vECb_6.js");
4
+ const require_device_ca = require("./device-ca-DT9X2S6d.js");
5
5
  const require_builtins_alerts_alerts_addon = require("./builtins/alerts/alerts.addon.js");
6
6
  require("./builtins/alerts/index.js");
7
7
  const require_builtins_calendars_calendars_addon = require("./builtins/calendars/calendars.addon.js");
@@ -25,21 +25,21 @@ require("./builtins/local-auth/index.js");
25
25
  const require_builtins_loki_logging_index = require("./builtins/loki-logging/index.js");
26
26
  const require_builtins_native_metrics_native_metrics_addon = require("./builtins/native-metrics/native-metrics.addon.js");
27
27
  const require_builtins_sqlite_storage_filesystem_storage_addon = require("./builtins/sqlite-storage/filesystem-storage.addon.js");
28
- const require_wal_maintenance = require("./wal-maintenance-cRHR4rUY.js");
28
+ const require_wal_maintenance = require("./wal-maintenance-dAv4IdzC.js");
29
29
  const require_builtins_sqlite_storage_sqlite_settings_addon = require("./builtins/sqlite-storage/sqlite-settings.addon.js");
30
30
  const require_builtins_sqlite_storage_index = require("./builtins/sqlite-storage/index.js");
31
31
  const require_builtins_storage_orchestrator_storage_orchestrator_addon = require("./builtins/storage-orchestrator/storage-orchestrator.addon.js");
32
32
  require("./builtins/storage-orchestrator/index.js");
33
33
  const require_agent_https = require("./agent-https-DlpTMDqA.js");
34
- const require_constants = require("./constants-DWmm7_of.js");
34
+ const require_constants = require("./constants-BXiNEIeV.js");
35
35
  const require_builtins_system_config_system_config_addon = require("./builtins/system-config/system-config.addon.js");
36
36
  require("./builtins/system-config/index.js");
37
37
  const require_builtins_winston_logging_index = require("./builtins/winston-logging/index.js");
38
38
  const require_custom_action_registry = require("./custom-action-registry-COyb49zm.js");
39
- const require_hub_mdns_ciao = require("./hub-mdns-ciao-B-wk9nzx.js");
39
+ const require_hub_mdns_ciao = require("./hub-mdns-ciao-Cah9GCIg.js");
40
40
  const require_platform_key_source = require("./platform-key-source-Di7HrlGR.js");
41
41
  const require_resource_monitor = require("./resource-monitor-mio9dSCT.js");
42
- const require_restore_archive = require("./restore-archive-BMNXwWWD.js");
42
+ const require_restore_archive = require("./restore-archive-Dy-qKTdF.js");
43
43
  let zod = require("zod");
44
44
  let node_crypto = require("node:crypto");
45
45
  node_crypto = require_chunk.__toESM(node_crypto);
@@ -11377,8 +11377,10 @@ function buildOneCapRouter(def, primitives, services) {
11377
11377
  continue;
11378
11378
  }
11379
11379
  if (method.isObject) {
11380
+ const stampedCap = require_dist.CALLER_STAMPED_CAPABILITIES.includes(capName);
11380
11381
  const schema = nodeIdData ? inputSchema : require_dist.looseSchema(inputSchema);
11381
- procedures[method.name] = base.input(schema)[procKind](({ input, ctx }) => {
11382
+ procedures[method.name] = base.input(schema)[procKind](({ input: wireInput, ctx }) => {
11383
+ const input = stampedCap ? require_dist.withoutCallerStamp(wireInput) : wireInput;
11382
11384
  if (nodeIdData) return invokeCapMethod(requireLocal(capName, () => getLocal(ctx), services), method, method.callerRequired ? injectCaller(stripKeys(input, []).rest, ctx, capName, method.name, services) : input, capName, isCollection, services);
11383
11385
  if (isCollection) {
11384
11386
  const { rest, picked } = stripKeys(input, ["nodeId", "addonId"]);
@@ -15670,6 +15672,29 @@ function asName(value) {
15670
15672
  return typeof value === "string" && value.length > 0 ? value : null;
15671
15673
  }
15672
15674
  //#endregion
15675
+ //#region src/kernel/moleculer/records-api-transport.ts
15676
+ function recordsTransportOf(api) {
15677
+ const r = api.records;
15678
+ return {
15679
+ declareKinds: (input) => r.declareKinds.mutate(input),
15680
+ get: (input) => r.get.query(input),
15681
+ getMany: (input) => r.getMany.query(input),
15682
+ secretRefs: (input) => r.secretRefs.query(input),
15683
+ put: (input) => r.put.mutate(input),
15684
+ putMany: (input) => r.putMany.mutate(input),
15685
+ patch: (input) => r.patch.mutate(input),
15686
+ delete: (input) => r.delete.mutate(input),
15687
+ deleteMany: (input) => r.deleteMany.mutate(input),
15688
+ query: (input) => r.query.query(input),
15689
+ count: (input) => r.count.query(input),
15690
+ histogram: (input) => r.histogram.query(input),
15691
+ aggregate: (input) => r.aggregate.query(input),
15692
+ deleteWhere: (input) => r.deleteWhere.mutate(input),
15693
+ deleteDevice: (input) => r.deleteDevice.mutate(input),
15694
+ allocateId: (input) => r.allocateId.mutate(input)
15695
+ };
15696
+ }
15697
+ //#endregion
15673
15698
  //#region src/kernel/moleculer/children-batch-loader.ts
15674
15699
  /**
15675
15700
  * Narrow an untyped cap answer to the fields the reconcile reads.
@@ -23567,6 +23592,19 @@ async function buildAddonContext(runtime, declaration, dataDir, options) {
23567
23592
  nodeId
23568
23593
  });
23569
23594
  workerDisposerChain.add(() => peerBytesFacility.dispose());
23595
+ const secrets = (0, _camstack_types_addon.createSecretsAccess)({
23596
+ owner: addonId,
23597
+ transport: {
23598
+ put: (input) => api.keychain.put.mutate({
23599
+ ref: input.ref,
23600
+ value: input.value
23601
+ }),
23602
+ resolve: (input) => api.keychain.resolve.query({ refs: [...input.refs] }),
23603
+ delete: (input) => api.keychain.delete.mutate({ refs: [...input.refs] }),
23604
+ getState: () => api.keychain.getState.query({})
23605
+ },
23606
+ eventBus: scopedEventBus
23607
+ });
23570
23608
  return {
23571
23609
  id: addonId,
23572
23610
  logger: scopedLogger,
@@ -23579,18 +23617,12 @@ async function buildAddonContext(runtime, declaration, dataDir, options) {
23579
23617
  api,
23580
23618
  deps: new AddonDepsManager(addonDataDir, scopedLogger),
23581
23619
  settings: settingsView,
23582
- secrets: (0, _camstack_types_addon.createSecretsAccess)({
23620
+ secrets,
23621
+ records: (0, _camstack_types_addon.createRecordsAccess)({
23583
23622
  owner: addonId,
23584
- transport: {
23585
- put: (input) => api.keychain.put.mutate({
23586
- ref: input.ref,
23587
- value: input.value
23588
- }),
23589
- resolve: (input) => api.keychain.resolve.query({ refs: [...input.refs] }),
23590
- delete: (input) => api.keychain.delete.mutate({ refs: [...input.refs] }),
23591
- getState: () => api.keychain.getState.query({})
23592
- },
23593
- eventBus: scopedEventBus
23623
+ transport: recordsTransportOf(api),
23624
+ secrets,
23625
+ logger: scopedLogger
23594
23626
  }),
23595
23627
  kernel: (() => {
23596
23628
  const streamProbe = runtime.mode === "broker" ? {
package/dist/index.mjs CHANGED
@@ -1,6 +1,6 @@
1
1
  import { i as __require } from "./chunk-CNf5ZN-e.mjs";
2
- import { $n as splitTranslationRef, $r as expandCapMethods, Ar as errMsg$1, B as METHOD_ACCESS_MAP, Dn as objectInputDeclaresAddonId, Ei as EventCategory$1, Hr as asNumber, Ir as RUNTIME_DEFAULTS, Jr as createEvent$1, Jt as extractNestedAddonId, Kn as scopesAllowAddon, Lr as ReadinessRegistry, Mr as DATAPLANE_SECRET_HEADER$1, Nn as procedureAuthKey, Nr as DEVICE_SETTINGS_CONTRIBUTION_METHODS, On as objectInputDeclaresRequiredDeviceId, Pr as DEVICE_STATUS_METHOD, R as LOG_LEVEL_RANK, Rr as ReadinessTimeoutError, Ti as userError, Un as resolveMethodAuth, Ur as asString$1, Vr as asJsonObject$1, Zr as emitDownForOwnedCaps, _ as CatalogFileSchema, _n as logLevelAtMost, at as addonSettingsCapability, cn as kebabToCamel$1, d as CATALOG_LANGS, en as interpolate, fi as parseJsonObject, gi as resolveCapMount, hi as readinessKey, n as AGENT_MDNS_TXT_KEYS, nn as isArrayOutputSchema, on as isObjectInput, pi as parseJsonUnknown, pn as lifecycleJobSchema, qn as scopesAllowDeviceCap, r as ALL_CAPABILITY_DEFINITIONS, rn as isCollectionArrayMethod, sn as isVoidInput, sr as supportedRuntimes, t as AGENT_MDNS_SERVICE_TYPE, vi as scopeKey, vn as looseSchema } from "./dist-Bxt_S-9a.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-DBfiJ_SB.mjs";
2
+ import { $i as EventCategory$1, $r as ReadinessRegistry, Gi as scopeKey, Kn as resolveMethodAuth, Lr as DATAPLANE_SECRET_HEADER$1, On as objectInputDeclaresAddonId, Pn as procedureAuthKey, Pr as errMsg$1, Qi as userError, Qr as RUNTIME_DEFAULTS, Ri as parseJsonObject, Rr as DEVICE_SETTINGS_CONTRIBUTION_METHODS, Si as emitDownForOwnedCaps, Ui as resolveCapMount, V as METHOD_ACCESS_MAP, Vi as readinessKey, Xn as scopesAllowDeviceCap, Yn as scopesAllowAddon, Yt as extractNestedAddonId, c as CALLER_STAMPED_CAPABILITIES, cn as isVoidInput, di as asNumber, ei as ReadinessTimeoutError, f as CATALOG_LANGS, fi as asString$1, in as isCollectionArrayMethod, kn as objectInputDeclaresRequiredDeviceId, ln as kebabToCamel$1, mn as lifecycleJobSchema, n as AGENT_MDNS_TXT_KEYS, nr as splitTranslationRef, ot as addonSettingsCapability, r as ALL_CAPABILITY_DEFINITIONS, rn as isArrayOutputSchema, sn as isObjectInput, t as AGENT_MDNS_SERVICE_TYPE, tn as interpolate, ui as asJsonObject$1, ur as supportedRuntimes, v as CatalogFileSchema, vn as logLevelAtMost, vr as withoutCallerStamp, wi as expandCapMethods, yi as createEvent$1, yn as looseSchema, z as LOG_LEVEL_RANK, zi as parseJsonUnknown, zr as DEVICE_STATUS_METHOD } from "./dist-DERK-gP5.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-jxjSL8Ov.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";
@@ -24,21 +24,21 @@ import "./builtins/local-auth/index.mjs";
24
24
  import { LokiDestination, LokiLoggingAddon } from "./builtins/loki-logging/index.mjs";
25
25
  import NativeMetricsAddon, { a as NativeMetricsProvider, n as nodeProcReader, r as parseProcStat } from "./builtins/native-metrics/native-metrics.addon.mjs";
26
26
  import { FilesystemStorageAddon, t as FilesystemStorageProvider } from "./builtins/sqlite-storage/filesystem-storage.addon.mjs";
27
- import { c as SqliteSettingsBackend } from "./wal-maintenance-sIB32ONp.mjs";
27
+ import { c as SqliteSettingsBackend } from "./wal-maintenance-zRc24mOC.mjs";
28
28
  import { SqliteSettingsAddon } from "./builtins/sqlite-storage/sqlite-settings.addon.mjs";
29
29
  import { ConfigStore, DeviceStore } from "./builtins/sqlite-storage/index.mjs";
30
30
  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";
31
31
  import "./builtins/storage-orchestrator/index.mjs";
32
32
  import { A as isConstrainedCa, C as MAX_LEAF_VALIDITY_DAYS, D as PERMITTED_DNS_SUFFIXES, F as AGENT_HTTPS_NAMES_COLLECTION, I as AGENT_HTTPS_NAMES_COLUMNS, L as AgentHttpsNames, M as permitsIdentity, N as permitsName, O as PERMITTED_IP_RANGES, P as readNameConstraints, R as getProcessAgentHttpsNames, S as LEAF_RENEWAL_WINDOW_DAYS, T as evaluateExistingCert, a as collectAgentNames, b as systemHostFacts, c as installAgentHttps, d as issueAgentHttpsLeaf, f as loadAgentHttps, h as CA_COMMON_NAME, i as certificateNames, j as isLocalOnlyHostname, k as buildNameConstraintSet, l as isContainerBridgeAddress, m as pinnedHttpsCaFingerprint, n as acceptAgentSans, o as createAgentHttpsRequest, p as pemDigest, r as agentHttpsPaths, s as describeHttpsLeaf, t as AgentHttpsInstallError, u as isPrivateAddress, w as SERVER_AUTH_OID, x as CA_VALIDITY_DAYS, y as collectCertIdentity, z as setProcessAgentHttpsNames } from "./agent-https-U0d4uvn2.mjs";
33
- 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-CGwVaAV3.mjs";
33
+ 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-BKX2QnIg.mjs";
34
34
  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";
35
35
  import "./builtins/system-config/index.mjs";
36
36
  import { WinstonDestination, WinstonLoggingAddon } from "./builtins/winston-logging/index.mjs";
37
37
  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-stpC3Zy-.mjs";
38
- import { A as allFamiliesListenHost, C as caReplacementMarkerFile, D as replaceUnconstrainedLocalCa, E as reissueTlsLeaf, F as registerLanHttpHandler, M as bindPendingLanHttp, N as closeLanHttp, O as retirePreviousLocalCa, P as readLanHttpState, S as validateUploadedTls, T as loadTlsCert, _ as splitPemCertificates, a as storeUploadedCertificate, b as chainsToPublicRoot, c as leafFingerprintOf, d as servedHttpsLeafFingerprint, f as prepareBootTls, g as readTlsMode, h as readTlsAccessStatus, i as revertToGeneratedCertificate, j as applyLanHttp, k as DEFAULT_LAN_HTTP_PORT, l as registerHttpsListener, m as readExtraSans, n as applyCertificateToListener, o as useStoredUploadedCertificate, p as UPLOADED_CA_FILE, r as regenerateCertificate, s as clearHttpsListener, t as createCiaoPublisher, u as reloadHttpsListener, v as writeExtraSans, w as ensureTlsCert, x as checkUploadedCa, y as writeTlsMode } from "./hub-mdns-ciao-DpPcQDg-.mjs";
38
+ import { A as allFamiliesListenHost, C as caReplacementMarkerFile, D as replaceUnconstrainedLocalCa, E as reissueTlsLeaf, F as registerLanHttpHandler, M as bindPendingLanHttp, N as closeLanHttp, O as retirePreviousLocalCa, P as readLanHttpState, S as validateUploadedTls, T as loadTlsCert, _ as splitPemCertificates, a as storeUploadedCertificate, b as chainsToPublicRoot, c as leafFingerprintOf, d as servedHttpsLeafFingerprint, f as prepareBootTls, g as readTlsMode, h as readTlsAccessStatus, i as revertToGeneratedCertificate, j as applyLanHttp, k as DEFAULT_LAN_HTTP_PORT, l as registerHttpsListener, m as readExtraSans, n as applyCertificateToListener, o as useStoredUploadedCertificate, p as UPLOADED_CA_FILE, r as regenerateCertificate, s as clearHttpsListener, t as createCiaoPublisher, u as reloadHttpsListener, v as writeExtraSans, w as ensureTlsCert, x as checkUploadedCa, y as writeTlsMode } from "./hub-mdns-ciao-CRaC97V0.mjs";
39
39
  import { n as getPlatformKeychainKey, r as setPlatformKeychainKey, t as clearPlatformKeychainKey } from "./platform-key-source-BWlq0jjn.mjs";
40
40
  import { n as getSinglePidStats, t as getPidStats } from "./resource-monitor-Di9daRwI.mjs";
41
- 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-9CGgeBzD.mjs";
41
+ 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-daKyE24F.mjs";
42
42
  import { z } from "zod";
43
43
  import * as crypto$1 from "node:crypto";
44
44
  import { createHash, randomBytes, randomUUID } from "node:crypto";
@@ -52,7 +52,7 @@ import { promisify } from "node:util";
52
52
  import * as os$1 from "node:os";
53
53
  import { tmpdir } from "node:os";
54
54
  import { pathToFileURL } from "node:url";
55
- 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";
55
+ 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, createRecordsAccess, createSecretsAccess, deviceOpsCapability, emitReadiness, errMsg, expandCapMethods as expandCapMethods$1, maskUrlCredentials, readErrorI18n, readNodePin, scopeKey as scopeKey$1, scrubKnownSecrets, sleep, withCapInputDefaults } from "@camstack/types/addon";
56
56
  import * as fs from "node:fs";
57
57
  import { accessSync, constants, createReadStream, createWriteStream, existsSync, readFileSync, readdirSync } from "node:fs";
58
58
  import { execFile, spawn } from "node:child_process";
@@ -11374,8 +11374,10 @@ function buildOneCapRouter(def, primitives, services) {
11374
11374
  continue;
11375
11375
  }
11376
11376
  if (method.isObject) {
11377
+ const stampedCap = CALLER_STAMPED_CAPABILITIES.includes(capName);
11377
11378
  const schema = nodeIdData ? inputSchema : looseSchema(inputSchema);
11378
- procedures[method.name] = base.input(schema)[procKind](({ input, ctx }) => {
11379
+ procedures[method.name] = base.input(schema)[procKind](({ input: wireInput, ctx }) => {
11380
+ const input = stampedCap ? withoutCallerStamp(wireInput) : wireInput;
11379
11381
  if (nodeIdData) return invokeCapMethod(requireLocal(capName, () => getLocal(ctx), services), method, method.callerRequired ? injectCaller(stripKeys(input, []).rest, ctx, capName, method.name, services) : input, capName, isCollection, services);
11380
11382
  if (isCollection) {
11381
11383
  const { rest, picked } = stripKeys(input, ["nodeId", "addonId"]);
@@ -15667,6 +15669,29 @@ function asName(value) {
15667
15669
  return typeof value === "string" && value.length > 0 ? value : null;
15668
15670
  }
15669
15671
  //#endregion
15672
+ //#region src/kernel/moleculer/records-api-transport.ts
15673
+ function recordsTransportOf(api) {
15674
+ const r = api.records;
15675
+ return {
15676
+ declareKinds: (input) => r.declareKinds.mutate(input),
15677
+ get: (input) => r.get.query(input),
15678
+ getMany: (input) => r.getMany.query(input),
15679
+ secretRefs: (input) => r.secretRefs.query(input),
15680
+ put: (input) => r.put.mutate(input),
15681
+ putMany: (input) => r.putMany.mutate(input),
15682
+ patch: (input) => r.patch.mutate(input),
15683
+ delete: (input) => r.delete.mutate(input),
15684
+ deleteMany: (input) => r.deleteMany.mutate(input),
15685
+ query: (input) => r.query.query(input),
15686
+ count: (input) => r.count.query(input),
15687
+ histogram: (input) => r.histogram.query(input),
15688
+ aggregate: (input) => r.aggregate.query(input),
15689
+ deleteWhere: (input) => r.deleteWhere.mutate(input),
15690
+ deleteDevice: (input) => r.deleteDevice.mutate(input),
15691
+ allocateId: (input) => r.allocateId.mutate(input)
15692
+ };
15693
+ }
15694
+ //#endregion
15670
15695
  //#region src/kernel/moleculer/children-batch-loader.ts
15671
15696
  /**
15672
15697
  * Narrow an untyped cap answer to the fields the reconcile reads.
@@ -23564,6 +23589,19 @@ async function buildAddonContext(runtime, declaration, dataDir, options) {
23564
23589
  nodeId
23565
23590
  });
23566
23591
  workerDisposerChain.add(() => peerBytesFacility.dispose());
23592
+ const secrets = createSecretsAccess({
23593
+ owner: addonId,
23594
+ transport: {
23595
+ put: (input) => api.keychain.put.mutate({
23596
+ ref: input.ref,
23597
+ value: input.value
23598
+ }),
23599
+ resolve: (input) => api.keychain.resolve.query({ refs: [...input.refs] }),
23600
+ delete: (input) => api.keychain.delete.mutate({ refs: [...input.refs] }),
23601
+ getState: () => api.keychain.getState.query({})
23602
+ },
23603
+ eventBus: scopedEventBus
23604
+ });
23567
23605
  return {
23568
23606
  id: addonId,
23569
23607
  logger: scopedLogger,
@@ -23576,18 +23614,12 @@ async function buildAddonContext(runtime, declaration, dataDir, options) {
23576
23614
  api,
23577
23615
  deps: new AddonDepsManager(addonDataDir, scopedLogger),
23578
23616
  settings: settingsView,
23579
- secrets: createSecretsAccess({
23617
+ secrets,
23618
+ records: createRecordsAccess({
23580
23619
  owner: addonId,
23581
- transport: {
23582
- put: (input) => api.keychain.put.mutate({
23583
- ref: input.ref,
23584
- value: input.value
23585
- }),
23586
- resolve: (input) => api.keychain.resolve.query({ refs: [...input.refs] }),
23587
- delete: (input) => api.keychain.delete.mutate({ refs: [...input.refs] }),
23588
- getState: () => api.keychain.getState.query({})
23589
- },
23590
- eventBus: scopedEventBus
23620
+ transport: recordsTransportOf(api),
23621
+ secrets,
23622
+ logger: scopedLogger
23591
23623
  }),
23592
23624
  kernel: (() => {
23593
23625
  const streamProbe = runtime.mode === "broker" ? {
@@ -0,0 +1,9 @@
1
+ /**
2
+ * The wire of `ctx.records` for an addon that runs in a forked runner or on an
3
+ * agent (D881): every call is a cap call on `ctx.api.records`, and the parent
4
+ * (or, on an agent, the agent and then `$hub-cap-fwd`) STAMPS who is calling
5
+ * from the connection the call arrived on. The input carries no identity, so
6
+ * there is nothing here an addon could change to read another addon's kind.
7
+ */
8
+ import type { AddonApi, RecordsTransport } from "@camstack/types";
9
+ export declare function recordsTransportOf(api: AddonApi): RecordsTransport;
@@ -53,13 +53,6 @@ export interface ISettingsStore {
53
53
  /** Addon-level global settings (apply to every device unless overridden). */
54
54
  getAllAddon(addonId: string): Record<string, unknown>;
55
55
  setAllAddon(addonId: string, config: Record<string, unknown>): void;
56
- /** Legacy per-provider settings (used by some older wiring paths). */
57
- getAllProvider(providerId: string): Record<string, unknown>;
58
- setProvider(providerId: string, key: string, value: unknown): void;
59
- /** Legacy flat per-device settings. Kept for backward compatibility
60
- * with pre-addon wiring; new code should use the addon-device API. */
61
- getAllDevice(deviceId: string): Record<string, unknown>;
62
- setDevice(deviceId: string, key: string, value: unknown): void;
63
56
  /**
64
57
  * Per-device runtime state — the whole cap-slice map as ONE row in the
65
58
  * `device-runtime-state` collection.
@@ -1,5 +1,5 @@
1
1
  const require_chunk = require("./chunk-Cek0wNdY.js");
2
- const require_dist = require("./dist-D9qT3jHr.js");
2
+ const require_dist = require("./dist-D1vECb_6.js");
3
3
  let node_crypto = require("node:crypto");
4
4
  let buffer = require("buffer");
5
5
  let node_fs_promises = require("node:fs/promises");
@@ -1,4 +1,4 @@
1
- import { b as DATABASE_SNAPSHOT_SUFFIX } from "./dist-Bxt_S-9a.mjs";
1
+ import { x as DATABASE_SNAPSHOT_SUFFIX } from "./dist-DERK-gP5.mjs";
2
2
  import { createCipheriv, createDecipheriv, createHash, createPrivateKey, createPublicKey, diffieHellman, generateKeyPairSync, hkdfSync, randomBytes } from "node:crypto";
3
3
  import { Buffer as Buffer$1 } from "buffer";
4
4
  import * as fsp from "node:fs/promises";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camstack/system",
3
- "version": "1.2.443",
3
+ "version": "1.2.444",
4
4
  "description": "Core addon for CamStack — builtins, pipeline, process management, auth, logging, events",
5
5
  "keywords": [
6
6
  "camstack",
@@ -75,6 +75,9 @@
75
75
  },
76
76
  {
77
77
  "name": "storage-admin"
78
+ },
79
+ {
80
+ "name": "records"
78
81
  }
79
82
  ]
80
83
  },
@@ -199,6 +202,24 @@
199
202
  }
200
203
  ]
201
204
  },
205
+ {
206
+ "id": "record-entries",
207
+ "category": "system",
208
+ "name": "Record Entries",
209
+ "icon": "assets/record-entries/icon.svg",
210
+ "color": "#0d9488",
211
+ "description": "The ONE admin surface for every list of user-created entries (notification targets, brokers, LLM profiles): any addon declares an entry kind with `defineEntryKind` and the entries UI lists, adds, edits and deletes it, with password fields derived from the schema (`.meta({ secret: true })`). Holds no data of its own: it acts for each entry's owner on the records door and the keychain, in-process on the hub.",
212
+ "entry": "./dist/builtins/record-entries/index.js",
213
+ "protected": true,
214
+ "execution": {
215
+ "placement": "hub-only"
216
+ },
217
+ "capabilities": [
218
+ {
219
+ "name": "record-entries"
220
+ }
221
+ ]
222
+ },
202
223
  {
203
224
  "id": "metrics-native",
204
225
  "category": "system",