@voltro/cms 0.86.0 → 0.88.0

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 (243) hide show
  1. package/CHANGELOG.md +5484 -0
  2. package/README.md +138 -0
  3. package/THIRD-PARTY-NOTICES.md +1511 -276
  4. package/dist/ContentForm.js +1 -2
  5. package/dist/RichDocumentEditor.js +1 -2
  6. package/dist/RichDocumentView.js +82 -38
  7. package/dist/RichTextSurface.js +1 -2
  8. package/dist/aiCandidates.js +4 -5
  9. package/dist/aiOperations.js +1 -2
  10. package/dist/applicationBuildSnapshotService.js +100 -0
  11. package/dist/assetRenditions.js +101 -0
  12. package/dist/assetRevision.js +45 -0
  13. package/dist/assetUseRights.js +71 -0
  14. package/dist/audiences.js +1 -2
  15. package/dist/availability.js +20 -18
  16. package/dist/blueprint.js +76 -77
  17. package/dist/build.d.ts +3063 -0
  18. package/dist/build.js +37 -0
  19. package/dist/buildApplicationAdmission.js +15 -0
  20. package/dist/buildApplicationCatalog.js +135 -0
  21. package/dist/buildApplicationCatalogTable.js +23 -0
  22. package/dist/buildApplicationRest.js +98 -0
  23. package/dist/buildApplicationUpload.js +110 -0
  24. package/dist/buildSnapshot.js +400 -0
  25. package/dist/buildSnapshotApplicationPin.js +31 -0
  26. package/dist/buildSnapshotRest.js +209 -0
  27. package/dist/buildSnapshotService.js +264 -0
  28. package/dist/buildSnapshotTables.js +24 -0
  29. package/dist/bulk.js +72 -72
  30. package/dist/cacheIdentity.js +1 -2
  31. package/dist/changes.js +280 -64
  32. package/dist/cmsContext.js +1 -2
  33. package/dist/collections.js +1 -2
  34. package/dist/consent.js +6 -7
  35. package/dist/contentLocations.js +52 -0
  36. package/dist/contentProjection.js +82 -0
  37. package/dist/contentRouteIdentity.js +12 -0
  38. package/dist/contentRouteMaterializer.js +96 -0
  39. package/dist/contentRouteTypes.js +38 -0
  40. package/dist/contentSeo.js +188 -0
  41. package/dist/contentTreePath.js +59 -0
  42. package/dist/contentType.js +121 -105
  43. package/dist/contentValues.js +17 -0
  44. package/dist/contentfulImport.js +1 -2
  45. package/dist/copies.js +4 -5
  46. package/dist/cutover.js +1 -2
  47. package/dist/deliveryChecks.js +1 -2
  48. package/dist/domainHost.js +6 -0
  49. package/dist/domains.js +82 -89
  50. package/dist/draftTexts.js +38 -39
  51. package/dist/duplicates.js +24 -25
  52. package/dist/edgePurge.js +1 -2
  53. package/dist/editHistory.js +1 -2
  54. package/dist/effectForm.js +1 -2
  55. package/dist/environmentAliases.js +137 -0
  56. package/dist/environments.js +108 -71
  57. package/dist/errors.js +55 -16
  58. package/dist/experiments.js +8 -9
  59. package/dist/exposure.js +1 -2
  60. package/dist/extensionManifest.js +2 -3
  61. package/dist/extensions.js +1 -2
  62. package/dist/fieldSchema.js +1 -2
  63. package/dist/formStrings.js +1 -2
  64. package/dist/frontendBindings.js +98 -0
  65. package/dist/frontendMedia.js +17 -0
  66. package/dist/glossary.js +1 -2
  67. package/dist/history.js +1 -2
  68. package/dist/htmlImport.js +1 -2
  69. package/dist/index.d.ts +760 -47
  70. package/dist/index.js +89 -73
  71. package/dist/initializePublicRoutes.js +27 -0
  72. package/dist/liveContentRouteView.js +75 -0
  73. package/dist/media.js +1 -2
  74. package/dist/metrics.js +1 -2
  75. package/dist/migration.js +1 -2
  76. package/dist/migrationStages.js +1 -2
  77. package/dist/nativeOutputDeploymentService.js +204 -0
  78. package/dist/outputActivation.js +233 -0
  79. package/dist/outputActivationOrigin.js +50 -0
  80. package/dist/outputActivationStore.js +410 -0
  81. package/dist/outputActivationTables.js +10 -0
  82. package/dist/outputActivationTarget.js +80 -0
  83. package/dist/outputActivationTargetTable.js +24 -0
  84. package/dist/outputDeployment.js +173 -0
  85. package/dist/outputDeploymentRest.js +167 -0
  86. package/dist/outputDeploymentService.js +240 -0
  87. package/dist/outputRouteGraph.js +176 -0
  88. package/dist/outputSafetyArtifact.js +146 -0
  89. package/dist/outputTargetRest.js +61 -0
  90. package/dist/pathSegmentEncoding.js +3 -0
  91. package/dist/presenceAnchors.js +1 -2
  92. package/dist/preview.js +1 -2
  93. package/dist/privateCmsTransport.js +75 -0
  94. package/dist/privateNativeRouteReservation.js +9 -0
  95. package/dist/promotion.js +69 -61
  96. package/dist/publicBuild.js +89 -0
  97. package/dist/publicBuildRest.js +97 -0
  98. package/dist/publicBuildService.js +62 -0
  99. package/dist/publicOutputHttp.js +128 -0
  100. package/dist/publicOutputService.js +286 -0
  101. package/dist/publicPresentation.js +16 -0
  102. package/dist/publicRouteDispositionAdmission.js +37 -0
  103. package/dist/publicRouteHistoryStore.js +11 -0
  104. package/dist/publicRouteHistoryView.js +33 -0
  105. package/dist/publicRouteIntegrity.js +4 -0
  106. package/dist/publicRouteMutation.js +5 -0
  107. package/dist/publicRouteNamespace.js +133 -0
  108. package/dist/publicRoutePublication.js +35 -0
  109. package/dist/publicRouteRegistry.js +16 -0
  110. package/dist/publicRouteRegistryBinding.js +193 -0
  111. package/dist/publicRouteRegistryDefinition.js +75 -0
  112. package/dist/publicRouteSitePublication.js +39 -0
  113. package/dist/publicRouteTables.js +12 -0
  114. package/dist/publicRouteUrl.js +17 -0
  115. package/dist/publicationSeo.js +51 -0
  116. package/dist/publicationState.js +295 -0
  117. package/dist/quality.js +9 -10
  118. package/dist/reconfigurePublicRoutes.js +40 -0
  119. package/dist/recurrence.js +1 -2
  120. package/dist/redirects.js +105 -75
  121. package/dist/referenceGraph.js +16 -16
  122. package/dist/references.js +3 -4
  123. package/dist/release.js +178 -143
  124. package/dist/renderReadAuthority.js +42 -0
  125. package/dist/renderReadGrant.js +136 -0
  126. package/dist/rest.js +1 -2
  127. package/dist/review.js +29 -30
  128. package/dist/richDocument.js +56 -27
  129. package/dist/richInline.js +1 -2
  130. package/dist/routeDispositionGraph.js +43 -0
  131. package/dist/routeDispositionRest.js +50 -0
  132. package/dist/routeDispositionService.js +72 -0
  133. package/dist/routeDispositionStore.js +288 -0
  134. package/dist/routeDispositionTables.js +4 -0
  135. package/dist/routeDispositions.js +90 -0
  136. package/dist/routeHistoryStorage.js +319 -0
  137. package/dist/routeHistoryStore.js +11 -0
  138. package/dist/schedule.js +37 -38
  139. package/dist/search.js +1 -2
  140. package/dist/selectionIntent.js +1 -2
  141. package/dist/seo.js +2 -3
  142. package/dist/series.js +12 -13
  143. package/dist/share.js +14 -15
  144. package/dist/siteBindings.js +158 -0
  145. package/dist/siteBuildCandidate.js +103 -0
  146. package/dist/siteDelivery.js +114 -0
  147. package/dist/siteState.js +46 -0
  148. package/dist/snapshotAddressGraph.js +54 -0
  149. package/dist/snapshotAddressRead.js +72 -0
  150. package/dist/snapshotAppConsumer.js +70 -0
  151. package/dist/snapshotAppExecution.js +101 -0
  152. package/dist/snapshotApplication.js +74 -0
  153. package/dist/snapshotApprovedRouteDispositions.js +43 -0
  154. package/dist/snapshotAssetAssembly.js +69 -0
  155. package/dist/snapshotAssetAssemblyRest.js +49 -0
  156. package/dist/snapshotBindingRead.js +60 -0
  157. package/dist/snapshotCodeSeo.js +28 -0
  158. package/dist/snapshotComponent.js +33 -0
  159. package/dist/snapshotComponentSource.js +23 -0
  160. package/dist/snapshotConsumer.js +86 -0
  161. package/dist/snapshotContentIdentity.js +9 -0
  162. package/dist/snapshotDefinitions.js +263 -0
  163. package/dist/snapshotDocumentAssembly.js +192 -0
  164. package/dist/snapshotDocumentAssemblyRest.js +83 -0
  165. package/dist/snapshotDocumentProjection.js +201 -0
  166. package/dist/snapshotDocumentTransfer.js +34 -0
  167. package/dist/snapshotDocumentTransferRest.js +79 -0
  168. package/dist/snapshotDomains.js +55 -0
  169. package/dist/snapshotEnvironment.js +30 -0
  170. package/dist/snapshotFieldPlan.js +84 -0
  171. package/dist/snapshotFrontend.js +102 -0
  172. package/dist/snapshotLink.js +7 -0
  173. package/dist/snapshotMedia.js +110 -0
  174. package/dist/snapshotMediaCapture.js +245 -0
  175. package/dist/snapshotMediaFields.js +224 -0
  176. package/dist/snapshotMediaRead.js +184 -0
  177. package/dist/snapshotMediaReader.js +12 -0
  178. package/dist/snapshotObservation.js +15 -0
  179. package/dist/snapshotObservedRouteHistory.js +33 -0
  180. package/dist/snapshotOutputTransfer.js +77 -0
  181. package/dist/snapshotPageLoader.js +6 -0
  182. package/dist/snapshotPageSeo.js +58 -0
  183. package/dist/snapshotPathLocale.js +14 -0
  184. package/dist/snapshotPresentation.js +85 -0
  185. package/dist/snapshotPresentationPolicy.js +11 -0
  186. package/dist/snapshotProjection.js +118 -0
  187. package/dist/snapshotPublicAccess.js +160 -0
  188. package/dist/snapshotPublicRouteHistory.js +39 -0
  189. package/dist/snapshotReadAdmission.js +37 -0
  190. package/dist/snapshotRedirectOutput.js +150 -0
  191. package/dist/snapshotRedirectTargets.js +23 -0
  192. package/dist/snapshotRedirects.js +131 -0
  193. package/dist/snapshotReference.js +7 -0
  194. package/dist/snapshotReferenceAddress.js +9 -0
  195. package/dist/snapshotReferenceGraph.js +78 -0
  196. package/dist/snapshotReferenceRead.js +64 -0
  197. package/dist/snapshotRelease.js +98 -0
  198. package/dist/snapshotRender.js +360 -0
  199. package/dist/snapshotRenderDependencies.js +177 -0
  200. package/dist/snapshotRenditions.js +87 -0
  201. package/dist/snapshotRichDocument.js +61 -0
  202. package/dist/snapshotRoleTransfer.js +105 -0
  203. package/dist/snapshotRoleTransferRest.js +98 -0
  204. package/dist/snapshotRouteAdmission.js +70 -0
  205. package/dist/snapshotRouteDispatch.js +110 -0
  206. package/dist/snapshotRouteDispositionPlan.js +72 -0
  207. package/dist/snapshotRouteRead.js +42 -0
  208. package/dist/snapshotRoutes.js +78 -0
  209. package/dist/snapshotRouting.js +112 -0
  210. package/dist/snapshotSeo.js +178 -0
  211. package/dist/snapshotSeoControls.js +100 -0
  212. package/dist/snapshotSeoDocumentInventory.js +114 -0
  213. package/dist/snapshotSeoDocuments.js +128 -0
  214. package/dist/snapshotSeoMerge.js +84 -0
  215. package/dist/snapshotSeoMetadata.js +136 -0
  216. package/dist/snapshotSeoOutput.js +172 -0
  217. package/dist/snapshotSeoPathSets.js +104 -0
  218. package/dist/snapshotSeoRead.js +87 -0
  219. package/dist/snapshotSite.js +127 -0
  220. package/dist/snapshotSitemapFiles.js +35 -0
  221. package/dist/snapshotTreeDependencies.js +57 -0
  222. package/dist/snapshotTreeLoader.js +9 -0
  223. package/dist/snapshotTreeRead.js +157 -0
  224. package/dist/staticPathSet.js +176 -0
  225. package/dist/staticPathSetRest.js +128 -0
  226. package/dist/staticPathSetService.js +248 -0
  227. package/dist/staticPathSetStore.js +337 -0
  228. package/dist/stewardship.js +2 -3
  229. package/dist/taxonomy.js +1 -2
  230. package/dist/team.js +1 -2
  231. package/dist/templates.js +2 -3
  232. package/dist/trackChanges.js +1 -2
  233. package/dist/translation.js +1 -2
  234. package/dist/tree.js +10 -11
  235. package/dist/usage.js +1 -2
  236. package/dist/validation.js +54 -55
  237. package/dist/visualEditing.js +1 -2
  238. package/dist/web.d.ts +709 -7
  239. package/dist/web.js +50 -33
  240. package/dist/workflow.js +9 -10
  241. package/dist/write.js +251 -227
  242. package/dist/xliff.js +1 -2
  243. package/package.json +21 -7
