@amalgm/live 0.2.59 → 0.2.60
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/PURPOSE.md +17 -5
- package/dist/transfer/download.d.ts +65 -25
- package/dist/transfer/download.d.ts.map +1 -1
- package/dist/transfer/download.js +339 -84
- package/dist/transfer/download.js.map +1 -1
- package/dist/transfer/ranges.d.ts +20 -35
- package/dist/transfer/ranges.d.ts.map +1 -1
- package/dist/transfer/ranges.js +35 -121
- package/dist/transfer/ranges.js.map +1 -1
- package/dist/transfer/refs.d.ts +15 -14
- package/dist/transfer/refs.d.ts.map +1 -1
- package/dist/transfer/refs.js +33 -37
- package/dist/transfer/refs.js.map +1 -1
- package/dist-cjs/transfer/download.js +339 -85
- package/dist-cjs/transfer/download.js.map +1 -1
- package/dist-cjs/transfer/ranges.js +37 -124
- package/dist-cjs/transfer/ranges.js.map +1 -1
- package/dist-cjs/transfer/refs.js +34 -38
- package/dist-cjs/transfer/refs.js.map +1 -1
- package/package.json +1 -1
|
@@ -2,34 +2,234 @@
|
|
|
2
2
|
/**
|
|
3
3
|
* Download a set of immutable artifacts into a machine cache.
|
|
4
4
|
*
|
|
5
|
-
* The set is the primitive
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
5
|
+
* The set is the primitive and the plan is physical. Wave one proves every
|
|
6
|
+
* manifest: locally held ones are checked in place, missing ones are
|
|
7
|
+
* resolved as one want-list and fetched grouped by the pack that holds
|
|
8
|
+
* them. Wave two reads the proven manifests, asks the cache which chunks
|
|
9
|
+
* are gaps, resolves the whole gap list, and fetches it the same way: all
|
|
10
|
+
* members of one pack collapse into a few broad byte spans — approximately
|
|
11
|
+
* one read per pack — while standalone objects remain one read each. A
|
|
12
|
+
* lone artifact is a set of one; there is no second download path.
|
|
13
13
|
*
|
|
14
|
-
*
|
|
14
|
+
* Spans complete in whatever order storage answers, but each artifact
|
|
15
15
|
* stores its chunks in chunk order: a verified chunk waits until every
|
|
16
|
-
* earlier gap of the same artifact
|
|
17
|
-
*
|
|
18
|
-
*
|
|
19
|
-
*
|
|
16
|
+
* earlier gap of the same artifact is stored, so a host assembling a
|
|
17
|
+
* whole-file digest never re-reads what landed early. The scheduler admits
|
|
18
|
+
* fetch units strictly in fair plan order, and the plan orders units so a
|
|
19
|
+
* chunk's predecessor always lives in the same or an earlier unit — an
|
|
20
|
+
* artifact whose gaps do not line up ascending inside one pack falls back
|
|
21
|
+
* to per-object reads at its own positions — so ordered stores can never
|
|
22
|
+
* deadlock. Chains enter the plan round-robin by depth, so one multi-chunk
|
|
23
|
+
* artifact cannot monopolize the bounded window while unrelated artifacts
|
|
24
|
+
* wait. In-flight span bytes stay inside one explicit bound; raising request
|
|
25
|
+
* concurrency never silently raises memory.
|
|
20
26
|
*
|
|
21
|
-
* Every
|
|
22
|
-
* envelope lives alone or as a byte range inside an immutable pack
|
|
23
|
-
*
|
|
24
|
-
*
|
|
25
|
-
*
|
|
27
|
+
* Every object keeps one content-addressed identity whether its sealed
|
|
28
|
+
* envelope lives alone or as a byte range inside an immutable pack, and
|
|
29
|
+
* placement is immutable: a retried read may refresh its URL but never its
|
|
30
|
+
* geometry. Wrong or shifted bytes cannot leak — every dispensed slice is
|
|
31
|
+
* still an authenticated envelope the host opens and this engine
|
|
32
|
+
* hash-verifies before a single byte is stored.
|
|
26
33
|
*/
|
|
27
34
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
28
35
|
exports.downloadAll = downloadAll;
|
|
29
|
-
exports.download = download;
|
|
30
36
|
const content_js_1 = require("../contracts/content.js");
|
|
31
37
|
const artifacts_js_1 = require("./artifacts.js");
|
|
32
38
|
const parallel_js_1 = require("./parallel.js");
|
|
39
|
+
const ranges_js_1 = require("./ranges.js");
|
|
40
|
+
const refs_js_1 = require("./refs.js");
|
|
41
|
+
function checkRefLocation(ref, object) {
|
|
42
|
+
if (ref === undefined || typeof ref.url !== 'string' || ref.url.length === 0) {
|
|
43
|
+
throw new Error(`content ref for ${object.kind} ${object.sha256} named no location`);
|
|
44
|
+
}
|
|
45
|
+
if ((ref.offset === undefined) !== (ref.length === undefined)) {
|
|
46
|
+
throw new Error(`content ref for ${object.kind} ${object.sha256} named half a byte range`);
|
|
47
|
+
}
|
|
48
|
+
if (ref.offset === undefined || ref.length === undefined)
|
|
49
|
+
return { url: ref.url, span: null };
|
|
50
|
+
if (!Number.isSafeInteger(ref.offset) || ref.offset < 0
|
|
51
|
+
|| !Number.isSafeInteger(ref.length) || ref.length < 1) {
|
|
52
|
+
throw new Error(`content ref for ${object.kind} ${object.sha256} named an invalid byte range`);
|
|
53
|
+
}
|
|
54
|
+
return { url: ref.url, span: { offset: ref.offset, length: ref.length } };
|
|
55
|
+
}
|
|
56
|
+
/** Resolve one wave's want-list and fetch it as planned units: pack members
|
|
57
|
+
* as broad spans, standalone objects whole. Deadlock-frame law: dependencies
|
|
58
|
+
* only run backward along a chain, chains join pack grouping only when their
|
|
59
|
+
* refs ascend inside one pack, a pack's spans stay contiguous in ascending
|
|
60
|
+
* offset order, and admission is strictly FIFO — so a chunk's predecessor is
|
|
61
|
+
* always in the same unit earlier, or in an already-admitted one. */
|
|
62
|
+
async function fetchWave(ports, chains, concurrency, maxInFlightBytes) {
|
|
63
|
+
// Fair admission is part of the set law: take one dependency depth from
|
|
64
|
+
// every artifact before taking the next. This preserves predecessor-first
|
|
65
|
+
// ordering within each chain without letting one large artifact occupy the
|
|
66
|
+
// whole byte window while unrelated work waits.
|
|
67
|
+
const flat = [];
|
|
68
|
+
const maxDepth = chains.reduce((maximum, chain) => Math.max(maximum, chain.length), 0);
|
|
69
|
+
for (let depth = 0; depth < maxDepth; depth += 1) {
|
|
70
|
+
chains.forEach((items, chain) => {
|
|
71
|
+
const item = items[depth];
|
|
72
|
+
if (item !== undefined)
|
|
73
|
+
flat.push({ chain, item });
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
if (flat.length === 0)
|
|
77
|
+
return { rangedReads: 0, packedObjects: 0, standaloneObjects: 0 };
|
|
78
|
+
const refs = await (0, refs_js_1.resolveContentRefs)(ports, flat.map(({ item }) => item.object));
|
|
79
|
+
const byChain = chains.map(() => []);
|
|
80
|
+
flat.forEach(({ chain, item }, order) => {
|
|
81
|
+
const members = byChain[chain];
|
|
82
|
+
if (members === undefined)
|
|
83
|
+
throw new Error('download wave lost a chain');
|
|
84
|
+
members.push({ item, order, ...checkRefLocation(refs[order], item.object) });
|
|
85
|
+
});
|
|
86
|
+
// A chain rides pack grouping only when every gap sits in one pack with
|
|
87
|
+
// non-descending offsets; anything else falls back to per-object reads so
|
|
88
|
+
// store order can never depend on a later fetch unit.
|
|
89
|
+
const groups = new Map();
|
|
90
|
+
const singles = [];
|
|
91
|
+
for (const chain of byChain) {
|
|
92
|
+
const first = chain[0];
|
|
93
|
+
if (first === undefined)
|
|
94
|
+
continue;
|
|
95
|
+
const coherent = chain.every((member, index) => {
|
|
96
|
+
if (member.span === null || member.url !== first.url)
|
|
97
|
+
return false;
|
|
98
|
+
const previous = chain[index - 1];
|
|
99
|
+
return previous?.span == null || member.span.offset >= previous.span.offset;
|
|
100
|
+
});
|
|
101
|
+
if (!coherent) {
|
|
102
|
+
singles.push(...chain);
|
|
103
|
+
continue;
|
|
104
|
+
}
|
|
105
|
+
const members = groups.get(first.url);
|
|
106
|
+
if (members === undefined)
|
|
107
|
+
groups.set(first.url, [...chain]);
|
|
108
|
+
else
|
|
109
|
+
members.push(...chain);
|
|
110
|
+
}
|
|
111
|
+
const units = [];
|
|
112
|
+
let packedObjects = 0;
|
|
113
|
+
let standaloneObjects = 0;
|
|
114
|
+
for (const members of groups.values()) {
|
|
115
|
+
packedObjects += members.length;
|
|
116
|
+
members.sort((a, b) => (a.span?.offset ?? 0) - (b.span?.offset ?? 0) || a.order - b.order);
|
|
117
|
+
const spans = members.map((member) => {
|
|
118
|
+
if (member.span === null)
|
|
119
|
+
throw new Error('download wave grouped a standalone object');
|
|
120
|
+
return member.span;
|
|
121
|
+
});
|
|
122
|
+
const plan = (0, ranges_js_1.planPackSpans)(spans, ranges_js_1.RANGE_MERGE_GAP_BYTES, maxInFlightBytes);
|
|
123
|
+
const perSpan = plan.spans.map(() => []);
|
|
124
|
+
members.forEach((member, index) => {
|
|
125
|
+
const spanIndex = plan.memberSpan[index];
|
|
126
|
+
const list = spanIndex === undefined ? undefined : perSpan[spanIndex];
|
|
127
|
+
if (list === undefined)
|
|
128
|
+
throw new Error('download wave lost a span member');
|
|
129
|
+
list.push(member);
|
|
130
|
+
});
|
|
131
|
+
const primary = members.reduce((least, member) => Math.min(least, member.order), Number.MAX_SAFE_INTEGER);
|
|
132
|
+
plan.spans.forEach((span, index) => {
|
|
133
|
+
const list = perSpan[index];
|
|
134
|
+
const anchor = list?.[0];
|
|
135
|
+
if (list === undefined || anchor === undefined) {
|
|
136
|
+
throw new Error('download wave planned an empty span');
|
|
137
|
+
}
|
|
138
|
+
units.push({
|
|
139
|
+
url: anchor.url,
|
|
140
|
+
span,
|
|
141
|
+
members: list.map((member) => {
|
|
142
|
+
if (member.span === null)
|
|
143
|
+
throw new Error('download wave grouped a standalone object');
|
|
144
|
+
return {
|
|
145
|
+
item: member.item,
|
|
146
|
+
offset: member.span.offset - span.offset,
|
|
147
|
+
length: member.span.length,
|
|
148
|
+
};
|
|
149
|
+
}),
|
|
150
|
+
refresh: anchor,
|
|
151
|
+
weight: Math.min(span.length, maxInFlightBytes),
|
|
152
|
+
primary,
|
|
153
|
+
secondary: index,
|
|
154
|
+
ranged: true,
|
|
155
|
+
});
|
|
156
|
+
});
|
|
157
|
+
}
|
|
158
|
+
for (const member of singles) {
|
|
159
|
+
if (member.span !== null) {
|
|
160
|
+
packedObjects += 1;
|
|
161
|
+
units.push({
|
|
162
|
+
url: member.url,
|
|
163
|
+
span: member.span,
|
|
164
|
+
members: [{ item: member.item, offset: 0, length: member.span.length }],
|
|
165
|
+
refresh: member,
|
|
166
|
+
weight: Math.min(member.span.length, maxInFlightBytes),
|
|
167
|
+
primary: member.order,
|
|
168
|
+
secondary: 0,
|
|
169
|
+
ranged: true,
|
|
170
|
+
});
|
|
171
|
+
}
|
|
172
|
+
else {
|
|
173
|
+
standaloneObjects += 1;
|
|
174
|
+
units.push({
|
|
175
|
+
url: member.url,
|
|
176
|
+
span: null,
|
|
177
|
+
members: [{ item: member.item, offset: 0, length: null }],
|
|
178
|
+
refresh: member,
|
|
179
|
+
weight: Math.max(1, Math.min(member.item.standaloneWeight, maxInFlightBytes)),
|
|
180
|
+
primary: member.order,
|
|
181
|
+
secondary: 0,
|
|
182
|
+
ranged: false,
|
|
183
|
+
});
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
units.sort((a, b) => a.primary - b.primary || a.secondary - b.secondary);
|
|
187
|
+
await (0, parallel_js_1.weightedParallelForEach)(units, concurrency, maxInFlightBytes, (unit) => unit.weight, async (unit) => {
|
|
188
|
+
let delivered = 0;
|
|
189
|
+
try {
|
|
190
|
+
const refresh = async () => {
|
|
191
|
+
const [fresh] = await ports.requestRefs([unit.refresh.item.object]);
|
|
192
|
+
const location = checkRefLocation(fresh, unit.refresh.item.object);
|
|
193
|
+
const before = unit.refresh.span;
|
|
194
|
+
const moved = (location.span === null) !== (before === null)
|
|
195
|
+
|| (location.span !== null && before !== null
|
|
196
|
+
&& (location.span.offset !== before.offset
|
|
197
|
+
|| location.span.length !== before.length));
|
|
198
|
+
if (moved) {
|
|
199
|
+
throw new Error(`content ${unit.refresh.item.object.kind} `
|
|
200
|
+
+ `${unit.refresh.item.object.sha256} changed placement between fetch attempts`);
|
|
201
|
+
}
|
|
202
|
+
return location.url;
|
|
203
|
+
};
|
|
204
|
+
const bytes = await ports.fetchSpan(unit.url, unit.span, refresh);
|
|
205
|
+
if (!(bytes instanceof Uint8Array))
|
|
206
|
+
throw new Error('storage fetch answered no bytes');
|
|
207
|
+
if (unit.span !== null && bytes.byteLength !== unit.span.length) {
|
|
208
|
+
throw new Error('storage fetch answered the wrong byte count');
|
|
209
|
+
}
|
|
210
|
+
for (const member of unit.members) {
|
|
211
|
+
const sealed = member.length === null
|
|
212
|
+
? bytes
|
|
213
|
+
: bytes.subarray(member.offset, member.offset + member.length);
|
|
214
|
+
if (member.length !== null && sealed.byteLength !== member.length) {
|
|
215
|
+
throw new Error('storage span cannot cover a planned member');
|
|
216
|
+
}
|
|
217
|
+
await member.item.deliver(sealed);
|
|
218
|
+
delivered += 1;
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
catch (error) {
|
|
222
|
+
for (const member of unit.members.slice(delivered))
|
|
223
|
+
member.item.fail(error);
|
|
224
|
+
throw error;
|
|
225
|
+
}
|
|
226
|
+
});
|
|
227
|
+
return {
|
|
228
|
+
rangedReads: units.reduce((count, unit) => count + (unit.ranged ? 1 : 0), 0),
|
|
229
|
+
packedObjects,
|
|
230
|
+
standaloneObjects,
|
|
231
|
+
};
|
|
232
|
+
}
|
|
33
233
|
/** Download a set of immutable artifacts, fetching only machine-cache gaps.
|
|
34
234
|
* Receipts return in input order; any failure fails the whole set after
|
|
35
235
|
* letting in-flight effects settle. */
|
|
@@ -39,94 +239,148 @@ async function downloadAll(artifacts, ports, options = {}) {
|
|
|
39
239
|
?? parallel_js_1.DEFAULT_TRANSFER_CONCURRENCY * content_js_1.CHUNK_BYTES;
|
|
40
240
|
for (const artifact of artifacts)
|
|
41
241
|
(0, artifacts_js_1.assertTransferArtifact)(artifact);
|
|
42
|
-
|
|
242
|
+
// Wave one: prove every manifest. Held manifests are checked in place;
|
|
243
|
+
// missing ones fetch as one planned wave grouped by pack.
|
|
244
|
+
const manifests = new Array(artifacts.length);
|
|
245
|
+
let localManifests = 0;
|
|
246
|
+
const manifestChains = [];
|
|
247
|
+
artifacts.forEach((artifact, slot) => {
|
|
248
|
+
const local = ports.localManifest(artifact);
|
|
249
|
+
if (local !== null && local !== undefined) {
|
|
250
|
+
const checked = (0, content_js_1.checkContentManifest)(local, artifact.contentHash);
|
|
251
|
+
if (!checked.ok)
|
|
252
|
+
throw new Error(checked.error);
|
|
253
|
+
manifests[slot] = checked.value;
|
|
254
|
+
localManifests += 1;
|
|
255
|
+
return;
|
|
256
|
+
}
|
|
257
|
+
const object = { kind: 'manifest', sha256: artifact.contentHash };
|
|
258
|
+
manifestChains.push([{
|
|
259
|
+
object,
|
|
260
|
+
standaloneWeight: 1,
|
|
261
|
+
deliver: async (sealed) => {
|
|
262
|
+
const plain = await ports.openEnvelope(object, sealed);
|
|
263
|
+
let parsed;
|
|
264
|
+
try {
|
|
265
|
+
parsed = JSON.parse(new TextDecoder().decode(plain));
|
|
266
|
+
}
|
|
267
|
+
catch {
|
|
268
|
+
throw new Error(`downloaded manifest for ${artifact.contentHash} is not valid JSON`);
|
|
269
|
+
}
|
|
270
|
+
const checked = (0, content_js_1.checkContentManifest)(parsed, artifact.contentHash);
|
|
271
|
+
if (!checked.ok)
|
|
272
|
+
throw new Error(checked.error);
|
|
273
|
+
manifests[slot] = checked.value;
|
|
274
|
+
await ports.manifestProven(artifact, checked.value);
|
|
275
|
+
},
|
|
276
|
+
fail: () => { },
|
|
277
|
+
}]);
|
|
278
|
+
});
|
|
279
|
+
const manifestWave = await fetchWave(ports, manifestChains, concurrency, maxInFlightBytes);
|
|
280
|
+
// Ask the cache which chunks are gaps, now that every manifest is proven.
|
|
281
|
+
const gaps = new Array(artifacts.length);
|
|
43
282
|
await (0, parallel_js_1.parallelForEach)([...artifacts.keys()], concurrency, async (slot) => {
|
|
44
283
|
const artifact = artifacts[slot];
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
throw new Error(checked.error);
|
|
50
|
-
const manifest = checked.value;
|
|
284
|
+
const manifest = manifests[slot];
|
|
285
|
+
if (artifact === undefined || manifest === undefined) {
|
|
286
|
+
throw new Error('download set lost a manifest');
|
|
287
|
+
}
|
|
51
288
|
const missing = [];
|
|
52
289
|
for (const index of manifest.chunks.keys()) {
|
|
53
290
|
if (!await ports.hasChunk(artifact, manifest, index))
|
|
54
291
|
missing.push(index);
|
|
55
292
|
}
|
|
56
|
-
|
|
293
|
+
gaps[slot] = missing;
|
|
57
294
|
});
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
295
|
+
// Wave two: fetch every gap as one planned wave. Each artifact's gaps form
|
|
296
|
+
// one chain so chunks store in chunk order; `delivered` settles when a gap
|
|
297
|
+
// is stored, or rejects so no later chunk waits forever.
|
|
298
|
+
const blockChains = [];
|
|
299
|
+
artifacts.forEach((artifact, slot) => {
|
|
300
|
+
const manifest = manifests[slot];
|
|
301
|
+
const missing = gaps[slot];
|
|
302
|
+
if (manifest === undefined || missing === undefined || missing.length === 0)
|
|
303
|
+
return;
|
|
304
|
+
let prior;
|
|
305
|
+
const chain = [];
|
|
306
|
+
for (const index of missing) {
|
|
307
|
+
const expected = manifest.chunks[index];
|
|
308
|
+
if (expected === undefined)
|
|
309
|
+
throw new Error('download manifest named an unknown chunk index');
|
|
68
310
|
let stored;
|
|
69
311
|
let failed;
|
|
70
312
|
const delivered = new Promise((resolve, reject) => {
|
|
71
313
|
stored = resolve;
|
|
72
314
|
failed = reject;
|
|
73
315
|
});
|
|
74
|
-
// A failed
|
|
75
|
-
// rejection; the set still fails through the
|
|
316
|
+
// A failed unit may leave no later chunk admitted to observe the
|
|
317
|
+
// rejection; the set still fails through the unit's own throw.
|
|
76
318
|
delivered.catch(() => { });
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
319
|
+
const priorStored = prior;
|
|
320
|
+
chain.push({
|
|
321
|
+
object: { kind: 'block', sha256: expected.sha256 },
|
|
322
|
+
standaloneWeight: expected.bytes,
|
|
323
|
+
deliver: async (sealed) => {
|
|
324
|
+
try {
|
|
325
|
+
const plain = await ports.openEnvelope({ kind: 'block', sha256: expected.sha256 }, sealed);
|
|
326
|
+
if (!(plain instanceof Uint8Array)
|
|
327
|
+
|| plain.byteLength !== expected.bytes
|
|
328
|
+
|| ports.sha256Hex(plain) !== expected.sha256) {
|
|
329
|
+
throw new Error(`downloaded content chunk ${index} failed verification`);
|
|
330
|
+
}
|
|
331
|
+
if (priorStored !== undefined)
|
|
332
|
+
await priorStored;
|
|
333
|
+
await ports.putChunk(artifact, manifest, index, plain);
|
|
334
|
+
stored();
|
|
335
|
+
}
|
|
336
|
+
catch (error) {
|
|
337
|
+
failed(error);
|
|
338
|
+
throw error;
|
|
339
|
+
}
|
|
340
|
+
},
|
|
341
|
+
fail: failed,
|
|
342
|
+
});
|
|
343
|
+
prior = delivered;
|
|
100
344
|
}
|
|
345
|
+
blockChains.push(chain);
|
|
101
346
|
});
|
|
347
|
+
const blockWave = await fetchWave(ports, blockChains, concurrency, maxInFlightBytes);
|
|
102
348
|
const receipts = new Array(artifacts.length);
|
|
103
|
-
await (0, parallel_js_1.parallelForEach)([...
|
|
104
|
-
const
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
349
|
+
await (0, parallel_js_1.parallelForEach)([...artifacts.keys()], concurrency, async (slot) => {
|
|
350
|
+
const artifact = artifacts[slot];
|
|
351
|
+
const manifest = manifests[slot];
|
|
352
|
+
const missing = gaps[slot];
|
|
353
|
+
if (artifact === undefined || manifest === undefined || missing === undefined) {
|
|
354
|
+
throw new Error('download set lost a manifest');
|
|
355
|
+
}
|
|
356
|
+
const sealed = await ports.sealArtifact(artifact, manifest);
|
|
357
|
+
if (sealed.bytes !== manifest.bytes || sealed.contentHash !== manifest.contentHash) {
|
|
358
|
+
throw new Error(`downloaded artifact ${artifact.contentHash} failed verification`);
|
|
110
359
|
}
|
|
111
360
|
receipts[slot] = {
|
|
112
|
-
artifact
|
|
113
|
-
manifest
|
|
361
|
+
artifact,
|
|
362
|
+
manifest,
|
|
114
363
|
local: sealed.local,
|
|
115
|
-
downloadedChunks:
|
|
116
|
-
reusedChunks:
|
|
364
|
+
downloadedChunks: missing.length,
|
|
365
|
+
reusedChunks: manifest.chunks.length - missing.length,
|
|
117
366
|
};
|
|
118
367
|
});
|
|
119
|
-
return
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
}
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
368
|
+
return {
|
|
369
|
+
receipts: receipts.map((receipt) => {
|
|
370
|
+
if (receipt === undefined)
|
|
371
|
+
throw new Error('download set lost an artifact receipt');
|
|
372
|
+
return receipt;
|
|
373
|
+
}),
|
|
374
|
+
shape: {
|
|
375
|
+
localManifests,
|
|
376
|
+
fetchedManifests: manifestChains.length,
|
|
377
|
+
packedManifests: manifestWave.packedObjects,
|
|
378
|
+
standaloneManifests: manifestWave.standaloneObjects,
|
|
379
|
+
manifestSpans: manifestWave.rangedReads,
|
|
380
|
+
packedBlocks: blockWave.packedObjects,
|
|
381
|
+
standaloneBlocks: blockWave.standaloneObjects,
|
|
382
|
+
blockSpans: blockWave.rangedReads,
|
|
383
|
+
},
|
|
384
|
+
};
|
|
131
385
|
}
|
|
132
386
|
//# sourceMappingURL=download.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"download.js","sourceRoot":"","sources":["../../src/transfer/download.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"download.js","sourceRoot":"","sources":["../../src/transfer/download.ts"],"names":[],"mappings":"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"}
|