@indigoai-us/hq-cloud 5.46.0 → 5.47.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 (49) hide show
  1. package/dist/bin/sync-runner.d.ts +12 -0
  2. package/dist/bin/sync-runner.d.ts.map +1 -1
  3. package/dist/bin/sync-runner.js +39 -0
  4. package/dist/bin/sync-runner.js.map +1 -1
  5. package/dist/bin/sync-runner.test.js +27 -1
  6. package/dist/bin/sync-runner.test.js.map +1 -1
  7. package/dist/cli/share.d.ts.map +1 -1
  8. package/dist/cli/share.js +17 -2
  9. package/dist/cli/share.js.map +1 -1
  10. package/dist/cli/share.test.js +2 -0
  11. package/dist/cli/share.test.js.map +1 -1
  12. package/dist/cli/sync-scope.test.js +1 -0
  13. package/dist/cli/sync-scope.test.js.map +1 -1
  14. package/dist/cli/sync.d.ts.map +1 -1
  15. package/dist/cli/sync.js +11 -1
  16. package/dist/cli/sync.js.map +1 -1
  17. package/dist/cli/sync.test.js +1 -0
  18. package/dist/cli/sync.test.js.map +1 -1
  19. package/dist/object-io.d.ts +218 -0
  20. package/dist/object-io.d.ts.map +1 -0
  21. package/dist/object-io.js +588 -0
  22. package/dist/object-io.js.map +1 -0
  23. package/dist/object-io.test.d.ts +11 -0
  24. package/dist/object-io.test.d.ts.map +1 -0
  25. package/dist/object-io.test.js +568 -0
  26. package/dist/object-io.test.js.map +1 -0
  27. package/dist/s3.d.ts +37 -0
  28. package/dist/s3.d.ts.map +1 -1
  29. package/dist/s3.js +207 -198
  30. package/dist/s3.js.map +1 -1
  31. package/dist/vault-client.d.ts +68 -0
  32. package/dist/vault-client.d.ts.map +1 -1
  33. package/dist/vault-client.js +35 -0
  34. package/dist/vault-client.js.map +1 -1
  35. package/package.json +1 -1
  36. package/scripts/presign-transport-e2e.mjs +203 -0
  37. package/scripts/vault-rebaseline.sh +275 -0
  38. package/scripts/vault-rescue.sh +8 -0
  39. package/src/bin/sync-runner.test.ts +41 -0
  40. package/src/bin/sync-runner.ts +52 -0
  41. package/src/cli/share.test.ts +2 -0
  42. package/src/cli/share.ts +29 -2
  43. package/src/cli/sync-scope.test.ts +1 -0
  44. package/src/cli/sync.test.ts +1 -0
  45. package/src/cli/sync.ts +22 -1
  46. package/src/object-io.test.ts +663 -0
  47. package/src/object-io.ts +782 -0
  48. package/src/s3.ts +259 -233
  49. package/src/vault-client.ts +101 -0
