@elaraai/e3-cloud-files 1.0.94 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (53) hide show
  1. package/README.md +221 -28
  2. package/dist/src/authoring.d.ts +90 -22
  3. package/dist/src/authoring.d.ts.map +1 -1
  4. package/dist/src/authoring.js +122 -46
  5. package/dist/src/authoring.js.map +1 -1
  6. package/dist/src/check/index.d.ts +3 -4
  7. package/dist/src/check/index.d.ts.map +1 -1
  8. package/dist/src/check/index.js +3 -4
  9. package/dist/src/check/index.js.map +1 -1
  10. package/dist/src/check.d.ts +44 -9
  11. package/dist/src/check.d.ts.map +1 -1
  12. package/dist/src/check.js +130 -53
  13. package/dist/src/check.js.map +1 -1
  14. package/dist/src/compat.d.ts +384 -0
  15. package/dist/src/compat.d.ts.map +1 -0
  16. package/dist/src/compat.js +258 -0
  17. package/dist/src/compat.js.map +1 -0
  18. package/dist/src/index.d.ts +14 -9
  19. package/dist/src/index.d.ts.map +1 -1
  20. package/dist/src/index.js +14 -9
  21. package/dist/src/index.js.map +1 -1
  22. package/dist/src/s3/index.d.ts.map +1 -1
  23. package/dist/src/s3/index.js +34 -12
  24. package/dist/src/s3/index.js.map +1 -1
  25. package/dist/src/storage/index.d.ts +84 -3
  26. package/dist/src/storage/index.d.ts.map +1 -1
  27. package/dist/src/storage/index.js +387 -13
  28. package/dist/src/storage/index.js.map +1 -1
  29. package/dist/src/sync/engine.d.ts +288 -49
  30. package/dist/src/sync/engine.d.ts.map +1 -1
  31. package/dist/src/sync/engine.js +605 -110
  32. package/dist/src/sync/engine.js.map +1 -1
  33. package/dist/src/sync/index.d.ts +3 -2
  34. package/dist/src/sync/index.d.ts.map +1 -1
  35. package/dist/src/sync/index.js +3 -2
  36. package/dist/src/sync/index.js.map +1 -1
  37. package/dist/src/sync/memory.d.ts +67 -12
  38. package/dist/src/sync/memory.d.ts.map +1 -1
  39. package/dist/src/sync/memory.js +248 -18
  40. package/dist/src/sync/memory.js.map +1 -1
  41. package/dist/src/sync/push.d.ts +56 -0
  42. package/dist/src/sync/push.d.ts.map +1 -0
  43. package/dist/src/sync/push.js +205 -0
  44. package/dist/src/sync/push.js.map +1 -0
  45. package/dist/test/decode.examples.d.ts +9 -4
  46. package/dist/test/decode.examples.d.ts.map +1 -1
  47. package/dist/test/decode.examples.js +15 -3
  48. package/dist/test/decode.examples.js.map +1 -1
  49. package/dist/test/typed.examples.d.ts +142 -0
  50. package/dist/test/typed.examples.d.ts.map +1 -0
  51. package/dist/test/typed.examples.js +125 -0
  52. package/dist/test/typed.examples.js.map +1 -0
  53. package/package.json +10 -6
@@ -4,30 +4,61 @@
4
4
  */
