@camstack/system 1.2.444 → 1.2.445

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 (142) hide show
  1. package/dist/addon-runner.js +40 -31
  2. package/dist/addon-runner.mjs +41 -32
  3. package/dist/{agent-https-DlpTMDqA.js → agent-https-CiOW0-sj.js} +810 -12
  4. package/dist/{agent-https-U0d4uvn2.mjs → agent-https-D4Q8iFNd.mjs} +697 -13
  5. package/dist/auth/admin-token-manager.d.ts +9 -3
  6. package/dist/auth/api-key-manager.d.ts +9 -3
  7. package/dist/auth/auth-audit-log.d.ts +9 -3
  8. package/dist/auth/device-credential-manager.d.ts +5 -1
  9. package/dist/auth/external-identity-manager.d.ts +8 -21
  10. package/dist/auth/login-session-manager.d.ts +11 -3
  11. package/dist/auth/scoped-token-manager.d.ts +8 -52
  12. package/dist/auth/totp-manager.d.ts +11 -3
  13. package/dist/auth/user-manager.d.ts +10 -17
  14. package/dist/builtins/addon-pages-aggregator/addon-pages-aggregator.addon.js +1 -1
  15. package/dist/builtins/addon-pages-aggregator/addon-pages-aggregator.addon.mjs +1 -1
  16. package/dist/builtins/addon-widgets-aggregator/addon-widgets-aggregator.addon.js +1 -1
  17. package/dist/builtins/addon-widgets-aggregator/addon-widgets-aggregator.addon.mjs +1 -1
  18. package/dist/builtins/alerts/alert-store.d.ts +32 -0
  19. package/dist/builtins/alerts/alerts.addon.d.ts +9 -2
  20. package/dist/builtins/alerts/alerts.addon.js +289 -150
  21. package/dist/builtins/alerts/alerts.addon.mjs +288 -150
  22. package/dist/builtins/alerts/record-kinds.d.ts +15 -0
  23. package/dist/builtins/autotrack/index.js +1 -1
  24. package/dist/builtins/autotrack/index.mjs +1 -1
  25. package/dist/builtins/backup-orchestrator/backup-orchestrator.addon.d.ts +1 -0
  26. package/dist/builtins/backup-orchestrator/backup-orchestrator.addon.js +134 -193
  27. package/dist/builtins/backup-orchestrator/backup-orchestrator.addon.mjs +134 -193
  28. package/dist/builtins/backup-orchestrator/destination-policy.d.ts +4 -2
  29. package/dist/builtins/backup-orchestrator/encryption-key-store.d.ts +4 -2
  30. package/dist/builtins/backup-orchestrator/record-kinds.d.ts +58 -0
  31. package/dist/builtins/backup-orchestrator/schedule-store.d.ts +4 -2
  32. package/dist/builtins/backup-orchestrator/seed-marker-store.d.ts +4 -2
  33. package/dist/builtins/calendars/calendar-prefs-store.d.ts +13 -5
  34. package/dist/builtins/calendars/calendars.addon.d.ts +2 -2
  35. package/dist/builtins/calendars/calendars.addon.js +67 -64
  36. package/dist/builtins/calendars/calendars.addon.mjs +59 -64
  37. package/dist/builtins/calendars/record-kinds.d.ts +18 -0
  38. package/dist/builtins/camera-grid/index.js +1 -1
  39. package/dist/builtins/camera-grid/index.mjs +1 -1
  40. package/dist/builtins/cluster-agent/record-kinds.d.ts +36 -0
  41. package/dist/builtins/composer/composer.addon.js +2 -2
  42. package/dist/builtins/composer/composer.addon.mjs +2 -2
  43. package/dist/builtins/console-logging/index.js +1 -1
  44. package/dist/builtins/console-logging/index.mjs +1 -1
  45. package/dist/builtins/core-blocks/block-settings-store.d.ts +8 -4
  46. package/dist/builtins/core-blocks/core-block-store.d.ts +8 -16
  47. package/dist/builtins/core-blocks/core-blocks.addon.js +85 -112
  48. package/dist/builtins/core-blocks/core-blocks.addon.mjs +86 -113
  49. package/dist/builtins/core-blocks/index.mjs +1 -1
  50. package/dist/builtins/core-blocks/record-kinds.d.ts +26 -0
  51. package/dist/builtins/device-manager/device-manager.addon.js +111 -187
  52. package/dist/builtins/device-manager/device-manager.addon.mjs +110 -187
  53. package/dist/builtins/device-manager/device-tombstone-store.d.ts +9 -48
  54. package/dist/builtins/device-manager/record-kinds.d.ts +14 -0
  55. package/dist/builtins/hub-forwarder/index.js +1 -1
  56. package/dist/builtins/hub-forwarder/index.mjs +1 -1
  57. package/dist/builtins/keychain/index.js +152 -22
  58. package/dist/builtins/keychain/index.mjs +152 -22
  59. package/dist/builtins/keychain/keychain-service.d.ts +3 -2
  60. package/dist/builtins/keychain/keychain-store.d.ts +13 -2
  61. package/dist/builtins/keychain/record-kinds.d.ts +16 -0
  62. package/dist/builtins/liveness-monitor/liveness-monitor.addon.js +1 -1
  63. package/dist/builtins/liveness-monitor/liveness-monitor.addon.mjs +1 -1
  64. package/dist/builtins/local-auth/auth-schema.d.ts +3 -1
  65. package/dist/builtins/local-auth/local-auth.addon.js +2903 -2123
  66. package/dist/builtins/local-auth/local-auth.addon.mjs +2904 -2124
  67. package/dist/builtins/local-auth/oauth-session-manager.d.ts +8 -48
  68. package/dist/builtins/local-auth/record-kinds.d.ts +141 -0
  69. package/dist/builtins/local-network/local-network.addon.js +2 -2
  70. package/dist/builtins/local-network/local-network.addon.mjs +2 -2
  71. package/dist/builtins/loki-logging/index.js +1 -1
  72. package/dist/builtins/loki-logging/index.mjs +1 -1
  73. package/dist/builtins/native-metrics/native-metrics.addon.js +1 -1
  74. package/dist/builtins/native-metrics/native-metrics.addon.mjs +1 -1
  75. package/dist/builtins/platform-probe/index.js +1 -1
  76. package/dist/builtins/platform-probe/index.mjs +1 -1
  77. package/dist/builtins/record-entries/index.js +1 -1
  78. package/dist/builtins/record-entries/index.mjs +1 -1
  79. package/dist/builtins/records/legacy-table-row-count.d.ts +5 -0
  80. package/dist/builtins/records/phase6-declare-gate.d.ts +28 -0
  81. package/dist/builtins/records-isolated.d.ts +10 -0
  82. package/dist/builtins/remote-access-orchestrator/remote-access-orchestrator.addon.js +1 -1
  83. package/dist/builtins/remote-access-orchestrator/remote-access-orchestrator.addon.mjs +1 -1
  84. package/dist/builtins/snapshot/index.js +1 -1
  85. package/dist/builtins/snapshot/index.mjs +1 -1
  86. package/dist/builtins/sqlite-storage/filesystem-storage.addon.js +1 -1
  87. package/dist/builtins/sqlite-storage/filesystem-storage.addon.mjs +1 -1
  88. package/dist/builtins/sqlite-storage/index.js +1 -1
  89. package/dist/builtins/sqlite-storage/index.mjs +1 -1
  90. package/dist/builtins/sqlite-storage/integration-record-kinds.d.ts +30 -0
  91. package/dist/builtins/sqlite-storage/integration-registry.d.ts +10 -16
  92. package/dist/builtins/sqlite-storage/records/count-settings-array-legacy.d.ts +5 -0
  93. package/dist/builtins/sqlite-storage/records/count-settings-brokers-legacy.d.ts +6 -0
  94. package/dist/builtins/sqlite-storage/records/records-engine-types.d.ts +5 -0
  95. package/dist/builtins/sqlite-storage/records/records-engine.d.ts +4 -0
  96. package/dist/builtins/sqlite-storage/records/records-provider.d.ts +5 -1
  97. package/dist/builtins/sqlite-storage/sqlite-settings-backend.d.ts +17 -0
  98. package/dist/builtins/sqlite-storage/sqlite-settings.addon.js +111 -3
  99. package/dist/builtins/sqlite-storage/sqlite-settings.addon.mjs +111 -3
  100. package/dist/builtins/sqlite-storage/storage-admin-provider.d.ts +9 -1
  101. package/dist/builtins/storage-orchestrator/drain-state-store.d.ts +5 -2
  102. package/dist/builtins/storage-orchestrator/location-store.d.ts +7 -2
  103. package/dist/builtins/storage-orchestrator/record-kinds.d.ts +38 -0
  104. package/dist/builtins/storage-orchestrator/storage-orchestrator.addon.d.ts +2 -0
  105. package/dist/builtins/storage-orchestrator/storage-orchestrator.addon.js +196 -5
  106. package/dist/builtins/storage-orchestrator/storage-orchestrator.addon.mjs +195 -6
  107. package/dist/builtins/system-config/record-kinds.d.ts +32 -0
  108. package/dist/builtins/system-config/system-config.addon.js +53 -618
  109. package/dist/builtins/system-config/system-config.addon.mjs +29 -577
  110. package/dist/builtins/winston-logging/index.js +1 -1
  111. package/dist/builtins/winston-logging/index.mjs +1 -1
  112. package/dist/{composition-sources-C3rKncIF.mjs → composition-sources-BMt5cFYb.mjs} +1 -1
  113. package/dist/{composition-sources-NAPZddic.js → composition-sources-D3fi9Xns.js} +1 -1
  114. package/dist/{constants-BKX2QnIg.mjs → constants-BMHCxRzb.mjs} +1 -1
  115. package/dist/{constants-BXiNEIeV.js → constants-Br879Axi.js} +1 -1
  116. package/dist/{device-ca-DT9X2S6d.js → device-ca-CnJ_va7i.js} +1 -1
  117. package/dist/{device-ca-jxjSL8Ov.mjs → device-ca-T8osSMos.mjs} +1 -1
  118. package/dist/{dist-DERK-gP5.mjs → dist-BNunRyXT.mjs} +174 -58
  119. package/dist/{dist-D1vECb_6.js → dist-DgOG8flk.js} +233 -57
  120. package/dist/file-host-worker.js +1 -1
  121. package/dist/file-host-worker.mjs +1 -1
  122. package/dist/{hub-mdns-ciao-Cah9GCIg.js → hub-mdns-ciao-BIkTHq-n.js} +2 -2
  123. package/dist/{hub-mdns-ciao-CRaC97V0.mjs → hub-mdns-ciao-D16oRQ9K.mjs} +2 -2
  124. package/dist/index.d.ts +7 -0
  125. package/dist/index.js +3093 -2820
  126. package/dist/index.mjs +3065 -2809
  127. package/dist/kernel/index.d.ts +2 -0
  128. package/dist/kernel/moleculer/event-bus.d.ts +3 -1
  129. package/dist/kernel/moleculer/mesh-mtls/mesh-certificate-registry.d.ts +5 -1
  130. package/dist/kernel/moleculer/remote-logger.d.ts +2 -2
  131. package/dist/kernel/transport/cap-route-resolver.d.ts +9 -38
  132. package/dist/phase6-declare-gate-Ci1-8uUn.js +98 -0
  133. package/dist/phase6-declare-gate-tkKOEitw.mjs +93 -0
  134. package/dist/read-all-rows-CVoO1ONM.js +29 -0
  135. package/dist/read-all-rows-TaPqdWNF.mjs +25 -0
  136. package/dist/records/read-all-rows.d.ts +6 -0
  137. package/dist/{restore-archive-daKyE24F.mjs → restore-archive-DR9MtO7J.mjs} +339 -9
  138. package/dist/{restore-archive-Dy-qKTdF.js → restore-archive-DjJnCgap.js} +353 -5
  139. package/dist/tls/agent-https-names.d.ts +9 -13
  140. package/dist/{wal-maintenance-dAv4IdzC.js → wal-maintenance-CODGqhKY.js} +0 -0
  141. package/dist/{wal-maintenance-zRc24mOC.mjs → wal-maintenance-CfvgtQ7C.mjs} +0 -0
  142. package/package.json +1 -1