package/dist/s3.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"s3.d.ts","sourceRoot":"","sources":["../src/s3.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAYH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAkBhD;;;;GAIG;AACH,MAAM,WAAW,YAAY;IAC3B,4DAA4D;IAC5D,OAAO,EAAE,MAAM,CAAC;IAChB,+BAA+B;IAC/B,KAAK,EAAE,MAAM,CAAC;CACf;AA6BD;;;;;;;;;;;;;;;;;;;GAmBG;AACH,eAAO,MAAM,uBAAuB,sBAAsB,CAAC;AAE3D;;;;GAIG;AACH,eAAO,MAAM,yBAAyB,MAAM,CAAC;AAE7C;;;;;GAKG;AACH,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAEjE;AAED;;;;;;GAMG;AACH,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAUhE;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,eAAO,MAAM,mBAAmB,gBAAgB,CAAC;AAEjD;;;;;;;;;;;;;;;;;;;GAmBG;AACH,eAAO,MAAM,kBAAkB,YAAY,CAAC;AAE5C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AACH,eAAO,MAAM,mBAAmB,aAAa,CAAC;AAE9C;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,mBAAmB,aAAa,CAAC;AAE9C;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAExD;AAED,wBAAsB,UAAU,CAC9B,GAAG,EAAE,aAAa,EAClB,SAAS,EAAE,MAAM,EACjB,GAAG,EAAE,MAAM,EACX,MAAM,CAAC,EAAE,YAAY,GACpB,OAAO,CAAC;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,CAuG3B;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,aAAa,CACjC,GAAG,EAAE,aAAa,EAClB,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,MAAM,EACX,MAAM,CAAC,EAAE,YAAY,GACpB,OAAO,CAAC;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,CA+C3B;AAED;;;;;;;;GAQG;AACH,wBAAsB,YAAY,CAChC,GAAG,EAAE,aAAa,EAClB,GAAG,EAAE,MAAM,EACX,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAAE,CAAC,CAgMhD;AAED,MAAM,WAAW,UAAU;IACzB,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,IAAI,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,wBAAsB,eAAe,CACnC,GAAG,EAAE,aAAa,EAClB,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC,UAAU,EAAE,CAAC,CAwDvB;AAED,wBAAsB,gBAAgB,CACpC,GAAG,EAAE,aAAa,EAClB,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,IAAI,CAAC,CASf;AAED;;GAEG;AACH,wBAAsB,cAAc,CAClC,GAAG,EAAE,aAAa,EAClB,GAAG,EAAE,MAAM,GACV,OAAO,CAAC;IAAE,YAAY,EAAE,IAAI,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAAE,GAAG,IAAI,CAAC,CAqBvG"}
1
+ {"version":3,"file":"s3.d.ts","sourceRoot":"","sources":["../src/s3.ts"],"names":[],"mappings":"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"}
package/dist/s3.js CHANGED
@@ -7,22 +7,7 @@
7
7
  */
8
8
  import * as fs from "fs";
9
9
  import * as path from "path";
