@camstack/system 1.2.433 → 1.2.435

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 (87) hide show
  1. package/dist/{agent-https-DtRU9A7I.mjs → agent-https-B8lKYVtU.mjs} +34 -6
  2. package/dist/{agent-https-CHZTxK-q.js → agent-https-BZIwS4xF.js} +34 -6
  3. package/dist/auth/device-ca.d.ts +0 -10
  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.js +1 -1
  9. package/dist/builtins/alerts/alerts.addon.mjs +1 -1
  10. package/dist/builtins/autotrack/index.js +1 -1
  11. package/dist/builtins/autotrack/index.mjs +1 -1
  12. package/dist/builtins/backup-orchestrator/backup-orchestrator.addon.js +2 -2
  13. package/dist/builtins/backup-orchestrator/backup-orchestrator.addon.mjs +2 -2
  14. package/dist/builtins/calendars/calendars.addon.js +1 -1
  15. package/dist/builtins/calendars/calendars.addon.mjs +1 -1
  16. package/dist/builtins/camera-grid/index.js +1 -1
  17. package/dist/builtins/camera-grid/index.mjs +1 -1
  18. package/dist/builtins/composer/composer.addon.js +2 -2
  19. package/dist/builtins/composer/composer.addon.mjs +2 -2
  20. package/dist/builtins/console-logging/index.js +1 -1
  21. package/dist/builtins/console-logging/index.mjs +1 -1
  22. package/dist/builtins/core-blocks/core-blocks.addon.js +2 -2
  23. package/dist/builtins/core-blocks/core-blocks.addon.mjs +2 -2
  24. package/dist/builtins/device-manager/device-manager.addon.js +2 -2
  25. package/dist/builtins/device-manager/device-manager.addon.mjs +2 -2
  26. package/dist/builtins/hub-forwarder/index.js +1 -1
  27. package/dist/builtins/hub-forwarder/index.mjs +1 -1
  28. package/dist/builtins/keychain/index.js +3 -3
  29. package/dist/builtins/keychain/index.mjs +3 -3
  30. package/dist/builtins/liveness-monitor/liveness-monitor.addon.js +1 -1
  31. package/dist/builtins/liveness-monitor/liveness-monitor.addon.mjs +1 -1
  32. package/dist/builtins/local-auth/local-auth.addon.js +9 -4
  33. package/dist/builtins/local-auth/local-auth.addon.mjs +9 -4
  34. package/dist/builtins/local-network/address-book.d.ts +13 -0
  35. package/dist/builtins/local-network/local-network.addon.d.ts +4 -2
  36. package/dist/builtins/local-network/local-network.addon.js +78 -22
  37. package/dist/builtins/local-network/local-network.addon.mjs +78 -22
  38. package/dist/builtins/loki-logging/index.js +1 -1
  39. package/dist/builtins/loki-logging/index.mjs +1 -1
  40. package/dist/builtins/native-metrics/native-metrics.addon.js +1 -1
  41. package/dist/builtins/native-metrics/native-metrics.addon.mjs +1 -1
  42. package/dist/builtins/platform-probe/index.js +1 -1
  43. package/dist/builtins/platform-probe/index.mjs +1 -1
  44. package/dist/builtins/remote-access-orchestrator/remote-access-orchestrator.addon.js +1 -1
  45. package/dist/builtins/remote-access-orchestrator/remote-access-orchestrator.addon.mjs +1 -1
  46. package/dist/builtins/snapshot/index.js +1 -1
  47. package/dist/builtins/snapshot/index.mjs +1 -1
  48. package/dist/builtins/sqlite-storage/filesystem-storage.addon.js +1 -1
  49. package/dist/builtins/sqlite-storage/filesystem-storage.addon.mjs +1 -1
  50. package/dist/builtins/sqlite-storage/index.js +1 -1
  51. package/dist/builtins/sqlite-storage/index.mjs +1 -1
  52. package/dist/builtins/sqlite-storage/sqlite-settings.addon.js +3 -3
  53. package/dist/builtins/sqlite-storage/sqlite-settings.addon.mjs +3 -3
  54. package/dist/builtins/storage-orchestrator/storage-orchestrator.addon.js +1 -1
  55. package/dist/builtins/storage-orchestrator/storage-orchestrator.addon.mjs +1 -1
  56. package/dist/builtins/system-config/system-config.addon.js +23 -8
  57. package/dist/builtins/system-config/system-config.addon.mjs +23 -8
  58. package/dist/builtins/winston-logging/index.js +1 -1
  59. package/dist/builtins/winston-logging/index.mjs +1 -1
  60. package/dist/{composition-sources-BgJWQMjr.js → composition-sources-Cm42mgbv.js} +1 -1
  61. package/dist/{composition-sources-8-cpAt1c.mjs → composition-sources-_7W2Ly9s.mjs} +1 -1
  62. package/dist/{constants-Ah3T_KAW.js → constants-DL87WgeN.js} +1 -1
  63. package/dist/{constants-Cg9ve13y.mjs → constants-DoiTA134.mjs} +1 -1
  64. package/dist/{device-ca-DUrcTW5h.mjs → device-ca-B6YJZus6.mjs} +17 -6
  65. package/dist/{device-ca-NNP4Jz0P.js → device-ca-WXuKc8AX.js} +17 -6
  66. package/dist/{dist-DJnlnL7P.mjs → dist-Bz4_y8Xy.mjs} +80 -11
  67. package/dist/{dist-C6Yvfhpq.js → dist-CnUtkSwN.js} +91 -10
  68. package/dist/file-host-worker.js +1 -1
  69. package/dist/file-host-worker.mjs +1 -1
  70. package/dist/{hub-mdns-ciao-B50jAU5C.js → hub-mdns-ciao-CBLvq2oj.js} +2 -2
  71. package/dist/{hub-mdns-ciao-8_Ed1Za5.mjs → hub-mdns-ciao-DJRwtlA8.mjs} +2 -2
  72. package/dist/index.js +7 -7
  73. package/dist/index.mjs +7 -7
  74. package/dist/kernel/moleculer/mesh-mtls/mesh-ca.d.ts +0 -9
  75. package/dist/{lib-B_R6sPC3.mjs → lib-BeGzVQcd.mjs} +1 -1
  76. package/dist/{lib-DOJ5yyWA.js → lib-NNxHSOIE.js} +1 -1
  77. package/dist/{restore-archive-DqPaRjjY.js → restore-archive-BNoFLAg8.js} +1 -1
  78. package/dist/{restore-archive-C3_rzOCx.mjs → restore-archive-DJYuznWP.mjs} +1 -1
  79. package/dist/{retired-settings-keys-CAWHWDwy.mjs → retired-settings-keys-9nA85bwT.mjs} +1 -1
  80. package/dist/{retired-settings-keys-DJBQkZok.js → retired-settings-keys-CO3RqsDw.js} +1 -1
  81. package/dist/tls/cert-backdate.d.ts +10 -0
  82. package/dist/tls/cert-issue.d.ts +0 -20
  83. package/dist/{wal-maintenance-CPLvZbzA.js → wal-maintenance-D3gwRj1B.js} +0 -0
  84. package/dist/{wal-maintenance-Bc38yI3r.mjs → wal-maintenance-DLrbapzi.mjs} +0 -0
  85. package/dist/{x509.es-CAjSsrkk.mjs → x509.es-CDvj67p1.mjs} +14 -1
  86. package/dist/{x509.es-Dzl0BbmG.js → x509.es-r7Ht1thA.js} +19 -0
  87. 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 { Hr as hydrateSchema, Ir as customAction, Kr as isSecretClear, Lr as defineCustomActions, Yr as makeSecretMarker, oi as secretTreeFromSchema, qr as isSecretMarker, ui as transformSecretWrite, vr as errMsg, yr as BaseAddon } from "../../dist-DJnlnL7P.mjs";
2
+ import { Jr as isSecretClear, Rr as customAction, Wr as hydrateSchema, Yr as isSecretMarker, Zr as makeSecretMarker, br as errMsg, ci as secretTreeFromSchema, fi as transformSecretWrite, xr as BaseAddon, zr as defineCustomActions } from "../../dist-Bz4_y8Xy.mjs";
3
3
  import { t as require_safe_buffer } from "../../safe-buffer-B1OjL1I9.mjs";