@@ -1,9 +1,9 @@
1
1
  import { a as __toCommonJS, i as __require, n as __esmMin, o as __toESM, r as __exportAll, t as __commonJSMin } from "../../chunk-CNf5ZN-e.mjs";
2
- import { $n as shortHostname, Ei as hydrateSchema, Fr as BaseAddon, Pr as errMsg, Q as ServerNameSchema, bi as customAction, xi as defineCustomActions } from "../../dist-DERK-gP5.mjs";
2
+ import { Ei as defineCustomActions, Lr as errMsg, Mi as hydrateSchema, Rr as BaseAddon, rr as shortHostname, tt as ServerNameSchema, wi as customAction } from "../../dist-BNunRyXT.mjs";
3
3
  import { t as require_safe_buffer } from "../../safe-buffer-B1OjL1I9.mjs";
4
- import { S as backdatedNotBefore, a as KeyUsageFlags, c as Pkcs10CertificateRequest, d as SubjectKeyIdentifierExtension, f as X509Certificate$1, l as Pkcs10CertificateRequestGenerator, m as cryptoProvider, n as BasicConstraintsExtension, o as KeyUsagesExtension, p as X509CertificateGenerator, r as ExtendedKeyUsageExtension, s as PemConverter, t as AuthorityKeyIdentifierExtension } from "../../x509.es-DK__ETIe.mjs";
5
- import { F as AGENT_HTTPS_NAMES_COLLECTION, I as AGENT_HTTPS_NAMES_COLUMNS, L as AgentHttpsNames, R as getProcessAgentHttpsNames, j as isLocalOnlyHostname, u as isPrivateAddress, z as setProcessAgentHttpsNames } from "../../agent-https-U0d4uvn2.mjs";
6
- import { a as MESH_CA_KEY_REF, c as SERVER_AUTH_OID, i as MESH_CA_FIELD, n as DEFAULT_HUB_TLS_TCP_PORT, o as MESH_CA_SETTINGS_KEY, r as MESH_CA_COMMON_NAME, s as MESH_CA_VALIDITY_DAYS, t as CLIENT_AUTH_OID } from "../../constants-BKX2QnIg.mjs";
4
+ import { c as Pkcs10CertificateRequest } from "../../x509.es-DK__ETIe.mjs";
5
+ 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-BMHCxRzb.mjs";
6
+ import { $ as generateMeshKeyPair, B as systemConfigRecordKinds, F as AGENT_HTTPS_NAMES_COLLECTION, G as describeMeshLeaf, H as MESH_NODE_CERTIFICATES_COLUMNS, I as AGENT_HTTPS_NAMES_COLUMNS, L as AgentHttpsNames, Q as generateMeshCa, R as getProcessAgentHttpsNames, U as MeshCertificateRegistry, V as MESH_NODE_CERTIFICATES_COLLECTION, X as createMeshCsrPem, Y as caFingerprintCompact, Z as exportMeshPrivateKeyPem, et as isValidAgentNodeId, it as subjectCn, j as isLocalOnlyHostname, nt as issueMeshLeafFromCsr, q as setProcessMeshCertificateRegistry, rt as loadMeshCa, tt as issueMeshLeafForNode, u as isPrivateAddress, z as setProcessAgentHttpsNames } from "../../agent-https-D4Q8iFNd.mjs";
7
7
  import { t as require_src } from "../../src-hG4grMU4.mjs";