10
- import { S3Client, PutObjectCommand, GetObjectCommand, ListObjectsV2Command, DeleteObjectCommand, HeadObjectCommand, } from "@aws-sdk/client-s3";
11
- /**
12
- * Build an S3Client from an EntityContext's STS-scoped credentials.
13
- * A new client is created each time to ensure fresh credentials are used
14
- * (the caller handles caching/refresh at the EntityContext level).
15
- */
16
- function buildClient(ctx) {
17
- return new S3Client({
18
- region: ctx.region,
19
- credentials: {
20
- accessKeyId: ctx.credentials.accessKeyId,
21
- secretAccessKey: ctx.credentials.secretAccessKey,
22
- sessionToken: ctx.credentials.sessionToken,
23
- },
24
- });
25
- }
10
+ import { resolveObjectIO } from "./object-io.js";
26
11
  /**
27
12
  * S3 user metadata is ASCII-only (lowercased on read, capped at 2 KB total).
28
13
  * Values that fail the printable-ASCII test or would push the keys over the
@@ -212,100 +197,172 @@ export const FILE_BTIME_META_KEY = "hq-btime";
212
197
  export function encodeSymlinkBody(target) {
213
198
  return Buffer.from(SYMLINK_BODY_PREFIX + target, "utf-8");
214
199
  }
215
- export async function uploadFile(ctx, localPath, key, author) {
216
- const client = buildClient(ctx);
217
- const body = fs.readFileSync(localPath);
218
- // Capture source-side file mode (permission bits only) for Bug #5 see
219
- // FILE_MODE_META_KEY doc. Best-effort: lstat failure (raced rm, EPERM)
220
- // falls through to "no mode header" and the receiver keeps its umask
221
- // default same as the legacy back-compat path.
222
- //
223
- // 5.37.0: same lstat call also yields mtimeMs + birthtimeMs for the
224
- // hq-mtime / hq-btime metadata headers. Single lstat keeps the syscall
225
- // budget identical to 5.36.0; the additional metadata fields are pure
226
- // in-memory work on the lstat result. Symlinks skip ALL THREE stamps
227
- // symlink mode is OS-controlled, symlink mtime isn't user-meaningful
228
- // because the wire body is `hq-symlink:` + target (not real file
229
- // content), and fs.utimesSync follows links so applying it on receive
230
- // would mutate the target's mtime instead of the link's.
231
- let modeOctal;
232
- let mtimeMsStamp;
233
- let btimeMsStamp;
234
- try {
235
- const lstat = fs.lstatSync(localPath);
236
- if (!lstat.isSymbolicLink()) {
237
- modeOctal = (lstat.mode & 0o777).toString(8);
238
- // Math.floor truncates the sub-millisecond fractional component
239
- // some filesystems report (APFS returns full ms+fraction; ext4
240
- // is integer-ms). String(int) on the read side matches the
241
- // strict-numeric regex `^-?[0-9]{1,16}$` optional leading `-`,
242
- // no leading zeros, no decimals, no exponents.
243
- //
244
- // Codex PR #27 P2: accept the full finite range, including 0
245
- // (Unix epoch) and negatives (pre-epoch / reproducible-build
246
- // clamping). Earlier `> 0` filter silently dropped legitimate
247
- // timestamps and broke the round-trip guarantee for that subset.
248
- const mtimeFloor = Math.floor(lstat.mtimeMs);
249
- if (Number.isFinite(lstat.mtimeMs)) {
250
- mtimeMsStamp = String(mtimeFloor);
251
- }
252
- // birthtimeMs filter: only stamp when the filesystem actually
253
- // tracks a separate creation time. ext4 historically returns 0
254
- // (unsupported) or equals mtimeMs (no distinct tracking); tmpfs
255
- // and some FUSE mounts behave similarly. Filtering at the source
256
- // keeps the metadata header free of noise — the receiver can
257
- // assume hq-btime, if present, carries real signal.
258
- //
259
- // Compare the floored values (not raw lstat.birthtimeMs vs
260
- // lstat.mtimeMs) because APFS exposes sub-millisecond fractions —
261
- // two timestamps representing the "same moment" for sync purposes
262
- // can differ by < 1 ms and pass a strict `!==` check while serializing
263
- // to the same integer-ms string. Comparing floor-to-floor matches
264
- // what we actually emit on the wire.
265
- const btimeFloor = Math.floor(lstat.birthtimeMs);
266
- if (Number.isFinite(lstat.birthtimeMs) &&
267
- btimeFloor > 0 &&
268
- btimeFloor !== mtimeFloor) {
269
- btimeMsStamp = String(btimeFloor);
270
- }
271
- }
272
- }
273
- catch {
274
- // Leave stamps undefined; receiver applies its umask default and
275
- // leaves mtime at write-time (the legacy back-compat path).
200
+ /**
201
+ * Batch pre-mint transport URLs for `keys` under `op` so the subsequent
202
+ * per-file transfer calls (downloadFile/headRemoteFile/…) reuse them instead
203
+ * of presigning one key at a time. On the presigned-URL transport this turns
204
+ * an N-file leg from N presign requests into ceil(N/100) the difference
205
+ * between completing a bulk pull and 429ing past the 100-req/hr limit. No-op
206
+ * on the S3 SDK transport (which has no presign step) and harmless if called
207
+ * with an empty list. Best-effort: a prime failure never propagates — the
208
+ * per-file path falls back to a single presign.
209
+ *
210
+ * Call it once, right before a transfer loop, with the full key set the loop
211
+ * will touch. The presigned transport memoizes one IO instance per company for
212
+ * the run, so the warmed cache is the same one the loop drains.
213
+ */
214
+ export async function primeObjectTransport(ctx, op, keys) {
215
+ if (keys.length === 0)
216
+ return;
217
+ const io = resolveObjectIO(ctx);
218
+ if (!io.prime)
219
+ return;
220
+ await io.prime(op, keys.map((key) => ({ key })));
221
+ }
222
+ /**
223
+ * Source-side mode + mtime (+ btime when distinct) metadata for a regular
224
+ * file, from a single lstat. Symlinks carry none (OS-controlled mode; a link's
225
+ * mtime isn't user-meaningful the wire body is the target string, not file
226
+ * content). Shared by uploadFile and the primeUploads pre-pass so the PUT
227
+ * metadata they produce is byte-identical. See the FILE_*_META_KEY docs for the
228
+ * per-field rationale.
229
+ */
230
+ function buildModeTimeMetadata(lstat) {
231
+ const meta = {};
232
+ if (lstat.isSymbolicLink())
233
+ return meta;
234
+ meta[FILE_MODE_META_KEY] = (lstat.mode & 0o777).toString(8);
235
+ const mtimeFloor = Math.floor(lstat.mtimeMs);
236
+ if (Number.isFinite(lstat.mtimeMs))
237
+ meta[FILE_MTIME_META_KEY] = String(mtimeFloor);
238
+ const btimeFloor = Math.floor(lstat.birthtimeMs);
239
+ if (Number.isFinite(lstat.birthtimeMs) &&
240
+ btimeFloor > 0 &&
241
+ btimeFloor !== mtimeFloor) {
242
+ meta[FILE_BTIME_META_KEY] = String(btimeFloor);
276
243
  }
277
- // Preserve the original `created-at` across re-uploads when the object
278
- // already exists with author metadata — same convention the hq-console
279
- // upload route uses, so the NEW-pill ageing window doesn't reset on every
280
- // sync tick. HEAD failure (NoSuchKey, perm, transient 5xx) falls through
281
- // to "now", which is correct for a first upload.
244
+ return meta;
245
+ }
246
+ /**
247
+ * Resolve the created-at to stamp: the existing object's value (preserved
248
+ * across re-uploads so the hq-console NEW-pill window doesn't reset) or now for
249
+ * a first upload. HEAD failure / no author → now. Shared by upload* and
250
+ * primeUploads so both agree on the value signed into the PUT.
251
+ */
252
+ async function resolveCreatedAt(io, key, author) {
282
253
  let createdAt = new Date().toISOString();
283
254
  if (author) {
284
255
  try {
285
- const head = await client.send(new HeadObjectCommand({ Bucket: ctx.bucketName, Key: key }));
286
- const existing = head.Metadata?.["created-at"];
256
+ const head = await io.headObject(key);
257
+ const existing = head?.metadata?.["created-at"];
287
258
  if (typeof existing === "string" && existing.length > 0) {
288
259
  createdAt = existing;
289
260
  }
290
261
  }
291
262
  catch {
292
- // Object doesn't exist yet, or HEAD denied — keep `now`.
263
+ // Object doesn't exist yet, or HEAD failed — keep now (first upload).
264
+ }
265
+ }
266
+ return createdAt;
267
+ }
268
+ /**
269
+ * Batch pre-mint PUT URLs (+ the created-at HEADs they depend on) for a set of
270
+ * uploads, signing the SAME metadata uploadFile/uploadSymlink would compute so
271
+ * the transfer loop can replay the cached headers. Turns an N-file push from
272
+ * ~N presign calls (1 per PUT, sometimes 2-3 with HEADs) into ceil(N/1000) GET
273
+ * + ceil(N/1000) PUT — the difference between completing a bulk push and 429ing
274
+ * past the 100/hr limit. No-op on the S3 SDK transport; best-effort.
275
+ *
276
+ * The per-item created-at HEADs run over the GET cache primed first, so they
277
+ * cost S3 round-trips but NO extra presign calls (not counted against 100/hr).
278
+ */
279
+ export async function primeUploads(ctx, items) {
280
+ const io = resolveObjectIO(ctx);
281
+ if (!io.prime || items.length === 0)
282
+ return;
283
+ // Prime GET first so each item's created-at HEAD reuses a cached URL.
284
+ await io.prime("get", items.map((i) => ({ key: i.key })));
285
+ // Build per-key PUT metadata with the SAME builders the upload path uses,
286
+ // bounded-concurrently (the HEADs are cheap cached-GET fetches).
287
+ const putKeys = [];
288
+ const CONCURRENCY = 16;
289
+ let next = 0;
290
+ const worker = async () => {
291
+ while (next < items.length) {
292
+ const it = items[next++];
293
+ const createdAt = await resolveCreatedAt(io, it.key, it.author);
294
+ if (it.isSymlink) {
295
+ putKeys.push({
296
+ key: it.key,
297
+ contentType: "application/octet-stream",
298
+ metadata: {
299
+ [SYMLINK_TARGET_META_KEY]: SYMLINK_MARKER_META_VALUE,
300
+ ...(it.author ? buildAuthorMetadata(it.author, createdAt) : {}),
301
+ },
302
+ });
303
+ }
304
+ else {
305
+ let modeTime = {};
306
+ try {
307
+ modeTime = buildModeTimeMetadata(fs.lstatSync(it.localPath));
308
+ }
309
+ catch {
310
+ // raced rm / EPERM — leave stamps off (receiver umask default).
311
+ }
312
+ putKeys.push({
313
+ key: it.key,
314
+ contentType: getMimeType(it.key),
315
+ metadata: {
316
+ ...(it.author ? buildAuthorMetadata(it.author, createdAt) : {}),
317
+ ...modeTime,
318
+ },
319
+ });
320
+ }
293
321
  }
322
+ };
323
+ await Promise.all(Array.from({ length: Math.min(CONCURRENCY, items.length) }, worker));
324
+ await io.prime("put", putKeys);
325
+ }
326
+ export async function uploadFile(ctx, localPath, key, author) {
327
+ const io = resolveObjectIO(ctx);
328
+ const body = fs.readFileSync(localPath);
329
+ // Fast path: a primeUploads() pre-pass already signed this file's metadata
330
+ // into a cached PUT URL. Skip the lstat-metadata + created-at HEAD and just
331
+ // send the body — putObject replays the cached headers (computed by the SAME
332
+ // builders below, so identical). hasPrimedPut only reports true with >60s of
333
+ // URL lifetime left, so the cache can't expire before the putObject below.
334
+ if (io.hasPrimedPut?.(key)) {
335
+ const primed = await io.putObject({
336
+ key,
337
+ body,
338
+ contentType: getMimeType(key),
339
+ metadata: {},
340
+ });
341
+ return { etag: primed.etag };
342
+ }
343
+ // Source-side mode/mtime/btime (Bug #5 + 5.37.0) and the preserved
344
+ // created-at (so the NEW-pill window doesn't reset on re-upload). Both via
345
+ // the shared builders that primeUploads uses, so a primed PUT carries the
346
+ // identical metadata — see buildModeTimeMetadata / resolveCreatedAt.
347
+ let modeTime = {};
348
+ try {
349
+ modeTime = buildModeTimeMetadata(fs.lstatSync(localPath));
350
+ }
351
+ catch {
352
+ // raced rm / EPERM — leave stamps off; receiver keeps its umask default.
294
353
  }
354
+ const createdAt = await resolveCreatedAt(io, key, author);
295
355
  const Metadata = {
296
356
  ...(author ? buildAuthorMetadata(author, createdAt) : {}),
297
- ...(modeOctal ? { [FILE_MODE_META_KEY]: modeOctal } : {}),
298
- ...(mtimeMsStamp ? { [FILE_MTIME_META_KEY]: mtimeMsStamp } : {}),
299
- ...(btimeMsStamp ? { [FILE_BTIME_META_KEY]: btimeMsStamp } : {}),
357
+ ...modeTime,
300
358
  };
301
- const response = await client.send(new PutObjectCommand({
302
- Bucket: ctx.bucketName,
303
- Key: key,
304
- Body: body,
305
- ContentType: getMimeType(key),
306
- ...(Object.keys(Metadata).length > 0 ? { Metadata } : {}),
307
- }));
308
- return { etag: response.ETag || "" };
359
+ const response = await io.putObject({
360
+ key,
361
+ body,
362
+ contentType: getMimeType(key),
363
+ metadata: Metadata,
364
+ });
365
+ return { etag: response.etag };
309
366
  }