5
5
  /**
6
6
  * `@elaraai/e3-cloud-files/storage`: the sync's writer over an e3 store, the
7
- * one a local repository and a deployed workspace both write through.
7
+ * one a local repository writes through, and the base of a deployed
8
+ * workspace's.
8
9
  *
9
- * A `file`, `latest` or `listing` input is written as any input is
10
- * (`workspaceSetDataset`). A `folder` is updated a piece at a time: e3 stores
11
- * a collection as pieces, each holding the entries between two keys, so only
12
- * the pieces holding a changed or removed file are read and cut again, and
13
- * every other piece is carried over as it is stored (`storeCollection`), never
14
- * read. However large the folder, a sync holds the pieces it changes and the
15
- * files it read. The new folder is then set as the input's value by e3's door
16
- * for a value the store holds (`datasetSetStored`), which checks its type,
17
- * holds the dataset's write lock and versions it as any input write.
10
+ * A `file`, `latest` or `listing` input with no type is written as any input
11
+ * is (`workspaceSetDataset`). A `folder` is updated a piece at a time: e3
12
+ * stores a collection as pieces, each holding the entries between two keys,
13
+ * so only the pieces holding a changed or removed file are read and cut
14
+ * again, and every other piece is carried over as it is stored
15
+ * (`storeCollection`), never read. However large the folder, a sync holds
16
+ * the pieces it changes and the files it read. The new folder is then set as
17
+ * the input's value by e3's door for a value the store holds
18
+ * (`datasetSetStored`), which checks its type, holds the dataset's write lock
19
+ * and versions it as any input write.
20
+ *
21
+ * A typed file is taken in through e3's door for a file (`datasetAdoptFile`):
22
+ * its bytes are streamed to a file of the repository's own scratch, hashed as
23
+ * they go, and the door takes the file in as the value it holds, a collection
24
+ * by intake units on the runner given, remembered by the bytes' hash so the
25
+ * same bytes taken again cost their hash and nothing else. (A local
26
+ * repository may use its disk; the platform's writer stages in its bucket
27
+ * instead, and never on a disk.) A fed mutation runs through e3's own
28
+ * `recordMutate`, the file's hash its idempotency key, so a file applied
29
+ * once is never applied twice.
30
+ *
31
+ * {@link cloudWriter} is the platform's: the same, but a typed file staged
32
+ * in the object store through {@link FilesStaging} (never a disk) and taken
33
+ * in through e3's door for a delivery the store holds, resumable across the
34
+ * platform's rounds.
18
35
  *
19
36
  * Needs `@elaraai/e3-core`, which a solution's own code never imports: the
20
37
  * CLI and the platform do.
21
38
  *
22
39
  * @packageDocumentation
23
40
  */
24
- import { StringType, compareFor, decodeBeast2For, variant } from '@elaraai/east';
25
- import { DatasetSegments, datasetSetStored, storeCollection, workspaceGetDatasetHash, workspaceSetDataset, } from '@elaraai/e3-core';
41
+ import { createHash } from 'node:crypto';
42
+ import { createWriteStream } from 'node:fs';
43
+ import { mkdir, rm } from 'node:fs/promises';
44
+ import { tmpdir } from 'node:os';
45
+ import { join } from 'node:path';
46
+ import { Readable } from 'node:stream';
47
+ import { pipeline } from 'node:stream/promises';
48
+ import { StringType, compareFor, decodeBeast2For, encodeBeast2For, none, some, variant } from '@elaraai/east';
49
+ import { DatasetSegments, DatasetTypeMismatchError, DeliveryRefusedError, ObjectNotFoundError, datasetAdoptFile, datasetAdoptObject, datasetSetStored, deliveryAdoptStored, objectAdoptFile, recordHistory, recordMutate, recordSystemCommit, resolveRecord, storeCollection, withRunningWork, workspaceGetDatasetHash, workspaceSetDataset, } from '@elaraai/e3-core';
26
50
  import { FilesFileType, FilesFolderType, FilesListingType } from '@elaraai/e3-cloud-types';
51
+ import { FilesUnreadableError, } from '../sync/engine.js';
27
52
  /** An input's path: `.inputs.<input>`. */
28
53
  function inputPath(input) {
29
54
  return [variant('field', 'inputs'), variant('field', input)];
30
55
  }
