@ariestools/aries-dapp-core 0.1.7 → 0.1.9
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/README.md +326 -32
- package/dist/bin/dappServer.mjs +685 -104
- package/dist/node/DappActor.d.ts +28 -7
- package/dist/node/DappActor.d.ts.map +1 -1
- package/dist/node/actor/AbstractActor.d.ts +13 -8
- package/dist/node/actor/AbstractActor.d.ts.map +1 -1
- package/dist/node/actor/types.d.ts +7 -0
- package/dist/node/actor/types.d.ts.map +1 -1
- package/dist/node/bin/dappServer.d.ts +11 -4
- package/dist/node/bin/dappServer.d.ts.map +1 -1
- package/dist/node/bin/loadReducer.d.ts +17 -0
- package/dist/node/bin/loadReducer.d.ts.map +1 -0
- package/dist/node/boot/bootDappActors.d.ts +12 -1
- package/dist/node/boot/bootDappActors.d.ts.map +1 -1
- package/dist/node/consumer/api.d.ts +56 -0
- package/dist/node/consumer/api.d.ts.map +1 -0
- package/dist/node/consumer/hash.d.ts +6 -0
- package/dist/node/consumer/hash.d.ts.map +1 -0
- package/dist/node/consumer/parse.d.ts +18 -0
- package/dist/node/consumer/parse.d.ts.map +1 -0
- package/dist/node/consumer.d.ts +9 -0
- package/dist/node/consumer.d.ts.map +1 -0
- package/dist/node/consumer.mjs +330 -0
- package/dist/node/consumer.mjs.map +7 -0
- package/dist/node/examples/productionComposition.d.ts +118 -0
- package/dist/node/examples/productionComposition.d.ts.map +1 -0
- package/dist/node/index.d.ts +25 -3
- package/dist/node/index.d.ts.map +1 -1
- package/dist/node/index.mjs +1730 -68
- package/dist/node/index.mjs.map +4 -4
- package/dist/node/locator/createDappLocator.d.ts +32 -5
- package/dist/node/locator/createDappLocator.d.ts.map +1 -1
- package/dist/node/providers/DappBucketStore.d.ts +26 -21
- package/dist/node/providers/DappBucketStore.d.ts.map +1 -1
- package/dist/node/providers/capabilities.d.ts +49 -0
- package/dist/node/providers/capabilities.d.ts.map +1 -0
- package/dist/node/providers/errors.d.ts +11 -0
- package/dist/node/providers/errors.d.ts.map +1 -0
- package/dist/node/providers/hashBytes.d.ts +3 -0
- package/dist/node/providers/hashBytes.d.ts.map +1 -0
- package/dist/node/providers/joinKey.d.ts +11 -0
- package/dist/node/providers/joinKey.d.ts.map +1 -0
- package/dist/node/providers/memoryBucketStore.d.ts +14 -0
- package/dist/node/providers/memoryBucketStore.d.ts.map +1 -0
- package/dist/node/providers/types.d.ts +99 -0
- package/dist/node/providers/types.d.ts.map +1 -0
- package/dist/node/publication/canonicalHead.d.ts +7 -0
- package/dist/node/publication/canonicalHead.d.ts.map +1 -0
- package/dist/node/publication/commitHead.d.ts +9 -0
- package/dist/node/publication/commitHead.d.ts.map +1 -0
- package/dist/node/publication/constants.d.ts +27 -0
- package/dist/node/publication/constants.d.ts.map +1 -0
- package/dist/node/publication/gc.d.ts +42 -0
- package/dist/node/publication/gc.d.ts.map +1 -0
- package/dist/node/publication/incremental.d.ts +83 -0
- package/dist/node/publication/incremental.d.ts.map +1 -0
- package/dist/node/publication/publishGeneration.d.ts +18 -0
- package/dist/node/publication/publishGeneration.d.ts.map +1 -0
- package/dist/node/publication/putCreateOnly.d.ts +11 -0
- package/dist/node/publication/putCreateOnly.d.ts.map +1 -0
- package/dist/node/publication/releases.d.ts +49 -0
- package/dist/node/publication/releases.d.ts.map +1 -0
- package/dist/node/publication/safety.d.ts +55 -0
- package/dist/node/publication/safety.d.ts.map +1 -0
- package/dist/node/publication/shard.d.ts +7 -0
- package/dist/node/publication/shard.d.ts.map +1 -0
- package/dist/node/publication/status.d.ts +27 -0
- package/dist/node/publication/status.d.ts.map +1 -0
- package/dist/node/publication/statusPatch.d.ts +10 -0
- package/dist/node/publication/statusPatch.d.ts.map +1 -0
- package/dist/node/publication/types.d.ts +138 -0
- package/dist/node/publication/types.d.ts.map +1 -0
- package/dist/node/publication/writeGenerationObjects.d.ts +5 -0
- package/dist/node/publication/writeGenerationObjects.d.ts.map +1 -0
- package/dist/node/reducer/DappReducer.d.ts +37 -14
- package/dist/node/reducer/DappReducer.d.ts.map +1 -1
- package/examples/countFactsReducer.mjs +96 -0
- package/package.json +16 -8
|
@@ -0,0 +1,330 @@
|
|
|
1
|
+
// src/publication/canonicalHead.ts
|
|
2
|
+
function canonicalHeadBytes(head) {
|
|
3
|
+
const payload = {
|
|
4
|
+
schema: head.schema,
|
|
5
|
+
generation: head.generation,
|
|
6
|
+
manifestKey: head.manifestKey,
|
|
7
|
+
manifestHash: head.manifestHash,
|
|
8
|
+
publishedAt: head.publishedAt
|
|
9
|
+
};
|
|
10
|
+
if (head.previousGeneration !== void 0) {
|
|
11
|
+
payload.previousGeneration = head.previousGeneration;
|
|
12
|
+
}
|
|
13
|
+
if (head.revision !== void 0) payload.revision = head.revision;
|
|
14
|
+
if (head.trust !== void 0) payload.trust = head.trust;
|
|
15
|
+
if (head.layout !== void 0) payload.layout = head.layout;
|
|
16
|
+
const ordered = {};
|
|
17
|
+
for (const key of [
|
|
18
|
+
"schema",
|
|
19
|
+
"generation",
|
|
20
|
+
"manifestKey",
|
|
21
|
+
"manifestHash",
|
|
22
|
+
"publishedAt",
|
|
23
|
+
"previousGeneration",
|
|
24
|
+
"revision",
|
|
25
|
+
"trust",
|
|
26
|
+
"layout"
|
|
27
|
+
]) {
|
|
28
|
+
if (key in payload) ordered[key] = payload[key];
|
|
29
|
+
}
|
|
30
|
+
return new TextEncoder().encode(`${JSON.stringify(ordered)}
|
|
31
|
+
`);
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
// src/publication/constants.ts
|
|
35
|
+
var HEAD_KEY = "head.json";
|
|
36
|
+
var STATUS_KEY = "status.json";
|
|
37
|
+
var PINS_KEY = "pins.json";
|
|
38
|
+
var GENERATIONS_PREFIX = "generations";
|
|
39
|
+
var CAS_PREFIX = "cas/sha256";
|
|
40
|
+
var MAP_ROOTS_PREFIX = "map/roots";
|
|
41
|
+
var MAP_SHARDS_PREFIX = "map/shards";
|
|
42
|
+
var RECEIPTS_PREFIX = "receipts";
|
|
43
|
+
var CACHE_CONTROL_IMMUTABLE = "public, max-age=31536000, immutable";
|
|
44
|
+
var CACHE_CONTROL_REVALIDATE = "public, max-age=0, must-revalidate";
|
|
45
|
+
var GENERATION_MANIFEST_SCHEMA = "network.aries.dapp.generation.manifest";
|
|
46
|
+
var HEAD_MANIFEST_SCHEMA = "network.aries.dapp.head";
|
|
47
|
+
var INDEXER_STATUS_SCHEMA = "network.aries.dapp.indexer.status";
|
|
48
|
+
var PINS_SCHEMA = "network.aries.dapp.pins";
|
|
49
|
+
var MAP_ROOT_SCHEMA = "network.aries.dapp.map.root";
|
|
50
|
+
var MAP_SHARD_SCHEMA = "network.aries.dapp.map.shard";
|
|
51
|
+
var RECEIPT_SCHEMA = "network.aries.dapp.generation.receipt";
|
|
52
|
+
var DEFAULT_SHARD_HEX_CHARS = 2;
|
|
53
|
+
|
|
54
|
+
// src/publication/shard.ts
|
|
55
|
+
function shardIdForKey(logicalKey, hexChars = DEFAULT_SHARD_HEX_CHARS) {
|
|
56
|
+
let h = 2166136261;
|
|
57
|
+
for (let i = 0; i < logicalKey.length; i++) {
|
|
58
|
+
h ^= logicalKey.codePointAt(i);
|
|
59
|
+
h = Math.imul(h, 16777619);
|
|
60
|
+
}
|
|
61
|
+
return (h >>> 0).toString(16).padStart(8, "0").slice(0, hexChars);
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
// src/consumer/hash.ts
|
|
65
|
+
function bytesOf(body) {
|
|
66
|
+
return typeof body === "string" ? new TextEncoder().encode(body) : body;
|
|
67
|
+
}
|
|
68
|
+
function toHex(bytes) {
|
|
69
|
+
let out = "";
|
|
70
|
+
for (const b of bytes) out += b.toString(16).padStart(2, "0");
|
|
71
|
+
return out;
|
|
72
|
+
}
|
|
73
|
+
function requireSubtle() {
|
|
74
|
+
const subtle = globalThis.crypto?.subtle;
|
|
75
|
+
if (subtle === void 0) {
|
|
76
|
+
throw new Error("Web Crypto subtle API is required for consumer hashing");
|
|
77
|
+
}
|
|
78
|
+
return subtle;
|
|
79
|
+
}
|
|
80
|
+
async function hashBytesAsync(body) {
|
|
81
|
+
const data = bytesOf(body);
|
|
82
|
+
const digest = await requireSubtle().digest(
|
|
83
|
+
"SHA-256",
|
|
84
|
+
data.buffer.slice(data.byteOffset, data.byteOffset + data.byteLength)
|
|
85
|
+
);
|
|
86
|
+
return toHex(new Uint8Array(digest));
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
// src/consumer/parse.ts
|
|
90
|
+
function asRecord(value, label) {
|
|
91
|
+
if (value === null || typeof value !== "object" || Array.isArray(value)) {
|
|
92
|
+
throw new Error(`Invalid ${label}: expected object`);
|
|
93
|
+
}
|
|
94
|
+
return value;
|
|
95
|
+
}
|
|
96
|
+
function requireString(obj, key, label) {
|
|
97
|
+
const v = obj[key];
|
|
98
|
+
if (typeof v !== "string" || v.length === 0) {
|
|
99
|
+
throw new Error(`Invalid ${label}: missing string "${key}"`);
|
|
100
|
+
}
|
|
101
|
+
return v;
|
|
102
|
+
}
|
|
103
|
+
function parseHead(json) {
|
|
104
|
+
const obj = asRecord(json, "head");
|
|
105
|
+
if (obj.schema !== HEAD_MANIFEST_SCHEMA) {
|
|
106
|
+
throw new Error(`Invalid head schema: ${String(obj.schema)}`);
|
|
107
|
+
}
|
|
108
|
+
return {
|
|
109
|
+
schema: HEAD_MANIFEST_SCHEMA,
|
|
110
|
+
generation: requireString(obj, "generation", "head"),
|
|
111
|
+
manifestKey: requireString(obj, "manifestKey", "head"),
|
|
112
|
+
manifestHash: requireString(obj, "manifestHash", "head"),
|
|
113
|
+
publishedAt: requireString(obj, "publishedAt", "head"),
|
|
114
|
+
...typeof obj.previousGeneration === "string" && { previousGeneration: obj.previousGeneration },
|
|
115
|
+
...typeof obj.revision === "number" && { revision: obj.revision },
|
|
116
|
+
...obj.trust === "trusted-origin" || obj.trust === "signed" ? { trust: obj.trust } : {},
|
|
117
|
+
...typeof obj.signature === "string" && { signature: obj.signature },
|
|
118
|
+
...obj.layout === "full" || obj.layout === "incremental-cas" ? { layout: obj.layout } : {}
|
|
119
|
+
};
|
|
120
|
+
}
|
|
121
|
+
function parseGenerationManifest(json) {
|
|
122
|
+
const obj = asRecord(json, "manifest");
|
|
123
|
+
if (obj.schema !== GENERATION_MANIFEST_SCHEMA) {
|
|
124
|
+
throw new Error(`Invalid generation manifest schema: ${String(obj.schema)}`);
|
|
125
|
+
}
|
|
126
|
+
if (!Array.isArray(obj.objects)) {
|
|
127
|
+
throw new TypeError("Invalid generation manifest: objects must be an array");
|
|
128
|
+
}
|
|
129
|
+
return obj;
|
|
130
|
+
}
|
|
131
|
+
function parseIndexerStatus(json) {
|
|
132
|
+
const obj = asRecord(json, "status");
|
|
133
|
+
if (obj.schema !== INDEXER_STATUS_SCHEMA) {
|
|
134
|
+
throw new Error(`Invalid status schema: ${String(obj.schema)}`);
|
|
135
|
+
}
|
|
136
|
+
return obj;
|
|
137
|
+
}
|
|
138
|
+
function parseMapRoot(json) {
|
|
139
|
+
const obj = asRecord(json, "map root");
|
|
140
|
+
if (obj.schema !== MAP_ROOT_SCHEMA) {
|
|
141
|
+
throw new Error(`Invalid map root schema: ${String(obj.schema)}`);
|
|
142
|
+
}
|
|
143
|
+
if (obj.shards === null || typeof obj.shards !== "object") {
|
|
144
|
+
throw new Error("Invalid map root: shards must be an object");
|
|
145
|
+
}
|
|
146
|
+
return obj;
|
|
147
|
+
}
|
|
148
|
+
function parseMapShard(json) {
|
|
149
|
+
const obj = asRecord(json, "map shard");
|
|
150
|
+
if (obj.schema !== MAP_SHARD_SCHEMA) {
|
|
151
|
+
throw new Error(`Invalid map shard schema: ${String(obj.schema)}`);
|
|
152
|
+
}
|
|
153
|
+
return obj;
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
// src/consumer/api.ts
|
|
157
|
+
function joinUrl(base, key) {
|
|
158
|
+
const b = base.replace(/\/+$/, "");
|
|
159
|
+
const k = key.replace(/^\/+/, "");
|
|
160
|
+
return `${b}/${k}`;
|
|
161
|
+
}
|
|
162
|
+
async function fetchJson(fetchImpl, url) {
|
|
163
|
+
const res = await fetchImpl(url);
|
|
164
|
+
if (!res.ok) throw new Error(`GET ${url} failed: ${res.status}`);
|
|
165
|
+
return await res.json();
|
|
166
|
+
}
|
|
167
|
+
async function fetchBytes(fetchImpl, url) {
|
|
168
|
+
const res = await fetchImpl(url);
|
|
169
|
+
if (!res.ok) throw new Error(`GET ${url} failed: ${res.status}`);
|
|
170
|
+
return new Uint8Array(await res.arrayBuffer());
|
|
171
|
+
}
|
|
172
|
+
function shardIdForKey2(logicalKey, hexChars = DEFAULT_SHARD_HEX_CHARS) {
|
|
173
|
+
return shardIdForKey(logicalKey, hexChars);
|
|
174
|
+
}
|
|
175
|
+
async function loadFullManifest(fetchImpl, bases, head) {
|
|
176
|
+
const manifestUrl = joinUrl(bases.state, head.manifestKey);
|
|
177
|
+
const manifestBytes = await fetchBytes(fetchImpl, manifestUrl);
|
|
178
|
+
const actual = await hashBytesAsync(manifestBytes);
|
|
179
|
+
if (actual !== head.manifestHash) {
|
|
180
|
+
throw new Error(`Manifest hash mismatch: head=${head.manifestHash} actual=${actual}`);
|
|
181
|
+
}
|
|
182
|
+
const manifest = parseGenerationManifest(JSON.parse(new TextDecoder().decode(manifestBytes)));
|
|
183
|
+
if (manifest.generation !== head.generation) {
|
|
184
|
+
throw new Error("Manifest generation does not match head");
|
|
185
|
+
}
|
|
186
|
+
return manifest;
|
|
187
|
+
}
|
|
188
|
+
async function loadRootShards(fetchImpl, bases, head) {
|
|
189
|
+
const rootUrl = joinUrl(bases.state, head.manifestKey);
|
|
190
|
+
const rootBytes = await fetchBytes(fetchImpl, rootUrl);
|
|
191
|
+
const actual = await hashBytesAsync(rootBytes);
|
|
192
|
+
if (actual !== head.manifestHash) {
|
|
193
|
+
throw new Error(`Root hash mismatch: head=${head.manifestHash} actual=${actual}`);
|
|
194
|
+
}
|
|
195
|
+
return parseMapRoot(JSON.parse(new TextDecoder().decode(rootBytes))).shards;
|
|
196
|
+
}
|
|
197
|
+
async function verifyPublishedView(options) {
|
|
198
|
+
const headUrl = joinUrl(options.bases.state, HEAD_KEY);
|
|
199
|
+
const head = parseHead(await fetchJson(options.fetch, headUrl));
|
|
200
|
+
if (head.trust === "signed") {
|
|
201
|
+
if (options.verifySignature === void 0) {
|
|
202
|
+
throw new Error("Signed head requires verifySignature callback");
|
|
203
|
+
}
|
|
204
|
+
if (head.signature === void 0) throw new Error("Signed head missing signature");
|
|
205
|
+
const ok = await options.verifySignature(canonicalHeadBytes(head), head.signature);
|
|
206
|
+
if (!ok) throw new Error("Head signature verification failed");
|
|
207
|
+
}
|
|
208
|
+
const layout = head.layout === "incremental-cas" ? "incremental-cas" : "full";
|
|
209
|
+
let manifest;
|
|
210
|
+
let rootShards;
|
|
211
|
+
let source;
|
|
212
|
+
if (layout === "full") {
|
|
213
|
+
manifest = await loadFullManifest(options.fetch, options.bases, head);
|
|
214
|
+
source = manifest.source;
|
|
215
|
+
} else {
|
|
216
|
+
rootShards = await loadRootShards(options.fetch, options.bases, head);
|
|
217
|
+
}
|
|
218
|
+
let status;
|
|
219
|
+
if (options.includeStatus === true) {
|
|
220
|
+
try {
|
|
221
|
+
status = parseIndexerStatus(
|
|
222
|
+
await fetchJson(options.fetch, joinUrl(options.bases.state, STATUS_KEY))
|
|
223
|
+
);
|
|
224
|
+
} catch {
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
return {
|
|
228
|
+
head,
|
|
229
|
+
layout,
|
|
230
|
+
...manifest !== void 0 && { manifest },
|
|
231
|
+
...rootShards !== void 0 && { rootShards },
|
|
232
|
+
...source !== void 0 && { source },
|
|
233
|
+
...status !== void 0 && { status }
|
|
234
|
+
};
|
|
235
|
+
}
|
|
236
|
+
async function resolveIncrementalObject(options) {
|
|
237
|
+
const base = options.role === "index" ? options.bases.index ?? options.bases.state : options.bases.state;
|
|
238
|
+
const rootBytes = await fetchBytes(
|
|
239
|
+
options.fetch,
|
|
240
|
+
joinUrl(options.bases.state, options.head.manifestKey)
|
|
241
|
+
);
|
|
242
|
+
if (await hashBytesAsync(rootBytes) !== options.head.manifestHash) {
|
|
243
|
+
throw new Error("Map root hash mismatch");
|
|
244
|
+
}
|
|
245
|
+
const root = parseMapRoot(JSON.parse(new TextDecoder().decode(rootBytes)));
|
|
246
|
+
const sid = shardIdForKey2(options.logicalKey, options.shardHexChars);
|
|
247
|
+
const shardHash = root.shards[sid];
|
|
248
|
+
if (shardHash === void 0) throw new Error(`No shard for key "${options.logicalKey}"`);
|
|
249
|
+
const shardKey = `${MAP_SHARDS_PREFIX}/${shardHash}.json`;
|
|
250
|
+
const shardBytes = await fetchBytes(options.fetch, joinUrl(options.bases.state, shardKey));
|
|
251
|
+
if (await hashBytesAsync(shardBytes) !== shardHash) throw new Error("Shard hash mismatch");
|
|
252
|
+
const shard = parseMapShard(JSON.parse(new TextDecoder().decode(shardBytes)));
|
|
253
|
+
const entry = shard.entries[options.logicalKey];
|
|
254
|
+
if (entry === void 0) throw new Error(`Key not found: ${options.logicalKey}`);
|
|
255
|
+
const casKey = `${CAS_PREFIX}/${entry.hash}`;
|
|
256
|
+
const publicUrl = joinUrl(base, casKey);
|
|
257
|
+
const body = await fetchBytes(options.fetch, publicUrl);
|
|
258
|
+
if (await hashBytesAsync(body) !== entry.hash) {
|
|
259
|
+
throw new Error(`Object hash mismatch for ${options.logicalKey}`);
|
|
260
|
+
}
|
|
261
|
+
return {
|
|
262
|
+
body,
|
|
263
|
+
hash: entry.hash,
|
|
264
|
+
logicalKey: options.logicalKey,
|
|
265
|
+
publicUrl,
|
|
266
|
+
...entry.contentType !== void 0 && { contentType: entry.contentType }
|
|
267
|
+
};
|
|
268
|
+
}
|
|
269
|
+
async function resolveObject(options) {
|
|
270
|
+
const role = options.role ?? "index";
|
|
271
|
+
const head = options.head ?? parseHead(await fetchJson(options.fetch, joinUrl(options.bases.state, HEAD_KEY)));
|
|
272
|
+
const logicalKey = options.logicalKey.replaceAll(/^\/+/g, "");
|
|
273
|
+
if (head.layout === "incremental-cas") {
|
|
274
|
+
return await resolveIncrementalObject({
|
|
275
|
+
bases: options.bases,
|
|
276
|
+
fetch: options.fetch,
|
|
277
|
+
head,
|
|
278
|
+
logicalKey,
|
|
279
|
+
role,
|
|
280
|
+
...options.shardHexChars !== void 0 && { shardHexChars: options.shardHexChars }
|
|
281
|
+
});
|
|
282
|
+
}
|
|
283
|
+
const manifest = await loadFullManifest(options.fetch, options.bases, head);
|
|
284
|
+
const ref = manifest.objects.find((o) => o.role === role && (o.key === logicalKey || o.key.endsWith(`/${logicalKey}`) || o.key === `${GENERATIONS_PREFIX}/${head.generation}/${logicalKey}`));
|
|
285
|
+
if (ref === void 0) throw new Error(`Key not found in full manifest: ${logicalKey}`);
|
|
286
|
+
const objectBase = ref.role === "index" ? options.bases.index ?? options.bases.state : options.bases.state;
|
|
287
|
+
const publicUrl = ref.publicUrl ?? joinUrl(objectBase, ref.key);
|
|
288
|
+
const body = await fetchBytes(options.fetch, publicUrl);
|
|
289
|
+
if (await hashBytesAsync(body) !== ref.hash) {
|
|
290
|
+
throw new Error(`Object hash mismatch for ${logicalKey}`);
|
|
291
|
+
}
|
|
292
|
+
return {
|
|
293
|
+
body,
|
|
294
|
+
hash: ref.hash,
|
|
295
|
+
logicalKey,
|
|
296
|
+
publicUrl,
|
|
297
|
+
...ref.contentType !== void 0 && { contentType: ref.contentType }
|
|
298
|
+
};
|
|
299
|
+
}
|
|
300
|
+
export {
|
|
301
|
+
CACHE_CONTROL_IMMUTABLE,
|
|
302
|
+
CACHE_CONTROL_REVALIDATE,
|
|
303
|
+
CAS_PREFIX,
|
|
304
|
+
DEFAULT_SHARD_HEX_CHARS,
|
|
305
|
+
GENERATIONS_PREFIX,
|
|
306
|
+
GENERATION_MANIFEST_SCHEMA,
|
|
307
|
+
HEAD_KEY,
|
|
308
|
+
HEAD_MANIFEST_SCHEMA,
|
|
309
|
+
INDEXER_STATUS_SCHEMA,
|
|
310
|
+
MAP_ROOTS_PREFIX,
|
|
311
|
+
MAP_ROOT_SCHEMA,
|
|
312
|
+
MAP_SHARDS_PREFIX,
|
|
313
|
+
MAP_SHARD_SCHEMA,
|
|
314
|
+
PINS_KEY,
|
|
315
|
+
PINS_SCHEMA,
|
|
316
|
+
RECEIPTS_PREFIX,
|
|
317
|
+
RECEIPT_SCHEMA,
|
|
318
|
+
STATUS_KEY,
|
|
319
|
+
canonicalHeadBytes,
|
|
320
|
+
hashBytesAsync,
|
|
321
|
+
parseGenerationManifest,
|
|
322
|
+
parseHead,
|
|
323
|
+
parseIndexerStatus,
|
|
324
|
+
parseMapRoot,
|
|
325
|
+
parseMapShard,
|
|
326
|
+
resolveObject,
|
|
327
|
+
shardIdForKey2 as shardIdForKey,
|
|
328
|
+
verifyPublishedView
|
|
329
|
+
};
|
|
330
|
+
//# sourceMappingURL=consumer.mjs.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/publication/canonicalHead.ts", "../../src/publication/constants.ts", "../../src/publication/shard.ts", "../../src/consumer/hash.ts", "../../src/consumer/parse.ts", "../../src/consumer/api.ts"],
|
|
4
|
+
"sourcesContent": ["import type { HeadManifest } from './types.ts'\n\n/**\n * Canonical UTF-8 JSON bytes for head signing/verification. Excludes\n * `signature` and uses a fixed field order so Node and browser agree.\n */\nexport function canonicalHeadBytes(head: HeadManifest): Uint8Array {\n const payload: Record<string, unknown> = {\n schema: head.schema,\n generation: head.generation,\n manifestKey: head.manifestKey,\n manifestHash: head.manifestHash,\n publishedAt: head.publishedAt,\n }\n if (head.previousGeneration !== undefined) {\n payload.previousGeneration = head.previousGeneration\n }\n if (head.revision !== undefined) payload.revision = head.revision\n if (head.trust !== undefined) payload.trust = head.trust\n if (head.layout !== undefined) payload.layout = head.layout\n // Stable key order via explicit construction above (not Object key enum order).\n const ordered: Record<string, unknown> = {}\n for (const key of [\n 'schema',\n 'generation',\n 'manifestKey',\n 'manifestHash',\n 'publishedAt',\n 'previousGeneration',\n 'revision',\n 'trust',\n 'layout',\n ]) {\n if (key in payload) ordered[key] = payload[key]\n }\n return new TextEncoder().encode(`${JSON.stringify(ordered)}\\n`)\n}\n", "/** Well-known relative keys published by the coherent generation protocol. */\nexport const HEAD_KEY = 'head.json'\nexport const STATUS_KEY = 'status.json'\nexport const PINS_KEY = 'pins.json'\nexport const GENERATIONS_PREFIX = 'generations'\n/** Content-addressed object bodies (incremental layout). */\nexport const CAS_PREFIX = 'cas/sha256'\n/** Sharded logical map roots (incremental layout). */\nexport const MAP_ROOTS_PREFIX = 'map/roots'\n/** Sharded logical map shards (incremental layout). */\nexport const MAP_SHARDS_PREFIX = 'map/shards'\n/** Small generation receipts for incremental layout. */\nexport const RECEIPTS_PREFIX = 'receipts'\n\n/** CDN caching: immutable generation objects and manifests. */\nexport const CACHE_CONTROL_IMMUTABLE = 'public, max-age=31536000, immutable'\n/** CDN caching: mutable head and status objects that must revalidate. */\nexport const CACHE_CONTROL_REVALIDATE = 'public, max-age=0, must-revalidate'\n\nexport const GENERATION_MANIFEST_SCHEMA = 'network.aries.dapp.generation.manifest' as const\nexport const HEAD_MANIFEST_SCHEMA = 'network.aries.dapp.head' as const\nexport const INDEXER_STATUS_SCHEMA = 'network.aries.dapp.indexer.status' as const\nexport const PINS_SCHEMA = 'network.aries.dapp.pins' as const\nexport const MAP_ROOT_SCHEMA = 'network.aries.dapp.map.root' as const\nexport const MAP_SHARD_SCHEMA = 'network.aries.dapp.map.shard' as const\nexport const RECEIPT_SCHEMA = 'network.aries.dapp.generation.receipt' as const\n\n/** Default shard width: first 2 hex chars of sha256(logicalKey) \u2192 256 shards. */\nexport const DEFAULT_SHARD_HEX_CHARS = 2\n", "import { DEFAULT_SHARD_HEX_CHARS } from './constants.ts'\n\n/**\n * Shard routing id for a logical key. FNV-1a 32-bit, hex-padded \u2014 used only to\n * partition the logical map (not for content integrity). Must match between\n * writer and browser consumer (no crypto required).\n */\nexport function shardIdForKey(logicalKey: string, hexChars = DEFAULT_SHARD_HEX_CHARS): string {\n let h = 0x81_1C_9D_C5\n for (let i = 0; i < logicalKey.length; i++) {\n h ^= logicalKey.codePointAt(i)!\n h = Math.imul(h, 0x01_00_01_93)\n }\n return (h >>> 0).toString(16).padStart(8, '0').slice(0, hexChars)\n}\n", "/**\n * Browser-neutral SHA-256 via Web Crypto (`crypto.subtle`).\n * Available in modern browsers and Node \u226518 without Node crypto modules.\n */\n\nfunction bytesOf(body: string | Uint8Array): Uint8Array {\n return typeof body === 'string' ? new TextEncoder().encode(body) : body\n}\n\nfunction toHex(bytes: Uint8Array): string {\n let out = ''\n for (const b of bytes) out += b.toString(16).padStart(2, '0')\n return out\n}\n\nfunction requireSubtle(): SubtleCrypto {\n const subtle = globalThis.crypto?.subtle\n if (subtle === undefined) {\n throw new Error('Web Crypto subtle API is required for consumer hashing')\n }\n return subtle\n}\n\nexport async function hashBytesAsync(body: string | Uint8Array): Promise<string> {\n const data = bytesOf(body)\n const digest = await requireSubtle().digest(\n 'SHA-256',\n data.buffer.slice(data.byteOffset, data.byteOffset + data.byteLength) as ArrayBuffer,\n )\n return toHex(new Uint8Array(digest))\n}\n", "import {\n GENERATION_MANIFEST_SCHEMA,\n HEAD_MANIFEST_SCHEMA,\n INDEXER_STATUS_SCHEMA,\n MAP_ROOT_SCHEMA,\n MAP_SHARD_SCHEMA,\n} from '../publication/constants.ts'\nimport type {\n GenerationManifest, HeadManifest, IndexerStatus,\n} from '../publication/types.ts'\n\nfunction asRecord(value: unknown, label: string): Record<string, unknown> {\n if (value === null || typeof value !== 'object' || Array.isArray(value)) {\n throw new Error(`Invalid ${label}: expected object`)\n }\n return value as Record<string, unknown>\n}\n\nfunction requireString(obj: Record<string, unknown>, key: string, label: string): string {\n const v = obj[key]\n if (typeof v !== 'string' || v.length === 0) {\n throw new Error(`Invalid ${label}: missing string \"${key}\"`)\n }\n return v\n}\n\nexport function parseHead(json: unknown): HeadManifest {\n const obj = asRecord(json, 'head')\n if (obj.schema !== HEAD_MANIFEST_SCHEMA) {\n throw new Error(`Invalid head schema: ${String(obj.schema)}`)\n }\n return {\n schema: HEAD_MANIFEST_SCHEMA,\n generation: requireString(obj, 'generation', 'head'),\n manifestKey: requireString(obj, 'manifestKey', 'head'),\n manifestHash: requireString(obj, 'manifestHash', 'head'),\n publishedAt: requireString(obj, 'publishedAt', 'head'),\n ...(typeof obj.previousGeneration === 'string'\n && { previousGeneration: obj.previousGeneration }),\n ...(typeof obj.revision === 'number' && { revision: obj.revision }),\n ...(obj.trust === 'trusted-origin' || obj.trust === 'signed'\n ? { trust: obj.trust }\n : {}),\n ...(typeof obj.signature === 'string' && { signature: obj.signature }),\n ...(obj.layout === 'full' || obj.layout === 'incremental-cas'\n ? { layout: obj.layout }\n : {}),\n }\n}\n\nexport function parseGenerationManifest(json: unknown): GenerationManifest {\n const obj = asRecord(json, 'manifest')\n if (obj.schema !== GENERATION_MANIFEST_SCHEMA) {\n throw new Error(`Invalid generation manifest schema: ${String(obj.schema)}`)\n }\n if (!Array.isArray(obj.objects)) {\n throw new TypeError('Invalid generation manifest: objects must be an array')\n }\n return obj as unknown as GenerationManifest\n}\n\nexport function parseIndexerStatus(json: unknown): IndexerStatus {\n const obj = asRecord(json, 'status')\n if (obj.schema !== INDEXER_STATUS_SCHEMA) {\n throw new Error(`Invalid status schema: ${String(obj.schema)}`)\n }\n return obj as unknown as IndexerStatus\n}\n\nexport function parseMapRoot(json: unknown): {\n schema: typeof MAP_ROOT_SCHEMA\n shards: Record<string, string>\n} {\n const obj = asRecord(json, 'map root')\n if (obj.schema !== MAP_ROOT_SCHEMA) {\n throw new Error(`Invalid map root schema: ${String(obj.schema)}`)\n }\n if (obj.shards === null || typeof obj.shards !== 'object') {\n throw new Error('Invalid map root: shards must be an object')\n }\n return obj as {\n schema: typeof MAP_ROOT_SCHEMA\n shards: Record<string, string>\n }\n}\n\nexport function parseMapShard(json: unknown): {\n entries: Record<string, { contentType?: string; hash: string; size: number }>\n schema: typeof MAP_SHARD_SCHEMA\n} {\n const obj = asRecord(json, 'map shard')\n if (obj.schema !== MAP_SHARD_SCHEMA) {\n throw new Error(`Invalid map shard schema: ${String(obj.schema)}`)\n }\n return obj as {\n entries: Record<string, { contentType?: string; hash: string; size: number }>\n schema: typeof MAP_SHARD_SCHEMA\n }\n}\n", "import { canonicalHeadBytes } from '../publication/canonicalHead.ts'\nimport {\n CAS_PREFIX,\n DEFAULT_SHARD_HEX_CHARS,\n GENERATIONS_PREFIX,\n HEAD_KEY,\n MAP_SHARDS_PREFIX,\n STATUS_KEY,\n} from '../publication/constants.ts'\nimport { shardIdForKey as routeShard } from '../publication/shard.ts'\nimport type {\n GenerationManifest, HeadManifest, IndexerStatus,\n} from '../publication/types.ts'\nimport { hashBytesAsync } from './hash.ts'\nimport {\n parseGenerationManifest,\n parseHead,\n parseIndexerStatus,\n parseMapRoot,\n parseMapShard,\n} from './parse.ts'\n\nexport type FetchLike = (input: string, init?: { method?: string }) => Promise<{\n ok: boolean\n status: number\n arrayBuffer(): Promise<ArrayBuffer>\n json(): Promise<unknown>\n text(): Promise<string>\n}>\n\nexport interface PublicBases {\n index?: string\n state: string\n}\n\nexport interface VerifyPublishedViewResult {\n head: HeadManifest\n layout: 'full' | 'incremental-cas'\n manifest?: GenerationManifest\n rootShards?: Record<string, string>\n source?: GenerationManifest['source']\n status?: IndexerStatus\n}\n\nexport interface ResolveObjectResult {\n body: Uint8Array\n contentType?: string\n hash: string\n logicalKey: string\n publicUrl: string\n}\n\nfunction joinUrl(base: string, key: string): string {\n const b = base.replace(/\\/+$/, '')\n const k = key.replace(/^\\/+/, '')\n return `${b}/${k}`\n}\n\nasync function fetchJson(fetchImpl: FetchLike, url: string): Promise<unknown> {\n const res = await fetchImpl(url)\n if (!res.ok) throw new Error(`GET ${url} failed: ${res.status}`)\n return await res.json()\n}\n\nasync function fetchBytes(fetchImpl: FetchLike, url: string): Promise<Uint8Array> {\n const res = await fetchImpl(url)\n if (!res.ok) throw new Error(`GET ${url} failed: ${res.status}`)\n return new Uint8Array(await res.arrayBuffer())\n}\n\nexport function shardIdForKey(logicalKey: string, hexChars = DEFAULT_SHARD_HEX_CHARS): string {\n return routeShard(logicalKey, hexChars)\n}\n\nexport {\n hashBytesAsync,\n parseGenerationManifest,\n parseHead,\n parseIndexerStatus,\n parseMapRoot,\n parseMapShard,\n}\n\nasync function loadFullManifest(\n fetchImpl: FetchLike,\n bases: PublicBases,\n head: HeadManifest,\n): Promise<GenerationManifest> {\n const manifestUrl = joinUrl(bases.state, head.manifestKey)\n const manifestBytes = await fetchBytes(fetchImpl, manifestUrl)\n const actual = await hashBytesAsync(manifestBytes)\n if (actual !== head.manifestHash) {\n throw new Error(`Manifest hash mismatch: head=${head.manifestHash} actual=${actual}`)\n }\n const manifest = parseGenerationManifest(JSON.parse(new TextDecoder().decode(manifestBytes)))\n if (manifest.generation !== head.generation) {\n throw new Error('Manifest generation does not match head')\n }\n return manifest\n}\n\nasync function loadRootShards(\n fetchImpl: FetchLike,\n bases: PublicBases,\n head: HeadManifest,\n): Promise<Record<string, string>> {\n const rootUrl = joinUrl(bases.state, head.manifestKey)\n const rootBytes = await fetchBytes(fetchImpl, rootUrl)\n const actual = await hashBytesAsync(rootBytes)\n if (actual !== head.manifestHash) {\n throw new Error(`Root hash mismatch: head=${head.manifestHash} actual=${actual}`)\n }\n return parseMapRoot(JSON.parse(new TextDecoder().decode(rootBytes))).shards\n}\n\n/**\n * Fetch head (+ optional status), verify manifest/root integrity, optional\n * signature check. Does not download the full object set.\n */\nexport async function verifyPublishedView(options: {\n bases: PublicBases\n fetch: FetchLike\n includeStatus?: boolean\n verifySignature?: (canonical: Uint8Array, signature: string) => boolean | Promise<boolean>\n}): Promise<VerifyPublishedViewResult> {\n const headUrl = joinUrl(options.bases.state, HEAD_KEY)\n const head = parseHead(await fetchJson(options.fetch, headUrl))\n if (head.trust === 'signed') {\n if (options.verifySignature === undefined) {\n throw new Error('Signed head requires verifySignature callback')\n }\n if (head.signature === undefined) throw new Error('Signed head missing signature')\n const ok = await options.verifySignature(canonicalHeadBytes(head), head.signature)\n if (!ok) throw new Error('Head signature verification failed')\n }\n\n const layout = head.layout === 'incremental-cas' ? 'incremental-cas' : 'full'\n let manifest: GenerationManifest | undefined\n let rootShards: Record<string, string> | undefined\n let source: GenerationManifest['source'] | undefined\n\n if (layout === 'full') {\n manifest = await loadFullManifest(options.fetch, options.bases, head)\n source = manifest.source\n } else {\n rootShards = await loadRootShards(options.fetch, options.bases, head)\n }\n\n let status: IndexerStatus | undefined\n if (options.includeStatus === true) {\n try {\n status = parseIndexerStatus(\n await fetchJson(options.fetch, joinUrl(options.bases.state, STATUS_KEY)),\n )\n } catch {\n // status optional\n }\n }\n\n return {\n head,\n layout,\n ...(manifest !== undefined && { manifest }),\n ...(rootShards !== undefined && { rootShards }),\n ...(source !== undefined && { source }),\n ...(status !== undefined && { status }),\n }\n}\n\nasync function resolveIncrementalObject(options: {\n bases: PublicBases\n fetch: FetchLike\n head: HeadManifest\n logicalKey: string\n role: 'state' | 'index'\n shardHexChars?: number\n}): Promise<ResolveObjectResult> {\n const base = options.role === 'index'\n ? (options.bases.index ?? options.bases.state)\n : options.bases.state\n const rootBytes = await fetchBytes(\n options.fetch,\n joinUrl(options.bases.state, options.head.manifestKey),\n )\n if (await hashBytesAsync(rootBytes) !== options.head.manifestHash) {\n throw new Error('Map root hash mismatch')\n }\n const root = parseMapRoot(JSON.parse(new TextDecoder().decode(rootBytes)))\n const sid = shardIdForKey(options.logicalKey, options.shardHexChars)\n const shardHash = root.shards[sid]\n if (shardHash === undefined) throw new Error(`No shard for key \"${options.logicalKey}\"`)\n const shardKey = `${MAP_SHARDS_PREFIX}/${shardHash}.json`\n const shardBytes = await fetchBytes(options.fetch, joinUrl(options.bases.state, shardKey))\n if (await hashBytesAsync(shardBytes) !== shardHash) throw new Error('Shard hash mismatch')\n const shard = parseMapShard(JSON.parse(new TextDecoder().decode(shardBytes)))\n const entry = shard.entries[options.logicalKey]\n if (entry === undefined) throw new Error(`Key not found: ${options.logicalKey}`)\n const casKey = `${CAS_PREFIX}/${entry.hash}`\n const publicUrl = joinUrl(base, casKey)\n const body = await fetchBytes(options.fetch, publicUrl)\n if (await hashBytesAsync(body) !== entry.hash) {\n throw new Error(`Object hash mismatch for ${options.logicalKey}`)\n }\n return {\n body,\n hash: entry.hash,\n logicalKey: options.logicalKey,\n publicUrl,\n ...(entry.contentType !== undefined && { contentType: entry.contentType }),\n }\n}\n\n/**\n * Resolve and verify a single logical object under the current head without\n * downloading a full-generation object list (incremental: root+shard+cas).\n */\nexport async function resolveObject(options: {\n bases: PublicBases\n fetch: FetchLike\n head?: HeadManifest\n logicalKey: string\n role?: 'state' | 'index'\n shardHexChars?: number\n}): Promise<ResolveObjectResult> {\n const role = options.role ?? 'index'\n const head = options.head\n ?? parseHead(await fetchJson(options.fetch, joinUrl(options.bases.state, HEAD_KEY)))\n const logicalKey = options.logicalKey.replaceAll(/^\\/+/g, '')\n\n if (head.layout === 'incremental-cas') {\n return await resolveIncrementalObject({\n bases: options.bases,\n fetch: options.fetch,\n head,\n logicalKey,\n role,\n ...(options.shardHexChars !== undefined && { shardHexChars: options.shardHexChars }),\n })\n }\n\n const manifest = await loadFullManifest(options.fetch, options.bases, head)\n const ref = manifest.objects.find(o =>\n o.role === role && (o.key === logicalKey || o.key.endsWith(`/${logicalKey}`)\n || o.key === `${GENERATIONS_PREFIX}/${head.generation}/${logicalKey}`))\n if (ref === undefined) throw new Error(`Key not found in full manifest: ${logicalKey}`)\n const objectBase = ref.role === 'index'\n ? (options.bases.index ?? options.bases.state)\n : options.bases.state\n const publicUrl = ref.publicUrl ?? joinUrl(objectBase, ref.key)\n const body = await fetchBytes(options.fetch, publicUrl)\n if (await hashBytesAsync(body) !== ref.hash) {\n throw new Error(`Object hash mismatch for ${logicalKey}`)\n }\n return {\n body,\n hash: ref.hash,\n logicalKey,\n publicUrl,\n ...(ref.contentType !== undefined && { contentType: ref.contentType }),\n }\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["shardIdForKey", "shardIdForKey"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Project-owned **production** composition example (documentation / type-check only).
|
|
3
|
+
*
|
|
4
|
+
* This is **not** the local `aries dapp up` / `aries-dapp-server` path.
|
|
5
|
+
* For local dev with a pluggable reducer, use:
|
|
6
|
+
*
|
|
7
|
+
* aries dapp up --reducer ./dist/indexer.mjs
|
|
8
|
+
*
|
|
9
|
+
* For production: copy this pattern into your application entrypoint. dapp-core
|
|
10
|
+
* stays application-neutral: you supply the reducer, store bindings, credentials,
|
|
11
|
+
* and any XL1/gateway readers. There is no inbound public listener and no
|
|
12
|
+
* application authority/signing seed stored in dapp-core.
|
|
13
|
+
*
|
|
14
|
+
* ```ts
|
|
15
|
+
* import { S3Client } from '@aws-sdk/client-s3'
|
|
16
|
+
* import {
|
|
17
|
+
* bootDappActors,
|
|
18
|
+
* createDappLocator,
|
|
19
|
+
* publishGeneration,
|
|
20
|
+
* type DappReducer,
|
|
21
|
+
* } from '@ariestools/aries-dapp-core'
|
|
22
|
+
*
|
|
23
|
+
* const client = new S3Client({
|
|
24
|
+
* region: 'auto',
|
|
25
|
+
* endpoint: `https://${process.env.R2_ACCOUNT_ID}.r2.cloudflarestorage.com`,
|
|
26
|
+
* forcePathStyle: true,
|
|
27
|
+
* credentials: {
|
|
28
|
+
* accessKeyId: process.env.R2_ACCESS_KEY_ID!,
|
|
29
|
+
* secretAccessKey: process.env.R2_SECRET_ACCESS_KEY!,
|
|
30
|
+
* },
|
|
31
|
+
* })
|
|
32
|
+
*
|
|
33
|
+
* // Never log credentials. Prefer env / IAM / secret manager injection.
|
|
34
|
+
* const locator = createDappLocator({
|
|
35
|
+
* client,
|
|
36
|
+
* ownClient: true,
|
|
37
|
+
* bindings: {
|
|
38
|
+
* // One physical bucket with three prefixes — or three distinct buckets.
|
|
39
|
+
* data: {
|
|
40
|
+
* bucket: 'my-dapp',
|
|
41
|
+
* prefix: 'data',
|
|
42
|
+
* publicBaseUrl: 'https://cdn.example.com/data',
|
|
43
|
+
* },
|
|
44
|
+
* state: {
|
|
45
|
+
* bucket: 'my-dapp',
|
|
46
|
+
* prefix: 'state',
|
|
47
|
+
* publicBaseUrl: 'https://cdn.example.com/state',
|
|
48
|
+
* },
|
|
49
|
+
* index: {
|
|
50
|
+
* bucket: 'my-dapp',
|
|
51
|
+
* prefix: 'index',
|
|
52
|
+
* publicBaseUrl: 'https://cdn.example.com/index',
|
|
53
|
+
* },
|
|
54
|
+
* },
|
|
55
|
+
* })
|
|
56
|
+
*
|
|
57
|
+
* const reducer: DappReducer = {
|
|
58
|
+
* name: 'my-app-indexer',
|
|
59
|
+
* version: '1',
|
|
60
|
+
* async reduce({ data, state, index, signal, logger }) {
|
|
61
|
+
* // Read authoritative sources (data role and/or XL1 gateway), derive
|
|
62
|
+
* // projections, then publish as one generation with head written last.
|
|
63
|
+
* const published = await publishGeneration({
|
|
64
|
+
* state,
|
|
65
|
+
* index,
|
|
66
|
+
* reducer: { name: 'my-app-indexer', version: '1' },
|
|
67
|
+
* source: { cursor: '...', completedPosition: '...', observedHead: '...' },
|
|
68
|
+
* stateObjects: [{ key: 'view.json', body: '{}', contentType: 'application/json' }],
|
|
69
|
+
* indexObjects: [{ key: 'by-id.json', body: '{}', contentType: 'application/json' }],
|
|
70
|
+
* signal,
|
|
71
|
+
* })
|
|
72
|
+
* logger.info(`published generation ${published.generation}`)
|
|
73
|
+
* return {
|
|
74
|
+
* cursor: '...',
|
|
75
|
+
* lastCompletedPosition: '...',
|
|
76
|
+
* observedSourceHead: '...',
|
|
77
|
+
* generation: published.generation,
|
|
78
|
+
* generationRoot: published.manifestKey,
|
|
79
|
+
* }
|
|
80
|
+
* },
|
|
81
|
+
* }
|
|
82
|
+
*
|
|
83
|
+
* const actors = await bootDappActors(locator, [{
|
|
84
|
+
* name: 'MyIndexer',
|
|
85
|
+
* reducer,
|
|
86
|
+
* firstRunDelayMs: 1_000,
|
|
87
|
+
* reduceIntervalMs: 15_000,
|
|
88
|
+
* maxConsecutiveFailures: 10,
|
|
89
|
+
* publishStatus: true,
|
|
90
|
+
* }])
|
|
91
|
+
*
|
|
92
|
+
* const shutdown = async () => {
|
|
93
|
+
* for (const actor of actors) await actor.stop()
|
|
94
|
+
* locator.destroy()
|
|
95
|
+
* }
|
|
96
|
+
* process.on('SIGTERM', () => { void shutdown() })
|
|
97
|
+
* ```
|
|
98
|
+
*
|
|
99
|
+
* ## Opt-in Cloudflare R2 contract test
|
|
100
|
+
*
|
|
101
|
+
* Ordinary CI must not require R2 secrets. When credentials are available:
|
|
102
|
+
*
|
|
103
|
+
* ```sh
|
|
104
|
+
* export DAPP_R2_CONTRACT_TEST=1
|
|
105
|
+
* export R2_ACCOUNT_ID=...
|
|
106
|
+
* export R2_ACCESS_KEY_ID=...
|
|
107
|
+
* export R2_SECRET_ACCESS_KEY=...
|
|
108
|
+
* export R2_BUCKET=...
|
|
109
|
+
* # optional: R2_PUBLIC_BASE_URL=https://pub-....r2.dev
|
|
110
|
+
* pnpm xy test @ariestools/aries-dapp-core
|
|
111
|
+
* ```
|
|
112
|
+
*
|
|
113
|
+
* The suite file `src/spec/r2.contract.spec.ts` skips unless
|
|
114
|
+
* `DAPP_R2_CONTRACT_TEST=1`. It writes under a unique prefix, verifies
|
|
115
|
+
* generation/head/status, and cleans up.
|
|
116
|
+
*/
|
|
117
|
+
export {};
|
|
118
|
+
//# sourceMappingURL=productionComposition.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"productionComposition.d.ts","sourceRoot":"","sources":["../../../src/examples/productionComposition.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmHG;AAEH,OAAO,EAAE,CAAA"}
|
package/dist/node/index.d.ts
CHANGED
|
@@ -6,9 +6,31 @@ export type { DappActorParams } from './DappActor.ts';
|
|
|
6
6
|
export { DappActor } from './DappActor.ts';
|
|
7
7
|
export type { CreateDappLocatorOptions } from './locator/createDappLocator.ts';
|
|
8
8
|
export { createDappLocator } from './locator/createDappLocator.ts';
|
|
9
|
-
export type { DappBucketStore, S3DappBucketStoreOptions } from './providers/DappBucketStore.ts';
|
|
10
|
-
export { createS3BucketStore } from './providers/DappBucketStore.ts';
|
|
9
|
+
export type { DappBucketStore, DappObjectReader, DappObjectWriter, LegacyS3DappBucketStoreOptions, ResolvedS3Client, S3DappBucketStoreOptions, } from './providers/DappBucketStore.ts';
|
|
10
|
+
export { asReadOnly, asReadOnlyWriter, createS3BucketStore, ReadOnlyStoreError, resolveS3Client, } from './providers/DappBucketStore.ts';
|
|
11
|
+
export { ConditionalWriteError, isConditionalWriteError } from './providers/errors.ts';
|
|
12
|
+
export { hashBytes } from './providers/hashBytes.ts';
|
|
13
|
+
export { joinKey, normalizePublicBaseUrl, stripPrefix, } from './providers/joinKey.ts';
|
|
14
|
+
export type { MemoryBucketStoreOptions } from './providers/memoryBucketStore.ts';
|
|
15
|
+
export { createMemoryBucketStore } from './providers/memoryBucketStore.ts';
|
|
11
16
|
export { DappDataStoreMoniker, DappIndexStoreMoniker, DappStateStoreMoniker, } from './providers/monikers.ts';
|
|
12
|
-
export type {
|
|
17
|
+
export type { DappStoreBinding, DappStoreBindings, DappStoreRole, GetObjectResult, ListPage, ListPageOptions, ObjectMeta, PutObjectOptions, PutObjectResult, S3ClientConfig, } from './providers/types.ts';
|
|
18
|
+
export { DAPP_STORE_ROLES } from './providers/types.ts';
|
|
19
|
+
export { canonicalHeadBytes } from './publication/canonicalHead.ts';
|
|
20
|
+
export { CACHE_CONTROL_IMMUTABLE, CACHE_CONTROL_REVALIDATE, CAS_PREFIX, DEFAULT_SHARD_HEX_CHARS, GENERATION_MANIFEST_SCHEMA, GENERATIONS_PREFIX, HEAD_KEY, HEAD_MANIFEST_SCHEMA, INDEXER_STATUS_SCHEMA, MAP_ROOT_SCHEMA, MAP_ROOTS_PREFIX, MAP_SHARD_SCHEMA, MAP_SHARDS_PREFIX, PINS_KEY, PINS_SCHEMA, RECEIPT_SCHEMA, RECEIPTS_PREFIX, STATUS_KEY, } from './publication/constants.ts';
|
|
21
|
+
export type { GcKeyRef, GcPlan, GcRunResult, RetentionPolicy, } from './publication/gc.ts';
|
|
22
|
+
export { planGarbageCollection, runGarbageCollection } from './publication/gc.ts';
|
|
23
|
+
export type { GenerationReceipt, MapRoot, MapShard, PublishIncrementalInput, PublishIncrementalResult, } from './publication/incremental.ts';
|
|
24
|
+
export { publishIncremental, shardIdForKey } from './publication/incremental.ts';
|
|
25
|
+
export { publishGeneration, readPublishedHead } from './publication/publishGeneration.ts';
|
|
26
|
+
export { putCreateOnly } from './publication/putCreateOnly.ts';
|
|
27
|
+
export type { PinsDocument, ReleasePin, ReleaseSummary, RollbackHeadInput, } from './publication/releases.ts';
|
|
28
|
+
export { listPins, listReleases, pinRelease, rollbackHead, unpinRelease, } from './publication/releases.ts';
|
|
29
|
+
export type { LeaseHandle, PublicationCapabilities, PublicationConflict, PublicationConflictKind, PublicationLease, PublicationSafety, PublicationTrust, } from './publication/safety.ts';
|
|
30
|
+
export { assertPublicationSafety, probePublicationCapabilities } from './publication/safety.ts';
|
|
31
|
+
export type { WriteIndexerStatusInput } from './publication/status.ts';
|
|
32
|
+
export { readIndexerStatus, writeIndexerStatus } from './publication/status.ts';
|
|
33
|
+
export type { GenerationManifest, GenerationObjectRef, HeadManifest, IndexerStatus, PublicationLayout, PublishGenerationConflict, PublishGenerationInput, PublishGenerationResult, PublishGenerationSuccess, PublishObjectInput, } from './publication/types.ts';
|
|
34
|
+
export type { DappReduceContext, DappReduceProgress, DappReducer, } from './reducer/DappReducer.ts';
|
|
13
35
|
export { noopReducer } from './reducer/DappReducer.ts';
|
|
14
36
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/node/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAA;AACxD,YAAY,EACV,WAAW,EAAE,WAAW,EAAE,WAAW,EAAE,mBAAmB,EAAE,UAAU,GACvE,MAAM,kBAAkB,CAAA;AACzB,YAAY,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAA;AAC7D,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAA;AACzD,YAAY,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAA;AACrD,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAC1C,YAAY,EAAE,wBAAwB,EAAE,MAAM,gCAAgC,CAAA;AAC9E,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAA;AAClE,YAAY,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
|