@camstack/system 1.2.376 → 1.2.377

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 (92) hide show
  1. package/dist/addon-runner.js +9 -4
  2. package/dist/addon-runner.mjs +10 -5
  3. package/dist/addon-utils.js +1 -1
  4. package/dist/addon-utils.mjs +1 -1
  5. package/dist/builtins/addon-pages-aggregator/addon-pages-aggregator.addon.js +1 -1
  6. package/dist/builtins/addon-pages-aggregator/addon-pages-aggregator.addon.mjs +1 -1
  7. package/dist/builtins/addon-widgets-aggregator/addon-widgets-aggregator.addon.js +1 -1
  8. package/dist/builtins/addon-widgets-aggregator/addon-widgets-aggregator.addon.mjs +1 -1
  9. package/dist/builtins/alerts/alerts.addon.js +1 -1
  10. package/dist/builtins/alerts/alerts.addon.mjs +1 -1
  11. package/dist/builtins/autotrack/index.js +1 -1
  12. package/dist/builtins/autotrack/index.mjs +1 -1
  13. package/dist/builtins/backup-orchestrator/backup-orchestrator.addon.js +1 -1
  14. package/dist/builtins/backup-orchestrator/backup-orchestrator.addon.mjs +1 -1
  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-config-secrets.d.ts +21 -0
  26. package/dist/builtins/device-manager/device-manager.addon.js +85 -6
  27. package/dist/builtins/device-manager/device-manager.addon.mjs +85 -6
  28. package/dist/builtins/hub-forwarder/index.js +1 -1
  29. package/dist/builtins/hub-forwarder/index.mjs +1 -1
  30. package/dist/builtins/keychain/index.d.ts +1 -0
  31. package/dist/builtins/keychain/index.js +1416 -0
  32. package/dist/builtins/keychain/index.mjs +1409 -0
  33. package/dist/builtins/keychain/key-sources.d.ts +37 -0
  34. package/dist/builtins/keychain/keychain-crypto.d.ts +28 -0
  35. package/dist/builtins/keychain/keychain-service.d.ts +103 -0
  36. package/dist/builtins/keychain/keychain-store.d.ts +82 -0
  37. package/dist/builtins/keychain/keychain-usage.d.ts +6 -0
  38. package/dist/builtins/keychain/keychain.addon.d.ts +11 -0
  39. package/dist/builtins/keychain/platform-key-source.d.ts +24 -0
  40. package/dist/builtins/liveness-monitor/liveness-monitor.addon.js +1 -1
  41. package/dist/builtins/liveness-monitor/liveness-monitor.addon.mjs +1 -1
  42. package/dist/builtins/local-auth/local-auth.addon.js +19 -2
  43. package/dist/builtins/local-auth/local-auth.addon.mjs +19 -2
  44. package/dist/builtins/local-network/local-network.addon.js +1 -1
  45. package/dist/builtins/local-network/local-network.addon.mjs +1 -1
  46. package/dist/builtins/loki-logging/index.js +1 -1
  47. package/dist/builtins/loki-logging/index.mjs +1 -1
  48. package/dist/builtins/native-metrics/native-metrics.addon.js +1 -1
  49. package/dist/builtins/native-metrics/native-metrics.addon.mjs +1 -1
  50. package/dist/builtins/platform-probe/index.js +1 -1
  51. package/dist/builtins/platform-probe/index.mjs +1 -1
  52. package/dist/builtins/remote-access-orchestrator/remote-access-orchestrator.addon.js +1 -1
  53. package/dist/builtins/remote-access-orchestrator/remote-access-orchestrator.addon.mjs +1 -1
  54. package/dist/builtins/snapshot/index.js +1 -1
  55. package/dist/builtins/snapshot/index.mjs +1 -1
  56. package/dist/builtins/sqlite-storage/filesystem-storage.addon.js +1 -1
  57. package/dist/builtins/sqlite-storage/filesystem-storage.addon.mjs +1 -1
  58. package/dist/builtins/sqlite-storage/sqlite-settings.addon.js +0 -0
  59. package/dist/builtins/sqlite-storage/sqlite-settings.addon.mjs +0 -0
  60. package/dist/builtins/storage-orchestrator/location-store.d.ts +6 -0
  61. package/dist/builtins/storage-orchestrator/storage-orchestrator.addon.d.ts +15 -0
  62. package/dist/builtins/storage-orchestrator/storage-orchestrator.addon.js +74 -14
  63. package/dist/builtins/storage-orchestrator/storage-orchestrator.addon.mjs +74 -14
  64. package/dist/builtins/system-config/system-config.addon.js +1 -1
  65. package/dist/builtins/system-config/system-config.addon.mjs +1 -1
  66. package/dist/builtins/winston-logging/index.js +1 -1
  67. package/dist/builtins/winston-logging/index.mjs +1 -1
  68. package/dist/{child-cap-dispatch-8qMgog1O.mjs → child-cap-dispatch-CgmOo0yl.mjs} +170 -27
  69. package/dist/{child-cap-dispatch-BWtaSmWf.js → child-cap-dispatch-DlDSoqm1.js} +198 -25
  70. package/dist/{composition-sources-DW7CgMsg.js → composition-sources-BNyXPSs_.js} +1 -1
  71. package/dist/{composition-sources-zxQPPtP_.mjs → composition-sources-D39bl0nP.mjs} +1 -1
  72. package/dist/{dist-D732NygW.mjs → dist-BWNoS-1S.mjs} +2195 -105
  73. package/dist/{dist-BcUWQGr9.js → dist-D_a9mUiM.js} +2260 -104
  74. package/dist/{event-loop-stall-monitor-8W4yWNVW.mjs → event-loop-stall-monitor-ClPhfx7Y.mjs} +1 -1
  75. package/dist/{event-loop-stall-monitor-QX4RjNe7.js → event-loop-stall-monitor-DuOn8H1n.js} +1 -1
  76. package/dist/{hub-cap-forward-BdT320dq.mjs → hub-cap-forward-CH6_VWVO.mjs} +13 -4
  77. package/dist/{hub-cap-forward-DmHNjbB0.js → hub-cap-forward-COCmYaup.js} +13 -4
  78. package/dist/index.d.ts +2 -0
  79. package/dist/index.js +20 -6
  80. package/dist/index.mjs +13 -7
  81. package/dist/kernel/config-schema.d.ts +4 -0
  82. package/dist/kernel/moleculer/child-addon-call-dispatch.d.ts +6 -0
  83. package/dist/kernel/transport/cap-route-resolver.d.ts +19 -0
  84. package/dist/kernel/transport/hub-cap-forward.d.ts +22 -1
  85. package/dist/kernel/transport/index.d.ts +2 -2
  86. package/dist/kernel/transport/local-child-registry.d.ts +4 -3
  87. package/dist/logging/log-redactor.d.ts +9 -0
  88. package/dist/platform-key-source-BWlq0jjn.mjs +23 -0
  89. package/dist/platform-key-source-Di7HrlGR.js +40 -0
  90. package/dist/{retired-settings-keys-MaESpO18.js → retired-settings-keys-CDyOGAje.js} +1 -1
  91. package/dist/{retired-settings-keys-CxPOg7BF.mjs → retired-settings-keys-iGcmzwLV.mjs} +1 -1
  92. package/package.json +17 -1