@@ -0,0 +1,105 @@
1
+ import { SnapshotSeoReadUnavailable as e } from "./snapshotSeoRead.js";
2
+ import { copySnapshotSeoDocumentsSelection as t } from "./snapshotSeoPathSets.js";
3
+ import { readSnapshotSeoDocuments as n, snapshotOutputSafetyBinding as r } from "./snapshotSeoDocuments.js";
4
+ import { readCurrentOutputSafetyArtifact as i } from "./outputSafetyArtifact.js";
5
+ import { readSnapshotSeoOutputArtifact as a } from "./snapshotSeoOutput.js";
6
+ import { readSnapshotRedirectOutputArtifact as o } from "./snapshotRedirectOutput.js";
7
+ import { createSnapshotOutputBatch as s, createSnapshotOutputTransfer as c } from "./snapshotOutputTransfer.js";
8
+ import { canonicalJson as l } from "@voltro/protocol";
9
+ // src/snapshotRoleTransfer.ts
10
+ var u = () => {
11
+ throw new e({ reason: "binding" });
12
+ }, d = (e) => {
13
+ let { store: d, provider: f, declaration: p, maxBytes: m } = e, h = { ...e.scope }, g = { ...e.use }, _ = e.keys.map((e) => ({
14
+ id: e.id,
15
+ material: new Uint8Array(e.material)
16
+ })), v = e.now ?? Date.now;
17
+ if (!Number.isSafeInteger(m) || m < 1) return u();
18
+ let y = f.readAssets?.bind(f), b = async (e, s) => {
19
+ let c = structuredClone(e), { role: b, id: x } = c;
20
+ if (![
21
+ "assets",
22
+ "deny",
23
+ "redirects",
24
+ "sitemap",
25
+ "robots"
26
+ ].includes(b) || !/^[a-f0-9]{64}$/.test(x) || !Array.isArray(c.targets) || b !== "redirects" && c.targets.length !== 0 || (["assets", "deny"].includes(b) ? c.safety !== null : c.safety === null)) return u();
27
+ let S = {
28
+ snapshot: { ...c.snapshot },
29
+ token: c.token,
30
+ consumerId: c.consumerId,
31
+ buildId: c.buildId,
32
+ host: c.host
33
+ }, C = t(c.documents), w = (e) => n(e, h, S, C, {
34
+ provider: f,
35
+ use: g,
36
+ keys: _,
37
+ now: v
38
+ }), T = async () => {
39
+ if (b === "assets") {
40
+ if (y === void 0) return u();
41
+ let e = await d.transactional(w), t = e.paths.admission.app, n = e.inventory;
42
+ if (t.web === void 0) return u();
43
+ let r = await y({
44
+ id: x,
45
+ snapshotDigest: S.snapshot.digest,
46
+ inputsId: t.inputsId,
47
+ executionId: t.executionId,
48
+ web: { ...t.web },
49
+ consentPurposes: n.consentPurposes,
50
+ presentations: n.presentations,
51
+ documents: n.records.map((e) => ({
52
+ url: e.url,
53
+ path: e.path,
54
+ routeId: e.routeId,
55
+ artifactId: e.artifactId,
56
+ presentation: e.presentation
57
+ }))
58
+ }), i = await d.transactional(w);
59
+ return l(e.inventory) !== l(i.inventory) || l(e.paths.selection) !== l(i.paths.selection) || l(e.paths.admission.context) !== l(i.paths.admission.context) ? u() : r;
60
+ }
61
+ if (b === "deny") return (await i(d, h, x, {
62
+ provider: f,
63
+ maxBytes: m,
64
+ admit: async (e) => r(await w(e))
65
+ })).artifact;
66
+ if (c.safety === null) return u();
67
+ let e = {
68
+ ...S,
69
+ documents: C,
70
+ safety: { ...c.safety }
71
+ };
72
+ return b === "redirects" ? p === void 0 ? u() : o(d, h, S.snapshot, {
73
+ ...e,
74
+ id: x,
75
+ targets: c.targets
76
+ }, {
77
+ declaration: p,
78
+ provider: f,
79
+ use: g,
80
+ keys: _,
81
+ maxBytes: m,
82
+ now: v
83
+ }) : a(d, h, S.snapshot, {
84
+ ...e,
85
+ id: x,
86
+ kind: b
87
+ }, {
88
+ provider: f,
89
+ use: g,
90
+ keys: _,
91
+ maxBytes: m,
92
+ now: v
93
+ });
94
+ }, E = await T(), D = 0;
95
+ for (let e of E.manifest.files) if (!Number.isSafeInteger(e.size) || e.size < 0 || (D += e.size, !Number.isSafeInteger(D) || D > m)) return u();
96
+ if (E.id !== x) return u();
97
+ let O = await s(E), k = await T();
98
+ return l(k) === l(E) ? O : u();
99
+ };
100
+ return {
101
+ ...c(f, b),
102
+ readBatch: s(f, b)
103
+ };
104
+ };
105
+ export { d as createSnapshotRoleTransfer };
@@ -0,0 +1,98 @@
1
+ import { cmsCredential as e, privateCmsHttpRoutes as t, privateCmsOperation as n } from "./privateCmsTransport.js";
2
+ import { CmsBuildSnapshotUnavailable as r } from "./buildSnapshotService.js";
3
+ import { Effect as i, Schema as a } from "effect";
4
+ import { strictInput as o } from "@voltro/protocol";
5
+ // src/snapshotRoleTransferRest.ts
6
+ var s = (s) => {
7
+ let c = {
8
+ namespace: "cms.roleTransfer",
9
+ path: "/v1/cms/role-transfer",
10
+ operationPrefix: "cmsRoleTransfer",
11
+ tags: ["CMS private output role transfer"],
12
+ error: r,
13
+ errorStatus: { CmsBuildSnapshotUnavailable: 409 },
14
+ credentialError: "CmsBuildSnapshotUnavailable"
15
+ }, l = a.Struct({
16
+ path: a.String,
17
+ digest: a.String,
18
+ size: a.Int,
19
+ contentType: a.String
20
+ }), u = a.Struct({
21
+ offset: a.Int,
22
+ size: a.Int,
23
+ digest: a.String
24
+ }), d = a.Struct({
25
+ artifactId: a.String,
26
+ pathSets: a.Array(a.Struct({
27
+ id: a.String,
28
+ digest: a.String
29
+ }))
30
+ }), f = a.Struct({
31
+ snapshot: a.Struct({
32
+ id: a.String,
33
+ digest: a.String
34
+ }),
35
+ consumerId: a.String,
36
+ buildId: a.String,
37
+ host: a.String,
38
+ id: a.String,
39
+ documents: d,
40
+ role: a.Literals([
41
+ "assets",
42
+ "deny",
43
+ "redirects",
44
+ "sitemap",
45
+ "robots"
46
+ ]),
47
+ safety: a.NullOr(a.Struct({ artifactId: a.String })),
48
+ targets: a.Array(a.Struct({
49
+ host: a.String,
50
+ documents: d
51
+ }))
52
+ }), p = "Render-read bearer; complete signed paths, original document receipts, current media rights and grant are admitted before and after every provider read. The exact role is independently reconstructed from original retained assets or current safety, route history and SEO controls. Metadata and bytes are private; they grant no activation or serving authority. No hidden renewal or retry.", m = (e) => i.tryPromise({
53
+ try: e,
54
+ catch: () => new r({ reason: "render" })
55
+ }), h = [
56
+ n(c, "manifest", "Read a private admitted output role manifest", p, o(f, c.namespace + ".manifest", !0), a.Struct({
57
+ id: a.String,
58
+ manifest: a.Struct({
59
+ version: a.Literal(1),
60
+ subject: a.Record(a.String, a.Unknown),
61
+ files: a.Array(l)
62
+ })
63
+ }), (t, n) => m(() => s.read({
64
+ ...t,
65
+ token: e(n, c.credentialError)
66
+ }))),
67
+ n(c, "file", "Plan bounded private output role chunks", p, o(a.Struct({
68
+ ...f.fields,
69
+ path: a.String
70
+ }), c.namespace + ".file", !0), a.Struct({
71
+ file: l,
72
+ chunks: a.Array(u)
73
+ }), (t, n) => m(() => s.planFile({
74
+ ...t,
75
+ token: e(n, c.credentialError)
76
+ }))),
77
+ n(c, "chunk", "Read a verified private output role chunk", p, o(a.Struct({
78
+ ...f.fields,
79
+ file: l,
80
+ chunk: u
81
+ }), c.namespace + ".chunk", !0), a.Struct({ base64: a.String }), (t, n) => m(async () => ({ base64: Buffer.from(await s.readChunk({
82
+ ...t,
83
+ token: e(n, c.credentialError)
84
+ })).toString("base64") }))),
85
+ n(c, "batch", "Read one bounded batch of complete private output files", p, o(a.Struct({
86
+ ...f.fields,
87
+ files: a.Array(l).check(a.isMinLength(1), a.isMaxLength(200))
88
+ }), c.namespace + ".batch", !0), a.Struct({ base64: a.String }), (t, n) => m(async () => ({ base64: Buffer.from(await s.readBatch({
89
+ ...t,
90
+ token: e(n, c.credentialError)
91
+ })).toString("base64") })))
92
+ ];
93
+ return {
94
+ routes: h,
95
+ httpRoutes: t(h)
96
+ };
97
+ };
98
+ export { s as cmsSnapshotRoleTransferRest };
@@ -0,0 +1,70 @@
1
+ import { normalizeHost as e } from "./domainHost.js";
2
+ import { findVerifiedSnapshotResource as t, readVerifiedSnapshotResource as n } from "./buildSnapshot.js";
3
+ import { contentRouteId as r } from "./contentRouteIdentity.js";
4
+ import { admitSnapshotPresentation as i, copySnapshotPresentationValue as a } from "./snapshotPresentation.js";
5
+ import { readCapturedSnapshotConsentPurposes as o } from "./snapshotPresentationPolicy.js";
6
+ import { resolveSnapshotReadBinding as s } from "./snapshotReadAdmission.js";
7
+ import { verifyRenderReadGrant as c } from "./renderReadGrant.js";
8
+ import { Schema as l } from "effect";
9
+ import { createHash as u } from "node:crypto";
10
+ import { canonicalJson as d } from "@voltro/runtime";
11
+ // src/snapshotRouteAdmission.ts
12
+ var f = class extends l.TaggedError()("SnapshotRouteReadUnavailable", { reason: l.Literals([
13
+ "binding",
14
+ "host",
15
+ "path",
16
+ "route",
17
+ "definition",
18
+ "publication",
19
+ "bounds",
20
+ "projection",
21
+ "owner"
22
+ ]) }) {}, p = (e) => {
23
+ throw new f({ reason: e });
24
+ }, m = (e) => u("sha256").update(d(e)).digest("hex"), h = (e) => typeof e == "string" && e.length > 0, g = (e, t, n) => {
25
+ let { contentType: i, documentId: a, localeId: o, mappingId: s } = n;
26
+ if (![
27
+ i,
28
+ a,
29
+ o,
30
+ s
31
+ ].every(h) || n.version !== 1 || n.state !== "resolved" || n.path !== t || n.tenantId !== e.tenantId || n.site !== e.site || n.environment !== e.environment || n.routeId !== r(e, String(o), String(i), String(a), String(s))) return p("route");
32
+ }, _ = async (r, l, u, d, f) => {
33
+ let h = f.now ?? Date.now(), _ = {
34
+ tenantId: l.tenantId,
35
+ site: l.site,
36
+ environment: l.environment
37
+ }, v = {
38
+ ...d,
39
+ presentation: a(d.presentation)
40
+ }, y = f.keys.map((e) => ({
41
+ id: e.id,
42
+ material: new Uint8Array(e.material)
43
+ })), b = {
44
+ id: u.id,
45
+ digest: u.digest
46
+ }, { snapshot: x, binding: S } = await s(r, _, b, v, h);
47
+ await c(r, v.token, S, {
48
+ keys: y,
49
+ now: h
50
+ });
51
+ let C = typeof v.host == "string" ? e(v.host) : null;
52
+ if (C === null) return p("host");
53
+ let w = (await t(r, _, x, "domains", C))?.value;
54
+ if (w === void 0 || w.version !== 1 || w.host !== C || w.tenantId !== _.tenantId || w.site !== _.site) return p("host");
55
+ if (typeof v.path != "string" || !v.path.startsWith("/") || v.path.startsWith("//") || v.path.length > 4096 || /[\x00-\x20\x7f\\?#]/.test(v.path) || new URL(v.path, `https://${C}`).pathname !== v.path) return p("path");
56
+ let T = (await t(r, _, x, "routes", `path:${m(v.path)}`))?.value;
57
+ T !== void 0 && g(_, v.path, T);
58
+ let E = (await n(r, _, x, "routes", "configuration")).value, D = await o(r, _, x, E.app);
59
+ return {
60
+ snapshot: x,
61
+ binding: S,
62
+ place: _,
63
+ input: v,
64
+ route: T,
65
+ configuration: E,
66
+ presentation: i(D, v.presentation),
67
+ now: h
68
+ };
69
+ };
70
+ export { f as SnapshotRouteReadUnavailable, _ as readSnapshotRouteAdmission, g as verifySnapshotContentRoute };
@@ -0,0 +1,110 @@
1
+ import { defineSiteDelivery as e } from "./siteDelivery.js";
2
+ import { nativeSnapshotRouteId as t, readSnapshotRouting as n, snapshotCmsPage as r, snapshotRouteDispatch as i, verifySnapshotRouteOwnership as a } from "./snapshotRouting.js";
3
+ import { coversSnapshotComponents as o } from "./snapshotFrontend.js";
4
+ import { readSnapshotAppExecution as s } from "./snapshotAppExecution.js";
5
+ import { SnapshotRouteReadUnavailable as c, readSnapshotRouteAdmission as l } from "./snapshotRouteAdmission.js";
6
+ import { readAdmittedSnapshotContentRoute as u } from "./snapshotRouteRead.js";
7
+ import { readAdmittedSnapshotBindingContext as d } from "./snapshotBindingRead.js";
8
+ import { snapshotPathLocale as f } from "./snapshotPathLocale.js";
9
+ import { readAdmittedSnapshotTrees as p } from "./snapshotTreeRead.js";
10
+ import { readAdmittedSnapshotFieldPlan as m } from "./snapshotFieldPlan.js";
11
+ import { readAdmittedSnapshotSeo as h } from "./snapshotSeoRead.js";
12
+ import { readAdmittedSnapshotAddressGraph as g } from "./snapshotAddressGraph.js";
13
+ import { readAdmittedSnapshotReferenceGraph as _ } from "./snapshotReferenceGraph.js";
14
+ // src/snapshotRouteDispatch.ts
15
+ var v = async (...v) => {
16
+ let [y] = v, b = await l(...v), { snapshot: x, place: S, input: C, route: w, configuration: T } = b, E = n(T);
17
+ if (w !== void 0 && T.definitionDigest !== w.definitionDigest) throw new c({ reason: "binding" });
18
+ let D = w === void 0 ? i(E, C.path, !1) : a(T, w);
19
+ if (D === null) return null;
20
+ if (D.owner === "cms") {
21
+ let e = await u(y, b);
22
+ if (e === null) return null;
23
+ let t = await s(y, S, x, e.output.contentType, e.components, {
24
+ id: e.output.localeId,
25
+ contentLocale: e.output.requestedLocale
26
+ }), n = t.nativePages ? r(E, C.path) : null, i = n === null ? null : await h(y, S, e, b.now), a = n === null ? null : await m(y, S, e, b.now), l = a ?? {
27
+ references: [],
28
+ media: [],
29
+ dependencies: [],
30
+ content: null
31
+ }, f = a === null ? [] : [{
32
+ source: null,
33
+ context: {
34
+ ...e,
35
+ routeId: e.output.routeId
36
+ },
37
+ fields: a
38
+ }], v = t.definitions.value, w = n === null ? [] : Object.keys(v.site.bindings).sort();
39
+ if (w.length > 64) throw new c({ reason: "binding" });
40
+ let T = Object.create(null);
41
+ for (let n of w) {
42
+ let r = await d(y, S, e, n, b.now);
43
+ if (r === null) {
44
+ T[n] = null;
45
+ continue;
46
+ }
47
+ if (!o(v.frontend, r.components, t.context)) throw new c({ reason: "binding" });
48
+ let i = await m(y, S, r, b.now);
49
+ T[n] = {
50
+ output: r.output,
51
+ ...i
52
+ }, f.push({
53
+ source: n,
54
+ context: r,
55
+ fields: i
56
+ });
57
+ }
58
+ if (l.media.length + Object.values(T).reduce((e, t) => e + (t?.media.length ?? 0), 0) > 1024) throw new c({ reason: "binding" });
59
+ let D = {
60
+ nodes: {},
61
+ edges: []
62
+ };
63
+ if (a !== null) {
64
+ if (t.context === void 0) throw new c({ reason: "binding" });
65
+ D = await _(y, S, f, v.frontend, t.context, b.now);
66
+ }
67
+ let O = n === null ? {} : await p(y, S, x, e.output.localeId, {
68
+ contentType: e.output.contentType,
69
+ documentId: e.document.documentId
70
+ }, b.now);
71
+ return {
72
+ owner: "cms",
73
+ presentation: b.presentation,
74
+ capturedAt: x.manifest.capturedAt,
75
+ route: e.output,
76
+ page: n,
77
+ ...l,
78
+ trees: O,
79
+ bindings: T,
80
+ referenceGraph: D,
81
+ addressGraph: a === null ? [] : await g(y, S, f, D, b.now),
82
+ seo: i?.seo ?? null,
83
+ image: i?.image ?? null,
84
+ ...t
85
+ };
86
+ }
87
+ if (D.code === null) throw new c({ reason: "owner" });
88
+ let O = e(T.site), k = f(O, C.path), A = await s(y, S, x, void 0, [], {
89
+ id: k.id,
90
+ contentLocale: k.contentLocale
91
+ });
92
+ if (!A.nativePages) throw new c({ reason: "owner" });
93
+ let j = E.definition?.claims[D.code.file];
94
+ return {
95
+ owner: "code",
96
+ publicCode: j?.kind === "code" && j.public === !0,
97
+ presentation: b.presentation,
98
+ capturedAt: x.manifest.capturedAt,
99
+ route: {
100
+ routeId: t(S, k.id, D.code.file, C.path),
101
+ path: C.path,
102
+ code: D.code,
103
+ localeId: k.id,
104
+ languageTag: k.tag
105
+ },
106
+ trees: await p(y, S, x, k.id, null, b.now),
107
+ ...A
108
+ };
109
+ };
110
+ export { v as readSnapshotRenderRoute };
@@ -0,0 +1,72 @@
1
+ import { copyObservedRoutes as e } from "./routeHistoryStorage.js";
2
+ import { findVerifiedSnapshotResources as t } from "./buildSnapshot.js";
3
+ import { copyRouteDispositionDefinition as n, routeDispositionFail as r } from "./routeDispositions.js";
4
+ import { compileCmsPublicRouteDeclaration as i } from "./initializePublicRoutes.js";
5
+ import { snapshotRedirectSource as a } from "./snapshotRedirects.js";
6
+ import { isPrivateNativeRouteReservation as o } from "./privateNativeRouteReservation.js";
7
+ import { planExactRouteDispositions as s } from "./routeDispositionGraph.js";
8
+ import { canonicalJson as c } from "@voltro/runtime";
9
+ // src/snapshotRouteDispositionPlan.ts
10
+ var l = async (l, u, d, f, p, m) => {
11
+ let h = i(f).routing, { snapshot: g, input: _ } = d.admission, v = g.manifest.parts.find((e) => e.part === "redirects");
12
+ if (v?.format !== "voltro.cms.redirect-history/v4") return r("state");
13
+ let y = new Set(d.contexts.map((e) => e.host));
14
+ if (!y.has(_.host) || y.size > 256 || d.entries.length > 1e5 || d.entries.some((e) => !y.has(e.host))) return r("graph");
15
+ for (let e of y) for (let t of d.site.locales.filter((e) => e.enabled)) for (let n of ["cms", "code"]) if (!d.contexts.some((r) => r.host === e && r.localeIds.includes(t.id) && r.owners.includes(n))) return r("graph");
16
+ let b = [], x = [], S = [], C = [], w = 0, T = /* @__PURE__ */ new Map(), E = (t) => {
17
+ let i = t.value;
18
+ if ([
19
+ "configuration",
20
+ "source:configuration",
21
+ "disposition:configuration"
22
+ ].includes(t.key) && T.set(t.key, i), t.key.startsWith("source:url:") || t.key.startsWith("observed:url:")) {
23
+ let [n] = e([{
24
+ url: i.url,
25
+ routeId: i.routeId
26
+ }]);
27
+ if (n === void 0) return r("state");
28
+ if (new URL(n.url).hostname !== _.host) return;
29
+ let a = t.key.startsWith("source:") ? b : x;
30
+ if (a.length >= 1e5) return r("bounds");
31
+ a.push(n), t.key.startsWith("source:") && i.active === !0 && S.push(n);
32
+ } else if (t.key.startsWith("disposition:url:")) {
33
+ let e = n(i.definition);
34
+ if (new URL(e.source.url).hostname !== _.host) return;
35
+ if (C.length >= 1e5) return r("bounds");
36
+ C.push(e);
37
+ }
38
+ }, D = async (e) => {
39
+ let n = await t(l, u, g, "redirects", e.map((e) => e.key));
40
+ for (let t of e) {
41
+ if (++w > v.entries || c(n.get(t.key)) !== c(t)) return r("state");
42
+ E(t);
43
+ }
44
+ }, O = [], k = a(l, u, p, f, m);
45
+ for await (let e of k.entries(g.manifest.publication)) O.push(e), O.length === 200 && (await D(O), O = []);
46
+ if (O.length > 0 && await D(O), w !== v.entries) return r("state");
47
+ let A = T.get("source:configuration"), j = T.get("configuration"), M = T.get("disposition:configuration");
48
+ if (A === void 0 || j === void 0 || M === void 0 || typeof A.revision != "number" || typeof A.sourceDigest != "string" || typeof j.revision != "number" || j.sourceDigest !== null && typeof j.sourceDigest != "string" || typeof M.revision != "number") return r("state");
49
+ let N = new Map([...x, ...b].map((e) => [e.url, e])), P = new Set(S.map((e) => e.url)), F = [...N.values()].filter((e) => o(h, new URL(e.url).pathname, P.has(e.url)));
50
+ return {
51
+ definitions: s({
52
+ observed: x,
53
+ sourceObserved: b,
54
+ currentOwned: S,
55
+ reserved: F,
56
+ current: d.entries.map((e) => ({
57
+ url: "https://" + e.host + e.path,
58
+ routeId: e.routeId
59
+ })),
60
+ decisions: C,
61
+ now: m
62
+ }),
63
+ routeState: {
64
+ sourceRevision: A.revision,
65
+ sourceDigest: A.sourceDigest,
66
+ outputRevision: j.revision,
67
+ outputSourceDigest: j.sourceDigest,
68
+ approvalRevision: M.revision
69
+ }
70
+ };
71
+ };
72
+ export { l as readSnapshotRouteDispositionPlan };
@@ -0,0 +1,42 @@
1
+ import { readVerifiedSnapshotResource as e } from "./buildSnapshot.js";
2
+ import { verifySnapshotRouteOwnership as t } from "./snapshotRouting.js";
3
+ import { admitSnapshotPublicDocument as n, admitVerifiedSnapshotPublicDocument as r } from "./snapshotPublicAccess.js";
4
+ import { SnapshotRouteReadUnavailable as i, readSnapshotRouteAdmission as a } from "./snapshotRouteAdmission.js";
5
+ import { projectSnapshotDocument as o } from "./snapshotDocumentProjection.js";
6
+ import { canonicalJson as s } from "@voltro/runtime";
7
+ // src/snapshotRouteRead.ts
8
+ var c = (e) => {
9
+ throw new i({ reason: e });
10
+ }, l = async (e, t, n, r, i) => u(e, await a(e, t, n, r, i)), u = async (i, a, l) => {
11
+ let { snapshot: u, binding: d, place: f, input: p, route: m, configuration: h, presentation: g, now: _ } = a;
12
+ if (m === void 0) return null;
13
+ let { contentType: v, documentId: y, localeId: b } = m, x = l === void 0 ? await n(i, f, u, String(v), String(b), String(y), _) : await r(i, f, u, l, String(v), String(b), String(y), _);
14
+ if (x === null) return null;
15
+ let S = x.chain[0];
16
+ if (S.variantId !== m.variantId || S.revisionId !== m.revisionId || S.revision !== m.revision || S.locale !== m.sourceLocale || x.requestedLocale !== m.requestedLocale || m.fallback !== (S.locale !== x.requestedLocale)) return c("route");
17
+ let C = (await e(i, f, u, "schema", `type:${String(v)}`)).value;
18
+ if (h.definitionDigest !== m.definitionDigest || s(h.app) !== s(C.app)) return c("binding");
19
+ if (t(h, m).owner !== "cms") return c("owner");
20
+ let { values: w, components: T } = await o(i, f, u, String(v), S, C, _, g);
21
+ return {
22
+ snapshot: u,
23
+ binding: d,
24
+ route: m,
25
+ document: S,
26
+ components: T,
27
+ output: {
28
+ snapshotId: u.id,
29
+ snapshotDigest: u.digest,
30
+ routeId: String(m.routeId),
31
+ path: p.path,
32
+ contentType: String(v),
33
+ localeId: String(b),
34
+ requestedLocale: x.requestedLocale,
35
+ sourceLocale: S.locale,
36
+ fallback: S.locale !== x.requestedLocale,
37
+ values: w,
38
+ presentation: g
39
+ }
40
+ };
41
+ }, d = async (...e) => (await l(...e))?.output ?? null;
42
+ export { i as SnapshotRouteReadUnavailable, u as readAdmittedSnapshotContentRoute, d as readSnapshotRoute, l as readSnapshotRouteContext };
@@ -0,0 +1,78 @@
1
+ import { compileSiteDelivery as e } from "./siteDelivery.js";
2
+ import { compileContentRouteTypes as t } from "./contentRouteTypes.js";
3
+ import { pageCapturedPublications as n, readCapturedDocumentEntry as r, verifyPublicationState as i } from "./publicationState.js";
4
+ import { copySnapshotResource as a } from "./buildSnapshot.js";
5
+ import { compileSnapshotRouting as o } from "./snapshotRouting.js";
6
+ import { copySnapshotAppCodePin as s } from "./snapshotDefinitions.js";
7
+ import { ContentRouteMaterializationUnavailable as c, materializeContentRoutes as l } from "./contentRouteMaterializer.js";
8
+ import { Schema as u } from "effect";
9
+ import { createHash as d } from "node:crypto";
10
+ import { canonicalJson as f } from "@voltro/runtime";
11
+ // src/snapshotRoutes.ts
12
+ var p = class extends u.TaggedError()("SnapshotRouteUnavailable", { reason: u.Literals([
13
+ "scope",
14
+ "types",
15
+ "mapping",
16
+ "publication",
17
+ "bounds"
18
+ ]) }) {}, m = (e) => {
19
+ throw new p({ reason: e });
20
+ }, h = (e) => d("sha256").update(f(e)).digest("hex"), g = (e) => typeof e == "string" && e.length > 0, _ = (u, d, f, p, _, v = Date.now(), y = {
21
+ definition: null,
22
+ discovery: null
23
+ }) => {
24
+ let b = {
25
+ tenantId: d.tenantId,
26
+ site: d.site,
27
+ environment: d.environment
28
+ }, x = e(p), S = s(_), C = o(y.definition, y.discovery, S);
29
+ if (!Object.values(b).every(g) || x.definition.id !== b.site || !x.definition.environments.includes(b.environment)) return m("scope");
30
+ let w = t(f);
31
+ if (!w.ok) return m(w.reason);
32
+ let T = w.types, E = h({
33
+ site: x.definition,
34
+ types: T,
35
+ routing: C
36
+ }), D = a({
37
+ key: "configuration",
38
+ value: {
39
+ version: 1,
40
+ ...b,
41
+ app: S,
42
+ definitionDigest: E,
43
+ types: T,
44
+ site: x.definition,
45
+ routing: C,
46
+ resolution: "per-node",
47
+ addressScope: "site"
48
+ }
49
+ });
50
+ return {
51
+ format: "voltro.cms.content-routes/v4",
52
+ entries: async function* (e) {
53
+ let t = await i(u, b, e, v);
54
+ if (t.types.length !== T.length || t.types.some((e) => !T.some((t) => t.name === e)) || t.locales.length !== x.contentLocales.length || t.locales.some((e) => !x.contentLocales.includes(e))) return m("scope");
55
+ yield a(D);
56
+ try {
57
+ yield* l({
58
+ scope: b,
59
+ site: x,
60
+ types: T,
61
+ routing: C,
62
+ definitionDigest: E
63
+ }, {
64
+ read: (t, n, i) => r(u, b, e.id, t, n, i, v),
65
+ page: (t, r, i) => n(u, b, e.id, t, r, {
66
+ limit: 200,
67
+ now: v,
68
+ ...i === void 0 ? {} : { after: i }
69
+ })
70
+ });
71
+ } catch (e) {
72
+ if (e instanceof c) return m(e.reason);
73
+ throw e;
74
+ }
75
+ }
76
+ };
77
+ };
78
+ export { p as SnapshotRouteUnavailable, _ as snapshotContentRoutesSource };