@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.
- package/LICENSE +185 -0
- package/README.md +73 -0
- package/dist/artifact/integrity.d.ts +29 -0
- package/dist/artifact/integrity.js +54 -0
- package/dist/artifact/limits.d.ts +26 -0
- package/dist/artifact/limits.js +46 -0
- package/dist/artifact/source.d.ts +21 -0
- package/dist/artifact/source.js +24 -0
- package/dist/artifact/spec.d.ts +148 -0
- package/dist/artifact/spec.js +92 -0
- package/dist/artifact/verify.d.ts +26 -0
- package/dist/artifact/verify.js +18 -0
- package/dist/cache/content.d.ts +52 -0
- package/dist/cache/content.js +80 -0
- package/dist/content.d.ts +168 -0
- package/dist/content.js +107 -0
- package/dist/country.d.ts +4 -0
- package/dist/country.js +8 -0
- package/dist/date.d.ts +24 -0
- package/dist/date.js +44 -0
- package/dist/decode.d.ts +4 -0
- package/dist/decode.js +8 -0
- package/dist/delivery.d.ts +4 -0
- package/dist/delivery.js +7 -0
- package/dist/errors.d.ts +10 -0
- package/dist/errors.js +8 -0
- package/dist/graph/family.d.ts +45 -0
- package/dist/graph/family.js +85 -0
- package/dist/graph/identity.d.ts +19 -0
- package/dist/graph/identity.js +39 -0
- package/dist/graph/spec.d.ts +20 -0
- package/dist/graph/spec.js +26 -0
- package/dist/hash/text.d.ts +10 -0
- package/dist/hash/text.js +20 -0
- package/dist/ids.d.ts +27 -0
- package/dist/ids.js +63 -0
- package/dist/limits.d.ts +10 -0
- package/dist/limits.js +10 -0
- package/dist/locale.d.ts +37 -0
- package/dist/locale.js +53 -0
- package/dist/material/domain.d.ts +4 -0
- package/dist/material/domain.js +8 -0
- package/dist/preview/artifact.d.ts +198 -0
- package/dist/preview/artifact.js +20 -0
- package/dist/preview/auth.d.ts +71 -0
- package/dist/preview/auth.js +49 -0
- package/dist/preview/document.d.ts +692 -0
- package/dist/preview/document.js +90 -0
- package/dist/preview/spec.d.ts +2517 -0
- package/dist/preview/spec.js +142 -0
- package/dist/preview/target.d.ts +172 -0
- package/dist/preview/target.js +70 -0
- package/dist/program/curriculum.d.ts +69 -0
- package/dist/program/curriculum.js +181 -0
- package/dist/program/snapshot/digest.d.ts +26 -0
- package/dist/program/snapshot/digest.js +220 -0
- package/dist/program/snapshot/hash.d.ts +31 -0
- package/dist/program/snapshot/hash.js +40 -0
- package/dist/program/snapshot/row-hash.d.ts +155 -0
- package/dist/program/snapshot/row-hash.js +34 -0
- package/dist/program/snapshot/row.d.ts +139 -0
- package/dist/program/snapshot/row.js +28 -0
- package/dist/program/snapshot/spec.d.ts +36 -0
- package/dist/program/snapshot/spec.js +39 -0
- package/dist/program/spec.d.ts +85 -0
- package/dist/program/spec.js +197 -0
- package/dist/projection/article.d.ts +145 -0
- package/dist/projection/article.js +150 -0
- package/dist/projection/digest.d.ts +261 -0
- package/dist/projection/digest.js +59 -0
- package/dist/projection/hash.d.ts +3 -0
- package/dist/projection/hash.js +10 -0
- package/dist/projection/material.d.ts +109 -0
- package/dist/projection/material.js +160 -0
- package/dist/projection/page.d.ts +112 -0
- package/dist/projection/page.js +106 -0
- package/dist/projection/question.d.ts +520 -0
- package/dist/projection/question.js +109 -0
- package/dist/projection/spec.d.ts +503 -0
- package/dist/projection/spec.js +56 -0
- package/dist/projection/verify.d.ts +281 -0
- package/dist/projection/verify.js +86 -0
- package/dist/question/identity.d.ts +175 -0
- package/dist/question/identity.js +205 -0
- package/dist/question/item.d.ts +453 -0
- package/dist/question/item.js +146 -0
- package/dist/question/response.d.ts +175 -0
- package/dist/question/response.js +150 -0
- package/dist/quran/attribution.d.ts +48 -0
- package/dist/quran/attribution.js +44 -0
- package/dist/quran/identity.d.ts +105 -0
- package/dist/quran/identity.js +100 -0
- package/dist/quran/notes.d.ts +56 -0
- package/dist/quran/notes.js +142 -0
- package/dist/quran/provenance.d.ts +257 -0
- package/dist/quran/provenance.js +144 -0
- package/dist/quran/snapshot/digest.d.ts +33 -0
- package/dist/quran/snapshot/digest.js +232 -0
- package/dist/quran/snapshot/hash.d.ts +51 -0
- package/dist/quran/snapshot/hash.js +50 -0
- package/dist/quran/snapshot/row/hash.d.ts +748 -0
- package/dist/quran/snapshot/row/hash.js +115 -0
- package/dist/quran/snapshot/row.d.ts +354 -0
- package/dist/quran/snapshot/row.js +91 -0
- package/dist/quran/snapshot/spec.d.ts +50 -0
- package/dist/quran/snapshot/spec.js +66 -0
- package/dist/quran/source.d.ts +206 -0
- package/dist/quran/source.js +153 -0
- package/dist/quran/spec.d.ts +47 -0
- package/dist/quran/spec.js +41 -0
- package/dist/quran/text.d.ts +7 -0
- package/dist/quran/text.js +11 -0
- package/dist/release/canonical.d.ts +23 -0
- package/dist/release/canonical.js +29 -0
- package/dist/release/current/evidence.d.ts +424 -0
- package/dist/release/current/evidence.js +41 -0
- package/dist/release/current/runtime.d.ts +4 -0
- package/dist/release/current/runtime.js +15 -0
- package/dist/release/current/state.d.ts +567 -0
- package/dist/release/current/state.js +91 -0
- package/dist/release/digest.d.ts +54 -0
- package/dist/release/digest.js +71 -0
- package/dist/release/hash.d.ts +72 -0
- package/dist/release/hash.js +14 -0
- package/dist/release/head.d.ts +206 -0
- package/dist/release/head.js +131 -0
- package/dist/release/items.d.ts +98 -0
- package/dist/release/items.js +114 -0
- package/dist/release/lifecycle.d.ts +297 -0
- package/dist/release/lifecycle.js +97 -0
- package/dist/release/origin.d.ts +30 -0
- package/dist/release/origin.js +24 -0
- package/dist/release/policy.d.ts +45 -0
- package/dist/release/policy.js +124 -0
- package/dist/release/result/digest.d.ts +127 -0
- package/dist/release/result/digest.js +140 -0
- package/dist/release/result/spec.d.ts +4 -0
- package/dist/release/result/spec.js +5 -0
- package/dist/release/rollback/digest.d.ts +126 -0
- package/dist/release/rollback/digest.js +92 -0
- package/dist/release/rollback/spec.d.ts +1729 -0
- package/dist/release/rollback/spec.js +156 -0
- package/dist/release/route/digest.d.ts +45 -0
- package/dist/release/route/digest.js +59 -0
- package/dist/release/route/page.d.ts +56 -0
- package/dist/release/route/page.js +46 -0
- package/dist/release/route/spec.d.ts +49 -0
- package/dist/release/route/spec.js +40 -0
- package/dist/release/route/verify.d.ts +66 -0
- package/dist/release/route/verify.js +67 -0
- package/dist/release/signing.d.ts +6 -0
- package/dist/release/signing.js +38 -0
- package/dist/release/snapshot/data.d.ts +475 -0
- package/dist/release/snapshot/data.js +74 -0
- package/dist/release/snapshot/evidence-requirement.d.ts +22 -0
- package/dist/release/snapshot/evidence-requirement.js +21 -0
- package/dist/release/snapshot/evidence.d.ts +58 -0
- package/dist/release/snapshot/evidence.js +14 -0
- package/dist/release/snapshot/program-evidence.d.ts +17 -0
- package/dist/release/snapshot/program-evidence.js +39 -0
- package/dist/release/snapshot/quran-evidence.d.ts +27 -0
- package/dist/release/snapshot/quran-evidence.js +43 -0
- package/dist/release/snapshot/scope.d.ts +60 -0
- package/dist/release/snapshot/scope.js +102 -0
- package/dist/release/snapshot/spec.d.ts +193 -0
- package/dist/release/snapshot/spec.js +139 -0
- package/dist/release/snapshot/tryout-evidence.d.ts +22 -0
- package/dist/release/snapshot/tryout-evidence.js +86 -0
- package/dist/release/snapshot/verify.d.ts +710 -0
- package/dist/release/snapshot/verify.js +147 -0
- package/dist/release/spec.d.ts +491 -0
- package/dist/release/spec.js +200 -0
- package/dist/release/verify.d.ts +98 -0
- package/dist/release/verify.js +70 -0
- package/dist/renderer/compatibility.d.ts +35 -0
- package/dist/renderer/compatibility.js +48 -0
- package/dist/renderer/component.d.ts +99 -0
- package/dist/renderer/component.js +102 -0
- package/dist/renderer/contract.d.ts +144 -0
- package/dist/renderer/contract.js +122 -0
- package/dist/renderer/domain.d.ts +6 -0
- package/dist/renderer/domain.js +18 -0
- package/dist/renderer/manifest.d.ts +86 -0
- package/dist/renderer/manifest.js +49 -0
- package/dist/renderer/selection.d.ts +39 -0
- package/dist/renderer/selection.js +87 -0
- package/dist/runtime/error.d.ts +8 -0
- package/dist/runtime/error.js +20 -0
- package/dist/runtime/protected/limits.d.ts +10 -0
- package/dist/runtime/protected/limits.js +15 -0
- package/dist/runtime/protected/spec.d.ts +328 -0
- package/dist/runtime/protected/spec.js +79 -0
- package/dist/runtime/protected/verify.d.ts +97 -0
- package/dist/runtime/protected/verify.js +72 -0
- package/dist/runtime/result.d.ts +12 -0
- package/dist/runtime/result.js +17 -0
- package/dist/runtime/spec.d.ts +705 -0
- package/dist/runtime/spec.js +61 -0
- package/dist/runtime/verify.d.ts +479 -0
- package/dist/runtime/verify.js +123 -0
- package/dist/signature/spec.d.ts +53 -0
- package/dist/signature/spec.js +29 -0
- package/dist/signature/trusted.d.ts +19 -0
- package/dist/signature/trusted.js +32 -0
- package/dist/signature/verify.d.ts +10 -0
- package/dist/signature/verify.js +82 -0
- package/dist/text/order.d.ts +2 -0
- package/dist/text/order.js +10 -0
- package/dist/text/syntax.d.ts +6 -0
- package/dist/text/syntax.js +15 -0
- package/dist/transport/batch.d.ts +971 -0
- package/dist/transport/batch.js +101 -0
- package/dist/transport/failure.d.ts +168 -0
- package/dist/transport/failure.js +194 -0
- package/dist/transport/group.d.ts +2946 -0
- package/dist/transport/group.js +47 -0
- package/dist/transport/limits.d.ts +30 -0
- package/dist/transport/limits.js +30 -0
- package/dist/transport/request.d.ts +9333 -0
- package/dist/transport/request.js +121 -0
- package/dist/transport/response.d.ts +6247 -0
- package/dist/transport/response.js +181 -0
- package/dist/transport/runtime.d.ts +77 -0
- package/dist/transport/runtime.js +33 -0
- package/dist/transport/snapshot.d.ts +978 -0
- package/dist/transport/snapshot.js +70 -0
- package/dist/tryout/canonical.d.ts +2 -0
- package/dist/tryout/canonical.js +11 -0
- package/dist/tryout/catalog-hash.d.ts +134 -0
- package/dist/tryout/catalog-hash.js +203 -0
- package/dist/tryout/catalog.d.ts +376 -0
- package/dist/tryout/catalog.js +147 -0
- package/dist/tryout/content-hash.d.ts +89 -0
- package/dist/tryout/content-hash.js +72 -0
- package/dist/tryout/identity.d.ts +12 -0
- package/dist/tryout/identity.js +46 -0
- package/dist/tryout/key.d.ts +4 -0
- package/dist/tryout/key.js +8 -0
- package/dist/tryout/language.d.ts +24 -0
- package/dist/tryout/language.js +32 -0
- package/dist/tryout/locale-closure.d.ts +20 -0
- package/dist/tryout/locale-closure.js +164 -0
- package/dist/tryout/placement-closure.d.ts +5 -0
- package/dist/tryout/placement-closure.js +30 -0
- package/dist/tryout/placement-hash.d.ts +11 -0
- package/dist/tryout/placement-hash.js +55 -0
- package/dist/tryout/placement.d.ts +280 -0
- package/dist/tryout/placement.js +82 -0
- package/dist/tryout/row-hash.d.ts +28 -0
- package/dist/tryout/row-hash.js +50 -0
- package/dist/tryout/runtime/canonical.d.ts +8 -0
- package/dist/tryout/runtime/canonical.js +33 -0
- package/dist/tryout/runtime/hash.d.ts +32 -0
- package/dist/tryout/runtime/hash.js +11 -0
- package/dist/tryout/runtime/source.d.ts +42 -0
- package/dist/tryout/runtime/source.js +47 -0
- package/dist/tryout/runtime/spec.d.ts +58 -0
- package/dist/tryout/runtime/spec.js +21 -0
- package/dist/tryout/runtime/verify.d.ts +61 -0
- package/dist/tryout/runtime/verify.js +69 -0
- package/dist/tryout/snapshot/canonical.d.ts +7 -0
- package/dist/tryout/snapshot/canonical.js +17 -0
- package/dist/tryout/snapshot/hash.d.ts +8 -0
- package/dist/tryout/snapshot/hash.js +19 -0
- package/dist/tryout/snapshot/spec.d.ts +46 -0
- package/dist/tryout/snapshot/spec.js +30 -0
- package/dist/tryout/spec.d.ts +13 -0
- package/dist/tryout/spec.js +15 -0
- package/package.json +506 -0
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
import { Effect, Schema, Stream } from "effect";
|
|
2
|
+
import { ContentSnapshotManifestSchema, ContentSnapshotRowSchema, } from "#contracts/release/snapshot/data";
|
|
3
|
+
import { verifySnapshotRows } from "#contracts/release/snapshot/evidence";
|
|
4
|
+
import { ContentSnapshotKindSchema, } from "#contracts/release/snapshot/scope";
|
|
5
|
+
import { ContentSnapshotSetSchema, inheritContentSnapshots, replaceContentSnapshot, snapshotRowCount, } from "#contracts/release/snapshot/spec";
|
|
6
|
+
import { tryoutSnapshotRowEvidence } from "#contracts/tryout/snapshot/hash";
|
|
7
|
+
const StreamIndexSchema = Schema.Int.pipe(Schema.check(Schema.isGreaterThanOrEqualTo(0)));
|
|
8
|
+
/** One replacement manifest failed strict wire decoding. */
|
|
9
|
+
export class SnapshotManifestDecodeError extends Schema.TaggedError()("SnapshotManifestDecodeError", { manifestIndex: StreamIndexSchema }) {
|
|
10
|
+
}
|
|
11
|
+
/** Replacement manifests are duplicated or outside canonical family order. */
|
|
12
|
+
export class SnapshotManifestOrderError extends Schema.TaggedError()("SnapshotManifestOrderError", {
|
|
13
|
+
actualFamily: ContentSnapshotKindSchema,
|
|
14
|
+
manifestIndex: StreamIndexSchema,
|
|
15
|
+
previousFamily: ContentSnapshotKindSchema,
|
|
16
|
+
}) {
|
|
17
|
+
}
|
|
18
|
+
/** One structured snapshot row failed strict wire decoding. */
|
|
19
|
+
export class SnapshotRowDecodeError extends Schema.TaggedError()("SnapshotRowDecodeError", { rowIndex: StreamIndexSchema }) {
|
|
20
|
+
}
|
|
21
|
+
/** A staged row belongs to a family this release does not replace. */
|
|
22
|
+
export class SnapshotRowFamilyError extends Schema.TaggedError()("SnapshotRowFamilyError", {
|
|
23
|
+
family: ContentSnapshotKindSchema,
|
|
24
|
+
rowIndex: StreamIndexSchema,
|
|
25
|
+
}) {
|
|
26
|
+
}
|
|
27
|
+
/** A replacement manifest cannot form a coherent forward transition. */
|
|
28
|
+
export class SnapshotTransitionError extends Schema.TaggedError()("SnapshotTransitionError", { family: ContentSnapshotKindSchema }) {
|
|
29
|
+
}
|
|
30
|
+
/** The staged row stream count differs from all signed family evidence. */
|
|
31
|
+
export class SnapshotStagedCountError extends Schema.TaggedError()("SnapshotStagedCountError", {
|
|
32
|
+
actualCount: StreamIndexSchema,
|
|
33
|
+
expectedCount: StreamIndexSchema,
|
|
34
|
+
verifiedCount: StreamIndexSchema,
|
|
35
|
+
}) {
|
|
36
|
+
}
|
|
37
|
+
const familyOrder = {
|
|
38
|
+
program: 0,
|
|
39
|
+
quran: 1,
|
|
40
|
+
tryout: 2,
|
|
41
|
+
};
|
|
42
|
+
/** Derives one replacement's aggregate row evidence in its owning runtime. */
|
|
43
|
+
function snapshotRowEvidence(snapshot) {
|
|
44
|
+
if (snapshot.family === "program") {
|
|
45
|
+
return {
|
|
46
|
+
rowCount: snapshot.manifest.rowCount,
|
|
47
|
+
rowDigest: snapshot.manifest.rowDigest,
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
if (snapshot.family === "quran") {
|
|
51
|
+
return {
|
|
52
|
+
rowCount: snapshot.manifest.projectionCount,
|
|
53
|
+
rowDigest: snapshot.manifest.projectionDigest,
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
return tryoutSnapshotRowEvidence(snapshot.manifest);
|
|
57
|
+
}
|
|
58
|
+
/** Strictly decodes one manifest and advances canonical family order. */
|
|
59
|
+
function decodeManifest(state, source, manifestIndex) {
|
|
60
|
+
return Schema.decodeUnknownEffect(ContentSnapshotManifestSchema)(source, {
|
|
61
|
+
onExcessProperty: "error",
|
|
62
|
+
}).pipe(Effect.mapError(() => new SnapshotManifestDecodeError({ manifestIndex })), Effect.tap((manifest) => {
|
|
63
|
+
const { previous } = state;
|
|
64
|
+
if (previous !== undefined &&
|
|
65
|
+
familyOrder[previous] >= familyOrder[manifest.family]) {
|
|
66
|
+
return Effect.fail(new SnapshotManifestOrderError({
|
|
67
|
+
actualFamily: manifest.family,
|
|
68
|
+
manifestIndex,
|
|
69
|
+
previousFamily: previous,
|
|
70
|
+
}));
|
|
71
|
+
}
|
|
72
|
+
state.previous = manifest.family;
|
|
73
|
+
return Effect.void;
|
|
74
|
+
}));
|
|
75
|
+
}
|
|
76
|
+
/** Strictly decodes replayable replacement manifests in canonical order. */
|
|
77
|
+
export function decodeContentSnapshotManifests(manifests) {
|
|
78
|
+
return Stream.unwrap(Effect.sync(() => {
|
|
79
|
+
const state = { previous: undefined };
|
|
80
|
+
return manifests.pipe(Stream.zipWithIndex, Stream.mapEffect(([source, manifestIndex]) => decodeManifest(state, source, manifestIndex)));
|
|
81
|
+
}));
|
|
82
|
+
}
|
|
83
|
+
/** Strictly decodes replayable structured rows without retaining bodies. */
|
|
84
|
+
export function decodeContentSnapshotRows(rows) {
|
|
85
|
+
return rows.pipe(Stream.zipWithIndex, Stream.mapEffect(([source, rowIndex]) => Schema.decodeUnknownEffect(ContentSnapshotRowSchema)(source, {
|
|
86
|
+
onExcessProperty: "error",
|
|
87
|
+
}).pipe(Effect.mapError(() => new SnapshotRowDecodeError({ rowIndex })))));
|
|
88
|
+
}
|
|
89
|
+
/** Replaces one inherited family state without weakening schema filters. */
|
|
90
|
+
function replaceSnapshotState(snapshots, snapshot) {
|
|
91
|
+
return Effect.try({
|
|
92
|
+
catch: () => new SnapshotTransitionError({ family: snapshot.family }),
|
|
93
|
+
try: () => {
|
|
94
|
+
const baseSnapshotId = snapshots[snapshot.family].resultSnapshotId;
|
|
95
|
+
const evidence = snapshotRowEvidence(snapshot);
|
|
96
|
+
return ContentSnapshotSetSchema.make({
|
|
97
|
+
...snapshots,
|
|
98
|
+
[snapshot.family]: replaceContentSnapshot({
|
|
99
|
+
baseSnapshotId,
|
|
100
|
+
resultSnapshotId: snapshot.manifest.snapshotId,
|
|
101
|
+
...evidence,
|
|
102
|
+
}),
|
|
103
|
+
});
|
|
104
|
+
},
|
|
105
|
+
});
|
|
106
|
+
}
|
|
107
|
+
/** Derives all fixed family states from prior results and replacements. */
|
|
108
|
+
function deriveSnapshotSet(previousSnapshots, manifests) {
|
|
109
|
+
return Effect.reduce(manifests, () => inheritContentSnapshots(previousSnapshots), replaceSnapshotState);
|
|
110
|
+
}
|
|
111
|
+
/** Rejects unowned families while counting the complete staged row stream. */
|
|
112
|
+
function countOwnedRows(rows, snapshots) {
|
|
113
|
+
return rows.pipe(Stream.zipWithIndex, Stream.runFoldEffect(() => 0, (count, [row, rowIndex]) => {
|
|
114
|
+
if (snapshots[row.family].mode !== "replace") {
|
|
115
|
+
return Effect.fail(new SnapshotRowFamilyError({ family: row.family, rowIndex }));
|
|
116
|
+
}
|
|
117
|
+
return Effect.succeed(count + 1);
|
|
118
|
+
}));
|
|
119
|
+
}
|
|
120
|
+
/** Confirms all replay passes agree with signed staged-row evidence. */
|
|
121
|
+
export function verifyStagedSnapshotRows(actualRows, verifiedRows, expectedRows) {
|
|
122
|
+
if (actualRows === expectedRows && verifiedRows === expectedRows) {
|
|
123
|
+
return Effect.void;
|
|
124
|
+
}
|
|
125
|
+
return Effect.fail(new SnapshotStagedCountError({
|
|
126
|
+
actualCount: actualRows,
|
|
127
|
+
expectedCount: expectedRows,
|
|
128
|
+
verifiedCount: verifiedRows,
|
|
129
|
+
}));
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Authenticates every replacement through replayable Stream values.
|
|
133
|
+
* Global rows may interleave families; each filtered family order stays signed.
|
|
134
|
+
*/
|
|
135
|
+
export const verifyContentSnapshots = Effect.fn("AksaraContracts.verifyContentSnapshots")(function* (input) {
|
|
136
|
+
const decodedManifests = decodeContentSnapshotManifests(input.manifests);
|
|
137
|
+
const manifests = yield* decodedManifests.pipe(Stream.runCollect);
|
|
138
|
+
const snapshots = yield* deriveSnapshotSet(input.previousSnapshots, manifests);
|
|
139
|
+
const actualRows = yield* countOwnedRows(decodeContentSnapshotRows(input.rows), snapshots);
|
|
140
|
+
const verifiedRows = yield* Effect.reduce(manifests, () => 0, (count, manifest) => verifySnapshotRows(manifest, decodeContentSnapshotRows(input.rows)).pipe(Effect.map((verified) => count + verified)));
|
|
141
|
+
const expectedRows = snapshotRowCount(snapshots);
|
|
142
|
+
yield* verifyStagedSnapshotRows(actualRows, verifiedRows, expectedRows);
|
|
143
|
+
return {
|
|
144
|
+
snapshots,
|
|
145
|
+
stagedRows: actualRows,
|
|
146
|
+
};
|
|
147
|
+
});
|
|
@@ -0,0 +1,491 @@
|
|
|
1
|
+
import { Schema } from "effect";
|
|
2
|
+
import { type ReleaseId } from "#contracts/ids";
|
|
3
|
+
import { type AppLocale } from "#contracts/locale";
|
|
4
|
+
/** Semantic wire identity of the current localized content release. */
|
|
5
|
+
export declare const CONTENT_RELEASE_FORMAT = "localized-content-release";
|
|
6
|
+
/** Nonnegative release inventory count authenticated by one manifest. */
|
|
7
|
+
export declare const ReleaseCountSchema: Schema.Finite;
|
|
8
|
+
/** One immutable artifact selected for a locale-specific content head. */
|
|
9
|
+
export declare const ContentUpsertSchema: Schema.Struct<{
|
|
10
|
+
readonly artifactHash: Schema.brand<Schema.String, "@NakafaAI/AksaraSha256Hash">;
|
|
11
|
+
readonly artifactLocale: Schema.brand<Schema.Literals<readonly ["en", "id", "de"]>, "@NakafaAI/AksaraArtifactLocale">;
|
|
12
|
+
readonly contentKey: Schema.brand<Schema.String, "@NakafaAI/AksaraContentKey">;
|
|
13
|
+
readonly delivery: Schema.Literals<readonly ["public", "authenticated", "entitled"]>;
|
|
14
|
+
readonly family: Schema.Literals<readonly ["article", "material", "page", "question"]>;
|
|
15
|
+
readonly operation: Schema.Literal<"upsert">;
|
|
16
|
+
readonly rendererDomain: Schema.Literals<readonly ["ai-ds", "biology", "chemistry", "mathematics", "physics", "politics", "site", "snbt-general", "snbt-math", "snbt-plain", "snbt-quant", "tka-math"]>;
|
|
17
|
+
readonly sourcePath: Schema.brand<Schema.String, "@NakafaAI/AksaraCorpusSourcePath">;
|
|
18
|
+
}>;
|
|
19
|
+
/** One locale-specific content head removed by an explicit tombstone. */
|
|
20
|
+
export declare const ContentDeleteSchema: Schema.Struct<{
|
|
21
|
+
readonly artifactLocale: Schema.brand<Schema.Literals<readonly ["en", "id", "de"]>, "@NakafaAI/AksaraArtifactLocale">;
|
|
22
|
+
readonly contentKey: Schema.brand<Schema.String, "@NakafaAI/AksaraContentKey">;
|
|
23
|
+
readonly family: Schema.Literals<readonly ["article", "material", "page", "question"]>;
|
|
24
|
+
readonly operation: Schema.Literal<"delete">;
|
|
25
|
+
}>;
|
|
26
|
+
/** Complete tagged change vocabulary accepted by the current release. */
|
|
27
|
+
export declare const ContentChangeSchema: Schema.Union<readonly [Schema.Struct<{
|
|
28
|
+
readonly artifactHash: Schema.brand<Schema.String, "@NakafaAI/AksaraSha256Hash">;
|
|
29
|
+
readonly artifactLocale: Schema.brand<Schema.Literals<readonly ["en", "id", "de"]>, "@NakafaAI/AksaraArtifactLocale">;
|
|
30
|
+
readonly contentKey: Schema.brand<Schema.String, "@NakafaAI/AksaraContentKey">;
|
|
31
|
+
readonly delivery: Schema.Literals<readonly ["public", "authenticated", "entitled"]>;
|
|
32
|
+
readonly family: Schema.Literals<readonly ["article", "material", "page", "question"]>;
|
|
33
|
+
readonly operation: Schema.Literal<"upsert">;
|
|
34
|
+
readonly rendererDomain: Schema.Literals<readonly ["ai-ds", "biology", "chemistry", "mathematics", "physics", "politics", "site", "snbt-general", "snbt-math", "snbt-plain", "snbt-quant", "tka-math"]>;
|
|
35
|
+
readonly sourcePath: Schema.brand<Schema.String, "@NakafaAI/AksaraCorpusSourcePath">;
|
|
36
|
+
}>, Schema.Struct<{
|
|
37
|
+
readonly artifactLocale: Schema.brand<Schema.Literals<readonly ["en", "id", "de"]>, "@NakafaAI/AksaraArtifactLocale">;
|
|
38
|
+
readonly contentKey: Schema.brand<Schema.String, "@NakafaAI/AksaraContentKey">;
|
|
39
|
+
readonly family: Schema.Literals<readonly ["article", "material", "page", "question"]>;
|
|
40
|
+
readonly operation: Schema.Literal<"delete">;
|
|
41
|
+
}>]>;
|
|
42
|
+
export type ContentChange = typeof ContentChangeSchema.Type;
|
|
43
|
+
export declare const ReleaseItemIndexSchema: Schema.Finite;
|
|
44
|
+
/** One separately stored, ordered item authenticated by a release digest. */
|
|
45
|
+
export declare const ContentReleaseItemSchema: Schema.Struct<{
|
|
46
|
+
readonly change: Schema.Union<readonly [Schema.Struct<{
|
|
47
|
+
readonly artifactHash: Schema.brand<Schema.String, "@NakafaAI/AksaraSha256Hash">;
|
|
48
|
+
readonly artifactLocale: Schema.brand<Schema.Literals<readonly ["en", "id", "de"]>, "@NakafaAI/AksaraArtifactLocale">;
|
|
49
|
+
readonly contentKey: Schema.brand<Schema.String, "@NakafaAI/AksaraContentKey">;
|
|
50
|
+
readonly delivery: Schema.Literals<readonly ["public", "authenticated", "entitled"]>;
|
|
51
|
+
readonly family: Schema.Literals<readonly ["article", "material", "page", "question"]>;
|
|
52
|
+
readonly operation: Schema.Literal<"upsert">;
|
|
53
|
+
readonly rendererDomain: Schema.Literals<readonly ["ai-ds", "biology", "chemistry", "mathematics", "physics", "politics", "site", "snbt-general", "snbt-math", "snbt-plain", "snbt-quant", "tka-math"]>;
|
|
54
|
+
readonly sourcePath: Schema.brand<Schema.String, "@NakafaAI/AksaraCorpusSourcePath">;
|
|
55
|
+
}>, Schema.Struct<{
|
|
56
|
+
readonly artifactLocale: Schema.brand<Schema.Literals<readonly ["en", "id", "de"]>, "@NakafaAI/AksaraArtifactLocale">;
|
|
57
|
+
readonly contentKey: Schema.brand<Schema.String, "@NakafaAI/AksaraContentKey">;
|
|
58
|
+
readonly family: Schema.Literals<readonly ["article", "material", "page", "question"]>;
|
|
59
|
+
readonly operation: Schema.Literal<"delete">;
|
|
60
|
+
}>]>;
|
|
61
|
+
readonly index: Schema.Finite;
|
|
62
|
+
readonly releaseId: Schema.brand<Schema.String, "@NakafaAI/AksaraReleaseId">;
|
|
63
|
+
}>;
|
|
64
|
+
export type ContentReleaseItem = typeof ContentReleaseItemSchema.Type;
|
|
65
|
+
/** Deterministic desired-state transition with signed source provenance. */
|
|
66
|
+
export declare const ContentReleaseManifestSchema: Schema.Struct<{
|
|
67
|
+
readonly baseActiveAppLocales: Schema.NullOr<Schema.NonEmptyArray<Schema.brand<Schema.Literals<readonly ["en", "id", "de"]>, "@NakafaAI/AksaraAppLocale">>>;
|
|
68
|
+
readonly baseManifestHash: Schema.NullOr<Schema.brand<Schema.String, "@NakafaAI/AksaraSha256Hash">>;
|
|
69
|
+
readonly baseReleaseId: Schema.NullOr<Schema.brand<Schema.String, "@NakafaAI/AksaraReleaseId">>;
|
|
70
|
+
readonly baseResultCount: Schema.Finite;
|
|
71
|
+
readonly baseResultDigest: Schema.brand<Schema.String, "@NakafaAI/AksaraSha256Hash">;
|
|
72
|
+
readonly deleteCount: Schema.Finite;
|
|
73
|
+
readonly itemCount: Schema.Finite;
|
|
74
|
+
readonly itemsDigest: Schema.brand<Schema.String, "@NakafaAI/AksaraSha256Hash">;
|
|
75
|
+
readonly origin: Schema.Union<readonly [Schema.Struct<{
|
|
76
|
+
readonly kind: Schema.Literal<"git">;
|
|
77
|
+
readonly sha: Schema.brand<Schema.String, "@NakafaAI/AksaraGitCommitSha">;
|
|
78
|
+
}>, Schema.Struct<{
|
|
79
|
+
readonly kind: Schema.Literal<"rollback">;
|
|
80
|
+
readonly releaseId: Schema.brand<Schema.String, "@NakafaAI/AksaraReleaseId">;
|
|
81
|
+
}>]>;
|
|
82
|
+
readonly projectionCount: Schema.Finite;
|
|
83
|
+
readonly projectionDigest: Schema.brand<Schema.String, "@NakafaAI/AksaraSha256Hash">;
|
|
84
|
+
readonly releaseId: Schema.brand<Schema.String, "@NakafaAI/AksaraReleaseId">;
|
|
85
|
+
readonly rendererContractVersion: Schema.Literal<"1.0.0">;
|
|
86
|
+
readonly rendererManifestHash: Schema.brand<Schema.String, "@NakafaAI/AksaraSha256Hash">;
|
|
87
|
+
readonly resultCount: Schema.Finite;
|
|
88
|
+
readonly resultDigest: Schema.brand<Schema.String, "@NakafaAI/AksaraSha256Hash">;
|
|
89
|
+
readonly rollbackCount: Schema.Finite;
|
|
90
|
+
readonly rollbackDigest: Schema.brand<Schema.String, "@NakafaAI/AksaraSha256Hash">;
|
|
91
|
+
readonly routeCount: Schema.Finite;
|
|
92
|
+
readonly routeDigest: Schema.brand<Schema.String, "@NakafaAI/AksaraSha256Hash">;
|
|
93
|
+
readonly scope: Schema.Struct<{
|
|
94
|
+
content: Schema.optional<Schema.$Array<Schema.Struct<{
|
|
95
|
+
readonly artifactLocale: Schema.brand<Schema.Literals<readonly ["en", "id", "de"]>, "@NakafaAI/AksaraArtifactLocale">;
|
|
96
|
+
readonly contentKey: Schema.brand<Schema.String, "@NakafaAI/AksaraContentKey">;
|
|
97
|
+
readonly family: Schema.Literals<readonly ["article", "material", "page", "question"]>;
|
|
98
|
+
}>>>;
|
|
99
|
+
families: Schema.$Array<Schema.Literals<readonly ["article", "material", "page", "question"]>>;
|
|
100
|
+
snapshots: Schema.$Array<Schema.Literals<readonly ["program", "quran", "tryout"]>>;
|
|
101
|
+
}>;
|
|
102
|
+
readonly snapshots: Schema.Struct<{
|
|
103
|
+
readonly program: Schema.Struct<{
|
|
104
|
+
readonly baseSnapshotId: Schema.NullOr<Schema.brand<Schema.String, "@NakafaAI/AksaraSha256Hash">>;
|
|
105
|
+
readonly mode: Schema.Literals<readonly ["inherit", "replace", "restore"]>;
|
|
106
|
+
readonly resultSnapshotId: Schema.NullOr<Schema.brand<Schema.String, "@NakafaAI/AksaraSha256Hash">>;
|
|
107
|
+
readonly rowCount: Schema.Int;
|
|
108
|
+
readonly rowDigest: Schema.brand<Schema.String, "@NakafaAI/AksaraSha256Hash">;
|
|
109
|
+
}>;
|
|
110
|
+
readonly quran: Schema.Struct<{
|
|
111
|
+
readonly baseSnapshotId: Schema.NullOr<Schema.brand<Schema.String, "@NakafaAI/AksaraSha256Hash">>;
|
|
112
|
+
readonly mode: Schema.Literals<readonly ["inherit", "replace", "restore"]>;
|
|
113
|
+
readonly resultSnapshotId: Schema.NullOr<Schema.brand<Schema.String, "@NakafaAI/AksaraSha256Hash">>;
|
|
114
|
+
readonly rowCount: Schema.Int;
|
|
115
|
+
readonly rowDigest: Schema.brand<Schema.String, "@NakafaAI/AksaraSha256Hash">;
|
|
116
|
+
}>;
|
|
117
|
+
readonly tryout: Schema.Struct<{
|
|
118
|
+
readonly baseSnapshotId: Schema.NullOr<Schema.brand<Schema.String, "@NakafaAI/AksaraSha256Hash">>;
|
|
119
|
+
readonly mode: Schema.Literals<readonly ["inherit", "replace", "restore"]>;
|
|
120
|
+
readonly resultSnapshotId: Schema.NullOr<Schema.brand<Schema.String, "@NakafaAI/AksaraSha256Hash">>;
|
|
121
|
+
readonly rowCount: Schema.Int;
|
|
122
|
+
readonly rowDigest: Schema.brand<Schema.String, "@NakafaAI/AksaraSha256Hash">;
|
|
123
|
+
}>;
|
|
124
|
+
}>;
|
|
125
|
+
readonly upsertCount: Schema.Finite;
|
|
126
|
+
readonly activeAppLocales: Schema.NonEmptyArray<Schema.brand<Schema.Literals<readonly ["en", "id", "de"]>, "@NakafaAI/AksaraAppLocale">>;
|
|
127
|
+
readonly format: Schema.Literal<"localized-content-release">;
|
|
128
|
+
}>;
|
|
129
|
+
export type ContentReleaseManifest = typeof ContentReleaseManifestSchema.Type;
|
|
130
|
+
/** Immutable release manifest plus its asymmetric authenticity proof. */
|
|
131
|
+
export declare const SignedContentReleaseSchema: Schema.Struct<{
|
|
132
|
+
readonly keyId: Schema.brand<Schema.String, "@NakafaAI/AksaraSigningKeyId">;
|
|
133
|
+
readonly manifest: Schema.Struct<{
|
|
134
|
+
readonly baseActiveAppLocales: Schema.NullOr<Schema.NonEmptyArray<Schema.brand<Schema.Literals<readonly ["en", "id", "de"]>, "@NakafaAI/AksaraAppLocale">>>;
|
|
135
|
+
readonly baseManifestHash: Schema.NullOr<Schema.brand<Schema.String, "@NakafaAI/AksaraSha256Hash">>;
|
|
136
|
+
readonly baseReleaseId: Schema.NullOr<Schema.brand<Schema.String, "@NakafaAI/AksaraReleaseId">>;
|
|
137
|
+
readonly baseResultCount: Schema.Finite;
|
|
138
|
+
readonly baseResultDigest: Schema.brand<Schema.String, "@NakafaAI/AksaraSha256Hash">;
|
|
139
|
+
readonly deleteCount: Schema.Finite;
|
|
140
|
+
readonly itemCount: Schema.Finite;
|
|
141
|
+
readonly itemsDigest: Schema.brand<Schema.String, "@NakafaAI/AksaraSha256Hash">;
|
|
142
|
+
readonly origin: Schema.Union<readonly [Schema.Struct<{
|
|
143
|
+
readonly kind: Schema.Literal<"git">;
|
|
144
|
+
readonly sha: Schema.brand<Schema.String, "@NakafaAI/AksaraGitCommitSha">;
|
|
145
|
+
}>, Schema.Struct<{
|
|
146
|
+
readonly kind: Schema.Literal<"rollback">;
|
|
147
|
+
readonly releaseId: Schema.brand<Schema.String, "@NakafaAI/AksaraReleaseId">;
|
|
148
|
+
}>]>;
|
|
149
|
+
readonly projectionCount: Schema.Finite;
|
|
150
|
+
readonly projectionDigest: Schema.brand<Schema.String, "@NakafaAI/AksaraSha256Hash">;
|
|
151
|
+
readonly releaseId: Schema.brand<Schema.String, "@NakafaAI/AksaraReleaseId">;
|
|
152
|
+
readonly rendererContractVersion: Schema.Literal<"1.0.0">;
|
|
153
|
+
readonly rendererManifestHash: Schema.brand<Schema.String, "@NakafaAI/AksaraSha256Hash">;
|
|
154
|
+
readonly resultCount: Schema.Finite;
|
|
155
|
+
readonly resultDigest: Schema.brand<Schema.String, "@NakafaAI/AksaraSha256Hash">;
|
|
156
|
+
readonly rollbackCount: Schema.Finite;
|
|
157
|
+
readonly rollbackDigest: Schema.brand<Schema.String, "@NakafaAI/AksaraSha256Hash">;
|
|
158
|
+
readonly routeCount: Schema.Finite;
|
|
159
|
+
readonly routeDigest: Schema.brand<Schema.String, "@NakafaAI/AksaraSha256Hash">;
|
|
160
|
+
readonly scope: Schema.Struct<{
|
|
161
|
+
content: Schema.optional<Schema.$Array<Schema.Struct<{
|
|
162
|
+
readonly artifactLocale: Schema.brand<Schema.Literals<readonly ["en", "id", "de"]>, "@NakafaAI/AksaraArtifactLocale">;
|
|
163
|
+
readonly contentKey: Schema.brand<Schema.String, "@NakafaAI/AksaraContentKey">;
|
|
164
|
+
readonly family: Schema.Literals<readonly ["article", "material", "page", "question"]>;
|
|
165
|
+
}>>>;
|
|
166
|
+
families: Schema.$Array<Schema.Literals<readonly ["article", "material", "page", "question"]>>;
|
|
167
|
+
snapshots: Schema.$Array<Schema.Literals<readonly ["program", "quran", "tryout"]>>;
|
|
168
|
+
}>;
|
|
169
|
+
readonly snapshots: Schema.Struct<{
|
|
170
|
+
readonly program: Schema.Struct<{
|
|
171
|
+
readonly baseSnapshotId: Schema.NullOr<Schema.brand<Schema.String, "@NakafaAI/AksaraSha256Hash">>;
|
|
172
|
+
readonly mode: Schema.Literals<readonly ["inherit", "replace", "restore"]>;
|
|
173
|
+
readonly resultSnapshotId: Schema.NullOr<Schema.brand<Schema.String, "@NakafaAI/AksaraSha256Hash">>;
|
|
174
|
+
readonly rowCount: Schema.Int;
|
|
175
|
+
readonly rowDigest: Schema.brand<Schema.String, "@NakafaAI/AksaraSha256Hash">;
|
|
176
|
+
}>;
|
|
177
|
+
readonly quran: Schema.Struct<{
|
|
178
|
+
readonly baseSnapshotId: Schema.NullOr<Schema.brand<Schema.String, "@NakafaAI/AksaraSha256Hash">>;
|
|
179
|
+
readonly mode: Schema.Literals<readonly ["inherit", "replace", "restore"]>;
|
|
180
|
+
readonly resultSnapshotId: Schema.NullOr<Schema.brand<Schema.String, "@NakafaAI/AksaraSha256Hash">>;
|
|
181
|
+
readonly rowCount: Schema.Int;
|
|
182
|
+
readonly rowDigest: Schema.brand<Schema.String, "@NakafaAI/AksaraSha256Hash">;
|
|
183
|
+
}>;
|
|
184
|
+
readonly tryout: Schema.Struct<{
|
|
185
|
+
readonly baseSnapshotId: Schema.NullOr<Schema.brand<Schema.String, "@NakafaAI/AksaraSha256Hash">>;
|
|
186
|
+
readonly mode: Schema.Literals<readonly ["inherit", "replace", "restore"]>;
|
|
187
|
+
readonly resultSnapshotId: Schema.NullOr<Schema.brand<Schema.String, "@NakafaAI/AksaraSha256Hash">>;
|
|
188
|
+
readonly rowCount: Schema.Int;
|
|
189
|
+
readonly rowDigest: Schema.brand<Schema.String, "@NakafaAI/AksaraSha256Hash">;
|
|
190
|
+
}>;
|
|
191
|
+
}>;
|
|
192
|
+
readonly upsertCount: Schema.Finite;
|
|
193
|
+
readonly activeAppLocales: Schema.NonEmptyArray<Schema.brand<Schema.Literals<readonly ["en", "id", "de"]>, "@NakafaAI/AksaraAppLocale">>;
|
|
194
|
+
readonly format: Schema.Literal<"localized-content-release">;
|
|
195
|
+
}>;
|
|
196
|
+
readonly manifestHash: Schema.brand<Schema.String, "@NakafaAI/AksaraSha256Hash">;
|
|
197
|
+
readonly signature: Schema.brand<Schema.String, "@NakafaAI/AksaraEd25519Signature">;
|
|
198
|
+
}>;
|
|
199
|
+
export type SignedContentRelease = typeof SignedContentReleaseSchema.Type;
|
|
200
|
+
/** Checks whether one application locale is active in a signed release. */
|
|
201
|
+
export declare function releaseActivatesAppLocale(release: SignedContentRelease, appLocale: AppLocale): boolean;
|
|
202
|
+
/** Signed release whose provenance identifies one exact rollback target. */
|
|
203
|
+
export type RollbackSignedContentRelease = SignedContentRelease & {
|
|
204
|
+
readonly manifest: SignedContentRelease["manifest"] & {
|
|
205
|
+
readonly origin: {
|
|
206
|
+
readonly kind: "rollback";
|
|
207
|
+
readonly releaseId: ReleaseId;
|
|
208
|
+
};
|
|
209
|
+
};
|
|
210
|
+
};
|
|
211
|
+
/** Signed release contract accepted only for rollback-owned operations. */
|
|
212
|
+
export declare const RollbackSignedContentReleaseSchema: Schema.refine<RollbackSignedContentRelease, Schema.Struct<{
|
|
213
|
+
readonly keyId: Schema.brand<Schema.String, "@NakafaAI/AksaraSigningKeyId">;
|
|
214
|
+
readonly manifest: Schema.Struct<{
|
|
215
|
+
readonly baseActiveAppLocales: Schema.NullOr<Schema.NonEmptyArray<Schema.brand<Schema.Literals<readonly ["en", "id", "de"]>, "@NakafaAI/AksaraAppLocale">>>;
|
|
216
|
+
readonly baseManifestHash: Schema.NullOr<Schema.brand<Schema.String, "@NakafaAI/AksaraSha256Hash">>;
|
|
217
|
+
readonly baseReleaseId: Schema.NullOr<Schema.brand<Schema.String, "@NakafaAI/AksaraReleaseId">>;
|
|
218
|
+
readonly baseResultCount: Schema.Finite;
|
|
219
|
+
readonly baseResultDigest: Schema.brand<Schema.String, "@NakafaAI/AksaraSha256Hash">;
|
|
220
|
+
readonly deleteCount: Schema.Finite;
|
|
221
|
+
readonly itemCount: Schema.Finite;
|
|
222
|
+
readonly itemsDigest: Schema.brand<Schema.String, "@NakafaAI/AksaraSha256Hash">;
|
|
223
|
+
readonly origin: Schema.Union<readonly [Schema.Struct<{
|
|
224
|
+
readonly kind: Schema.Literal<"git">;
|
|
225
|
+
readonly sha: Schema.brand<Schema.String, "@NakafaAI/AksaraGitCommitSha">;
|
|
226
|
+
}>, Schema.Struct<{
|
|
227
|
+
readonly kind: Schema.Literal<"rollback">;
|
|
228
|
+
readonly releaseId: Schema.brand<Schema.String, "@NakafaAI/AksaraReleaseId">;
|
|
229
|
+
}>]>;
|
|
230
|
+
readonly projectionCount: Schema.Finite;
|
|
231
|
+
readonly projectionDigest: Schema.brand<Schema.String, "@NakafaAI/AksaraSha256Hash">;
|
|
232
|
+
readonly releaseId: Schema.brand<Schema.String, "@NakafaAI/AksaraReleaseId">;
|
|
233
|
+
readonly rendererContractVersion: Schema.Literal<"1.0.0">;
|
|
234
|
+
readonly rendererManifestHash: Schema.brand<Schema.String, "@NakafaAI/AksaraSha256Hash">;
|
|
235
|
+
readonly resultCount: Schema.Finite;
|
|
236
|
+
readonly resultDigest: Schema.brand<Schema.String, "@NakafaAI/AksaraSha256Hash">;
|
|
237
|
+
readonly rollbackCount: Schema.Finite;
|
|
238
|
+
readonly rollbackDigest: Schema.brand<Schema.String, "@NakafaAI/AksaraSha256Hash">;
|
|
239
|
+
readonly routeCount: Schema.Finite;
|
|
240
|
+
readonly routeDigest: Schema.brand<Schema.String, "@NakafaAI/AksaraSha256Hash">;
|
|
241
|
+
readonly scope: Schema.Struct<{
|
|
242
|
+
content: Schema.optional<Schema.$Array<Schema.Struct<{
|
|
243
|
+
readonly artifactLocale: Schema.brand<Schema.Literals<readonly ["en", "id", "de"]>, "@NakafaAI/AksaraArtifactLocale">;
|
|
244
|
+
readonly contentKey: Schema.brand<Schema.String, "@NakafaAI/AksaraContentKey">;
|
|
245
|
+
readonly family: Schema.Literals<readonly ["article", "material", "page", "question"]>;
|
|
246
|
+
}>>>;
|
|
247
|
+
families: Schema.$Array<Schema.Literals<readonly ["article", "material", "page", "question"]>>;
|
|
248
|
+
snapshots: Schema.$Array<Schema.Literals<readonly ["program", "quran", "tryout"]>>;
|
|
249
|
+
}>;
|
|
250
|
+
readonly snapshots: Schema.Struct<{
|
|
251
|
+
readonly program: Schema.Struct<{
|
|
252
|
+
readonly baseSnapshotId: Schema.NullOr<Schema.brand<Schema.String, "@NakafaAI/AksaraSha256Hash">>;
|
|
253
|
+
readonly mode: Schema.Literals<readonly ["inherit", "replace", "restore"]>;
|
|
254
|
+
readonly resultSnapshotId: Schema.NullOr<Schema.brand<Schema.String, "@NakafaAI/AksaraSha256Hash">>;
|
|
255
|
+
readonly rowCount: Schema.Int;
|
|
256
|
+
readonly rowDigest: Schema.brand<Schema.String, "@NakafaAI/AksaraSha256Hash">;
|
|
257
|
+
}>;
|
|
258
|
+
readonly quran: Schema.Struct<{
|
|
259
|
+
readonly baseSnapshotId: Schema.NullOr<Schema.brand<Schema.String, "@NakafaAI/AksaraSha256Hash">>;
|
|
260
|
+
readonly mode: Schema.Literals<readonly ["inherit", "replace", "restore"]>;
|
|
261
|
+
readonly resultSnapshotId: Schema.NullOr<Schema.brand<Schema.String, "@NakafaAI/AksaraSha256Hash">>;
|
|
262
|
+
readonly rowCount: Schema.Int;
|
|
263
|
+
readonly rowDigest: Schema.brand<Schema.String, "@NakafaAI/AksaraSha256Hash">;
|
|
264
|
+
}>;
|
|
265
|
+
readonly tryout: Schema.Struct<{
|
|
266
|
+
readonly baseSnapshotId: Schema.NullOr<Schema.brand<Schema.String, "@NakafaAI/AksaraSha256Hash">>;
|
|
267
|
+
readonly mode: Schema.Literals<readonly ["inherit", "replace", "restore"]>;
|
|
268
|
+
readonly resultSnapshotId: Schema.NullOr<Schema.brand<Schema.String, "@NakafaAI/AksaraSha256Hash">>;
|
|
269
|
+
readonly rowCount: Schema.Int;
|
|
270
|
+
readonly rowDigest: Schema.brand<Schema.String, "@NakafaAI/AksaraSha256Hash">;
|
|
271
|
+
}>;
|
|
272
|
+
}>;
|
|
273
|
+
readonly upsertCount: Schema.Finite;
|
|
274
|
+
readonly activeAppLocales: Schema.NonEmptyArray<Schema.brand<Schema.Literals<readonly ["en", "id", "de"]>, "@NakafaAI/AksaraAppLocale">>;
|
|
275
|
+
readonly format: Schema.Literal<"localized-content-release">;
|
|
276
|
+
}>;
|
|
277
|
+
readonly manifestHash: Schema.brand<Schema.String, "@NakafaAI/AksaraSha256Hash">;
|
|
278
|
+
readonly signature: Schema.brand<Schema.String, "@NakafaAI/AksaraEd25519Signature">;
|
|
279
|
+
}>>;
|
|
280
|
+
/** Pre-activation evidence proving the fully staged release is coherent. */
|
|
281
|
+
export declare const ReleaseVerificationEvidenceSchema: Schema.Struct<{
|
|
282
|
+
readonly activeAppLocales: Schema.NonEmptyArray<Schema.brand<Schema.Literals<readonly ["en", "id", "de"]>, "@NakafaAI/AksaraAppLocale">>;
|
|
283
|
+
readonly baseActiveAppLocales: Schema.NullOr<Schema.NonEmptyArray<Schema.brand<Schema.Literals<readonly ["en", "id", "de"]>, "@NakafaAI/AksaraAppLocale">>>;
|
|
284
|
+
readonly baseManifestHash: Schema.NullOr<Schema.brand<Schema.String, "@NakafaAI/AksaraSha256Hash">>;
|
|
285
|
+
readonly baseReleaseId: Schema.NullOr<Schema.brand<Schema.String, "@NakafaAI/AksaraReleaseId">>;
|
|
286
|
+
readonly baseResultCount: Schema.Finite;
|
|
287
|
+
readonly baseResultDigest: Schema.brand<Schema.String, "@NakafaAI/AksaraSha256Hash">;
|
|
288
|
+
readonly deleteHeads: Schema.Finite;
|
|
289
|
+
readonly itemCount: Schema.Finite;
|
|
290
|
+
readonly itemsDigest: Schema.brand<Schema.String, "@NakafaAI/AksaraSha256Hash">;
|
|
291
|
+
readonly manifestHash: Schema.brand<Schema.String, "@NakafaAI/AksaraSha256Hash">;
|
|
292
|
+
readonly projectionCount: Schema.Finite;
|
|
293
|
+
readonly projectionDigest: Schema.brand<Schema.String, "@NakafaAI/AksaraSha256Hash">;
|
|
294
|
+
readonly releaseId: Schema.brand<Schema.String, "@NakafaAI/AksaraReleaseId">;
|
|
295
|
+
readonly rendererContractVersion: Schema.Literal<"1.0.0">;
|
|
296
|
+
readonly rendererManifestHash: Schema.brand<Schema.String, "@NakafaAI/AksaraSha256Hash">;
|
|
297
|
+
readonly resultCount: Schema.Finite;
|
|
298
|
+
readonly resultDigest: Schema.brand<Schema.String, "@NakafaAI/AksaraSha256Hash">;
|
|
299
|
+
readonly rollbackCount: Schema.Finite;
|
|
300
|
+
readonly rollbackDigest: Schema.brand<Schema.String, "@NakafaAI/AksaraSha256Hash">;
|
|
301
|
+
readonly routeCount: Schema.Finite;
|
|
302
|
+
readonly routeDigest: Schema.brand<Schema.String, "@NakafaAI/AksaraSha256Hash">;
|
|
303
|
+
readonly snapshots: Schema.Struct<{
|
|
304
|
+
readonly program: Schema.Struct<{
|
|
305
|
+
readonly baseSnapshotId: Schema.NullOr<Schema.brand<Schema.String, "@NakafaAI/AksaraSha256Hash">>;
|
|
306
|
+
readonly mode: Schema.Literals<readonly ["inherit", "replace", "restore"]>;
|
|
307
|
+
readonly resultSnapshotId: Schema.NullOr<Schema.brand<Schema.String, "@NakafaAI/AksaraSha256Hash">>;
|
|
308
|
+
readonly rowCount: Schema.Int;
|
|
309
|
+
readonly rowDigest: Schema.brand<Schema.String, "@NakafaAI/AksaraSha256Hash">;
|
|
310
|
+
}>;
|
|
311
|
+
readonly quran: Schema.Struct<{
|
|
312
|
+
readonly baseSnapshotId: Schema.NullOr<Schema.brand<Schema.String, "@NakafaAI/AksaraSha256Hash">>;
|
|
313
|
+
readonly mode: Schema.Literals<readonly ["inherit", "replace", "restore"]>;
|
|
314
|
+
readonly resultSnapshotId: Schema.NullOr<Schema.brand<Schema.String, "@NakafaAI/AksaraSha256Hash">>;
|
|
315
|
+
readonly rowCount: Schema.Int;
|
|
316
|
+
readonly rowDigest: Schema.brand<Schema.String, "@NakafaAI/AksaraSha256Hash">;
|
|
317
|
+
}>;
|
|
318
|
+
readonly tryout: Schema.Struct<{
|
|
319
|
+
readonly baseSnapshotId: Schema.NullOr<Schema.brand<Schema.String, "@NakafaAI/AksaraSha256Hash">>;
|
|
320
|
+
readonly mode: Schema.Literals<readonly ["inherit", "replace", "restore"]>;
|
|
321
|
+
readonly resultSnapshotId: Schema.NullOr<Schema.brand<Schema.String, "@NakafaAI/AksaraSha256Hash">>;
|
|
322
|
+
readonly rowCount: Schema.Int;
|
|
323
|
+
readonly rowDigest: Schema.brand<Schema.String, "@NakafaAI/AksaraSha256Hash">;
|
|
324
|
+
}>;
|
|
325
|
+
}>;
|
|
326
|
+
readonly stagedArtifacts: Schema.Finite;
|
|
327
|
+
readonly stagedRoutes: Schema.Finite;
|
|
328
|
+
readonly stagedSnapshotRows: Schema.Finite;
|
|
329
|
+
readonly upsertHeads: Schema.Finite;
|
|
330
|
+
}>;
|
|
331
|
+
export type ReleaseVerificationEvidence = typeof ReleaseVerificationEvidenceSchema.Type;
|
|
332
|
+
/** Durable verification has started but has not produced final evidence yet. */
|
|
333
|
+
export declare const ReleaseVerificationPendingSchema: Schema.Struct<{
|
|
334
|
+
readonly manifestHash: Schema.brand<Schema.String, "@NakafaAI/AksaraSha256Hash">;
|
|
335
|
+
readonly phase: Schema.Literal<"verifying">;
|
|
336
|
+
readonly releaseId: Schema.brand<Schema.String, "@NakafaAI/AksaraReleaseId">;
|
|
337
|
+
}>;
|
|
338
|
+
/** Durable verification completed with recomputed release evidence. */
|
|
339
|
+
export declare const ReleaseVerificationCompleteSchema: Schema.Struct<{
|
|
340
|
+
readonly evidence: Schema.Struct<{
|
|
341
|
+
readonly activeAppLocales: Schema.NonEmptyArray<Schema.brand<Schema.Literals<readonly ["en", "id", "de"]>, "@NakafaAI/AksaraAppLocale">>;
|
|
342
|
+
readonly baseActiveAppLocales: Schema.NullOr<Schema.NonEmptyArray<Schema.brand<Schema.Literals<readonly ["en", "id", "de"]>, "@NakafaAI/AksaraAppLocale">>>;
|
|
343
|
+
readonly baseManifestHash: Schema.NullOr<Schema.brand<Schema.String, "@NakafaAI/AksaraSha256Hash">>;
|
|
344
|
+
readonly baseReleaseId: Schema.NullOr<Schema.brand<Schema.String, "@NakafaAI/AksaraReleaseId">>;
|
|
345
|
+
readonly baseResultCount: Schema.Finite;
|
|
346
|
+
readonly baseResultDigest: Schema.brand<Schema.String, "@NakafaAI/AksaraSha256Hash">;
|
|
347
|
+
readonly deleteHeads: Schema.Finite;
|
|
348
|
+
readonly itemCount: Schema.Finite;
|
|
349
|
+
readonly itemsDigest: Schema.brand<Schema.String, "@NakafaAI/AksaraSha256Hash">;
|
|
350
|
+
readonly manifestHash: Schema.brand<Schema.String, "@NakafaAI/AksaraSha256Hash">;
|
|
351
|
+
readonly projectionCount: Schema.Finite;
|
|
352
|
+
readonly projectionDigest: Schema.brand<Schema.String, "@NakafaAI/AksaraSha256Hash">;
|
|
353
|
+
readonly releaseId: Schema.brand<Schema.String, "@NakafaAI/AksaraReleaseId">;
|
|
354
|
+
readonly rendererContractVersion: Schema.Literal<"1.0.0">;
|
|
355
|
+
readonly rendererManifestHash: Schema.brand<Schema.String, "@NakafaAI/AksaraSha256Hash">;
|
|
356
|
+
readonly resultCount: Schema.Finite;
|
|
357
|
+
readonly resultDigest: Schema.brand<Schema.String, "@NakafaAI/AksaraSha256Hash">;
|
|
358
|
+
readonly rollbackCount: Schema.Finite;
|
|
359
|
+
readonly rollbackDigest: Schema.brand<Schema.String, "@NakafaAI/AksaraSha256Hash">;
|
|
360
|
+
readonly routeCount: Schema.Finite;
|
|
361
|
+
readonly routeDigest: Schema.brand<Schema.String, "@NakafaAI/AksaraSha256Hash">;
|
|
362
|
+
readonly snapshots: Schema.Struct<{
|
|
363
|
+
readonly program: Schema.Struct<{
|
|
364
|
+
readonly baseSnapshotId: Schema.NullOr<Schema.brand<Schema.String, "@NakafaAI/AksaraSha256Hash">>;
|
|
365
|
+
readonly mode: Schema.Literals<readonly ["inherit", "replace", "restore"]>;
|
|
366
|
+
readonly resultSnapshotId: Schema.NullOr<Schema.brand<Schema.String, "@NakafaAI/AksaraSha256Hash">>;
|
|
367
|
+
readonly rowCount: Schema.Int;
|
|
368
|
+
readonly rowDigest: Schema.brand<Schema.String, "@NakafaAI/AksaraSha256Hash">;
|
|
369
|
+
}>;
|
|
370
|
+
readonly quran: Schema.Struct<{
|
|
371
|
+
readonly baseSnapshotId: Schema.NullOr<Schema.brand<Schema.String, "@NakafaAI/AksaraSha256Hash">>;
|
|
372
|
+
readonly mode: Schema.Literals<readonly ["inherit", "replace", "restore"]>;
|
|
373
|
+
readonly resultSnapshotId: Schema.NullOr<Schema.brand<Schema.String, "@NakafaAI/AksaraSha256Hash">>;
|
|
374
|
+
readonly rowCount: Schema.Int;
|
|
375
|
+
readonly rowDigest: Schema.brand<Schema.String, "@NakafaAI/AksaraSha256Hash">;
|
|
376
|
+
}>;
|
|
377
|
+
readonly tryout: Schema.Struct<{
|
|
378
|
+
readonly baseSnapshotId: Schema.NullOr<Schema.brand<Schema.String, "@NakafaAI/AksaraSha256Hash">>;
|
|
379
|
+
readonly mode: Schema.Literals<readonly ["inherit", "replace", "restore"]>;
|
|
380
|
+
readonly resultSnapshotId: Schema.NullOr<Schema.brand<Schema.String, "@NakafaAI/AksaraSha256Hash">>;
|
|
381
|
+
readonly rowCount: Schema.Int;
|
|
382
|
+
readonly rowDigest: Schema.brand<Schema.String, "@NakafaAI/AksaraSha256Hash">;
|
|
383
|
+
}>;
|
|
384
|
+
}>;
|
|
385
|
+
readonly stagedArtifacts: Schema.Finite;
|
|
386
|
+
readonly stagedRoutes: Schema.Finite;
|
|
387
|
+
readonly stagedSnapshotRows: Schema.Finite;
|
|
388
|
+
readonly upsertHeads: Schema.Finite;
|
|
389
|
+
}>;
|
|
390
|
+
readonly phase: Schema.Literal<"verified">;
|
|
391
|
+
}>;
|
|
392
|
+
/** Bounded status returned while durable verification progresses. */
|
|
393
|
+
export declare const ReleaseVerificationStatusSchema: Schema.Union<readonly [Schema.Struct<{
|
|
394
|
+
readonly manifestHash: Schema.brand<Schema.String, "@NakafaAI/AksaraSha256Hash">;
|
|
395
|
+
readonly phase: Schema.Literal<"verifying">;
|
|
396
|
+
readonly releaseId: Schema.brand<Schema.String, "@NakafaAI/AksaraReleaseId">;
|
|
397
|
+
}>, Schema.Struct<{
|
|
398
|
+
readonly evidence: Schema.Struct<{
|
|
399
|
+
readonly activeAppLocales: Schema.NonEmptyArray<Schema.brand<Schema.Literals<readonly ["en", "id", "de"]>, "@NakafaAI/AksaraAppLocale">>;
|
|
400
|
+
readonly baseActiveAppLocales: Schema.NullOr<Schema.NonEmptyArray<Schema.brand<Schema.Literals<readonly ["en", "id", "de"]>, "@NakafaAI/AksaraAppLocale">>>;
|
|
401
|
+
readonly baseManifestHash: Schema.NullOr<Schema.brand<Schema.String, "@NakafaAI/AksaraSha256Hash">>;
|
|
402
|
+
readonly baseReleaseId: Schema.NullOr<Schema.brand<Schema.String, "@NakafaAI/AksaraReleaseId">>;
|
|
403
|
+
readonly baseResultCount: Schema.Finite;
|
|
404
|
+
readonly baseResultDigest: Schema.brand<Schema.String, "@NakafaAI/AksaraSha256Hash">;
|
|
405
|
+
readonly deleteHeads: Schema.Finite;
|
|
406
|
+
readonly itemCount: Schema.Finite;
|
|
407
|
+
readonly itemsDigest: Schema.brand<Schema.String, "@NakafaAI/AksaraSha256Hash">;
|
|
408
|
+
readonly manifestHash: Schema.brand<Schema.String, "@NakafaAI/AksaraSha256Hash">;
|
|
409
|
+
readonly projectionCount: Schema.Finite;
|
|
410
|
+
readonly projectionDigest: Schema.brand<Schema.String, "@NakafaAI/AksaraSha256Hash">;
|
|
411
|
+
readonly releaseId: Schema.brand<Schema.String, "@NakafaAI/AksaraReleaseId">;
|
|
412
|
+
readonly rendererContractVersion: Schema.Literal<"1.0.0">;
|
|
413
|
+
readonly rendererManifestHash: Schema.brand<Schema.String, "@NakafaAI/AksaraSha256Hash">;
|
|
414
|
+
readonly resultCount: Schema.Finite;
|
|
415
|
+
readonly resultDigest: Schema.brand<Schema.String, "@NakafaAI/AksaraSha256Hash">;
|
|
416
|
+
readonly rollbackCount: Schema.Finite;
|
|
417
|
+
readonly rollbackDigest: Schema.brand<Schema.String, "@NakafaAI/AksaraSha256Hash">;
|
|
418
|
+
readonly routeCount: Schema.Finite;
|
|
419
|
+
readonly routeDigest: Schema.brand<Schema.String, "@NakafaAI/AksaraSha256Hash">;
|
|
420
|
+
readonly snapshots: Schema.Struct<{
|
|
421
|
+
readonly program: Schema.Struct<{
|
|
422
|
+
readonly baseSnapshotId: Schema.NullOr<Schema.brand<Schema.String, "@NakafaAI/AksaraSha256Hash">>;
|
|
423
|
+
readonly mode: Schema.Literals<readonly ["inherit", "replace", "restore"]>;
|
|
424
|
+
readonly resultSnapshotId: Schema.NullOr<Schema.brand<Schema.String, "@NakafaAI/AksaraSha256Hash">>;
|
|
425
|
+
readonly rowCount: Schema.Int;
|
|
426
|
+
readonly rowDigest: Schema.brand<Schema.String, "@NakafaAI/AksaraSha256Hash">;
|
|
427
|
+
}>;
|
|
428
|
+
readonly quran: Schema.Struct<{
|
|
429
|
+
readonly baseSnapshotId: Schema.NullOr<Schema.brand<Schema.String, "@NakafaAI/AksaraSha256Hash">>;
|
|
430
|
+
readonly mode: Schema.Literals<readonly ["inherit", "replace", "restore"]>;
|
|
431
|
+
readonly resultSnapshotId: Schema.NullOr<Schema.brand<Schema.String, "@NakafaAI/AksaraSha256Hash">>;
|
|
432
|
+
readonly rowCount: Schema.Int;
|
|
433
|
+
readonly rowDigest: Schema.brand<Schema.String, "@NakafaAI/AksaraSha256Hash">;
|
|
434
|
+
}>;
|
|
435
|
+
readonly tryout: Schema.Struct<{
|
|
436
|
+
readonly baseSnapshotId: Schema.NullOr<Schema.brand<Schema.String, "@NakafaAI/AksaraSha256Hash">>;
|
|
437
|
+
readonly mode: Schema.Literals<readonly ["inherit", "replace", "restore"]>;
|
|
438
|
+
readonly resultSnapshotId: Schema.NullOr<Schema.brand<Schema.String, "@NakafaAI/AksaraSha256Hash">>;
|
|
439
|
+
readonly rowCount: Schema.Int;
|
|
440
|
+
readonly rowDigest: Schema.brand<Schema.String, "@NakafaAI/AksaraSha256Hash">;
|
|
441
|
+
}>;
|
|
442
|
+
}>;
|
|
443
|
+
readonly stagedArtifacts: Schema.Finite;
|
|
444
|
+
readonly stagedRoutes: Schema.Finite;
|
|
445
|
+
readonly stagedSnapshotRows: Schema.Finite;
|
|
446
|
+
readonly upsertHeads: Schema.Finite;
|
|
447
|
+
}>;
|
|
448
|
+
readonly phase: Schema.Literal<"verified">;
|
|
449
|
+
}>]>;
|
|
450
|
+
export type ReleaseVerificationStatus = typeof ReleaseVerificationStatusSchema.Type;
|
|
451
|
+
/** Delta evidence returned after a release is staged and activated. */
|
|
452
|
+
export declare const PublicationReceiptSchema: Schema.Struct<{
|
|
453
|
+
readonly activatedHeads: Schema.Finite;
|
|
454
|
+
readonly activeAppLocales: Schema.NonEmptyArray<Schema.brand<Schema.Literals<readonly ["en", "id", "de"]>, "@NakafaAI/AksaraAppLocale">>;
|
|
455
|
+
readonly deletedHeads: Schema.Finite;
|
|
456
|
+
readonly manifestHash: Schema.brand<Schema.String, "@NakafaAI/AksaraSha256Hash">;
|
|
457
|
+
readonly projectionDigest: Schema.brand<Schema.String, "@NakafaAI/AksaraSha256Hash">;
|
|
458
|
+
readonly releaseId: Schema.brand<Schema.String, "@NakafaAI/AksaraReleaseId">;
|
|
459
|
+
readonly resultCount: Schema.Finite;
|
|
460
|
+
readonly resultDigest: Schema.brand<Schema.String, "@NakafaAI/AksaraSha256Hash">;
|
|
461
|
+
readonly routeDigest: Schema.brand<Schema.String, "@NakafaAI/AksaraSha256Hash">;
|
|
462
|
+
readonly snapshots: Schema.Struct<{
|
|
463
|
+
readonly program: Schema.Struct<{
|
|
464
|
+
readonly baseSnapshotId: Schema.NullOr<Schema.brand<Schema.String, "@NakafaAI/AksaraSha256Hash">>;
|
|
465
|
+
readonly mode: Schema.Literals<readonly ["inherit", "replace", "restore"]>;
|
|
466
|
+
readonly resultSnapshotId: Schema.NullOr<Schema.brand<Schema.String, "@NakafaAI/AksaraSha256Hash">>;
|
|
467
|
+
readonly rowCount: Schema.Int;
|
|
468
|
+
readonly rowDigest: Schema.brand<Schema.String, "@NakafaAI/AksaraSha256Hash">;
|
|
469
|
+
}>;
|
|
470
|
+
readonly quran: Schema.Struct<{
|
|
471
|
+
readonly baseSnapshotId: Schema.NullOr<Schema.brand<Schema.String, "@NakafaAI/AksaraSha256Hash">>;
|
|
472
|
+
readonly mode: Schema.Literals<readonly ["inherit", "replace", "restore"]>;
|
|
473
|
+
readonly resultSnapshotId: Schema.NullOr<Schema.brand<Schema.String, "@NakafaAI/AksaraSha256Hash">>;
|
|
474
|
+
readonly rowCount: Schema.Int;
|
|
475
|
+
readonly rowDigest: Schema.brand<Schema.String, "@NakafaAI/AksaraSha256Hash">;
|
|
476
|
+
}>;
|
|
477
|
+
readonly tryout: Schema.Struct<{
|
|
478
|
+
readonly baseSnapshotId: Schema.NullOr<Schema.brand<Schema.String, "@NakafaAI/AksaraSha256Hash">>;
|
|
479
|
+
readonly mode: Schema.Literals<readonly ["inherit", "replace", "restore"]>;
|
|
480
|
+
readonly resultSnapshotId: Schema.NullOr<Schema.brand<Schema.String, "@NakafaAI/AksaraSha256Hash">>;
|
|
481
|
+
readonly rowCount: Schema.Int;
|
|
482
|
+
readonly rowDigest: Schema.brand<Schema.String, "@NakafaAI/AksaraSha256Hash">;
|
|
483
|
+
}>;
|
|
484
|
+
}>;
|
|
485
|
+
readonly stagedArtifacts: Schema.Finite;
|
|
486
|
+
readonly stagedItems: Schema.Finite;
|
|
487
|
+
readonly stagedProjections: Schema.Finite;
|
|
488
|
+
readonly stagedRoutes: Schema.Finite;
|
|
489
|
+
readonly stagedSnapshotRows: Schema.Finite;
|
|
490
|
+
}>;
|
|
491
|
+
export type PublicationReceipt = typeof PublicationReceiptSchema.Type;
|