nestjs-r2-storage 1.2.6 → 1.3.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/README.md CHANGED
@@ -6,6 +6,8 @@
6
6
  **Author:** Nurul Islam Rimon
7
7
  **GitHub:** [https://github.com/nurulislamrimon/nestjs-r2-storage](https://github.com/nurulislamrimon/nestjs-r2-storage)
8
8
 
9
+ ![Nestjs R2 Storage](nestjs-r2-storage.gif)
10
+
9
11
  Production-ready NestJS module for Cloudflare R2 object storage management.
10
12
 
11
13
  ## Features
@@ -25,11 +27,11 @@ Cloudflare R2 does NOT enforce ACLs like AWS S3 - the R2 API ignores ACL headers
25
27
 
26
28
  ### Modes
27
29
 
28
- | Mode | Public URLs | Signed URLs | Use Case |
29
- |------|-------------|-------------|----------|
30
- | `private` | Not allowed | Required | Maximum security - only signed access |
31
- | `public-read` | Allowed | Optional | Public files (e.g., static assets) |
32
- | `hybrid` | Allowed | Allowed | Mixed content (default) |
30
+ | Mode | Public URLs | Signed URLs | Use Case |
31
+ | ------------- | ----------- | ----------- | ------------------------------------- |
32
+ | `private` | Not allowed | Required | Maximum security - only signed access |
33
+ | `public-read` | Allowed | Optional | Public files (e.g., static assets) |
34
+ | `hybrid` | Allowed | Allowed | Mixed content (default) |
33
35
 
34
36
  ### Private Mode
35
37
 
@@ -38,12 +40,13 @@ Only presigned URLs are allowed. Public URL generation throws `AccessModeError`.
38
40
  ```typescript
39
41
  R2StorageModule.forRoot({
40
42
  // ... other options
41
- accessMode: 'private',
42
- publicUrlBase: 'https://cdn.example.com', // still configured but not used
43
+ accessMode: "private",
44
+ publicUrlBase: "https://cdn.example.com", // still configured but not used
43
45
  });
44
46
  ```
45
47
 
46
48
  Response in private mode:
49
+
47
50
  ```json
48
51
  {
49
52
  "uploadUrl": "https://signed-url...",
@@ -58,8 +61,8 @@ Public URLs are generated. Signed URLs are optional.
58
61
  ```typescript
59
62
  R2StorageModule.forRoot({
60
63
  // ... other options
61
- accessMode: 'public-read',
62
- publicUrlBase: 'https://cdn.example.com',
64
+ accessMode: "public-read",
65
+ publicUrlBase: "https://cdn.example.com",
63
66
  });
64
67
  ```
65
68
 
@@ -70,7 +73,7 @@ Both public and signed access are allowed for backward compatibility.
70
73
  ```typescript
71
74
  R2StorageModule.forRoot({
72
75
  // ... other options
73
- accessMode: 'hybrid', // default
76
+ accessMode: "hybrid", // default
74
77
  });
75
78
  ```
76
79
 
@@ -80,8 +83,8 @@ R2StorageModule.forRoot({
80
83
 
81
84
  ```typescript
82
85
  // app.module.ts
83
- import { Module } from '@nestjs/common';
84
- import { R2StorageModule } from 'nestjs-r2-storage';
86
+ import { Module } from "@nestjs/common";
87
+ import { R2StorageModule } from "nestjs-r2-storage";
85
88
 
86
89
  @Module({
87
90
  imports: [
@@ -90,7 +93,7 @@ import { R2StorageModule } from 'nestjs-r2-storage';
90
93
  accessKeyId: process.env.R2_ACCESS_KEY,
91
94
  secretAccessKey: process.env.R2_SECRET_KEY,
92
95
  bucketName: process.env.R2_BUCKET,
93
- region: 'auto',
96
+ region: "auto",
94
97
  publicUrlBase: `https://${process.env.R2_ACCOUNT_ID}.r2.cloudflarestorage.com/${process.env.R2_BUCKET}`,
95
98
  signedUrlExpiry: 3600,
96
99
  }),
@@ -102,8 +105,12 @@ export class AppModule {}
102
105
  ### 2. Use in Your Service
103
106
 
104
107
  ```typescript
105
- import { Injectable } from '@nestjs/common';
106
- import { PhotoManagerService, PhotoField, CloudflareService } from 'nestjs-r2-storage';
108
+ import { Injectable } from "@nestjs/common";
109
+ import {
110
+ PhotoManagerService,
111
+ PhotoField,
112
+ CloudflareService,
113
+ } from "nestjs-r2-storage";
107
114
 
108
115
  @Injectable()
109
116
  export class ProductService {
@@ -114,12 +121,19 @@ export class ProductService {
114
121
 
115
122
  async createProduct(payload: any) {
116
123
  const photoFields: PhotoField[] = [
117
- { field: 'image', urlField: 'image_url', sizeField: 'image_size' },
118
- { field: 'gallery[].photo', urlField: 'photo_url', sizeField: 'photo_size' },
124
+ { field: "image", urlField: "image_url", sizeField: "image_size" },
125
+ {
126
+ field: "gallery[].photo",
127
+ urlField: "photo_url",
128
+ sizeField: "photo_size",
129
+ },
119
130
  ];
120
131
 
121
- const result = await this.photoManager.createObjectWithPhotos(payload, photoFields);
122
-
132
+ const result = await this.photoManager.createObjectWithPhotos(
133
+ payload,
134
+ photoFields,
135
+ );
136
+
123
137
  // Return upload URLs to client for direct upload
124
138
  return {
125
139
  product: result.updatedPayload,
@@ -130,10 +144,10 @@ export class ProductService {
130
144
 
131
145
  async getProduct(id: string) {
132
146
  const product = await this.findProduct(id);
133
-
147
+
134
148
  const photoFields: PhotoField[] = [
135
- { field: 'image', urlField: 'image_url' },
136
- { field: 'gallery[].photo', urlField: 'photo_url' },
149
+ { field: "image", urlField: "image_url" },
150
+ { field: "gallery[].photo", urlField: "photo_url" },
137
151
  ];
138
152
 
139
153
  return this.photoManager.appendPhotoUrls(product, photoFields);
@@ -141,13 +155,17 @@ export class ProductService {
141
155
 
142
156
  async updateProduct(id: string, payload: any) {
143
157
  const existing = await this.findProduct(id);
144
-
158
+
145
159
  const photoFields: PhotoField[] = [
146
- { field: 'image', urlField: 'image_url', sizeField: 'image_size' },
160
+ { field: "image", urlField: "image_url", sizeField: "image_size" },
147
161
  ];
148
162
 
149
- const result = await this.photoManager.updateObjectWithPhotos(payload, existing, photoFields);
150
-
163
+ const result = await this.photoManager.updateObjectWithPhotos(
164
+ payload,
165
+ existing,
166
+ photoFields,
167
+ );
168
+
151
169
  return {
152
170
  product: result.updatedPayload,
153
171
  uploadUrls: result.uploadUrls,
@@ -158,9 +176,9 @@ export class ProductService {
158
176
 
159
177
  async deleteProduct(id: string) {
160
178
  const product = await this.findProduct(id);
161
-
179
+
162
180
  const photoFields: PhotoField[] = [
163
- { field: 'image', urlField: 'image_url' },
181
+ { field: "image", urlField: "image_url" },
164
182
  ];
165
183
 
166
184
  await this.photoManager.deletePhotosFromObject(product, photoFields);
@@ -177,16 +195,16 @@ Direct R2 operations.
177
195
 
178
196
  ```typescript
179
197
  // Generate upload URL
180
- const uploadUrl = await cloudflare.getUploadUrl('avatar.png', 1024000);
198
+ const uploadUrl = await cloudflare.getUploadUrl("avatar.png", 1024000);
181
199
 
182
200
  // Generate download URL
183
- const downloadUrl = await cloudflare.getDownloadUrl('uploads/avatar_123.png');
201
+ const downloadUrl = await cloudflare.getDownloadUrl("uploads/avatar_123.png");
184
202
 
185
203
  // Delete file
186
- await cloudflare.deleteFile('uploads/avatar.png');
204
+ await cloudflare.deleteFile("uploads/avatar.png");
187
205
 
188
206
  // Check if file exists
189
- const exists = await cloudflare.fileExists('uploads/avatar.png');
207
+ const exists = await cloudflare.fileExists("uploads/avatar.png");
190
208
  ```
191
209
 
192
210
  ### Presigned URL Security
@@ -198,7 +216,7 @@ The module uses secure presigned URL generation:
198
216
  - **Minimal signing** - Only signs `host` and `content-type` headers
199
217
 
200
218
  ```typescript
201
- const result = await cloudflare.getUploadUrl('avatar.png', 1024000);
219
+ const result = await cloudflare.getUploadUrl("avatar.png", 1024000);
202
220
 
203
221
  // result = {
204
222
  // uploadUrl: "https://signed-url...",
@@ -219,28 +237,27 @@ Adds signed URLs to response objects.
219
237
 
220
238
  ```typescript
221
239
  const photoFields: PhotoField[] = [
222
- { field: 'avatar', urlField: 'avatar_url' },
223
- { field: 'shop.logo', urlField: 'logo_url' },
224
- { field: 'products[].image', urlField: 'image_url' },
225
- { field: 'gallery[].photo', urlField: 'photo_url' },
240
+ { field: "avatar", urlField: "avatar_url" },
241
+ { field: "shop.logo", urlField: "logo_url" },
242
+ { field: "products[].image", urlField: "image_url" },
243
+ { field: "gallery[].photo", urlField: "photo_url" },
226
244
  ];
227
245
 
228
246
  const result = await photoManager.appendPhotoUrls(product, photoFields);
229
247
  ```
230
248
 
231
249
  Input:
250
+
232
251
  ```json
233
252
  {
234
253
  "name": "Laptop",
235
254
  "image": "laptop.png",
236
- "gallery": [
237
- { "photo": "photo1.jpg" },
238
- { "photo": "photo2.jpg" }
239
- ]
255
+ "gallery": [{ "photo": "photo1.jpg" }, { "photo": "photo2.jpg" }]
240
256
  }
241
257
  ```
242
258
 
243
259
  Output:
260
+
244
261
  ```json
245
262
  {
246
263
  "name": "Laptop",
@@ -264,13 +281,13 @@ const payload = {
264
281
  image_size: 42000,
265
282
  gallery: [
266
283
  { photo: "photo1.jpg", photo_size: 10000 },
267
- { photo: "photo2.jpg", photo_size: 15000 }
268
- ]
284
+ { photo: "photo2.jpg", photo_size: 15000 },
285
+ ],
269
286
  };
270
287
 
271
288
  const photoFields: PhotoField[] = [
272
- { field: 'image', sizeField: 'image_size' },
273
- { field: 'gallery[].photo', sizeField: 'gallery[].photo_size' },
289
+ { field: "image", sizeField: "image_size" },
290
+ { field: "gallery[].photo", sizeField: "gallery[].photo_size" },
274
291
  ];
275
292
 
276
293
  const result = await photoManager.createObjectWithPhotos(payload, photoFields);
@@ -284,21 +301,23 @@ const result = await photoManager.createObjectWithPhotos(payload, photoFields);
284
301
 
285
302
  #### updateObjectWithPhotos()
286
303
 
287
- Updates object with new photos, deletes old files.
304
+ Updates an existing object with new photos. Only deletes old photos when:
305
+ - The field is included in the new payload
306
+ - The new photo has a different filename than the existing one
288
307
 
289
308
  ```typescript
290
309
  const result = await photoManager.updateObjectWithPhotos(
291
- newPayload,
292
- existingObject,
310
+ newPayload, // payload with new photo data
311
+ existingObject, // existing object with old photo data
293
312
  photoFields,
294
313
  );
295
314
 
296
315
  // result = {
297
- // updatedPayload: { ... },
298
- // uploadUrls: [{ field, fileKey, uploadUrl, publicUrl }],
299
- // storageIncrease: 1000,
300
- // storageDecrease: 500,
301
- // deletedFiles: ['old-file.png']
316
+ // updatedPayload: { ... }, // merged payload
317
+ // uploadUrls: [{ field, fileKey, uploadUrl, publicUrl }], // new upload URLs
318
+ // storageIncrease: 1000, // new files size
319
+ // storageDecrease: 500, // deleted files size
320
+ // deletedFiles: ['old-file.png'] // files that were deleted
302
321
  // }
303
322
  ```
304
323
 
@@ -335,26 +354,26 @@ variants[].images[] -> variants[0].images[0], variants[0].images[1], ...
335
354
 
336
355
  ### Supported Patterns
337
356
 
338
- | Path | Description |
339
- |------|-------------|
340
- | `shop.logo` | Simple nested field |
341
- | `user.profile.image` | Deeply nested with dots |
342
- | `gallery[].photo` | Array of objects |
343
- | `products[].images[]` | Array containing array |
357
+ | Path | Description |
358
+ | -------------------------- | ------------------------------- |
359
+ | `shop.logo` | Simple nested field |
360
+ | `user.profile.image` | Deeply nested with dots |
361
+ | `gallery[].photo` | Array of objects |
362
+ | `products[].images[]` | Array containing array |
344
363
  | `variants[0].images[].url` | Indexed array with nested array |
345
364
 
346
365
  ## Configuration Options
347
366
 
348
- | Option | Type | Required | Description |
349
- |--------|------|----------|-------------|
350
- | `endpoint` | string | Yes | R2 endpoint URL |
351
- | `accessKeyId` | string | Yes | R2 access key ID |
352
- | `secretAccessKey` | string | Yes | R2 secret access key |
353
- | `bucketName` | string | Yes | R2 bucket name |
354
- | `region` | string | No | AWS region (default: 'auto') |
355
- | `publicUrlBase` | string | No | Base URL for public access |
356
- | `signedUrlExpiry` | number | No | Signed URL expiry in seconds (default: 3600) |
357
- | `accessMode` | string | No | Access mode: `private`, `public-read`, `hybrid` (default: `hybrid`) |
367
+ | Option | Type | Required | Description |
368
+ | ----------------- | ------ | -------- | ------------------------------------------------------------------- |
369
+ | `endpoint` | string | Yes | R2 endpoint URL |
370
+ | `accessKeyId` | string | Yes | R2 access key ID |
371
+ | `secretAccessKey` | string | Yes | R2 secret access key |
372
+ | `bucketName` | string | Yes | R2 bucket name |
373
+ | `region` | string | No | AWS region (default: 'auto') |
374
+ | `publicUrlBase` | string | No | Base URL for public access |
375
+ | `signedUrlExpiry` | number | No | Signed URL expiry in seconds (default: 3600) |
376
+ | `accessMode` | string | No | Access mode: `private`, `public-read`, `hybrid` (default: `hybrid`) |
358
377
 
359
378
  ## Error Handling
360
379
 
@@ -363,10 +382,10 @@ variants[].images[] -> variants[0].images[0], variants[0].images[1], ...
363
382
  Thrown when attempting to generate public URLs in `private` access mode.
364
383
 
365
384
  ```typescript
366
- import { AccessModeError } from 'nestjs-r2-storage';
385
+ import { AccessModeError } from "nestjs-r2-storage";
367
386
 
368
387
  try {
369
- const result = await cloudflare.getUploadUrl('file.png', 1024);
388
+ const result = await cloudflare.getUploadUrl("file.png", 1024);
370
389
  } catch (error) {
371
390
  if (error instanceof AccessModeError) {
372
391
  console.log(error.message); // "Public URL generation is not allowed in 'private' access mode..."
@@ -384,7 +403,7 @@ R2StorageModule.forRootAsync({
384
403
  secretAccessKey: process.env.R2_SECRET_KEY,
385
404
  bucketName: process.env.R2_BUCKET,
386
405
  }),
387
- })
406
+ });
388
407
  ```
389
408
 
390
409
  ## Changelog
@@ -173,7 +173,8 @@ let PhotoManagerService = class PhotoManagerService {
173
173
  };
174
174
  }
175
175
  async deletePhotosFromObject(object, photoFields) {
176
- const fileKeys = this.extractExistingFiles(object, photoFields);
176
+ const fileKeyInfos = this.extractExistingFiles(object, photoFields);
177
+ const fileKeys = fileKeyInfos.map((f) => f.fileKey);
177
178
  const deletedFiles = [];
178
179
  let totalStorageFreed = 0;
179
180
  if (fileKeys.length === 0) {
@@ -196,9 +197,8 @@ let PhotoManagerService = class PhotoManagerService {
196
197
  const requests = [];
197
198
  for (const photoField of photoFields) {
198
199
  const fieldValue = (0, nested_value_util_1.getNestedValue)(payload, photoField.field);
199
- if (!fieldValue) {
200
+ if (!fieldValue)
200
201
  continue;
201
- }
202
202
  if ((0, nested_value_util_1.isArrayPath)(photoField.field)) {
203
203
  const arrayRequests = this.extractArrayFieldUploadRequests(payload, photoField, filePrefix);
204
204
  requests.push(...arrayRequests);
@@ -207,7 +207,10 @@ let PhotoManagerService = class PhotoManagerService {
207
207
  const sizeValue = photoField.sizeField
208
208
  ? (0, nested_value_util_1.getNestedValue)(payload, photoField.sizeField)
209
209
  : 0;
210
- if (typeof fieldValue === "string" && fieldValue.length > 0) {
210
+ if (typeof fieldValue === "string" &&
211
+ fieldValue.length > 0 &&
212
+ sizeValue > 0 &&
213
+ !fieldValue.includes("/")) {
211
214
  requests.push({
212
215
  field: photoField.field,
213
216
  filename: fieldValue,
@@ -223,17 +226,15 @@ let PhotoManagerService = class PhotoManagerService {
223
226
  const requests = [];
224
227
  const { segments } = (0, nested_value_util_1.parseFieldPath)(photoField.field);
225
228
  const lastArrayIndex = segments.findIndex((s) => s.isArray);
226
- if (lastArrayIndex === -1) {
229
+ if (lastArrayIndex === -1)
227
230
  return requests;
228
- }
229
231
  const arrayPath = segments
230
232
  .slice(0, lastArrayIndex + 1)
231
233
  .map((s) => s.key)
232
234
  .join(".");
233
235
  const arrayValue = (0, nested_value_util_1.getNestedValue)(payload, arrayPath);
234
- if (!arrayValue || !Array.isArray(arrayValue)) {
236
+ if (!arrayValue || !Array.isArray(arrayValue))
235
237
  return requests;
236
- }
237
238
  const { key: photoKey } = segments[segments.length - 1];
238
239
  const sizeKey = photoField.sizeField
239
240
  ? photoField.sizeField.split(".").pop()
@@ -241,22 +242,24 @@ let PhotoManagerService = class PhotoManagerService {
241
242
  for (let i = 0; i < arrayValue.length; i++) {
242
243
  const item = arrayValue[i];
243
244
  const photoValue = item[photoKey];
244
- if (!photoValue || typeof photoValue !== "string") {
245
- continue;
246
- }
247
245
  const sizeValue = sizeKey ? item[sizeKey] || 0 : 0;
248
- const fieldPath = `${arrayPath}[${i}].${photoKey}`;
249
- requests.push({
250
- field: fieldPath,
251
- filename: photoValue,
252
- size: sizeValue,
253
- prefix: filePrefix,
254
- });
246
+ if (typeof photoValue === "string" &&
247
+ photoValue.length > 0 &&
248
+ sizeValue > 0 &&
249
+ !photoValue.includes("/")) {
250
+ const fieldPath = `${arrayPath}[${i}].${photoKey}`;
251
+ requests.push({
252
+ field: fieldPath,
253
+ filename: photoValue,
254
+ size: sizeValue,
255
+ prefix: filePrefix,
256
+ });
257
+ }
255
258
  }
256
259
  return requests;
257
260
  }
258
261
  extractExistingFiles(object, photoFields) {
259
- const fileKeys = [];
262
+ const fileInfos = [];
260
263
  for (const photoField of photoFields) {
261
264
  const fieldValue = (0, nested_value_util_1.getNestedValue)(object, photoField.field);
262
265
  if (!fieldValue) {
@@ -277,21 +280,38 @@ let PhotoManagerService = class PhotoManagerService {
277
280
  continue;
278
281
  }
279
282
  const { key } = segments[segments.length - 1];
280
- for (const item of arrayValue) {
283
+ for (let i = 0; i < arrayValue.length; i++) {
284
+ const item = arrayValue[i];
281
285
  if (item && item[key] && typeof item[key] === "string") {
282
- fileKeys.push(item[key]);
286
+ fileInfos.push({
287
+ field: `${arrayPath}[${i}].${key}`,
288
+ fileKey: item[key],
289
+ });
283
290
  }
284
291
  }
285
292
  }
286
293
  else if (typeof fieldValue === "string" && fieldValue.length > 0) {
287
- fileKeys.push(fieldValue);
294
+ fileInfos.push({
295
+ field: photoField.field,
296
+ fileKey: fieldValue,
297
+ });
288
298
  }
289
299
  }
290
- return fileKeys;
300
+ return fileInfos;
291
301
  }
292
302
  determineFilesToDelete(existingFiles, newRequests) {
293
- const newFilenames = new Set(newRequests.map((r) => this.normalizeFilename(r.filename)));
294
- return existingFiles.filter((file) => !newFilenames.has(this.normalizeFilename(file)));
303
+ const filesToDelete = [];
304
+ for (const existing of existingFiles) {
305
+ const matchingRequest = newRequests.find((req) => req.field === existing.field);
306
+ if (!matchingRequest)
307
+ continue;
308
+ const isSame = this.normalizeFilename(matchingRequest.filename) ===
309
+ this.normalizeFilename(existing.fileKey);
310
+ if (isSame)
311
+ continue;
312
+ filesToDelete.push(existing.fileKey);
313
+ }
314
+ return filesToDelete;
295
315
  }
296
316
  normalizeFilename(filename) {
297
317
  return filename.split("/").pop() || filename;
@@ -1 +1 @@
1
- {"version":3,"file":"photo-manager.service.js","sourceRoot":"","sources":["../../src/r2-storage/photo-manager.service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"photo-manager.service.js","sourceRoot":"","sources":["../../src/r2-storage/photo-manager.service.ts"],"names":[],"mappings":"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"}