@allegria/aws-file-manager 1.0.2 → 1.0.3

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 (37) hide show
  1. package/dist/cjs/aws-file-manager.d.ts +1 -1
  2. package/dist/cjs/aws-file-manager.js +5 -1
  3. package/dist/cjs/aws-file-manager.js.map +1 -1
  4. package/dist/lib/aws-file-manager.d.ts +1 -1
  5. package/dist/lib/aws-file-manager.js +5 -1
  6. package/dist/lib/aws-file-manager.js.map +1 -1
  7. package/package.json +5 -2
  8. package/dist/examples/01-setup.d.ts +0 -14
  9. package/dist/examples/01-setup.js +0 -42
  10. package/dist/examples/01-setup.js.map +0 -1
  11. package/dist/examples/02-upload-multer.d.ts +0 -13
  12. package/dist/examples/02-upload-multer.js +0 -63
  13. package/dist/examples/02-upload-multer.js.map +0 -1
  14. package/dist/examples/03-upload-web.d.ts +0 -12
  15. package/dist/examples/03-upload-web.js +0 -38
  16. package/dist/examples/03-upload-web.js.map +0 -1
  17. package/dist/examples/04-signed-urls.d.ts +0 -12
  18. package/dist/examples/04-signed-urls.js +0 -48
  19. package/dist/examples/04-signed-urls.js.map +0 -1
  20. package/dist/examples/05-download.d.ts +0 -14
  21. package/dist/examples/05-download.js +0 -53
  22. package/dist/examples/05-download.js.map +0 -1
  23. package/dist/examples/06-delete.d.ts +0 -17
  24. package/dist/examples/06-delete.js +0 -44
  25. package/dist/examples/06-delete.js.map +0 -1
  26. package/dist/examples/07-copy.d.ts +0 -14
  27. package/dist/examples/07-copy.js +0 -35
  28. package/dist/examples/07-copy.js.map +0 -1
  29. package/dist/examples/08-list-paginated.d.ts +0 -16
  30. package/dist/examples/08-list-paginated.js +0 -60
  31. package/dist/examples/08-list-paginated.js.map +0 -1
  32. package/dist/examples/09-exists.d.ts +0 -13
  33. package/dist/examples/09-exists.js +0 -32
  34. package/dist/examples/09-exists.js.map +0 -1
  35. package/dist/tests/aws-file-manager.test.d.ts +0 -1
  36. package/dist/tests/aws-file-manager.test.js +0 -359
  37. package/dist/tests/aws-file-manager.test.js.map +0 -1
