@voltro/cms 0.85.0 → 0.87.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 (244) hide show
  1. package/CHANGELOG.md +5987 -0
  2. package/README.md +138 -0
  3. package/THIRD-PARTY-NOTICES.md +864 -253
  4. package/dist/ContentForm.js +282 -0
  5. package/dist/RichDocumentEditor.js +550 -0
  6. package/dist/RichDocumentView.js +177 -0
  7. package/dist/RichTextSurface.js +135 -0
  8. package/dist/aiCandidates.js +199 -0
  9. package/dist/aiOperations.js +152 -0
  10. package/dist/applicationBuildSnapshotService.js +101 -0
  11. package/dist/assetRenditions.js +102 -0
  12. package/dist/assetRevision.js +46 -0
  13. package/dist/assetUseRights.js +72 -0
  14. package/dist/audiences.js +31 -0
  15. package/dist/availability.js +124 -0
  16. package/dist/blueprint.js +166 -0
  17. package/dist/build.d.ts +3063 -0
  18. package/dist/build.js +37 -0
  19. package/dist/buildApplicationAdmission.js +16 -0
  20. package/dist/buildApplicationCatalog.js +136 -0
  21. package/dist/buildApplicationCatalogTable.js +24 -0
  22. package/dist/buildApplicationRest.js +99 -0
  23. package/dist/buildApplicationUpload.js +111 -0
  24. package/dist/buildSnapshot.js +401 -0
  25. package/dist/buildSnapshotApplicationPin.js +32 -0
  26. package/dist/buildSnapshotRest.js +210 -0
  27. package/dist/buildSnapshotService.js +265 -0
  28. package/dist/buildSnapshotTables.js +25 -0
  29. package/dist/bulk.js +282 -0
  30. package/dist/cacheIdentity.js +152 -0
  31. package/dist/changes.js +307 -0
  32. package/dist/cmsContext.js +229 -0
  33. package/dist/collections.js +224 -0
  34. package/dist/consent.js +29 -0
  35. package/dist/contentLocations.js +53 -0
  36. package/dist/contentProjection.js +83 -0
  37. package/dist/contentRouteIdentity.js +13 -0
  38. package/dist/contentRouteMaterializer.js +97 -0
  39. package/dist/contentRouteTypes.js +39 -0
  40. package/dist/contentSeo.js +189 -0
  41. package/dist/contentTreePath.js +60 -0
  42. package/dist/contentType.js +208 -0
  43. package/dist/contentValues.js +18 -0
  44. package/dist/contentfulImport.js +162 -0
  45. package/dist/copies.js +89 -0
  46. package/dist/cutover.js +202 -0
  47. package/dist/deliveryChecks.js +138 -0
  48. package/dist/domainHost.js +7 -0
  49. package/dist/domains.js +139 -0
  50. package/dist/draftTexts.js +164 -0
  51. package/dist/duplicates.js +78 -0
  52. package/dist/edgePurge.js +69 -0
  53. package/dist/editHistory.js +113 -0
  54. package/dist/effectForm.js +11 -0
  55. package/dist/environmentAliases.js +138 -0
  56. package/dist/environments.js +147 -0
  57. package/dist/errors.js +107 -0
  58. package/dist/experiments.js +528 -0
  59. package/dist/exposure.js +28 -0
  60. package/dist/extensionManifest.js +81 -0
  61. package/dist/extensions.js +314 -0
  62. package/dist/fieldSchema.js +199 -0
  63. package/dist/formStrings.js +74 -0
  64. package/dist/frontendBindings.js +99 -0
  65. package/dist/frontendMedia.js +18 -0
  66. package/dist/glossary.js +73 -0
  67. package/dist/history.js +54 -0
  68. package/dist/htmlImport.js +297 -0
  69. package/dist/index.d.ts +771 -54
  70. package/dist/index.js +89 -6082
  71. package/dist/initializePublicRoutes.js +28 -0
  72. package/dist/liveContentRouteView.js +76 -0
  73. package/dist/media.js +29 -0
  74. package/dist/metrics.js +46 -0
  75. package/dist/migration.js +193 -0
  76. package/dist/migrationStages.js +13 -0
  77. package/dist/nativeOutputDeploymentService.js +205 -0
  78. package/dist/outputActivation.js +234 -0
  79. package/dist/outputActivationOrigin.js +51 -0
  80. package/dist/outputActivationStore.js +411 -0
  81. package/dist/outputActivationTables.js +11 -0
  82. package/dist/outputActivationTarget.js +81 -0
  83. package/dist/outputActivationTargetTable.js +25 -0
  84. package/dist/outputDeployment.js +174 -0
  85. package/dist/outputDeploymentRest.js +168 -0
  86. package/dist/outputDeploymentService.js +241 -0
  87. package/dist/outputRouteGraph.js +177 -0
  88. package/dist/outputSafetyArtifact.js +147 -0
  89. package/dist/outputTargetRest.js +62 -0
  90. package/dist/pathSegmentEncoding.js +4 -0
  91. package/dist/presenceAnchors.js +68 -0
  92. package/dist/preview.js +31 -0
  93. package/dist/privateCmsTransport.js +76 -0
  94. package/dist/privateNativeRouteReservation.js +10 -0
  95. package/dist/promotion.js +116 -0
  96. package/dist/publicBuild.js +90 -0
  97. package/dist/publicBuildRest.js +98 -0
  98. package/dist/publicBuildService.js +63 -0
  99. package/dist/publicOutputHttp.js +129 -0
  100. package/dist/publicOutputService.js +287 -0
  101. package/dist/publicPresentation.js +17 -0
  102. package/dist/publicRouteDispositionAdmission.js +38 -0
  103. package/dist/publicRouteHistoryStore.js +12 -0
  104. package/dist/publicRouteHistoryView.js +34 -0
  105. package/dist/publicRouteIntegrity.js +5 -0
  106. package/dist/publicRouteMutation.js +6 -0
  107. package/dist/publicRouteNamespace.js +134 -0
  108. package/dist/publicRoutePublication.js +36 -0
  109. package/dist/publicRouteRegistry.js +17 -0
  110. package/dist/publicRouteRegistryBinding.js +194 -0
  111. package/dist/publicRouteRegistryDefinition.js +76 -0
  112. package/dist/publicRouteSitePublication.js +40 -0
  113. package/dist/publicRouteTables.js +13 -0
  114. package/dist/publicRouteUrl.js +18 -0
  115. package/dist/publicationSeo.js +52 -0
  116. package/dist/publicationState.js +296 -0
  117. package/dist/quality.js +188 -0
  118. package/dist/reconfigurePublicRoutes.js +41 -0
  119. package/dist/recurrence.js +78 -0
  120. package/dist/redirects.js +130 -0
  121. package/dist/referenceGraph.js +224 -0
  122. package/dist/references.js +173 -0
  123. package/dist/release.js +241 -0
  124. package/dist/renderReadAuthority.js +43 -0
  125. package/dist/renderReadGrant.js +137 -0
  126. package/dist/rest.js +52 -0
  127. package/dist/review.js +160 -0
  128. package/dist/richDocument.js +521 -0
  129. package/dist/richInline.js +100 -0
  130. package/dist/routeDispositionGraph.js +44 -0
  131. package/dist/routeDispositionRest.js +51 -0
  132. package/dist/routeDispositionService.js +73 -0
  133. package/dist/routeDispositionStore.js +289 -0
  134. package/dist/routeDispositionTables.js +5 -0
  135. package/dist/routeDispositions.js +91 -0
  136. package/dist/routeHistoryStorage.js +320 -0
  137. package/dist/routeHistoryStore.js +12 -0
  138. package/dist/schedule.js +80 -0
  139. package/dist/search.js +148 -0
  140. package/dist/selectionIntent.js +164 -0
  141. package/dist/seo.js +31 -0
  142. package/dist/series.js +105 -0
  143. package/dist/share.js +112 -0
  144. package/dist/siteBindings.js +159 -0
  145. package/dist/siteBuildCandidate.js +104 -0
  146. package/dist/siteDelivery.js +115 -0
  147. package/dist/siteState.js +47 -0
  148. package/dist/snapshotAddressGraph.js +55 -0
  149. package/dist/snapshotAddressRead.js +73 -0
  150. package/dist/snapshotAppConsumer.js +71 -0
  151. package/dist/snapshotAppExecution.js +102 -0
  152. package/dist/snapshotApplication.js +75 -0
  153. package/dist/snapshotApprovedRouteDispositions.js +44 -0
  154. package/dist/snapshotAssetAssembly.js +70 -0
  155. package/dist/snapshotAssetAssemblyRest.js +50 -0
  156. package/dist/snapshotBindingRead.js +61 -0
  157. package/dist/snapshotCodeSeo.js +29 -0
  158. package/dist/snapshotComponent.js +34 -0
  159. package/dist/snapshotComponentSource.js +24 -0
  160. package/dist/snapshotConsumer.js +87 -0
  161. package/dist/snapshotContentIdentity.js +10 -0
  162. package/dist/snapshotDefinitions.js +264 -0
  163. package/dist/snapshotDocumentAssembly.js +193 -0
  164. package/dist/snapshotDocumentAssemblyRest.js +84 -0
  165. package/dist/snapshotDocumentProjection.js +202 -0
  166. package/dist/snapshotDocumentTransfer.js +35 -0
  167. package/dist/snapshotDocumentTransferRest.js +80 -0
  168. package/dist/snapshotDomains.js +56 -0
  169. package/dist/snapshotEnvironment.js +31 -0
  170. package/dist/snapshotFieldPlan.js +85 -0
  171. package/dist/snapshotFrontend.js +103 -0
  172. package/dist/snapshotLink.js +8 -0
  173. package/dist/snapshotMedia.js +111 -0
  174. package/dist/snapshotMediaCapture.js +246 -0
  175. package/dist/snapshotMediaFields.js +225 -0
  176. package/dist/snapshotMediaRead.js +185 -0
  177. package/dist/snapshotMediaReader.js +13 -0
  178. package/dist/snapshotObservation.js +16 -0
  179. package/dist/snapshotObservedRouteHistory.js +34 -0
  180. package/dist/snapshotOutputTransfer.js +78 -0
  181. package/dist/snapshotPageLoader.js +7 -0
  182. package/dist/snapshotPageSeo.js +59 -0
  183. package/dist/snapshotPathLocale.js +15 -0
  184. package/dist/snapshotPresentation.js +86 -0
  185. package/dist/snapshotPresentationPolicy.js +12 -0
  186. package/dist/snapshotProjection.js +119 -0
  187. package/dist/snapshotPublicAccess.js +161 -0
  188. package/dist/snapshotPublicRouteHistory.js +40 -0
  189. package/dist/snapshotReadAdmission.js +38 -0
  190. package/dist/snapshotRedirectOutput.js +151 -0
  191. package/dist/snapshotRedirectTargets.js +24 -0
  192. package/dist/snapshotRedirects.js +132 -0
  193. package/dist/snapshotReference.js +8 -0
  194. package/dist/snapshotReferenceAddress.js +10 -0
  195. package/dist/snapshotReferenceGraph.js +79 -0
  196. package/dist/snapshotReferenceRead.js +65 -0
  197. package/dist/snapshotRelease.js +99 -0
  198. package/dist/snapshotRender.js +361 -0
  199. package/dist/snapshotRenderDependencies.js +178 -0
  200. package/dist/snapshotRenditions.js +88 -0
  201. package/dist/snapshotRichDocument.js +62 -0
  202. package/dist/snapshotRoleTransfer.js +106 -0
  203. package/dist/snapshotRoleTransferRest.js +99 -0
  204. package/dist/snapshotRouteAdmission.js +71 -0
  205. package/dist/snapshotRouteDispatch.js +111 -0
  206. package/dist/snapshotRouteDispositionPlan.js +73 -0
  207. package/dist/snapshotRouteRead.js +43 -0
  208. package/dist/snapshotRoutes.js +79 -0
  209. package/dist/snapshotRouting.js +113 -0
  210. package/dist/snapshotSeo.js +179 -0
  211. package/dist/snapshotSeoControls.js +101 -0
  212. package/dist/snapshotSeoDocumentInventory.js +115 -0
  213. package/dist/snapshotSeoDocuments.js +129 -0
  214. package/dist/snapshotSeoMerge.js +85 -0
  215. package/dist/snapshotSeoMetadata.js +137 -0
  216. package/dist/snapshotSeoOutput.js +173 -0
  217. package/dist/snapshotSeoPathSets.js +105 -0
  218. package/dist/snapshotSeoRead.js +88 -0
  219. package/dist/snapshotSite.js +128 -0
  220. package/dist/snapshotSitemapFiles.js +36 -0
  221. package/dist/snapshotTreeDependencies.js +58 -0
  222. package/dist/snapshotTreeLoader.js +10 -0
  223. package/dist/snapshotTreeRead.js +158 -0
  224. package/dist/staticPathSet.js +177 -0
  225. package/dist/staticPathSetRest.js +129 -0
  226. package/dist/staticPathSetService.js +249 -0
  227. package/dist/staticPathSetStore.js +338 -0
  228. package/dist/stewardship.js +146 -0
  229. package/dist/taxonomy.js +36 -0
  230. package/dist/team.js +103 -0
  231. package/dist/templates.js +106 -0
  232. package/dist/trackChanges.js +197 -0
  233. package/dist/translation.js +64 -0
  234. package/dist/tree.js +87 -0
  235. package/dist/usage.js +50 -0
  236. package/dist/validation.js +192 -0
  237. package/dist/visualEditing.js +60 -0
  238. package/dist/web.d.ts +709 -7
  239. package/dist/web.js +50 -2
  240. package/dist/workflow.js +322 -0
  241. package/dist/write.js +419 -0
  242. package/dist/xliff.js +325 -0
  243. package/package.json +20 -6
  244. package/dist/presenceAnchors-4iHAVQB3.js +0 -4367
@@ -0,0 +1,106 @@
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
+ //#region 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
+ //#endregion
106
+ export { d as createSnapshotRoleTransfer };
@@ -0,0 +1,99 @@
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
+ //#region 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
+ //#endregion
99
+ export { s as cmsSnapshotRoleTransferRest };
@@ -0,0 +1,71 @@
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
+ //#region 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
+ //#endregion
71
+ export { f as SnapshotRouteReadUnavailable, _ as readSnapshotRouteAdmission, g as verifySnapshotContentRoute };
@@ -0,0 +1,111 @@
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
+ //#region 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
+ //#endregion
111
+ export { v as readSnapshotRenderRoute };
@@ -0,0 +1,73 @@
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
+ //#region 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
+ //#endregion
73
+ export { l as readSnapshotRouteDispositionPlan };
@@ -0,0 +1,43 @@
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
+ //#region 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
+ //#endregion
43
+ export { i as SnapshotRouteReadUnavailable, u as readAdmittedSnapshotContentRoute, d as readSnapshotRoute, l as readSnapshotRouteContext };
@@ -0,0 +1,79 @@
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
+ //#region 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
+ //#endregion
79
+ export { p as SnapshotRouteUnavailable, _ as snapshotContentRoutesSource };