@jini-ai/http-kit 0.3.2 → 0.3.6

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.
@@ -30,11 +30,28 @@
30
30
  * claimed attachment must belong to one batch, so the single `batchDirectory` a host grants the
31
31
  * agent read access to cannot be widened by mixing batches.
32
32
  *
33
- * **Storage lifetime is daemon-lifetime, not persistent.** `createDiskAttachmentStore` empties its
34
- * upload directory on construction: files left behind by an interrupted previous process cannot be
35
- * authenticated against an in-memory registry that no longer exists, so they are removed rather
36
- * than adopted. Unclaimed uploads also expire by TTL (`pruneExpired`), and a run's claimed files are
37
- * deleted by `cleanupRun`.
33
+ * **Ownership is opt-in and host-attached, not self-asserted.** `register()`'s optional `ownerId`
34
+ * (and `listPendingForOwner`, the discovery method it enables) is never read from anything a
35
+ * renderer sends a host wires `AttachmentsHttpDeps.resolveOwnerId` to pull it from a channel IT
36
+ * already trusts (its own session-verified principal header, say), never from `req` unauthenticated.
37
+ * A store with no `resolveOwnerId` wired registers every attachment ownerless, and
38
+ * `listPendingForOwner` never returns an ownerless record for any caller — see that method's own doc
39
+ * for why an absent `ownerId` must never become a wildcard match.
40
+ *
41
+ * **Storage lifetime is daemon-lifetime by default, and opt-in restart-surviving.** With
42
+ * `retainAcrossRestarts` left off (the default, and this pack's only behavior before that option
43
+ * existed), `createDiskAttachmentStore` empties its upload directory on construction: files left
44
+ * behind by an interrupted previous process cannot be authenticated against an in-memory registry
45
+ * that no longer exists, so they are removed rather than adopted. Unclaimed uploads also expire by
46
+ * TTL (`pruneExpired`), and a run's claimed files are deleted by `cleanupRun`.
47
+ *
48
+ * That default is wrong for any host whose process restarts while a person is still using the
49
+ * composer. A file-watching dev server restarting the daemon on an unrelated source edit is not a
50
+ * crash, but the construction wipe cannot tell the two apart, so it destroys uploads the user is
51
+ * about to send — real data loss, not a tidy-up. `retainAcrossRestarts: true` replaces "wipe
52
+ * everything, always" with "adopt exactly what can still be authenticated": see
53
+ * {@link prepareAttachmentStorage} for the whole mechanism and {@link loadPersistedAttachments} for
54
+ * why an adopted record is no less trusted than one this process registered itself.
38
55
  *
39
56
  * **This pack does not auto-wire itself into a run's lifecycle**, because no generic hook for that
40
57
  * exists — the same deliberate choice `@jini-ai/daemon`'s `createRunScopedContextStore` makes. A
@@ -80,7 +97,7 @@
80
97
  * correlation-id-bearing generic `INTERNAL_ERROR`, with the real error reaching a host-owned sink —
81
98
  * the same `reportInternalError` shape `media.ts`/`delegated-tools.ts` use.
82
99
  */
83
- import { chmod, lstat, mkdir, open, readdir, realpath, rm, rmdir } from 'node:fs/promises';
100
+ import { chmod, lstat, mkdir, open, readFile, readdir, realpath, rm, rmdir, writeFile } from 'node:fs/promises';
84
101
  import { randomUUID } from 'node:crypto';
85
102
  import { basename, dirname, extname, resolve } from 'node:path';
86
103
  import { createApiError } from '@jini-ai/protocol';