56
+ /** A record's path: `.records.<record>`. */
57
+ function recordPath(record) {
58
+ return [variant('field', 'records'), variant('field', record)];
59
+ }
60
+ /** The most commits a seed walks back for a record's last seed. */
61
+ const SEED_WALK_LIMIT = 100;
31
62
  const compareKeys = compareFor(StringType);
32
63
  const decodeFolder = decodeBeast2For(FilesFolderType);
33
64
  /** Entries in a Dict's order. */
@@ -73,15 +104,136 @@ async function folderSources(storage, repo, hash, changes) {
73
104
  sources.push({ stored: pieces.hash, from: next, to: pieces.counts.length });
74
105
  return sources;
75
106
  }
107
+ /**
108
+ * A refusal e3's door answered, as the sync reports it; null for an error the
109
+ * door did not refuse.
110
+ *
111
+ * @param err - What the door threw
112
+ * @param type - The mapping's type
113
+ * @returns The refusal, or null
114
+ */
115
+ export function doorRefusal(err) {
116
+ if (err instanceof DatasetTypeMismatchError)
117
+ return variant('type_mismatch', { expected: err.mismatch.declared, actual: err.mismatch.given });
118
+ if (err instanceof DeliveryRefusedError) {
119
+ // east's intake: "segment N of the delivery, at offset X, holds B bytes, more than the M a segment is read in — write it again …"
120
+ const segment = /holds ([0-9]+) bytes, more than the ([0-9]+) a segment/i.exec(err.refusal);
121
+ if (segment !== null)
122
+ return variant('segment_too_large', { bytes: BigInt(Number(segment[1])), limit: BigInt(Number(segment[2])) });
123
+ return variant('other', `the runner refused it: ${err.refusal}`);
124
+ }
125
+ return null;
126
+ }
127
+ const encodeArg = encodeBeast2For(StringType);
128
+ /**
129
+ * What a failed mutation said, from the runner's stderr: its last lines that
130
+ * are no stack frame (a runtime error prints its message, then where it was
131
+ * raised), at most three, as one line. What a refusal of a feed or a seed
132
+ * carries (`mutation {outcome: 'failed', message}`).
133
+ *
134
+ * @param stderr - The runner's stderr
135
+ * @returns The words
136
+ */
137
+ export function failureWords(stderr) {
138
+ return stderr.trim().split('\n').filter((line) => !/^\s*at\s/.test(line)).slice(-3).join(' ');
139
+ }
140
+ /** The name a seed's commit takes: a record's first state, or its state again. */
141
+ function seedName(genesis) {
142
+ return genesis ? '$init' : '$seed';
143
+ }
144
+ /**
145
+ * Commits a stored value as a record's state: its first (`$init`, as a
146
+ * deploy's mint writes the ref) or its state again (`$seed`, over its head,
147
+ * the reserved slots carried), the file's key, ETag and SHA-256 its
148
+ * arguments. The caller holds the repository's running work across the
149
+ * intake that stored the value and this commit, which names it.
150
+ *
151
+ * @returns What the seed did
152
+ */
153
+ async function seedCommit(storage, runner, repo, ws, record, file, stored, sha256, actor, seed) {
154
+ const resolved = await resolveRecord(storage, repo, ws, record);
155
+ if (!resolved)
156
+ return { status: 'refused', reason: variant('other', `record ${record} is not declared by the package the workspace runs`) };
157
+ const outcome = await recordSystemCommit(storage, runner, repo, ws, record, {
158
+ name: seedName(seed.genesis),
159
+ target: { state: stored.hash, applied: resolved.migrations.map((step) => step.name) },
160
+ actor,
161
+ args: [encodeArg(file.key), encodeArg(file.etag), encodeArg(sha256)],
162
+ ...(seed.signal !== undefined && { signal: seed.signal }),
163
+ });
164
+ switch (outcome.kind) {
165
+ case 'committed':
166
+ return { status: 'committed', commit: outcome.commitHash, rows: stored.rows === null ? null : BigInt(stored.rows), sha256 };
167
+ case 'invalid':
168
+ return { status: 'refused', reason: variant('mutation', { outcome: 'invalid', message: outcome.message }) };
169
+ case 'conflict':
170
+ return { status: 'refused', reason: variant('mutation', { outcome: 'conflict', message: outcome.detail ?? `the record was busy (${outcome.attempts} attempts): tried again by the next sync` }) };
171
+ case 'failed':
172
+ return { status: 'refused', reason: variant('mutation', { outcome: 'failed', message: failureWords(outcome.stderr) }) };
173
+ case 'timed_out':
174
+ return { status: 'refused', reason: variant('mutation', { outcome: 'timed_out', message: `after ${outcome.ms} ms` }) };
175
+ }
176
+ }
177
+ /**
178
+ * Takes a delivery in and seeds the record from it, under one hold of the
179
+ * repository's running work, so no sweep takes what the intake stored
180
+ * before the commit names it: a refusal of the delivery (its type, a
181
+ * segment past the limit, a runner's) is the seed's, and an intake the
182
+ * round's deadline stops yields, the pieces it finished remembered by the
183
+ * store for the next sync.
184
+ */
185
+ async function seedThrough(storage, repo, take, commit, signal) {
186
+ return withRunningWork(storage, repo, async () => {
187
+ let stored;
188
+ try {
189
+ stored = await take();
190
+ }
191
+ catch (err) {
192
+ if (signal?.aborted === true)
193
+ return { status: 'yielded' };
194
+ const reason = doorRefusal(err);
195
+ if (reason !== null)
196
+ return { status: 'refused', reason };
197
+ throw err;
198
+ }
199
+ return commit(stored);
200
+ });
201
+ }
202
+ /**
203
+ * Streams a file's bytes to a scratch file, hashing them as they go.
204
+ *
205
+ * @returns The scratch file's path and the bytes' SHA-256
206
+ */
207
+ async function spool(source, file, dir, signal) {
208
+ await mkdir(dir, { recursive: true });
209
+ const path = join(dir, `files-${process.pid}-${Date.now()}-${Math.random().toString(36).slice(2)}.beast2`);
210
+ const hash = createHash('sha256');
211
+ const stream = Readable.from(await source.open(file));
212
+ const hashing = async function* (chunks) {
213
+ for await (const chunk of chunks) {
214
+ hash.update(chunk);
215
+ yield chunk;
216
+ }
217
+ };
218
+ try {
219
+ await pipeline(stream, hashing, createWriteStream(path), signal === undefined ? {} : { signal });
220
+ }
221
+ catch (err) {
222
+ await rm(path, { force: true });
223
+ throw err;
224
+ }
225
+ return { path, sha256: hash.digest('hex') };
226
+ }
76
227
  /**
77
228
  * The sync's writer over an e3 store, for one workspace.
78
229
  *
79
230
  * @param storage - The store: a local repository's (`LocalStorage`) or the platform's
80
231
  * @param repo - The repository: a local repository's path, or the platform's repository name
81
232
  * @param ws - The workspace
233
+ * @param options - The runner, the scratch directory and the actor
82
234
  * @returns The writer
83
235
  */