4
- import { a as KeyUsagesExtension, c as Pkcs10CertificateRequestGenerator, d as X509Certificate$1, f as X509CertificateGenerator, i as KeyUsageFlags, n as BasicConstraintsExtension, o as PemConverter, p as cryptoProvider, r as ExtendedKeyUsageExtension, s as Pkcs10CertificateRequest, t as AuthorityKeyIdentifierExtension, u as SubjectKeyIdentifierExtension } from "../../x509.es-CAjSsrkk.mjs";
5
- import { A as AgentHttpsNames, M as setProcessAgentHttpsNames, O as AGENT_HTTPS_NAMES_COLLECTION, d as isPrivateAddress, j as getProcessAgentHttpsNames, k as AGENT_HTTPS_NAMES_COLUMNS, u as isLocalOnlyHostname } from "../../agent-https-DtRU9A7I.mjs";
6
- import { a as MESH_CA_KEY_REF, b as setProcessClusterSecretGate, c as MESH_JOIN_TOKEN_MAX_TTL_SEC, d as CLUSTER_SECRET_REF, i as MESH_CA_FIELD, l as SERVER_AUTH_OID, 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, v as hashClusterSecret } from "../../constants-Cg9ve13y.mjs";
4
+ import { a as KeyUsagesExtension, c as Pkcs10CertificateRequestGenerator, d as X509Certificate$1, f as X509CertificateGenerator, g as backdatedNotBefore, i as KeyUsageFlags, n as BasicConstraintsExtension, o as PemConverter, p as cryptoProvider, r as ExtendedKeyUsageExtension, s as Pkcs10CertificateRequest, t as AuthorityKeyIdentifierExtension, u as SubjectKeyIdentifierExtension } from "../../x509.es-CDvj67p1.mjs";
5
+ import { A as AgentHttpsNames, M as setProcessAgentHttpsNames, O as AGENT_HTTPS_NAMES_COLLECTION, d as isPrivateAddress, j as getProcessAgentHttpsNames, k as AGENT_HTTPS_NAMES_COLUMNS, u as isLocalOnlyHostname } from "../../agent-https-B8lKYVtU.mjs";
6
+ import { a as MESH_CA_KEY_REF, b as setProcessClusterSecretGate, c as MESH_JOIN_TOKEN_MAX_TTL_SEC, d as CLUSTER_SECRET_REF, i as MESH_CA_FIELD, l as SERVER_AUTH_OID, 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, v as hashClusterSecret } from "../../constants-DoiTA134.mjs";
7
7
  import { t as require_src } from "../../src-hG4grMU4.mjs";
8
8
  import { z } from "zod";
9
9
  import { X509Certificate, createHash, createHmac, createPrivateKey, randomBytes, randomInt, sign, timingSafeEqual, verify, webcrypto } from "node:crypto";
@@ -399,6 +399,15 @@ function parsePayloadEs256(value) {
399
399
  }
400
400
  //#endregion
401
401
  //#region src/kernel/moleculer/mesh-mtls/mesh-ca.ts
402
+ /**
403
+ * Hub mesh CA — EC P-256, key in the keychain, cert in `cluster.meshCa`.
404
+ *
405
+ * Distinct from the HTTPS local CA (`tls/cert-issue.ts`, RSA): the mesh CA
406
+ * signs node leaves (CN = nodeID) and join-token JWS (ES256). Issuance uses
407
+ * `@peculiar/x509` over WebCrypto — same library the HTTPS path already uses
408
+ * (installed `1.14.3`; registry latest at adoption time was `2.1.0` — stay on
409
+ * the pinned range already shipping).
410
+ */
402
411
  cryptoProvider.set(webcrypto);
403
412
  var MS_PER_DAY = 864e5;
404
413
  /** Key generation — EC P-256 (plan). WebCrypto DOM names are not in @types/node. */
