@bts-soft/core 1.2.8 → 1.3.9
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 +2 -2
- package/dist/cache/src/index.d.ts +8 -0
- package/dist/cache/src/index.js +25 -0
- package/dist/cache/src/index.js.map +1 -0
- package/dist/cache/src/redis/config/redisConfig.service.d.ts +4 -0
- package/dist/cache/src/redis/config/redisConfig.service.js +33 -0
- package/dist/cache/src/redis/config/redisConfig.service.js.map +1 -0
- package/dist/cache/src/redis/constant/redis.constant.d.ts +2 -0
- package/dist/cache/src/redis/constant/redis.constant.js +5 -0
- package/dist/cache/src/redis/constant/redis.constant.js.map +1 -0
- package/dist/cache/src/redis/factory/redisClient.factory.d.ts +2 -0
- package/dist/cache/src/redis/factory/redisClient.factory.js +47 -0
- package/dist/cache/src/redis/factory/redisClient.factory.js.map +1 -0
- package/dist/cache/src/redis/interface/redis.interface.d.ts +111 -0
- package/dist/cache/src/redis/interface/redis.interface.js +3 -0
- package/dist/cache/src/redis/interface/redis.interface.js.map +1 -0
- package/dist/cache/src/redis/provider/redisService.provider.d.ts +2 -0
- package/dist/cache/src/redis/provider/redisService.provider.js +12 -0
- package/dist/cache/src/redis/provider/redisService.provider.js.map +1 -0
- package/dist/cache/src/redis/redis.health.d.ts +7 -0
- package/dist/cache/src/redis/redis.health.js +38 -0
- package/dist/cache/src/redis/redis.health.js.map +1 -0
- package/dist/cache/src/redis/redis.module.d.ts +2 -0
- package/dist/cache/src/redis/redis.module.js +39 -0
- package/dist/cache/src/redis/redis.module.js.map +1 -0
- package/dist/cache/src/redis/redis.service.d.ts +119 -0
- package/dist/cache/src/redis/redis.service.js +571 -0
- package/dist/cache/src/redis/redis.service.js.map +1 -0
- package/dist/core/src/index.d.ts +4 -0
- package/dist/core/src/index.js +21 -0
- package/dist/core/src/index.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -1
- package/dist/mail-queue/src/email.module.d.ts +2 -0
- package/dist/mail-queue/src/email.module.js +40 -0
- package/dist/mail-queue/src/email.module.js.map +1 -0
- package/dist/mail-queue/src/index.d.ts +8 -0
- package/dist/mail-queue/src/index.js +25 -0
- package/dist/mail-queue/src/index.js.map +1 -0
- package/dist/mail-queue/src/interfaces/IemailStrategy.interface.d.ts +3 -0
- package/dist/mail-queue/src/interfaces/IemailStrategy.interface.js +3 -0
- package/dist/mail-queue/src/interfaces/IemailStrategy.interface.js.map +1 -0
- package/dist/mail-queue/src/interfaces/iEmailObserver.interface.d.ts +4 -0
- package/dist/mail-queue/src/interfaces/iEmailObserver.interface.js +3 -0
- package/dist/mail-queue/src/interfaces/iEmailObserver.interface.js.map +1 -0
- package/dist/mail-queue/src/observer/email.observer.d.ts +5 -0
- package/dist/mail-queue/src/observer/email.observer.js +13 -0
- package/dist/mail-queue/src/observer/email.observer.js.map +1 -0
- package/dist/mail-queue/src/processor/email.processing.d.ts +8 -0
- package/dist/mail-queue/src/processor/email.processing.js +44 -0
- package/dist/mail-queue/src/processor/email.processing.js.map +1 -0
- package/dist/mail-queue/src/provider/mailer.provider.d.ts +5 -0
- package/dist/mail-queue/src/provider/mailer.provider.js +32 -0
- package/dist/mail-queue/src/provider/mailer.provider.js.map +1 -0
- package/dist/mail-queue/src/sendemail.service.d.ts +11 -0
- package/dist/mail-queue/src/sendemail.service.js +52 -0
- package/dist/mail-queue/src/sendemail.service.js.map +1 -0
- package/dist/mail-queue/src/strategy/email.strategy.d.ts +6 -0
- package/dist/mail-queue/src/strategy/email.strategy.js +18 -0
- package/dist/mail-queue/src/strategy/email.strategy.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/dist/upload/src/index.d.ts +19 -0
- package/dist/upload/src/index.js +36 -0
- package/dist/upload/src/index.js.map +1 -0
- package/dist/upload/src/upload/commands/deleteImage.command.d.ts +8 -0
- package/dist/upload/src/upload/commands/deleteImage.command.js +14 -0
- package/dist/upload/src/upload/commands/deleteImage.command.js.map +1 -0
- package/dist/upload/src/upload/commands/deleteVideo.command.d.ts +9 -0
- package/dist/upload/src/upload/commands/deleteVideo.command.js +15 -0
- package/dist/upload/src/upload/commands/deleteVideo.command.js.map +1 -0
- package/dist/upload/src/upload/commands/uploadImage.command.d.ts +9 -0
- package/dist/upload/src/upload/commands/uploadImage.command.js +15 -0
- package/dist/upload/src/upload/commands/uploadImage.command.js.map +1 -0
- package/dist/upload/src/upload/commands/uploadVideo.command.d.ts +9 -0
- package/dist/upload/src/upload/commands/uploadVideo.command.js +15 -0
- package/dist/upload/src/upload/commands/uploadVideo.command.js.map +1 -0
- package/dist/upload/src/upload/config/cloudinary.d.ts +6 -0
- package/dist/upload/src/upload/config/cloudinary.js +19 -0
- package/dist/upload/src/upload/config/cloudinary.js.map +1 -0
- package/dist/upload/src/upload/dtos/createImage.dto.d.ts +6 -0
- package/dist/upload/src/upload/dtos/createImage.dto.js +41 -0
- package/dist/upload/src/upload/dtos/createImage.dto.js.map +1 -0
- package/dist/upload/src/upload/dtos/createVideo.dto.d.ts +6 -0
- package/dist/upload/src/upload/dtos/createVideo.dto.js +40 -0
- package/dist/upload/src/upload/dtos/createVideo.dto.js.map +1 -0
- package/dist/upload/src/upload/dtos/fileUpload.d.ts +7 -0
- package/dist/upload/src/upload/dtos/fileUpload.js +3 -0
- package/dist/upload/src/upload/dtos/fileUpload.js.map +1 -0
- package/dist/upload/src/upload/factories/upload.factory.d.ts +4 -0
- package/dist/upload/src/upload/factories/upload.factory.js +11 -0
- package/dist/upload/src/upload/factories/upload.factory.js.map +1 -0
- package/dist/upload/src/upload/graphql/main.graphql.d.ts +2 -0
- package/dist/upload/src/upload/graphql/main.graphql.js +8 -0
- package/dist/upload/src/upload/graphql/main.graphql.js.map +1 -0
- package/dist/upload/src/upload/interfaces/IDaeleteStrategy.interface.d.ts +3 -0
- package/dist/upload/src/upload/interfaces/IDaeleteStrategy.interface.js +3 -0
- package/dist/upload/src/upload/interfaces/IDaeleteStrategy.interface.js.map +1 -0
- package/dist/upload/src/upload/interfaces/IUpload.interface.d.ts +3 -0
- package/dist/upload/src/upload/interfaces/IUpload.interface.js +3 -0
- package/dist/upload/src/upload/interfaces/IUpload.interface.js.map +1 -0
- package/dist/upload/src/upload/interfaces/IUploadCommand.interface.d.ts +3 -0
- package/dist/upload/src/upload/interfaces/IUploadCommand.interface.js +3 -0
- package/dist/upload/src/upload/interfaces/IUploadCommand.interface.js.map +1 -0
- package/dist/upload/src/upload/interfaces/IUploadObserver.interface.d.ts +6 -0
- package/dist/upload/src/upload/interfaces/IUploadObserver.interface.js +3 -0
- package/dist/upload/src/upload/interfaces/IUploadObserver.interface.js.map +1 -0
- package/dist/upload/src/upload/observer/upload.observer.d.ts +7 -0
- package/dist/upload/src/upload/observer/upload.observer.js +19 -0
- package/dist/upload/src/upload/observer/upload.observer.js.map +1 -0
- package/dist/upload/src/upload/rest.controller.d.ts +13 -0
- package/dist/upload/src/upload/rest.controller.js +94 -0
- package/dist/upload/src/upload/rest.controller.js.map +1 -0
- package/dist/upload/src/upload/strategies/delete.strategy.d.ts +6 -0
- package/dist/upload/src/upload/strategies/delete.strategy.js +15 -0
- package/dist/upload/src/upload/strategies/delete.strategy.js.map +1 -0
- package/dist/upload/src/upload/strategies/upload.strategy.d.ts +6 -0
- package/dist/upload/src/upload/strategies/upload.strategy.js +21 -0
- package/dist/upload/src/upload/strategies/upload.strategy.js.map +1 -0
- package/dist/upload/src/upload/upload.module.d.ts +2 -0
- package/dist/upload/src/upload/upload.module.js +21 -0
- package/dist/upload/src/upload/upload.module.js.map +1 -0
- package/dist/upload/src/upload/upload.service.d.ts +27 -0
- package/dist/upload/src/upload/upload.service.js +161 -0
- package/dist/upload/src/upload/upload.service.js.map +1 -0
- package/dist/validation/src/decorators/CapitalField.decorator.d.ts +1 -0
- package/dist/validation/src/decorators/CapitalField.decorator.js +23 -0
- package/dist/validation/src/decorators/CapitalField.decorator.js.map +1 -0
- package/dist/validation/src/decorators/EmailField.decorator.d.ts +1 -0
- package/dist/validation/src/decorators/EmailField.decorator.js +17 -0
- package/dist/validation/src/decorators/EmailField.decorator.js.map +1 -0
- package/dist/validation/src/decorators/IdValidate.decorator.d.ts +1 -0
- package/dist/validation/src/decorators/IdValidate.decorator.js +19 -0
- package/dist/validation/src/decorators/IdValidate.decorator.js.map +1 -0
- package/dist/validation/src/decorators/PasswordField.decorator.d.ts +2 -0
- package/dist/validation/src/decorators/PasswordField.decorator.js +20 -0
- package/dist/validation/src/decorators/PasswordField.decorator.js.map +1 -0
- package/dist/validation/src/decorators/PhoneField.decorator.d.ts +3 -0
- package/dist/validation/src/decorators/PhoneField.decorator.js +21 -0
- package/dist/validation/src/decorators/PhoneField.decorator.js.map +1 -0
- package/dist/validation/src/decorators/TextField.decorator.d.ts +1 -0
- package/dist/validation/src/decorators/TextField.decorator.js +23 -0
- package/dist/validation/src/decorators/TextField.decorator.js.map +1 -0
- package/dist/validation/src/decorators/nationalId.decorator.d.ts +2 -0
- package/dist/validation/src/decorators/nationalId.decorator.js +24 -0
- package/dist/validation/src/decorators/nationalId.decorator.js.map +1 -0
- package/dist/validation/src/index.d.ts +10 -0
- package/dist/validation/src/index.js +27 -0
- package/dist/validation/src/index.js.map +1 -0
- package/dist/validation/src/regex/SQL_INJECTION_REGEX.d.ts +1 -0
- package/dist/validation/src/regex/SQL_INJECTION_REGEX.js +5 -0
- package/dist/validation/src/regex/SQL_INJECTION_REGEX.js.map +1 -0
- package/dist/validation/src/utility/WordsTransform.decorator.d.ts +2 -0
- package/dist/validation/src/utility/WordsTransform.decorator.js +19 -0
- package/dist/validation/src/utility/WordsTransform.decorator.js.map +1 -0
- package/package.json +10 -3
- package/src/index.ts +7 -1
- package/tsconfig.json +2 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"delete.strategy.js","sourceRoot":"","sources":["../../../../../../upload/src/upload/strategies/delete.strategy.ts"],"names":[],"mappings":";;;AAEA,MAAa,wBAAwB;IACnC,YAAoB,UAAe;QAAf,eAAU,GAAV,UAAU,CAAK;IAAG,CAAC;IAEvC,KAAK,CAAC,MAAM,CAAC,QAAgB,EAAE,eAAuB,OAAO;QAC3D,OAAO,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,EAAE;YAChD,aAAa,EAAE,YAAY;SAC5B,CAAC,CAAC;IACL,CAAC;CACF;AARD,4DAQC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.CloudinaryUploadStrategy = void 0;
|
|
4
|
+
class CloudinaryUploadStrategy {
|
|
5
|
+
constructor(cloudinary) {
|
|
6
|
+
this.cloudinary = cloudinary;
|
|
7
|
+
}
|
|
8
|
+
async upload(stream, options) {
|
|
9
|
+
return new Promise((resolve, reject) => {
|
|
10
|
+
const uploadStream = this.cloudinary.uploader.upload_stream(options, (error, result) => {
|
|
11
|
+
if (error)
|
|
12
|
+
reject(error);
|
|
13
|
+
else
|
|
14
|
+
resolve(result);
|
|
15
|
+
});
|
|
16
|
+
stream.pipe(uploadStream);
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
exports.CloudinaryUploadStrategy = CloudinaryUploadStrategy;
|
|
21
|
+
//# sourceMappingURL=upload.strategy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"upload.strategy.js","sourceRoot":"","sources":["../../../../../../upload/src/upload/strategies/upload.strategy.ts"],"names":[],"mappings":";;;AAEA,MAAa,wBAAwB;IACnC,YAAoB,UAAe;QAAf,eAAU,GAAV,UAAU,CAAK;IAAG,CAAC;IAEvC,KAAK,CAAC,MAAM,CAAC,MAAW,EAAE,OAAY;QACpC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACrC,MAAM,YAAY,GAAG,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,aAAa,CACzD,OAAO,EACP,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE;gBAChB,IAAI,KAAK;oBAAE,MAAM,CAAC,KAAK,CAAC,CAAC;;oBACpB,OAAO,CAAC,MAAM,CAAC,CAAC;YACvB,CAAC,CACF,CAAC;YACF,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAC5B,CAAC,CAAC,CAAC;IACL,CAAC;CACF;AAfD,4DAeC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
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;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.UploadModule = void 0;
|
|
10
|
+
const common_1 = require("@nestjs/common");
|
|
11
|
+
const upload_service_1 = require("./upload.service");
|
|
12
|
+
let UploadModule = class UploadModule {
|
|
13
|
+
};
|
|
14
|
+
exports.UploadModule = UploadModule;
|
|
15
|
+
exports.UploadModule = UploadModule = __decorate([
|
|
16
|
+
(0, common_1.Module)({
|
|
17
|
+
providers: [upload_service_1.UploadService],
|
|
18
|
+
exports: [upload_service_1.UploadService],
|
|
19
|
+
})
|
|
20
|
+
], UploadModule);
|
|
21
|
+
//# sourceMappingURL=upload.module.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"upload.module.js","sourceRoot":"","sources":["../../../../../upload/src/upload/upload.module.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAAwC;AACxC,qDAAiD;AAU1C,IAAM,YAAY,GAAlB,MAAM,YAAY;CAAG,CAAA;AAAf,oCAAY;uBAAZ,YAAY;IAJxB,IAAA,eAAM,EAAC;QACN,SAAS,EAAE,CAAC,8BAAa,CAAC;QAC1B,OAAO,EAAE,CAAC,8BAAa,CAAC;KACzB,CAAC;GACW,YAAY,CAAG"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { ConfigService } from '@nestjs/config';
|
|
2
|
+
import Stream from 'stream';
|
|
3
|
+
import { CreateImageDto } from './dtos/createImage.dto';
|
|
4
|
+
import { CreateVideoDto } from './dtos/createVideo.dto';
|
|
5
|
+
export interface UploadFile {
|
|
6
|
+
stream: Stream;
|
|
7
|
+
filename: string;
|
|
8
|
+
}
|
|
9
|
+
export declare class UploadService {
|
|
10
|
+
private configService;
|
|
11
|
+
private readonly cloudinary;
|
|
12
|
+
private uploadStrategy;
|
|
13
|
+
private deleteStrategy;
|
|
14
|
+
private observers;
|
|
15
|
+
constructor(configService: ConfigService);
|
|
16
|
+
private notifyUploadSuccess;
|
|
17
|
+
private notifyUploadError;
|
|
18
|
+
private notifyDeleteSuccess;
|
|
19
|
+
private notifyDeleteError;
|
|
20
|
+
uploadImageCore(fileData: UploadFile, dirUpload?: string): Promise<string>;
|
|
21
|
+
uploadVideoCore(fileData: UploadFile, dirUpload?: string): Promise<string>;
|
|
22
|
+
uploadImage(createImageInput: CreateImageDto, dirUpload?: string): Promise<string>;
|
|
23
|
+
uploadVideo(createVideoInput: CreateVideoDto, dirUpload?: string): Promise<string>;
|
|
24
|
+
deleteImage(imageUrl: string): Promise<void>;
|
|
25
|
+
deleteVideo(videoUrl: string): Promise<void>;
|
|
26
|
+
private getVideoDuration;
|
|
27
|
+
}
|
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
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;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.UploadService = void 0;
|
|
13
|
+
const common_1 = require("@nestjs/common");
|
|
14
|
+
const config_1 = require("@nestjs/config");
|
|
15
|
+
const upload_factory_1 = require("./factories/upload.factory");
|
|
16
|
+
const upload_strategy_1 = require("./strategies/upload.strategy");
|
|
17
|
+
const delete_strategy_1 = require("./strategies/delete.strategy");
|
|
18
|
+
const uploadImage_command_1 = require("./commands/uploadImage.command");
|
|
19
|
+
const deleteImage_command_1 = require("./commands/deleteImage.command");
|
|
20
|
+
const deleteVideo_command_1 = require("./commands/deleteVideo.command");
|
|
21
|
+
const uploadVideo_command_1 = require("./commands/uploadVideo.command");
|
|
22
|
+
const upload_observer_1 = require("./observer/upload.observer");
|
|
23
|
+
let UploadService = class UploadService {
|
|
24
|
+
constructor(configService) {
|
|
25
|
+
this.configService = configService;
|
|
26
|
+
this.observers = [];
|
|
27
|
+
this.cloudinary = upload_factory_1.UploadServiceFactory.create(this.configService);
|
|
28
|
+
this.uploadStrategy = new upload_strategy_1.CloudinaryUploadStrategy(this.cloudinary);
|
|
29
|
+
this.deleteStrategy = new delete_strategy_1.CloudinaryDeleteStrategy(this.cloudinary);
|
|
30
|
+
this.observers.push(new upload_observer_1.LoggingObserver());
|
|
31
|
+
}
|
|
32
|
+
notifyUploadSuccess(result) {
|
|
33
|
+
this.observers.forEach((observer) => observer.onUploadSuccess(result));
|
|
34
|
+
}
|
|
35
|
+
notifyUploadError(error) {
|
|
36
|
+
this.observers.forEach((observer) => observer.onUploadError(error));
|
|
37
|
+
}
|
|
38
|
+
notifyDeleteSuccess(result) {
|
|
39
|
+
this.observers.forEach((observer) => observer.onDeleteSuccess(result));
|
|
40
|
+
}
|
|
41
|
+
notifyDeleteError(error) {
|
|
42
|
+
this.observers.forEach((observer) => observer.onDeleteError(error));
|
|
43
|
+
}
|
|
44
|
+
async uploadImageCore(fileData, dirUpload = 'avatars') {
|
|
45
|
+
const { stream, filename } = fileData;
|
|
46
|
+
const options = {
|
|
47
|
+
folder: dirUpload,
|
|
48
|
+
public_id: `${Date.now()}-${filename}`,
|
|
49
|
+
resource_type: 'auto',
|
|
50
|
+
};
|
|
51
|
+
const command = new uploadImage_command_1.UploadImageCommand(this.uploadStrategy, stream, options);
|
|
52
|
+
try {
|
|
53
|
+
const result = await command.execute();
|
|
54
|
+
if (!result?.secure_url) {
|
|
55
|
+
throw new common_1.HttpException('Cloudinary response invalid', common_1.HttpStatus.BAD_REQUEST);
|
|
56
|
+
}
|
|
57
|
+
this.notifyUploadSuccess(result);
|
|
58
|
+
return result.secure_url;
|
|
59
|
+
}
|
|
60
|
+
catch (error) {
|
|
61
|
+
this.notifyUploadError(error);
|
|
62
|
+
throw new common_1.HttpException('Upload failed', common_1.HttpStatus.BAD_REQUEST);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
async uploadVideoCore(fileData, dirUpload = 'videos') {
|
|
66
|
+
const { stream, filename } = fileData;
|
|
67
|
+
const duration = await this.getVideoDuration(stream);
|
|
68
|
+
if (duration > 60) {
|
|
69
|
+
throw new common_1.HttpException('Video must be 1 minute or less', common_1.HttpStatus.BAD_REQUEST);
|
|
70
|
+
}
|
|
71
|
+
const options = {
|
|
72
|
+
folder: dirUpload,
|
|
73
|
+
public_id: `${Date.now()}-${filename.split('.')[0]}`,
|
|
74
|
+
resource_type: 'video',
|
|
75
|
+
chunk_size: 6000000,
|
|
76
|
+
};
|
|
77
|
+
const command = new uploadVideo_command_1.UploadVideoCommand(this.uploadStrategy, stream, options);
|
|
78
|
+
try {
|
|
79
|
+
const result = await command.execute();
|
|
80
|
+
if (!result?.secure_url) {
|
|
81
|
+
throw new common_1.HttpException('Cloudinary response invalid', common_1.HttpStatus.BAD_REQUEST);
|
|
82
|
+
}
|
|
83
|
+
this.notifyUploadSuccess(result);
|
|
84
|
+
return result.secure_url;
|
|
85
|
+
}
|
|
86
|
+
catch (error) {
|
|
87
|
+
this.notifyUploadError(error);
|
|
88
|
+
throw new common_1.HttpException('Video upload failed', common_1.HttpStatus.BAD_REQUEST);
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
async uploadImage(createImageInput, dirUpload = 'avatars') {
|
|
92
|
+
if (!createImageInput.image)
|
|
93
|
+
return null;
|
|
94
|
+
const uploadedFile = await createImageInput.image;
|
|
95
|
+
if (!uploadedFile || !uploadedFile.createReadStream) {
|
|
96
|
+
throw new common_1.HttpException('Invalid image file', common_1.HttpStatus.BAD_REQUEST);
|
|
97
|
+
}
|
|
98
|
+
const { createReadStream, filename } = uploadedFile;
|
|
99
|
+
const stream = createReadStream();
|
|
100
|
+
return this.uploadImageCore({ stream, filename }, dirUpload);
|
|
101
|
+
}
|
|
102
|
+
async uploadVideo(createVideoInput, dirUpload = 'videos') {
|
|
103
|
+
if (!createVideoInput.video) {
|
|
104
|
+
throw new common_1.HttpException('Video file is required', common_1.HttpStatus.BAD_REQUEST);
|
|
105
|
+
}
|
|
106
|
+
const uploadedFile = await createVideoInput.video;
|
|
107
|
+
if (!uploadedFile || !uploadedFile.createReadStream) {
|
|
108
|
+
throw new common_1.HttpException('Invalid video file', common_1.HttpStatus.BAD_REQUEST);
|
|
109
|
+
}
|
|
110
|
+
const { createReadStream, filename } = uploadedFile;
|
|
111
|
+
const stream = createReadStream();
|
|
112
|
+
return this.uploadVideoCore({ stream, filename }, dirUpload);
|
|
113
|
+
}
|
|
114
|
+
async deleteImage(imageUrl) {
|
|
115
|
+
const publicId = imageUrl?.split('/').pop()?.split('.')[0];
|
|
116
|
+
if (!publicId) {
|
|
117
|
+
throw new common_1.HttpException('Invalid image URL', common_1.HttpStatus.BAD_REQUEST);
|
|
118
|
+
}
|
|
119
|
+
const command = new deleteImage_command_1.DeleteImageCommand(this.deleteStrategy, publicId);
|
|
120
|
+
try {
|
|
121
|
+
const result = await command.execute();
|
|
122
|
+
if (result.result !== 'ok' && result.result !== 'not found') {
|
|
123
|
+
throw new common_1.HttpException(`Failed to delete image. Reason: ${result.result}`, common_1.HttpStatus.BAD_REQUEST);
|
|
124
|
+
}
|
|
125
|
+
this.notifyDeleteSuccess(result);
|
|
126
|
+
}
|
|
127
|
+
catch (error) {
|
|
128
|
+
this.notifyDeleteError(error);
|
|
129
|
+
throw new common_1.HttpException('Delete failed', common_1.HttpStatus.BAD_REQUEST);
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
async deleteVideo(videoUrl) {
|
|
133
|
+
const publicId = videoUrl?.split('/').pop()?.split('.')[0];
|
|
134
|
+
if (!publicId) {
|
|
135
|
+
throw new common_1.HttpException('Invalid video URL', common_1.HttpStatus.BAD_REQUEST);
|
|
136
|
+
}
|
|
137
|
+
const command = new deleteVideo_command_1.DeleteVideoCommand(this.deleteStrategy, publicId, 'video');
|
|
138
|
+
try {
|
|
139
|
+
const result = await command.execute();
|
|
140
|
+
if (result.result !== 'ok' && result.result !== 'not found') {
|
|
141
|
+
throw new common_1.HttpException(`Failed to delete video. Reason: ${result.result}`, common_1.HttpStatus.BAD_REQUEST);
|
|
142
|
+
}
|
|
143
|
+
this.notifyDeleteSuccess(result);
|
|
144
|
+
}
|
|
145
|
+
catch (error) {
|
|
146
|
+
this.notifyDeleteError(error);
|
|
147
|
+
throw new common_1.HttpException('Video delete failed', common_1.HttpStatus.BAD_REQUEST);
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
async getVideoDuration(stream) {
|
|
151
|
+
return new Promise((resolve, reject) => {
|
|
152
|
+
resolve(60);
|
|
153
|
+
});
|
|
154
|
+
}
|
|
155
|
+
};
|
|
156
|
+
exports.UploadService = UploadService;
|
|
157
|
+
exports.UploadService = UploadService = __decorate([
|
|
158
|
+
(0, common_1.Injectable)(),
|
|
159
|
+
__metadata("design:paramtypes", [config_1.ConfigService])
|
|
160
|
+
], UploadService);
|
|
161
|
+
//# sourceMappingURL=upload.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"upload.service.js","sourceRoot":"","sources":["../../../../../upload/src/upload/upload.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function CapitalTextField(text: string, min?: number, max?: number, nullable?: boolean, isGraphql?: boolean): PropertyDecorator;
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.CapitalTextField = CapitalTextField;
|
|
4
|
+
const common_1 = require("@nestjs/common");
|
|
5
|
+
const graphql_1 = require("@nestjs/graphql");
|
|
6
|
+
const class_validator_1 = require("class-validator");
|
|
7
|
+
const class_transformer_1 = require("class-transformer");
|
|
8
|
+
const WordsTransform_decorator_1 = require("../utility/WordsTransform.decorator");
|
|
9
|
+
const SQL_INJECTION_REGEX_1 = require("../regex/SQL_INJECTION_REGEX");
|
|
10
|
+
function CapitalTextField(text, min = 1, max = 255, nullable = false, isGraphql = true) {
|
|
11
|
+
const message = `${text} must be between ${min} and ${max} characters`;
|
|
12
|
+
const graphQLDecorators = isGraphql
|
|
13
|
+
? [(0, graphql_1.Field)(() => String, { nullable })]
|
|
14
|
+
: [];
|
|
15
|
+
return (0, common_1.applyDecorators)(...graphQLDecorators, (0, class_validator_1.IsOptional)(), (0, class_validator_1.IsString)({ message }), (0, class_validator_1.Matches)(/^[A-Za-z\s]+$/, {
|
|
16
|
+
message: `${text} must contain only letters (no numbers or symbols)`,
|
|
17
|
+
}), (0, class_validator_1.Length)(min, max, {
|
|
18
|
+
message,
|
|
19
|
+
}), (0, class_validator_1.Matches)(SQL_INJECTION_REGEX_1.SQL_INJECTION_REGEX, {
|
|
20
|
+
message: `${text} contains forbidden SQL keywords or patterns`,
|
|
21
|
+
}), (0, class_transformer_1.Transform)(({ value }) => (0, WordsTransform_decorator_1.CapitalizeWords)(value)));
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=CapitalField.decorator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CapitalField.decorator.js","sourceRoot":"","sources":["../../../../../validation/src/decorators/CapitalField.decorator.ts"],"names":[],"mappings":";;AAoBA,4CAoCC;AAxDD,2CAAiD;AACjD,6CAAwC;AACxC,qDAAwE;AACxE,yDAA8C;AAE9C,kFAAsE;AACtE,sEAAmE;AAcnE,SAAgB,gBAAgB,CAC9B,IAAY,EACZ,GAAG,GAAG,CAAC,EACP,GAAG,GAAG,GAAG,EACT,WAAoB,KAAK,EACzB,YAAqB,IAAI;IAEzB,MAAM,OAAO,GAAG,GAAG,IAAI,oBAAoB,GAAG,QAAQ,GAAG,aAAa,CAAC;IAGvE,MAAM,iBAAiB,GAAG,SAAS;QACjC,CAAC,CAAC,CAAC,IAAA,eAAK,EAAC,GAAG,EAAE,CAAC,MAAM,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC;QACrC,CAAC,CAAC,EAAE,CAAC;IAEP,OAAO,IAAA,wBAAe,EAEpB,GAAG,iBAAiB,EAGpB,IAAA,4BAAU,GAAE,EACZ,IAAA,0BAAQ,EAAC,EAAE,OAAO,EAAE,CAAC,EACrB,IAAA,yBAAO,EAAC,eAAe,EAAE;QACvB,OAAO,EAAE,GAAG,IAAI,oDAAoD;KACrE,CAAC,EACF,IAAA,wBAAM,EAAC,GAAG,EAAE,GAAG,EAAE;QACf,OAAO;KACR,CAAC,EACF,IAAA,yBAAO,EACL,yCAAmB,EACnB;QACE,OAAO,EAAE,GAAG,IAAI,8CAA8C;KAC/D,CACF,EAED,IAAA,6BAAS,EAAC,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,IAAA,0CAAe,EAAC,KAAK,CAAC,CAAC,CACjD,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function EmailField(nullable?: boolean, isGraphql?: boolean): PropertyDecorator;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.EmailField = EmailField;
|
|
4
|
+
const common_1 = require("@nestjs/common");
|
|
5
|
+
const graphql_1 = require("@nestjs/graphql");
|
|
6
|
+
const class_transformer_1 = require("class-transformer");
|
|
7
|
+
const class_validator_1 = require("class-validator");
|
|
8
|
+
const SQL_INJECTION_REGEX_1 = require("../regex/SQL_INJECTION_REGEX");
|
|
9
|
+
function EmailField(nullable = false, isGraphql = true) {
|
|
10
|
+
const graphQLDecorators = isGraphql
|
|
11
|
+
? [(0, graphql_1.Field)(() => String, { nullable })]
|
|
12
|
+
: [];
|
|
13
|
+
return (0, common_1.applyDecorators)(...graphQLDecorators, (0, class_validator_1.IsOptional)(), (0, class_validator_1.IsEmail)({}, { message: 'Must be a valid email address' }), (0, class_validator_1.Matches)(SQL_INJECTION_REGEX_1.SQL_INJECTION_REGEX, {
|
|
14
|
+
message: 'Email contains forbidden SQL keywords or patterns',
|
|
15
|
+
}), (0, class_transformer_1.Transform)(({ value }) => value?.toLowerCase()));
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=EmailField.decorator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EmailField.decorator.js","sourceRoot":"","sources":["../../../../../validation/src/decorators/EmailField.decorator.ts"],"names":[],"mappings":";;AAmBA,gCA8BC;AAjDD,2CAAiD;AACjD,6CAAwC;AACxC,yDAA8C;AAC9C,qDAIyB;AACzB,sEAAmE;AAWnE,SAAgB,UAAU,CACxB,WAAoB,KAAK,EACzB,YAAqB,IAAI;IAIzB,MAAM,iBAAiB,GAAG,SAAS;QACjC,CAAC,CAAC,CAAC,IAAA,eAAK,EAAC,GAAG,EAAE,CAAC,MAAM,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC;QACrC,CAAC,CAAC,EAAE,CAAC;IAEP,OAAO,IAAA,wBAAe,EAEpB,GAAG,iBAAiB,EAGpB,IAAA,4BAAU,GAAE,EAEZ,IAAA,yBAAO,EAAC,EAAE,EAAE,EAAE,OAAO,EAAE,+BAA+B,EAAE,CAAC,EAGzD,IAAA,yBAAO,EACL,yCAAmB,EACnB;QACE,OAAO,EAAE,mDAAmD;KAC7D,CACF,EAGD,IAAA,6BAAS,EAAC,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,KAAK,EAAE,WAAW,EAAE,CAAC,CAC/C,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function IdField(id: string, length?: number, nullable?: boolean, isGraphql?: boolean): PropertyDecorator;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.IdField = IdField;
|
|
4
|
+
const common_1 = require("@nestjs/common");
|
|
5
|
+
const graphql_1 = require("@nestjs/graphql");
|
|
6
|
+
const class_validator_1 = require("class-validator");
|
|
7
|
+
const SQL_INJECTION_REGEX_1 = require("../regex/SQL_INJECTION_REGEX");
|
|
8
|
+
function IdField(id, length = 26, nullable = false, isGraphql = true) {
|
|
9
|
+
const message = `${id} ID must be exactly ${length} characters`;
|
|
10
|
+
const graphQLDecorators = isGraphql
|
|
11
|
+
? [(0, graphql_1.Field)(() => String, { nullable })]
|
|
12
|
+
: [];
|
|
13
|
+
return (0, common_1.applyDecorators)(...graphQLDecorators, (0, class_validator_1.IsOptional)(), (0, class_validator_1.IsString)({ message }), (0, class_validator_1.Length)(length, length, {
|
|
14
|
+
message,
|
|
15
|
+
}), (0, class_validator_1.Matches)(SQL_INJECTION_REGEX_1.SQL_INJECTION_REGEX, {
|
|
16
|
+
message: `${id} Id contains forbidden SQL keywords or patterns`,
|
|
17
|
+
}));
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=IdValidate.decorator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"IdValidate.decorator.js","sourceRoot":"","sources":["../../../../../validation/src/decorators/IdValidate.decorator.ts"],"names":[],"mappings":";;AAcA,0BAmCC;AAjDD,2CAAiD;AACjD,6CAAwC;AACxC,qDAAwE;AACxE,sEAAmE;AAWnE,SAAgB,OAAO,CACrB,EAAU,EACV,SAAiB,EAAE,EACnB,WAAoB,KAAK,EACzB,YAAqB,IAAI;IAEzB,MAAM,OAAO,GAAG,GAAG,EAAE,uBAAuB,MAAM,aAAa,CAAC;IAGhE,MAAM,iBAAiB,GAAG,SAAS;QACjC,CAAC,CAAC,CAAC,IAAA,eAAK,EAAC,GAAG,EAAE,CAAC,MAAM,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC;QACrC,CAAC,CAAC,EAAE,CAAC;IAGP,OAAO,IAAA,wBAAe,EAEpB,GAAG,iBAAiB,EAGpB,IAAA,4BAAU,GAAE,EACZ,IAAA,0BAAQ,EAAC,EAAE,OAAO,EAAE,CAAC,EAGrB,IAAA,wBAAM,EAAC,MAAM,EAAE,MAAM,EAAE;QACrB,OAAO;KACR,CAAC,EAGF,IAAA,yBAAO,EACL,yCAAmB,EACnB;QACE,OAAO,EAAE,GAAG,EAAE,iDAAiD;KAChE,CACF,CACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.password = password;
|
|
4
|
+
exports.PasswordField = PasswordField;
|
|
5
|
+
const class_validator_1 = require("class-validator");
|
|
6
|
+
const common_1 = require("@nestjs/common");
|
|
7
|
+
const graphql_1 = require("@nestjs/graphql");
|
|
8
|
+
const SQL_INJECTION_REGEX_1 = require("../regex/SQL_INJECTION_REGEX");
|
|
9
|
+
function password(message = 'Password must contain uppercase, lowercase, number and special character') {
|
|
10
|
+
return (0, class_validator_1.Matches)(/(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[\W_])/, { message });
|
|
11
|
+
}
|
|
12
|
+
function PasswordField(min = 8, max = 16, nullable = false, isGraphql = true) {
|
|
13
|
+
const graphQLDecorators = isGraphql
|
|
14
|
+
? [(0, graphql_1.Field)(() => String, { nullable })]
|
|
15
|
+
: [];
|
|
16
|
+
return (0, common_1.applyDecorators)(...graphQLDecorators, (0, class_validator_1.IsString)(), (0, class_validator_1.Length)(min, max, { message: `Password must be between ${min} and ${max} characters` }), password(), (0, class_validator_1.Matches)(SQL_INJECTION_REGEX_1.SQL_INJECTION_REGEX, {
|
|
17
|
+
message: 'Password contains forbidden SQL keywords or patterns',
|
|
18
|
+
}));
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=PasswordField.decorator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PasswordField.decorator.js","sourceRoot":"","sources":["../../../../../validation/src/decorators/PasswordField.decorator.ts"],"names":[],"mappings":";;AAWA,4BAKC;AAWD,sCA4BC;AAvDD,qDAA4D;AAC5D,2CAAiD;AACjD,6CAAwC;AACxC,sEAAmE;AAQnE,SAAgB,QAAQ,CACtB,OAAO,GAAG,0EAA0E;IAGpF,OAAO,IAAA,yBAAO,EAAC,2CAA2C,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;AAC3E,CAAC;AAWD,SAAgB,aAAa,CACzB,GAAG,GAAG,CAAC,EACP,GAAG,GAAG,EAAE,EACR,WAAoB,KAAK,EACzB,YAAqB,IAAI;IAI3B,MAAM,iBAAiB,GAAG,SAAS;QACjC,CAAC,CAAC,CAAC,IAAA,eAAK,EAAC,GAAG,EAAE,CAAC,MAAM,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC;QACrC,CAAC,CAAC,EAAE,CAAC;IAEP,OAAO,IAAA,wBAAe,EAEpB,GAAG,iBAAiB,EAGpB,IAAA,0BAAQ,GAAE,EACV,IAAA,wBAAM,EAAC,GAAG,EAAE,GAAG,EAAE,EAAE,OAAO,EAAE,4BAA4B,GAAG,QAAQ,GAAG,aAAa,EAAE,CAAC,EACtF,QAAQ,EAAE,EAEV,IAAA,yBAAO,EACH,yCAAmB,EACnB;QACK,OAAO,EAAE,sDAAsD;KACnE,CACJ,CACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ValidatePhoneNumber = ValidatePhoneNumber;
|
|
4
|
+
exports.PhoneField = PhoneField;
|
|
5
|
+
const common_1 = require("@nestjs/common");
|
|
6
|
+
const graphql_1 = require("@nestjs/graphql");
|
|
7
|
+
const class_validator_1 = require("class-validator");
|
|
8
|
+
const class_transformer_1 = require("class-transformer");
|
|
9
|
+
const SQL_INJECTION_REGEX_1 = require("../regex/SQL_INJECTION_REGEX");
|
|
10
|
+
function ValidatePhoneNumber() {
|
|
11
|
+
return (0, class_transformer_1.Transform)(({ value }) => typeof value === 'string' ? value.replace(/[^\d+]/g, '') : value);
|
|
12
|
+
}
|
|
13
|
+
function PhoneField(format = 'EG', nullable = false, isGraphql = true) {
|
|
14
|
+
const graphQLDecorators = isGraphql ? [(0, graphql_1.Field)(() => String, { nullable })] : [];
|
|
15
|
+
return (0, common_1.applyDecorators)(...graphQLDecorators, (0, class_validator_1.IsOptional)(), (0, class_transformer_1.Transform)(({ value }) => typeof value === 'string' ? value.replace(/[^\d+]/g, '') : value), (0, class_validator_1.Matches)(SQL_INJECTION_REGEX_1.SQL_INJECTION_REGEX, {
|
|
16
|
+
message: 'Phone contains forbidden SQL keywords or patterns',
|
|
17
|
+
}), (0, class_validator_1.IsPhoneNumber)(format, {
|
|
18
|
+
message: `Phone number must be a valid ${format} number`,
|
|
19
|
+
}));
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=PhoneField.decorator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PhoneField.decorator.js","sourceRoot":"","sources":["../../../../../validation/src/decorators/PhoneField.decorator.ts"],"names":[],"mappings":";;AAUA,kDAIC;AAWD,gCAwBC;AAjDD,2CAAiD;AACjD,6CAAwC;AACxC,qDAAqE;AACrE,yDAA8C;AAC9C,sEAAmE;AAMnE,SAAgB,mBAAmB;IACjC,OAAO,IAAA,6BAAS,EAAC,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAC7B,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CACjE,CAAC;AACJ,CAAC;AAWD,SAAgB,UAAU,CACxB,SAAsB,IAAI,EAC1B,WAAoB,KAAK,EACzB,YAAqB,IAAI;IAEzB,MAAM,iBAAiB,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,IAAA,eAAK,EAAC,GAAG,EAAE,CAAC,MAAM,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAE/E,OAAO,IAAA,wBAAe,EACpB,GAAG,iBAAiB,EAEpB,IAAA,4BAAU,GAAE,EAEZ,IAAA,6BAAS,EAAC,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CACtB,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CACjE,EAED,IAAA,yBAAO,EAAC,yCAAmB,EAAE;QAC3B,OAAO,EAAE,mDAAmD;KAC7D,CAAC,EAEF,IAAA,+BAAa,EAAC,MAAM,EAAE;QACpB,OAAO,EAAE,gCAAgC,MAAM,SAAS;KACzD,CAAC,CACH,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function TextField(text: string, min?: number, max?: number, nullable?: boolean, isGraphql?: boolean): PropertyDecorator;
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.TextField = TextField;
|
|
4
|
+
const common_1 = require("@nestjs/common");
|
|
5
|
+
const graphql_1 = require("@nestjs/graphql");
|
|
6
|
+
const class_validator_1 = require("class-validator");
|
|
7
|
+
const class_transformer_1 = require("class-transformer");
|
|
8
|
+
const WordsTransform_decorator_1 = require("../utility/WordsTransform.decorator");
|
|
9
|
+
const SQL_INJECTION_REGEX_1 = require("../regex/SQL_INJECTION_REGEX");
|
|
10
|
+
function TextField(text, min = 1, max = 255, nullable = false, isGraphql = true) {
|
|
11
|
+
const message = `${text} must be between ${min} and ${max} characters`;
|
|
12
|
+
const graphQLDecorators = isGraphql
|
|
13
|
+
? [(0, graphql_1.Field)(() => String, { nullable })]
|
|
14
|
+
: [];
|
|
15
|
+
return (0, common_1.applyDecorators)(...graphQLDecorators, (0, class_validator_1.IsOptional)(), (0, class_validator_1.IsString)({ message }), (0, class_validator_1.Matches)(/^[A-Za-z0-9\s.,-]+$/, {
|
|
16
|
+
message: `${text} must contain only letters, numbers, spaces, or basic symbols (.,-)`,
|
|
17
|
+
}), (0, class_validator_1.Length)(min, max, {
|
|
18
|
+
message,
|
|
19
|
+
}), (0, class_validator_1.Matches)(SQL_INJECTION_REGEX_1.SQL_INJECTION_REGEX, {
|
|
20
|
+
message: `${text} contains forbidden SQL keywords or patterns`,
|
|
21
|
+
}), (0, class_transformer_1.Transform)(({ value }) => (0, WordsTransform_decorator_1.LowwerWords)(value)));
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=TextField.decorator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TextField.decorator.js","sourceRoot":"","sources":["../../../../../validation/src/decorators/TextField.decorator.ts"],"names":[],"mappings":";;AAkBA,8BAoCC;AAtDD,2CAAiD;AACjD,6CAAwC;AACxC,qDAAwE;AACxE,yDAA8C;AAE9C,kFAAkE;AAClE,sEAAmE;AAYnE,SAAgB,SAAS,CACvB,IAAY,EACZ,GAAG,GAAG,CAAC,EACP,GAAG,GAAG,GAAG,EACT,WAAoB,KAAK,EACzB,YAAqB,IAAI;IAEzB,MAAM,OAAO,GAAG,GAAG,IAAI,oBAAoB,GAAG,QAAQ,GAAG,aAAa,CAAC;IAGvE,MAAM,iBAAiB,GAAG,SAAS;QACjC,CAAC,CAAC,CAAC,IAAA,eAAK,EAAC,GAAG,EAAE,CAAC,MAAM,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC;QACrC,CAAC,CAAC,EAAE,CAAC;IAEP,OAAO,IAAA,wBAAe,EAEpB,GAAG,iBAAiB,EAGpB,IAAA,4BAAU,GAAE,EACZ,IAAA,0BAAQ,EAAC,EAAE,OAAO,EAAE,CAAC,EACrB,IAAA,yBAAO,EAAC,qBAAqB,EAAE;QAC7B,OAAO,EAAE,GAAG,IAAI,qEAAqE;KACtF,CAAC,EACF,IAAA,wBAAM,EAAC,GAAG,EAAE,GAAG,EAAE;QACf,OAAO;KACR,CAAC,EACF,IAAA,yBAAO,EACL,yCAAmB,EACnB;QACE,OAAO,EAAE,GAAG,IAAI,8CAA8C;KAC/D,CACF,EAED,IAAA,6BAAS,EAAC,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,IAAA,sCAAW,EAAC,KAAK,CAAC,CAAC,CAC7C,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ValidateNationalId = ValidateNationalId;
|
|
4
|
+
exports.NationalIdField = NationalIdField;
|
|
5
|
+
const common_1 = require("@nestjs/common");
|
|
6
|
+
const graphql_1 = require("@nestjs/graphql");
|
|
7
|
+
const class_validator_1 = require("class-validator");
|
|
8
|
+
const class_transformer_1 = require("class-transformer");
|
|
9
|
+
function ValidateNationalId() {
|
|
10
|
+
return (0, class_transformer_1.Transform)(({ value }) => typeof value === 'string' ? value.replace(/\D/g, '') : value);
|
|
11
|
+
}
|
|
12
|
+
function NationalIdField(nullable = false, isGraphql = true) {
|
|
13
|
+
const graphQLDecorators = isGraphql
|
|
14
|
+
? [(0, graphql_1.Field)(() => String, { nullable })]
|
|
15
|
+
: [];
|
|
16
|
+
return (0, common_1.applyDecorators)(...graphQLDecorators, (0, class_validator_1.IsOptional)(), (0, class_transformer_1.Transform)(({ value }) => typeof value === 'string' ? value.replace(/\D/g, '') : value), (0, class_validator_1.Matches)(/^\d{14}$/, {
|
|
17
|
+
message: 'National ID must contain exactly 14 digits',
|
|
18
|
+
}), (0, class_validator_1.Matches)(/^[23]\d{13}$/, {
|
|
19
|
+
message: 'National ID must start with 2 or 3',
|
|
20
|
+
}), (0, class_validator_1.Length)(14, 14, {
|
|
21
|
+
message: 'National ID must be exactly 14 digits',
|
|
22
|
+
}));
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=nationalId.decorator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nationalId.decorator.js","sourceRoot":"","sources":["../../../../../validation/src/decorators/nationalId.decorator.ts"],"names":[],"mappings":";;AAQA,gDAIC;AASD,0CAgCC;AArDD,2CAAiD;AACjD,6CAAwC;AACxC,qDAA8D;AAC9D,yDAA8C;AAK9C,SAAgB,kBAAkB;IAChC,OAAO,IAAA,6BAAS,EAAC,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAC7B,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAC7D,CAAC;AACJ,CAAC;AASD,SAAgB,eAAe,CAC3B,WAAoB,KAAK,EACzB,YAAqB,IAAI;IAI3B,MAAM,iBAAiB,GAAG,SAAS;QACjC,CAAC,CAAC,CAAC,IAAA,eAAK,EAAC,GAAG,EAAE,CAAC,MAAM,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC;QACrC,CAAC,CAAC,EAAE,CAAC;IAEP,OAAO,IAAA,wBAAe,EAEpB,GAAG,iBAAiB,EAGpB,IAAA,4BAAU,GAAE,EAEZ,IAAA,6BAAS,EAAC,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,EAGtF,IAAA,yBAAO,EAAC,UAAU,EAAE;QAClB,OAAO,EAAE,4CAA4C;KACtD,CAAC,EAEF,IAAA,yBAAO,EAAC,cAAc,EAAE;QACtB,OAAO,EAAE,oCAAoC;KAC9C,CAAC,EAEF,IAAA,wBAAM,EAAC,EAAE,EAAE,EAAE,EAAE;QACb,OAAO,EAAE,uCAAuC;KACjD,CAAC,CACH,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export * from './decorators/IdValidate.decorator';
|
|
2
|
+
export * from './decorators/TextField.decorator';
|
|
3
|
+
export * from './decorators/CapitalField.decorator';
|
|
4
|
+
export * from './decorators/EmailField.decorator';
|
|
5
|
+
export * from './decorators/PasswordField.decorator';
|
|
6
|
+
export * from './decorators/PhoneField.decorator';
|
|
7
|
+
export * from './decorators/nationalId.decorator';
|
|
8
|
+
export * from './utility/WordsTransform.decorator';
|
|
9
|
+
export * from './decorators/nationalId.decorator';
|
|
10
|
+
export * from './decorators/PhoneField.decorator';
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./decorators/IdValidate.decorator"), exports);
|
|
18
|
+
__exportStar(require("./decorators/TextField.decorator"), exports);
|
|
19
|
+
__exportStar(require("./decorators/CapitalField.decorator"), exports);
|
|
20
|
+
__exportStar(require("./decorators/EmailField.decorator"), exports);
|
|
21
|
+
__exportStar(require("./decorators/PasswordField.decorator"), exports);
|
|
22
|
+
__exportStar(require("./decorators/PhoneField.decorator"), exports);
|
|
23
|
+
__exportStar(require("./decorators/nationalId.decorator"), exports);
|
|
24
|
+
__exportStar(require("./utility/WordsTransform.decorator"), exports);
|
|
25
|
+
__exportStar(require("./decorators/nationalId.decorator"), exports);
|
|
26
|
+
__exportStar(require("./decorators/PhoneField.decorator"), exports);
|
|
27
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../validation/src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AACA,oEAAkD;AAClD,mEAAiD;AACjD,sEAAoD;AACpD,oEAAkD;AAClD,uEAAqD;AACrD,oEAAkD;AAClD,oEAAkD;AAIlD,qEAAmD;AAGnD,oEAAkD;AAClD,oEAAkD"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const SQL_INJECTION_REGEX: RegExp;
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SQL_INJECTION_REGEX = void 0;
|
|
4
|
+
exports.SQL_INJECTION_REGEX = /^(?!.*(\b(SELECT|INSERT|DELETE|UPDATE|DROP|UNION|EXEC|TRUNCATE|ALTER|CREATE)\b|--|;)).*$/i;
|
|
5
|
+
//# sourceMappingURL=SQL_INJECTION_REGEX.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SQL_INJECTION_REGEX.js","sourceRoot":"","sources":["../../../../../validation/src/regex/SQL_INJECTION_REGEX.ts"],"names":[],"mappings":";;;AAAa,QAAA,mBAAmB,GAAG,2FAA2F,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.LowwerWords = LowwerWords;
|
|
4
|
+
exports.CapitalizeWords = CapitalizeWords;
|
|
5
|
+
function LowwerWords(value) {
|
|
6
|
+
if (!value || typeof value !== 'string')
|
|
7
|
+
return value;
|
|
8
|
+
return value.toLowerCase();
|
|
9
|
+
}
|
|
10
|
+
function CapitalizeWords(value) {
|
|
11
|
+
if (!value || typeof value !== 'string')
|
|
12
|
+
return value;
|
|
13
|
+
return value
|
|
14
|
+
.toLowerCase()
|
|
15
|
+
.split(' ')
|
|
16
|
+
.map((word) => word.length > 0 ? word.charAt(0).toUpperCase() + word.slice(1) : '')
|
|
17
|
+
.join(' ');
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=WordsTransform.decorator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"WordsTransform.decorator.js","sourceRoot":"","sources":["../../../../../validation/src/utility/WordsTransform.decorator.ts"],"names":[],"mappings":";;AAKA,kCAIC;AAOD,0CAUC;AArBD,SAAgB,WAAW,CAAC,KAAa;IACvC,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IAEtD,OAAO,KAAK,CAAC,WAAW,EAAE,CAAC;AAC7B,CAAC;AAOD,SAAgB,eAAe,CAAC,KAAa;IAC3C,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IAEtD,OAAO,KAAK;SACT,WAAW,EAAE;SACb,KAAK,CAAC,GAAG,CAAC;SACV,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CACZ,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CACpE;SACA,IAAI,CAAC,GAAG,CAAC,CAAC;AACf,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,15 +1,19 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bts-soft/core",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.3.9",
|
|
4
4
|
"author": "Omar Sabry",
|
|
5
5
|
"description": "All bts-soft packages",
|
|
6
6
|
"main": "dist/index.js",
|
|
7
7
|
"types": "dist/index.d.ts",
|
|
8
8
|
"license": "MIT",
|
|
9
|
+
"workspaces": [
|
|
10
|
+
"packages/*"
|
|
11
|
+
],
|
|
9
12
|
"dependencies": {
|
|
13
|
+
"@bts-soft/cache": "^1.0.1",
|
|
10
14
|
"@bts-soft/mail-queue": "^1.1.5",
|
|
11
|
-
"@bts-soft/upload": "^1.1.
|
|
12
|
-
"@bts-soft/validation":"^1.0.
|
|
15
|
+
"@bts-soft/upload": "^1.1.5",
|
|
16
|
+
"@bts-soft/validation": "^1.0.1"
|
|
13
17
|
},
|
|
14
18
|
"peerDependencies": {
|
|
15
19
|
"@nestjs/common": "^10.0.0",
|
|
@@ -17,5 +21,8 @@
|
|
|
17
21
|
},
|
|
18
22
|
"scripts": {
|
|
19
23
|
"build": "tsc -p tsconfig.json"
|
|
24
|
+
},
|
|
25
|
+
"devDependencies": {
|
|
26
|
+
"@types/node": "^24.7.1"
|
|
20
27
|
}
|
|
21
28
|
}
|