84
- export function storageWriter(storage, repo, ws) {
236
+ export function storageWriter(storage, repo, ws, options = {}) {
85
237
  const current = async (input) => (await workspaceGetDatasetHash(storage, repo, ws, inputPath(input))).hash;
86
238
  const written = async (input) => {
87
239
  const hash = await current(input);
@@ -89,6 +241,7 @@ export function storageWriter(storage, repo, ws) {
89
241
  throw new Error(`input ${input} is unassigned after it was written`);
90
242
  return hash;
91
243
  };
244
+ const scratch = options.scratchDir ?? tmpdir();
92
245
  return {
93
246
  current,
94
247
  async setFile(input, bytes) {
@@ -108,6 +261,227 @@ export function storageWriter(storage, repo, ws) {
108
261
  // sets it as the input's value, checked and versioned, reading nothing
109
262
  return (await datasetSetStored(storage, repo, ws, inputPath(input), stored)).hash;
110
263
  },
264
+ async takeTyped(input, file, type, source, intake) {
265
+ let spooled;
266
+ try {
267
+ spooled = await spool(source, file, scratch, intake.signal);
268
+ }
269
+ catch (err) {
270
+ if (err instanceof FilesUnreadableError)
271
+ return { status: 'refused', reason: variant('unreadable', err.reason) };
272
+ throw err;
273
+ }
274
+ try {
275
+ const adopted = await datasetAdoptFile(storage, repo, ws, inputPath(input), spooled.path, {
276
+ expectHash: spooled.sha256,
277
+ ...(options.runner !== undefined && { runner: options.runner }),
278
+ ...(intake.signal !== undefined && { signal: intake.signal }),
279
+ });
280
+ return {
281
+ status: 'taken',
282
+ hash: adopted.hash,
283
+ sha256: spooled.sha256,
284
+ taken: { key: file.key, type, rows: adopted.rows === null ? none : some(BigInt(adopted.rows)), how: variant(adopted.segments === null ? 'carried' : 'split', null) },
285
+ };
286
+ }
287
+ catch (err) {
288
+ const reason = doorRefusal(err);
289
+ if (reason !== null)
290
+ return { status: 'refused', reason };
291
+ throw err;
292
+ }
293
+ finally {
294
+ await rm(spooled.path, { force: true });
295
+ }
296
+ },
297
+ async seed(record, file, type, source, seed) {
298
+ if (options.runner === undefined)
299
+ throw new Error('a seeded record needs a runner');
300
+ let spooled;
301
+ try {
302
+ spooled = await spool(source, file, scratch, seed.signal);
303
+ }
304
+ catch (err) {
305
+ if (err instanceof FilesUnreadableError)
306
+ return { status: 'refused', reason: variant('unreadable', err.reason) };
307
+ throw err;
308
+ }
309
+ const runner = options.runner;
310
+ try {
311
+ // The file placed in the store as the object its bytes name and taken in (a collection by intake units on the
312
+ // runner), then read as a stored value of the record's type, as the cloud reads a staged one: the memo answers
313
+ return await seedThrough(storage, repo, async () => {
314
+ await objectAdoptFile(storage, repo, spooled.path, { expectHash: spooled.sha256, runner, ...(seed.signal !== undefined && { signal: seed.signal }) });
315
+ const adopted = await deliveryAdoptStored(storage, repo, ws, { address: `.records.${record}`, type }, spooled.sha256, {
316
+ runner,
317
+ ...(seed.signal !== undefined && { signal: seed.signal }),
318
+ });
319
+ return { hash: adopted.hash, rows: adopted.rows };
320
+ }, (stored) => seedCommit(storage, runner, repo, ws, record, file, stored, spooled.sha256, options.actor ?? 'files', seed), seed.signal);
321
+ }
322
+ finally {
323
+ await rm(spooled.path, { force: true });
324
+ }
325
+ },
326
+ async recordState(record) {
327
+ const { hash } = await workspaceGetDatasetHash(storage, repo, ws, recordPath(record));
328
+ if (hash === null)
329
+ return { pending: true };
330
+ // The head, and the commits since the last seed, walked back a bounded way
331
+ const history = await recordHistory(storage, repo, ws, record, { limit: SEED_WALK_LIMIT });
332
+ const head = history[0];
333
+ if (head === undefined)
334
+ return { pending: true };
335
+ const seed = history.findIndex((entry) => entry.commit.mutation === '$init' || entry.commit.mutation === '$seed');
336
+ return { pending: false, head: head.hash, sinceSeed: seed < 0 ? null : seed };
337
+ },
338
+ async feed(record, mutation, file, type, source, feed) {
339
+ if (options.runner === undefined)
340
+ throw new Error('a fed mutation needs a runner');
341
+ // A record with no state yet: nothing is read for it
342
+ const { hash } = await workspaceGetDatasetHash(storage, repo, ws, recordPath(record));
343
+ if (hash === null)
344
+ return { status: 'waiting', reason: 'the record has no state yet' };
345
+ let bytes;
346
+ try {
347
+ const chunks = [];
348
+ for await (const chunk of await source.open(file))
349
+ chunks.push(chunk);
350
+ bytes = Buffer.concat(chunks);
351
+ }
352
+ catch (err) {
353
+ if (err instanceof FilesUnreadableError)
354
+ return { status: 'refused', reason: variant('unreadable', err.reason), sha256: '' };
355
+ throw err;
356
+ }
357
+ const sha256 = createHash('sha256').update(bytes).digest('hex');
358
+ // Bytes applied before, under any name, are applied no more
359
+ if (feed.applied?.has(sha256) === true)
360
+ return { status: 'applied', sha256 };
361
+ const outcome = await recordMutate(storage, options.runner, repo, ws, record, mutation, [bytes], {
362
+ actor: options.actor ?? 'files',
363
+ idempotencyKey: sha256,
364
+ ...(options.feedBudgetMs !== undefined && { budgetMs: options.feedBudgetMs }),
365
+ ...(feed.signal !== undefined && { signal: feed.signal }),
366
+ });
367
+ void type;
368
+ switch (outcome.kind) {
369
+ case 'committed':
370
+ return { status: 'committed', commit: outcome.commitHash, sha256 };
371
+ case 'conflict':
372
+ // The record was busy: the next sync tries the file again
373
+ return { status: 'waiting', reason: `the record was busy (${outcome.detail ?? `the write lost the race ${outcome.attempts} times`}): tried again by the next sync` };
374
+ case 'invalid':
375
+ return { status: 'refused', reason: variant('mutation', { outcome: 'invalid', message: outcome.message }), sha256 };
376
+ case 'failed':
377
+ // Cut short by the round's end: not the file's fault
378
+ if (feed.signal?.aborted === true)
379
+ return { status: 'waiting', reason: 'the round ended before the mutation finished: tried again by the next sync' };
380
+ return { status: 'refused', reason: variant('mutation', { outcome: 'failed', message: failureWords(outcome.stderr) }), sha256 };
381
+ case 'timed_out':
382
+ return { status: 'refused', reason: variant('mutation', { outcome: 'timed_out', message: `after ${outcome.ms} ms` }), sha256 };
383
+ }
384
+ },
385
+ };
386
+ }
387
+ /**
388
+ * The sync's writer for a deployed workspace: the store's writer, with a
389
+ * typed file taken in through the platform's staging and e3's door for a
390
+ * delivery the store holds (`datasetAdoptObject`), so no byte of it passes
391
+ * through a disk (D7), and an intake the round's deadline stops resumes in
392
+ * the next round with the pieces it finished remembered; a record seeded
393
+ * from a staged file the same way (`deliveryAdoptStored`, then the
394
+ * record's `$init` or `$seed` commit).
395
+ *
396
+ * @param storage - The platform's storage
397
+ * @param repo - The repository, as the storage names it
398
+ * @param ws - The workspace
399
+ * @param options - The runner, the staging, the actor
400
+ * @returns The writer
401
+ */
402
+ export function cloudWriter(storage, repo, ws, options) {
403
+ const base = storageWriter(storage, repo, ws, { runner: options.runner, ...(options.actor !== undefined && { actor: options.actor }), ...(options.feedBudgetMs !== undefined && { feedBudgetMs: options.feedBudgetMs }) });
404
+ return {
405
+ ...base,
406
+ async takeTyped(input, file, type, source, intake) {
407
+ // The engine resumes only the intake of this same file, by its key and ETag
408
+ const progress = (sha256, staging) => ({ key: file.key, etag: file.etag, sha256, staging });
409
+ let sha256 = intake.resume?.sha256 ?? null;
410
+ const stage = async (resume) => {
411
+ let staged;
412
+ try {
413
+ staged = await options.staging.stage(repo, (start) => source.open(file, { start }), file.size, {
414
+ ...(intake.signal !== undefined && { signal: intake.signal }),
415
+ ...(resume !== null && { resume }),
416
+ });
417
+ }
418
+ catch (err) {
419
+ if (err instanceof FilesUnreadableError)
420
+ return { status: 'refused', reason: variant('unreadable', err.reason) };
421
+ throw err;
422
+ }
423
+ if ('aborted' in staged)
424
+ return { status: 'yielded', taking: staged.progress === null ? null : progress(null, staged.progress) };
425
+ return staged.sha256;
426
+ };
427
+ if (sha256 === null) {
428
+ const staged = await stage(intake.resume?.staging ?? null);
429
+ if (typeof staged !== 'string')
430
+ return staged;
431
+ sha256 = staged;
432
+ }
433
+ for (;;) {
434
+ try {
435
+ const adopted = await datasetAdoptObject(storage, repo, ws, inputPath(input), sha256, options.runner, intake.signal === undefined ? {} : { signal: intake.signal });
436
+ return {
437
+ status: 'taken',
438
+ hash: adopted.hash,
439
+ sha256,
440
+ taken: { key: file.key, type, rows: adopted.rows === null ? none : some(BigInt(adopted.rows)), how: variant(adopted.segments === null ? 'carried' : 'split', null) },
441
+ };
442
+ }
443
+ catch (err) {
444
+ // Stopped at the round's deadline, the pieces it finished remembered: the next round resumes it
445
+ if (intake.signal?.aborted === true)
446
+ return { status: 'yielded', taking: progress(sha256, null) };
447
+ // The delivery a resumed intake names is gone (collected since): staged again
448
+ if (err instanceof ObjectNotFoundError && intake.resume !== undefined) {
449
+ const staged = await stage(null);
450
+ if (typeof staged !== 'string')
451
+ return staged;
452
+ sha256 = staged;
453
+ continue;
454
+ }
455
+ const reason = doorRefusal(err);
456
+ if (reason !== null)
457
+ return { status: 'refused', reason };
458
+ throw err;
459
+ }
460
+ }
461
+ },
462
+ async seed(record, file, type, source, seed) {
463
+ let staged;
464
+ try {
465
+ staged = await options.staging.stage(repo, (start) => source.open(file, { start }), file.size, seed.signal === undefined ? {} : { signal: seed.signal });
466
+ }
467
+ catch (err) {
468
+ if (err instanceof FilesUnreadableError)
469
+ return { status: 'refused', reason: variant('unreadable', err.reason) };
470
+ throw err;
471
+ }
472
+ // A stage the deadline stops is not kept for a seed: the next sync stages the file again
473
+ if ('aborted' in staged)
474
+ return { status: 'yielded' };
475
+ const { sha256 } = staged;
476
+ // The staged object taken in as a stored value of the record's type (the memo, intake units for a collection), then committed
477
+ return seedThrough(storage, repo, async () => {
478
+ const adopted = await deliveryAdoptStored(storage, repo, ws, { address: `.records.${record}`, type }, sha256, {
479
+ runner: options.runner,
480
+ ...(seed.signal !== undefined && { signal: seed.signal }),
481
+ });
482
+ return { hash: adopted.hash, rows: adopted.rows };
483
+ }, (stored) => seedCommit(storage, options.runner, repo, ws, record, file, stored, sha256, options.actor ?? 'files', seed), seed.signal);
484
+ },
111
485
  };
112
486
  }
113
487
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/storage/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/storage/index.ts"],"names":[],"mappings":"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"}