@flusys/nestjs-storage 1.1.0-beta → 2.0.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 +148 -6
- package/cjs/config/index.js +0 -1
- package/cjs/config/storage.constants.js +0 -17
- package/cjs/controllers/file-manager.controller.js +44 -1
- package/cjs/controllers/folder.controller.js +44 -1
- package/cjs/controllers/storage-config.controller.js +44 -1
- package/cjs/controllers/upload.controller.js +18 -29
- package/cjs/docs/storage-swagger.config.js +24 -136
- package/cjs/dtos/file-manager.dto.js +70 -34
- package/cjs/dtos/folder.dto.js +15 -9
- package/cjs/dtos/storage-config.dto.js +4 -85
- package/cjs/dtos/upload.dto.js +24 -17
- package/cjs/entities/file-manager-with-company.entity.js +3 -4
- package/cjs/entities/file-manager.entity.js +71 -3
- package/cjs/entities/folder-with-company.entity.js +3 -4
- package/cjs/entities/folder.entity.js +19 -3
- package/cjs/entities/index.js +9 -10
- package/cjs/entities/storage-config-with-company.entity.js +3 -4
- package/cjs/entities/storage-config.entity.js +74 -3
- package/cjs/interfaces/index.js +0 -1
- package/cjs/middlewares/file-serve.middleware.js +113 -100
- package/cjs/modules/storage.module.js +82 -136
- package/cjs/providers/azure-provider.optional.js +10 -38
- package/cjs/providers/local-provider.js +38 -31
- package/cjs/providers/s3-provider.optional.js +19 -40
- package/cjs/providers/storage-factory.service.js +54 -99
- package/cjs/providers/storage-provider.registry.js +8 -18
- package/cjs/services/file-manager.service.js +238 -323
- package/cjs/services/folder.service.js +8 -11
- package/cjs/services/index.js +1 -0
- package/cjs/{config → services}/storage-config.service.js +32 -76
- package/cjs/services/storage-datasource.provider.js +16 -26
- package/cjs/services/storage-provider-config.service.js +15 -37
- package/cjs/services/upload.service.js +72 -88
- package/cjs/utils/file-validator.util.js +458 -0
- package/cjs/utils/image-compressor.util.js +3 -8
- package/config/index.d.ts +0 -1
- package/config/storage.constants.d.ts +0 -8
- package/controllers/upload.controller.d.ts +3 -6
- package/dtos/file-manager.dto.d.ts +12 -5
- package/dtos/folder.dto.d.ts +5 -5
- package/dtos/storage-config.dto.d.ts +7 -13
- package/entities/file-manager-with-company.entity.d.ts +2 -2
- package/entities/file-manager.entity.d.ts +12 -2
- package/entities/folder-with-company.entity.d.ts +2 -2
- package/entities/folder.entity.d.ts +4 -2
- package/entities/index.d.ts +3 -4
- package/entities/storage-config-with-company.entity.d.ts +2 -2
- package/entities/storage-config.entity.d.ts +8 -2
- package/fesm/config/index.js +0 -1
- package/fesm/config/storage.constants.js +0 -8
- package/fesm/controllers/file-manager.controller.js +45 -2
- package/fesm/controllers/folder.controller.js +45 -2
- package/fesm/controllers/storage-config.controller.js +45 -2
- package/fesm/controllers/upload.controller.js +19 -30
- package/fesm/docs/storage-swagger.config.js +27 -142
- package/fesm/dtos/file-manager.dto.js +71 -35
- package/fesm/dtos/folder.dto.js +16 -10
- package/fesm/dtos/storage-config.dto.js +8 -95
- package/fesm/dtos/upload.dto.js +25 -19
- package/fesm/entities/file-manager-with-company.entity.js +3 -4
- package/fesm/entities/file-manager.entity.js +72 -4
- package/fesm/entities/folder-with-company.entity.js +3 -4
- package/fesm/entities/folder.entity.js +20 -4
- package/fesm/entities/index.js +5 -13
- package/fesm/entities/storage-config-with-company.entity.js +3 -4
- package/fesm/entities/storage-config.entity.js +75 -4
- package/fesm/interfaces/index.js +0 -1
- package/fesm/interfaces/storage-config.interface.js +1 -3
- package/fesm/middlewares/file-serve.middleware.js +114 -101
- package/fesm/modules/storage.module.js +83 -136
- package/fesm/providers/azure-provider.optional.js +11 -42
- package/fesm/providers/local-provider.js +38 -31
- package/fesm/providers/s3-provider.optional.js +20 -44
- package/fesm/providers/storage-factory.service.js +52 -97
- package/fesm/providers/storage-provider.registry.js +10 -20
- package/fesm/services/file-manager.service.js +237 -322
- package/fesm/services/folder.service.js +6 -9
- package/fesm/services/index.js +1 -0
- package/fesm/{config → services}/storage-config.service.js +32 -76
- package/fesm/services/storage-datasource.provider.js +16 -26
- package/fesm/services/storage-provider-config.service.js +13 -35
- package/fesm/services/upload.service.js +71 -87
- package/fesm/utils/file-validator.util.js +451 -0
- package/fesm/utils/image-compressor.util.js +3 -8
- package/interfaces/file-manager.interface.d.ts +7 -4
- package/interfaces/index.d.ts +0 -1
- package/interfaces/storage-config.interface.d.ts +0 -20
- package/interfaces/storage-module-options.interface.d.ts +0 -5
- package/middlewares/file-serve.middleware.d.ts +9 -1
- package/modules/storage.module.d.ts +1 -2
- package/package.json +6 -6
- package/providers/azure-provider.optional.d.ts +8 -6
- package/providers/local-provider.d.ts +2 -7
- package/providers/s3-provider.optional.d.ts +9 -7
- package/providers/storage-factory.service.d.ts +8 -9
- package/providers/storage-provider.registry.d.ts +4 -4
- package/services/file-manager.service.d.ts +23 -16
- package/services/folder.service.d.ts +4 -4
- package/services/index.d.ts +1 -0
- package/services/storage-config.service.d.ts +24 -0
- package/services/storage-datasource.provider.d.ts +3 -4
- package/services/storage-provider-config.service.d.ts +4 -4
- package/services/upload.service.d.ts +3 -2
- package/utils/file-validator.util.d.ts +19 -0
- package/cjs/entities/file-manager-base.entity.js +0 -115
- package/cjs/entities/folder-base.entity.js +0 -55
- package/cjs/entities/storage-config-base.entity.js +0 -93
- package/cjs/interfaces/file-upload-response.interface.js +0 -4
- package/config/storage-config.service.d.ts +0 -22
- package/entities/file-manager-base.entity.d.ts +0 -13
- package/entities/folder-base.entity.d.ts +0 -5
- package/entities/storage-config-base.entity.d.ts +0 -9
- package/fesm/entities/file-manager-base.entity.js +0 -108
- package/fesm/entities/folder-base.entity.js +0 -48
- package/fesm/entities/storage-config-base.entity.js +0 -83
- package/fesm/interfaces/file-upload-response.interface.js +0 -1
- package/interfaces/file-upload-response.interface.d.ts +0 -6
|
@@ -1,17 +1,16 @@
|
|
|
1
|
-
import { IStorageProvider, IStorageProviderConfig } from '../interfaces/storage-provider.interface';
|
|
2
1
|
import { OnModuleDestroy } from '@nestjs/common';
|
|
3
|
-
import {
|
|
2
|
+
import { IStorageProvider, IStorageProviderConfig } from '../interfaces/storage-provider.interface';
|
|
3
|
+
import { StorageConfigService } from '../services';
|
|
4
4
|
export declare class StorageFactoryService implements OnModuleDestroy {
|
|
5
|
-
private readonly
|
|
5
|
+
private readonly configService;
|
|
6
6
|
private readonly logger;
|
|
7
|
-
private
|
|
8
|
-
constructor(
|
|
9
|
-
private generateCacheKey;
|
|
7
|
+
private readonly cache;
|
|
8
|
+
constructor(configService: StorageConfigService);
|
|
10
9
|
createProvider(config: IStorageProviderConfig): Promise<IStorageProvider>;
|
|
11
10
|
getProvider(providerName: string): Promise<IStorageProvider>;
|
|
12
|
-
clearCache(): void;
|
|
13
|
-
isProviderAvailable(providerName: string): boolean;
|
|
14
|
-
getAvailableProviders(): string[];
|
|
15
11
|
getLocalProviderBasePath(): string | null;
|
|
12
|
+
clearCache(): void;
|
|
16
13
|
onModuleDestroy(): Promise<void>;
|
|
14
|
+
private generateCacheKey;
|
|
15
|
+
private initializeProvider;
|
|
17
16
|
}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import { IStorageProvider } from '../interfaces';
|
|
2
1
|
import { Type } from '@nestjs/common';
|
|
2
|
+
import { IStorageProvider } from '../interfaces';
|
|
3
3
|
export declare class StorageProviderRegistry {
|
|
4
4
|
private static providers;
|
|
5
|
-
static register(
|
|
6
|
-
static get(
|
|
7
|
-
static has(
|
|
5
|
+
static register(name: string, providerClass: Type<IStorageProvider>): void;
|
|
6
|
+
static get(name: string): Type<IStorageProvider> | undefined;
|
|
7
|
+
static has(name: string): boolean;
|
|
8
8
|
static getAll(): string[];
|
|
9
9
|
static clear(): void;
|
|
10
10
|
}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { HybridCache, RequestScopedApiService } from '@flusys/nestjs-shared/classes';
|
|
2
2
|
import { DeleteDto, FilterAndPaginationDto } from '@flusys/nestjs-shared/dtos';
|
|
3
3
|
import { ILoggedUserInfo } from '@flusys/nestjs-shared/interfaces';
|
|
4
4
|
import { UtilsService } from '@flusys/nestjs-shared/modules';
|
|
5
|
-
import {
|
|
6
|
-
import { StorageConfigService } from '
|
|
5
|
+
import { EntityTarget, QueryRunner, Repository, SelectQueryBuilder } from 'typeorm';
|
|
6
|
+
import { StorageConfigService } from './storage-config.service';
|
|
7
7
|
import { CreateFileManagerDto, FilesResponseDto, GetFilesRequestDto, UpdateFileManagerDto } from '../dtos';
|
|
8
|
-
import { FileManagerBase } from '../entities';
|
|
8
|
+
import { FileManager, FileManagerBase } from '../entities';
|
|
9
9
|
import { IFileManager } from '../interfaces';
|
|
10
10
|
import { StorageDataSourceProvider } from './storage-datasource.provider';
|
|
11
11
|
import { UploadService } from './upload.service';
|
|
@@ -15,24 +15,15 @@ export declare class FileManagerService extends RequestScopedApiService<CreateFi
|
|
|
15
15
|
protected uploadService: UploadService;
|
|
16
16
|
private readonly storageConfig;
|
|
17
17
|
private readonly dataSourceProvider;
|
|
18
|
-
private readonly FILE_URL_EXPIRY_SECONDS;
|
|
19
|
-
private getFileBaseUrl;
|
|
20
18
|
constructor(cacheManager: HybridCache, utilsService: UtilsService, uploadService: UploadService, storageConfig: StorageConfigService, dataSourceProvider: StorageDataSourceProvider);
|
|
21
19
|
protected resolveEntity(): EntityTarget<FileManagerBase>;
|
|
22
20
|
protected getDataSourceProvider(): StorageDataSourceProvider;
|
|
23
21
|
convertSingleDtoToEntity(dto: CreateFileManagerDto | UpdateFileManagerDto, user: ILoggedUserInfo | null): Promise<FileManagerBase>;
|
|
24
22
|
getSelectQuery(query: SelectQueryBuilder<FileManagerBase>, _user: ILoggedUserInfo | null, select?: string[]): Promise<{
|
|
25
|
-
query: SelectQueryBuilder<
|
|
23
|
+
query: SelectQueryBuilder<FileManager>;
|
|
26
24
|
isRaw: boolean;
|
|
27
25
|
}>;
|
|
28
|
-
|
|
29
|
-
storageConfigId?: string | null;
|
|
30
|
-
}>(items: T[]): Promise<(T & {
|
|
31
|
-
providerName?: string;
|
|
32
|
-
})[]>;
|
|
33
|
-
protected getFilterQuery(query: SelectQueryBuilder<FileManagerBase>, filter: {
|
|
34
|
-
[key: string]: any;
|
|
35
|
-
}, _user: ILoggedUserInfo | null): Promise<{
|
|
26
|
+
protected getFilterQuery(query: SelectQueryBuilder<FileManagerBase>, filter: Record<string, any>, _user: ILoggedUserInfo | null): Promise<{
|
|
36
27
|
query: SelectQueryBuilder<FileManagerBase>;
|
|
37
28
|
isRaw: boolean;
|
|
38
29
|
}>;
|
|
@@ -40,6 +31,22 @@ export declare class FileManagerService extends RequestScopedApiService<CreateFi
|
|
|
40
31
|
query: SelectQueryBuilder<FileManagerBase>;
|
|
41
32
|
isRaw: boolean;
|
|
42
33
|
}>;
|
|
43
|
-
beforeDeleteOperation(dto: DeleteDto, user: ILoggedUserInfo | null,
|
|
34
|
+
beforeDeleteOperation(dto: DeleteDto, user: ILoggedUserInfo | null, _qr: QueryRunner): Promise<void>;
|
|
35
|
+
enrichWithProviderNames<T extends {
|
|
36
|
+
storageConfigId?: string | null;
|
|
37
|
+
}>(items: T[]): Promise<(T & {
|
|
38
|
+
providerName?: string;
|
|
39
|
+
})[]>;
|
|
44
40
|
getFiles(dtos: GetFilesRequestDto[], protocol: string, host: string, user?: ILoggedUserInfo): Promise<FilesResponseDto[]>;
|
|
41
|
+
private getStorageConfigRepository;
|
|
42
|
+
private buildWhereWithCompany;
|
|
43
|
+
private getStorageConfigBasePath;
|
|
44
|
+
private validateFolder;
|
|
45
|
+
private resolveStorageLocation;
|
|
46
|
+
private applyContentTypeFilter;
|
|
47
|
+
private applyPrivateFileFilter;
|
|
48
|
+
private groupFilesByConfig;
|
|
49
|
+
private getFileBaseUrl;
|
|
50
|
+
private refreshFileUrl;
|
|
51
|
+
private toFileResponse;
|
|
45
52
|
}
|
|
@@ -2,9 +2,9 @@ import { RequestScopedApiService, HybridCache } from '@flusys/nestjs-shared/clas
|
|
|
2
2
|
import { ILoggedUserInfo } from '@flusys/nestjs-shared/interfaces';
|
|
3
3
|
import { UtilsService } from '@flusys/nestjs-shared/modules';
|
|
4
4
|
import { EntityTarget, Repository, SelectQueryBuilder } from 'typeorm';
|
|
5
|
-
import { StorageConfigService } from '
|
|
5
|
+
import { StorageConfigService } from './storage-config.service';
|
|
6
6
|
import { CreateFolderDto, UpdateFolderDto } from '../dtos';
|
|
7
|
-
import { FolderBase } from '../entities';
|
|
7
|
+
import { Folder, FolderBase } from '../entities';
|
|
8
8
|
import { IFolder } from '../interfaces';
|
|
9
9
|
import { StorageDataSourceProvider } from './storage-datasource.provider';
|
|
10
10
|
export declare class FolderService extends RequestScopedApiService<CreateFolderDto, UpdateFolderDto, IFolder, FolderBase, Repository<FolderBase>> {
|
|
@@ -17,11 +17,11 @@ export declare class FolderService extends RequestScopedApiService<CreateFolderD
|
|
|
17
17
|
protected getDataSourceProvider(): StorageDataSourceProvider;
|
|
18
18
|
convertSingleDtoToEntity(dto: CreateFolderDto | UpdateFolderDto, user: ILoggedUserInfo | null): Promise<FolderBase>;
|
|
19
19
|
getSelectQuery(query: SelectQueryBuilder<FolderBase>, _user: ILoggedUserInfo | null, select?: string[]): Promise<{
|
|
20
|
-
query: SelectQueryBuilder<
|
|
20
|
+
query: SelectQueryBuilder<Folder>;
|
|
21
21
|
isRaw: boolean;
|
|
22
22
|
}>;
|
|
23
23
|
protected getExtraManipulateQuery(query: SelectQueryBuilder<FolderBase>, filterDto: any, user: ILoggedUserInfo | null): Promise<{
|
|
24
|
-
query: SelectQueryBuilder<
|
|
24
|
+
query: SelectQueryBuilder<Folder>;
|
|
25
25
|
isRaw: boolean;
|
|
26
26
|
}>;
|
|
27
27
|
}
|
package/services/index.d.ts
CHANGED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { DatabaseMode } from '@flusys/nestjs-core';
|
|
2
|
+
import { IModuleConfigService } from '@flusys/nestjs-shared/interfaces';
|
|
3
|
+
import { StorageModuleOptions } from '../interfaces';
|
|
4
|
+
interface ValidationResult {
|
|
5
|
+
valid: boolean;
|
|
6
|
+
message?: string;
|
|
7
|
+
}
|
|
8
|
+
export declare class StorageConfigService implements IModuleConfigService {
|
|
9
|
+
private readonly options;
|
|
10
|
+
constructor(options: StorageModuleOptions);
|
|
11
|
+
isCompanyFeatureEnabled(): boolean;
|
|
12
|
+
getDatabaseMode(): DatabaseMode;
|
|
13
|
+
isMultiTenant(): boolean;
|
|
14
|
+
getMaxFileSize(): number;
|
|
15
|
+
getAllowedFileTypes(): string[];
|
|
16
|
+
getOptions(): StorageModuleOptions;
|
|
17
|
+
getDefaultLocalStoragePath(): string;
|
|
18
|
+
getAppUrl(): string;
|
|
19
|
+
isFileTypeAllowed(mimeType: string): boolean;
|
|
20
|
+
validateFileSize(fileSize: number): ValidationResult;
|
|
21
|
+
validateFileType(mimeType: string): ValidationResult;
|
|
22
|
+
private toMB;
|
|
23
|
+
}
|
|
24
|
+
export {};
|
|
@@ -3,9 +3,9 @@ import { IDatabaseConfig, ITenantDatabaseConfig } from '@flusys/nestjs-core';
|
|
|
3
3
|
import { Logger } from '@nestjs/common';
|
|
4
4
|
import { Request } from 'express';
|
|
5
5
|
import { DataSource } from 'typeorm';
|
|
6
|
-
import {
|
|
6
|
+
import { StorageConfigService } from './storage-config.service';
|
|
7
7
|
export declare class StorageDataSourceProvider extends MultiTenantDataSourceService {
|
|
8
|
-
private readonly
|
|
8
|
+
private readonly configService;
|
|
9
9
|
protected readonly logger: Logger;
|
|
10
10
|
protected static readonly tenantConnections: Map<string, DataSource>;
|
|
11
11
|
protected static singleDataSource: DataSource | null;
|
|
@@ -13,9 +13,8 @@ export declare class StorageDataSourceProvider extends MultiTenantDataSourceServ
|
|
|
13
13
|
protected static initialized: boolean;
|
|
14
14
|
protected static readonly connectionLocks: Map<string, Promise<DataSource>>;
|
|
15
15
|
protected static singleConnectionLock: Promise<DataSource> | null;
|
|
16
|
-
constructor(
|
|
16
|
+
constructor(configService: StorageConfigService, request?: Request);
|
|
17
17
|
private static buildParentOptions;
|
|
18
|
-
getEnableCompanyFeature(): boolean;
|
|
19
18
|
getEnableCompanyFeatureForTenant(tenant?: ITenantDatabaseConfig): boolean;
|
|
20
19
|
getEnableCompanyFeatureForCurrentTenant(): boolean;
|
|
21
20
|
getStorageEntities(enableCompanyFeature?: boolean): Promise<any[]>;
|
|
@@ -2,9 +2,9 @@ import { RequestScopedApiService, HybridCache } from '@flusys/nestjs-shared/clas
|
|
|
2
2
|
import { ILoggedUserInfo } from '@flusys/nestjs-shared/interfaces';
|
|
3
3
|
import { UtilsService } from '@flusys/nestjs-shared/modules';
|
|
4
4
|
import { EntityTarget, Repository, SelectQueryBuilder } from 'typeorm';
|
|
5
|
-
import { StorageConfigService } from '
|
|
5
|
+
import { StorageConfigService } from './storage-config.service';
|
|
6
6
|
import { CreateStorageConfigDto, UpdateStorageConfigDto } from '../dtos';
|
|
7
|
-
import { StorageConfigBase } from '../entities';
|
|
7
|
+
import { StorageConfig, StorageConfigBase } from '../entities';
|
|
8
8
|
import { FileLocationEnum } from '../enums';
|
|
9
9
|
import { IStorageConfig } from '../interfaces';
|
|
10
10
|
import { StorageDataSourceProvider } from './storage-datasource.provider';
|
|
@@ -18,11 +18,11 @@ export declare class StorageProviderConfigService extends RequestScopedApiServic
|
|
|
18
18
|
protected getDataSourceProvider(): StorageDataSourceProvider;
|
|
19
19
|
convertSingleDtoToEntity(dto: CreateStorageConfigDto | UpdateStorageConfigDto, user: ILoggedUserInfo | null): Promise<StorageConfigBase>;
|
|
20
20
|
getSelectQuery(query: SelectQueryBuilder<StorageConfigBase>, _user: ILoggedUserInfo | null, select?: string[]): Promise<{
|
|
21
|
-
query: SelectQueryBuilder<
|
|
21
|
+
query: SelectQueryBuilder<StorageConfig>;
|
|
22
22
|
isRaw: boolean;
|
|
23
23
|
}>;
|
|
24
24
|
protected getExtraManipulateQuery(query: SelectQueryBuilder<StorageConfigBase>, filterDto: any, user: ILoggedUserInfo | null): Promise<{
|
|
25
|
-
query: SelectQueryBuilder<
|
|
25
|
+
query: SelectQueryBuilder<StorageConfig>;
|
|
26
26
|
isRaw: boolean;
|
|
27
27
|
}>;
|
|
28
28
|
findByIdDirect(id: string): Promise<StorageConfigBase | null>;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { ILoggedUserInfo } from '@flusys/nestjs-shared/interfaces';
|
|
2
|
-
import { StorageConfigService } from '
|
|
2
|
+
import { StorageConfigService } from './storage-config.service';
|
|
3
3
|
import { UploadOptionsDto } from '../dtos/upload.dto';
|
|
4
4
|
import { FileLocationEnum } from '../enums/file-location.enum';
|
|
5
5
|
import { IUploadedFileInfo } from '../interfaces/storage-provider.interface';
|
|
@@ -12,8 +12,9 @@ export declare class UploadService {
|
|
|
12
12
|
private logger;
|
|
13
13
|
constructor(storageFactory: StorageFactoryService, storageConfigService: StorageConfigService, storageProviderConfigService: StorageProviderConfigService);
|
|
14
14
|
private validateFile;
|
|
15
|
+
private createProviderFromConfig;
|
|
16
|
+
private createFallbackLocalProvider;
|
|
15
17
|
private getStorageProviderWithConfig;
|
|
16
|
-
private getStorageProvider;
|
|
17
18
|
private getStorageProviderForDelete;
|
|
18
19
|
uploadSingleFile(file: Express.Multer.File, options: UploadOptionsDto, user?: ILoggedUserInfo): Promise<IUploadedFileInfo>;
|
|
19
20
|
uploadMultipleFiles(files: Express.Multer.File[], options: UploadOptionsDto, user?: ILoggedUserInfo): Promise<IUploadedFileInfo[]>;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
export interface FileValidationResult {
|
|
2
|
+
valid: boolean;
|
|
3
|
+
detectedType?: string;
|
|
4
|
+
declaredType?: string;
|
|
5
|
+
message?: string;
|
|
6
|
+
}
|
|
7
|
+
export declare class FileValidator {
|
|
8
|
+
private static logger;
|
|
9
|
+
private static failureResult;
|
|
10
|
+
private static successResult;
|
|
11
|
+
static detectFileType(buffer: Buffer): string | null;
|
|
12
|
+
static isTextBasedType(mimeType: string): boolean;
|
|
13
|
+
static isDangerousTextType(mimeType: string): boolean;
|
|
14
|
+
static mimeTypesMatch(detected: string, declared: string): boolean;
|
|
15
|
+
static isTypeAllowed(mimeType: string, allowedTypes: string[]): boolean;
|
|
16
|
+
static validateFileContent(buffer: Buffer, declaredMimeType: string, allowedTypes?: string[]): FileValidationResult;
|
|
17
|
+
private static validateUndetectedType;
|
|
18
|
+
static sanitizeFilename(filename: string): string;
|
|
19
|
+
}
|
|
@@ -1,115 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", {
|
|
3
|
-
value: true
|
|
4
|
-
});
|
|
5
|
-
Object.defineProperty(exports, "FileManagerBase", {
|
|
6
|
-
enumerable: true,
|
|
7
|
-
get: function() {
|
|
8
|
-
return FileManagerBase;
|
|
9
|
-
}
|
|
10
|
-
});
|
|
11
|
-
const _entities = require("@flusys/nestjs-shared/entities");
|
|
12
|
-
const _enums = require("../enums");
|
|
13
|
-
const _typeorm = require("typeorm");
|
|
14
|
-
function _define_property(obj, key, value) {
|
|
15
|
-
if (key in obj) {
|
|
16
|
-
Object.defineProperty(obj, key, {
|
|
17
|
-
value: value,
|
|
18
|
-
enumerable: true,
|
|
19
|
-
configurable: true,
|
|
20
|
-
writable: true
|
|
21
|
-
});
|
|
22
|
-
} else {
|
|
23
|
-
obj[key] = value;
|
|
24
|
-
}
|
|
25
|
-
return obj;
|
|
26
|
-
}
|
|
27
|
-
function _ts_decorate(decorators, target, key, desc) {
|
|
28
|
-
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
29
|
-
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
30
|
-
else for(var i = decorators.length - 1; i >= 0; i--)if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
31
|
-
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
32
|
-
}
|
|
33
|
-
function _ts_metadata(k, v) {
|
|
34
|
-
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
35
|
-
}
|
|
36
|
-
let FileManagerBase = class FileManagerBase extends _entities.Identity {
|
|
37
|
-
constructor(...args){
|
|
38
|
-
super(...args), _define_property(this, "name", void 0 // Store original name of the file
|
|
39
|
-
), _define_property(this, "contentType", void 0 // MIME type of the file
|
|
40
|
-
), _define_property(this, "size", void 0 // Size of the file in KB
|
|
41
|
-
), _define_property(this, "key", void 0 // Storage key or path of the file
|
|
42
|
-
), _define_property(this, "url", void 0 // Accessible URL of the file
|
|
43
|
-
), _define_property(this, "location", void 0 // aws, azure, sftp
|
|
44
|
-
), _define_property(this, "storageConfigId", void 0 // Reference to storage_config table
|
|
45
|
-
), _define_property(this, "expiresAt", null) // Expiration timestamp for the URL
|
|
46
|
-
, _define_property(this, "isPrivate", void 0);
|
|
47
|
-
}
|
|
48
|
-
};
|
|
49
|
-
_ts_decorate([
|
|
50
|
-
(0, _typeorm.Column)({
|
|
51
|
-
type: 'varchar',
|
|
52
|
-
length: 255,
|
|
53
|
-
nullable: false
|
|
54
|
-
}),
|
|
55
|
-
_ts_metadata("design:type", String)
|
|
56
|
-
], FileManagerBase.prototype, "name", void 0);
|
|
57
|
-
_ts_decorate([
|
|
58
|
-
(0, _typeorm.Column)({
|
|
59
|
-
type: 'varchar',
|
|
60
|
-
length: 255,
|
|
61
|
-
nullable: false
|
|
62
|
-
}),
|
|
63
|
-
_ts_metadata("design:type", String)
|
|
64
|
-
], FileManagerBase.prototype, "contentType", void 0);
|
|
65
|
-
_ts_decorate([
|
|
66
|
-
(0, _typeorm.Column)({
|
|
67
|
-
type: 'varchar',
|
|
68
|
-
length: 255,
|
|
69
|
-
nullable: false
|
|
70
|
-
}),
|
|
71
|
-
_ts_metadata("design:type", String)
|
|
72
|
-
], FileManagerBase.prototype, "size", void 0);
|
|
73
|
-
_ts_decorate([
|
|
74
|
-
(0, _typeorm.Column)({
|
|
75
|
-
type: 'text',
|
|
76
|
-
nullable: false
|
|
77
|
-
}),
|
|
78
|
-
_ts_metadata("design:type", String)
|
|
79
|
-
], FileManagerBase.prototype, "key", void 0);
|
|
80
|
-
_ts_decorate([
|
|
81
|
-
(0, _typeorm.Column)({
|
|
82
|
-
type: 'text',
|
|
83
|
-
nullable: true
|
|
84
|
-
}),
|
|
85
|
-
_ts_metadata("design:type", Object)
|
|
86
|
-
], FileManagerBase.prototype, "url", void 0);
|
|
87
|
-
_ts_decorate([
|
|
88
|
-
(0, _typeorm.Column)({
|
|
89
|
-
type: 'text',
|
|
90
|
-
nullable: false
|
|
91
|
-
}),
|
|
92
|
-
_ts_metadata("design:type", typeof _enums.FileLocationEnum === "undefined" ? Object : _enums.FileLocationEnum)
|
|
93
|
-
], FileManagerBase.prototype, "location", void 0);
|
|
94
|
-
_ts_decorate([
|
|
95
|
-
(0, _typeorm.Column)({
|
|
96
|
-
type: 'uuid',
|
|
97
|
-
nullable: true
|
|
98
|
-
}),
|
|
99
|
-
_ts_metadata("design:type", Object)
|
|
100
|
-
], FileManagerBase.prototype, "storageConfigId", void 0);
|
|
101
|
-
_ts_decorate([
|
|
102
|
-
(0, _typeorm.Column)({
|
|
103
|
-
type: 'bigint',
|
|
104
|
-
nullable: true
|
|
105
|
-
}),
|
|
106
|
-
_ts_metadata("design:type", Object)
|
|
107
|
-
], FileManagerBase.prototype, "expiresAt", void 0);
|
|
108
|
-
_ts_decorate([
|
|
109
|
-
(0, _typeorm.Column)({
|
|
110
|
-
type: 'boolean',
|
|
111
|
-
nullable: false,
|
|
112
|
-
default: false
|
|
113
|
-
}),
|
|
114
|
-
_ts_metadata("design:type", Boolean)
|
|
115
|
-
], FileManagerBase.prototype, "isPrivate", void 0);
|
|
@@ -1,55 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", {
|
|
3
|
-
value: true
|
|
4
|
-
});
|
|
5
|
-
Object.defineProperty(exports, "FolderBase", {
|
|
6
|
-
enumerable: true,
|
|
7
|
-
get: function() {
|
|
8
|
-
return FolderBase;
|
|
9
|
-
}
|
|
10
|
-
});
|
|
11
|
-
const _entities = require("@flusys/nestjs-shared/entities");
|
|
12
|
-
const _typeorm = require("typeorm");
|
|
13
|
-
function _define_property(obj, key, value) {
|
|
14
|
-
if (key in obj) {
|
|
15
|
-
Object.defineProperty(obj, key, {
|
|
16
|
-
value: value,
|
|
17
|
-
enumerable: true,
|
|
18
|
-
configurable: true,
|
|
19
|
-
writable: true
|
|
20
|
-
});
|
|
21
|
-
} else {
|
|
22
|
-
obj[key] = value;
|
|
23
|
-
}
|
|
24
|
-
return obj;
|
|
25
|
-
}
|
|
26
|
-
function _ts_decorate(decorators, target, key, desc) {
|
|
27
|
-
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
28
|
-
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
29
|
-
else for(var i = decorators.length - 1; i >= 0; i--)if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
30
|
-
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
31
|
-
}
|
|
32
|
-
function _ts_metadata(k, v) {
|
|
33
|
-
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
34
|
-
}
|
|
35
|
-
let FolderBase = class FolderBase extends _entities.Identity {
|
|
36
|
-
constructor(...args){
|
|
37
|
-
super(...args), _define_property(this, "name", void 0), _define_property(this, "slug", void 0);
|
|
38
|
-
}
|
|
39
|
-
};
|
|
40
|
-
_ts_decorate([
|
|
41
|
-
(0, _typeorm.Column)({
|
|
42
|
-
type: 'varchar',
|
|
43
|
-
length: 255,
|
|
44
|
-
nullable: false
|
|
45
|
-
}),
|
|
46
|
-
_ts_metadata("design:type", String)
|
|
47
|
-
], FolderBase.prototype, "name", void 0);
|
|
48
|
-
_ts_decorate([
|
|
49
|
-
(0, _typeorm.Column)({
|
|
50
|
-
type: 'varchar',
|
|
51
|
-
length: 255,
|
|
52
|
-
nullable: false
|
|
53
|
-
}),
|
|
54
|
-
_ts_metadata("design:type", String)
|
|
55
|
-
], FolderBase.prototype, "slug", void 0);
|
|
@@ -1,93 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", {
|
|
3
|
-
value: true
|
|
4
|
-
});
|
|
5
|
-
Object.defineProperty(exports, "StorageConfigBase", {
|
|
6
|
-
enumerable: true,
|
|
7
|
-
get: function() {
|
|
8
|
-
return StorageConfigBase;
|
|
9
|
-
}
|
|
10
|
-
});
|
|
11
|
-
const _entities = require("@flusys/nestjs-shared/entities");
|
|
12
|
-
const _enums = require("../enums");
|
|
13
|
-
const _typeorm = require("typeorm");
|
|
14
|
-
function _define_property(obj, key, value) {
|
|
15
|
-
if (key in obj) {
|
|
16
|
-
Object.defineProperty(obj, key, {
|
|
17
|
-
value: value,
|
|
18
|
-
enumerable: true,
|
|
19
|
-
configurable: true,
|
|
20
|
-
writable: true
|
|
21
|
-
});
|
|
22
|
-
} else {
|
|
23
|
-
obj[key] = value;
|
|
24
|
-
}
|
|
25
|
-
return obj;
|
|
26
|
-
}
|
|
27
|
-
function _ts_decorate(decorators, target, key, desc) {
|
|
28
|
-
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
29
|
-
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
30
|
-
else for(var i = decorators.length - 1; i >= 0; i--)if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
31
|
-
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
32
|
-
}
|
|
33
|
-
function _ts_metadata(k, v) {
|
|
34
|
-
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
35
|
-
}
|
|
36
|
-
let StorageConfigBase = class StorageConfigBase extends _entities.Identity {
|
|
37
|
-
constructor(...args){
|
|
38
|
-
super(...args), _define_property(this, "name", void 0), _define_property(this, "storage", void 0), _define_property(this, "config", void 0), _define_property(this, "isActive", void 0), _define_property(this, "isDefault", void 0);
|
|
39
|
-
}
|
|
40
|
-
};
|
|
41
|
-
_ts_decorate([
|
|
42
|
-
(0, _typeorm.Column)({
|
|
43
|
-
type: 'varchar',
|
|
44
|
-
length: 255,
|
|
45
|
-
nullable: false
|
|
46
|
-
}),
|
|
47
|
-
_ts_metadata("design:type", String)
|
|
48
|
-
], StorageConfigBase.prototype, "name", void 0);
|
|
49
|
-
_ts_decorate([
|
|
50
|
-
(0, _typeorm.Column)({
|
|
51
|
-
type: 'enum',
|
|
52
|
-
enum: _enums.FileLocationEnum,
|
|
53
|
-
nullable: false
|
|
54
|
-
}),
|
|
55
|
-
_ts_metadata("design:type", typeof _enums.FileLocationEnum === "undefined" ? Object : _enums.FileLocationEnum)
|
|
56
|
-
], StorageConfigBase.prototype, "storage", void 0);
|
|
57
|
-
_ts_decorate([
|
|
58
|
-
(0, _typeorm.Column)({
|
|
59
|
-
type: 'json',
|
|
60
|
-
nullable: false
|
|
61
|
-
}),
|
|
62
|
-
_ts_metadata("design:type", typeof Record === "undefined" ? Object : Record)
|
|
63
|
-
], StorageConfigBase.prototype, "config", void 0);
|
|
64
|
-
_ts_decorate([
|
|
65
|
-
(0, _typeorm.Column)({
|
|
66
|
-
type: 'boolean',
|
|
67
|
-
default: true,
|
|
68
|
-
name: 'is_active'
|
|
69
|
-
}),
|
|
70
|
-
_ts_metadata("design:type", Boolean)
|
|
71
|
-
], StorageConfigBase.prototype, "isActive", void 0);
|
|
72
|
-
_ts_decorate([
|
|
73
|
-
(0, _typeorm.Column)({
|
|
74
|
-
type: 'boolean',
|
|
75
|
-
default: false,
|
|
76
|
-
name: 'is_default'
|
|
77
|
-
}),
|
|
78
|
-
_ts_metadata("design:type", Boolean)
|
|
79
|
-
], StorageConfigBase.prototype, "isDefault", void 0);
|
|
80
|
-
StorageConfigBase = _ts_decorate([
|
|
81
|
-
(0, _typeorm.Index)([
|
|
82
|
-
'name'
|
|
83
|
-
]),
|
|
84
|
-
(0, _typeorm.Index)([
|
|
85
|
-
'storage'
|
|
86
|
-
]),
|
|
87
|
-
(0, _typeorm.Index)([
|
|
88
|
-
'isActive'
|
|
89
|
-
]),
|
|
90
|
-
(0, _typeorm.Index)([
|
|
91
|
-
'isDefault'
|
|
92
|
-
])
|
|
93
|
-
], StorageConfigBase);
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
import { StorageModuleOptions } from '../interfaces';
|
|
2
|
-
export declare class StorageConfigService {
|
|
3
|
-
private readonly options;
|
|
4
|
-
constructor(options: StorageModuleOptions);
|
|
5
|
-
isCompanyFeatureEnabled(): boolean;
|
|
6
|
-
getDatabaseMode(): 'single' | 'multi-tenant';
|
|
7
|
-
getMaxFileSize(): number;
|
|
8
|
-
getAllowedFileTypes(): string[];
|
|
9
|
-
isFileTypeAllowed(mimeType: string): boolean;
|
|
10
|
-
validateFileSize(fileSize: number): {
|
|
11
|
-
valid: boolean;
|
|
12
|
-
message?: string;
|
|
13
|
-
};
|
|
14
|
-
validateFileType(mimeType: string): {
|
|
15
|
-
valid: boolean;
|
|
16
|
-
message?: string;
|
|
17
|
-
};
|
|
18
|
-
getDefaultDatabaseConfig(): import("@flusys/nestjs-core").IDatabaseConfig;
|
|
19
|
-
getOptions(): StorageModuleOptions;
|
|
20
|
-
getDefaultLocalStoragePath(): string;
|
|
21
|
-
getAppUrl(): string;
|
|
22
|
-
}
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import { Identity } from '@flusys/nestjs-shared/entities';
|
|
2
|
-
import { FileLocationEnum } from '../enums';
|
|
3
|
-
export declare abstract class FileManagerBase extends Identity {
|
|
4
|
-
name: string;
|
|
5
|
-
contentType: string;
|
|
6
|
-
size: string;
|
|
7
|
-
key: string;
|
|
8
|
-
url: string | null;
|
|
9
|
-
location: FileLocationEnum;
|
|
10
|
-
storageConfigId: string | null;
|
|
11
|
-
expiresAt: number | null;
|
|
12
|
-
isPrivate: boolean;
|
|
13
|
-
}
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
import { Identity } from '@flusys/nestjs-shared/entities';
|
|
2
|
-
import { FileLocationEnum } from '../enums';
|
|
3
|
-
export declare abstract class StorageConfigBase extends Identity {
|
|
4
|
-
name: string;
|
|
5
|
-
storage: FileLocationEnum;
|
|
6
|
-
config: Record<string, any>;
|
|
7
|
-
isActive: boolean;
|
|
8
|
-
isDefault: boolean;
|
|
9
|
-
}
|