8
8
  import { z } from "zod";
9
9
  import { X509Certificate, createHash, createPrivateKey, randomBytes, randomInt, sign, timingSafeEqual, verify, webcrypto } from "node:crypto";
@@ -288,161 +288,8 @@ function parsePayload(value) {
288
288
  };
289
289
  }
290
290
  //#endregion
291
- //#region src/kernel/moleculer/mesh-mtls/mesh-ca.ts
292
- /**
293
- * Hub mesh CA — EC P-256, key in the keychain, cert in `cluster.meshCa`.
294
- *
295
- * Distinct from the HTTPS local CA (`tls/cert-issue.ts`, RSA): the mesh CA
296
- * signs node leaves (CN = nodeID) and unlock-ticket JWS (ES256). Issuance uses
297
- * `@peculiar/x509` over WebCrypto — same library the HTTPS path already uses
298
- * (installed `1.14.3`; registry latest at adoption time was `2.1.0` — stay on
299
- * the pinned range already shipping).
300
- */
301
- cryptoProvider.set(webcrypto);
302
- var MS_PER_DAY = 864e5;
303
- /** Key generation — EC P-256 (plan). WebCrypto DOM names are not in @types/node. */
304
- var MESH_KEY_ALGORITHM = {
305
- name: "ECDSA",
306
- namedCurve: "P-256"
307
- };
308
- /** Signing — ECDSA with SHA-256. */
309
- var MESH_SIGNING_ALGORITHM = {
310
- name: "ECDSA",
311
- hash: "SHA-256"
312
- };
313
- /** A node id: letters, digits, `.`, `_`, `-`; at most 63 characters; starts with a letter or digit. */
314
- var NODE_ID_PATTERN = /^[a-z0-9][a-z0-9._-]{0,62}$/i;
315
- /** Ids no agent may take: the hub's own, whatever the case (D857). */
316
- var RESERVED_NODE_IDS = new Set(["hub"]);
317
- /** True for an id an agent may carry: the pattern, and not a reserved name. */
318
- function isValidAgentNodeId(nodeId) {
319
- return NODE_ID_PATTERN.test(nodeId) && !RESERVED_NODE_IDS.has(nodeId.toLowerCase());
320
- }
321
- function freshSerial() {
322
- return `00${randomBytes(16).toString("hex")}`;
323
- }
324
- function toPkcs8Pem(pkcs8) {
325
- return `${PemConverter.encode(pkcs8, "PRIVATE KEY")}\n`;
326
- }
327
- function toCertPem(cert) {
328
- return `${cert.toString("pem")}\n`;
329
- }
330
- async function exportKeyPem(key) {
331
- return toPkcs8Pem(await webcrypto.subtle.exportKey("pkcs8", key));
332
- }
333
- /** SHA-256 fingerprint of the DER cert, colon-hex uppercase (Node style). */
334
- function caFingerprint(certPem) {
335
- return new X509Certificate(certPem).fingerprint256;
336
- }
337
- /** Compact fingerprint (lowercase hex, no colons). */
338
- function caFingerprintCompact(certPem) {
339
- return createHash("sha256").update(new X509Certificate(certPem).raw).digest("hex");
340
- }
341
- async function generateMeshCa(now = /* @__PURE__ */ new Date()) {
342
- const keys = await webcrypto.subtle.generateKey(MESH_KEY_ALGORITHM, true, ["sign", "verify"]);
343
- const extensions = [
344
- new BasicConstraintsExtension(true, 0, true),
345
- new KeyUsagesExtension(KeyUsageFlags.keyCertSign | KeyUsageFlags.cRLSign, true),
346
- await SubjectKeyIdentifierExtension.create(keys.publicKey)
347
- ];
348
- const cert = await X509CertificateGenerator.createSelfSigned({
349
- serialNumber: freshSerial(),
350
- name: `CN=${MESH_CA_COMMON_NAME}`,
351
- notBefore: backdatedNotBefore(now),
352
- notAfter: new Date(now.getTime() + MESH_CA_VALIDITY_DAYS * MS_PER_DAY),
353
- keys,
354
- signingAlgorithm: MESH_SIGNING_ALGORITHM,
355
- extensions
356
- });
357
- return {
358
- certPem: toCertPem(cert),
359
- keyPem: await exportKeyPem(keys.privateKey),
360
- cert,
361
- privateKey: keys.privateKey,
362
- publicKey: keys.publicKey
363
- };
364
- }
365
- async function loadMeshCa(certPem, keyPem) {
366
- const cert = new X509Certificate$1(certPem);
367
- return {
368
- certPem,
369
- keyPem,
370
- cert,
371
- privateKey: await webcrypto.subtle.importKey("pkcs8", PemConverter.decodeFirst(keyPem), MESH_KEY_ALGORITHM, true, ["sign"]),
372
- publicKey: await cert.publicKey.export(webcrypto)
373
- };
374
- }
375
- /**
376
- * Issue a leaf from a CSR. CN must be present; when `expectedNodeId` is set
377
- * it must match. Validity: 30 days.
378
- */
379
- async function issueMeshLeafFromCsr(ca, csrPem, opts = {}) {
380
- const csr = new Pkcs10CertificateRequest(csrPem);
381
- if (!await csr.verify(webcrypto)) throw new Error("CSR signature is invalid");
382
- const cn = subjectCn(csr.subject);
383
- if (cn === null || cn.length === 0) throw new Error("CSR subject has no CN");
384
- if (opts.allowReserved !== true && !isValidAgentNodeId(cn)) throw new Error(`CSR CN '${cn}' is not an id an agent may carry`);
385
- if (opts.expectedNodeId !== void 0 && opts.expectedNodeId !== cn) throw new Error(`CSR CN '${cn}' does not match the token nodeId '${opts.expectedNodeId}'`);
386
- const now = opts.now ?? /* @__PURE__ */ new Date();
387
- const validDays = opts.validDays ?? 30;
388
- const serialNumber = freshSerial();
389
- const notAfter = new Date(now.getTime() + validDays * MS_PER_DAY);
390
- const extensions = [
391
- new BasicConstraintsExtension(false, void 0, true),
392
- new KeyUsagesExtension(KeyUsageFlags.digitalSignature, true),
393
- new ExtendedKeyUsageExtension([SERVER_AUTH_OID, CLIENT_AUTH_OID]),
394
- await SubjectKeyIdentifierExtension.create(csr.publicKey),
395
- await AuthorityKeyIdentifierExtension.create(ca.cert)
396
- ];
397
- return {
398
- certPem: toCertPem(await X509CertificateGenerator.create({
399
- serialNumber,
400
- subject: `CN=${cn}`,
401
- issuer: ca.cert.subject,
402
- notBefore: backdatedNotBefore(now),
403
- notAfter,
404
- publicKey: csr.publicKey,
405
- signingKey: ca.privateKey,
406
- signingAlgorithm: MESH_SIGNING_ALGORITHM,
407
- extensions
408
- })),
409
- serialNumber,
410
- notAfter,
411
- commonName: cn
412
- };
413
- }
414
- /** Issue a leaf for a known nodeID with a freshly generated key pair (tests / hub self). */
415
- async function issueMeshLeafForNode(ca, nodeId, opts = {}) {
416
- const keys = await webcrypto.subtle.generateKey(MESH_KEY_ALGORITHM, true, ["sign", "verify"]);
417
- return {
418
- ...await issueMeshLeafFromCsr(ca, await createMeshCsrPem(keys, nodeId), {
419
- expectedNodeId: nodeId,
420
- now: opts.now,
421
- validDays: opts.validDays,
422
- allowReserved: true
423
- }),
424
- keyPem: await exportKeyPem(keys.privateKey)
425
- };
426
- }
427
- function subjectCn(subject) {
428
- return /(?:^|,)\s*CN\s*=\s*([^,]+)/i.exec(subject)?.[1]?.trim() ?? null;
429
- }
430
- async function createMeshCsrPem(keys, commonName) {
431
- return `${(await Pkcs10CertificateRequestGenerator.create({
432
- name: `CN=${commonName}`,
433
- keys,
434
- signingAlgorithm: MESH_SIGNING_ALGORITHM
435
- })).toString("pem")}\n`;
436
- }
437
- async function generateMeshKeyPair() {
438
- return webcrypto.subtle.generateKey(MESH_KEY_ALGORITHM, true, ["sign", "verify"]);
439
- }
440
- async function exportMeshPrivateKeyPem(key) {
441
- return exportKeyPem(key);
442
- }
443
- //#endregion
444
291
  //#region src/kernel/moleculer/mesh-mtls/mesh-ca-keeper.ts
