@nakafa/aksara-contracts 0.27.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 (269) hide show
  1. package/LICENSE +185 -0
  2. package/README.md +73 -0
  3. package/dist/artifact/integrity.d.ts +29 -0
  4. package/dist/artifact/integrity.js +54 -0
  5. package/dist/artifact/limits.d.ts +26 -0
  6. package/dist/artifact/limits.js +46 -0
  7. package/dist/artifact/source.d.ts +21 -0
  8. package/dist/artifact/source.js +24 -0
  9. package/dist/artifact/spec.d.ts +148 -0
  10. package/dist/artifact/spec.js +92 -0
  11. package/dist/artifact/verify.d.ts +26 -0
  12. package/dist/artifact/verify.js +18 -0
  13. package/dist/cache/content.d.ts +52 -0
  14. package/dist/cache/content.js +80 -0
  15. package/dist/content.d.ts +168 -0
  16. package/dist/content.js +107 -0
  17. package/dist/country.d.ts +4 -0
  18. package/dist/country.js +8 -0
  19. package/dist/date.d.ts +24 -0
  20. package/dist/date.js +44 -0
  21. package/dist/decode.d.ts +4 -0
  22. package/dist/decode.js +8 -0
  23. package/dist/delivery.d.ts +4 -0
  24. package/dist/delivery.js +7 -0
  25. package/dist/errors.d.ts +10 -0
  26. package/dist/errors.js +8 -0
  27. package/dist/graph/family.d.ts +45 -0
  28. package/dist/graph/family.js +85 -0
  29. package/dist/graph/identity.d.ts +19 -0
  30. package/dist/graph/identity.js +39 -0
  31. package/dist/graph/spec.d.ts +20 -0
  32. package/dist/graph/spec.js +26 -0
  33. package/dist/hash/text.d.ts +10 -0
  34. package/dist/hash/text.js +20 -0
  35. package/dist/ids.d.ts +27 -0
  36. package/dist/ids.js +63 -0
  37. package/dist/limits.d.ts +10 -0
  38. package/dist/limits.js +10 -0
  39. package/dist/locale.d.ts +37 -0
  40. package/dist/locale.js +53 -0
  41. package/dist/material/domain.d.ts +4 -0
  42. package/dist/material/domain.js +8 -0
  43. package/dist/preview/artifact.d.ts +198 -0
  44. package/dist/preview/artifact.js +20 -0
  45. package/dist/preview/auth.d.ts +71 -0
  46. package/dist/preview/auth.js +49 -0
  47. package/dist/preview/document.d.ts +692 -0
  48. package/dist/preview/document.js +90 -0
  49. package/dist/preview/spec.d.ts +2517 -0
  50. package/dist/preview/spec.js +142 -0
  51. package/dist/preview/target.d.ts +172 -0
  52. package/dist/preview/target.js +70 -0
  53. package/dist/program/curriculum.d.ts +69 -0
  54. package/dist/program/curriculum.js +181 -0
  55. package/dist/program/snapshot/digest.d.ts +26 -0
  56. package/dist/program/snapshot/digest.js +220 -0
  57. package/dist/program/snapshot/hash.d.ts +31 -0
  58. package/dist/program/snapshot/hash.js +40 -0
  59. package/dist/program/snapshot/row-hash.d.ts +155 -0
  60. package/dist/program/snapshot/row-hash.js +34 -0
  61. package/dist/program/snapshot/row.d.ts +139 -0
  62. package/dist/program/snapshot/row.js +28 -0
  63. package/dist/program/snapshot/spec.d.ts +36 -0
  64. package/dist/program/snapshot/spec.js +39 -0
  65. package/dist/program/spec.d.ts +85 -0
  66. package/dist/program/spec.js +197 -0
  67. package/dist/projection/article.d.ts +145 -0
  68. package/dist/projection/article.js +150 -0
  69. package/dist/projection/digest.d.ts +261 -0
  70. package/dist/projection/digest.js +59 -0
  71. package/dist/projection/hash.d.ts +3 -0
  72. package/dist/projection/hash.js +10 -0
  73. package/dist/projection/material.d.ts +109 -0
  74. package/dist/projection/material.js +160 -0
  75. package/dist/projection/page.d.ts +112 -0
  76. package/dist/projection/page.js +106 -0
  77. package/dist/projection/question.d.ts +520 -0
  78. package/dist/projection/question.js +109 -0
  79. package/dist/projection/spec.d.ts +503 -0
  80. package/dist/projection/spec.js +56 -0
  81. package/dist/projection/verify.d.ts +281 -0
  82. package/dist/projection/verify.js +86 -0
  83. package/dist/question/identity.d.ts +175 -0
  84. package/dist/question/identity.js +205 -0
  85. package/dist/question/item.d.ts +453 -0
  86. package/dist/question/item.js +146 -0
  87. package/dist/question/response.d.ts +175 -0
  88. package/dist/question/response.js +150 -0
  89. package/dist/quran/attribution.d.ts +48 -0
  90. package/dist/quran/attribution.js +44 -0
  91. package/dist/quran/identity.d.ts +105 -0
  92. package/dist/quran/identity.js +100 -0
  93. package/dist/quran/notes.d.ts +56 -0
  94. package/dist/quran/notes.js +142 -0
  95. package/dist/quran/provenance.d.ts +257 -0
  96. package/dist/quran/provenance.js +144 -0
  97. package/dist/quran/snapshot/digest.d.ts +33 -0
  98. package/dist/quran/snapshot/digest.js +232 -0
  99. package/dist/quran/snapshot/hash.d.ts +51 -0
  100. package/dist/quran/snapshot/hash.js +50 -0
  101. package/dist/quran/snapshot/row/hash.d.ts +748 -0
  102. package/dist/quran/snapshot/row/hash.js +115 -0
  103. package/dist/quran/snapshot/row.d.ts +354 -0
  104. package/dist/quran/snapshot/row.js +91 -0
  105. package/dist/quran/snapshot/spec.d.ts +50 -0
  106. package/dist/quran/snapshot/spec.js +66 -0
  107. package/dist/quran/source.d.ts +206 -0
  108. package/dist/quran/source.js +153 -0
  109. package/dist/quran/spec.d.ts +47 -0
  110. package/dist/quran/spec.js +41 -0
  111. package/dist/quran/text.d.ts +7 -0
  112. package/dist/quran/text.js +11 -0
  113. package/dist/release/canonical.d.ts +23 -0
  114. package/dist/release/canonical.js +29 -0
  115. package/dist/release/current/evidence.d.ts +424 -0
  116. package/dist/release/current/evidence.js +41 -0
  117. package/dist/release/current/runtime.d.ts +4 -0
  118. package/dist/release/current/runtime.js +15 -0
  119. package/dist/release/current/state.d.ts +567 -0
  120. package/dist/release/current/state.js +91 -0
  121. package/dist/release/digest.d.ts +54 -0
  122. package/dist/release/digest.js +71 -0
  123. package/dist/release/hash.d.ts +72 -0
  124. package/dist/release/hash.js +14 -0
  125. package/dist/release/head.d.ts +206 -0
  126. package/dist/release/head.js +131 -0
  127. package/dist/release/items.d.ts +98 -0
  128. package/dist/release/items.js +114 -0
  129. package/dist/release/lifecycle.d.ts +297 -0
  130. package/dist/release/lifecycle.js +97 -0
  131. package/dist/release/origin.d.ts +30 -0
  132. package/dist/release/origin.js +24 -0
  133. package/dist/release/policy.d.ts +45 -0
  134. package/dist/release/policy.js +124 -0
  135. package/dist/release/result/digest.d.ts +127 -0
  136. package/dist/release/result/digest.js +140 -0
  137. package/dist/release/result/spec.d.ts +4 -0
  138. package/dist/release/result/spec.js +5 -0
  139. package/dist/release/rollback/digest.d.ts +126 -0
  140. package/dist/release/rollback/digest.js +92 -0
  141. package/dist/release/rollback/spec.d.ts +1729 -0
  142. package/dist/release/rollback/spec.js +156 -0
  143. package/dist/release/route/digest.d.ts +45 -0
  144. package/dist/release/route/digest.js +59 -0
  145. package/dist/release/route/page.d.ts +56 -0
  146. package/dist/release/route/page.js +46 -0
  147. package/dist/release/route/spec.d.ts +49 -0
  148. package/dist/release/route/spec.js +40 -0
  149. package/dist/release/route/verify.d.ts +66 -0
  150. package/dist/release/route/verify.js +67 -0
  151. package/dist/release/signing.d.ts +6 -0
  152. package/dist/release/signing.js +38 -0
  153. package/dist/release/snapshot/data.d.ts +475 -0
  154. package/dist/release/snapshot/data.js +74 -0
  155. package/dist/release/snapshot/evidence-requirement.d.ts +22 -0
  156. package/dist/release/snapshot/evidence-requirement.js +21 -0
  157. package/dist/release/snapshot/evidence.d.ts +58 -0
  158. package/dist/release/snapshot/evidence.js +14 -0
  159. package/dist/release/snapshot/program-evidence.d.ts +17 -0
  160. package/dist/release/snapshot/program-evidence.js +39 -0
  161. package/dist/release/snapshot/quran-evidence.d.ts +27 -0
  162. package/dist/release/snapshot/quran-evidence.js +43 -0
  163. package/dist/release/snapshot/scope.d.ts +60 -0
  164. package/dist/release/snapshot/scope.js +102 -0
  165. package/dist/release/snapshot/spec.d.ts +193 -0
  166. package/dist/release/snapshot/spec.js +139 -0
  167. package/dist/release/snapshot/tryout-evidence.d.ts +22 -0
  168. package/dist/release/snapshot/tryout-evidence.js +86 -0
  169. package/dist/release/snapshot/verify.d.ts +710 -0
  170. package/dist/release/snapshot/verify.js +147 -0
  171. package/dist/release/spec.d.ts +491 -0
  172. package/dist/release/spec.js +200 -0
  173. package/dist/release/verify.d.ts +98 -0
  174. package/dist/release/verify.js +70 -0
  175. package/dist/renderer/compatibility.d.ts +35 -0
  176. package/dist/renderer/compatibility.js +48 -0
  177. package/dist/renderer/component.d.ts +99 -0
  178. package/dist/renderer/component.js +102 -0
  179. package/dist/renderer/contract.d.ts +144 -0
  180. package/dist/renderer/contract.js +122 -0
  181. package/dist/renderer/domain.d.ts +6 -0
  182. package/dist/renderer/domain.js +18 -0
  183. package/dist/renderer/manifest.d.ts +86 -0
  184. package/dist/renderer/manifest.js +49 -0
  185. package/dist/renderer/selection.d.ts +39 -0
  186. package/dist/renderer/selection.js +87 -0
  187. package/dist/runtime/error.d.ts +8 -0
  188. package/dist/runtime/error.js +20 -0
  189. package/dist/runtime/protected/limits.d.ts +10 -0
  190. package/dist/runtime/protected/limits.js +15 -0
  191. package/dist/runtime/protected/spec.d.ts +328 -0
  192. package/dist/runtime/protected/spec.js +79 -0
  193. package/dist/runtime/protected/verify.d.ts +97 -0
  194. package/dist/runtime/protected/verify.js +72 -0
  195. package/dist/runtime/result.d.ts +12 -0
  196. package/dist/runtime/result.js +17 -0
  197. package/dist/runtime/spec.d.ts +705 -0
  198. package/dist/runtime/spec.js +61 -0
  199. package/dist/runtime/verify.d.ts +479 -0
  200. package/dist/runtime/verify.js +123 -0
  201. package/dist/signature/spec.d.ts +53 -0
  202. package/dist/signature/spec.js +29 -0
  203. package/dist/signature/trusted.d.ts +19 -0
  204. package/dist/signature/trusted.js +32 -0
  205. package/dist/signature/verify.d.ts +10 -0
  206. package/dist/signature/verify.js +82 -0
  207. package/dist/text/order.d.ts +2 -0
  208. package/dist/text/order.js +10 -0
  209. package/dist/text/syntax.d.ts +6 -0
  210. package/dist/text/syntax.js +15 -0
  211. package/dist/transport/batch.d.ts +971 -0
  212. package/dist/transport/batch.js +101 -0
  213. package/dist/transport/failure.d.ts +168 -0
  214. package/dist/transport/failure.js +194 -0
  215. package/dist/transport/group.d.ts +2946 -0
  216. package/dist/transport/group.js +47 -0
  217. package/dist/transport/limits.d.ts +30 -0
  218. package/dist/transport/limits.js +30 -0
  219. package/dist/transport/request.d.ts +9333 -0
  220. package/dist/transport/request.js +121 -0
  221. package/dist/transport/response.d.ts +6247 -0
  222. package/dist/transport/response.js +181 -0
  223. package/dist/transport/runtime.d.ts +77 -0
  224. package/dist/transport/runtime.js +33 -0
  225. package/dist/transport/snapshot.d.ts +978 -0
  226. package/dist/transport/snapshot.js +70 -0
  227. package/dist/tryout/canonical.d.ts +2 -0
  228. package/dist/tryout/canonical.js +11 -0
  229. package/dist/tryout/catalog-hash.d.ts +134 -0
  230. package/dist/tryout/catalog-hash.js +203 -0
  231. package/dist/tryout/catalog.d.ts +376 -0
  232. package/dist/tryout/catalog.js +147 -0
  233. package/dist/tryout/content-hash.d.ts +89 -0
  234. package/dist/tryout/content-hash.js +72 -0
  235. package/dist/tryout/identity.d.ts +12 -0
  236. package/dist/tryout/identity.js +46 -0
  237. package/dist/tryout/key.d.ts +4 -0
  238. package/dist/tryout/key.js +8 -0
  239. package/dist/tryout/language.d.ts +24 -0
  240. package/dist/tryout/language.js +32 -0
  241. package/dist/tryout/locale-closure.d.ts +20 -0
  242. package/dist/tryout/locale-closure.js +164 -0
  243. package/dist/tryout/placement-closure.d.ts +5 -0
  244. package/dist/tryout/placement-closure.js +30 -0
  245. package/dist/tryout/placement-hash.d.ts +11 -0
  246. package/dist/tryout/placement-hash.js +55 -0
  247. package/dist/tryout/placement.d.ts +280 -0
  248. package/dist/tryout/placement.js +82 -0
  249. package/dist/tryout/row-hash.d.ts +28 -0
  250. package/dist/tryout/row-hash.js +50 -0
  251. package/dist/tryout/runtime/canonical.d.ts +8 -0
  252. package/dist/tryout/runtime/canonical.js +33 -0
  253. package/dist/tryout/runtime/hash.d.ts +32 -0
  254. package/dist/tryout/runtime/hash.js +11 -0
  255. package/dist/tryout/runtime/source.d.ts +42 -0
  256. package/dist/tryout/runtime/source.js +47 -0
  257. package/dist/tryout/runtime/spec.d.ts +58 -0
  258. package/dist/tryout/runtime/spec.js +21 -0
  259. package/dist/tryout/runtime/verify.d.ts +61 -0
  260. package/dist/tryout/runtime/verify.js +69 -0
  261. package/dist/tryout/snapshot/canonical.d.ts +7 -0
  262. package/dist/tryout/snapshot/canonical.js +17 -0
  263. package/dist/tryout/snapshot/hash.d.ts +8 -0
  264. package/dist/tryout/snapshot/hash.js +19 -0
  265. package/dist/tryout/snapshot/spec.d.ts +46 -0
  266. package/dist/tryout/snapshot/spec.js +30 -0
  267. package/dist/tryout/spec.d.ts +13 -0
  268. package/dist/tryout/spec.js +15 -0
  269. package/package.json +506 -0