310
367
  /**
311
368
  * Upload a symlink as a zero-byte object whose user metadata carries the
@@ -320,23 +377,22 @@ export async function uploadFile(ctx, localPath, key, author) {
320
377
  * caller (currently: upload anyway, never silently rewrite).
321
378
  */
322
379
  export async function uploadSymlink(ctx, target, key, author) {
323
- const client = buildClient(ctx);
324
- // Same created-at preservation logic as uploadFile so the hq-console
325
- // NEW-pill ageing window doesn't reset when a symlink is re-uploaded
326
- // unchanged across syncs.
327
- let createdAt = new Date().toISOString();
328
- if (author) {
329
- try {
330
- const head = await client.send(new HeadObjectCommand({ Bucket: ctx.bucketName, Key: key }));
331
- const existing = head.Metadata?.["created-at"];
332
- if (typeof existing === "string" && existing.length > 0) {
333
- createdAt = existing;
334
- }
335
- }
336
- catch {
337
- // First upload of this key, or HEAD denied — keep `now`.
338
- }
380
+ const io = resolveObjectIO(ctx);
381
+ const symlinkBody = encodeSymlinkBody(target);
382
+ // Fast path: primeUploads() already signed this symlink's metadata into a
383
+ // cached PUT URL — send the body, replay the cached headers.
384
+ if (io.hasPrimedPut?.(key)) {
385
+ const primed = await io.putObject({
386
+ key,
387
+ body: symlinkBody,
388
+ contentType: "application/octet-stream",
389
+ metadata: {},
390
+ });
391
+ return { etag: primed.etag };
339
392
  }
393
+ // Same created-at preservation as uploadFile (shared resolveCreatedAt) so the
394
+ // NEW-pill window doesn't reset on re-upload, and so a primed PUT matches.
395
+ const createdAt = await resolveCreatedAt(io, key, author);
340
396
  const Metadata = {
341
397
  // Marker-only: a constant flag value, not the target. The body
342
398
  // is the source of truth for the target (no 2 KiB cap, no
@@ -345,20 +401,19 @@ export async function uploadSymlink(ctx, target, key, author) {
345
401
  [SYMLINK_TARGET_META_KEY]: SYMLINK_MARKER_META_VALUE,
346
402
  ...(author ? buildAuthorMetadata(author, createdAt) : {}),
347
403
  };
348
- const response = await client.send(new PutObjectCommand({
349
- Bucket: ctx.bucketName,
350
- Key: key,
404
+ const response = await io.putObject({
405
+ key,
351
406
  // Body = SYMLINK_BODY_PREFIX + target (UTF-8). The prefix is what
352
407
  // makes a symlink record's ETag distinguishable from a regular
353
408
  // file whose contents happen to equal the target string — the
354
409
  // LIST-based pull planner can't see per-object metadata, so ETag
355
410
  // is its only drift signal across symlink ↔ regular-file
356
411
  // transitions. See SYMLINK_BODY_PREFIX doc above.
357
- Body: encodeSymlinkBody(target),
358
- ContentType: "application/octet-stream",
359
- Metadata,
360
- }));
361
- return { etag: response.ETag || "" };
412
+ body: symlinkBody,
413
+ contentType: "application/octet-stream",
414
+ metadata: Metadata,
415
+ });
416
+ return { etag: response.etag };
362
417
  }
363
418
  /**
364
419
  * Download an object to localPath and return its S3 user-metadata.
@@ -370,14 +425,13 @@ export async function uploadSymlink(ctx, target, key, author) {
370
425
  * attribute downloaded files to their author with zero extra network.
371
426
  */
372
427
  export async function downloadFile(ctx, key, localPath) {
373
- const client = buildClient(ctx);
374
- const response = await client.send(new GetObjectCommand({
375
- Bucket: ctx.bucketName,
376
- Key: key,
377
- }));
378
- if (!response.Body) {
379
- throw new Error(`Empty response for ${key}`);
380
- }
428
+ const io = resolveObjectIO(ctx);
429
+ // The transport returns the full object body buffered + its user metadata.
430
+ // downloadFile already buffered the whole object (writeFileSync of the
431
+ // concatenated chunks), so buffering at the transport layer is behavior-
432
+ // preserving — symlink record bodies are tiny and regular files were read
433
+ // fully into memory regardless.
434
+ const { body: objectBody, metadata } = await io.getObject(key);
381
435
  const dir = path.dirname(localPath);
382
436
  if (!fs.existsSync(dir)) {
383
437
  fs.mkdirSync(dir, { recursive: true });
@@ -390,21 +444,14 @@ export async function downloadFile(ctx, key, localPath) {
390
444
  // S3 lowercases user-metadata keys on read (and sometimes on
391
445
  // write), so the lookup uses the lowercased form. We don't
392
446
  // normalize Metadata keys ourselves — the AWS SDK already does it.
393
- const symlinkMarker = response.Metadata?.[SYMLINK_TARGET_META_KEY];
447
+ const symlinkMarker = metadata?.[SYMLINK_TARGET_META_KEY];
394
448
  const isSymlinkRecord = typeof symlinkMarker === "string" && symlinkMarker.length > 0;
395
449
  if (isSymlinkRecord) {
396
- // Consume the body to extract the target. Symlink record bodies
397
- // are bounded by target length (typically <300 bytes for
398
- // relative paths, hard-capped by S3's 5 GB object size); the
399
- // read is cheap. Drain explicitly so the SDK's HTTP socket is
400
- // released back to the connection pool — without this, a sync
401
- // over a tree with many symlinks can stall or pool-exhaust.
402
- const chunks = [];
403
- const stream = response.Body;
404
- for await (const chunk of stream) {
405
- chunks.push(Buffer.from(chunk));
406
- }
407
- const bodyString = Buffer.concat(chunks).toString("utf-8");
450
+ // The target lives in the body (marker-only metadata convention).
451
+ // Symlink record bodies are bounded by target length (typically
452
+ // <300 bytes for relative paths, hard-capped by S3's 5 GB object
453
+ // size); the transport already buffered it.
454
+ const bodyString = objectBody.toString("utf-8");
408
455
  let symlinkTarget;
409
456
  if (bodyString.startsWith(SYMLINK_BODY_PREFIX)) {
410
457
  symlinkTarget = bodyString.slice(SYMLINK_BODY_PREFIX.length);
@@ -436,7 +483,7 @@ export async function downloadFile(ctx, key, localPath) {
436
483
  }
437
484
  }
438
485
  fs.symlinkSync(symlinkTarget, localPath);
439
- return { metadata: response.Metadata };
486
+ return { metadata };
440
487
  }
441
488
  // Symmetric to the symlink branch above: when a key was previously a
442
489
  // symlink and is later replaced in S3 by a regular object, the local
@@ -460,12 +507,7 @@ export async function downloadFile(ctx, key, localPath) {
460
507
  throw err;
461
508
  }
462
509
  }
463
- const chunks = [];
464
- const stream = response.Body;
465
- for await (const chunk of stream) {
466
- chunks.push(Buffer.from(chunk));
467
- }
468
- fs.writeFileSync(localPath, Buffer.concat(chunks));
510
+ fs.writeFileSync(localPath, objectBody);
469
511
  // Bug #5 — apply source-side mode after the byte write. See
470
512
  // FILE_MODE_META_KEY for the metadata contract. Parses defensively:
471
513
  // a malformed value falls through with no chmod so the umask default
@@ -480,7 +522,7 @@ export async function downloadFile(ctx, key, localPath) {
480
522
  // requires 1–4 pure octal digits (`[0-7]{1,4}$`), which matches what
481
523
  // the upload side stamps (`(mode & 0o777).toString(8)` → at most
482
524
  // three digits, all 0–7) and rejects everything else.
483
- const modeOctal = response.Metadata?.[FILE_MODE_META_KEY];
525
+ const modeOctal = metadata?.[FILE_MODE_META_KEY];
484
526
  if (typeof modeOctal === "string" && /^[0-7]{1,4}$/.test(modeOctal)) {
485
527
  const parsed = parseInt(modeOctal, 8);
486
528
  if (Number.isFinite(parsed) && parsed >= 0 && parsed <= 0o777) {
@@ -519,7 +561,7 @@ export async function downloadFile(ctx, key, localPath) {
519
561
  // similarly lstats after downloadFile). If a future caller stamps the
520
562
  // journal BEFORE downloadFile completes, the fast-path will stale and
521
563
  // re-hash every sync forever — keep the call-site invariant intact.
522
- const mtimeRaw = response.Metadata?.[FILE_MTIME_META_KEY];
564
+ const mtimeRaw = metadata?.[FILE_MTIME_META_KEY];
523
565
  if (typeof mtimeRaw === "string" && /^-?[0-9]{1,16}$/.test(mtimeRaw)) {
524
566
  const mtimeMs = parseInt(mtimeRaw, 10);
525
567
  if (Number.isFinite(mtimeMs)) {
@@ -543,26 +585,15 @@ export async function downloadFile(ctx, key, localPath) {
543
585
  // The push side already emits hq-btime when the source FS tracks a
544
586
  // distinct creation time, so a future receiver upgrade picks it up
545
587
  // automatically without a server-side data migration.
546
- return { metadata: response.Metadata };
588
+ return { metadata };
547
589
  }
548
590
  export async function listRemoteFiles(ctx, prefix) {
549
- const client = buildClient(ctx);
591
+ const io = resolveObjectIO(ctx);
550
592
  const files = [];
551
593
  let continuationToken;
552
594
  do {
553
- const response = await client.send(new ListObjectsV2Command({
554
- Bucket: ctx.bucketName,
555
- Prefix: prefix,
556
- ContinuationToken: continuationToken,
557
- }));
558
- for (const obj of response.Contents || []) {
559
- // Pre-fix this guard was `!obj.Key || !obj.Size`. The `!obj.Size` test
560
- // is truthy when Size === 0 (a real 0-byte object like `.gitkeep`),
561
- // silently filtering legitimate placeholder files out of every pull
562
- // plan. Narrow the guard to "no key" only; surface real 0-byte
563
- // objects to the planner.
564
- if (!obj.Key)
565
- continue;
595
+ const page = await io.listObjects({ prefix, continuationToken });
596
+ for (const obj of page.objects) {
566
597
  // Drop S3 directory-marker objects: the canonical shape is `0-byte
567
598
  // key ending in '/'` (S3 console "Create folder", `aws s3 sync` of
568
599
  // empty dirs, sync tools that mirror empty trees). Two downstream
@@ -572,61 +603,39 @@ export async function listRemoteFiles(ctx, prefix) {
572
603
  // → EISDIR "open" after the parent mkdir creates the leaf as a
573
604
  // directory). Filtering here eliminates both.
574
605
  //
575
- // Narrow on Size===0 (not just trailing-slash) so a hypothetical
606
+ // Narrow on size===0 (not just trailing-slash) so a hypothetical
576
607
  // non-empty object whose key happens to end in '/' is NOT silently
577
608
  // hidden — it stays visible and downloadFile surfaces the same
578
609
  // EISDIR "open" error pointing at the specific key, which is the
579
610
  // signal an operator needs to reconcile the bucket. The vault
580
611
  // service doesn't have a code path that produces such an object,
581
- // but ListObjectsV2 returns whatever lives in the bucket; silent
612
+ // but the listing returns whatever lives in the bucket; silent
582
613
  // drop would be worse than loud failure for that case.
583
614
  //
584
615
  // Real 0-byte placeholders like `.gitkeep` never end in `/` and
585
616
  // continue to flow through — the 5.13.0 `.gitkeep` regression
586
- // remains fixed.
587
- if (obj.Key.endsWith("/") && (obj.Size ?? 0) === 0)
617
+ // remains fixed. (The `!key` guard now lives in the ObjectIO layer.)
618
+ if (obj.key.endsWith("/") && obj.size === 0)
588
619
  continue;
589
620
  files.push({
590
- key: obj.Key,
591
- size: obj.Size ?? 0,
592
- lastModified: obj.LastModified || new Date(),
593
- etag: obj.ETag || "",
621
+ key: obj.key,
622
+ size: obj.size,
623
+ lastModified: obj.lastModified,
624
+ etag: obj.etag,
594
625
  });
595
626
  }
596
- continuationToken = response.NextContinuationToken;
627
+ continuationToken = page.nextContinuationToken;
597
628
  } while (continuationToken);
598
629
  return files;
599
630
  }
600
631
  export async function deleteRemoteFile(ctx, key) {
601
- const client = buildClient(ctx);
602
- await client.send(new DeleteObjectCommand({
603
- Bucket: ctx.bucketName,
604
- Key: key,
605
- }));
632
+ await resolveObjectIO(ctx).deleteObject(key);
606
633
  }
607
634
  /**
608
635
  * Check if a remote key exists and return its metadata.
609
636
  */
610
637
  export async function headRemoteFile(ctx, key) {
611
- const client = buildClient(ctx);
612
- try {
613
- const response = await client.send(new HeadObjectCommand({
614
- Bucket: ctx.bucketName,
615
- Key: key,
616
- }));
617
- return {
618
- lastModified: response.LastModified || new Date(),
619
- etag: response.ETag || "",
620
- size: response.ContentLength || 0,
621
- metadata: response.Metadata,
622
- };
623
- }
624
- catch (err) {
625
- if (err && typeof err === "object" && "name" in err && err.name === "NotFound") {
626
- return null;
627
- }
628
- throw err;
629
- }
638
+ return resolveObjectIO(ctx).headObject(key);
630
639
  }
631
640
  function getMimeType(filePath) {
632
641
  const ext = path.extname(filePath).toLowerCase();
package/dist/s3.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"s3.js","sourceRoot":"","sources":["../src/s3.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"s3.js","sourceRoot":"","sources":["../src/s3.ts"],"names":[],"mappings":"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"}