@@ -1,6 +1,6 @@
1
- import { Pr as EventCategory$1, yr as createEvent } from "./dist-D732NygW.mjs";
1
+ import { Br as scrubKnownSecrets, Gr as EventCategory$1, Sr as createEvent, en as maskUrlCredentials } from "./dist-BWNoS-1S.mjs";
2
2
  import { a as parseProcStat, i as nodeProcReader } from "./proc-stat-CbC55Kqi.mjs";
3
- import "./hub-cap-forward-BdT320dq.mjs";
3
+ import "./hub-cap-forward-CH6_VWVO.mjs";
4
4
  import * as crypto$1 from "node:crypto";
5
5
  import { randomBytes, randomUUID } from "node:crypto";
6
6
  import { ensureBinary, ensureFfmpeg, ensurePython, installPythonPackages, installPythonRequirements } from "@camstack/types/node";
@@ -18,7 +18,7 @@ import * as v8 from "node:v8";
18
18
  import { Session } from "node:inspector/promises";
19
19
  import { monitorEventLoopDelay } from "node:perf_hooks";
20
20
  import * as vm from "node:vm";
21
- 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, asJsonObject, asString, collectZodSecretPaths, createDeviceProxy, createEventBusSliceSource, deviceOpsCapability, emitReadiness, errMsg, expandCapMethods, readNodePin, scopeKey, sleep, withCapInputDefaults } from "@camstack/types/addon";
21
+ 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, asJsonObject, asString, collectZodSecretPaths, createDeviceProxy, createEventBusSliceSource, createSecretsAccess, deviceOpsCapability, emitReadiness, errMsg, expandCapMethods, readNodePin, scopeKey, sleep, withCapInputDefaults } from "@camstack/types/addon";
22
22
  import { once } from "node:events";
23
23
  import { connect, createConnection, createServer as createServer$1 } from "node:net";
24
24
  import { TRPCClientError, createTRPCClient } from "@trpc/client";
@@ -3175,6 +3175,118 @@ function createAddonPeerBytesFacility(args) {
3175
3175
  };
3176
3176
  }
3177
3177
  //#endregion
