@flusys/nestjs-storage 9.1.2 → 9.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (38) hide show
  1. package/README.md +13 -0
  2. package/controllers/file-manager.controller.d.ts +1 -0
  3. package/controllers/folder.controller.d.ts +1 -0
  4. package/controllers/storage-config.controller.d.ts +1 -0
  5. package/fesm/493.js +416 -251
  6. package/fesm/537.js +25 -21
  7. package/fesm/562.js +184 -172
  8. package/fesm/chunks/190.js +6 -6
  9. package/fesm/chunks/252.js +1 -1
  10. package/fesm/chunks/327.js +1 -1
  11. package/fesm/chunks/385.js +1 -1
  12. package/fesm/chunks/591.js +11 -11
  13. package/fesm/chunks/746.js +1 -1
  14. package/fesm/chunks/798.js +1 -1
  15. package/fesm/chunks/918.js +19 -7
  16. package/fesm/config/index.js +8 -8
  17. package/fesm/controllers/index.js +1 -1
  18. package/fesm/docs/index.js +11 -15
  19. package/fesm/dtos/index.js +24 -20
  20. package/fesm/entities/index.js +6 -6
  21. package/fesm/enums/index.js +4 -4
  22. package/fesm/index.js +30 -34
  23. package/fesm/interfaces/index.js +2 -2
  24. package/fesm/modules/index.js +1 -1
  25. package/fesm/providers/index.js +123 -129
  26. package/fesm/services/index.js +1 -1
  27. package/fesm/utils/index.js +88 -84
  28. package/middlewares/file-serve.middleware.d.ts +3 -1
  29. package/package.json +3 -3
  30. package/providers/local-provider.d.ts +2 -0
  31. package/providers/sftp-provider.optional.d.ts +1 -0
  32. package/providers/storage-factory.service.d.ts +4 -2
  33. package/services/file-manager.service.d.ts +5 -6
  34. package/services/folder.service.d.ts +5 -5
  35. package/services/storage-provider-config.service.d.ts +5 -2
  36. package/services/upload.service.d.ts +3 -1
  37. package/utils/company-ownership.util.d.ts +3 -0
  38. package/utils/file-validator.util.d.ts +1 -0
package/README.md CHANGED
@@ -159,6 +159,19 @@ TypeOrmModule.forRoot({
159
159
  });
160
160
  ```
161
161
 
162
+ ## 3. Caching
163
+
164
+ | What | Cached | Invalidated by |
165
+ | ---- | ------ | -------------- |
166
+ | File `get-all` / `get/:id` | Yes, keyed on the `file_manager` **and** `folder` stamps (reads join the folder name) | Any file or folder write; `get-files` URL refreshes bump the file stamp after saving |
167
+ | Folder `get-all` / `get/:id` | Yes, `folder` stamp | Any folder write |
168
+ | Storage config `get-all` / `get/:id` | **No** - rows carry provider credentials | - |
169
+ | Active local storage roots (public file route) | Yes, `storageConfig` stamp | Any storage-config write, so an edited or deactivated local config stops being served on every instance |
170
+ | Provider clients (`StorageFactoryService`) | Process-local, per provider + config hash | Config content change (new key), 30 min idle, LRU above 50 clients; dropped clients are closed |
171
+
172
+ Cached file reads keep the `url` column as stored; it may be a presigned URL. Use `get-files` to get a URL that is valid now.
173
+
174
+ Files served by `GET storage/upload/file/*` are sent with `Cache-Control: private, max-age=3600` - the route is unauthenticated and cannot tell private files apart, so no shared proxy or CDN may keep a copy. The route serves from the roots of **all** active local configs of the tenant, not only the first one. A storage config with `isActive: false` takes no new uploads but still serves, signs and deletes its existing files.
162
175
 
163
176
  ## License
164
177
 
@@ -7,6 +7,7 @@ declare const FileManagerController_base: abstract new (service: FileManagerServ
7
7
  readonly enabledEndpoints: import("@flusys/nestjs-shared").ApiEndpoint[] | "all";
8
8
  service: FileManagerService;
9
9
  isEnabled(endpoint: import("@flusys/nestjs-shared").ApiEndpoint): boolean;
10
+ assertEnabled(endpoint: import("@flusys/nestjs-shared").ApiEndpoint): void;
10
11
  insert(addDto: CreateFileManagerDto, user: ILoggedUserInfo | null): Promise<SingleResponseDto<FileManagerResponseDto>>;
11
12
  insertMany(addDto: CreateFileManagerDto[], user: ILoggedUserInfo | null): Promise<import("@flusys/nestjs-shared").BulkResponseDto<FileManagerResponseDto>>;
12
13
  getById(id: string, body: import("@flusys/nestjs-shared").GetByIdBodyDto, user: ILoggedUserInfo | null): Promise<SingleResponseDto<FileManagerResponseDto>>;
@@ -4,6 +4,7 @@ declare const FolderController_base: abstract new (service: FolderService) => {
4
4
  readonly enabledEndpoints: import("@flusys/nestjs-shared").ApiEndpoint[] | "all";
5
5
  service: FolderService;
6
6
  isEnabled(endpoint: import("@flusys/nestjs-shared").ApiEndpoint): boolean;
7
+ assertEnabled(endpoint: import("@flusys/nestjs-shared").ApiEndpoint): void;
7
8
  insert(addDto: CreateFolderDto, user: import("@flusys/nestjs-shared").ILoggedUserInfo | null): Promise<import("@flusys/nestjs-shared").SingleResponseDto<FolderResponseDto>>;
8
9
  insertMany(addDto: CreateFolderDto[], user: import("@flusys/nestjs-shared").ILoggedUserInfo | null): Promise<import("@flusys/nestjs-shared").BulkResponseDto<FolderResponseDto>>;
9
10
  getById(id: string, body: import("@flusys/nestjs-shared").GetByIdBodyDto, user: import("@flusys/nestjs-shared").ILoggedUserInfo | null): Promise<import("@flusys/nestjs-shared").SingleResponseDto<FolderResponseDto>>;
@@ -4,6 +4,7 @@ declare const StorageConfigController_base: abstract new (service: StorageProvid
4
4
  readonly enabledEndpoints: import("@flusys/nestjs-shared").ApiEndpoint[] | "all";
5
5
  service: StorageProviderConfigService;
6
6
  isEnabled(endpoint: import("@flusys/nestjs-shared").ApiEndpoint): boolean;
7
+ assertEnabled(endpoint: import("@flusys/nestjs-shared").ApiEndpoint): void;
7
8
  insert(addDto: CreateStorageConfigDto, user: import("@flusys/nestjs-shared").ILoggedUserInfo | null): Promise<import("@flusys/nestjs-shared").SingleResponseDto<StorageConfigResponseDto>>;
8
9
  insertMany(addDto: CreateStorageConfigDto[], user: import("@flusys/nestjs-shared").ILoggedUserInfo | null): Promise<import("@flusys/nestjs-shared").BulkResponseDto<StorageConfigResponseDto>>;
9
10
  getById(id: string, body: import("@flusys/nestjs-shared").GetByIdBodyDto, user: import("@flusys/nestjs-shared").ILoggedUserInfo | null): Promise<import("@flusys/nestjs-shared").SingleResponseDto<StorageConfigResponseDto>>;