@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.
- package/dist/bin/sync-runner.d.ts +12 -0
- package/dist/bin/sync-runner.d.ts.map +1 -1
- package/dist/bin/sync-runner.js +39 -0
- package/dist/bin/sync-runner.js.map +1 -1
- package/dist/bin/sync-runner.test.js +27 -1
- package/dist/bin/sync-runner.test.js.map +1 -1
- package/dist/cli/share.d.ts.map +1 -1
- package/dist/cli/share.js +17 -2
- package/dist/cli/share.js.map +1 -1
- package/dist/cli/share.test.js +2 -0
- package/dist/cli/share.test.js.map +1 -1
- package/dist/cli/sync-scope.test.js +1 -0
- package/dist/cli/sync-scope.test.js.map +1 -1
- package/dist/cli/sync.d.ts.map +1 -1
- package/dist/cli/sync.js +11 -1
- package/dist/cli/sync.js.map +1 -1
- package/dist/cli/sync.test.js +1 -0
- package/dist/cli/sync.test.js.map +1 -1
- package/dist/object-io.d.ts +218 -0
- package/dist/object-io.d.ts.map +1 -0
- package/dist/object-io.js +588 -0
- package/dist/object-io.js.map +1 -0
- package/dist/object-io.test.d.ts +11 -0
- package/dist/object-io.test.d.ts.map +1 -0
- package/dist/object-io.test.js +568 -0
- package/dist/object-io.test.js.map +1 -0
- package/dist/s3.d.ts +37 -0
- package/dist/s3.d.ts.map +1 -1
- package/dist/s3.js +207 -198
- package/dist/s3.js.map +1 -1
- package/dist/vault-client.d.ts +68 -0
- package/dist/vault-client.d.ts.map +1 -1
- package/dist/vault-client.js +35 -0
- package/dist/vault-client.js.map +1 -1
- package/package.json +1 -1
- package/scripts/presign-transport-e2e.mjs +203 -0
- package/scripts/vault-rebaseline.sh +275 -0
- package/scripts/vault-rescue.sh +8 -0
- package/src/bin/sync-runner.test.ts +41 -0
- package/src/bin/sync-runner.ts +52 -0
- package/src/cli/share.test.ts +2 -0
- package/src/cli/share.ts +29 -2
- package/src/cli/sync-scope.test.ts +1 -0
- package/src/cli/sync.test.ts +1 -0
- package/src/cli/sync.ts +22 -1
- package/src/object-io.test.ts +663 -0
- package/src/object-io.ts +782 -0
- package/src/s3.ts +259 -233
- 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;
|
|
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 {
|
|
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
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
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
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
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
|
|
286
|
-
const existing = head
|
|
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
|
|
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
|
-
...
|
|
298
|
-
...(mtimeMsStamp ? { [FILE_MTIME_META_KEY]: mtimeMsStamp } : {}),
|
|
299
|
-
...(btimeMsStamp ? { [FILE_BTIME_META_KEY]: btimeMsStamp } : {}),
|
|
357
|
+
...modeTime,
|
|
300
358
|
};
|
|
301
|
-
const response = await
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
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
|
|
324
|
-
|
|
325
|
-
//
|
|
326
|
-
//
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
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
|
|
349
|
-
|
|
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
|
-
|
|
358
|
-
|
|
359
|
-
Metadata,
|
|
360
|
-
})
|
|
361
|
-
return { etag: response.
|
|
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
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
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 =
|
|
447
|
+
const symlinkMarker = metadata?.[SYMLINK_TARGET_META_KEY];
|
|
394
448
|
const isSymlinkRecord = typeof symlinkMarker === "string" && symlinkMarker.length > 0;
|
|
395
449
|
if (isSymlinkRecord) {
|
|
396
|
-
//
|
|
397
|
-
// are bounded by target length (typically
|
|
398
|
-
// relative paths, hard-capped by S3's 5 GB object
|
|
399
|
-
//
|
|
400
|
-
|
|
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
|
|
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
|
-
|
|
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 =
|
|
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 =
|
|
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
|
|
588
|
+
return { metadata };
|
|
547
589
|
}
|
|
548
590
|
export async function listRemoteFiles(ctx, prefix) {
|
|
549
|
-
const
|
|
591
|
+
const io = resolveObjectIO(ctx);
|
|
550
592
|
const files = [];
|
|
551
593
|
let continuationToken;
|
|
552
594
|
do {
|
|
553
|
-
const
|
|
554
|
-
|
|
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
|
|
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
|
|
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.
|
|
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.
|
|
591
|
-
size: obj.
|
|
592
|
-
lastModified: obj.
|
|
593
|
-
etag: obj.
|
|
621
|
+
key: obj.key,
|
|
622
|
+
size: obj.size,
|
|
623
|
+
lastModified: obj.lastModified,
|
|
624
|
+
etag: obj.etag,
|
|
594
625
|
});
|
|
595
626
|
}
|
|
596
|
-
continuationToken =
|
|
627
|
+
continuationToken = page.nextContinuationToken;
|
|
597
628
|
} while (continuationToken);
|
|
598
629
|
return files;
|
|
599
630
|
}
|
|
600
631
|
export async function deleteRemoteFile(ctx, key) {
|
|
601
|
-
|
|
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
|
-
|
|
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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"}
|