@@ -0,0 +1,61 @@
1
+ import { Effect, Schema } from "effect";
2
+ import { SignedContentArtifactSchema, } from "#contracts/content";
3
+ import { decodeContract } from "#contracts/decode";
4
+ import { CorpusSourcePathSchema, PublicPathSchema, ReleaseIdSchema, Sha256HashSchema, } from "#contracts/ids";
5
+ import { AppLocaleSchema } from "#contracts/locale";
6
+ import { RoutedContentProjectionSchema, } from "#contracts/projection/spec";
7
+ import { SignedContentReleaseSchema } from "#contracts/release/spec";
8
+ import { RendererManifestEnvelopeSchema } from "#contracts/renderer/contract";
9
+ import { ContentRuntimeFailureSchema, ContentRuntimeMissingSchema, } from "#contracts/runtime/result";
10
+ /** Maximum UTF-8 bytes accepted by the server-only runtime endpoint. */
11
+ export const MAX_PUBLIC_RUNTIME_REQUEST_BYTES = 4 * 1024;
12
+ /** Maximum UTF-8 bytes returned by the server-only runtime endpoint. */
13
+ export const MAX_PUBLIC_RUNTIME_RESPONSE_BYTES = 1024 * 1024;
14
+ /** Exact public route requested by the Nakafa server runtime. */
15
+ export const PublicContentRuntimeRequestSchema = Schema.Struct({
16
+ appLocale: AppLocaleSchema,
17
+ delivery: Schema.Literal("public"),
18
+ publicPath: PublicPathSchema,
19
+ });
20
+ /** Confirms one runtime artifact and projection describe the same document. */
21
+ function hasCoherentContent(input) {
22
+ const { payload } = input.artifact;
23
+ return (payload.contentKey === input.projection.contentKey &&
24
+ String(payload.artifactLocale) === String(input.projection.appLocale));
25
+ }
26
+ /**
27
+ * Server-only content selected by trusted Convex publication state.
28
+ *
29
+ * The signed release, renderer, and artifact are authenticated independently.
30
+ * Public route and head membership or protected snapshot membership remain
31
+ * target authority. This envelope is deliberately not a cryptographic
32
+ * inclusion proof.
33
+ */
34
+ const PublicContentRuntimeFoundFields = {
35
+ artifact: SignedContentArtifactSchema,
36
+ kind: Schema.Literal("found"),
37
+ release: SignedContentReleaseSchema,
38
+ rendererManifest: RendererManifestEnvelopeSchema,
39
+ sourcePath: CorpusSourcePathSchema,
40
+ };
41
+ /** Public route body selected from the active indexed read model. */
42
+ export const PublicContentRuntimeFoundSchema = Schema.Struct({
43
+ ...PublicContentRuntimeFoundFields,
44
+ activeManifestHash: Sha256HashSchema,
45
+ activeReleaseId: ReleaseIdSchema,
46
+ delivery: Schema.Literal("public"),
47
+ projection: RoutedContentProjectionSchema,
48
+ projectionHash: Sha256HashSchema,
49
+ }).pipe(Schema.check(Schema.makeFilter(hasCoherentContent, {
50
+ message: "Expected the runtime artifact and projection to share one identity.",
51
+ })));
52
+ /** Complete response vocabulary for the public server-runtime seam. */
53
+ export const PublicContentRuntimeResponseSchema = Schema.Union([
54
+ PublicContentRuntimeFoundSchema,
55
+ ContentRuntimeMissingSchema,
56
+ ContentRuntimeFailureSchema,
57
+ ]);
58
+ /** Strictly decodes one unknown public server-runtime request. */
59
+ export const decodePublicContentRuntimeRequest = Effect.fn("AksaraContracts.decodePublicContentRuntimeRequest")((input) => decodeContract(PublicContentRuntimeRequestSchema, "PublicContentRuntimeRequest", input));
60
+ /** Strictly decodes one unknown public server-runtime response. */
61
+ export const decodePublicContentRuntimeResponse = Effect.fn("AksaraContracts.decodePublicContentRuntimeResponse")((input) => decodeContract(PublicContentRuntimeResponseSchema, "PublicContentRuntimeResponse", input));
@@ -0,0 +1,479 @@
1
+ import { Effect } from "effect";
2
+ import { ContentRuntimeMismatchError } from "#contracts/runtime/error";
3
+ /**
4
+ * Authenticates independently signed runtime evidence for one exact request.
5
+ *
6
+ * This capability does not claim that a non-rendering consumer can execute the
7
+ * artifact with a live renderer.
8
+ */
9
+ export declare const verifyContentRuntimeEvidenceExchange: (input: {
10
+ readonly request: unknown;
11
+ readonly response: unknown;
12
+ }) => Effect.Effect<{
13
+ readonly artifact: {
14
+ readonly artifactHash: string & import("effect/Brand").Brand<"@NakafaAI/AksaraSha256Hash">;
15
+ readonly keyId: string & import("effect/Brand").Brand<"@NakafaAI/AksaraSigningKeyId">;
16
+ readonly payload: {
17
+ readonly artifactLocale: ("de" | "en" | "id") & import("effect/Brand").Brand<"@NakafaAI/AksaraArtifactLocale">;
18
+ readonly byteLength: number;
19
+ readonly compiledCode: string;
20
+ readonly compilerConfigHash: string & import("effect/Brand").Brand<"@NakafaAI/AksaraSha256Hash">;
21
+ readonly compilerVersion: "0.1.0";
22
+ readonly contentKey: string & import("effect/Brand").Brand<"@NakafaAI/AksaraContentKey">;
23
+ readonly format: "mdx-function-body";
24
+ readonly mdxCompilerVersion: "3.1.1";
25
+ readonly plainText: string;
26
+ readonly rawMdx: string;
27
+ readonly rendererDomain: "ai-ds" | "biology" | "chemistry" | "mathematics" | "physics" | "politics" | "site" | "snbt-general" | "snbt-math" | "snbt-plain" | "snbt-quant" | "tka-math";
28
+ readonly requiredComponents: readonly {
29
+ readonly name: string;
30
+ readonly version: number;
31
+ }[];
32
+ readonly sourceHash: string & import("effect/Brand").Brand<"@NakafaAI/AksaraSha256Hash">;
33
+ };
34
+ readonly signature: string & import("effect/Brand").Brand<"@NakafaAI/AksaraEd25519Signature">;
35
+ };
36
+ readonly kind: "found";
37
+ readonly release: {
38
+ readonly keyId: string & import("effect/Brand").Brand<"@NakafaAI/AksaraSigningKeyId">;
39
+ readonly manifest: {
40
+ readonly baseActiveAppLocales: readonly [("de" | "en" | "id") & import("effect/Brand").Brand<"@NakafaAI/AksaraAppLocale">, ...(("de" | "en" | "id") & import("effect/Brand").Brand<"@NakafaAI/AksaraAppLocale">)[]] | null;
41
+ readonly baseManifestHash: (string & import("effect/Brand").Brand<"@NakafaAI/AksaraSha256Hash">) | null;
42
+ readonly baseReleaseId: (string & import("effect/Brand").Brand<"@NakafaAI/AksaraReleaseId">) | null;
43
+ readonly baseResultCount: number;
44
+ readonly baseResultDigest: string & import("effect/Brand").Brand<"@NakafaAI/AksaraSha256Hash">;
45
+ readonly deleteCount: number;
46
+ readonly itemCount: number;
47
+ readonly itemsDigest: string & import("effect/Brand").Brand<"@NakafaAI/AksaraSha256Hash">;
48
+ readonly origin: {
49
+ readonly kind: "git";
50
+ readonly sha: string & import("effect/Brand").Brand<"@NakafaAI/AksaraGitCommitSha">;
51
+ } | {
52
+ readonly kind: "rollback";
53
+ readonly releaseId: string & import("effect/Brand").Brand<"@NakafaAI/AksaraReleaseId">;
54
+ };
55
+ readonly projectionCount: number;
56
+ readonly projectionDigest: string & import("effect/Brand").Brand<"@NakafaAI/AksaraSha256Hash">;
57
+ readonly releaseId: string & import("effect/Brand").Brand<"@NakafaAI/AksaraReleaseId">;
58
+ readonly rendererContractVersion: "1.0.0";
59
+ readonly rendererManifestHash: string & import("effect/Brand").Brand<"@NakafaAI/AksaraSha256Hash">;
60
+ readonly resultCount: number;
61
+ readonly resultDigest: string & import("effect/Brand").Brand<"@NakafaAI/AksaraSha256Hash">;
62
+ readonly rollbackCount: number;
63
+ readonly rollbackDigest: string & import("effect/Brand").Brand<"@NakafaAI/AksaraSha256Hash">;
64
+ readonly routeCount: number;
65
+ readonly routeDigest: string & import("effect/Brand").Brand<"@NakafaAI/AksaraSha256Hash">;
66
+ readonly scope: {
67
+ readonly content?: readonly {
68
+ readonly artifactLocale: ("de" | "en" | "id") & import("effect/Brand").Brand<"@NakafaAI/AksaraArtifactLocale">;
69
+ readonly contentKey: string & import("effect/Brand").Brand<"@NakafaAI/AksaraContentKey">;
70
+ readonly family: "article" | "material" | "page" | "question";
71
+ }[] | undefined;
72
+ readonly families: readonly ("article" | "material" | "page" | "question")[];
73
+ readonly snapshots: readonly ("program" | "quran" | "tryout")[];
74
+ };
75
+ readonly snapshots: {
76
+ readonly program: {
77
+ readonly baseSnapshotId: (string & import("effect/Brand").Brand<"@NakafaAI/AksaraSha256Hash">) | null;
78
+ readonly mode: "inherit" | "replace" | "restore";
79
+ readonly resultSnapshotId: (string & import("effect/Brand").Brand<"@NakafaAI/AksaraSha256Hash">) | null;
80
+ readonly rowCount: number;
81
+ readonly rowDigest: string & import("effect/Brand").Brand<"@NakafaAI/AksaraSha256Hash">;
82
+ };
83
+ readonly quran: {
84
+ readonly baseSnapshotId: (string & import("effect/Brand").Brand<"@NakafaAI/AksaraSha256Hash">) | null;
85
+ readonly mode: "inherit" | "replace" | "restore";
86
+ readonly resultSnapshotId: (string & import("effect/Brand").Brand<"@NakafaAI/AksaraSha256Hash">) | null;
87
+ readonly rowCount: number;
88
+ readonly rowDigest: string & import("effect/Brand").Brand<"@NakafaAI/AksaraSha256Hash">;
89
+ };
90
+ readonly tryout: {
91
+ readonly baseSnapshotId: (string & import("effect/Brand").Brand<"@NakafaAI/AksaraSha256Hash">) | null;
92
+ readonly mode: "inherit" | "replace" | "restore";
93
+ readonly resultSnapshotId: (string & import("effect/Brand").Brand<"@NakafaAI/AksaraSha256Hash">) | null;
94
+ readonly rowCount: number;
95
+ readonly rowDigest: string & import("effect/Brand").Brand<"@NakafaAI/AksaraSha256Hash">;
96
+ };
97
+ };
98
+ readonly upsertCount: number;
99
+ readonly activeAppLocales: readonly [("de" | "en" | "id") & import("effect/Brand").Brand<"@NakafaAI/AksaraAppLocale">, ...(("de" | "en" | "id") & import("effect/Brand").Brand<"@NakafaAI/AksaraAppLocale">)[]];
100
+ readonly format: "localized-content-release";
101
+ };
102
+ readonly manifestHash: string & import("effect/Brand").Brand<"@NakafaAI/AksaraSha256Hash">;
103
+ readonly signature: string & import("effect/Brand").Brand<"@NakafaAI/AksaraEd25519Signature">;
104
+ };
105
+ readonly rendererManifest: {
106
+ readonly base: {
107
+ readonly authoringComponents: readonly {
108
+ readonly name: string;
109
+ readonly version: number;
110
+ }[];
111
+ readonly supportedComponents: readonly {
112
+ readonly name: string;
113
+ readonly version: number;
114
+ }[];
115
+ };
116
+ readonly domains: readonly {
117
+ readonly authoringComponents: readonly {
118
+ readonly name: string;
119
+ readonly version: number;
120
+ }[];
121
+ readonly name: "ai-ds" | "biology" | "chemistry" | "mathematics" | "physics" | "politics" | "site" | "snbt-general" | "snbt-math" | "snbt-plain" | "snbt-quant" | "tka-math";
122
+ readonly supportedComponents: readonly {
123
+ readonly name: string;
124
+ readonly version: number;
125
+ }[];
126
+ }[];
127
+ readonly format: "nakafa-mdx-renderer-v1";
128
+ readonly hash: string & import("effect/Brand").Brand<"@NakafaAI/AksaraSha256Hash">;
129
+ readonly publishedDomains: readonly ("ai-ds" | "biology" | "chemistry" | "mathematics" | "physics" | "politics" | "site" | "snbt-general" | "snbt-math" | "snbt-plain" | "snbt-quant" | "tka-math")[];
130
+ readonly rendererContractVersion: "1.0.0";
131
+ };
132
+ readonly sourcePath: string & import("effect/Brand").Brand<"@NakafaAI/AksaraCorpusSourcePath">;
133
+ readonly activeManifestHash: string & import("effect/Brand").Brand<"@NakafaAI/AksaraSha256Hash">;
134
+ readonly activeReleaseId: string & import("effect/Brand").Brand<"@NakafaAI/AksaraReleaseId">;
135
+ readonly delivery: "public";
136
+ readonly projection: {
137
+ readonly appLocale: ("de" | "en" | "id") & import("effect/Brand").Brand<"@NakafaAI/AksaraAppLocale">;
138
+ readonly artifactLocale: ("de" | "en" | "id") & import("effect/Brand").Brand<"@NakafaAI/AksaraArtifactLocale">;
139
+ readonly contentKey: string & import("effect/Brand").Brand<"@NakafaAI/AksaraContentKey">;
140
+ readonly pageKey: string & import("effect/Brand").Brand<"@NakafaAI/AksaraPageKey">;
141
+ readonly publicPath: string & import("effect/Brand").Brand<"@NakafaAI/AksaraPublicPath">;
142
+ readonly kind: "public-page";
143
+ readonly metadata: {
144
+ readonly dateModified?: string;
145
+ readonly datePublished: string;
146
+ readonly description: string;
147
+ readonly title: string;
148
+ };
149
+ readonly sitemap: true;
150
+ readonly sourcePath: string & import("effect/Brand").Brand<"@NakafaAI/AksaraCorpusSourcePath">;
151
+ } | {
152
+ readonly appLocale: ("de" | "en" | "id") & import("effect/Brand").Brand<"@NakafaAI/AksaraAppLocale">;
153
+ readonly artifactLocale: ("de" | "en" | "id") & import("effect/Brand").Brand<"@NakafaAI/AksaraArtifactLocale">;
154
+ readonly contentKey: string & import("effect/Brand").Brand<"@NakafaAI/AksaraContentKey">;
155
+ readonly pageKey: string & import("effect/Brand").Brand<"@NakafaAI/AksaraPageKey">;
156
+ readonly publicPath: string & import("effect/Brand").Brand<"@NakafaAI/AksaraPublicPath">;
157
+ readonly kind: "public-page";
158
+ readonly metadata: {
159
+ readonly description: string;
160
+ readonly lastModified: string;
161
+ readonly title: string;
162
+ };
163
+ readonly sitemap: true;
164
+ readonly sourcePath: string & import("effect/Brand").Brand<"@NakafaAI/AksaraCorpusSourcePath">;
165
+ } | {
166
+ readonly appLocale: ("de" | "en" | "id") & import("effect/Brand").Brand<"@NakafaAI/AksaraAppLocale">;
167
+ readonly articleRouteSlug: string & import("effect/Brand").Brand<"@NakafaAI/AksaraArticleRouteSlug">;
168
+ readonly articleSlug: string & import("effect/Brand").Brand<"@NakafaAI/AksaraArticleSlug">;
169
+ readonly artifactLocale: ("de" | "en" | "id") & import("effect/Brand").Brand<"@NakafaAI/AksaraArtifactLocale">;
170
+ readonly category: string & import("effect/Brand").Brand<"@NakafaAI/AksaraArticleCategory">;
171
+ readonly categoryRouteSlug: string & import("effect/Brand").Brand<"@NakafaAI/AksaraArticleRouteSlug">;
172
+ readonly contentKey: string & import("effect/Brand").Brand<"@NakafaAI/AksaraContentKey">;
173
+ readonly graph: {
174
+ readonly alignmentId: string;
175
+ readonly assetId: string;
176
+ readonly conceptId: string;
177
+ readonly learningObjectId: string;
178
+ readonly lensId: string;
179
+ };
180
+ readonly publicPath: string & import("effect/Brand").Brand<"@NakafaAI/AksaraPublicPath">;
181
+ readonly categoryTitle: string;
182
+ readonly kind: "article";
183
+ readonly metadata: {
184
+ readonly dateModified?: string;
185
+ readonly datePublished: string;
186
+ readonly authors: readonly {
187
+ readonly name: string;
188
+ }[];
189
+ readonly description?: string | undefined;
190
+ readonly title: string;
191
+ };
192
+ readonly official: boolean;
193
+ readonly parentPath: string & import("effect/Brand").Brand<"@NakafaAI/AksaraPublicPath">;
194
+ readonly references: readonly {
195
+ readonly authors: string;
196
+ readonly citation?: string | undefined;
197
+ readonly details?: string | undefined;
198
+ readonly publication?: string | undefined;
199
+ readonly title: string;
200
+ readonly url?: string | undefined;
201
+ readonly year: number;
202
+ }[];
203
+ readonly sitemap: true;
204
+ } | {
205
+ readonly appLocale: ("de" | "en" | "id") & import("effect/Brand").Brand<"@NakafaAI/AksaraAppLocale">;
206
+ readonly artifactLocale: ("de" | "en" | "id") & import("effect/Brand").Brand<"@NakafaAI/AksaraArtifactLocale">;
207
+ readonly contentKey: string & import("effect/Brand").Brand<"@NakafaAI/AksaraContentKey">;
208
+ readonly graph: {
209
+ readonly alignmentId: string;
210
+ readonly assetId: string;
211
+ readonly conceptId: string;
212
+ readonly learningObjectId: string;
213
+ readonly lensId: string;
214
+ };
215
+ readonly materialKey: string & import("effect/Brand").Brand<"@NakafaAI/AksaraMaterialKey">;
216
+ readonly order: number;
217
+ readonly publicPath: string & import("effect/Brand").Brand<"@NakafaAI/AksaraPublicPath">;
218
+ readonly sectionKey: string & import("effect/Brand").Brand<"@NakafaAI/AksaraMaterialSection">;
219
+ readonly kind: "subject-lesson";
220
+ readonly metadata: {
221
+ readonly dateModified?: string;
222
+ readonly datePublished: string;
223
+ readonly authors: readonly {
224
+ readonly name: string;
225
+ }[];
226
+ readonly description?: string | undefined;
227
+ readonly subject?: string | undefined;
228
+ readonly title: string;
229
+ };
230
+ readonly parentPath: string & import("effect/Brand").Brand<"@NakafaAI/AksaraPublicPath">;
231
+ readonly sitemap: true;
232
+ readonly topicTitle: string;
233
+ };
234
+ readonly projectionHash: string & import("effect/Brand").Brand<"@NakafaAI/AksaraSha256Hash">;
235
+ } | {
236
+ readonly kind: "missing";
237
+ } | {
238
+ readonly code: "CONTENT_RUNTIME_INTERNAL" | "CONTENT_RUNTIME_INVALID" | "CONTENT_RUNTIME_RESPONSE_TOO_LARGE" | "CONTENT_RUNTIME_UNAUTHORIZED";
239
+ readonly kind: "failure";
240
+ }, import("../artifact/spec.js").ArtifactCompiledByteLengthMismatchError | import("../artifact/spec.js").ArtifactHashComputationError | import("../artifact/spec.js").ArtifactHashMismatchError | import("../artifact/spec.js").ArtifactPayloadFieldByteLimitError | import("../artifact/spec.js").ArtifactRendererComponentMissingError | import("../artifact/spec.js").ArtifactRendererDomainUnpublishedError | import("../artifact/spec.js").ArtifactRendererVersionUnsupportedError | import("../artifact/spec.js").ArtifactSourceHashComputationError | import("../artifact/spec.js").ArtifactSourceHashMismatchError | import("../artifact/spec.js").ArtifactVerificationByteLimitError | import("../artifact/spec.js").ArtifactVerificationDecodeError | ContentRuntimeMismatchError | import("../errors.js").ContractDecodeError | import("../signature/spec.js").PublicKeyParseError | import("../signature/spec.js").PublicKeyTypeError | import("#contracts/release/verify").ReleaseBundleVerificationDecodeError | import("../release/hash.js").ReleaseHashComputationError | import("#contracts/release/verify").ReleaseManifestHashMismatchError | import("#contracts/release/verify").ReleaseVerificationDecodeError | import("../renderer/component.js").RendererAuthoringComponentDuplicateError | import("../renderer/component.js").RendererAuthoringComponentExtraError | import("../renderer/component.js").RendererAuthoringComponentMissingError | import("../renderer/component.js").RendererAuthoringComponentUnsupportedError | import("../renderer/component.js").RendererAuthoringSelectionNonCanonicalError | import("../artifact/spec.js").RendererContractVersionMismatchError | import("../renderer/contract.js").RendererDomainCapabilityMissingError | import("../renderer/contract.js").RendererManifestHashComputeError | import("../renderer/contract.js").RendererManifestHashMismatchError | import("../signature/spec.js").SignatureCheckError | import("../signature/spec.js").SignatureInvalidError | import("../signature/spec.js").SigningKeyNotFoundError | import("../signature/spec.js").SigningKeyResolutionError, import("../signature/spec.js").ContentVerificationKeyResolver>;
241
+ /**
242
+ * Verifies independently signed runtime values selected for one exact request.
243
+ *
244
+ * Active catalog membership is trusted authenticated target state as recorded
245
+ * in ADR 0002, not an artifact property inferred from the release digest.
246
+ */
247
+ export declare const verifyContentRuntimeExchange: (input: {
248
+ readonly rendererManifest: unknown;
249
+ readonly request: unknown;
250
+ readonly response: unknown;
251
+ }) => Effect.Effect<{
252
+ readonly artifact: {
253
+ readonly artifactHash: string & import("effect/Brand").Brand<"@NakafaAI/AksaraSha256Hash">;
254
+ readonly keyId: string & import("effect/Brand").Brand<"@NakafaAI/AksaraSigningKeyId">;
255
+ readonly payload: {
256
+ readonly artifactLocale: ("de" | "en" | "id") & import("effect/Brand").Brand<"@NakafaAI/AksaraArtifactLocale">;
257
+ readonly byteLength: number;
258
+ readonly compiledCode: string;
259
+ readonly compilerConfigHash: string & import("effect/Brand").Brand<"@NakafaAI/AksaraSha256Hash">;
260
+ readonly compilerVersion: "0.1.0";
261
+ readonly contentKey: string & import("effect/Brand").Brand<"@NakafaAI/AksaraContentKey">;
262
+ readonly format: "mdx-function-body";
263
+ readonly mdxCompilerVersion: "3.1.1";
264
+ readonly plainText: string;
265
+ readonly rawMdx: string;
266
+ readonly rendererDomain: "ai-ds" | "biology" | "chemistry" | "mathematics" | "physics" | "politics" | "site" | "snbt-general" | "snbt-math" | "snbt-plain" | "snbt-quant" | "tka-math";
267
+ readonly requiredComponents: readonly {
268
+ readonly name: string;
269
+ readonly version: number;
270
+ }[];
271
+ readonly sourceHash: string & import("effect/Brand").Brand<"@NakafaAI/AksaraSha256Hash">;
272
+ };
273
+ readonly signature: string & import("effect/Brand").Brand<"@NakafaAI/AksaraEd25519Signature">;
274
+ };
275
+ readonly kind: "found";
276
+ readonly release: {
277
+ readonly keyId: string & import("effect/Brand").Brand<"@NakafaAI/AksaraSigningKeyId">;
278
+ readonly manifest: {
279
+ readonly baseActiveAppLocales: readonly [("de" | "en" | "id") & import("effect/Brand").Brand<"@NakafaAI/AksaraAppLocale">, ...(("de" | "en" | "id") & import("effect/Brand").Brand<"@NakafaAI/AksaraAppLocale">)[]] | null;
280
+ readonly baseManifestHash: (string & import("effect/Brand").Brand<"@NakafaAI/AksaraSha256Hash">) | null;
281
+ readonly baseReleaseId: (string & import("effect/Brand").Brand<"@NakafaAI/AksaraReleaseId">) | null;
282
+ readonly baseResultCount: number;
283
+ readonly baseResultDigest: string & import("effect/Brand").Brand<"@NakafaAI/AksaraSha256Hash">;
284
+ readonly deleteCount: number;
285
+ readonly itemCount: number;
286
+ readonly itemsDigest: string & import("effect/Brand").Brand<"@NakafaAI/AksaraSha256Hash">;
287
+ readonly origin: {
288
+ readonly kind: "git";
289
+ readonly sha: string & import("effect/Brand").Brand<"@NakafaAI/AksaraGitCommitSha">;
290
+ } | {
291
+ readonly kind: "rollback";
292
+ readonly releaseId: string & import("effect/Brand").Brand<"@NakafaAI/AksaraReleaseId">;
293
+ };
294
+ readonly projectionCount: number;
295
+ readonly projectionDigest: string & import("effect/Brand").Brand<"@NakafaAI/AksaraSha256Hash">;
296
+ readonly releaseId: string & import("effect/Brand").Brand<"@NakafaAI/AksaraReleaseId">;
297
+ readonly rendererContractVersion: "1.0.0";
298
+ readonly rendererManifestHash: string & import("effect/Brand").Brand<"@NakafaAI/AksaraSha256Hash">;
299
+ readonly resultCount: number;
300
+ readonly resultDigest: string & import("effect/Brand").Brand<"@NakafaAI/AksaraSha256Hash">;
301
+ readonly rollbackCount: number;
302
+ readonly rollbackDigest: string & import("effect/Brand").Brand<"@NakafaAI/AksaraSha256Hash">;
303
+ readonly routeCount: number;
304
+ readonly routeDigest: string & import("effect/Brand").Brand<"@NakafaAI/AksaraSha256Hash">;
305
+ readonly scope: {
306
+ readonly content?: readonly {
307
+ readonly artifactLocale: ("de" | "en" | "id") & import("effect/Brand").Brand<"@NakafaAI/AksaraArtifactLocale">;
308
+ readonly contentKey: string & import("effect/Brand").Brand<"@NakafaAI/AksaraContentKey">;
309
+ readonly family: "article" | "material" | "page" | "question";
310
+ }[] | undefined;
311
+ readonly families: readonly ("article" | "material" | "page" | "question")[];
312
+ readonly snapshots: readonly ("program" | "quran" | "tryout")[];
313
+ };
314
+ readonly snapshots: {
315
+ readonly program: {
316
+ readonly baseSnapshotId: (string & import("effect/Brand").Brand<"@NakafaAI/AksaraSha256Hash">) | null;
317
+ readonly mode: "inherit" | "replace" | "restore";
318
+ readonly resultSnapshotId: (string & import("effect/Brand").Brand<"@NakafaAI/AksaraSha256Hash">) | null;
319
+ readonly rowCount: number;
320
+ readonly rowDigest: string & import("effect/Brand").Brand<"@NakafaAI/AksaraSha256Hash">;
321
+ };
322
+ readonly quran: {
323
+ readonly baseSnapshotId: (string & import("effect/Brand").Brand<"@NakafaAI/AksaraSha256Hash">) | null;
324
+ readonly mode: "inherit" | "replace" | "restore";
325
+ readonly resultSnapshotId: (string & import("effect/Brand").Brand<"@NakafaAI/AksaraSha256Hash">) | null;
326
+ readonly rowCount: number;
327
+ readonly rowDigest: string & import("effect/Brand").Brand<"@NakafaAI/AksaraSha256Hash">;
328
+ };
329
+ readonly tryout: {
330
+ readonly baseSnapshotId: (string & import("effect/Brand").Brand<"@NakafaAI/AksaraSha256Hash">) | null;
331
+ readonly mode: "inherit" | "replace" | "restore";
332
+ readonly resultSnapshotId: (string & import("effect/Brand").Brand<"@NakafaAI/AksaraSha256Hash">) | null;
333
+ readonly rowCount: number;
334
+ readonly rowDigest: string & import("effect/Brand").Brand<"@NakafaAI/AksaraSha256Hash">;
335
+ };
336
+ };
337
+ readonly upsertCount: number;
338
+ readonly activeAppLocales: readonly [("de" | "en" | "id") & import("effect/Brand").Brand<"@NakafaAI/AksaraAppLocale">, ...(("de" | "en" | "id") & import("effect/Brand").Brand<"@NakafaAI/AksaraAppLocale">)[]];
339
+ readonly format: "localized-content-release";
340
+ };
341
+ readonly manifestHash: string & import("effect/Brand").Brand<"@NakafaAI/AksaraSha256Hash">;
342
+ readonly signature: string & import("effect/Brand").Brand<"@NakafaAI/AksaraEd25519Signature">;
343
+ };
344
+ readonly rendererManifest: {
345
+ readonly base: {
346
+ readonly authoringComponents: readonly {
347
+ readonly name: string;
348
+ readonly version: number;
349
+ }[];
350
+ readonly supportedComponents: readonly {
351
+ readonly name: string;
352
+ readonly version: number;
353
+ }[];
354
+ };
355
+ readonly domains: readonly {
356
+ readonly authoringComponents: readonly {
357
+ readonly name: string;
358
+ readonly version: number;
359
+ }[];
360
+ readonly name: "ai-ds" | "biology" | "chemistry" | "mathematics" | "physics" | "politics" | "site" | "snbt-general" | "snbt-math" | "snbt-plain" | "snbt-quant" | "tka-math";
361
+ readonly supportedComponents: readonly {
362
+ readonly name: string;
363
+ readonly version: number;
364
+ }[];
365
+ }[];
366
+ readonly format: "nakafa-mdx-renderer-v1";
367
+ readonly hash: string & import("effect/Brand").Brand<"@NakafaAI/AksaraSha256Hash">;
368
+ readonly publishedDomains: readonly ("ai-ds" | "biology" | "chemistry" | "mathematics" | "physics" | "politics" | "site" | "snbt-general" | "snbt-math" | "snbt-plain" | "snbt-quant" | "tka-math")[];
369
+ readonly rendererContractVersion: "1.0.0";
370
+ };
371
+ readonly sourcePath: string & import("effect/Brand").Brand<"@NakafaAI/AksaraCorpusSourcePath">;
372
+ readonly activeManifestHash: string & import("effect/Brand").Brand<"@NakafaAI/AksaraSha256Hash">;
373
+ readonly activeReleaseId: string & import("effect/Brand").Brand<"@NakafaAI/AksaraReleaseId">;
374
+ readonly delivery: "public";
375
+ readonly projection: {
376
+ readonly appLocale: ("de" | "en" | "id") & import("effect/Brand").Brand<"@NakafaAI/AksaraAppLocale">;
377
+ readonly artifactLocale: ("de" | "en" | "id") & import("effect/Brand").Brand<"@NakafaAI/AksaraArtifactLocale">;
378
+ readonly contentKey: string & import("effect/Brand").Brand<"@NakafaAI/AksaraContentKey">;
379
+ readonly pageKey: string & import("effect/Brand").Brand<"@NakafaAI/AksaraPageKey">;
380
+ readonly publicPath: string & import("effect/Brand").Brand<"@NakafaAI/AksaraPublicPath">;
381
+ readonly kind: "public-page";
382
+ readonly metadata: {
383
+ readonly dateModified?: string;
384
+ readonly datePublished: string;
385
+ readonly description: string;
386
+ readonly title: string;
387
+ };
388
+ readonly sitemap: true;
389
+ readonly sourcePath: string & import("effect/Brand").Brand<"@NakafaAI/AksaraCorpusSourcePath">;
390
+ } | {
391
+ readonly appLocale: ("de" | "en" | "id") & import("effect/Brand").Brand<"@NakafaAI/AksaraAppLocale">;
392
+ readonly artifactLocale: ("de" | "en" | "id") & import("effect/Brand").Brand<"@NakafaAI/AksaraArtifactLocale">;
393
+ readonly contentKey: string & import("effect/Brand").Brand<"@NakafaAI/AksaraContentKey">;
394
+ readonly pageKey: string & import("effect/Brand").Brand<"@NakafaAI/AksaraPageKey">;
395
+ readonly publicPath: string & import("effect/Brand").Brand<"@NakafaAI/AksaraPublicPath">;
396
+ readonly kind: "public-page";
397
+ readonly metadata: {
398
+ readonly description: string;
399
+ readonly lastModified: string;
400
+ readonly title: string;
401
+ };
402
+ readonly sitemap: true;
403
+ readonly sourcePath: string & import("effect/Brand").Brand<"@NakafaAI/AksaraCorpusSourcePath">;
404
+ } | {
405
+ readonly appLocale: ("de" | "en" | "id") & import("effect/Brand").Brand<"@NakafaAI/AksaraAppLocale">;
406
+ readonly articleRouteSlug: string & import("effect/Brand").Brand<"@NakafaAI/AksaraArticleRouteSlug">;
407
+ readonly articleSlug: string & import("effect/Brand").Brand<"@NakafaAI/AksaraArticleSlug">;
408
+ readonly artifactLocale: ("de" | "en" | "id") & import("effect/Brand").Brand<"@NakafaAI/AksaraArtifactLocale">;
409
+ readonly category: string & import("effect/Brand").Brand<"@NakafaAI/AksaraArticleCategory">;
410
+ readonly categoryRouteSlug: string & import("effect/Brand").Brand<"@NakafaAI/AksaraArticleRouteSlug">;
411
+ readonly contentKey: string & import("effect/Brand").Brand<"@NakafaAI/AksaraContentKey">;
412
+ readonly graph: {
413
+ readonly alignmentId: string;
414
+ readonly assetId: string;
415
+ readonly conceptId: string;
416
+ readonly learningObjectId: string;
417
+ readonly lensId: string;
418
+ };
419
+ readonly publicPath: string & import("effect/Brand").Brand<"@NakafaAI/AksaraPublicPath">;
420
+ readonly categoryTitle: string;
421
+ readonly kind: "article";
422
+ readonly metadata: {
423
+ readonly dateModified?: string;
424
+ readonly datePublished: string;
425
+ readonly authors: readonly {
426
+ readonly name: string;
427
+ }[];
428
+ readonly description?: string | undefined;
429
+ readonly title: string;
430
+ };
431
+ readonly official: boolean;
432
+ readonly parentPath: string & import("effect/Brand").Brand<"@NakafaAI/AksaraPublicPath">;
433
+ readonly references: readonly {
434
+ readonly authors: string;
435
+ readonly citation?: string | undefined;
436
+ readonly details?: string | undefined;
437
+ readonly publication?: string | undefined;
438
+ readonly title: string;
439
+ readonly url?: string | undefined;
440
+ readonly year: number;
441
+ }[];
442
+ readonly sitemap: true;
443
+ } | {
444
+ readonly appLocale: ("de" | "en" | "id") & import("effect/Brand").Brand<"@NakafaAI/AksaraAppLocale">;
445
+ readonly artifactLocale: ("de" | "en" | "id") & import("effect/Brand").Brand<"@NakafaAI/AksaraArtifactLocale">;
446
+ readonly contentKey: string & import("effect/Brand").Brand<"@NakafaAI/AksaraContentKey">;
447
+ readonly graph: {
448
+ readonly alignmentId: string;
449
+ readonly assetId: string;
450
+ readonly conceptId: string;
451
+ readonly learningObjectId: string;
452
+ readonly lensId: string;
453
+ };
454
+ readonly materialKey: string & import("effect/Brand").Brand<"@NakafaAI/AksaraMaterialKey">;
455
+ readonly order: number;
456
+ readonly publicPath: string & import("effect/Brand").Brand<"@NakafaAI/AksaraPublicPath">;
457
+ readonly sectionKey: string & import("effect/Brand").Brand<"@NakafaAI/AksaraMaterialSection">;
458
+ readonly kind: "subject-lesson";
459
+ readonly metadata: {
460
+ readonly dateModified?: string;
461
+ readonly datePublished: string;
462
+ readonly authors: readonly {
463
+ readonly name: string;
464
+ }[];
465
+ readonly description?: string | undefined;
466
+ readonly subject?: string | undefined;
467
+ readonly title: string;
468
+ };
469
+ readonly parentPath: string & import("effect/Brand").Brand<"@NakafaAI/AksaraPublicPath">;
470
+ readonly sitemap: true;
471
+ readonly topicTitle: string;
472
+ };
473
+ readonly projectionHash: string & import("effect/Brand").Brand<"@NakafaAI/AksaraSha256Hash">;
474
+ } | {
475
+ readonly kind: "missing";
476
+ } | {
477
+ readonly code: "CONTENT_RUNTIME_INTERNAL" | "CONTENT_RUNTIME_INVALID" | "CONTENT_RUNTIME_RESPONSE_TOO_LARGE" | "CONTENT_RUNTIME_UNAUTHORIZED";
478
+ readonly kind: "failure";
479
+ }, import("../artifact/spec.js").ArtifactCompiledByteLengthMismatchError | import("../artifact/spec.js").ArtifactHashComputationError | import("../artifact/spec.js").ArtifactHashMismatchError | import("../artifact/spec.js").ArtifactPayloadFieldByteLimitError | import("../artifact/spec.js").ArtifactRendererComponentMissingError | import("../artifact/spec.js").ArtifactRendererDomainUnpublishedError | import("../artifact/spec.js").ArtifactRendererVersionUnsupportedError | import("../artifact/spec.js").ArtifactSourceHashComputationError | import("../artifact/spec.js").ArtifactSourceHashMismatchError | import("../artifact/spec.js").ArtifactVerificationByteLimitError | import("../artifact/spec.js").ArtifactVerificationDecodeError | ContentRuntimeMismatchError | import("../errors.js").ContractDecodeError | import("../signature/spec.js").PublicKeyParseError | import("../signature/spec.js").PublicKeyTypeError | import("#contracts/release/verify").ReleaseBundleVerificationDecodeError | import("../release/hash.js").ReleaseHashComputationError | import("#contracts/release/verify").ReleaseManifestHashMismatchError | import("#contracts/release/verify").ReleaseVerificationDecodeError | import("../renderer/component.js").RendererAuthoringComponentDuplicateError | import("../renderer/component.js").RendererAuthoringComponentExtraError | import("../renderer/component.js").RendererAuthoringComponentMissingError | import("../renderer/component.js").RendererAuthoringComponentUnsupportedError | import("../renderer/component.js").RendererAuthoringSelectionNonCanonicalError | import("../artifact/spec.js").RendererContractVersionMismatchError | import("../renderer/contract.js").RendererDomainCapabilityMissingError | import("../renderer/contract.js").RendererManifestHashComputeError | import("../renderer/contract.js").RendererManifestHashMismatchError | import("../signature/spec.js").SignatureCheckError | import("../signature/spec.js").SignatureInvalidError | import("../signature/spec.js").SigningKeyNotFoundError | import("../signature/spec.js").SigningKeyResolutionError, import("../signature/spec.js").ContentVerificationKeyResolver>;