@@ -134,8 +151,76 @@ function apiErrorForRejection(error) {
134
151
  * non-traversing path segment.
135
152
  */
136
153
  const BATCH_ID_PATTERN = /^[a-zA-Z0-9-]{8,80}$/u;
137
- /** Bytes of leading signature `detectAttachmentKind` needs (WEBP's marker ends at byte 12). */
138
- const SIGNATURE_BYTES = 12;
154
+ /**
155
+ * `true` when `body`'s bytes 4-7 spell `ftyp` — the ISO-BMFF box tag AVIF, HEIC, and MP4 all
156
+ * share. This says only "some member of the ISO-BMFF family", never "MP4" or "AVIF" on its own:
157
+ * mirrors `@jini-ai/cms`'s `content-type-sniffer.ts` `isIsoBmffFtyp`, which documents the same
158
+ * fact for the media route's own sniffer. `detectAttachmentKind` never returns `'image'` for this
159
+ * tag alone (see that function's doc) — doing so is exactly the 2026-09-06 regression that made an
160
+ * AVIF render as an unplayable `<video>` when the *media* sniffer briefly had the same bug.
161
+ */
162
+ function hasIsoBmffFtypTag(body) {
163
+ return body.length >= 8 && new TextDecoder().decode(body.slice(4, 8)) === 'ftyp';
164
+ }
165
+ /** ISO-BMFF brands that identify AVIF: a still image (`avif`) or an image sequence (`avis`). Kept
166
+ * identical to `content-type-sniffer.ts`'s `AVIF_BRANDS` so the two sniffers can never disagree on
167
+ * which brands mean AVIF. */
168
+ const AVIF_FTYP_BRANDS = ['avif', 'avis'];
169
+ const FTYP_MAJOR_BRAND_OFFSET = 8;
170
+ /** Compatible brands follow the major brand (offset 8) and 4-byte minor version (offset 12). */
171
+ const FTYP_COMPATIBLE_BRANDS_OFFSET = 16;
172
+ /** Bound on the compatible-brand list scan — real `ftyp` boxes carry a handful, never dozens. */
173
+ const MAX_SCANNED_COMPATIBLE_BRANDS = 16;
174
+ function hasAvifBrandAt(body, offset) {
175
+ return body.length >= offset + 4
176
+ && AVIF_FTYP_BRANDS.some((brand) => new TextDecoder().decode(body.slice(offset, offset + 4)) === brand);
177
+ }
178
+ /** The `ftyp` box's declared end offset (big-endian size at bytes 0-3), clamped to the bytes
179
+ * actually present so a truncated or size-inflating file can never push the brand scan past the
180
+ * captured signature window. */
181
+ function ftypBoxEnd(body) {
182
+ if (body.length < FTYP_MAJOR_BRAND_OFFSET)
183
+ return 0;
184
+ const declared = ((body[0] << 24) | (body[1] << 16) | (body[2] << 8) | body[3]) >>> 0;
185
+ return Math.min(declared, body.length);
186
+ }
187
+ /**
188
+ * `true` when `body` opens with an ISO-BMFF `ftyp` box whose major brand or compatible-brand list
189
+ * names AVIF. This is a line-for-line mirror of `@jini-ai/cms`'s `content-type-sniffer.ts`
190
+ * `isAvif` (no shared dependency exists between `@jini-ai/http-kit` and `@jini-ai/cms` today — see
191
+ * this module's handoff notes on whether extracting one is worth it): the major brand alone is not
192
+ * sufficient, because a great many real AVIF files declare the generic `mif1` (HEIF image) major
193
+ * brand and name `avif` only in the compatible-brand list, so both are checked. HEIC declares
194
+ * neither and is therefore never matched here — deliberate; nothing downstream of this attachment
195
+ * store has confirmed it can render a HEIC as an `<img>`, so labelling one `'image'` would risk the
196
+ * same "sniffed as a type the surface cannot actually display" failure this whole fix addresses.
197
+ *
198
+ * Must run before any generic `ftyp` check: {@link hasIsoBmffFtypTag} alone cannot tell AVIF, HEIC,
199
+ * and MP4 apart, so a brand-blind caller would misclassify every ISO-BMFF file it sees as one type.
200
+ */
201
+ export function hasAvifSignature(body) {
202
+ if (!hasIsoBmffFtypTag(body))
203
+ return false;
204
+ if (hasAvifBrandAt(body, FTYP_MAJOR_BRAND_OFFSET))
205
+ return true;
206
+ const boxEnd = ftypBoxEnd(body);
207
+ for (let index = 0; index < MAX_SCANNED_COMPATIBLE_BRANDS; index++) {
208
+ const offset = FTYP_COMPATIBLE_BRANDS_OFFSET + index * 4;
209
+ if (offset + 4 > boxEnd)
210
+ return false;
211
+ if (hasAvifBrandAt(body, offset))
212
+ return true;
213
+ }
214
+ return false;
215
+ }
216
+ /**
217
+ * Bytes of leading signature `detectAttachmentKind` needs. WEBP's marker ends at byte 12; AVIF
218
+ * needs more — {@link hasAvifSignature}'s compatible-brand scan can read as far as
219
+ * `FTYP_COMPATIBLE_BRANDS_OFFSET + MAX_SCANNED_COMPATIBLE_BRANDS * 4` (a great many real AVIF
220
+ * files declare the generic `mif1` major brand and name `avif` only in the compatible-brand list —
221
+ * see that function's doc), so this is sized to that worst case rather than to the smallest format.
222
+ */
223
+ const SIGNATURE_BYTES = FTYP_COMPATIBLE_BRANDS_OFFSET + MAX_SCANNED_COMPATIBLE_BRANDS * 4;
139
224
  /**
140
225
  * `true` when the file on disk is still the same file registration accepted.
141
226
  *
@@ -272,10 +357,14 @@ const IMAGE_SIGNATURE_MATCHERS = [
272
357
  hasJpegSignature,
273
358
  hasGifSignature,
274
359
  hasWebpSignature,
360
+ hasAvifSignature,
275
361
  ];
276
362
  /**
277
363
  * Infers `'image'` from the leading bytes rather than from a renderer-controlled MIME type or file
278
- * extension. PNG, JPEG, GIF87a/89a, and WEBP are recognized; everything else is `'file'`.
364
+ * extension. PNG, JPEG, GIF87a/89a, WEBP, and AVIF (brand-checked ISO-BMFF, see
365
+ * {@link hasAvifSignature}) are recognized; everything else is `'file'` — including a plain MP4 or
366
+ * other non-AVIF ISO-BMFF file, which shares AVIF's `ftyp` tag but is deliberately NOT matched here
367
+ * (see {@link hasIsoBmffFtypTag}'s doc for why a brand-blind `ftyp` check would be wrong).
279
368
  *
280
369
  * `kind` decides whether a path is later passed to `AgentExecutor.run()`'s `imagePaths`, so letting
281
370
  * a renderer assert it would let a renderer choose how the agent runtime parses the bytes.
@@ -322,6 +411,206 @@ export async function writeBoundedAttachmentBody({ request, filePath, maxBytes,
322
411
  throw error;
323
412
  }
324
413
  }
414
+ // ---------------------------------------------------------------------------
415
+ // Restart survival (`retainAcrossRestarts`)
416
+ // ---------------------------------------------------------------------------
417
+ /**
418
+ * Directory, directly under the upload root, holding one small JSON sidecar per registered
419
+ * attachment. This is what makes a restart-surviving store possible at all: the upload path encodes
420
+ * the batch id and nothing else, so a directory scan alone can never recover an attachment's
421
+ * display `name`, its sniffed `kind`, its capability `id`, or — the one that decides whether
422
+ * `listPendingForOwner` can see it again — its `ownerId`. A scan-only "reconstruct from the paths"
423
+ * design therefore brings the *bytes* back and still shows the user an empty list, which is half a
424
+ * fix.
425
+ *
426
+ * The leading `.` is load-bearing: `BATCH_ID_PATTERN` admits no `.`, so `resolveBatchDirectory` can
427
+ * never produce this path and a batch can never collide with (or be made to write into) the sidecar
428
+ * directory. It also sits OUTSIDE every batch directory on purpose — a batch directory is the one
429
+ * directory a host grants the agent read access to (`AttachmentClaim.batchDirectory`), so sidecars
430
+ * kept next to their files would hand a run the `ownerId` and capability ids of every other
431
+ * attachment in the same batch.
432
+ */
433
+ const SIDECAR_DIRECTORY_NAME = '.records';
434
+ /** Field types a sidecar must carry, checked as data so the validator stays one flat loop. */
435
+ const PERSISTED_FIELD_TYPES = {
436
+ id: 'string',
437
+ filePath: 'string',
438
+ name: 'string',
439
+ kind: 'string',
440
+ size: 'number',
441
+ batchId: 'string',
442
+ dev: 'number',
443
+ ino: 'number',
444
+ createdAt: 'number',
445
+ };
446
+ function hasPersistedFieldTypes(candidate) {
447
+ return Object.entries(PERSISTED_FIELD_TYPES)
448
+ .every(([field, type]) => typeof candidate[field] === type);
449
+ }
450
+ function isPersistedAttachmentShape(raw) {
451
+ if (typeof raw !== 'object' || raw === null)
452
+ return false;
453
+ const candidate = raw;
454
+ if (!hasPersistedFieldTypes(candidate))
455
+ return false;
456
+ if (candidate.ownerId !== undefined && typeof candidate.ownerId !== 'string')
457
+ return false;
458
+ return candidate.kind === 'image' || candidate.kind === 'file';
459
+ }
460
+ /**
461
+ * Turns one sidecar's parsed JSON back into an `AttachmentRecord`, or `undefined` for anything that
462
+ * is not a well-formed record naming a file inside its own batch directory.
463
+ *
464
+ * `batchDirectory` is re-derived here and `filePath`'s containment is re-checked against it with
465
+ * the same parent-equality test `register` uses — the two checks that make an adopted record no
466
+ * more trusted than one this process registered itself. Pure and exported so both can be exercised
467
+ * against hostile input directly, without staging files on disk.
468
+ */
469
+ export function parsePersistedAttachment(raw, canonicalUploadDirectory) {
470
+ if (!isPersistedAttachmentShape(raw))
471
+ return undefined;
472
+ if (!BATCH_ID_PATTERN.test(raw.batchId))
473
+ return undefined;
474
+ const batchDirectory = resolve(canonicalUploadDirectory, raw.batchId);
475
+ const filePath = resolve(raw.filePath);
476
+ if (dirname(filePath) !== batchDirectory)
477
+ return undefined;
478
+ return {
479
+ id: raw.id,
480
+ filePath,
481
+ name: raw.name,
482
+ kind: raw.kind,
483
+ size: raw.size,
484
+ batchId: raw.batchId,
485
+ batchDirectory,
486
+ dev: raw.dev,
487
+ ino: raw.ino,
488
+ createdAt: raw.createdAt,
489
+ ...(raw.ownerId === undefined ? {} : { ownerId: raw.ownerId }),
490
+ };
491
+ }
492
+ /**
493
+ * Sidecar filename for a record id. Reduces the id to the same `[a-zA-Z0-9-]` allowlist
494
+ * `BATCH_ID_PATTERN` uses before appending the extension, so no id — however this store's own id
495
+ * format later changes — can put a `/`, a `..`, or a second extension into the path. Ids are
496
+ * `attachment:<uuid>`, so the reduction stays injective in practice: the UUID is what makes it
497
+ * unique and the UUID survives unchanged.
498
+ */
499
+ export function attachmentSidecarFileName(id) {
500
+ return `${id.replaceAll(/[^a-zA-Z0-9-]/gu, '_')}.json`;
501
+ }
502
+ async function readPersistedAttachment(sidecarPath, canonicalUploadDirectory) {
503
+ try {
504
+ const raw = JSON.parse(await readFile(sidecarPath, 'utf8'));
505
+ return parsePersistedAttachment(raw, canonicalUploadDirectory);
506
+ }
507
+ catch {
508
+ // Unreadable, truncated by a kill mid-write, or not JSON at all. Indistinguishable from a
509
+ // sidecar that never described a real attachment, and handled identically: not adopted.
510
+ return undefined;
511
+ }
512
+ }
513
+ /**
514
+ * `true` when the file this record describes is still byte-for-byte the file registration accepted.
515
+ *
516
+ * Deliberately `verifyClaimedAttachments` rather than a looser existence check: adoption must apply
517
+ * the SAME `dev`/`ino`/`size`/`realpath` gate `claim()` applies, or a restart would become the one
518
+ * moment at which a file swapped underneath the store gets handed to an agent anyway.
519
+ */
520
+ async function isAdoptableAttachment(record) {
521
+ try {
522
+ await verifyClaimedAttachments([record]);
523
+ return true;
524
+ }
525
+ catch {
526
+ return false;
527
+ }
528
+ }
529
+ /**
530
+ * Rebuilds the record map from the sidecar directory, adopting only records that are (a) well
531
+ * formed and contained, (b) still within the retention window, and (c) still backed by the exact
532
+ * file registration accepted. Anything failing any of those is deleted — sidecar first, then the
533
+ * file it named, and the file ONLY when containment passed, so an unparseable sidecar can never
534
+ * make this an arbitrary-file-delete primitive for whatever the daemon can unlink.
535
+ *
536
+ * **The retention consequence, stated rather than assumed harmless.** Because `claimedRunId` is not
537
+ * persisted (see {@link PersistedAttachmentRecord}), a file claimed by a run that died with the
538
+ * process is adopted as unclaimed instead of being wiped, so it now occupies disk and quota for up
539
+ * to `retentionMs` rather than until the next start. Bounded by the same `maxStoredAttachments` /
540
+ * `maxStoredBytes` quotas as any live upload, and cleared by the `pruneExpired` every upload
541
+ * already runs — but it is a real change in when that disk comes back.
542
+ *
543
+ * @complexity O(n) in sidecars present, each costing one read and one `lstat`/`realpath` pair.
544
+ */
545
+ export async function loadPersistedAttachments({ canonicalUploadDirectory, retentionMs, now = Date.now(), }) {
546
+ const sidecarDirectory = resolve(canonicalUploadDirectory, SIDECAR_DIRECTORY_NAME);
547
+ await mkdir(sidecarDirectory, { recursive: true, mode: 0o700 });
548
+ const adopted = new Map();
549
+ for (const entry of await readdir(sidecarDirectory)) {
550
+ const sidecarPath = resolve(sidecarDirectory, entry);
551
+ const record = await readPersistedAttachment(sidecarPath, canonicalUploadDirectory);
552
+ if (record && now - record.createdAt < retentionMs && await isAdoptableAttachment(record)) {
553
+ adopted.set(record.id, record);
554
+ continue;
555
+ }
556
+ await rm(sidecarPath, { force: true });
557
+ if (record)
558
+ await rm(record.filePath, { force: true });
559
+ }
560
+ return adopted;
561
+ }
562
+ /** Deletes everything in one batch directory that no adopted record names, then tidies the
563
+ * directory away if that emptied it. A root entry that is not a directory at all is removed
564
+ * outright — the store never creates one, so it can only be debris. */
565
+ async function removeUnadoptedBatch(batchDirectory, keep) {
566
+ const entries = await readdir(batchDirectory).catch(() => undefined);
567
+ if (entries === undefined) {
568
+ await rm(batchDirectory, { force: true });
569
+ return;
570
+ }
571
+ for (const entry of entries) {
572
+ const filePath = resolve(batchDirectory, entry);
573
+ if (!keep.has(filePath))
574
+ await rm(filePath, { recursive: true, force: true });
575
+ }
576
+ await rmdir(batchDirectory).catch(() => undefined);
577
+ }
578
+ /**
579
+ * Removes every upload the sidecar pass did not adopt. Without this, a file whose sidecar was lost
580
+ * (or was never written, because it predates this option) would survive forever with nothing
581
+ * tracking it — trading the wipe's data loss for unbounded disk growth, which is not a trade worth
582
+ * making. This is what keeps "never wipe on construction" bounded.
583
+ */
584
+ export async function removeUnadoptedUploads(canonicalUploadDirectory, adopted) {
585
+ const keep = new Set([...adopted.values()].map((record) => record.filePath));
586
+ for (const entry of await readdir(canonicalUploadDirectory)) {
587
+ if (entry === SIDECAR_DIRECTORY_NAME)
588
+ continue;
589
+ await removeUnadoptedBatch(resolve(canonicalUploadDirectory, entry), keep);
590
+ }
591
+ }
592
+ /**
593
+ * Decides what a newly-constructed store starts holding: nothing (the default — empty the directory
594
+ * outright, this pack's behavior before `retainAcrossRestarts` existed), or the authenticated
595
+ * survivors of the previous process.
596
+ *
597
+ * Exported so the whole restart decision can be exercised without standing a store up around it.
598
+ */
599
+ export async function prepareAttachmentStorage({ canonicalUploadDirectory, retainAcrossRestarts, retentionMs, now, }) {
600
+ if (!retainAcrossRestarts) {
601
+ for (const entry of await readdir(canonicalUploadDirectory)) {
602
+ await rm(resolve(canonicalUploadDirectory, entry), { recursive: true, force: true });
603
+ }
604
+ return new Map();
605
+ }
606
+ const adopted = await loadPersistedAttachments({
607
+ canonicalUploadDirectory,
608
+ retentionMs,
609
+ ...(now === undefined ? {} : { now }),
610
+ });
611
+ await removeUnadoptedUploads(canonicalUploadDirectory, adopted);
612
+ return adopted;
613
+ }
325
614
  /**
326
615
  * The disk-backed `AttachmentStore` this package ships. Every default matches what a chat composer
327
616
  * needs out of the box; a host that wants different quotas passes them rather than reimplementing
@@ -330,16 +619,54 @@ export async function writeBoundedAttachmentBody({ request, filePath, maxBytes,
330
619
  * @complexity `register`/`claim` are O(n) in the number of tracked records (a small bounded number
331
620
  * — `maxStoredAttachments`), which is what keeps the quota decision synchronous; see `register`.
332
621
  */
333
- export async function createDiskAttachmentStore({ uploadDirectory, maxAttachments = 10, maxBatchBytes = 50 * 1024 * 1024, maxStoredAttachments = 100, maxStoredBytes = 200 * 1024 * 1024, retentionMs = 60 * 60 * 1_000, }) {
622
+ export async function createDiskAttachmentStore({ uploadDirectory, maxAttachments = 10, maxBatchBytes = 50 * 1024 * 1024, maxStoredAttachments = 100, maxStoredBytes = 200 * 1024 * 1024, retentionMs = 60 * 60 * 1_000, retainAcrossRestarts = false, }) {
334
623
  await mkdir(uploadDirectory, { recursive: true, mode: 0o700 });
335
624
  await chmod(uploadDirectory, 0o700);
336
625
  const canonicalUploadDirectory = await realpath(uploadDirectory);
337
- // Uploads live only as long as this store does. A file left by an interrupted previous process
338
- // has no record to authenticate it against, so it is removed rather than adopted.
339
- for (const entry of await readdir(canonicalUploadDirectory)) {
340
- await rm(resolve(canonicalUploadDirectory, entry), { recursive: true, force: true });
341
- }
342
- const records = new Map();
626
+ // Either empties the directory (the default a file left by an interrupted previous process has
627
+ // no record to authenticate it against) or adopts the previous process's authenticated survivors.
628
+ // See `prepareAttachmentStorage`.
629
+ const records = await prepareAttachmentStorage({
630
+ canonicalUploadDirectory,
631
+ retainAcrossRestarts,
632
+ retentionMs,
633
+ });
634
+ const sidecarDirectory = resolve(canonicalUploadDirectory, SIDECAR_DIRECTORY_NAME);
635
+ const sidecarPathFor = (record) => resolve(sidecarDirectory, attachmentSidecarFileName(record.id));
636
+ /**
637
+ * Writes one record's sidecar, or does nothing at all when this store was not asked to survive
638
+ * restarts. A failure rolls the record back out of the map before propagating: a registration
639
+ * whose sidecar could not be written would otherwise be silently non-surviving, which is the
640
+ * exact failure mode this whole option exists to remove. `register`'s own `catch` deletes the
641
+ * file, so the caller sees a failed upload rather than one that quietly evaporates later.
642
+ */
643
+ const persistRecord = async (record) => {
644
+ if (!retainAcrossRestarts)
645
+ return;
646
+ const persisted = {
647
+ id: record.id,
648
+ filePath: record.filePath,
649
+ name: record.name,
650
+ kind: record.kind,
651
+ size: record.size,
652
+ batchId: record.batchId,
653
+ dev: record.dev,
654
+ ino: record.ino,
655
+ createdAt: record.createdAt,
656
+ ...(record.ownerId === undefined ? {} : { ownerId: record.ownerId }),
657
+ };
658
+ try {
659
+ await writeFile(sidecarPathFor(record), JSON.stringify(persisted), { mode: 0o600 });
660
+ }
661
+ catch (error) {
662
+ records.delete(record.id);
663
+ throw error;
664
+ }
665
+ };
666
+ const forgetRecord = async (record) => {
667
+ if (retainAcrossRestarts)
668
+ await rm(sidecarPathFor(record), { force: true });
669
+ };
343
670
  const resolveBatchDirectory = (batchId) => {
344
671
  if (!BATCH_ID_PATTERN.test(batchId)) {
345
672
  throw new AttachmentRejectedError('invalid-batch', 'Invalid attachment batch');
@@ -363,6 +690,7 @@ export async function createDiskAttachmentStore({ uploadDirectory, maxAttachment
363
690
  };
364
691
  const deleteRecord = async (record) => {
365
692
  records.delete(record.id);
693
+ await forgetRecord(record);
366
694
  await rm(record.filePath, { force: true });
367
695
  await removeEmptyBatch(record.batchDirectory);
368
696
  };
@@ -437,8 +765,12 @@ export async function createDiskAttachmentStore({ uploadDirectory, maxAttachment
437
765
  dev: info.dev,
438
766
  ino: info.ino,
439
767
  createdAt: Date.now(),
768
+ ...(input.ownerId === undefined ? {} : { ownerId: input.ownerId }),
440
769
  };
441
770
  records.set(id, record);
771
+ // The first `await` after the synchronous quota window closes, so it cannot reopen the race
772
+ // the comment above guards. Rolls `records` back itself on failure — see `persistRecord`.
773
+ await persistRecord(record);
442
774
  return { path: id, name: record.name, kind: record.kind, size: record.size };
443
775
  }
444
776
  catch (error) {
@@ -478,6 +810,40 @@ export async function createDiskAttachmentStore({ uploadDirectory, maxAttachment
478
810
  throw error;
479
811
  }
480
812
  },
813
+ async resolveForRun(ref, runId) {
814
+ // Synchronous check-then-reserve, same reasoning as `reserveAttachmentRecords`: nothing may
815
+ // `await` between reading `claimedRunId` and writing it, or a concurrent call could observe
816
+ // the same unclaimed record and both believe they reserved it.
817
+ const record = records.get(ref) ?? [...records.values()].find((candidate) => candidate.filePath === ref);
818
+ if (!record)
819
+ return undefined;
820
+ if (record.claimedRunId !== undefined && record.claimedRunId !== runId) {
821
+ throw new AttachmentRejectedError('attachment-unknown-or-claimed', 'Attachment is unknown or already claimed');
822
+ }
823
+ const reservedNow = record.claimedRunId === undefined;
824
+ if (reservedNow)
825
+ record.claimedRunId = runId;
826
+ try {
827
+ await verifyClaimedAttachments([record]);
828
+ }
829
+ catch (error) {
830
+ // Mirrors `claim()`'s own rollback: a lookup that fails integrity must not leave a phantom
831
+ // reservation behind for a record that turned out to be unsafe to hand back.
832
+ if (reservedNow)
833
+ delete record.claimedRunId;
834
+ throw error;
835
+ }
836
+ return { path: record.filePath, name: record.name, kind: record.kind, size: record.size };
837
+ },
838
+ async listPendingForOwner(ownerId) {
839
+ return [...records.values()]
840
+ // `record.ownerId !== undefined` first, short-circuiting before the comparison: this is
841
+ // what makes an ownerless record excluded rather than accidentally matched by a falsy-ish
842
+ // `ownerId` argument — see this method's own doc on why that must never be a wildcard.
843
+ .filter((record) => record.claimedRunId === undefined && record.ownerId !== undefined && record.ownerId === ownerId)
844
+ .sort((a, b) => a.createdAt - b.createdAt)
845
+ .map((record) => ({ ref: record.id, name: record.name, kind: record.kind, size: record.size, createdAt: record.createdAt }));
846
+ },
481
847
  async deleteUnclaimed(batchId, paths) {
482
848
  const batchDirectory = resolveBatchDirectory(batchId);
483
849
  for (const attachmentId of new Set(paths)) {
@@ -576,12 +942,14 @@ export async function handleAttachmentUpload(req, res, deps, state) {
576
942
  sendApiError(res, 400, createApiError('BAD_REQUEST', 'Attachment is empty'));
577
943
  return;
578
944
  }
945
+ const ownerId = deps.resolveOwnerId?.(req);
579
946
  const attachment = await deps.store.register({
580
947
  batchId,
581
948
  path,
582
949
  name,
583
950
  kind: detectAttachmentKind(upload.signature),
584
951
  size: upload.size,
952
+ ...(ownerId === undefined ? {} : { ownerId }),
585
953
  });
586
954
  sendJson(res, 201, { attachment });
587
955
  }
@@ -1 +1 @@
1
- {"version":3,"file":"attachments.js","sourceRoot":"","sources":["../src/attachments.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"attachments.js","sourceRoot":"","sources":["../src/attachments.ts"],"names":[],"mappings":"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"}