445
- var SLOT$3 = Symbol.for("camstack.mesh.ca");
292
+ var SLOT$2 = Symbol.for("camstack.mesh.ca");
446
293
  var NOT_LOADED = {
447
294
  state: "unavailable",
448
295
  reason: "not-loaded"
@@ -454,10 +301,10 @@ function isState(value) {
454
301
  return state === "unavailable" && typeof Reflect.get(value, "reason") === "string";
455
302
  }
456
303
  function setProcessMeshCa(state) {
457
- Reflect.set(globalThis, SLOT$3, state);
304
+ Reflect.set(globalThis, SLOT$2, state);
458
305
  }
459
306
  function getProcessMeshCaState() {
460
- const value = Reflect.get(globalThis, SLOT$3);
307
+ const value = Reflect.get(globalThis, SLOT$2);
461
308
  return isState(value) ? value : NOT_LOADED;
462
309
  }
463
310
  function requireProcessMeshCa() {
@@ -599,10 +446,10 @@ async function loadOrGenerateMeshCa(deps) {
599
446
  var MeshCrl = class {
600
447
  serials = /* @__PURE__ */ new Set();
601
448
  revoke(serialNumber) {
602
- this.serials.add(normalizeSerial$1(serialNumber));
449
+ this.serials.add(normalizeSerial(serialNumber));
603
450
  }
604
451
  isRevoked(serialNumber) {
605
- return this.serials.has(normalizeSerial$1(serialNumber));
452
+ return this.serials.has(normalizeSerial(serialNumber));
606
453
  }
607
454
  list() {
608
455
  return [...this.serials];
@@ -610,424 +457,21 @@ var MeshCrl = class {
610
457
  /** Restore from persisted serials (system-settings). */
611
458
  replaceAll(serials) {
612
459
  this.serials.clear();
613
- for (const s of serials) this.serials.add(normalizeSerial$1(s));
460
+ for (const s of serials) this.serials.add(normalizeSerial(s));
614
461
  }
615
462
  };
616
- function normalizeSerial$1(serial) {
463
+ function normalizeSerial(serial) {
617
464
  return serial.replace(/^0x/i, "").replace(/:/g, "").toLowerCase();
618
465
  }
619
- var SLOT$2 = Symbol.for("camstack.mesh.crl");
466
+ var SLOT$1 = Symbol.for("camstack.mesh.crl");
620
467
  function processMeshCrl() {
621
- const existing = Reflect.get(globalThis, SLOT$2);
468
+ const existing = Reflect.get(globalThis, SLOT$1);
622
469
  if (existing instanceof MeshCrl) return existing;
623
470
  const crl = new MeshCrl();
624
- Reflect.set(globalThis, SLOT$2, crl);
471
+ Reflect.set(globalThis, SLOT$1, crl);
625
472
  return crl;
626
473
  }
627
474
  //#endregion
628
- //#region src/kernel/moleculer/mesh-mtls/mesh-certificate-registry.ts
629
- /**
630
- * The hub's record of every mesh leaf (D856): which certificate each node holds,
631
- * when it expires, and which serials are revoked.
632
- *
633
- * Three ways a row appears:
634
- * - `enroll` / `renewal` / `boot` - the hub issued it and wrote it down at the
635
- * moment of issuing (the authoritative record);
636
- * - `observed` - a node enrolled before this record existed (or by a path that
637
- * did not write it) presented this leaf on its LIVE mutual-TLS connection.
638
- *
639
- * Revoked serials are persisted here and replayed into the in-memory CRL at boot,
640
- * so a revocation survives a hub restart. Hub only: agents persist none of it.
641
- */
642
- /**
643
- * @durable class=config owner=system-config
644
- * write="the hub records every mesh leaf it issues (enroll, renewal, boot) and every
645
- * leaf a connected node is observed presenting; a revocation stamps revokedAt"
646
- * retention="a revoked or expired row is kept 90 days past its end, then reaped; a
647
- * live row is never deleted. Forgetting a node does not delete its rows."
648
- */
649
- var MESH_NODE_CERTIFICATES_COLLECTION = "mesh_node_certificates";
650
- var MESH_NODE_CERTIFICATES_COLUMNS = [
651
- {
652
- name: "id",
653
- type: "TEXT",
654
- primaryKey: true,
655
- notNull: true
656
- },
657
- {
658
- name: "nodeId",
659
- type: "TEXT",
660
- notNull: true
661
- },
662
- {
663
- name: "serial",
664
- type: "TEXT",
665
- notNull: true
666
- },
667
- {
668
- name: "fingerprint",
669
- type: "TEXT",
670
- notNull: true
671
- },
672
- {
673
- name: "notBefore",
674
- type: "INTEGER",
675
- notNull: true
676
- },
677
- {
678
- name: "notAfter",
679
- type: "INTEGER",
680
- notNull: true
681
- },
682
- {
683
- name: "issuedAt",
684
- type: "INTEGER",
685
- notNull: true
686
- },
687
- {
688
- name: "issuedVia",
689
- type: "TEXT",
690
- notNull: true
691
- },
692
- {
693
- name: "revokedAt",
694
- type: "INTEGER"
695
- },
696
- {
697
- name: "revokedReason",
698
- type: "TEXT"
699
- }
700
- ];
701
- var RETENTION_MS = 90 * 864e5;
702
- /**
703
- * A leaf the hub signed for a renewal that did not complete. It must not be the node's
704
- * `current` leaf, but it is NOT on the CRL: the node may still hold it (the swap
705
- * could have landed without the hub seeing it), and cutting it off would be the
706
- * outage the hand-over exists to prevent. If the node is later seen presenting it, it
707
- * is reinstated.
708
- */
709
- var RENEWAL_ABANDONED = "renewal-abandoned";
710
- var VIAS = [
711
- "enroll",
712
- "pairing",
713
- "renewal",
714
- "boot",
715
- "observed"
716
- ];
717
- /** CN, serial, fingerprint and validity of a leaf PEM (or DER). */
718
- function describeMeshLeaf(cert) {
719
- const x509 = new X509Certificate(cert);
720
- return {
721
- cn: subjectCn(x509.subject) ?? "",
722
- serial: x509.serialNumber,
723
- fingerprint: x509.fingerprint256,
724
- notBefore: Date.parse(x509.validFrom),
725
- notAfter: Date.parse(x509.validTo)
726
- };
727
- }
728
- function normalizeSerial(serial) {
729
- return serial.replace(/^0x/i, "").replace(/:/g, "").toLowerCase();
730
- }
731
- function parse$2(data) {
732
- const str = (k) => {
733
- const v = data[k];
734
- return typeof v === "string" && v.length > 0 ? v : null;
735
- };
736
- const num = (k) => {
737
- const v = data[k];
738
- return typeof v === "number" && Number.isFinite(v) ? v : null;
739
- };
740
- const nodeId = str("nodeId");
741
- const serial = str("serial");
742
- const fingerprint = str("fingerprint");
743
- const notBefore = num("notBefore");
744
- const notAfter = num("notAfter");
745
- const issuedAt = num("issuedAt");
746
- if (nodeId === null || serial === null || fingerprint === null || notBefore === null || notAfter === null || issuedAt === null) return null;
747
- return {
748
- nodeId,
749
- serial,
750
- fingerprint,
751
- notBefore,
752
- notAfter,
753
- issuedAt,
754
- issuedVia: VIAS.find((v) => v === data["issuedVia"]) ?? "observed",
755
- revokedAt: num("revokedAt"),
756
- revokedReason: str("revokedReason")
757
- };
758
- }
759
- var MeshCertificateRegistry = class {
760
- store;
761
- deps;
762
- rows = /* @__PURE__ */ new Map();
763
- constructor(store, deps = {}) {
764
- this.store = store;
765
- this.deps = deps;
766
- }
767
- now() {
768
- return (this.deps.now ?? Date.now)();
769
- }
770
- async load() {
771
- const rows = await this.store.query.query({ collection: MESH_NODE_CERTIFICATES_COLLECTION });
772
- for (const row of rows) {
773
- const record = parse$2(row.data);
774
- if (record !== null) this.rows.set(record.fingerprint, record);
775
- }
776
- }
777
- /** Write down a leaf the hub just issued. Idempotent per fingerprint. */
778
- async recordIssued(nodeId, certPem, via) {
779
- const leaf = describeMeshLeaf(certPem);
780
- const existing = this.rows.get(leaf.fingerprint);
781
- if (existing !== void 0) return existing;
782
- const record = {
783
- nodeId,
784
- serial: leaf.serial,
785
- fingerprint: leaf.fingerprint,
786
- notBefore: leaf.notBefore,
787
- notAfter: leaf.notAfter,
788
- issuedAt: this.now(),
789
- issuedVia: via,
790
- revokedAt: null,
791
- revokedReason: null
792
- };
793
- await this.insert(record);
794
- this.deps.logger?.info("Mesh certificate recorded", {
795
- tags: { nodeId },
796
- meta: {
797
- via,
798
- serial: leaf.serial,
799
- notAfter: new Date(leaf.notAfter).toISOString()
800
- }
801
- });
802
- return record;
803
- }
804
- /**
805
- * A node was seen presenting `leaf` on its live connection. A leaf the hub already
806
- * knows is left alone; an unknown one is recorded `observed` (a node enrolled
807
- * before this record existed).
808
- */
809
- async recordObserved(nodeId, leaf) {
810
- const known = this.rows.get(leaf.fingerprint);
811
- if (known !== void 0) {
812
- if (known.revokedReason !== "renewal-abandoned") return known.revokedAt === null ? this.abandonRenewalsNewerThan(known) : false;
813
- const reinstated = {
814
- ...known,
815
- revokedAt: null,
816
- revokedReason: null
817
- };
818
- this.rows.set(known.fingerprint, reinstated);
819
- await this.persist(reinstated);
820
- this.deps.logger?.warn("An abandoned renewal leaf is in use - reinstated", {
821
- tags: { nodeId },
822
- meta: { serial: known.serial }
823
- });
824
- return true;
825
- }
826
- const record = {
827
- nodeId,
828
- serial: leaf.serial,
829
- fingerprint: leaf.fingerprint,
830
- notBefore: leaf.notBefore,
831
- notAfter: leaf.notAfter,
832
- issuedAt: this.now(),
833
- issuedVia: "observed",
834
- revokedAt: null,
835
- revokedReason: null
836
- };
837
- await this.insert(record);
838
- this.deps.logger?.info("Mesh certificate observed on a live connection and recorded", {
839
- tags: { nodeId },
840
- meta: {
841
- serial: leaf.serial,
842
- fingerprint: leaf.fingerprint
843
- }
844
- });
845
- return true;
846
- }
847
- list(nodeId) {
848
- return [...this.rows.values()].filter((r) => nodeId === void 0 || r.nodeId === nodeId).toSorted((a, b) => b.issuedAt - a.issuedAt);
849
- }
850
- /** The newest non-revoked leaf of a node, or `undefined`. */
851
- currentFor(nodeId) {
852
- return this.list(nodeId).find((r) => r.revokedAt === null);
853
- }
854
- /** Every non-revoked leaf of a node (a renewal in flight has two). */
855
- liveFor(nodeId) {
856
- return this.list(nodeId).filter((r) => r.revokedAt === null);
857
- }
858
- /** Stamp a leaf revoked (and mirror it into `crl`). `false` when unknown or already revoked. */
859
- async revoke(fingerprint, reason, crl) {
860
- const record = this.rows.get(fingerprint);
861
- if (record === void 0 || record.revokedAt !== null) return false;
862
- const revoked = {
863
- ...record,
864
- revokedAt: this.now(),
865
- revokedReason: reason
866
- };
867
- this.rows.set(fingerprint, revoked);
868
- crl?.revoke(record.serial);
869
- await this.persist(revoked);
870
- this.deps.logger?.warn("Mesh certificate revoked", {
871
- tags: { nodeId: record.nodeId },
872
- meta: {
873
- serial: record.serial,
874
- reason
875
- }
876
- });
877
- return true;
878
- }
879
- /**
880
- * Operator revocation of a whole node: EVERY leaf of the node that is not already on the
881
- * CRL goes on it - the current one, an observed one, a renewal one, and a leaf that was set
882
- * aside (`renewal-abandoned`: a copy of it may sit on a stolen box, and it must not stay
883
- * valid just because the hub once set it aside). Returns the serials put on the CRL.
884
- * A leaf revoked this way is never reinstated by `recordObserved`.
885
- */
886
- async revokeAllForNode(nodeId, reason, crl, keepFingerprint) {
887
- const serials = [];
888
- for (const record of this.list(nodeId)) {
889
- if (keepFingerprint !== void 0 && record.fingerprint === keepFingerprint) continue;
890
- if (record.revokedAt !== null && record.revokedReason !== "renewal-abandoned") continue;
891
- const revoked = {
892
- ...record,
893
- revokedAt: record.revokedAt ?? this.now(),
894
- revokedReason: reason
895
- };
896
- this.rows.set(record.fingerprint, revoked);
897
- crl.revoke(record.serial);
898
- await this.persist(revoked);
899
- serials.push(record.serial);
900
- }
901
- if (serials.length > 0) this.deps.logger?.warn("Every mesh certificate of the node revoked", {
902
- tags: { nodeId },
903
- meta: {
904
- serials,
905
- reason
906
- }
907
- });
908
- return serials;
909
- }
910
- /**
911
- * At boot: a node with TWO live leaves had a renewal in flight when the hub stopped. The
912
- * newer (renewal) one is set aside - it is not the node's current leaf until the node is
913
- * seen presenting it, which reinstates it. It is NOT put on the CRL.
914
- */
915
- async settleInterruptedRenewals() {
916
- let settled = 0;
917
- const byNode = /* @__PURE__ */ new Map();
918
- for (const record of this.rows.values()) {
919
- if (record.revokedAt !== null) continue;
920
- byNode.set(record.nodeId, [...byNode.get(record.nodeId) ?? [], record]);
921
- }
922
- for (const records of byNode.values()) {
923
- if (records.length < 2) continue;
924
- for (const record of records) if (record.issuedVia === "renewal" && await this.abandon(record.fingerprint)) settled += 1;
925
- }
926
- return settled;
927
- }
928
- /** Set a never-completed renewal leaf aside (not current, NOT on the CRL). */
929
- /** Fingerprints of renewal leaves whose handover is running right now (this process only). */
930
- renewalsInFlight = /* @__PURE__ */ new Set();
931
- /**
932
- * A renewal's leaf is "in flight" from signing until the handover ends. While it is, a node seen
933
- * presenting its OLD leaf is simply not swapped yet: the new leaf is not set aside (that would
934
- * flap set-aside / reinstate on the node's first connection with it).
935
- */
936
- beginRenewal(fingerprint) {
937
- this.renewalsInFlight.add(fingerprint);
938
- }
939
- endRenewal(fingerprint) {
940
- this.renewalsInFlight.delete(fingerprint);
941
- }
942
- async abandonRenewalsNewerThan(presented) {
943
- let changed = false;
944
- for (const record of this.liveFor(presented.nodeId)) {
945
- if (record.fingerprint === presented.fingerprint) continue;
946
- if (record.issuedVia !== "renewal" || record.issuedAt <= presented.issuedAt) continue;
947
- if (this.renewalsInFlight.has(record.fingerprint)) continue;
948
- if (await this.abandon(record.fingerprint)) changed = true;
949
- }
950
- return changed;
951
- }
952
- async abandon(fingerprint) {
953
- const record = this.rows.get(fingerprint);
954
- if (record === void 0 || record.revokedAt !== null) return false;
955
- const abandoned = {
956
- ...record,
957
- revokedAt: this.now(),
958
- revokedReason: RENEWAL_ABANDONED
959
- };
960
- this.rows.set(fingerprint, abandoned);
961
- await this.persist(abandoned);
962
- this.deps.logger?.warn("Renewal leaf set aside (not current, not on the CRL)", {
963
- tags: { nodeId: record.nodeId },
964
- meta: { serial: record.serial }
965
- });
966
- return true;
967
- }
968
- /** Replay every persisted revocation into `crl` (hub boot). Set-aside leaves are not revocations. */
969
- restoreCrl(crl) {
970
- let restored = 0;
971
- for (const record of this.rows.values()) {
972
- if (record.revokedAt === null || record.revokedReason === "renewal-abandoned") continue;
973
- crl.revoke(record.serial);
974
- restored += 1;
975
- }
976
- return restored;
977
- }
978
- /** Is `serial` listed as revoked here? */
979
- isRevoked(serial) {
980
- const wanted = normalizeSerial(serial);
981
- for (const record of this.rows.values()) if (record.revokedAt !== null && record.revokedReason !== "renewal-abandoned" && normalizeSerial(record.serial) === wanted) return true;
982
- return false;
983
- }
984
- async reap() {
985
- const cutoff = this.now() - RETENTION_MS;
986
- const dead = [...this.rows.values()].filter((r) => (r.revokedAt ?? r.notAfter) < cutoff);
987
- for (const r of dead) {
988
- this.rows.delete(r.fingerprint);
989
- await this.store.delete.mutate({
990
- collection: MESH_NODE_CERTIFICATES_COLLECTION,
991
- key: r.fingerprint
992
- });
993
- }
994
- return dead.length;
995
- }
996
- async insert(record) {
997
- this.rows.set(record.fingerprint, record);
998
- await this.store.insert.mutate({
999
- collection: MESH_NODE_CERTIFICATES_COLLECTION,
1000
- record: {
1001
- id: record.fingerprint,
1002
- data: { ...record }
1003
- }
1004
- });
1005
- }
1006
- async persist(record) {
1007
- try {
1008
- await this.store.update.mutate({
1009
- collection: MESH_NODE_CERTIFICATES_COLLECTION,
1010
- id: record.fingerprint,
1011
- data: { ...record }
1012
- });
1013
- } catch (error) {
1014
- this.deps.logger?.error("Mesh certificate write failed - the change holds until restart", {
1015
- tags: { nodeId: record.nodeId },
1016
- meta: { error: error instanceof Error ? error.message : String(error) }
1017
- });
1018
- }
1019
- }
1020
- };
1021
- var SLOT$1 = Symbol.for("camstack.mesh.certificate-registry");
1022
- function setProcessMeshCertificateRegistry(registry) {
1023
- if (registry === null) Reflect.deleteProperty(globalThis, SLOT$1);
1024
- else Reflect.set(globalThis, SLOT$1, registry);
1025
- }
1026
- function getProcessMeshCertificateRegistry() {
1027
- const value = Reflect.get(globalThis, SLOT$1);
1028
- return value !== null && typeof value === "object" && typeof Reflect.get(value, "recordIssued") === "function" ? value : null;
1029
- }
1030
- //#endregion
1031
475
  //#region src/kernel/moleculer/mesh-mtls/mesh-tls-gate.ts
1032
476
  var STATE_SLOT = Symbol.for("camstack.mesh.tls-listener-state");
1033
477
  function setProcessMeshTlsListenerState(state) {
@@ -88467,9 +87911,11 @@ var SystemConfigAddon = class extends BaseAddon {
88467
87911
  }
88468
87912
  return null;
88469
87913
  }
88470
- this.loadAgentHttpsNames(store);
87914
+ const records = this.ctx.records;
87915
+ const meshKind = records === void 0 ? null : (await records.declare(systemConfigRecordKinds), records.kind(systemConfigRecordKinds["mesh-node-certificates"]));
87916
+ this.loadAgentHttpsNames(store, records);
88471
87917
  try {
88472
- await store.declareCollection.mutate({
87918
+ if (records === void 0) await store.declareCollection.mutate({
88473
87919
  collection: MESH_NODE_CERTIFICATES_COLLECTION,
88474
87920
  columns: MESH_NODE_CERTIFICATES_COLUMNS,
88475
87921
  indexes: [{
@@ -88477,7 +87923,10 @@ var SystemConfigAddon = class extends BaseAddon {
88477
87923
  columns: ["nodeId"]
88478
87924
  }]
88479
87925
  });
88480
- const registry = new MeshCertificateRegistry(store, { logger: this.ctx.logger });
87926
+ const registry = new MeshCertificateRegistry(store, {
87927
+ logger: this.ctx.logger,
87928
+ meshKind
87929
+ });
88481
87930
  await registry.load();
88482
87931
  const restored = registry.restoreCrl(processMeshCrl());
88483
87932
  const settled = await registry.settleInterruptedRenewals();
@@ -88491,13 +87940,16 @@ var SystemConfigAddon = class extends BaseAddon {
88491
87940
  }
88492
87941
  }
88493
87942
  /** Which names the hub certified to which agent. Best effort; nothing waits on it. */
88494
- async loadAgentHttpsNames(store) {
87943
+ async loadAgentHttpsNames(store, records) {
88495
87944
  try {
88496
- await store.declareCollection.mutate({
87945
+ if (records === void 0) await store.declareCollection.mutate({
88497
87946
  collection: AGENT_HTTPS_NAMES_COLLECTION,
88498
87947
  columns: AGENT_HTTPS_NAMES_COLUMNS
88499
87948
  });
88500
- const names = new AgentHttpsNames(store);
87949
+ const names = records === void 0 ? new AgentHttpsNames(store) : new AgentHttpsNames({
87950
+ agentHttpsNamesKind: records.kind(systemConfigRecordKinds["agent-https-names"]),
87951
+ legacyStore: store
87952
+ });
88501
87953
  await names.load();
88502
87954
  setProcessAgentHttpsNames(names);
88503
87955
  } catch (err) {
@@ -88812,4 +88264,4 @@ function parseMintUnlockInput(input) {
88812
88264
  };
88813
88265
  }
88814
88266
  //#endregion
88815
- export { generateMeshKeyPair as $, setProcessMeshPeerTransportLookup as A, describeMeshLeaf as B, setProcessMeshTlsEnabler as C, getProcessPeerLeaf as D, getProcessNodeMeshTransport as E, setProcessMeshTlsListenerState as F, MeshCaKeeper as G, setProcessMeshCertificateRegistry as H, MESH_NODE_CERTIFICATES_COLLECTION as I, caFingerprint as J, getProcessMeshCaState as K, MESH_NODE_CERTIFICATES_COLUMNS as L, revokeMeshCertificate as M, getProcessMeshTlsListenerState as N, isProcessVerifiedMeshPeer as O, openMeshTlsWhenRevocationsLoaded as P, generateMeshCa as Q, MeshCertificateRegistry as R, ServiceBroker as S, SYSTEM_CONFIG_CLUSTER_SECTION_ID, SystemConfigAddon, SystemConfigAddon as default, emitProcessNodeRegistered as T, MeshCrl as U, getProcessMeshCertificateRegistry as V, processMeshCrl as W, createMeshCsrPem as X, caFingerprintCompact as Y, exportMeshPrivateKeyPem as Z, signPairingProof as _, readCidrSetting as _t, hubHostFromMeshAddress as a, AGENT_UI_UNLOCK_TTL_MS as at, TlsTcpTransporter as b, PAIRING_MAX_SESSIONS as c, AGENT_UI_UNLOCK_VERSION as ct, PAIRING_PROTOCOL as d, mintAgentUiUnlockTicket as dt, isValidAgentNodeId as et, PAIRING_TTL_MS as f, parseAgentDashboardOrigins as ft, keyFingerprintShort as g, parseCidrList as gt, describeCsr as h, normalizeIp as ht, AgentPairing as i, AGENT_DASHBOARD_ORIGINS_FIELD as it, renewMeshCertificate as j, onProcessNodeRegistered as k, PAIRING_PATHS as l, UnlockTicketJtiStore as lt, computePairingSas as m, createCidrMatcher as mt, HubPairing as n, issueMeshLeafFromCsr as nt, PAIRING_CODE_DIGITS as o, AGENT_UI_UNLOCK_TYP as ot, computePairingCommitment as p, verifyAgentUiUnlockTicket as pt, requireProcessMeshCa as q, PairingHttpError as r, loadMeshCa as rt, PAIRING_MAX_CODE_ATTEMPTS as s, AGENT_UI_UNLOCK_USE as st, systemConfigMeshActions as t, issueMeshLeafForNode as tt, PAIRING_PIN_DIGITS as u, isAllowedAgentDashboardReturnTo as ut, verifyPairingProof as v, dropProcessPeer as w, Errors as x, MESH_TLS_PORT_HELLO_FIELD as y, RENEWAL_ABANDONED as z };
88267
+ export { parseCidrList as $, setProcessMeshPeerTransportLookup as A, requireProcessMeshCa as B, setProcessMeshTlsEnabler as C, getProcessPeerLeaf as D, getProcessNodeMeshTransport as E, setProcessMeshTlsListenerState as F, AGENT_UI_UNLOCK_VERSION as G, AGENT_UI_UNLOCK_TTL_MS as H, MeshCrl as I, mintAgentUiUnlockTicket as J, UnlockTicketJtiStore as K, processMeshCrl as L, revokeMeshCertificate as M, getProcessMeshTlsListenerState as N, isProcessVerifiedMeshPeer as O, openMeshTlsWhenRevocationsLoaded as P, normalizeIp as Q, MeshCaKeeper as R, ServiceBroker as S, SYSTEM_CONFIG_CLUSTER_SECTION_ID, SystemConfigAddon, SystemConfigAddon as default, emitProcessNodeRegistered as T, AGENT_UI_UNLOCK_TYP as U, AGENT_DASHBOARD_ORIGINS_FIELD as V, AGENT_UI_UNLOCK_USE as W, verifyAgentUiUnlockTicket as X, parseAgentDashboardOrigins as Y, createCidrMatcher as Z, signPairingProof as _, hubHostFromMeshAddress as a, TlsTcpTransporter as b, PAIRING_MAX_SESSIONS as c, PAIRING_PROTOCOL as d, readCidrSetting as et, PAIRING_TTL_MS as f, keyFingerprintShort as g, describeCsr as h, AgentPairing as i, renewMeshCertificate as j, onProcessNodeRegistered as k, PAIRING_PATHS as l, computePairingSas as m, HubPairing as n, PAIRING_CODE_DIGITS as o, computePairingCommitment as p, isAllowedAgentDashboardReturnTo as q, PairingHttpError as r, PAIRING_MAX_CODE_ATTEMPTS as s, systemConfigMeshActions as t, PAIRING_PIN_DIGITS as u, verifyPairingProof as v, dropProcessPeer as w, Errors as x, MESH_TLS_PORT_HELLO_FIELD as y, getProcessMeshCaState as z };