@@ -449,7 +458,7 @@ async function generateMeshCa(now = /* @__PURE__ */ new Date()) {
449
458
  const cert = await X509CertificateGenerator.createSelfSigned({
450
459
  serialNumber: freshSerial(),
451
460
  name: `CN=${MESH_CA_COMMON_NAME}`,
452
- notBefore: now,
461
+ notBefore: backdatedNotBefore(now),
453
462
  notAfter: new Date(now.getTime() + MESH_CA_VALIDITY_DAYS * MS_PER_DAY),
454
463
  keys,
455
464
  signingAlgorithm: MESH_SIGNING_ALGORITHM,
@@ -500,7 +509,7 @@ async function issueMeshLeafFromCsr(ca, csrPem, opts = {}) {
500
509
  serialNumber,
501
510
  subject: `CN=${cn}`,
502
511
  issuer: ca.cert.subject,
503
- notBefore: now,
512
+ notBefore: backdatedNotBefore(now),
504
513
  notAfter,
505
514
  publicKey: csr.publicKey,
506
515
  signingKey: ca.privateKey,
@@ -88429,12 +88438,18 @@ function isHttpUrl(value) {
88429
88438
  return false;
88430
88439
  }
88431
88440
  }
88432
- /** The hub CA must be a self-signed CA certificate, valid now. */
88441
+ /**
88442
+ * Clock skew tolerated between the hub that minted a CA and this agent. X.509 dates have
88443
+ * one-second resolution and a fresh CA's notBefore is the hub's "now", so an agent whose clock
88444
+ * is even a moment behind would otherwise refuse a brand-new CA. Same bound as the offer `iat`.
88445
+ */
88446
+ var CA_CLOCK_SKEW_MS = 6e4;
88447
+ /** The hub CA must be a self-signed CA certificate, valid now (give or take the skew). */
88433
88448
  function readCaCertificate(pem, nowMs) {
88434
88449
  try {
88435
88450
  const cert = new X509Certificate(pem);
88436
88451
  if (!cert.ca || !cert.verify(cert.publicKey)) return null;
88437
- if (Date.parse(cert.validTo) <= nowMs || Date.parse(cert.validFrom) > nowMs) return null;
88452
+ if (Date.parse(cert.validTo) <= nowMs || Date.parse(cert.validFrom) > nowMs + CA_CLOCK_SKEW_MS) return null;
88438
88453
  return cert;
88439
88454
  } catch {
88440
88455
  return null;
@@ -3,7 +3,7 @@ Object.defineProperties(exports, {
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
5
  const require_chunk = require("../../chunk-Cek0wNdY.js");
6
- const require_dist = require("../../dist-C6Yvfhpq.js");
6
+ const require_dist = require("../../dist-CnUtkSwN.js");
7
7
  const require_formatter = require("../../formatter-DqAKDlvN.js");
8
8
  let node_path = require("node:path");
9
9
  node_path = require_chunk.__toESM(node_path);
@@ -1,4 +1,4 @@
1
- import { sn as logDestinationCapability, yr as BaseAddon } from "../../dist-DJnlnL7P.mjs";
1
+ import { ln as logDestinationCapability, xr as BaseAddon } from "../../dist-Bz4_y8Xy.mjs";
2
2
  import { t as formatLogLine } from "../../formatter-B7qW8bPJ.mjs";
3
3
  import * as path$1 from "node:path";
4
4
  import path from "node:path";
@@ -1,4 +1,4 @@
1
- const require_dist = require("./dist-C6Yvfhpq.js");
1
+ const require_dist = require("./dist-CnUtkSwN.js");
2
2
  //#region src/builtins/core-blocks/composition-sources.ts
3
3
  /**
4
4
  * Describe what a composition reads and writes for SAVE-time validation
@@ -1,4 +1,4 @@
1
- import { dr as compositionSourceKey, vr as errMsg } from "./dist-DJnlnL7P.mjs";
1
+ import { br as errMsg, pr as compositionSourceKey } from "./dist-Bz4_y8Xy.mjs";
2
2
  //#region src/builtins/core-blocks/composition-sources.ts
3
3
  /**
4
4
  * Describe what a composition reads and writes for SAVE-time validation
@@ -1,4 +1,4 @@
1
- const require_dist = require("./dist-C6Yvfhpq.js");
1
+ const require_dist = require("./dist-CnUtkSwN.js");
2
2
  let node_crypto = require("node:crypto");
3
3
  //#region src/kernel/moleculer/cluster-secret.ts
4
4
  /**
@@ -1,4 +1,4 @@
1
- import { Mr as buildSecretRef } from "./dist-DJnlnL7P.mjs";
1
+ import { Pr as buildSecretRef } from "./dist-Bz4_y8Xy.mjs";
2
2
  import { createHash, timingSafeEqual } from "node:crypto";
3
3
  //#region src/kernel/moleculer/cluster-secret.ts
4
4
  /**
@@ -1,5 +1,5 @@
1
- import { E as DEVICE_SAN_USER_PREFIX, Mr as buildSecretRef, T as DEVICE_SAN_CREDENTIAL_PREFIX } from "./dist-DJnlnL7P.mjs";
2
- import { a as KeyUsagesExtension, d as X509Certificate$1, f as X509CertificateGenerator, i as KeyUsageFlags, l as SubjectAlternativeNameExtension, n as BasicConstraintsExtension, o as PemConverter, p as cryptoProvider, r as ExtendedKeyUsageExtension, t as AuthorityKeyIdentifierExtension, u as SubjectKeyIdentifierExtension } from "./x509.es-CAjSsrkk.mjs";
1
+ import { E as DEVICE_SAN_USER_PREFIX, Pr as buildSecretRef, T as DEVICE_SAN_CREDENTIAL_PREFIX } from "./dist-Bz4_y8Xy.mjs";
2
+ import { a as KeyUsagesExtension, d as X509Certificate$1, f as X509CertificateGenerator, g as backdatedNotBefore, i as KeyUsageFlags, l as SubjectAlternativeNameExtension, n as BasicConstraintsExtension, o as PemConverter, p as cryptoProvider, r as ExtendedKeyUsageExtension, t as AuthorityKeyIdentifierExtension, u as SubjectKeyIdentifierExtension } from "./x509.es-CDvj67p1.mjs";
3
3
  import { X509Certificate, createPublicKey, randomBytes, verify, webcrypto } from "node:crypto";
4
4
  //#region src/auth/jwt-signing-key.ts
5
5
  /**
@@ -126,6 +126,16 @@ async function loadJwtSigningKey(deps) {
126
126
  }
127
127
  //#endregion
128
128
  //#region src/auth/device-ca.ts
129
+ /**
130
+ * Device CA (D855) — the THIRD certificate authority, distinct from the HTTPS
131
+ * local CA (`tls/cert-issue.ts`, RSA) and the mesh CA
132
+ * (`kernel/moleculer/mesh-mtls/mesh-ca.ts`). EC P-256, key in the keychain
133
+ * (owner `system`), certificate persisted like `cluster.meshCa`.
134
+ *
135
+ * It signs ONE kind of leaf: a device credential. The device generated the key
136
+ * pair; the hub only ever sees the public half (an SPKI). Same library and
137
+ * WebCrypto path as the other two CAs, same pinned `@peculiar/x509`.
138
+ */
129
139
  cryptoProvider.set(webcrypto);
130
140
  var MS_PER_DAY = 864e5;
131
141
  var CLIENT_AUTH_OID = "1.3.6.1.5.5.7.3.2";
@@ -164,7 +174,7 @@ async function generateDeviceCa(now = /* @__PURE__ */ new Date()) {
164
174
  const cert = await X509CertificateGenerator.createSelfSigned({
165
175
  serialNumber: freshSerial(),
166
176
  name: `CN=${DEVICE_CA_COMMON_NAME}`,
167
- notBefore: now,
177
+ notBefore: backdatedNotBefore(now),
168
178
  notAfter: new Date(now.getTime() + DEVICE_CA_VALIDITY_DAYS * MS_PER_DAY),
169
179
  keys,
170
180
  signingAlgorithm: SIGNING_ALGORITHM,
@@ -204,7 +214,7 @@ async function rebuildDeviceCaCertificate(keyPem) {
204
214
  const cert = await X509CertificateGenerator.createSelfSigned({
205
215
  serialNumber: freshSerial(),
206
216
  name: `CN=${DEVICE_CA_COMMON_NAME}`,
207
- notBefore: now,
217
+ notBefore: backdatedNotBefore(now),
208
218
  notAfter: new Date(now.getTime() + DEVICE_CA_VALIDITY_DAYS * MS_PER_DAY),
209
219
  keys: {
210
220
  privateKey,
@@ -234,8 +244,9 @@ async function importDevicePublicKey(spki) {
234
244
  */
235
245
  async function issueDeviceLeaf(ca, input) {
236
246
  const publicKey = await importDevicePublicKey(input.publicKeySpki);
237
- const notBefore = input.now ?? /* @__PURE__ */ new Date();
238
- const notAfter = new Date(notBefore.getTime() + (input.validDays ?? 365) * MS_PER_DAY);
247
+ const issuedAt = input.now ?? /* @__PURE__ */ new Date();
248
+ const notBefore = backdatedNotBefore(issuedAt);
249
+ const notAfter = new Date(issuedAt.getTime() + (input.validDays ?? 365) * MS_PER_DAY);
239
250
  const serialNumber = freshSerial();
240
251
  const extensions = [
241
252
  new BasicConstraintsExtension(false, void 0, true),
@@ -1,5 +1,5 @@
1
- const require_dist = require("./dist-C6Yvfhpq.js");
2
- const require_x509_es = require("./x509.es-Dzl0BbmG.js");
1
+ const require_dist = require("./dist-CnUtkSwN.js");
2
+ const require_x509_es = require("./x509.es-r7Ht1thA.js");
3
3
  let node_crypto = require("node:crypto");
4
4
  //#region src/auth/jwt-signing-key.ts
5
5
  /**
@@ -126,6 +126,16 @@ async function loadJwtSigningKey(deps) {
126
126
  }
127
127
  //#endregion
128
128
  //#region src/auth/device-ca.ts
129
+ /**
130
+ * Device CA (D855) — the THIRD certificate authority, distinct from the HTTPS
131
+ * local CA (`tls/cert-issue.ts`, RSA) and the mesh CA
132
+ * (`kernel/moleculer/mesh-mtls/mesh-ca.ts`). EC P-256, key in the keychain
133
+ * (owner `system`), certificate persisted like `cluster.meshCa`.
134
+ *
135
+ * It signs ONE kind of leaf: a device credential. The device generated the key
136
+ * pair; the hub only ever sees the public half (an SPKI). Same library and
137
+ * WebCrypto path as the other two CAs, same pinned `@peculiar/x509`.
138
+ */
129
139
  require_x509_es.cryptoProvider.set(node_crypto.webcrypto);
130
140
  var MS_PER_DAY = 864e5;
131
141
  var CLIENT_AUTH_OID = "1.3.6.1.5.5.7.3.2";
@@ -164,7 +174,7 @@ async function generateDeviceCa(now = /* @__PURE__ */ new Date()) {
164
174
  const cert = await require_x509_es.X509CertificateGenerator.createSelfSigned({
165
175
  serialNumber: freshSerial(),
166
176
  name: `CN=${DEVICE_CA_COMMON_NAME}`,
167
- notBefore: now,
177
+ notBefore: require_x509_es.backdatedNotBefore(now),
168
178
  notAfter: new Date(now.getTime() + DEVICE_CA_VALIDITY_DAYS * MS_PER_DAY),
169
179
  keys,
170
180
  signingAlgorithm: SIGNING_ALGORITHM,
@@ -204,7 +214,7 @@ async function rebuildDeviceCaCertificate(keyPem) {
204
214
  const cert = await require_x509_es.X509CertificateGenerator.createSelfSigned({
205
215
  serialNumber: freshSerial(),
206
216
  name: `CN=${DEVICE_CA_COMMON_NAME}`,
207
- notBefore: now,
217
+ notBefore: require_x509_es.backdatedNotBefore(now),
208
218
  notAfter: new Date(now.getTime() + DEVICE_CA_VALIDITY_DAYS * MS_PER_DAY),
209
219
  keys: {
210
220
  privateKey,
@@ -234,8 +244,9 @@ async function importDevicePublicKey(spki) {
234
244
  */
235
245
  async function issueDeviceLeaf(ca, input) {
236
246
  const publicKey = await importDevicePublicKey(input.publicKeySpki);
237
- const notBefore = input.now ?? /* @__PURE__ */ new Date();
238
- const notAfter = new Date(notBefore.getTime() + (input.validDays ?? 365) * MS_PER_DAY);
247
+ const issuedAt = input.now ?? /* @__PURE__ */ new Date();
248
+ const notBefore = require_x509_es.backdatedNotBefore(issuedAt);
249
+ const notAfter = new Date(issuedAt.getTime() + (input.validDays ?? 365) * MS_PER_DAY);
239
250
  const serialNumber = freshSerial();
240
251
  const extensions = [
241
252
  new require_x509_es.BasicConstraintsExtension(false, void 0, true),
@@ -718,7 +718,7 @@ var EventCategory = /* @__PURE__ */ function(EventCategory) {
718
718
  return EventCategory;
719
719
  }({});
720
720
  //#endregion
721
- //#region ../types/dist/sleep--g-h2_c_.mjs
721
+ //#region ../types/dist/sleep-DAX0-2v9.mjs
722
722
  /**
723
723
  * The audio chunk plane's byte format, and the ONE expansion from a coded
724
724
  * window to float samples (D455).
@@ -9768,6 +9768,12 @@ function scopesAllowDeviceCap(scopes, access) {
9768
9768
  function scopesAllowAddon(scopes, addonId, access) {
9769
9769
  return scopes.some((s) => s.type === "addon" && s.target === addonId && s.access.includes(access));
9770
9770
  }
9771
+ z.enum(["new-session", "step-up"]);
9772
+ /** How a native app starts one login method (D858), as `auth.listLoginMethods` reports it. */
9773
+ var AppLoginPathSchema = z.discriminatedUnion("kind", [z.object({ kind: z.literal("native") }), z.object({
9774
+ kind: z.literal("browser"),
9775
+ startPath: z.string().startsWith("/")
9776
+ })]);
9771
9777
  /**
9772
9778
  * Device certificates (D855) — the wire contract shared by the hub, the admin
9773
9779
  * UI and the native viewer.
@@ -9966,7 +9972,9 @@ z.object({
9966
9972
  signature: z.literal(DEVICE_CERT_SIGNATURE),
9967
9973
  messageVersion: z.literal(DEVICE_SIGNATURE_MESSAGE_VERSION),
9968
9974
  /** Which clients can execute it: a native app silently, a browser with a non-extractable WebCrypto key. */
9969
- clients: z.array(z.enum(["native", "web"]))
9975
+ clients: z.array(z.enum(["native", "web"])),
9976
+ /** The app executes it itself, silently (D858). */
9977
+ app: AppLoginPathSchema.nullable()
9970
9978
  });
9971
9979
  /**
9972
9980
  * What an expression's named bindings READ from.
@@ -39968,10 +39976,14 @@ function isLanIpv4Literal(endpoint) {
39968
39976
  const host = hostnameOf(endpoint.baseUrl);
39969
39977
  return host !== null && IPV4_LITERAL.test(host);
39970
39978
  }
39979
+ function isUnstable(endpoint) {
39980
+ return endpoint.stable === false;
39981
+ }
39971
39982
  /** Lower = better; `null` = never this role's AUTOMATIC answer. */
39972
39983
  function autoRankFor(role, endpoint) {
39973
39984
  if (endpoint.kind === "loopback" || endpoint.kind === "app-link" || endpoint.kind === "custom") return null;
39974
39985
  if (hostnameOf(endpoint.baseUrl) === null) return null;
39986
+ if (isUnstable(endpoint)) return null;
39975
39987
  if (role === "internal") {
39976
39988
  if (isLanIpv4Literal(endpoint)) return 0;
39977
39989
  if (isPlausibleLan(endpoint)) return 1;
@@ -40126,6 +40138,7 @@ function resolveNotificationTapAddress(flags) {
40126
40138
  }
40127
40139
  /** AUTO app connections: LAN IPv4 + the public tunnel. Never IPv6, mesh, loopback or custom. */
40128
40140
  function isDefaultAppConnectionEndpoint(endpoint) {
40141
+ if (isUnstable(endpoint)) return false;
40129
40142
  if (endpoint.kind === "lan-ipv4") return true;
40130
40143
  return endpoint.kind === "public" && endpoint.interfaceKind === "public";
40131
40144
  }
@@ -41167,7 +41180,13 @@ var RedirectLoginMethodSchema = z.object({
41167
41180
  * `beginExternalLink` offer exactly the redirect methods that set this,
41168
41181
  * whatever their id. Absent / false — a login button only.
41169
41182
  */
41170
- linkable: z.boolean().optional()
41183
+ linkable: z.boolean().optional(),
41184
+ /**
41185
+ * How a NATIVE app starts this method (D858): `{ kind: 'browser', startPath }`
41186
+ * when the route understands the app flow query (`app=1&code_challenge=…`),
41187
+ * `null`/absent when there is no app path - the app hides the method.
41188
+ */
41189
+ app: AppLoginPathSchema.nullable().optional()
41171
41190
  });
41172
41191
  /**
41173
41192
  * A Module-Federation widget the login page mounts for an in-page
@@ -41186,7 +41205,9 @@ var WidgetLoginMethodSchema = z.object({
41186
41205
  bundle: z.string(),
41187
41206
  /** MF remote descriptor — `{ remoteName, exposedModule, componentKey }`. */
41188
41207
  remote: WidgetRemoteSchema,
41189
- stage: LoginStageEnum
41208
+ stage: LoginStageEnum,
41209
+ /** Widgets are web ceremonies: no native app path (D858). Absent reads as `null`. */
41210
+ app: AppLoginPathSchema.nullable().optional()
41190
41211
  });
41191
41212
  /**
41192
41213
  * A declarative WebAuthn ceremony the shell renders natively (no remote
@@ -41204,7 +41225,9 @@ var PasskeyLoginMethodSchema = z.object({
41204
41225
  /** Effective WebAuthn RP ID (`resolveRpID()`) — the shell gates visibility on it. */
41205
41226
  rpId: z.string(),
41206
41227
  /** Effective expected origin (`resolveOrigin()`), null when unconfigured. */
41207
- origin: z.string().nullable()
41228
+ origin: z.string().nullable(),
41229
+ /** Set by the hub for the primary arm; a second-factor passkey has no app path (D858). */
41230
+ app: AppLoginPathSchema.nullable().optional()
41208
41231
  });
41209
41232
  /** One login-method contribution — redirect button, pre-auth widget, or native passkey ceremony. */
41210
41233
  var LoginMethodContributionSchema = z.discriminatedUnion("kind", [
@@ -41842,7 +41865,25 @@ var NetworkEndpointSchema = z.object({
41842
41865
  url: z.string(),
41843
41866
  hostname: z.string(),
41844
41867
  port: z.number(),
41845
- protocol: z.enum(["http", "https"])
41868
+ protocol: z.enum(["http", "https"]),
41869
+ /**
41870
+ * Whether this address survives a restart of its provider. `false` = it is
41871
+ * re-issued every time (a Quick tunnel's random `*.trycloudflare.com`); the
41872
+ * hub never selects such an address AUTOMATICALLY for a role (D860), though
41873
+ * it stays visible and an operator may still flag it. Absent = stable: every
41874
+ * provider except a Quick tunnel owns a name that does not change.
41875
+ */
41876
+ stable: z.boolean().optional()
41877
+ });
41878
+ /**
41879
+ * `data` of a `network.tunnel.started` event — what `local-network` (which
41880
+ * tails the bus and cannot import a provider) learns about the new address.
41881
+ */
41882
+ var NetworkTunnelStartedDataSchema = z.object({
41883
+ url: z.string(),
41884
+ /** Mirrors {@link NetworkEndpointSchema} `stable`; absent = stable. */
41885
+ stable: z.boolean().optional(),
41886
+ updated: z.boolean().optional()
41846
41887
  });
41847
41888
  var NetworkAccessStatusSchema = z.object({
41848
41889
  connected: z.boolean(),
@@ -54140,7 +54181,20 @@ var SsoBridgeClaimsSchema = z.object({
54140
54181
  * request to present the matching cookie — a login bridge is useless in
54141
54182
  * any other browser.
54142
54183
  */
54143
- browserBinding: z.string().optional()
54184
+ browserBinding: z.string().optional(),
54185
+ /**
54186
+ * The native app that started this sign-in (D858): its PKCE challenge,
54187
+ * `state`, purpose and allow-listed return URL, copied from the server-side
54188
+ * pending OIDC state. A bridge carrying it is finished ONLY at
54189
+ * `/api/auth/sso/finish-app` (which mints a handoff code, never a web
54190
+ * session); `/api/auth/sso/finish` refuses it.
54191
+ */
54192
+ app: z.object({
54193
+ codeChallenge: z.string(),
54194
+ state: z.string(),
54195
+ purpose: z.enum(["new-session", "step-up"]),
54196
+ redirect: z.string()
54197
+ }).optional()
54144
54198
  });
54145
54199
  var ssoBridgeCapability = {
54146
54200
  name: "sso-bridge",
@@ -57125,7 +57179,12 @@ var SearchResultSchema = z.object({
57125
57179
  publishedAt: z.string(),
57126
57180
  author: z.string(),
57127
57181
  installed: z.boolean(),
57128
- installedVersion: z.string().optional()
57182
+ installedVersion: z.string().optional(),
57183
+ /**
57184
+ * Capability names the package's addons declare (from its published
57185
+ * manifest). `null` = the registry lookup failed — unknown, never `[]` (D393).
57186
+ */
57187
+ capabilities: z.array(z.string()).readonly().nullable()
57129
57188
  });
57130
57189
  var AutoUpdateSettingsSchema = z.object({
57131
57190
  channel: ChannelSchema,
@@ -57344,7 +57403,11 @@ var addonsCapability = {
57344
57403
  kind: "mutation",
57345
57404
  auth: "admin"
57346
57405
  }),
57347
- searchAvailable: method(z.object({ query: z.string().optional() }), z.array(SearchResultSchema)),
57406
+ searchAvailable: method(z.object({
57407
+ query: z.string().optional(),
57408
+ /** Only packages whose addons declare this capability (unknown ones excluded). */
57409
+ capability: z.string().optional()
57410
+ }), z.array(SearchResultSchema)),
57348
57411
  /**
57349
57412
  * Available package updates for a node. `nodeId` omitted (or
57350
57413
  * `'hub'`) checks the hub's own installed packages; an agent
@@ -61451,7 +61514,13 @@ var ConnectionEndpointSchema = z.object({
61451
61514
  * calls so the client can sort even if the cap returns a new
61452
61515
  * ordering between polls.
61453
61516
  */
61454
- priority: z.number()
61517
+ priority: z.number(),
61518
+ /**
61519
+ * `false` = the address changes on its own (a Quick tunnel, re-issued on
61520
+ * every respawn). Automatic role resolution skips it (D860); an explicit
61521
+ * operator flag still honours it. Absent = stable.
61522
+ */
61523
+ stable: z.boolean().optional()
61455
61524
  });
61456
61525
  /**
61457
61526
  * Where the advertised local port came from. Ordered most → least
@@ -85514,4 +85583,4 @@ function enumerateInferenceDevices(hw) {
85514
85583
  return out;
85515
85584
  }
85516
85585
  //#endregion
85517
- export { alertsCapability as $, vectorDimFromBase64 as $n, parseJsonUnknown as $r, kebabToCamel as $t, FieldClaimModeSchema as A, resolveCoreBlockEntry as An, asNumber as Ar, deviceManagerCapability as At, RECORDING_SOURCE_CAMSTACK_ADDON as B, settingsStoreCapability as Bn, expandCapMethods as Br, extractNestedAddonId as Bt, DEVICE_ENROLLMENT_TTL_MS as C, platformProbeCapability as Cn, REDACTED_SECRET as Cr, declarationOwnerNodeId as Ct, DeclaredDevices as D, replacedFieldKeys as Dn, SECRET_CLEAR as Dr, describeComposableCaps as Dt, DEVICE_SAN_USER_PREFIX as E, reducePoints as En, ReadinessTimeoutError as Er, deriveBatteryPresence as Et, LOG_LEVEL_RANK as F, resolveNotificationTapAddress as Fn, createEvent as Fr, enumerateSchemaFields as Ft, StorageCleanupJobSchema as G, storageOccupancyCapability as Gn, isKeychainStoredField as Gr, gbToBytes as Gt, STORAGE_ACCESS_FALLBACK as H, snapshotCapability as Hn, hydrateSchema as Hr, foldSnapshotByFunction as Ht, LegacyStorageLocationDefaultSchema as I, runtimeStatePolicyFor as In, customAction as Ir, evaluateCompositionField as It, StorageMigrationJobSchema as J, streamQualityLabel as Jn, isSecretMarkerLike as Jr, isCollectionArrayMethod as Jt, StorageLocationModeSchema as K, storageProviderCapability as Kn, isSecretClear as Kr, isAppLinkBase as Kt, METHOD_ACCESS_MAP as L, scopesAllowAddon as Ln, defineCustomActions as Lr, evictionPolicyOfLocation as Lt, HUB_MDNS_SERVICE_TYPE as M, resolveHubAddressRoles as Mn, buildSecretRef as Mr, deviceStatusCapability as Mt, HUB_MDNS_TXT_KEYS as N, resolveLocationMode as Nn, collectSecretConfigKeys as Nr, enumerateInferenceDevices as Nt, DeviceStatusSchema as O, resolveAppConnections as On, WELL_KNOWN_TAB_MAP as Or, deviceCredentialsCapability as Ot, KEYCHAIN_RESET_TRIGGER_ACTOR as P, resolveMethodAuth as Pn, collectZodSecretPaths as Pr, enumerateItemArrayFields as Pt, addonWidgetsCapability as Q, validateCustomAddress as Qn, parseJsonObject as Qr, isVoidInput as Qt, MINUTES_PER_DAY as R, scopesAllowDeviceCap as Rn, emitDownForOwnedCaps as Rr, expandContainer as Rt, DERIVED_CAMERA_SILENCED_CAP_NAMES as S, planComposition as Sn, DEVICE_STATUS_METHOD as Sr, databaseSnapshotCapability as St, DEVICE_SAN_CREDENTIAL_PREFIX as T, ptzAutotrackCapability as Tn, ReadinessRegistry as Tr, defineExtensionSlotProvider as Tt, STREAM_PROFILE_META as U, storageCapability as Un, isDeviceConfigCap as Ur, formatDeviceRevoker as Ut, RecordingStatusSchema as V, siteZoneKey as Vn, formatSecretScope as Vr, filesystemBrowseCapability as Vt, ScopedTokenSchema as W, storageMigrationCapability as Wn, isEvent as Wr, formatMinutes as Wt, addonPagesCapability as X, userManagementCapability as Xn, nodePin as Xr, isLocationEnabled as Xt, UserRecordSchema as Y, supportedRuntimes as Yn, makeSecretMarker as Yr, isDefaultAppConnectionEndpoint as Yt, addonSettingsCapability as Z, validateComposition as Zn, normalizeSecretOwner as Zr, isObjectInput as Zt, DATABASE_SNAPSHOT_PARTIAL_SUFFIX as _, normalizeUnit as _n, DeviceType as _r, coreBlockIdFromAddonId as _t, ApiKeyRecordSchema as a, secretTreeFromPaths as ai, localNetworkCapability as an, cloneStatefulExpressionMemory as ar, buildDeviceEnrollmentLink as at, DATA_STORE_DATABASES as b, parseStreamParamsFormPatch as bn, DATAPLANE_SECRET_HEADER as br, createDeviceExtensionProvider as bt, CAMERA_SWITCH_ORDER as c, toNodeId as ci, logLevelAtMost as cn, compositionFeatureEnabled as cr, calendarsCapability as ct, COMPOSED_ITEM_FIXED_FIELDS as d, EventCategory as di, mayWriteToLocation as dn, compositionSourceKey as dr, checkRoleAddress as dt, parseSecretRef as ei, keychainAdminCapability as en, vectorIndexDimConflictError as er, authProviderCapability as et, COMPOSER_RUNNER_ID as f, memoizePinnedFfmpeg as fn, createStatefulExpressionMemory as fr, composerCapability as ft, CoreBlockSchema as g, normalizeCoreBlockWrite as gn, DeviceRole as gr, coreBlockComposition as gt, CalendarPreferencesSchema as h, motionCapability as hn, DeviceFeature as hr, coreBlockAddonId as ht, AlertSchema as i, scopeKey as ii, lifecycleJobSchema as in, buildFfmpegArgs as ir, buildCapabilityLookup as it, FieldClaimSchema as j, resolveCoreBlockFiles as jn, asString$1 as jr, deviceStateCapability as jt, FIRST_LEVEL_MACRO_CLASSES as k, resolveBucketMs as kn, asJsonObject as kr, deviceExtensionCapability as kt, CAMSTACK_APP_LINK_ORIGIN as l, toSecretFieldView as li, looseSchema as ln, compositionItemFieldPath as lr, cameraGridLayoutCapability as lt, CORE_BLOCK_ADDON_PREFIX as m, modeMayWrite as mn, toExpressionValue as mr, compositionSourceRefs as mt, AGENT_MDNS_TXT_KEYS as n, resolveCapMount as ni, legacyAutoLinkIds as nn, withLocationMode as nr, bareAddonId as nt, BaseDevice as o, secretTreeFromSchema as oi, locationIconKey as on, composedDeviceRef as or, buildDeviceSignatureMessage as ot, CORE_BLOCKS_ADDON_ID as p, metricsProviderCapability as pn, disarmRoseMemory as pr, compositionFieldKey as pt, StorageLocationTypeSchema as q, streamCatalogCapability as qn, isSecretMarker as qr, isArrayOutputSchema as qt, ALL_CAPABILITY_DEFINITIONS as r, resolveSecretMarkers as ri, legacyModeOf as rn, COMPOSER_ADDON_ID as rr, batteryCapability as rt, BatteryStatusSchema as s, sleep as si, logDestinationCapability as sn, composedDeviceStableId as sr, buildStreamParamsConfigSchema as st, AGENT_MDNS_SERVICE_TYPE as t, readinessKey as ti, keychainCapability as tn, vectorStoreCapability as tr, backupCapability as tt, CAP_NAMES_WITH_STATUS as u, transformSecretWrite as ui, mayReadLocation as un, compositionSliceKey as ur, canonicalIconKey as ut, DATABASE_SNAPSHOT_SUFFIX as v, objectInputDeclaresAddonId as vn, errMsg as vr, coreBlockSourceKind as vt, DEVICE_NONCE_TTL_MS as w, procedureAuthKey as wn, RUNTIME_DEFAULTS as wr, decodeVectorBase64 as wt, DAY_NAMES as x, pickAppLinkHub as xn, DEVICE_SETTINGS_CONTRIBUTION_METHODS as xr, dataStoreProviderCapability as xt, DATABASE_SNAPSHOT_TIMEOUT_MS as y, objectInputDeclaresRequiredDeviceId as yn, BaseAddon as yr, coreBlocksCapability as yt, MOTION_CLOSE_AFTER_MS as z, scoreRuntimes as zn, emitReadiness as zr, expressionContainsBuiltinCall as zt };
85586
+ export { addonSettingsCapability as $, validateComposition as $n, normalizeSecretOwner as $r, isObjectInput as $t, FieldClaimModeSchema as A, resolveAppConnections as An, WELL_KNOWN_TAB_MAP as Ar, deviceCredentialsCapability as At, NetworkTunnelStartedDataSchema as B, scopesAllowDeviceCap as Bn, emitDownForOwnedCaps as Br, expandContainer as Bt, DEVICE_ENROLLMENT_TTL_MS as C, pickAppLinkHub as Cn, DEVICE_SETTINGS_CONTRIBUTION_METHODS as Cr, dataStoreProviderCapability as Ct, DeclaredDevices as D, ptzAutotrackCapability as Dn, ReadinessRegistry as Dr, defineExtensionSlotProvider as Dt, DEVICE_SAN_USER_PREFIX as E, procedureAuthKey as En, RUNTIME_DEFAULTS as Er, decodeVectorBase64 as Et, LOG_LEVEL_RANK as F, resolveLocationMode as Fn, collectSecretConfigKeys as Fr, enumerateInferenceDevices as Ft, ScopedTokenSchema as G, storageCapability as Gn, isDeviceConfigCap as Gr, formatDeviceRevoker as Gt, RecordingStatusSchema as H, settingsStoreCapability as Hn, expandCapMethods as Hr, extractNestedAddonId as Ht, LegacyStorageLocationDefaultSchema as I, resolveMethodAuth as In, collectZodSecretPaths as Ir, enumerateItemArrayFields as It, StorageLocationModeSchema as J, storageProviderCapability as Jn, isSecretClear as Jr, isAppLinkBase as Jt, SsoBridgeClaimsSchema as K, storageMigrationCapability as Kn, isEvent as Kr, formatMinutes as Kt, METHOD_ACCESS_MAP as L, resolveNotificationTapAddress as Ln, createEvent as Lr, enumerateSchemaFields as Lt, HUB_MDNS_SERVICE_TYPE as M, resolveCoreBlockEntry as Mn, asNumber as Mr, deviceManagerCapability as Mt, HUB_MDNS_TXT_KEYS as N, resolveCoreBlockFiles as Nn, asString$1 as Nr, deviceStateCapability as Nt, DeviceStatusSchema as O, reducePoints as On, ReadinessTimeoutError as Or, deriveBatteryPresence as Ot, KEYCHAIN_RESET_TRIGGER_ACTOR as P, resolveHubAddressRoles as Pn, buildSecretRef as Pr, deviceStatusCapability as Pt, addonPagesCapability as Q, userManagementCapability as Qn, nodePin as Qr, isLocationEnabled as Qt, MINUTES_PER_DAY as R, runtimeStatePolicyFor as Rn, customAction as Rr, evaluateCompositionField as Rt, DERIVED_CAMERA_SILENCED_CAP_NAMES as S, parseStreamParamsFormPatch as Sn, DATAPLANE_SECRET_HEADER as Sr, createDeviceExtensionProvider as St, DEVICE_SAN_CREDENTIAL_PREFIX as T, platformProbeCapability as Tn, REDACTED_SECRET as Tr, declarationOwnerNodeId as Tt, STORAGE_ACCESS_FALLBACK as U, siteZoneKey as Un, formatSecretScope as Ur, filesystemBrowseCapability as Ut, RECORDING_SOURCE_CAMSTACK_ADDON as V, scoreRuntimes as Vn, emitReadiness as Vr, expressionContainsBuiltinCall as Vt, STREAM_PROFILE_META as W, snapshotCapability as Wn, hydrateSchema as Wr, foldSnapshotByFunction as Wt, StorageMigrationJobSchema as X, streamQualityLabel as Xn, isSecretMarkerLike as Xr, isCollectionArrayMethod as Xt, StorageLocationTypeSchema as Y, streamCatalogCapability as Yn, isSecretMarker as Yr, isArrayOutputSchema as Yt, UserRecordSchema as Z, supportedRuntimes as Zn, makeSecretMarker as Zr, isDefaultAppConnectionEndpoint as Zt, DATABASE_SNAPSHOT_PARTIAL_SUFFIX as _, motionCapability as _n, DeviceFeature as _r, coreBlockAddonId as _t, ApiKeyRecordSchema as a, resolveSecretMarkers as ai, legacyModeOf as an, COMPOSER_ADDON_ID as ar, batteryCapability as at, DATA_STORE_DATABASES as b, objectInputDeclaresAddonId as bn, errMsg as br, coreBlockSourceKind as bt, CAMERA_SWITCH_ORDER as c, secretTreeFromSchema as ci, locationIconKey as cn, composedDeviceRef as cr, buildDeviceSignatureMessage as ct, COMPOSED_ITEM_FIXED_FIELDS as d, toSecretFieldView as di, looseSchema as dn, compositionItemFieldPath as dr, cameraGridLayoutCapability as dt, parseJsonObject as ei, isVoidInput as en, validateCustomAddress as er, addonWidgetsCapability as et, COMPOSER_RUNNER_ID as f, transformSecretWrite as fi, mayReadLocation as fn, compositionSliceKey as fr, canonicalIconKey as ft, CoreBlockSchema as g, modeMayWrite as gn, toExpressionValue as gr, compositionSourceRefs as gt, CalendarPreferencesSchema as h, metricsProviderCapability as hn, disarmRoseMemory as hr, compositionFieldKey as ht, AlertSchema as i, resolveCapMount as ii, legacyAutoLinkIds as in, withLocationMode as ir, bareAddonId as it, FieldClaimSchema as j, resolveBucketMs as jn, asJsonObject as jr, deviceExtensionCapability as jt, FIRST_LEVEL_MACRO_CLASSES as k, replacedFieldKeys as kn, SECRET_CLEAR as kr, describeComposableCaps as kt, CAMSTACK_APP_LINK_ORIGIN as l, sleep as li, logDestinationCapability as ln, composedDeviceStableId as lr, buildStreamParamsConfigSchema as lt, CORE_BLOCK_ADDON_PREFIX as m, memoizePinnedFfmpeg as mn, createStatefulExpressionMemory as mr, composerCapability as mt, AGENT_MDNS_TXT_KEYS as n, parseSecretRef as ni, keychainAdminCapability as nn, vectorIndexDimConflictError as nr, authProviderCapability as nt, BaseDevice as o, scopeKey as oi, lifecycleJobSchema as on, buildFfmpegArgs as or, buildCapabilityLookup as ot, CORE_BLOCKS_ADDON_ID as p, EventCategory as pi, mayWriteToLocation as pn, compositionSourceKey as pr, checkRoleAddress as pt, StorageCleanupJobSchema as q, storageOccupancyCapability as qn, isKeychainStoredField as qr, gbToBytes as qt, ALL_CAPABILITY_DEFINITIONS as r, readinessKey as ri, keychainCapability as rn, vectorStoreCapability as rr, backupCapability as rt, BatteryStatusSchema as s, secretTreeFromPaths as si, localNetworkCapability as sn, cloneStatefulExpressionMemory as sr, buildDeviceEnrollmentLink as st, AGENT_MDNS_SERVICE_TYPE as t, parseJsonUnknown as ti, kebabToCamel as tn, vectorDimFromBase64 as tr, alertsCapability as tt, CAP_NAMES_WITH_STATUS as u, toNodeId as ui, logLevelAtMost as un, compositionFeatureEnabled as ur, calendarsCapability as ut, DATABASE_SNAPSHOT_SUFFIX as v, normalizeCoreBlockWrite as vn, DeviceRole as vr, coreBlockComposition as vt, DEVICE_NONCE_TTL_MS as w, planComposition as wn, DEVICE_STATUS_METHOD as wr, databaseSnapshotCapability as wt, DAY_NAMES as x, objectInputDeclaresRequiredDeviceId as xn, BaseAddon as xr, coreBlocksCapability as xt, DATABASE_SNAPSHOT_TIMEOUT_MS as y, normalizeUnit as yn, DeviceType as yr, coreBlockIdFromAddonId as yt, MOTION_CLOSE_AFTER_MS as z, scopesAllowAddon as zn, defineCustomActions as zr, evictionPolicyOfLocation as zt };
@@ -718,7 +718,7 @@ var EventCategory = /* @__PURE__ */ function(EventCategory) {
718
718
  return EventCategory;
719
719
  }({});
720
720
  //#endregion
721
- //#region ../types/dist/sleep--g-h2_c_.mjs
721
+ //#region ../types/dist/sleep-DAX0-2v9.mjs
722
722
  /**
723
723
  * The audio chunk plane's byte format, and the ONE expansion from a coded
724
724
  * window to float samples (D455).
@@ -9768,6 +9768,12 @@ function scopesAllowDeviceCap(scopes, access) {
9768
9768
  function scopesAllowAddon(scopes, addonId, access) {
9769
9769
  return scopes.some((s) => s.type === "addon" && s.target === addonId && s.access.includes(access));
9770
9770
  }
9771
+ zod.z.enum(["new-session", "step-up"]);
9772
+ /** How a native app starts one login method (D858), as `auth.listLoginMethods` reports it. */
9773
+ var AppLoginPathSchema = zod.z.discriminatedUnion("kind", [zod.z.object({ kind: zod.z.literal("native") }), zod.z.object({
9774
+ kind: zod.z.literal("browser"),
9775
+ startPath: zod.z.string().startsWith("/")
9776
+ })]);
9771
9777
  /**
9772
9778
  * Device certificates (D855) — the wire contract shared by the hub, the admin
9773
9779
  * UI and the native viewer.
@@ -9966,7 +9972,9 @@ zod.z.object({
9966
9972
  signature: zod.z.literal(DEVICE_CERT_SIGNATURE),
9967
9973
  messageVersion: zod.z.literal(DEVICE_SIGNATURE_MESSAGE_VERSION),
9968
9974
  /** Which clients can execute it: a native app silently, a browser with a non-extractable WebCrypto key. */
9969
- clients: zod.z.array(zod.z.enum(["native", "web"]))
9975
+ clients: zod.z.array(zod.z.enum(["native", "web"])),
9976
+ /** The app executes it itself, silently (D858). */
9977
+ app: AppLoginPathSchema.nullable()
9970
9978
  });
9971
9979
  /**
9972
9980
  * What an expression's named bindings READ from.
@@ -39968,10 +39976,14 @@ function isLanIpv4Literal(endpoint) {
39968
39976
  const host = hostnameOf(endpoint.baseUrl);
39969
39977
  return host !== null && IPV4_LITERAL.test(host);
39970
39978
  }
39979
+ function isUnstable(endpoint) {
39980
+ return endpoint.stable === false;
39981
+ }
39971
39982
  /** Lower = better; `null` = never this role's AUTOMATIC answer. */
39972
39983
  function autoRankFor(role, endpoint) {
39973
39984
  if (endpoint.kind === "loopback" || endpoint.kind === "app-link" || endpoint.kind === "custom") return null;
39974
39985
  if (hostnameOf(endpoint.baseUrl) === null) return null;
39986
+ if (isUnstable(endpoint)) return null;
39975
39987
  if (role === "internal") {
39976
39988
  if (isLanIpv4Literal(endpoint)) return 0;
39977
39989
  if (isPlausibleLan(endpoint)) return 1;
@@ -40126,6 +40138,7 @@ function resolveNotificationTapAddress(flags) {
40126
40138
  }
40127
40139
  /** AUTO app connections: LAN IPv4 + the public tunnel. Never IPv6, mesh, loopback or custom. */
40128
40140
  function isDefaultAppConnectionEndpoint(endpoint) {
40141
+ if (isUnstable(endpoint)) return false;
40129
40142
  if (endpoint.kind === "lan-ipv4") return true;
40130
40143
  return endpoint.kind === "public" && endpoint.interfaceKind === "public";
40131
40144
  }
@@ -41167,7 +41180,13 @@ var RedirectLoginMethodSchema = zod.z.object({
41167
41180
  * `beginExternalLink` offer exactly the redirect methods that set this,
41168
41181
  * whatever their id. Absent / false — a login button only.
41169
41182
  */
41170
- linkable: zod.z.boolean().optional()
41183
+ linkable: zod.z.boolean().optional(),
41184
+ /**
41185
+ * How a NATIVE app starts this method (D858): `{ kind: 'browser', startPath }`
41186
+ * when the route understands the app flow query (`app=1&code_challenge=…`),
41187
+ * `null`/absent when there is no app path - the app hides the method.
41188
+ */
41189
+ app: AppLoginPathSchema.nullable().optional()
41171
41190
  });
41172
41191
  /**
41173
41192
  * A Module-Federation widget the login page mounts for an in-page
@@ -41186,7 +41205,9 @@ var WidgetLoginMethodSchema = zod.z.object({
41186
41205
  bundle: zod.z.string(),
41187
41206
  /** MF remote descriptor — `{ remoteName, exposedModule, componentKey }`. */
41188
41207
  remote: WidgetRemoteSchema,
41189
- stage: LoginStageEnum
41208
+ stage: LoginStageEnum,
41209
+ /** Widgets are web ceremonies: no native app path (D858). Absent reads as `null`. */
41210
+ app: AppLoginPathSchema.nullable().optional()
41190
41211
  });
41191
41212
  /**
41192
41213
  * A declarative WebAuthn ceremony the shell renders natively (no remote
@@ -41204,7 +41225,9 @@ var PasskeyLoginMethodSchema = zod.z.object({
41204
41225
  /** Effective WebAuthn RP ID (`resolveRpID()`) — the shell gates visibility on it. */
41205
41226
  rpId: zod.z.string(),
41206
41227
  /** Effective expected origin (`resolveOrigin()`), null when unconfigured. */
41207
- origin: zod.z.string().nullable()
41228
+ origin: zod.z.string().nullable(),
41229
+ /** Set by the hub for the primary arm; a second-factor passkey has no app path (D858). */
41230
+ app: AppLoginPathSchema.nullable().optional()
41208
41231
  });
41209
41232
  /** One login-method contribution — redirect button, pre-auth widget, or native passkey ceremony. */
41210
41233
  var LoginMethodContributionSchema = zod.z.discriminatedUnion("kind", [
@@ -41842,7 +41865,25 @@ var NetworkEndpointSchema = zod.z.object({
41842
41865
  url: zod.z.string(),
41843
41866
  hostname: zod.z.string(),
41844
41867
  port: zod.z.number(),
41845
- protocol: zod.z.enum(["http", "https"])
41868
+ protocol: zod.z.enum(["http", "https"]),
41869
+ /**
41870
+ * Whether this address survives a restart of its provider. `false` = it is
41871
+ * re-issued every time (a Quick tunnel's random `*.trycloudflare.com`); the
41872
+ * hub never selects such an address AUTOMATICALLY for a role (D860), though
41873
+ * it stays visible and an operator may still flag it. Absent = stable: every
41874
+ * provider except a Quick tunnel owns a name that does not change.
41875
+ */
41876
+ stable: zod.z.boolean().optional()
41877
+ });
41878
+ /**
41879
+ * `data` of a `network.tunnel.started` event — what `local-network` (which
41880
+ * tails the bus and cannot import a provider) learns about the new address.
41881
+ */
41882
+ var NetworkTunnelStartedDataSchema = zod.z.object({
41883
+ url: zod.z.string(),
41884
+ /** Mirrors {@link NetworkEndpointSchema} `stable`; absent = stable. */
41885
+ stable: zod.z.boolean().optional(),
41886
+ updated: zod.z.boolean().optional()
41846
41887
  });
41847
41888
  var NetworkAccessStatusSchema = zod.z.object({
41848
41889
  connected: zod.z.boolean(),
@@ -54140,7 +54181,20 @@ var SsoBridgeClaimsSchema = zod.z.object({
54140
54181
  * request to present the matching cookie — a login bridge is useless in
54141
54182
  * any other browser.
54142
54183
  */
54143
- browserBinding: zod.z.string().optional()
54184
+ browserBinding: zod.z.string().optional(),
54185
+ /**
54186
+ * The native app that started this sign-in (D858): its PKCE challenge,
54187
+ * `state`, purpose and allow-listed return URL, copied from the server-side
54188
+ * pending OIDC state. A bridge carrying it is finished ONLY at
54189
+ * `/api/auth/sso/finish-app` (which mints a handoff code, never a web
54190
+ * session); `/api/auth/sso/finish` refuses it.
54191
+ */
54192
+ app: zod.z.object({
54193
+ codeChallenge: zod.z.string(),
54194
+ state: zod.z.string(),
54195
+ purpose: zod.z.enum(["new-session", "step-up"]),
54196
+ redirect: zod.z.string()
54197
+ }).optional()
54144
54198
  });
54145
54199
  var ssoBridgeCapability = {
54146
54200
  name: "sso-bridge",
@@ -57125,7 +57179,12 @@ var SearchResultSchema = zod.z.object({
57125
57179
  publishedAt: zod.z.string(),
57126
57180
  author: zod.z.string(),
57127
57181
  installed: zod.z.boolean(),
57128
- installedVersion: zod.z.string().optional()
57182
+ installedVersion: zod.z.string().optional(),
57183
+ /**
57184
+ * Capability names the package's addons declare (from its published
57185
+ * manifest). `null` = the registry lookup failed — unknown, never `[]` (D393).
57186
+ */
57187
+ capabilities: zod.z.array(zod.z.string()).readonly().nullable()
57129
57188
  });
57130
57189
  var AutoUpdateSettingsSchema = zod.z.object({
57131
57190
  channel: ChannelSchema,
@@ -57344,7 +57403,11 @@ var addonsCapability = {
57344
57403
  kind: "mutation",
57345
57404
  auth: "admin"
57346
57405
  }),
57347
- searchAvailable: method(zod.z.object({ query: zod.z.string().optional() }), zod.z.array(SearchResultSchema)),
57406
+ searchAvailable: method(zod.z.object({
57407
+ query: zod.z.string().optional(),
57408
+ /** Only packages whose addons declare this capability (unknown ones excluded). */
57409
+ capability: zod.z.string().optional()
57410
+ }), zod.z.array(SearchResultSchema)),
57348
57411
  /**
57349
57412
  * Available package updates for a node. `nodeId` omitted (or
57350
57413
  * `'hub'`) checks the hub's own installed packages; an agent
@@ -61451,7 +61514,13 @@ var ConnectionEndpointSchema = zod.z.object({
61451
61514
  * calls so the client can sort even if the cap returns a new
61452
61515
  * ordering between polls.
61453
61516
  */
61454
- priority: zod.z.number()
61517
+ priority: zod.z.number(),
61518
+ /**
61519
+ * `false` = the address changes on its own (a Quick tunnel, re-issued on
61520
+ * every respawn). Automatic role resolution skips it (D860); an explicit
61521
+ * operator flag still honours it. Absent = stable.
61522
+ */
61523
+ stable: zod.z.boolean().optional()
61455
61524
  });
61456
61525
  /**
61457
61526
  * Where the advertised local port came from. Ordered most → least
@@ -85802,6 +85871,12 @@ Object.defineProperty(exports, "MOTION_CLOSE_AFTER_MS", {
85802
85871
  return MOTION_CLOSE_AFTER_MS;
85803
85872
  }
85804
85873
  });
85874
+ Object.defineProperty(exports, "NetworkTunnelStartedDataSchema", {
85875
+ enumerable: true,
85876
+ get: function() {
85877
+ return NetworkTunnelStartedDataSchema;
85878
+ }
85879
+ });
85805
85880
  Object.defineProperty(exports, "RECORDING_SOURCE_CAMSTACK_ADDON", {
85806
85881
  enumerable: true,
85807
85882
  get: function() {
@@ -85862,6 +85937,12 @@ Object.defineProperty(exports, "ScopedTokenSchema", {
85862
85937
  return ScopedTokenSchema;
85863
85938
  }
85864
85939
  });
85940
+ Object.defineProperty(exports, "SsoBridgeClaimsSchema", {
85941
+ enumerable: true,
85942
+ get: function() {
85943
+ return SsoBridgeClaimsSchema;
85944
+ }
85945
+ });
85865
85946
  Object.defineProperty(exports, "StorageCleanupJobSchema", {
85866
85947
  enumerable: true,
85867
85948
  get: function() {