3178
+ //#region src/logging/log-redactor.ts
3179
+ /**
3180
+ * The central log redactor (D787 §8). Every line passes through it before any
3181
+ * destination, ring buffer or subscriber sees it — in hub-main's `LogManager`,
3182
+ * in a forked runner's UDS logger (which alone knows the values that runner
3183
+ * resolved), and on an agent before a child's line is forwarded to the hub.
3184
+ *
3185
+ * Three nets, cheapest first:
3186
+ * 1. KNOWN VALUES — every secret this process resolved through `ctx.secrets`
3187
+ * is replaced wherever it appears (`‹secret:<ref hash>›`). The only net
3188
+ * that catches a value inside a library's error message.
3189
+ * 2. URL CREDENTIALS — `user:pass@` and credential query params in any URL
3190
+ * inside a string (`maskUrlCredentials`), and the value after a
3191
+ * credential-looking CLI flag (`--token X`, `--auth-key=X`).
3192
+ * 3. KEY NAMES — a `meta` value under a credential-named key, at any depth.
3193
+ *
3194
+ * Key names are a LOG heuristic only: whether a field is STORED in the
3195
+ * keychain is decided by its schema type, never by its name.
3196
+ *
3197
+ * Hot path: a line with no meta, no `://`, no `--` and no registered values
3198
+ * costs a few `includes` checks.
3199
+ */
3200
+ var REDACTED = "***";
3201
+ /** Credential-named keys. Substring, case-insensitive; only STRING values are replaced. */
3202
+ var SECRET_KEY_SUBSTRINGS = [
3203
+ "password",
3204
+ "passwd",
3205
+ "secret",
3206
+ "token",
3207
+ "apikey",
3208
+ "api_key",
3209
+ "authkey",
3210
+ "auth_key",
3211
+ "privatekey",
3212
+ "private_key",
3213
+ "passphrase",
3214
+ "credential",
3215
+ "cookie"
3216
+ ];
3217
+ /** True when a meta key names a credential. */
3218
+ function isCredentialKeyName(key) {
3219
+ const lower = key.toLowerCase();
3220
+ return SECRET_KEY_SUBSTRINGS.some((needle) => lower.includes(needle));
3221
+ }
3222
+ var URL_IN_TEXT = /\b[a-z][a-z0-9+.-]*:\/\/[^\s"'<>`]+/gi;
3223
+ var CREDENTIAL_FLAG = /(--(?:token|auth-?key|password|passwd|pass|secret|api-?key|access-?token|refresh-?token)(?:=|\s+))(\S+)/gi;
3224
+ /** Redact one free-form string. */
3225
+ function redactLogText(text) {
3226
+ let out = scrubKnownSecrets(text);
3227
+ if (out.includes("://")) out = out.replace(URL_IN_TEXT, (url) => maskUrlCredentials(url));
3228
+ if (out.includes("--")) out = out.replace(CREDENTIAL_FLAG, (_m, flag, value) => value.startsWith("‹secret:") ? `${flag}${value}` : `${flag}${REDACTED}`);
3229
+ return out;
3230
+ }
3231
+ /** Bounds on the meta walk — a log line is not a place to traverse a graph. */
3232
+ var MAX_DEPTH = 8;
3233
+ var MAX_NODES = 2e3;
3234
+ /**
3235
+ * Redact a value, returning the SAME reference when nothing in it changed —
3236
+ * most lines carry clean meta, and copying every one would put an allocation
3237
+ * per log line on hub-main's event loop.
3238
+ */
3239
+ function redactValue(value, depth, budget, seen) {
3240
+ if (budget.nodes++ > MAX_NODES) return value;
3241
+ if (typeof value === "string") return redactLogText(value);
3242
+ if (value === null || typeof value !== "object") return value;
3243
+ if (depth >= MAX_DEPTH || seen.has(value)) return value;
3244
+ if (value instanceof Error) {
3245
+ const message = redactLogText(value.message);
3246
+ return message === value.message ? value : message;
3247
+ }
3248
+ if (value instanceof Date || ArrayBuffer.isView(value) || value instanceof ArrayBuffer) return value;
3249
+ seen.add(value);
3250
+ if (Array.isArray(value)) {
3251
+ let copy = null;
3252
+ for (let i = 0; i < value.length; i++) {
3253
+ const item = value[i];
3254
+ const next = redactValue(item, depth + 1, budget, seen);
3255
+ if (next !== item) {
3256
+ copy ??= [...value];
3257
+ copy[i] = next;
3258
+ }
3259
+ }
3260
+ return copy ?? value;
3261
+ }
3262
+ let copy = null;
3263
+ for (const [key, child] of Object.entries(value)) {
3264
+ const next = typeof child === "string" && child.length > 0 && isCredentialKeyName(key) ? REDACTED : redactValue(child, depth + 1, budget, seen);
3265
+ if (next !== child) {
3266
+ copy ??= { ...value };
3267
+ copy[key] = next;
3268
+ }
3269
+ }
3270
+ return copy ?? value;
3271
+ }
3272
+ /** Redact a `meta` record; the same object back when it was already clean. */
3273
+ function redactLogMeta(meta) {
3274
+ const out = redactValue(meta, 0, { nodes: 0 }, /* @__PURE__ */ new WeakSet());
3275
+ if (out === meta) return meta;
3276
+ return out !== null && typeof out === "object" && !Array.isArray(out) ? Object.fromEntries(Object.entries(out)) : meta;
3277
+ }
3278
+ /** Redact a whole entry: message and meta. Tags are identifiers, left alone. */
3279
+ function redactLogEntry(entry) {
3280
+ const message = redactLogText(entry.message);
3281
+ const meta = entry.meta !== void 0 ? redactLogMeta(entry.meta) : void 0;
3282
+ if (message === entry.message && meta === entry.meta) return entry;
3283
+ return {
3284
+ ...entry,
3285
+ message,
3286
+ ...meta !== void 0 ? { meta } : {}
3287
+ };
3288
+ }
3289
+ //#endregion
3178
3290
  //#region src/kernel/deps/npm-command.ts
3179
3291
  /**
3180
3292
  * npm invocation resolver — makes "is npm available?" a solved problem for
@@ -4770,12 +4882,13 @@ function createBrokerDeviceManagerApi(opts) {
4770
4882
  bindRuntimeState: (state) => {
4771
4883
  runtimeStateRef = state;
4772
4884
  },
4773
- persistConfig: async (data) => {
4885
+ persistConfig: async (data, options) => {
4774
4886
  const dataRecord = toPlainRecord(data);
4775
4887
  if (!dataRecord) throw new Error(`worker-device-manager: persistConfig expected a plain object, got ${data === null ? "null" : typeof data}`);
4776
4888
  await callDeviceManager(api, "persistConfig", {
4777
4889
  deviceId: id,
4778
- data: dataRecord
4890
+ data: dataRecord,
4891
+ ...options?.secretConfigPaths !== void 0 ? { secretConfigPaths: [...options.secretConfigPaths] } : {}
4779
4892
  });
4780
4893
  },
4781
4894
  initialRuntimeState,
@@ -8298,22 +8411,33 @@ function extractNodeId(args) {
8298
8411
  return typeof raw === "string" && raw.length > 0 ? raw : void 0;
8299
8412
  }
8300
8413
  /**
8301
- * Merge `callerAddonId` into `args` as an extra field — the SAME "provider
8414
+ * Stamp the CALLER identity into a cap call's args — the SAME "provider
8302
8415
  * destructures what it needs and ignores the rest" convention
8303
8416
  * {@link extractNodeId} already relies on for the inline `nodeId` pin.
8304
- * `undefined` (the overwhelmingly common case: no caller hint, or the census
8305
- * consuming it is disarmed) returns `args` unchanged — no allocation. A
8306
- * non-object `args` (or `null`/array) is returned unchanged too: there is
8307
- * nowhere to attach an extra key without changing the payload's shape, and a
8308
- * provider taking a bare value never reads `callerAddonId` off it anyway.
8309
- */
8310
- function withCallerAddonId(args, callerAddonId) {
8311
- if (callerAddonId === void 0) return args;
8417
+ *
8418
+ * The stamp is the transport's, never the caller's (D787):
8419
+ * - a stamp (`callerAddonId` known to the transport) OVERWRITES whatever the
8420
+ * args carry under that key;
8421
+ * - NO stamp STRIPS the key: a call that crossed a wire with no identity the
8422
+ * transport can vouch for must not arrive carrying a claimed one. The
8423
+ * keychain owner-checks on this field, and until 2026-10-08 an unstamped
8424
+ * call let a child's own `callerAddonId` through untouched.
8425
+ *
8426
+ * A hub in-process caller never reaches this function (`localProviderLink`
8427
+ * calls the provider directly), which is the one place a stated identity is
8428
+ * trusted. A non-object `args` (or `null`/array) is returned unchanged: there
8429
+ * is nowhere to attach a key, and nowhere one could hide.
8430
+ */
8431
+ function stampCallerAddonId(args, callerAddonId) {
8312
8432
  if (args === null || typeof args !== "object" || Array.isArray(args)) return args;
8313
- return {
8433
+ if (callerAddonId !== void 0) return {
8314
8434
  ...args,
8315
8435
  callerAddonId
8316
8436
  };
8437
+ if (!Object.prototype.hasOwnProperty.call(args, "callerAddonId")) return args;
8438
+ const rest = {};
8439
+ for (const [key, value] of Object.entries(args)) if (key !== "callerAddonId") rest[key] = value;
8440
+ return rest;
8317
8441
  }
8318
8442
  var CapRouteResolver = class {
8319
8443
  hubNodeId;
@@ -8417,7 +8541,7 @@ var CapRouteResolver = class {
8417
8541
  */
8418
8542
  async dispatchInner(route, method, args, addonId, callerAddonId) {
8419
8543
  switch (route.kind) {
8420
- case "hub-in-process": return route.ref.invoke(method, withCallerAddonId(args, callerAddonId));
8544
+ case "hub-in-process": return route.ref.invoke(method, stampCallerAddonId(args, callerAddonId));
8421
8545
  case "hub-local-uds": {
8422
8546
  const registry = this.hubLocalRegistry;
8423
8547
  if (registry === null) throw new CapRouteError(route.capName, method, {
@@ -8977,7 +9101,8 @@ var LocalChildRegistry = class {
8977
9101
  method: input.method,
8978
9102
  args: input.args,
8979
9103
  ...input.deviceId !== void 0 ? { deviceId: input.deviceId } : {},
8980
- ...input.addonId !== void 0 ? { addonId: input.addonId } : {}
9104
+ ...input.addonId !== void 0 ? { addonId: input.addonId } : {},
9105
+ ...input.callerAddonId !== void 0 ? { callerAddonId: input.callerAddonId } : {}
8981
9106
  };
8982
9107
  }
8983
9108
  listChildren() {
@@ -9251,7 +9376,8 @@ var LocalChildRegistry = class {
9251
9376
  capName: out.capName,
9252
9377
  method: out.method,
9253
9378
  args: void 0,
9254
- ...out.deviceId !== void 0 ? { deviceId: out.deviceId } : {}
9379
+ ...out.deviceId !== void 0 ? { deviceId: out.deviceId } : {},
9380
+ ...childId !== null ? { callerAddonId: childId } : {}
9255
9381
  };
9256
9382
  const declared = this.capTimeoutMs?.(out.capName, out.method);
9257
9383
  return entry.channel.request(forward, {
@@ -9476,13 +9602,14 @@ var LocalChildClient = class {
9476
9602
  channel.onRequest(async (body, payload) => {
9477
9603
  const msg = body;
9478
9604
  if (msg.kind === "cap-call") {
9479
- const args = payload !== void 0 ? unpackPayload(payload) : msg.args;
9605
+ const args = stampCallerAddonId(payload !== void 0 ? unpackPayload(payload) : msg.args, msg.callerAddonId);
9480
9606
  const result = await this.options.dispatch({
9481
9607
  capName: msg.capName,
9482
9608
  method: msg.method,
9483
9609
  args,
9484
9610
  ...msg.deviceId !== void 0 ? { deviceId: msg.deviceId } : {},
9485
- ...msg.addonId !== void 0 ? { addonId: msg.addonId } : {}
9611
+ ...msg.addonId !== void 0 ? { addonId: msg.addonId } : {},
9612
+ ...msg.callerAddonId !== void 0 ? { callerAddonId: msg.callerAddonId } : {}
9486
9613
  });
9487
9614
  if (payload !== void 0 && result !== void 0) return new PayloadReply(void 0, packPayload(result));
9488
9615
  return result;
@@ -9665,12 +9792,12 @@ function createUdsLoggerWithState(client, addonId, nodeId, levelState, scope, ta
9665
9792
  } : baseTags;
9666
9793
  const entry = {
9667
9794
  level,
9668
- message,
9795
+ message: redactLogText(message),
9669
9796
  addonId,
9670
9797
  nodeId,
9671
9798
  ...scope !== void 0 ? { scope } : {},
9672
9799
  tags: mergedTags,
9673
- ...extras?.meta !== void 0 ? { meta: extras.meta } : {}
9800
+ ...extras?.meta !== void 0 ? { meta: redactLogMeta(extras.meta) } : {}
9674
9801
  };
9675
9802
  client.sendLog(entry);
9676
9803
  }
@@ -9892,7 +10019,8 @@ function createParentUnownedCallHandler(deps) {
9892
10019
  method: input.method,
9893
10020
  args: input.args,
9894
10021
  deviceId,
9895
- native: true
10022
+ native: true,
10023
+ ...input.callerAddonId !== void 0 ? { callerAddonId: input.callerAddonId } : {}
9896
10024
  });
9897
10025
  throw new Error(`no native provider for capability "${input.capName}" on device ${String(deviceId)}`);
9898
10026
  }
@@ -9952,7 +10080,8 @@ function createParentUnownedCallHandler(deps) {
9952
10080
  method: input.method,
9953
10081
  args: input.args,
9954
10082
  deviceId,
9955
- nodeId: owner.nodeId
10083
+ nodeId: owner.nodeId,
10084
+ ...input.callerAddonId !== void 0 ? { callerAddonId: input.callerAddonId } : {}
9956
10085
  });
9957
10086
  return await brokerCallForCap(deps.broker, input.capName, input.method, input.args, { nodeId: owner.nodeId });
9958
10087
  }
@@ -9962,7 +10091,8 @@ function createParentUnownedCallHandler(deps) {
9962
10091
  method: input.method,
9963
10092
  args: input.args,
9964
10093
  ...deviceId !== void 0 ? { deviceId } : {},
9965
- ...nodeId !== void 0 ? { nodeId } : {}
10094
+ ...nodeId !== void 0 ? { nodeId } : {},
10095
+ ...input.callerAddonId !== void 0 ? { callerAddonId: input.callerAddonId } : {}
9966
10096
  });
9967
10097
  if (deps.isCoreServiceCap !== void 0 && !deps.isCoreServiceCap(input.capName)) {
9968
10098
  for (let attempt = 1; attempt <= ADDON_CAP_RETRY_ATTEMPTS; attempt++) {
@@ -9973,7 +10103,7 @@ function createParentUnownedCallHandler(deps) {
9973
10103
  ...nodeId !== void 0 ? { nodeId } : {},
9974
10104
  ...deviceId !== void 0 ? { deviceId } : {}
9975
10105
  });
9976
- return await retryResolver.dispatch(route, input.method, input.args);
10106
+ return input.callerAddonId !== void 0 ? await retryResolver.dispatch(route, input.method, input.args, void 0, input.callerAddonId) : await retryResolver.dispatch(route, input.method, input.args);
9977
10107
  } catch (err) {
9978
10108
  if (!(err instanceof CapRouteError) || err.reason !== "no-provider") throw err;
9979
10109
  }
@@ -11936,6 +12066,19 @@ async function buildAddonContext(runtime, declaration, dataDir, options) {
11936
12066
  api,
11937
12067
  deps: new AddonDepsManager(addonDataDir, scopedLogger),
11938
12068
  settings: settingsView,
12069
+ secrets: createSecretsAccess({
12070
+ owner: addonId,
12071
+ transport: {
12072
+ put: (input) => api.keychain.put.mutate({
12073
+ ref: input.ref,
12074
+ value: input.value
12075
+ }),
12076
+ resolve: (input) => api.keychain.resolve.query({ refs: [...input.refs] }),
12077
+ delete: (input) => api.keychain.delete.mutate({ refs: [...input.refs] }),
12078
+ getState: () => api.keychain.getState.query({})
12079
+ },
12080
+ eventBus: scopedEventBus
12081
+ }),
11939
12082
  kernel: (() => {
11940
12083
  const streamProbe = runtime.mode === "broker" ? {
11941
12084
  probe: (url, probeOptions) => runtime.broker.call("$stream-probe.probe", {
@@ -12762,4 +12905,4 @@ function createChildCapDispatch(deps) {
12762
12905
  };
12763
12906
  }
12764
12907
  //#endregion
12765
- export { CapRouteError as $, EMPTY_CAP_ACTION_READING as $n, RUNNER_RSS_BUDGET_ENV as $t, resolveHwAccel as A, OUTBOUND_QUEUE_SUSTAIN_MS as An, DeviceRegistry as At, udsChildLogToWorkerEntry as B, createSocketPlaneMeter as Bn, hostNodeIdOf as Bt, getBrokerEventBus as C, HEAP_SPACE_REPORT_MIN_MB as Cn, capActionName as Ct, subscribePassthrough as D, readHeapSpaces as Dn, parseCapAction as Dt, setNodeEventInterest as E, heapSpaceField as En, capServiceName as Et, ipcParentLink as F, createMeshQueueReader as Fn, resolveAddonClass as Ft, UDS_NO_ROUTE_PREFIX as G, EMPTY_SOCKET_DIRECTION as Gn, HEAP_WATCH_INTERVAL_MS as Gt, createUdsLoggerWithControl as H, diffSocketPlane as Hn, HEAP_RECLAIM_MIN_INTERVAL_MS as Ht, localProviderLink as I, formatMeshQueue as In, buildNpmChildEnv as It, answerClaimedGetStatus as J, sampleSocketDirection as Jn, HUB_MAIN_RSS_BUDGET_MB as Jt, afterWorkerOnlineAnnounce as K, createSocketDirectionCounters as Kn, HEAP_WATCH_WARN_RATIO as Kt, createParentUnownedCallHandler as L, EMPTY_SOCKET_PLANE_BASELINE as Ln, resolveNpmInvocation as Lt, brokerTransportLink as M, createOutboundQueueGate as Mn, CapabilityUnavailableError as Mt, buildLinkChain as N, formatOutboundQueueVerdict as Nn, copyBundledNativeModules as Nt, AddonDepsManager as O, selectReportedSpaces as On, deserializeTypedArrays as Ot, deviceCapResolverLink as P, MESH_QUEUE_TOP_N as Pn, installManifestNativeDeps as Pt, CapRouteResolver as Q, CAP_ACTION_UNLABELLED as Qn, RUNNER_HEAP_WATCH_INTERVAL_MS as Qt, createUdsEventBridge as R, SOCKET_PLANE_TOP_N as Rn, runNpm as Rt, clusterEventTopic as S, DECISIVE_HEAP_SPACES as Sn, NATIVE_PROVIDER_SERVICE_INFIX as St, registerEventBusService as T, formatHeapSpaces as Tn, capBareAction as Tt, LocalChildClient as U, formatSocketPlane as Un, HEAP_RECLAIM_STEADY_STATE_INTERVAL_MS as Ut, createUdsLogger as V, createSocketPlaneReader as Vn, createAddonDataPlaneFacility as Vt, LocalChildRegistry as W, readSocketQueues as Wn, HEAP_RECLAIM_TRIGGER_MB as Wt, AGENT_CAP_FWD_ACTION as X, socketDirectionMessages as Xn, RSS_BUDGET_REANNOUNCE_MIN_MS as Xt, deviceOfGetStatus as Y, socketDirectionBytes as Yn, HUB_RSS_BUDGET_ENV as Yt, AGENT_CAP_FWD_SERVICE as Z, CAP_ACTION_OVERFLOW_LABEL as Zn, RSS_BUDGET_RELEASE_RATIO as Zt, getWorkerDeviceRegistry as _, ARRAY_BUFFER_RELEASE_MIN_DROP_RATIO as _n, getWorkerNativeCapSnapshot as _t, reapProcessGroup as a, describeRss as an, createEventPlaneMeter as ar, getCapUsageRegistry as at, setHubConnected as b, formatArrayBufferCensus as bn, createAddonService as bt, runnerOwnsProcessGroup as c, parseRssBudgetMb as cn, formatEventPlane as cr, UdsLocalTransportServer as ct, summarizeMembers as d, startHeapWatch as dn, localEndpointPath as dt, ZERO_LOOP_DELAY as en, MAX_CAP_ACTIONS_PER_PEER as er, classifyCapRoute as et, installManifestSystemDeps as f, startRunnerHeapWatch as fn, FrameDecoder as ft, createUdsAddonContext as g, ARRAY_BUFFER_CENSUS_THRESHOLD_MB as gn, getWorkerNativeCapProvider as gt, createAddonContext as h, ARRAY_BUFFER_CENSUS_SUSTAIN_MS as hn, createBrokerDeviceManagerApi as ht, killOwnRunnerGroupAfterParentLoss as i, createV8Reclaimer as in, EVENT_PLANE_TOP_N as ir, __resetCapUsageRegistryForTests as it, brokerCallForCap as j, OUTBOUND_QUEUE_THRESHOLD_BYTES as jn, CapabilityHandle as jt, createKernelHwAccel as k, OUTBOUND_QUEUE_COOLDOWN_MS as kn, serializeTypedArrays as kt, signalAllRunnerGroups as l, reclaimIntervalMs as ln, SocketChannel as lt, adaptBrokerToCluster as m, ARRAY_BUFFER_CENSUS_COOLDOWN_MS as mn, buildNativeCapProxy as mt, createChildCapDispatch as n, createDeferredHeapWatchSink as nn, createCapActionCensus as nr, CapUsageRegistry as nt, registerRunnerGroup as o, hubMainRssBudget as on, createEventPlaneReader as or, createLocalTransport as ot, installManifestPythonDeps as p, strandedMb as pn, encodeFrame as pt, GET_STATUS_METHOD as q, recordSocketFrame as qn, HUB_MAIN_HEAP_WATCH_LABEL as qt, defaultProcessGroupOps as r, createLoopDelayMeter as rn, diffCapActionCensus as rr, PARENT_ROUTED_PROVIDER_ADDON_ID as rt, releaseRunnerGroup as s, nextRssBudgetState as sn, diffEventPlane as sr, UdsLocalTransportClient as st, CAP_METHOD_NOT_IMPLEMENTED as t, buildHeapSample as tn, capActionLabel as tr, callWithServiceDiscovery as tt, startRunnerParentDeathWatchdog as u, shouldReclaim as un, PeerAnsweredError as ut, getOrInitReadinessRegistry as v, createArrayBufferCensusGate as vn, mountNativeCapService as vt, getMoleculerEventStats as w, emitHeapDiagnosticReport as wn, capActionSuffix as wt, EVENT_TOPIC_PREFIX as x, isArrayBufferCensusReport as xn, validateProviderRegistrations as xt, getOrInitReadinessRegistryForClient as y, createInspectorArrayBufferCensus as yn, setWorkerNativeCapsChangeListener as yt, createUdsEventBus as z, SOCKET_QUEUE_TOP_N as zn, createAddonPeerBytesFacility as zt };
12908
+ export { stampCallerAddonId as $, sampleSocketDirection as $n, HUB_MAIN_RSS_BUDGET_MB as $t, resolveHwAccel as A, formatHeapSpaces as An, serializeTypedArrays as At, udsChildLogToWorkerEntry as B, createMeshQueueReader as Bn, isCredentialKeyName as Bt, getBrokerEventBus as C, createArrayBufferCensusGate as Cn, NATIVE_PROVIDER_SERVICE_INFIX as Ct, subscribePassthrough as D, DECISIVE_HEAP_SPACES as Dn, capServiceName as Dt, setNodeEventInterest as E, isArrayBufferCensusReport as En, capBareAction as Et, ipcParentLink as F, OUTBOUND_QUEUE_SUSTAIN_MS as Fn, installManifestNativeDeps as Ft, UDS_NO_ROUTE_PREFIX as G, createSocketPlaneMeter as Gn, hostNodeIdOf as Gt, createUdsLoggerWithControl as H, EMPTY_SOCKET_PLANE_BASELINE as Hn, redactLogMeta as Ht, localProviderLink as I, OUTBOUND_QUEUE_THRESHOLD_BYTES as In, resolveAddonClass as It, answerClaimedGetStatus as J, formatSocketPlane as Jn, HEAP_RECLAIM_STEADY_STATE_INTERVAL_MS as Jt, afterWorkerOnlineAnnounce as K, createSocketPlaneReader as Kn, createAddonDataPlaneFacility as Kt, createParentUnownedCallHandler as L, createOutboundQueueGate as Ln, buildNpmChildEnv as Lt, brokerTransportLink as M, readHeapSpaces as Mn, CapabilityHandle as Mt, buildLinkChain as N, selectReportedSpaces as Nn, CapabilityUnavailableError as Nt, AddonDepsManager as O, HEAP_SPACE_REPORT_MIN_MB as On, parseCapAction as Ot, deviceCapResolverLink as P, OUTBOUND_QUEUE_COOLDOWN_MS as Pn, copyBundledNativeModules as Pt, CapRouteResolver as Q, recordSocketFrame as Qn, HUB_MAIN_HEAP_WATCH_LABEL as Qt, createUdsEventBridge as R, formatOutboundQueueVerdict as Rn, resolveNpmInvocation as Rt, clusterEventTopic as S, ARRAY_BUFFER_RELEASE_MIN_DROP_RATIO as Sn, validateProviderRegistrations as St, registerEventBusService as T, formatArrayBufferCensus as Tn, capActionSuffix as Tt, LocalChildClient as U, SOCKET_PLANE_TOP_N as Un, redactLogText as Ut, createUdsLogger as V, formatMeshQueue as Vn, redactLogEntry as Vt, LocalChildRegistry as W, SOCKET_QUEUE_TOP_N as Wn, createAddonPeerBytesFacility as Wt, AGENT_CAP_FWD_ACTION as X, EMPTY_SOCKET_DIRECTION as Xn, HEAP_WATCH_INTERVAL_MS as Xt, deviceOfGetStatus as Y, readSocketQueues as Yn, HEAP_RECLAIM_TRIGGER_MB as Yt, AGENT_CAP_FWD_SERVICE as Z, createSocketDirectionCounters as Zn, HEAP_WATCH_WARN_RATIO as Zt, getWorkerDeviceRegistry as _, startRunnerHeapWatch as _n, getWorkerNativeCapProvider as _t, reapProcessGroup as a, ZERO_LOOP_DELAY as an, MAX_CAP_ACTIONS_PER_PEER as ar, __resetCapUsageRegistryForTests as at, setHubConnected as b, ARRAY_BUFFER_CENSUS_SUSTAIN_MS as bn, setWorkerNativeCapsChangeListener as bt, runnerOwnsProcessGroup as c, createLoopDelayMeter as cn, diffCapActionCensus as cr, UdsLocalTransportClient as ct, summarizeMembers as d, hubMainRssBudget as dn, createEventPlaneReader as dr, PeerAnsweredError as dt, HUB_RSS_BUDGET_ENV as en, socketDirectionBytes as er, CapRouteError as et, installManifestSystemDeps as f, nextRssBudgetState as fn, diffEventPlane as fr, localEndpointPath as ft, createUdsAddonContext as g, startHeapWatch as gn, createBrokerDeviceManagerApi as gt, createAddonContext as h, shouldReclaim as hn, buildNativeCapProxy as ht, killOwnRunnerGroupAfterParentLoss as i, RUNNER_RSS_BUDGET_ENV as in, EMPTY_CAP_ACTION_READING as ir, PARENT_ROUTED_PROVIDER_ADDON_ID as it, brokerCallForCap as j, heapSpaceField as jn, DeviceRegistry as jt, createKernelHwAccel as k, emitHeapDiagnosticReport as kn, deserializeTypedArrays as kt, signalAllRunnerGroups as l, createV8Reclaimer as ln, EVENT_PLANE_TOP_N as lr, UdsLocalTransportServer as lt, adaptBrokerToCluster as m, reclaimIntervalMs as mn, encodeFrame as mt, createChildCapDispatch as n, RSS_BUDGET_RELEASE_RATIO as nn, CAP_ACTION_OVERFLOW_LABEL as nr, callWithServiceDiscovery as nt, registerRunnerGroup as o, buildHeapSample as on, capActionLabel as or, getCapUsageRegistry as ot, installManifestPythonDeps as p, parseRssBudgetMb as pn, formatEventPlane as pr, FrameDecoder as pt, GET_STATUS_METHOD as q, diffSocketPlane as qn, HEAP_RECLAIM_MIN_INTERVAL_MS as qt, defaultProcessGroupOps as r, RUNNER_HEAP_WATCH_INTERVAL_MS as rn, CAP_ACTION_UNLABELLED as rr, CapUsageRegistry as rt, releaseRunnerGroup as s, createDeferredHeapWatchSink as sn, createCapActionCensus as sr, createLocalTransport as st, CAP_METHOD_NOT_IMPLEMENTED as t, RSS_BUDGET_REANNOUNCE_MIN_MS as tn, socketDirectionMessages as tr, classifyCapRoute as tt, startRunnerParentDeathWatchdog as u, describeRss as un, createEventPlaneMeter as ur, SocketChannel as ut, getOrInitReadinessRegistry as v, strandedMb as vn, getWorkerNativeCapSnapshot as vt, getMoleculerEventStats as w, createInspectorArrayBufferCensus as wn, capActionName as wt, EVENT_TOPIC_PREFIX as x, ARRAY_BUFFER_CENSUS_THRESHOLD_MB as xn, createAddonService as xt, getOrInitReadinessRegistryForClient as y, ARRAY_BUFFER_CENSUS_COOLDOWN_MS as yn, mountNativeCapService as yt, createUdsEventBus as z, MESH_QUEUE_TOP_N as zn, runNpm as zt };