@@ -32,7 +32,7 @@ export interface AwsFileManagerConfig {
32
32
  */
33
33
  export interface FileInput {
34
34
  /** Raw file bytes */
35
- buffer: Buffer;
35
+ buffer: Uint8Array;
36
36
  /** Original filename as provided by the uploader */
37
37
  originalName: string;
38
38
  /** MIME type, e.g. 'image/jpeg' */
@@ -34,7 +34,7 @@ function fromMulterFile(multerFile) {
34
34
  */
35
35
  async function fromWebFile(webFile) {
36
36
  return {
37
- buffer: Buffer.from(await webFile.arrayBuffer()),
37
+ buffer: new Uint8Array(await webFile.arrayBuffer()),
38
38
  originalName: webFile.name,
39
39
  mimeType: webFile.type,
40
40
  size: webFile.size,
@@ -60,6 +60,10 @@ class AwsFileManager {
60
60
  config.storageClass ?? AwsFileManager.DEFAULTS.storageClass;
61
61
  this.s3 = new client_s3_1.S3Client({
62
62
  region: config.region,
63
+ // Disable automatic checksum calculation so presigned PUT URLs don't
64
+ // include x-amz-checksum-crc32 — browsers can't compute or attach that
65
+ // header, which causes CORS preflight failures and checksum mismatches.
66
+ requestChecksumCalculation: "WHEN_REQUIRED",
63
67
  ...(config.accessKeyId &&
64
68
  config.secretAccessKey && {
65
69
  credentials: {
@@ -1 +1 @@
1
- {"version":3,"file":"aws-file-manager.js","sourceRoot":"","sources":["../../lib/aws-file-manager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"aws-file-manager.js","sourceRoot":"","sources":["../../lib/aws-file-manager.ts"],"names":[],"mappings":"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"}
@@ -32,7 +32,7 @@ export interface AwsFileManagerConfig {
32
32
  */
33
33
  export interface FileInput {
34
34
  /** Raw file bytes */
35
- buffer: Buffer;
35
+ buffer: Uint8Array;
36
36
  /** Original filename as provided by the uploader */
37
37
  originalName: string;
38
38
  /** MIME type, e.g. 'image/jpeg' */
@@ -29,7 +29,7 @@ export function fromMulterFile(multerFile) {
29
29
  */
30
30
  export async function fromWebFile(webFile) {
31
31
  return {
32
- buffer: Buffer.from(await webFile.arrayBuffer()),
32
+ buffer: new Uint8Array(await webFile.arrayBuffer()),
33
33
  originalName: webFile.name,
34
34
  mimeType: webFile.type,
35
35
  size: webFile.size,
@@ -55,6 +55,10 @@ export class AwsFileManager {
55
55
  config.storageClass ?? AwsFileManager.DEFAULTS.storageClass;
56
56
  this.s3 = new S3Client({
57
57
  region: config.region,
58
+ // Disable automatic checksum calculation so presigned PUT URLs don't
59
+ // include x-amz-checksum-crc32 — browsers can't compute or attach that
60
+ // header, which causes CORS preflight failures and checksum mismatches.
61
+ requestChecksumCalculation: "WHEN_REQUIRED",
58
62
  ...(config.accessKeyId &&
59
63
  config.secretAccessKey && {
60
64
  credentials: {
@@ -1 +1 @@
1
- {"version":3,"file":"aws-file-manager.js","sourceRoot":"","sources":["../../lib/aws-file-manager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"aws-file-manager.js","sourceRoot":"","sources":["../../lib/aws-file-manager.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@allegria/aws-file-manager",
3
- "version": "1.0.2",
3
+ "version": "1.0.3",
4
4
  "description": "TypeScript library for managing files in AWS S3",
5
5
  "main": "dist/cjs/aws-file-manager.js",
6
6
  "module": "dist/lib/aws-file-manager.js",
@@ -23,7 +23,6 @@
23
23
  ],
24
24
  "type": "module",
25
25
  "scripts": {
26
- "preinstall": "npx only-allow pnpm",
27
26
  "build": "tsc && tsc -p tsconfig.cjs.json && node -e \"require('fs').writeFileSync('dist/cjs/package.json', JSON.stringify({type:'commonjs'}, null, 2))\"",
28
27
  "start": "pnpm run build",
29
28
  "prepare": "pnpm run build",
@@ -61,5 +60,9 @@
61
60
  "ts-node": "^10.9.1",
62
61
  "typescript": "^5.2.2",
63
62
  "vitest": "^4.0.18"
63
+ },
64
+ "volta": {
65
+ "node": "20.20.0",
66
+ "pnpm": "9.1.0"
64
67
  }
65
68
  }
@@ -1,14 +0,0 @@
1
- /**
2
- * 01-setup.ts
3
- *
4
- * Instantiation patterns for AwsFileManager.
5
- *
6
- * Three approaches:
7
- * A) Explicit credentials — for local dev / environments without IAM
8
- * B) Environment variables — SDK picks up AWS_ACCESS_KEY_ID / AWS_SECRET_ACCESS_KEY automatically
9
- * C) IAM role — recommended for production (EC2, ECS, Lambda)
10
- */
11
- declare const fileManagerExplicit: any;
12
- declare const fileManagerEnv: any;
13
- declare const fileManager: any;
14
- export { fileManager, fileManagerEnv, fileManagerExplicit };
@@ -1,42 +0,0 @@
1
- /**
2
- * 01-setup.ts
3
- *
4
- * Instantiation patterns for AwsFileManager.
5
- *
6
- * Three approaches:
7
- * A) Explicit credentials — for local dev / environments without IAM
8
- * B) Environment variables — SDK picks up AWS_ACCESS_KEY_ID / AWS_SECRET_ACCESS_KEY automatically
9
- * C) IAM role — recommended for production (EC2, ECS, Lambda)
10
- */
11
- import { AwsFileManager } from "@lib/aws-file-manager";
12
- // ─── A) Explicit credentials ──────────────────────────────────────────────────
13
- // Pass credentials directly. Useful during local development when you have a
14
- // dedicated IAM user with limited S3 permissions.
15
- const fileManagerExplicit = new AwsFileManager({
16
- region: "us-east-1",
17
- bucketName: "my-app-uploads",
18
- accessKeyId: process.env.AWS_ACCESS_KEY_ID,
19
- secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY,
20
- });
21
- // ─── B) Environment variable resolution ───────────────────────────────────────
22
- // Omit credentials — the AWS SDK resolves them from:
23
- // AWS_ACCESS_KEY_ID + AWS_SECRET_ACCESS_KEY environment variables, or
24
- // ~/.aws/credentials file (local dev with aws-cli configured)
25
- const fileManagerEnv = new AwsFileManager({
26
- region: "us-east-1",
27
- bucketName: "my-app-uploads",
28
- });
29
- // ─── C) IAM role (production recommended) ─────────────────────────────────────
30
- // When running on EC2 / ECS / Lambda with an attached IAM role, omit all
31
- // credentials. The SDK automatically uses the instance metadata service.
32
- // No secrets in code or environment variables — the most secure option.
33
- const fileManager = new AwsFileManager({
34
- region: process.env.AWS_REGION ?? "us-east-1",
35
- bucketName: process.env.S3_BUCKET_NAME,
36
- // Optional: namespace all writes under a sub-folder
37
- basePath: "uploads",
38
- // Optional: default signed URL TTL (default: 3600 seconds)
39
- urlExpirationSeconds: 7200,
40
- });
41
- export { fileManager, fileManagerEnv, fileManagerExplicit };
42
- //# sourceMappingURL=01-setup.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"01-setup.js","sourceRoot":"","sources":["../../examples/01-setup.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAEvD,iFAAiF;AACjF,6EAA6E;AAC7E,kDAAkD;AAElD,MAAM,mBAAmB,GAAG,IAAI,cAAc,CAAC;IAC7C,MAAM,EAAE,WAAW;IACnB,UAAU,EAAE,gBAAgB;IAC5B,WAAW,EAAE,OAAO,CAAC,GAAG,CAAC,iBAAkB;IAC3C,eAAe,EAAE,OAAO,CAAC,GAAG,CAAC,qBAAsB;CACpD,CAAC,CAAC;AAEH,iFAAiF;AACjF,qDAAqD;AACrD,wEAAwE;AACxE,gEAAgE;AAEhE,MAAM,cAAc,GAAG,IAAI,cAAc,CAAC;IACxC,MAAM,EAAE,WAAW;IACnB,UAAU,EAAE,gBAAgB;CAC7B,CAAC,CAAC;AAEH,iFAAiF;AACjF,yEAAyE;AACzE,yEAAyE;AACzE,wEAAwE;AAExE,MAAM,WAAW,GAAG,IAAI,cAAc,CAAC;IACrC,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,UAAU,IAAI,WAAW;IAC7C,UAAU,EAAE,OAAO,CAAC,GAAG,CAAC,cAAe;IACvC,oDAAoD;IACpD,QAAQ,EAAE,SAAS;IACnB,2DAA2D;IAC3D,oBAAoB,EAAE,IAAI;CAC3B,CAAC,CAAC;AAEH,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,mBAAmB,EAAE,CAAC"}
@@ -1,13 +0,0 @@
1
- /**
2
- * 02-upload-multer.ts
3
- *
4
- * Uploading files from an Express route that uses multer for multipart parsing.
5
- *
6
- * Key points:
7
- * - Use `fromMulterFile()` to normalise multer's file shape into FileInput.
8
- * - `upload()` returns an UploadResult with the S3 key — persist this key
9
- * to your database, NOT a signed URL (URLs expire).
10
- * - Generate a signed URL on demand at request time via `getSignedUrl()`.
11
- */
12
- declare const app: import("express-serve-static-core").Express;
13
- export { app };
@@ -1,63 +0,0 @@
1
- /**
2
- * 02-upload-multer.ts
3
- *
4
- * Uploading files from an Express route that uses multer for multipart parsing.
5
- *
6
- * Key points:
7
- * - Use `fromMulterFile()` to normalise multer's file shape into FileInput.
8
- * - `upload()` returns an UploadResult with the S3 key — persist this key
9
- * to your database, NOT a signed URL (URLs expire).
10
- * - Generate a signed URL on demand at request time via `getSignedUrl()`.
11
- */
12
- import express from "express";
13
- import multer from "multer";
14
- import { AwsFileManager, fromMulterFile, } from "@lib/aws-file-manager";
15
- const app = express();
16
- const upload = multer({ storage: multer.memoryStorage() });
17
- const fileManager = new AwsFileManager({
18
- region: process.env.AWS_REGION ?? "us-east-1",
19
- bucketName: process.env.S3_BUCKET_NAME,
20
- basePath: "uploads",
21
- });
22
- // POST /upload — accepts a single file field named 'file'
23
- app.post("/upload", upload.single("file"), async (req, res) => {
24
- if (!req.file) {
25
- return res.status(400).json({ error: "No file provided" });
26
- }
27
- // Normalise multer's file into a FileInput
28
- const fileInput = fromMulterFile(req.file);
29
- // Upload to S3 with a UUID-based filename to prevent collisions
30
- const result = await fileManager.upload(fileInput, {
31
- folder: "avatars",
32
- generateUniqueFileName: true,
33
- metadata: {
34
- uploadedBy: req.body.userId ?? "anonymous",
35
- },
36
- });
37
- // Persist result.key to your database — never store the signed URL
38
- // await db.files.create({ s3Key: result.key, ... });
39
- // Return a short-lived signed URL for the client to use immediately
40
- const url = await fileManager.getSignedUrl(result.key, {
41
- disposition: "inline",
42
- });
43
- return res.json({
44
- key: result.key,
45
- url,
46
- size: result.size,
47
- contentType: result.contentType,
48
- });
49
- });
50
- // POST /upload-many — accepts up to 5 files in a 'files' field
51
- app.post("/upload-many", upload.array("files", 5), async (req, res) => {
52
- const files = req.files;
53
- if (!files?.length) {
54
- return res.status(400).json({ error: "No files provided" });
55
- }
56
- const results = await Promise.all(files.map((file) => fileManager.upload(fromMulterFile(file), {
57
- folder: "documents",
58
- generateUniqueFileName: true,
59
- })));
60
- return res.json(results.map((r) => ({ key: r.key, size: r.size })));
61
- });
62
- export { app };
63
- //# sourceMappingURL=02-upload-multer.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"02-upload-multer.js","sourceRoot":"","sources":["../../examples/02-upload-multer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,OAAO,MAAM,SAAS,CAAC;AAC9B,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,EACL,cAAc,EACd,cAAc,GACf,MAAM,uBAAuB,CAAC;AAE/B,MAAM,GAAG,GAAG,OAAO,EAAE,CAAC;AACtB,MAAM,MAAM,GAAG,MAAM,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC;AAE3D,MAAM,WAAW,GAAG,IAAI,cAAc,CAAC;IACrC,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,UAAU,IAAI,WAAW;IAC7C,UAAU,EAAE,OAAO,CAAC,GAAG,CAAC,cAAe;IACvC,QAAQ,EAAE,SAAS;CACpB,CAAC,CAAC;AAEH,0DAA0D;AAC1D,GAAG,CAAC,IAAI,CAAC,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE;IAC5D,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;QACd,OAAO,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,kBAAkB,EAAE,CAAC,CAAC;IAC7D,CAAC;IAED,2CAA2C;IAC3C,MAAM,SAAS,GAAG,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAE3C,gEAAgE;IAChE,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,MAAM,CAAC,SAAS,EAAE;QACjD,MAAM,EAAE,SAAS;QACjB,sBAAsB,EAAE,IAAI;QAC5B,QAAQ,EAAE;YACR,UAAU,EAAE,GAAG,CAAC,IAAI,CAAC,MAAM,IAAI,WAAW;SAC3C;KACF,CAAC,CAAC;IAEH,mEAAmE;IACnE,qDAAqD;IAErD,oEAAoE;IACpE,MAAM,GAAG,GAAG,MAAM,WAAW,CAAC,YAAY,CAAC,MAAM,CAAC,GAAG,EAAE;QACrD,WAAW,EAAE,QAAQ;KACtB,CAAC,CAAC;IAEH,OAAO,GAAG,CAAC,IAAI,CAAC;QACd,GAAG,EAAE,MAAM,CAAC,GAAG;QACf,GAAG;QACH,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,WAAW,EAAE,MAAM,CAAC,WAAW;KAChC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,+DAA+D;AAC/D,GAAG,CAAC,IAAI,CAAC,cAAc,EAAE,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE;IACpE,MAAM,KAAK,GAAG,GAAG,CAAC,KAA8B,CAAC;IACjD,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC;QACnB,OAAO,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,mBAAmB,EAAE,CAAC,CAAC;IAC9D,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,CAC/B,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CACjB,WAAW,CAAC,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE;QACvC,MAAM,EAAE,WAAW;QACnB,sBAAsB,EAAE,IAAI;KAC7B,CAAC,CACH,CACF,CAAC;IAEF,OAAO,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;AACtE,CAAC,CAAC,CAAC;AAEH,OAAO,EAAE,GAAG,EAAE,CAAC"}
@@ -1,12 +0,0 @@
1
- /**
2
- * 03-upload-web.ts
3
- *
4
- * Uploading files from a Next.js App Router route handler (or any environment
5
- * where you receive a Web API `File` object from FormData).
6
- *
7
- * Key points:
8
- * - `fromWebFile()` is async because it calls `file.arrayBuffer()`.
9
- * - Everything else is the same as the multer path.
10
- */
11
- import { NextRequest } from "next/server";
12
- export declare function POST(request: NextRequest): Promise<any>;
@@ -1,38 +0,0 @@
1
- /**
2
- * 03-upload-web.ts
3
- *
4
- * Uploading files from a Next.js App Router route handler (or any environment
5
- * where you receive a Web API `File` object from FormData).
6
- *
7
- * Key points:
8
- * - `fromWebFile()` is async because it calls `file.arrayBuffer()`.
9
- * - Everything else is the same as the multer path.
10
- */
11
- import { NextResponse } from "next/server";
12
- import { AwsFileManager, fromWebFile } from "@lib/aws-file-manager";
13
- const fileManager = new AwsFileManager({
14
- region: process.env.AWS_REGION ?? "us-east-1",
15
- bucketName: process.env.S3_BUCKET_NAME,
16
- basePath: "uploads",
17
- });
18
- // app/api/upload/route.ts
19
- export async function POST(request) {
20
- const formData = await request.formData();
21
- const file = formData.get("file");
22
- if (!(file instanceof File)) {
23
- return NextResponse.json({ error: "No file provided" }, { status: 400 });
24
- }
25
- // Normalise the Web API File into a FileInput
26
- const fileInput = await fromWebFile(file);
27
- const result = await fileManager.upload(fileInput, {
28
- folder: "profile-photos",
29
- generateUniqueFileName: true,
30
- });
31
- // Persist result.key to your database
32
- // await db.users.update({ id: userId, avatarKey: result.key });
33
- const url = await fileManager.getSignedUrl(result.key, {
34
- disposition: "inline",
35
- });
36
- return NextResponse.json({ key: result.key, url });
37
- }
38
- //# sourceMappingURL=03-upload-web.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"03-upload-web.js","sourceRoot":"","sources":["../../examples/03-upload-web.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAe,YAAY,EAAE,MAAM,aAAa,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAEpE,MAAM,WAAW,GAAG,IAAI,cAAc,CAAC;IACrC,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,UAAU,IAAI,WAAW;IAC7C,UAAU,EAAE,OAAO,CAAC,GAAG,CAAC,cAAe;IACvC,QAAQ,EAAE,SAAS;CACpB,CAAC,CAAC;AAEH,0BAA0B;AAC1B,MAAM,CAAC,KAAK,UAAU,IAAI,CAAC,OAAoB;IAC7C,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,QAAQ,EAAE,CAAC;IAC1C,MAAM,IAAI,GAAG,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAElC,IAAI,CAAC,CAAC,IAAI,YAAY,IAAI,CAAC,EAAE,CAAC;QAC5B,OAAO,YAAY,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,kBAAkB,EAAE,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;IAC3E,CAAC;IAED,8CAA8C;IAC9C,MAAM,SAAS,GAAG,MAAM,WAAW,CAAC,IAAI,CAAC,CAAC;IAE1C,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,MAAM,CAAC,SAAS,EAAE;QACjD,MAAM,EAAE,gBAAgB;QACxB,sBAAsB,EAAE,IAAI;KAC7B,CAAC,CAAC;IAEH,sCAAsC;IACtC,gEAAgE;IAEhE,MAAM,GAAG,GAAG,MAAM,WAAW,CAAC,YAAY,CAAC,MAAM,CAAC,GAAG,EAAE;QACrD,WAAW,EAAE,QAAQ;KACtB,CAAC,CAAC;IAEH,OAAO,YAAY,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;AACrD,CAAC"}
@@ -1,12 +0,0 @@
1
- /**
2
- * 04-signed-urls.ts
3
- *
4
- * Generating signed URLs for private S3 objects.
5
- *
6
- * Key points:
7
- * - Call `getSignedUrl()` at request time — never store the returned URL.
8
- * - Use `disposition: 'inline'` for images and PDFs rendered in the browser.
9
- * - Use `disposition: 'attachment'` to force a file download with a filename.
10
- * - Signed URLs are credentials — treat them accordingly (HTTPS only, short TTL).
11
- */
12
- export {};
@@ -1,48 +0,0 @@
1
- /**
2
- * 04-signed-urls.ts
3
- *
4
- * Generating signed URLs for private S3 objects.
5
- *
6
- * Key points:
7
- * - Call `getSignedUrl()` at request time — never store the returned URL.
8
- * - Use `disposition: 'inline'` for images and PDFs rendered in the browser.
9
- * - Use `disposition: 'attachment'` to force a file download with a filename.
10
- * - Signed URLs are credentials — treat them accordingly (HTTPS only, short TTL).
11
- */
12
- import { AwsFileManager } from "@lib/aws-file-manager";
13
- const fileManager = new AwsFileManager({
14
- region: process.env.AWS_REGION ?? "us-east-1",
15
- bucketName: process.env.S3_BUCKET_NAME,
16
- urlExpirationSeconds: 3600, // 1 hour default
17
- });
18
- async function examples() {
19
- const s3Key = "uploads/avatars/f47ac10b-58cc-4372-a567-0e02b2c3d479.jpg";
20
- // ─── Inline (browser renders the file) ───────────────────────────────────
21
- const inlineUrl = await fileManager.getSignedUrl(s3Key, {
22
- disposition: "inline",
23
- });
24
- console.log("Inline URL:", inlineUrl);
25
- // → https://my-bucket.s3.amazonaws.com/uploads/avatars/...?X-Amz-Signature=...
26
- // ─── Attachment (forced download with a suggested filename) ───────────────
27
- const downloadUrl = await fileManager.getSignedUrl(s3Key, {
28
- disposition: "attachment",
29
- fileName: "my-photo.jpg", // Suggested filename in Content-Disposition
30
- });
31
- console.log("Download URL:", downloadUrl);
32
- // ─── Custom TTL ───────────────────────────────────────────────────────────
33
- // Override the instance default for a short-lived share link
34
- const shortLivedUrl = await fileManager.getSignedUrl(s3Key, {
35
- disposition: "inline",
36
- expiresIn: 300, // 5 minutes
37
- });
38
- console.log("Short-lived URL:", shortLivedUrl);
39
- // ─── Serve from an API route ──────────────────────────────────────────────
40
- // Typical pattern: look up the key from your DB, then redirect to the URL.
41
- //
42
- // GET /api/files/:id
43
- // const file = await db.files.findById(req.params.id);
44
- // const url = await fileManager.getSignedUrl(file.s3Key, { disposition: 'inline' });
45
- // return res.redirect(302, url);
46
- }
47
- examples().catch(console.error);
48
- //# sourceMappingURL=04-signed-urls.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"04-signed-urls.js","sourceRoot":"","sources":["../../examples/04-signed-urls.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAEvD,MAAM,WAAW,GAAG,IAAI,cAAc,CAAC;IACrC,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,UAAU,IAAI,WAAW;IAC7C,UAAU,EAAE,OAAO,CAAC,GAAG,CAAC,cAAe;IACvC,oBAAoB,EAAE,IAAI,EAAE,iBAAiB;CAC9C,CAAC,CAAC;AAEH,KAAK,UAAU,QAAQ;IACrB,MAAM,KAAK,GAAG,0DAA0D,CAAC;IAEzE,4EAA4E;IAC5E,MAAM,SAAS,GAAG,MAAM,WAAW,CAAC,YAAY,CAAC,KAAK,EAAE;QACtD,WAAW,EAAE,QAAQ;KACtB,CAAC,CAAC;IACH,OAAO,CAAC,GAAG,CAAC,aAAa,EAAE,SAAS,CAAC,CAAC;IACtC,+EAA+E;IAE/E,6EAA6E;IAC7E,MAAM,WAAW,GAAG,MAAM,WAAW,CAAC,YAAY,CAAC,KAAK,EAAE;QACxD,WAAW,EAAE,YAAY;QACzB,QAAQ,EAAE,cAAc,EAAE,4CAA4C;KACvE,CAAC,CAAC;IACH,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE,WAAW,CAAC,CAAC;IAE1C,6EAA6E;IAC7E,6DAA6D;IAC7D,MAAM,aAAa,GAAG,MAAM,WAAW,CAAC,YAAY,CAAC,KAAK,EAAE;QAC1D,WAAW,EAAE,QAAQ;QACrB,SAAS,EAAE,GAAG,EAAE,YAAY;KAC7B,CAAC,CAAC;IACH,OAAO,CAAC,GAAG,CAAC,kBAAkB,EAAE,aAAa,CAAC,CAAC;IAE/C,6EAA6E;IAC7E,2EAA2E;IAC3E,EAAE;IACF,qBAAqB;IACrB,uDAAuD;IACvD,qFAAqF;IACrF,iCAAiC;AACnC,CAAC;AAED,QAAQ,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC"}
@@ -1,14 +0,0 @@
1
- /**
2
- * 05-download.ts
3
- *
4
- * Downloading S3 objects as a Buffer or a Node.js Readable stream.
5
- *
6
- * Key points:
7
- * - `download()` returns `null` when the object does not exist (no throw).
8
- * - Use `'stream'` (default) when piping to an HTTP response or writing to disk.
9
- * - Use `'buffer'` when you need the full bytes in memory (e.g. image processing).
10
- */
11
- declare const app: import("express-serve-static-core").Express;
12
- declare function processImage(s3Key: string): Promise<void>;
13
- declare function saveToDisk(s3Key: string, outputPath: string): Promise<void>;
14
- export { app, processImage, saveToDisk };
@@ -1,53 +0,0 @@
1
- /**
2
- * 05-download.ts
3
- *
4
- * Downloading S3 objects as a Buffer or a Node.js Readable stream.
5
- *
6
- * Key points:
7
- * - `download()` returns `null` when the object does not exist (no throw).
8
- * - Use `'stream'` (default) when piping to an HTTP response or writing to disk.
9
- * - Use `'buffer'` when you need the full bytes in memory (e.g. image processing).
10
- */
11
- import { createWriteStream } from "fs";
12
- import { pipeline } from "stream/promises";
13
- import express from "express";
14
- import { AwsFileManager } from "@lib/aws-file-manager";
15
- const fileManager = new AwsFileManager({
16
- region: process.env.AWS_REGION ?? "us-east-1",
17
- bucketName: process.env.S3_BUCKET_NAME,
18
- });
19
- const app = express();
20
- // ─── Stream directly to HTTP response ────────────────────────────────────────
21
- app.get("/files/:key(*)", async (req, res) => {
22
- const result = await fileManager.download(req.params.key, "stream");
23
- if (!result) {
24
- return res.status(404).json({ error: "File not found" });
25
- }
26
- const { stream, metadata } = result;
27
- if (metadata.contentType)
28
- res.setHeader("Content-Type", metadata.contentType);
29
- if (metadata.contentLength)
30
- res.setHeader("Content-Length", metadata.contentLength);
31
- stream.pipe(res);
32
- });
33
- // ─── Download to a Buffer (for in-memory processing) ─────────────────────────
34
- async function processImage(s3Key) {
35
- const result = await fileManager.download(s3Key, "buffer");
36
- if (!result) {
37
- throw new Error(`File not found: ${s3Key}`);
38
- }
39
- const { buffer, metadata } = result;
40
- console.log(`Downloaded ${buffer.length} bytes, type: ${metadata.contentType}`);
41
- // Pass the buffer to an image processing library, compression pipeline, etc.
42
- // const compressed = await sharp(buffer).jpeg({ quality: 80 }).toBuffer();
43
- }
44
- // ─── Stream to disk ───────────────────────────────────────────────────────────
45
- async function saveToDisk(s3Key, outputPath) {
46
- const result = await fileManager.download(s3Key, "stream");
47
- if (!result)
48
- throw new Error(`File not found: ${s3Key}`);
49
- await pipeline(result.stream, createWriteStream(outputPath));
50
- console.log(`Saved to ${outputPath}`);
51
- }
52
- export { app, processImage, saveToDisk };
53
- //# sourceMappingURL=05-download.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"05-download.js","sourceRoot":"","sources":["../../examples/05-download.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,IAAI,CAAC;AACvC,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAC3C,OAAO,OAAO,MAAM,SAAS,CAAC;AAC9B,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAEvD,MAAM,WAAW,GAAG,IAAI,cAAc,CAAC;IACrC,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,UAAU,IAAI,WAAW;IAC7C,UAAU,EAAE,OAAO,CAAC,GAAG,CAAC,cAAe;CACxC,CAAC,CAAC;AAEH,MAAM,GAAG,GAAG,OAAO,EAAE,CAAC;AAEtB,gFAAgF;AAChF,GAAG,CAAC,GAAG,CAAC,gBAAgB,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE;IAC3C,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;IAEpE,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,gBAAgB,EAAE,CAAC,CAAC;IAC3D,CAAC;IAED,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,CAAC;IAEpC,IAAI,QAAQ,CAAC,WAAW;QAAE,GAAG,CAAC,SAAS,CAAC,cAAc,EAAE,QAAQ,CAAC,WAAW,CAAC,CAAC;IAC9E,IAAI,QAAQ,CAAC,aAAa;QAAE,GAAG,CAAC,SAAS,CAAC,gBAAgB,EAAE,QAAQ,CAAC,aAAa,CAAC,CAAC;IAEpF,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACnB,CAAC,CAAC,CAAC;AAEH,gFAAgF;AAChF,KAAK,UAAU,YAAY,CAAC,KAAa;IACvC,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;IAE3D,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CAAC,mBAAmB,KAAK,EAAE,CAAC,CAAC;IAC9C,CAAC;IAED,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,CAAC;IACpC,OAAO,CAAC,GAAG,CAAC,cAAc,MAAM,CAAC,MAAM,iBAAiB,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC;IAEhF,6EAA6E;IAC7E,2EAA2E;AAC7E,CAAC;AAED,iFAAiF;AACjF,KAAK,UAAU,UAAU,CAAC,KAAa,EAAE,UAAkB;IACzD,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;IAC3D,IAAI,CAAC,MAAM;QAAE,MAAM,IAAI,KAAK,CAAC,mBAAmB,KAAK,EAAE,CAAC,CAAC;IAEzD,MAAM,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC,UAAU,CAAC,CAAC,CAAC;IAC7D,OAAO,CAAC,GAAG,CAAC,YAAY,UAAU,EAAE,CAAC,CAAC;AACxC,CAAC;AAED,OAAO,EAAE,GAAG,EAAE,YAAY,EAAE,UAAU,EAAE,CAAC"}
@@ -1,17 +0,0 @@
1
- /**
2
- * 06-delete.ts
3
- *
4
- * Deleting one or many S3 objects.
5
- *
6
- * Key points:
7
- * - `delete()` is idempotent — calling it on a missing key does not throw.
8
- * - Always soft-delete your DB record first, then call `delete()` as cleanup.
9
- * A crash between the two steps leaves a recoverable S3 orphan rather than
10
- * a missing file with an intact DB row.
11
- * - `deleteMany()` is for removing a file and all its variants in one call.
12
- * It chunks automatically at 1 000 keys to respect the S3 limit.
13
- */
14
- declare function deleteFile(s3Key: string): Promise<void>;
15
- declare function deleteWithVariants(originalKey: string, thumbnailKey: string, compressedKey: string): Promise<void>;
16
- declare function deleteOrphans(orphanKeys: string[]): Promise<void>;
17
- export { deleteFile, deleteWithVariants, deleteOrphans };
@@ -1,44 +0,0 @@
1
- /**
2
- * 06-delete.ts
3
- *
4
- * Deleting one or many S3 objects.
5
- *
6
- * Key points:
7
- * - `delete()` is idempotent — calling it on a missing key does not throw.
8
- * - Always soft-delete your DB record first, then call `delete()` as cleanup.
9
- * A crash between the two steps leaves a recoverable S3 orphan rather than
10
- * a missing file with an intact DB row.
11
- * - `deleteMany()` is for removing a file and all its variants in one call.
12
- * It chunks automatically at 1 000 keys to respect the S3 limit.
13
- */
14
- import { AwsFileManager } from "@lib/aws-file-manager";
15
- const fileManager = new AwsFileManager({
16
- region: process.env.AWS_REGION ?? "us-east-1",
17
- bucketName: process.env.S3_BUCKET_NAME,
18
- });
19
- // ─── Delete a single file ─────────────────────────────────────────────────────
20
- async function deleteFile(s3Key) {
21
- // 1. Soft-delete the DB record first
22
- // await db.files.update({ id: fileId, deletedAt: new Date() });
23
- // 2. Remove the S3 object as a cleanup step
24
- await fileManager.delete(s3Key);
25
- console.log(`Deleted: ${s3Key}`);
26
- }
27
- // ─── Delete a file and all its variants ──────────────────────────────────────
28
- // After uploading, your pipeline may generate additional variants (thumbnails,
29
- // compressed copies). Store all their keys and delete them together.
30
- async function deleteWithVariants(originalKey, thumbnailKey, compressedKey) {
31
- await fileManager.deleteMany([originalKey, thumbnailKey, compressedKey]);
32
- console.log("Deleted original + all variants");
33
- }
34
- // ─── Batch delete from a reconciliation job ───────────────────────────────────
35
- // If you have a list of orphaned keys (e.g. found by `list()` but absent from
36
- // your DB), delete them all at once. `deleteMany` handles chunking internally.
37
- async function deleteOrphans(orphanKeys) {
38
- if (orphanKeys.length === 0)
39
- return;
40
- await fileManager.deleteMany(orphanKeys);
41
- console.log(`Deleted ${orphanKeys.length} orphaned objects`);
42
- }
43
- export { deleteFile, deleteWithVariants, deleteOrphans };
44
- //# sourceMappingURL=06-delete.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"06-delete.js","sourceRoot":"","sources":["../../examples/06-delete.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAEvD,MAAM,WAAW,GAAG,IAAI,cAAc,CAAC;IACrC,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,UAAU,IAAI,WAAW;IAC7C,UAAU,EAAE,OAAO,CAAC,GAAG,CAAC,cAAe;CACxC,CAAC,CAAC;AAEH,iFAAiF;AACjF,KAAK,UAAU,UAAU,CAAC,KAAa;IACrC,qCAAqC;IACrC,gEAAgE;IAEhE,4CAA4C;IAC5C,MAAM,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAChC,OAAO,CAAC,GAAG,CAAC,YAAY,KAAK,EAAE,CAAC,CAAC;AACnC,CAAC;AAED,gFAAgF;AAChF,+EAA+E;AAC/E,qEAAqE;AACrE,KAAK,UAAU,kBAAkB,CAC/B,WAAmB,EACnB,YAAoB,EACpB,aAAqB;IAErB,MAAM,WAAW,CAAC,UAAU,CAAC,CAAC,WAAW,EAAE,YAAY,EAAE,aAAa,CAAC,CAAC,CAAC;IACzE,OAAO,CAAC,GAAG,CAAC,iCAAiC,CAAC,CAAC;AACjD,CAAC;AAED,iFAAiF;AACjF,8EAA8E;AAC9E,+EAA+E;AAC/E,KAAK,UAAU,aAAa,CAAC,UAAoB;IAC/C,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO;IACpC,MAAM,WAAW,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;IACzC,OAAO,CAAC,GAAG,CAAC,WAAW,UAAU,CAAC,MAAM,mBAAmB,CAAC,CAAC;AAC/D,CAAC;AAED,OAAO,EAAE,UAAU,EAAE,kBAAkB,EAAE,aAAa,EAAE,CAAC"}
@@ -1,14 +0,0 @@
1
- /**
2
- * 07-copy.ts
3
- *
4
- * Copying an S3 object within the same bucket.
5
- *
6
- * Key points:
7
- * - `copy()` is a server-side operation — no bytes move through your server.
8
- * - Use it when duplicating entities that own files (e.g. cloning a template).
9
- * - Pass `metadata` to override the copied object's metadata; omit it to
10
- * inherit the source object's metadata (MetadataDirective=COPY).
11
- */
12
- declare function cloneDocument(sourceKey: string, targetOwnerId: string): Promise<string>;
13
- declare function moveObject(sourceKey: string, destKey: string): Promise<void>;
14
- export { cloneDocument, moveObject };
@@ -1,35 +0,0 @@
1
- /**
2
- * 07-copy.ts
3
- *
4
- * Copying an S3 object within the same bucket.
5
- *
6
- * Key points:
7
- * - `copy()` is a server-side operation — no bytes move through your server.
8
- * - Use it when duplicating entities that own files (e.g. cloning a template).
9
- * - Pass `metadata` to override the copied object's metadata; omit it to
10
- * inherit the source object's metadata (MetadataDirective=COPY).
11
- */
12
- import { AwsFileManager } from "@lib/aws-file-manager";
13
- import { randomUUID } from "crypto";
14
- const fileManager = new AwsFileManager({
15
- region: process.env.AWS_REGION ?? "us-east-1",
16
- bucketName: process.env.S3_BUCKET_NAME,
17
- basePath: "uploads",
18
- });
19
- // ─── Clone a template document ───────────────────────────────────────────────
20
- async function cloneDocument(sourceKey, targetOwnerId) {
21
- const ext = sourceKey.substring(sourceKey.lastIndexOf("."));
22
- const destKey = `uploads/${targetOwnerId}/${randomUUID()}${ext}`;
23
- await fileManager.copy(sourceKey, destKey);
24
- console.log(`Copied ${sourceKey} → ${destKey}`);
25
- return destKey;
26
- }
27
- // ─── Reorganise a key (rename/move) ──────────────────────────────────────────
28
- // S3 has no rename — copy to the new key, then delete the old one.
29
- async function moveObject(sourceKey, destKey) {
30
- await fileManager.copy(sourceKey, destKey);
31
- await fileManager.delete(sourceKey);
32
- console.log(`Moved ${sourceKey} → ${destKey}`);
33
- }
34
- export { cloneDocument, moveObject };
35
- //# sourceMappingURL=07-copy.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"07-copy.js","sourceRoot":"","sources":["../../examples/07-copy.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAEpC,MAAM,WAAW,GAAG,IAAI,cAAc,CAAC;IACrC,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,UAAU,IAAI,WAAW;IAC7C,UAAU,EAAE,OAAO,CAAC,GAAG,CAAC,cAAe;IACvC,QAAQ,EAAE,SAAS;CACpB,CAAC,CAAC;AAEH,gFAAgF;AAChF,KAAK,UAAU,aAAa,CAC1B,SAAiB,EACjB,aAAqB;IAErB,MAAM,GAAG,GAAG,SAAS,CAAC,SAAS,CAAC,SAAS,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC;IAC5D,MAAM,OAAO,GAAG,WAAW,aAAa,IAAI,UAAU,EAAE,GAAG,GAAG,EAAE,CAAC;IAEjE,MAAM,WAAW,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IAE3C,OAAO,CAAC,GAAG,CAAC,UAAU,SAAS,MAAM,OAAO,EAAE,CAAC,CAAC;IAChD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,gFAAgF;AAChF,mEAAmE;AACnE,KAAK,UAAU,UAAU,CACvB,SAAiB,EACjB,OAAe;IAEf,MAAM,WAAW,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IAC3C,MAAM,WAAW,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IACpC,OAAO,CAAC,GAAG,CAAC,SAAS,SAAS,MAAM,OAAO,EAAE,CAAC,CAAC;AACjD,CAAC;AAED,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,CAAC"}
@@ -1,16 +0,0 @@
1
- /**
2
- * 08-list-paginated.ts
3
- *
4
- * Listing objects under a prefix, with pagination.
5
- *
6
- * Key points:
7
- * - Each call returns up to 1 000 entries (S3 maximum per request).
8
- * - `hasMore` and `continuationToken` drive the pagination loop.
9
- * - Primarily used for nightly storage reconciliation jobs that walk the
10
- * bucket and verify byte counts against the database.
11
- */
12
- import { ListEntry } from "@lib/aws-file-manager";
13
- declare function listAll(folder: string): Promise<ListEntry[]>;
14
- declare function reconcileStorage(folder: string): Promise<void>;
15
- declare function listByPrefix(folder: string, prefix: string): Promise<ListEntry[]>;
16
- export { listAll, reconcileStorage, listByPrefix };
@@ -1,60 +0,0 @@
1
- /**
2
- * 08-list-paginated.ts
3
- *
4
- * Listing objects under a prefix, with pagination.
5
- *
6
- * Key points:
7
- * - Each call returns up to 1 000 entries (S3 maximum per request).
8
- * - `hasMore` and `continuationToken` drive the pagination loop.
9
- * - Primarily used for nightly storage reconciliation jobs that walk the
10
- * bucket and verify byte counts against the database.
11
- */
12
- import { AwsFileManager } from "@lib/aws-file-manager";
13
- const fileManager = new AwsFileManager({
14
- region: process.env.AWS_REGION ?? "us-east-1",
15
- bucketName: process.env.S3_BUCKET_NAME,
16
- basePath: "uploads",
17
- });
18
- // ─── Collect all entries under a folder ──────────────────────────────────────
19
- async function listAll(folder) {
20
- const allEntries = [];
21
- let token;
22
- do {
23
- const result = await fileManager.list({
24
- folder,
25
- continuationToken: token,
26
- });
27
- allEntries.push(...result.entries);
28
- token = result.continuationToken;
29
- } while (token);
30
- console.log(`Found ${allEntries.length} objects in '${folder}'`);
31
- return allEntries;
32
- }
33
- // ─── Process large result sets in pages ──────────────────────────────────────
34
- // Avoid accumulating everything in memory when the bucket is very large.
35
- async function reconcileStorage(folder) {
36
- let token;
37
- let totalBytes = 0;
38
- let pageCount = 0;
39
- do {
40
- const result = await fileManager.list({
41
- folder,
42
- maxResults: 500, // smaller pages for memory-constrained jobs
43
- continuationToken: token,
44
- });
45
- pageCount++;
46
- for (const entry of result.entries) {
47
- totalBytes += entry.size;
48
- // Compare entry.key / entry.size against your database here
49
- }
50
- token = result.continuationToken;
51
- } while (token);
52
- console.log(`Reconciled ${pageCount} page(s), total: ${totalBytes} bytes`);
53
- }
54
- // ─── Filter by prefix within a folder ────────────────────────────────────────
55
- async function listByPrefix(folder, prefix) {
56
- const result = await fileManager.list({ folder, prefix });
57
- return result.entries;
58
- }
59
- export { listAll, reconcileStorage, listByPrefix };
60
- //# sourceMappingURL=08-list-paginated.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"08-list-paginated.js","sourceRoot":"","sources":["../../examples/08-list-paginated.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,cAAc,EAAa,MAAM,uBAAuB,CAAC;AAElE,MAAM,WAAW,GAAG,IAAI,cAAc,CAAC;IACrC,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,UAAU,IAAI,WAAW;IAC7C,UAAU,EAAE,OAAO,CAAC,GAAG,CAAC,cAAe;IACvC,QAAQ,EAAE,SAAS;CACpB,CAAC,CAAC;AAEH,gFAAgF;AAChF,KAAK,UAAU,OAAO,CAAC,MAAc;IACnC,MAAM,UAAU,GAAgB,EAAE,CAAC;IACnC,IAAI,KAAyB,CAAC;IAE9B,GAAG,CAAC;QACF,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,IAAI,CAAC;YACpC,MAAM;YACN,iBAAiB,EAAE,KAAK;SACzB,CAAC,CAAC;QACH,UAAU,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;QACnC,KAAK,GAAG,MAAM,CAAC,iBAAiB,CAAC;IACnC,CAAC,QAAQ,KAAK,EAAE;IAEhB,OAAO,CAAC,GAAG,CAAC,SAAS,UAAU,CAAC,MAAM,gBAAgB,MAAM,GAAG,CAAC,CAAC;IACjE,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,gFAAgF;AAChF,yEAAyE;AACzE,KAAK,UAAU,gBAAgB,CAAC,MAAc;IAC5C,IAAI,KAAyB,CAAC;IAC9B,IAAI,UAAU,GAAG,CAAC,CAAC;IACnB,IAAI,SAAS,GAAG,CAAC,CAAC;IAElB,GAAG,CAAC;QACF,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,IAAI,CAAC;YACpC,MAAM;YACN,UAAU,EAAE,GAAG,EAAE,4CAA4C;YAC7D,iBAAiB,EAAE,KAAK;SACzB,CAAC,CAAC;QAEH,SAAS,EAAE,CAAC;QACZ,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;YACnC,UAAU,IAAI,KAAK,CAAC,IAAI,CAAC;YACzB,4DAA4D;QAC9D,CAAC;QAED,KAAK,GAAG,MAAM,CAAC,iBAAiB,CAAC;IACnC,CAAC,QAAQ,KAAK,EAAE;IAEhB,OAAO,CAAC,GAAG,CAAC,cAAc,SAAS,oBAAoB,UAAU,QAAQ,CAAC,CAAC;AAC7E,CAAC;AAED,gFAAgF;AAChF,KAAK,UAAU,YAAY,CAAC,MAAc,EAAE,MAAc;IACxD,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IAC1D,OAAO,MAAM,CAAC,OAAO,CAAC;AACxB,CAAC;AAED,OAAO,EAAE,OAAO,EAAE,gBAAgB,EAAE,YAAY,EAAE,CAAC"}
@@ -1,13 +0,0 @@
1
- /**
2
- * 09-exists.ts
3
- *
4
- * Checking whether an S3 object exists at a given key.
5
- *
6
- * Key points:
7
- * - `exists()` returns `false` for missing keys; it does not throw.
8
- * - Useful as a lightweight data integrity check before an operation.
9
- * - Not a replacement for proper error handling — network errors still throw.
10
- */
11
- declare function assertFileExists(s3Key: string): Promise<void>;
12
- declare function uploadIfAbsent(s3Key: string, uploadFn: () => Promise<void>): Promise<void>;
13
- export { assertFileExists, uploadIfAbsent };
@@ -1,32 +0,0 @@
1
- /**
2
- * 09-exists.ts
3
- *
4
- * Checking whether an S3 object exists at a given key.
5
- *
6
- * Key points:
7
- * - `exists()` returns `false` for missing keys; it does not throw.
8
- * - Useful as a lightweight data integrity check before an operation.
9
- * - Not a replacement for proper error handling — network errors still throw.
10
- */
11
- import { AwsFileManager } from "@lib/aws-file-manager";
12
- const fileManager = new AwsFileManager({
13
- region: process.env.AWS_REGION ?? "us-east-1",
14
- bucketName: process.env.S3_BUCKET_NAME,
15
- });
16
- // ─── Guard before serving a file ─────────────────────────────────────────────
17
- async function assertFileExists(s3Key) {
18
- const found = await fileManager.exists(s3Key);
19
- if (!found) {
20
- throw new Error(`Storage integrity error: file missing at key "${s3Key}"`);
21
- }
22
- }
23
- // ─── Skip re-uploading if the file is already there ──────────────────────────
24
- async function uploadIfAbsent(s3Key, uploadFn) {
25
- if (await fileManager.exists(s3Key)) {
26
- console.log(`Skipping upload — key already exists: ${s3Key}`);
27
- return;
28
- }
29
- await uploadFn();
30
- }
31
- export { assertFileExists, uploadIfAbsent };
32
- //# sourceMappingURL=09-exists.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"09-exists.js","sourceRoot":"","sources":["../../examples/09-exists.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAEvD,MAAM,WAAW,GAAG,IAAI,cAAc,CAAC;IACrC,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,UAAU,IAAI,WAAW;IAC7C,UAAU,EAAE,OAAO,CAAC,GAAG,CAAC,cAAe;CACxC,CAAC,CAAC;AAEH,gFAAgF;AAChF,KAAK,UAAU,gBAAgB,CAAC,KAAa;IAC3C,MAAM,KAAK,GAAG,MAAM,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAC9C,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,IAAI,KAAK,CAAC,iDAAiD,KAAK,GAAG,CAAC,CAAC;IAC7E,CAAC;AACH,CAAC;AAED,gFAAgF;AAChF,KAAK,UAAU,cAAc,CAC3B,KAAa,EACb,QAA6B;IAE7B,IAAI,MAAM,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;QACpC,OAAO,CAAC,GAAG,CAAC,yCAAyC,KAAK,EAAE,CAAC,CAAC;QAC9D,OAAO;IACT,CAAC;IACD,MAAM,QAAQ,EAAE,CAAC;AACnB,CAAC;AAED,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAE,CAAC"}
@@ -1 +0,0 @@
1
- export {};
@@ -1,359 +0,0 @@
1
- import { describe, it, expect, vi, beforeEach, afterEach } from "vitest";
2
- import { AwsFileManager, fromMulterFile, fromWebFile, } from "../lib/aws-file-manager.js";
3
- // ---------------------------------------------------------------------------
4
- // Mock AWS SDK modules
5
- // ---------------------------------------------------------------------------
6
- const mockSend = vi.fn();
7
- // All SDK classes are used with `new`, so they must be regular functions.
8
- function makeConstructor() {
9
- return vi.fn().mockImplementation(function (input) {
10
- this.input = input;
11
- });
12
- }
13
- vi.mock("@aws-sdk/client-s3", () => ({
14
- S3Client: vi.fn().mockImplementation(function () {
15
- this.send = mockSend;
16
- }),
17
- PutObjectCommand: makeConstructor(),
18
- GetObjectCommand: makeConstructor(),
19
- DeleteObjectCommand: makeConstructor(),
20
- CopyObjectCommand: makeConstructor(),
21
- ListObjectsV2Command: makeConstructor(),
22
- StorageClass: {
23
- INTELLIGENT_TIERING: "INTELLIGENT_TIERING",
24
- STANDARD: "STANDARD",
25
- },
26
- }));
27
- vi.mock("@aws-sdk/s3-request-presigner", () => ({
28
- getSignedUrl: vi.fn().mockResolvedValue("https://signed.example.com/file"),
29
- }));
30
- // ---------------------------------------------------------------------------
31
- // Shared test fixtures
32
- // ---------------------------------------------------------------------------
33
- const BASE_CONFIG = {
34
- region: "us-east-1",
35
- bucketName: "test-bucket",
36
- };
37
- const SAMPLE_FILE = {
38
- buffer: Buffer.from("hello world"),
39
- originalName: "photo.jpg",
40
- mimeType: "image/jpeg",
41
- size: 11,
42
- };
43
- // Clear mock call counts between every test so toHaveBeenCalledTimes is isolated
44
- afterEach(() => {
45
- vi.clearAllMocks();
46
- });
47
- // ---------------------------------------------------------------------------
48
- // fromMulterFile
49
- // ---------------------------------------------------------------------------
50
- describe("fromMulterFile", () => {
51
- it("maps multer fields to FileInput", () => {
52
- const multerFile = {
53
- buffer: Buffer.from("data"),
54
- originalname: "test.png",
55
- mimetype: "image/png",
56
- size: 4,
57
- };
58
- const result = fromMulterFile(multerFile);
59
- expect(result).toEqual({
60
- buffer: multerFile.buffer,
61
- originalName: "test.png",
62
- mimeType: "image/png",
63
- size: 4,
64
- });
65
- });
66
- });
67
- // ---------------------------------------------------------------------------
68
- // fromWebFile
69
- // ---------------------------------------------------------------------------
70
- describe("fromWebFile", () => {
71
- it("converts a Web API File to FileInput", async () => {
72
- const bytes = new Uint8Array([1, 2, 3]);
73
- const webFile = new File([bytes], "upload.pdf", { type: "application/pdf" });
74
- const result = await fromWebFile(webFile);
75
- expect(result.originalName).toBe("upload.pdf");
76
- expect(result.mimeType).toBe("application/pdf");
77
- expect(result.size).toBe(3);
78
- expect(Buffer.isBuffer(result.buffer)).toBe(true);
79
- expect(result.buffer).toEqual(Buffer.from(bytes));
80
- });
81
- });
82
- // ---------------------------------------------------------------------------
83
- // AwsFileManager — constructor
84
- // ---------------------------------------------------------------------------
85
- describe("AwsFileManager constructor", () => {
86
- it("throws when region is missing", () => {
87
- expect(() => new AwsFileManager({ region: "", bucketName: "b" })).toThrow("AWS region is required");
88
- });
89
- it("throws when bucketName is missing", () => {
90
- expect(() => new AwsFileManager({ region: "us-east-1", bucketName: "" })).toThrow("S3 bucket name is required");
91
- });
92
- it("constructs successfully with minimal config", () => {
93
- expect(() => new AwsFileManager(BASE_CONFIG)).not.toThrow();
94
- });
95
- });
96
- // ---------------------------------------------------------------------------
97
- // upload()
98
- // ---------------------------------------------------------------------------
99
- describe("AwsFileManager.upload()", () => {
100
- let fm;
101
- beforeEach(() => {
102
- fm = new AwsFileManager(BASE_CONFIG);
103
- mockSend.mockResolvedValue({ ETag: '"abc123"' });
104
- });
105
- it("returns an UploadResult with the correct fields", async () => {
106
- const result = await fm.upload(SAMPLE_FILE);
107
- expect(result.originalName).toBe("photo.jpg");
108
- expect(result.size).toBe(11);
109
- expect(result.contentType).toBe("image/jpeg");
110
- expect(result.etag).toBe("abc123"); // quotes stripped
111
- expect(result.storageClass).toBe("INTELLIGENT_TIERING");
112
- expect(result.key).toBe("photo.jpg");
113
- expect(result.storedName).toBe("photo.jpg");
114
- });
115
- it("prepends basePath to the key", async () => {
116
- const fmWithBase = new AwsFileManager({ ...BASE_CONFIG, basePath: "uploads" });
117
- const result = await fmWithBase.upload(SAMPLE_FILE);
118
- expect(result.key).toBe("uploads/photo.jpg");
119
- });
120
- it("includes folder in the key", async () => {
121
- const result = await fm.upload(SAMPLE_FILE, { folder: "avatars" });
122
- expect(result.key).toBe("avatars/photo.jpg");
123
- });
124
- it("uses an explicit key when options.key is provided", async () => {
125
- const result = await fm.upload(SAMPLE_FILE, { key: "custom/path/file.jpg" });
126
- expect(result.key).toBe("custom/path/file.jpg");
127
- expect(result.storedName).toBe("file.jpg");
128
- });
129
- it("uses options.fileName over originalName", async () => {
130
- const result = await fm.upload(SAMPLE_FILE, { fileName: "renamed.jpg" });
131
- expect(result.storedName).toBe("renamed.jpg");
132
- expect(result.key).toBe("renamed.jpg");
133
- });
134
- it("generates a UUID filename when generateUniqueFileName is true", async () => {
135
- const result = await fm.upload(SAMPLE_FILE, { generateUniqueFileName: true });
136
- // UUID format: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx.jpg
137
- expect(result.storedName).toMatch(/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}\.jpg$/);
138
- });
139
- it("preserves extension when generating UUID filename", async () => {
140
- const file = { ...SAMPLE_FILE, originalName: "archive.tar.gz" };
141
- const result = await fm.upload(file, { generateUniqueFileName: true });
142
- expect(result.storedName).toMatch(/\.gz$/);
143
- });
144
- it("handles files with no extension when generating UUID filename", async () => {
145
- const file = { ...SAMPLE_FILE, originalName: "Makefile" };
146
- const result = await fm.upload(file, { generateUniqueFileName: true });
147
- expect(result.storedName).toMatch(/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/);
148
- });
149
- it("strips quotes from ETag", async () => {
150
- mockSend.mockResolvedValue({ ETag: '"etag-value"' });
151
- const result = await fm.upload(SAMPLE_FILE);
152
- expect(result.etag).toBe("etag-value");
153
- });
154
- it("handles missing ETag in response", async () => {
155
- mockSend.mockResolvedValue({});
156
- const result = await fm.upload(SAMPLE_FILE);
157
- expect(result.etag).toBeUndefined();
158
- });
159
- });
160
- // ---------------------------------------------------------------------------
161
- // getSignedUrl()
162
- // ---------------------------------------------------------------------------
163
- describe("AwsFileManager.getSignedUrl()", () => {
164
- let fm;
165
- beforeEach(() => {
166
- fm = new AwsFileManager(BASE_CONFIG);
167
- });
168
- it("returns a signed URL string", async () => {
169
- const url = await fm.getSignedUrl("uploads/file.jpg");
170
- expect(url).toBe("https://signed.example.com/file");
171
- });
172
- it("accepts disposition and fileName options without throwing", async () => {
173
- await expect(fm.getSignedUrl("key.pdf", { disposition: "attachment", fileName: "report.pdf" })).resolves.toBe("https://signed.example.com/file");
174
- });
175
- it("accepts inline disposition without throwing", async () => {
176
- await expect(fm.getSignedUrl("key.jpg", { disposition: "inline" })).resolves.toBe("https://signed.example.com/file");
177
- });
178
- });
179
- // ---------------------------------------------------------------------------
180
- // download()
181
- // ---------------------------------------------------------------------------
182
- describe("AwsFileManager.download()", () => {
183
- let fm;
184
- beforeEach(() => {
185
- fm = new AwsFileManager(BASE_CONFIG);
186
- });
187
- it("returns null when the key does not exist", async () => {
188
- const err = Object.assign(new Error("NoSuchKey"), { name: "NoSuchKey" });
189
- mockSend.mockRejectedValue(err);
190
- const result = await fm.download("missing.jpg", "buffer");
191
- expect(result).toBeNull();
192
- });
193
- it("re-throws non-NoSuchKey errors", async () => {
194
- const err = Object.assign(new Error("AccessDenied"), { name: "AccessDenied" });
195
- mockSend.mockRejectedValue(err);
196
- await expect(fm.download("key.jpg", "buffer")).rejects.toThrow("AccessDenied");
197
- });
198
- it("returns a stream result in stream mode", async () => {
199
- const { Readable } = await import("stream");
200
- const fakeStream = Readable.from(["data"]);
201
- mockSend.mockResolvedValue({
202
- Body: fakeStream,
203
- ContentType: "text/plain",
204
- ContentLength: 4,
205
- });
206
- const result = await fm.download("key.txt", "stream");
207
- expect(result).not.toBeNull();
208
- expect(result.metadata.contentType).toBe("text/plain");
209
- });
210
- it("returns a buffer result in buffer mode", async () => {
211
- const { Readable } = await import("stream");
212
- const fakeStream = Readable.from([Buffer.from("hello")]);
213
- mockSend.mockResolvedValue({
214
- Body: fakeStream,
215
- ContentType: "text/plain",
216
- });
217
- const result = await fm.download("key.txt", "buffer");
218
- expect(result).not.toBeNull();
219
- expect(result.buffer).toEqual(Buffer.from("hello"));
220
- });
221
- it("returns null when Body is missing", async () => {
222
- mockSend.mockResolvedValue({ Body: null });
223
- const result = await fm.download("key.txt", "buffer");
224
- expect(result).toBeNull();
225
- });
226
- });
227
- // ---------------------------------------------------------------------------
228
- // delete()
229
- // ---------------------------------------------------------------------------
230
- describe("AwsFileManager.delete()", () => {
231
- let fm;
232
- beforeEach(() => {
233
- fm = new AwsFileManager(BASE_CONFIG);
234
- mockSend.mockResolvedValue({});
235
- });
236
- it("resolves without throwing", async () => {
237
- await expect(fm.delete("uploads/file.jpg")).resolves.toBeUndefined();
238
- });
239
- it("calls send once", async () => {
240
- await fm.delete("key");
241
- expect(mockSend).toHaveBeenCalledTimes(1);
242
- });
243
- });
244
- // ---------------------------------------------------------------------------
245
- // deleteMany()
246
- // ---------------------------------------------------------------------------
247
- describe("AwsFileManager.deleteMany()", () => {
248
- let fm;
249
- beforeEach(() => {
250
- fm = new AwsFileManager(BASE_CONFIG);
251
- mockSend.mockResolvedValue({});
252
- });
253
- it("resolves without throwing for an empty array", async () => {
254
- await expect(fm.deleteMany([])).resolves.toBeUndefined();
255
- expect(mockSend).not.toHaveBeenCalled();
256
- });
257
- it("calls delete for each key", async () => {
258
- await fm.deleteMany(["a", "b", "c"]);
259
- expect(mockSend).toHaveBeenCalledTimes(3);
260
- });
261
- });
262
- // ---------------------------------------------------------------------------
263
- // copy()
264
- // ---------------------------------------------------------------------------
265
- describe("AwsFileManager.copy()", () => {
266
- let fm;
267
- beforeEach(() => {
268
- fm = new AwsFileManager(BASE_CONFIG);
269
- mockSend.mockResolvedValue({});
270
- });
271
- it("resolves without throwing", async () => {
272
- await expect(fm.copy("source/key.jpg", "dest/key.jpg")).resolves.toBeUndefined();
273
- });
274
- it("calls send once", async () => {
275
- await fm.copy("src", "dst");
276
- expect(mockSend).toHaveBeenCalledTimes(1);
277
- });
278
- });
279
- // ---------------------------------------------------------------------------
280
- // list()
281
- // ---------------------------------------------------------------------------
282
- describe("AwsFileManager.list()", () => {
283
- let fm;
284
- beforeEach(() => {
285
- fm = new AwsFileManager(BASE_CONFIG);
286
- });
287
- it("returns entries and hasMore=false when result is not truncated", async () => {
288
- mockSend.mockResolvedValue({
289
- Contents: [
290
- {
291
- Key: "uploads/file.jpg",
292
- Size: 100,
293
- LastModified: new Date("2024-01-01"),
294
- StorageClass: "INTELLIGENT_TIERING",
295
- ETag: '"etag1"',
296
- },
297
- ],
298
- IsTruncated: false,
299
- });
300
- const result = await fm.list({ folder: "uploads" });
301
- expect(result.hasMore).toBe(false);
302
- expect(result.continuationToken).toBeUndefined();
303
- expect(result.entries).toHaveLength(1);
304
- expect(result.entries[0].key).toBe("uploads/file.jpg");
305
- expect(result.entries[0].fileName).toBe("file.jpg");
306
- expect(result.entries[0].size).toBe(100);
307
- expect(result.entries[0].etag).toBe("etag1"); // quotes stripped
308
- });
309
- it("returns continuationToken and hasMore=true when truncated", async () => {
310
- mockSend.mockResolvedValue({
311
- Contents: [],
312
- IsTruncated: true,
313
- NextContinuationToken: "token-abc",
314
- });
315
- const result = await fm.list();
316
- expect(result.hasMore).toBe(true);
317
- expect(result.continuationToken).toBe("token-abc");
318
- });
319
- it("returns empty entries when Contents is missing", async () => {
320
- mockSend.mockResolvedValue({ IsTruncated: false });
321
- const result = await fm.list();
322
- expect(result.entries).toHaveLength(0);
323
- });
324
- });
325
- // ---------------------------------------------------------------------------
326
- // exists()
327
- // ---------------------------------------------------------------------------
328
- describe("AwsFileManager.exists()", () => {
329
- let fm;
330
- beforeEach(() => {
331
- fm = new AwsFileManager(BASE_CONFIG);
332
- });
333
- it("returns true when the object exists", async () => {
334
- mockSend.mockResolvedValue({});
335
- expect(await fm.exists("key.jpg")).toBe(true);
336
- });
337
- it("returns false when NoSuchKey is thrown", async () => {
338
- const err = Object.assign(new Error("NoSuchKey"), { name: "NoSuchKey" });
339
- mockSend.mockRejectedValue(err);
340
- expect(await fm.exists("missing.jpg")).toBe(false);
341
- });
342
- it("re-throws other errors", async () => {
343
- const err = Object.assign(new Error("Forbidden"), { name: "Forbidden" });
344
- mockSend.mockRejectedValue(err);
345
- await expect(fm.exists("key.jpg")).rejects.toThrow("Forbidden");
346
- });
347
- });
348
- // ---------------------------------------------------------------------------
349
- // getS3Client()
350
- // ---------------------------------------------------------------------------
351
- describe("AwsFileManager.getS3Client()", () => {
352
- it("returns the underlying S3Client instance", () => {
353
- const fm = new AwsFileManager(BASE_CONFIG);
354
- const client = fm.getS3Client();
355
- expect(client).toBeDefined();
356
- expect(typeof client.send).toBe("function");
357
- });
358
- });
359
- //# sourceMappingURL=aws-file-manager.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"aws-file-manager.test.js","sourceRoot":"","sources":["../../tests/aws-file-manager.test.ts"],"names":[],"mappings":"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"}