@edirect/rate-limit-module 11.0.62 → 11.0.63

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 (82) hide show
  1. package/dist/README.md +584 -0
  2. package/dist/package.json +41 -0
  3. package/dist/src/decorators/rate-limiting-rule.decorator.d.ts +10 -0
  4. package/dist/src/decorators/rate-limiting-rule.decorator.d.ts.map +1 -0
  5. package/dist/src/decorators/rate-limiting-rule.decorator.js +7 -0
  6. package/dist/src/guards/rate-limiting.guard.d.ts +21 -0
  7. package/dist/src/guards/rate-limiting.guard.d.ts.map +1 -0
  8. package/dist/src/guards/rate-limiting.guard.js +248 -0
  9. package/dist/src/index.d.ts +11 -0
  10. package/dist/src/index.d.ts.map +1 -0
  11. package/dist/src/index.js +14 -0
  12. package/dist/src/main.d.ts +2 -0
  13. package/dist/src/main.d.ts.map +1 -0
  14. package/dist/src/main.js +9 -0
  15. package/dist/src/object.utils.d.ts +3 -0
  16. package/dist/src/object.utils.d.ts.map +1 -0
  17. package/dist/src/object.utils.js +38 -0
  18. package/dist/src/rate-limiting.module.d.ts +6 -0
  19. package/dist/src/rate-limiting.module.d.ts.map +1 -0
  20. package/dist/src/rate-limiting.module.js +26 -0
  21. package/dist/src/rules/dto/pagination.dto.d.ts +6 -0
  22. package/dist/src/rules/dto/pagination.dto.d.ts.map +1 -0
  23. package/dist/src/rules/dto/pagination.dto.js +42 -0
  24. package/dist/src/rules/dto/rule.dto.d.ts +24 -0
  25. package/dist/src/rules/dto/rule.dto.d.ts.map +1 -0
  26. package/dist/src/rules/dto/rule.dto.js +198 -0
  27. package/dist/src/rules/interface/pagination.interface.d.ts +7 -0
  28. package/dist/src/rules/interface/pagination.interface.d.ts.map +1 -0
  29. package/dist/src/rules/interface/pagination.interface.js +2 -0
  30. package/dist/src/rules/interface/rule.interface.d.ts +29 -0
  31. package/dist/src/rules/interface/rule.interface.d.ts.map +1 -0
  32. package/dist/src/rules/interface/rule.interface.js +2 -0
  33. package/dist/src/rules/rule.controller.d.ts +14 -0
  34. package/dist/src/rules/rule.controller.d.ts.map +1 -0
  35. package/dist/src/rules/rule.controller.js +87 -0
  36. package/dist/src/rules/rule.module.d.ts +5 -0
  37. package/dist/src/rules/rule.module.d.ts.map +1 -0
  38. package/dist/src/rules/rule.module.js +36 -0
  39. package/dist/src/rules/rule.repository.d.ts +15 -0
  40. package/dist/src/rules/rule.repository.d.ts.map +1 -0
  41. package/dist/src/rules/rule.repository.js +79 -0
  42. package/dist/src/rules/rule.schema.d.ts +166 -0
  43. package/dist/src/rules/rule.schema.d.ts.map +1 -0
  44. package/dist/src/rules/rule.schema.js +150 -0
  45. package/dist/src/rules/rule.service.d.ts +26 -0
  46. package/dist/src/rules/rule.service.d.ts.map +1 -0
  47. package/dist/src/rules/rule.service.js +204 -0
  48. package/dist/src/shared/cache/cache.service.d.ts +10 -0
  49. package/dist/src/shared/cache/cache.service.d.ts.map +1 -0
  50. package/dist/src/shared/cache/cache.service.js +29 -0
  51. package/dist/src/shared/dsl/dsl.interface.d.ts +43 -0
  52. package/dist/src/shared/dsl/dsl.interface.d.ts.map +1 -0
  53. package/dist/src/shared/dsl/dsl.interface.js +9 -0
  54. package/dist/src/shared/dsl/dsl.service.d.ts +8 -0
  55. package/dist/src/shared/dsl/dsl.service.d.ts.map +1 -0
  56. package/dist/src/shared/dsl/dsl.service.js +87 -0
  57. package/dist/src/shared/redis/redis.module.d.ts +3 -0
  58. package/dist/src/shared/redis/redis.module.d.ts.map +1 -0
  59. package/dist/src/shared/redis/redis.module.js +32 -0
  60. package/dist/src/shared/redis/redis.service.d.ts +13 -0
  61. package/dist/src/shared/redis/redis.service.d.ts.map +1 -0
  62. package/dist/src/shared/redis/redis.service.js +53 -0
  63. package/dist/src/shared/rule-engine/interface/rule-engine.interface.d.ts +14 -0
  64. package/dist/src/shared/rule-engine/interface/rule-engine.interface.d.ts.map +1 -0
  65. package/dist/src/shared/rule-engine/interface/rule-engine.interface.js +2 -0
  66. package/dist/src/shared/rule-engine/rule-engine.module.d.ts +11 -0
  67. package/dist/src/shared/rule-engine/rule-engine.module.d.ts.map +1 -0
  68. package/dist/src/shared/rule-engine/rule-engine.module.js +51 -0
  69. package/dist/src/shared/rule-engine/rule-engine.service.d.ts +18 -0
  70. package/dist/src/shared/rule-engine/rule-engine.service.d.ts.map +1 -0
  71. package/dist/src/shared/rule-engine/rule-engine.service.js +134 -0
  72. package/dist/src/shared/shared.module.d.ts +3 -0
  73. package/dist/src/shared/shared.module.d.ts.map +1 -0
  74. package/dist/src/shared/shared.module.js +29 -0
  75. package/dist/src/validators/rule.constraint.d.ts +10 -0
  76. package/dist/src/validators/rule.constraint.d.ts.map +1 -0
  77. package/dist/src/validators/rule.constraint.js +49 -0
  78. package/dist/src/validators/rule.validator.d.ts +3 -0
  79. package/dist/src/validators/rule.validator.d.ts.map +1 -0
  80. package/dist/src/validators/rule.validator.js +16 -0
  81. package/dist/tsconfig.lib.tsbuildinfo +1 -0
  82. package/package.json +21 -4
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pagination.interface.d.ts","sourceRoot":"","sources":["../../../../src/rules/interface/pagination.interface.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,WAAW,CAAC,CAAC;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,CAAC,CAAC;IACR,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;CACpB"}
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,29 @@
1
+ export interface IRule {
2
+ ruleId?: string;
3
+ name: string;
4
+ targetAction?: string;
5
+ expression: string;
6
+ enabled?: boolean;
7
+ errorMessage?: string;
8
+ partner?: string;
9
+ provider?: string;
10
+ market?: string;
11
+ productType?: string;
12
+ variables?: Record<string, unknown>;
13
+ variablesRequired?: boolean;
14
+ deletedAt?: Date;
15
+ createdAt?: Date;
16
+ updatedAt?: Date;
17
+ }
18
+ export interface IFindRule {
19
+ name?: string;
20
+ targetAction?: string;
21
+ enabled?: string;
22
+ partner?: string | undefined;
23
+ provider?: string | undefined;
24
+ market?: string | undefined;
25
+ productType?: string | undefined;
26
+ page: number;
27
+ limit: number;
28
+ }
29
+ //# sourceMappingURL=rule.interface.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rule.interface.d.ts","sourceRoot":"","sources":["../../../../src/rules/interface/rule.interface.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,KAAK;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACpC,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,SAAS,CAAC,EAAE,IAAI,CAAC;IACjB,SAAS,CAAC,EAAE,IAAI,CAAC;IACjB,SAAS,CAAC,EAAE,IAAI,CAAC;CAClB;AAED,MAAM,WAAW,SAAS;IACxB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACf"}
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,14 @@
1
+ import { CreateRuleDTO, FindRuleDTO } from './dto/rule.dto';
2
+ import { IPagination } from './interface/pagination.interface';
3
+ import { IRule } from './interface/rule.interface';
4
+ import { RuleService } from './rule.service';
5
+ export declare class RuleController {
6
+ private readonly ruleService;
7
+ constructor(ruleService: RuleService);
8
+ create(dto: CreateRuleDTO): Promise<IRule>;
9
+ findAll(query: FindRuleDTO): Promise<IPagination<IRule[]>>;
10
+ findOne(id: string): Promise<IRule>;
11
+ updateSale(id: string, patchData: Partial<IRule>): Promise<IRule | null>;
12
+ delete(id: string): Promise<void>;
13
+ }
14
+ //# sourceMappingURL=rule.controller.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rule.controller.d.ts","sourceRoot":"","sources":["../../../src/rules/rule.controller.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC5D,OAAO,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAC;AAC/D,OAAO,EAAE,KAAK,EAAE,MAAM,4BAA4B,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAM7C,qBAEa,cAAc;IACb,OAAO,CAAC,QAAQ,CAAC,WAAW;gBAAX,WAAW,EAAE,WAAW;IAMrD,MAAM,CAAS,GAAG,EAAE,aAAa;IAOjC,OAAO,CAAU,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC,CAAC;IAOnE,OAAO,CAAc,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC;IAOhD,UAAU,CAAc,EAAE,EAAE,MAAM,EAAU,SAAS,EAAE,OAAO,CAAC,KAAK,CAAC;IAOrE,MAAM,CAAc,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAG/C"}
@@ -0,0 +1,87 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.RuleController = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const common_1 = require("@nestjs/common");
6
+ const swagger_1 = require("@nestjs/swagger");
7
+ const auth_1 = require("@edirect/auth");
8
+ const rule_dto_1 = require("./dto/rule.dto");
9
+ const rule_service_1 = require("./rule.service");
10
+ var ResourceServiceEnum;
11
+ (function (ResourceServiceEnum) {
12
+ ResourceServiceEnum["DEFAULT"] = "Default Resource";
13
+ })(ResourceServiceEnum || (ResourceServiceEnum = {}));
14
+ let RuleController = class RuleController {
15
+ ruleService;
16
+ constructor(ruleService) {
17
+ this.ruleService = ruleService;
18
+ }
19
+ create(dto) {
20
+ return this.ruleService.create(dto);
21
+ }
22
+ findAll(query) {
23
+ return this.ruleService.findAll(query);
24
+ }
25
+ findOne(id) {
26
+ return this.ruleService.findById(id);
27
+ }
28
+ updateSale(id, patchData) {
29
+ return this.ruleService.updateOne(id, patchData);
30
+ }
31
+ delete(id) {
32
+ return this.ruleService.delete(id);
33
+ }
34
+ };
35
+ exports.RuleController = RuleController;
36
+ tslib_1.__decorate([
37
+ (0, common_1.Post)(),
38
+ (0, swagger_1.ApiResponse)({ status: 201 }),
39
+ (0, auth_1.Resources)(ResourceServiceEnum.DEFAULT),
40
+ (0, common_1.UsePipes)(new common_1.ValidationPipe({ transform: true })),
41
+ tslib_1.__param(0, (0, common_1.Body)()),
42
+ tslib_1.__metadata("design:type", Function),
43
+ tslib_1.__metadata("design:paramtypes", [rule_dto_1.CreateRuleDTO]),
44
+ tslib_1.__metadata("design:returntype", void 0)
45
+ ], RuleController.prototype, "create", null);
46
+ tslib_1.__decorate([
47
+ (0, common_1.Get)(),
48
+ (0, auth_1.Resources)(ResourceServiceEnum.DEFAULT),
49
+ (0, common_1.UsePipes)(new common_1.ValidationPipe({ transform: true })),
50
+ tslib_1.__param(0, (0, common_1.Query)()),
51
+ tslib_1.__metadata("design:type", Function),
52
+ tslib_1.__metadata("design:paramtypes", [rule_dto_1.FindRuleDTO]),
53
+ tslib_1.__metadata("design:returntype", Promise)
54
+ ], RuleController.prototype, "findAll", null);
55
+ tslib_1.__decorate([
56
+ (0, common_1.Get)(':id'),
57
+ (0, auth_1.Resources)(ResourceServiceEnum.DEFAULT),
58
+ (0, common_1.UsePipes)(new common_1.ValidationPipe({ transform: true })),
59
+ tslib_1.__param(0, (0, common_1.Param)('id')),
60
+ tslib_1.__metadata("design:type", Function),
61
+ tslib_1.__metadata("design:paramtypes", [String]),
62
+ tslib_1.__metadata("design:returntype", Promise)
63
+ ], RuleController.prototype, "findOne", null);
64
+ tslib_1.__decorate([
65
+ (0, common_1.Patch)(':id'),
66
+ (0, auth_1.Resources)(ResourceServiceEnum.DEFAULT),
67
+ (0, common_1.UsePipes)(new common_1.ValidationPipe({ transform: true })),
68
+ tslib_1.__param(0, (0, common_1.Param)('id')),
69
+ tslib_1.__param(1, (0, common_1.Body)()),
70
+ tslib_1.__metadata("design:type", Function),
71
+ tslib_1.__metadata("design:paramtypes", [String, Object]),
72
+ tslib_1.__metadata("design:returntype", void 0)
73
+ ], RuleController.prototype, "updateSale", null);
74
+ tslib_1.__decorate([
75
+ (0, common_1.Delete)(':id'),
76
+ (0, auth_1.Resources)(ResourceServiceEnum.DEFAULT),
77
+ (0, common_1.UsePipes)(new common_1.ValidationPipe({ transform: true })),
78
+ tslib_1.__param(0, (0, common_1.Param)('id')),
79
+ tslib_1.__metadata("design:type", Function),
80
+ tslib_1.__metadata("design:paramtypes", [String]),
81
+ tslib_1.__metadata("design:returntype", Promise)
82
+ ], RuleController.prototype, "delete", null);
83
+ exports.RuleController = RuleController = tslib_1.__decorate([
84
+ (0, swagger_1.ApiTags)('rate-limiting-rule'),
85
+ (0, common_1.Controller)('/rule'),
86
+ tslib_1.__metadata("design:paramtypes", [rule_service_1.RuleService])
87
+ ], RuleController);
@@ -0,0 +1,5 @@
1
+ import { DynamicModule } from '@nestjs/common';
2
+ export declare class RuleModule {
3
+ static register(connectionToken: string): DynamicModule;
4
+ }
5
+ //# sourceMappingURL=rule.module.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rule.module.d.ts","sourceRoot":"","sources":["../../../src/rules/rule.module.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAU,MAAM,gBAAgB,CAAC;AASvD,qBACa,UAAU;IACrB,MAAM,CAAC,QAAQ,CAAC,eAAe,EAAE,MAAM,GAAG,aAAa;CAoBxD"}
@@ -0,0 +1,36 @@
1
+ "use strict";
2
+ var RuleModule_1;
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.RuleModule = void 0;
5
+ const tslib_1 = require("tslib");
6
+ const logger_1 = require("@edirect/logger");
7
+ const common_1 = require("@nestjs/common");
8
+ const mongoose_1 = require("@nestjs/mongoose");
9
+ const shared_module_1 = require("../shared/shared.module");
10
+ const rule_controller_1 = require("./rule.controller");
11
+ const rule_repository_1 = require("./rule.repository");
12
+ const rule_schema_1 = require("./rule.schema");
13
+ const rule_service_1 = require("./rule.service");
14
+ let RuleModule = RuleModule_1 = class RuleModule {
15
+ static register(connectionToken) {
16
+ const enableController = process.env.ENABLE_RATE_LIMITING_RULE_CONTROLLER === 'true';
17
+ const modelProvider = {
18
+ provide: (0, mongoose_1.getModelToken)(rule_schema_1.RateLimitingRule.name),
19
+ useFactory: (connection) => {
20
+ return connection.model(rule_schema_1.RateLimitingRule.name, rule_schema_1.RateLimitingRuleSchema);
21
+ },
22
+ inject: [connectionToken],
23
+ };
24
+ return {
25
+ module: RuleModule_1,
26
+ imports: [logger_1.LoggerModule, shared_module_1.SharedModule],
27
+ controllers: enableController ? [rule_controller_1.RuleController] : [],
28
+ providers: [modelProvider, rule_service_1.RuleService, rule_repository_1.RuleRepository],
29
+ exports: [rule_service_1.RuleService, rule_repository_1.RuleRepository],
30
+ };
31
+ }
32
+ };
33
+ exports.RuleModule = RuleModule;
34
+ exports.RuleModule = RuleModule = RuleModule_1 = tslib_1.__decorate([
35
+ (0, common_1.Module)({})
36
+ ], RuleModule);
@@ -0,0 +1,15 @@
1
+ import { Model } from 'mongoose';
2
+ import { IPagination } from './interface/pagination.interface';
3
+ import { IFindRule, IRule } from './interface/rule.interface';
4
+ import { RuleDocument } from './rule.schema';
5
+ export declare class RuleRepository {
6
+ private readonly model;
7
+ private readonly MAX_LIMIT;
8
+ constructor(model: Model<RuleDocument>);
9
+ save(data: IRule): Promise<IRule>;
10
+ update(ruleRateId: string, data: Partial<IRule>): Promise<IRule | null>;
11
+ findOneByRateId(rateRuleId: string): Promise<IRule | null>;
12
+ findAll(query: IFindRule): Promise<IPagination<IRule[]>>;
13
+ private buildQuery;
14
+ }
15
+ //# sourceMappingURL=rule.repository.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rule.repository.d.ts","sourceRoot":"","sources":["../../../src/rules/rule.repository.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AACjC,OAAO,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAC;AAC/D,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,4BAA4B,CAAC;AAC9D,OAAO,EAAoB,YAAY,EAAE,MAAM,eAAe,CAAC;AAE/D,qBACa,cAAc;IAKvB,OAAO,CAAC,QAAQ,CAAC,KAAK;IAJxB,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAe;gBAItB,KAAK,EAAE,KAAK,CAAC,YAAY,CAAC;IAGvC,IAAI,CAAC,IAAI,EAAE,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;IAIjC,MAAM,CACV,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,OAAO,CAAC,KAAK,CAAC,GACnB,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC;IAMlB,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC;IAShE,OAAO,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC,CAAC;IA2CxD,OAAO,CAAC,UAAU;CASnB"}
@@ -0,0 +1,79 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.RuleRepository = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const common_1 = require("@nestjs/common");
6
+ const mongoose_1 = require("@nestjs/mongoose");
7
+ const mongoose_2 = require("mongoose");
8
+ const rule_schema_1 = require("./rule.schema");
9
+ let RuleRepository = class RuleRepository {
10
+ model;
11
+ MAX_LIMIT = 100;
12
+ constructor(model) {
13
+ this.model = model;
14
+ }
15
+ async save(data) {
16
+ return new this.model(data).save();
17
+ }
18
+ async update(ruleRateId, data) {
19
+ return this.model.findOneAndUpdate({ ruleId: ruleRateId }, data, {
20
+ new: true,
21
+ });
22
+ }
23
+ async findOneByRateId(rateRuleId) {
24
+ return this.model
25
+ .findOne({ ruleId: rateRuleId })
26
+ .select('-__v')
27
+ .select('-_id')
28
+ .lean()
29
+ .exec();
30
+ }
31
+ findAll(query) {
32
+ const { page, limit } = query;
33
+ const LIMIT = limit && limit < this.MAX_LIMIT ? limit : this.MAX_LIMIT;
34
+ let limitCount = 500;
35
+ while (limitCount < page * LIMIT) {
36
+ limitCount += 500;
37
+ }
38
+ const queryBuilt = this.buildQuery(query);
39
+ const count = this.model
40
+ .countDocuments(queryBuilt)
41
+ .limit(limitCount)
42
+ .exec();
43
+ const rules = this.model
44
+ .find(queryBuilt)
45
+ .limit(LIMIT)
46
+ .skip((page - 1) * LIMIT)
47
+ .select('-__v')
48
+ .exec();
49
+ return Promise.all([count, rules]).then(values => {
50
+ const [count, result] = values;
51
+ const mapped = result.map(e => e.toJSON());
52
+ let currentCount = count;
53
+ if (count > limitCount) {
54
+ currentCount = limitCount;
55
+ }
56
+ const totalPages = Math.ceil(count / LIMIT);
57
+ return {
58
+ total: currentCount,
59
+ currentPage: +page || 1,
60
+ totalPages,
61
+ data: mapped,
62
+ };
63
+ });
64
+ }
65
+ buildQuery(queryParameters) {
66
+ return Object.entries(queryParameters).reduce((acc, [key, value]) => {
67
+ if (key === 'page' || key === 'limit')
68
+ return acc;
69
+ acc[key] = value || '';
70
+ return acc;
71
+ }, {});
72
+ }
73
+ };
74
+ exports.RuleRepository = RuleRepository;
75
+ exports.RuleRepository = RuleRepository = tslib_1.__decorate([
76
+ (0, common_1.Injectable)(),
77
+ tslib_1.__param(0, (0, mongoose_1.InjectModel)(rule_schema_1.RateLimitingRule.name)),
78
+ tslib_1.__metadata("design:paramtypes", [mongoose_2.Model])
79
+ ], RuleRepository);
@@ -0,0 +1,166 @@
1
+ import { Document } from 'mongoose';
2
+ import { IRule } from './interface/rule.interface';
3
+ export type RuleDocument = RateLimitingRule & Document;
4
+ export declare class RateLimitingRule implements IRule {
5
+ ruleId: string;
6
+ name: string;
7
+ targetAction?: string;
8
+ expression: string;
9
+ enabled: boolean;
10
+ market: string;
11
+ errorMessage?: string;
12
+ partner: string;
13
+ provider?: string;
14
+ productType?: string;
15
+ variables?: Record<string, string>;
16
+ variablesRequired?: boolean;
17
+ deletedAt?: Date;
18
+ createdAt?: Date;
19
+ updatedAt?: Date;
20
+ }
21
+ export declare const RateLimitingRuleSchema: import("mongoose").Schema<RateLimitingRule, import("mongoose").Model<RateLimitingRule, any, any, any, any, any, RateLimitingRule>, {}, {}, {}, {}, import("mongoose").DefaultSchemaOptions, RateLimitingRule, Document<unknown, {}, RateLimitingRule, {
22
+ id: string;
23
+ }, import("mongoose").DefaultSchemaOptions> & Omit<RateLimitingRule & {
24
+ _id: import("mongoose").Types.ObjectId;
25
+ } & {
26
+ __v: number;
27
+ }, "id"> & import("mongoose").HydratedDocumentOverrides<{
28
+ id: string;
29
+ }>, {
30
+ ruleId?: import("mongoose").SchemaDefinitionProperty<string, RateLimitingRule, Document<unknown, {}, RateLimitingRule, {
31
+ id: string;
32
+ }, import("mongoose").DefaultSchemaOptions> & Omit<RateLimitingRule & {
33
+ _id: import("mongoose").Types.ObjectId;
34
+ } & {
35
+ __v: number;
36
+ }, "id"> & import("mongoose").HydratedDocumentOverrides<{
37
+ id: string;
38
+ }>> | undefined;
39
+ name?: import("mongoose").SchemaDefinitionProperty<string, RateLimitingRule, Document<unknown, {}, RateLimitingRule, {
40
+ id: string;
41
+ }, import("mongoose").DefaultSchemaOptions> & Omit<RateLimitingRule & {
42
+ _id: import("mongoose").Types.ObjectId;
43
+ } & {
44
+ __v: number;
45
+ }, "id"> & import("mongoose").HydratedDocumentOverrides<{
46
+ id: string;
47
+ }>> | undefined;
48
+ targetAction?: import("mongoose").SchemaDefinitionProperty<string | undefined, RateLimitingRule, Document<unknown, {}, RateLimitingRule, {
49
+ id: string;
50
+ }, import("mongoose").DefaultSchemaOptions> & Omit<RateLimitingRule & {
51
+ _id: import("mongoose").Types.ObjectId;
52
+ } & {
53
+ __v: number;
54
+ }, "id"> & import("mongoose").HydratedDocumentOverrides<{
55
+ id: string;
56
+ }>> | undefined;
57
+ expression?: import("mongoose").SchemaDefinitionProperty<string, RateLimitingRule, Document<unknown, {}, RateLimitingRule, {
58
+ id: string;
59
+ }, import("mongoose").DefaultSchemaOptions> & Omit<RateLimitingRule & {
60
+ _id: import("mongoose").Types.ObjectId;
61
+ } & {
62
+ __v: number;
63
+ }, "id"> & import("mongoose").HydratedDocumentOverrides<{
64
+ id: string;
65
+ }>> | undefined;
66
+ enabled?: import("mongoose").SchemaDefinitionProperty<boolean, RateLimitingRule, Document<unknown, {}, RateLimitingRule, {
67
+ id: string;
68
+ }, import("mongoose").DefaultSchemaOptions> & Omit<RateLimitingRule & {
69
+ _id: import("mongoose").Types.ObjectId;
70
+ } & {
71
+ __v: number;
72
+ }, "id"> & import("mongoose").HydratedDocumentOverrides<{
73
+ id: string;
74
+ }>> | undefined;
75
+ market?: import("mongoose").SchemaDefinitionProperty<string, RateLimitingRule, Document<unknown, {}, RateLimitingRule, {
76
+ id: string;
77
+ }, import("mongoose").DefaultSchemaOptions> & Omit<RateLimitingRule & {
78
+ _id: import("mongoose").Types.ObjectId;
79
+ } & {
80
+ __v: number;
81
+ }, "id"> & import("mongoose").HydratedDocumentOverrides<{
82
+ id: string;
83
+ }>> | undefined;
84
+ errorMessage?: import("mongoose").SchemaDefinitionProperty<string | undefined, RateLimitingRule, Document<unknown, {}, RateLimitingRule, {
85
+ id: string;
86
+ }, import("mongoose").DefaultSchemaOptions> & Omit<RateLimitingRule & {
87
+ _id: import("mongoose").Types.ObjectId;
88
+ } & {
89
+ __v: number;
90
+ }, "id"> & import("mongoose").HydratedDocumentOverrides<{
91
+ id: string;
92
+ }>> | undefined;
93
+ partner?: import("mongoose").SchemaDefinitionProperty<string, RateLimitingRule, Document<unknown, {}, RateLimitingRule, {
94
+ id: string;
95
+ }, import("mongoose").DefaultSchemaOptions> & Omit<RateLimitingRule & {
96
+ _id: import("mongoose").Types.ObjectId;
97
+ } & {
98
+ __v: number;
99
+ }, "id"> & import("mongoose").HydratedDocumentOverrides<{
100
+ id: string;
101
+ }>> | undefined;
102
+ provider?: import("mongoose").SchemaDefinitionProperty<string | undefined, RateLimitingRule, Document<unknown, {}, RateLimitingRule, {
103
+ id: string;
104
+ }, import("mongoose").DefaultSchemaOptions> & Omit<RateLimitingRule & {
105
+ _id: import("mongoose").Types.ObjectId;
106
+ } & {
107
+ __v: number;
108
+ }, "id"> & import("mongoose").HydratedDocumentOverrides<{
109
+ id: string;
110
+ }>> | undefined;
111
+ productType?: import("mongoose").SchemaDefinitionProperty<string | undefined, RateLimitingRule, Document<unknown, {}, RateLimitingRule, {
112
+ id: string;
113
+ }, import("mongoose").DefaultSchemaOptions> & Omit<RateLimitingRule & {
114
+ _id: import("mongoose").Types.ObjectId;
115
+ } & {
116
+ __v: number;
117
+ }, "id"> & import("mongoose").HydratedDocumentOverrides<{
118
+ id: string;
119
+ }>> | undefined;
120
+ variables?: import("mongoose").SchemaDefinitionProperty<Record<string, string> | undefined, RateLimitingRule, Document<unknown, {}, RateLimitingRule, {
121
+ id: string;
122
+ }, import("mongoose").DefaultSchemaOptions> & Omit<RateLimitingRule & {
123
+ _id: import("mongoose").Types.ObjectId;
124
+ } & {
125
+ __v: number;
126
+ }, "id"> & import("mongoose").HydratedDocumentOverrides<{
127
+ id: string;
128
+ }>> | undefined;
129
+ variablesRequired?: import("mongoose").SchemaDefinitionProperty<boolean | undefined, RateLimitingRule, Document<unknown, {}, RateLimitingRule, {
130
+ id: string;
131
+ }, import("mongoose").DefaultSchemaOptions> & Omit<RateLimitingRule & {
132
+ _id: import("mongoose").Types.ObjectId;
133
+ } & {
134
+ __v: number;
135
+ }, "id"> & import("mongoose").HydratedDocumentOverrides<{
136
+ id: string;
137
+ }>> | undefined;
138
+ deletedAt?: import("mongoose").SchemaDefinitionProperty<Date | undefined, RateLimitingRule, Document<unknown, {}, RateLimitingRule, {
139
+ id: string;
140
+ }, import("mongoose").DefaultSchemaOptions> & Omit<RateLimitingRule & {
141
+ _id: import("mongoose").Types.ObjectId;
142
+ } & {
143
+ __v: number;
144
+ }, "id"> & import("mongoose").HydratedDocumentOverrides<{
145
+ id: string;
146
+ }>> | undefined;
147
+ createdAt?: import("mongoose").SchemaDefinitionProperty<Date | undefined, RateLimitingRule, Document<unknown, {}, RateLimitingRule, {
148
+ id: string;
149
+ }, import("mongoose").DefaultSchemaOptions> & Omit<RateLimitingRule & {
150
+ _id: import("mongoose").Types.ObjectId;
151
+ } & {
152
+ __v: number;
153
+ }, "id"> & import("mongoose").HydratedDocumentOverrides<{
154
+ id: string;
155
+ }>> | undefined;
156
+ updatedAt?: import("mongoose").SchemaDefinitionProperty<Date | undefined, RateLimitingRule, Document<unknown, {}, RateLimitingRule, {
157
+ id: string;
158
+ }, import("mongoose").DefaultSchemaOptions> & Omit<RateLimitingRule & {
159
+ _id: import("mongoose").Types.ObjectId;
160
+ } & {
161
+ __v: number;
162
+ }, "id"> & import("mongoose").HydratedDocumentOverrides<{
163
+ id: string;
164
+ }>> | undefined;
165
+ }, RateLimitingRule>;
166
+ //# sourceMappingURL=rule.schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rule.schema.d.ts","sourceRoot":"","sources":["../../../src/rules/rule.schema.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAEpC,OAAO,EAAE,KAAK,EAAE,MAAM,4BAA4B,CAAC;AAEnD,MAAM,MAAM,YAAY,GAAG,gBAAgB,GAAG,QAAQ,CAAC;AAEvD,qBACa,gBAAiB,YAAW,KAAK;IAU5C,MAAM,EAAG,MAAM,CAAC;IAMhB,IAAI,EAAG,MAAM,CAAC;IAMd,YAAY,CAAC,EAAE,MAAM,CAAC;IAMtB,UAAU,EAAG,MAAM,CAAC;IAOpB,OAAO,EAAG,OAAO,CAAC;IAMlB,MAAM,EAAG,MAAM,CAAC;IAMhB,YAAY,CAAC,EAAE,MAAM,CAAC;IAMtB,OAAO,EAAG,MAAM,CAAC;IAMjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAMlB,WAAW,CAAC,EAAE,MAAM,CAAC;IAMrB,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAMnC,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAM5B,SAAS,CAAC,EAAE,IAAI,CAAC;IAMjB,SAAS,CAAC,EAAE,IAAI,CAAC;IAMjB,SAAS,CAAC,EAAE,IAAI,CAAC;CAClB;AAED,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;oBACa,CAAC"}
@@ -0,0 +1,150 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.RateLimitingRuleSchema = exports.RateLimitingRule = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const mongoose_1 = require("@nestjs/mongoose");
6
+ let RateLimitingRule = class RateLimitingRule {
7
+ ruleId;
8
+ name;
9
+ targetAction;
10
+ expression;
11
+ enabled;
12
+ market;
13
+ errorMessage;
14
+ partner;
15
+ provider;
16
+ productType;
17
+ variables;
18
+ variablesRequired;
19
+ deletedAt;
20
+ createdAt;
21
+ updatedAt;
22
+ };
23
+ exports.RateLimitingRule = RateLimitingRule;
24
+ tslib_1.__decorate([
25
+ (0, mongoose_1.Prop)({
26
+ required: true,
27
+ unique: true,
28
+ default: async () => {
29
+ const { v4: uuidv4 } = await import('uuid');
30
+ return uuidv4();
31
+ },
32
+ type: String,
33
+ }),
34
+ tslib_1.__metadata("design:type", String)
35
+ ], RateLimitingRule.prototype, "ruleId", void 0);
36
+ tslib_1.__decorate([
37
+ (0, mongoose_1.Prop)({
38
+ required: true,
39
+ type: String,
40
+ }),
41
+ tslib_1.__metadata("design:type", String)
42
+ ], RateLimitingRule.prototype, "name", void 0);
43
+ tslib_1.__decorate([
44
+ (0, mongoose_1.Prop)({
45
+ required: true,
46
+ type: String,
47
+ }),
48
+ tslib_1.__metadata("design:type", String)
49
+ ], RateLimitingRule.prototype, "targetAction", void 0);
50
+ tslib_1.__decorate([
51
+ (0, mongoose_1.Prop)({
52
+ required: true,
53
+ type: String,
54
+ }),
55
+ tslib_1.__metadata("design:type", String)
56
+ ], RateLimitingRule.prototype, "expression", void 0);
57
+ tslib_1.__decorate([
58
+ (0, mongoose_1.Prop)({
59
+ required: true,
60
+ default: true,
61
+ type: Boolean,
62
+ }),
63
+ tslib_1.__metadata("design:type", Boolean)
64
+ ], RateLimitingRule.prototype, "enabled", void 0);
65
+ tslib_1.__decorate([
66
+ (0, mongoose_1.Prop)({
67
+ required: false,
68
+ type: String,
69
+ }),
70
+ tslib_1.__metadata("design:type", String)
71
+ ], RateLimitingRule.prototype, "market", void 0);
72
+ tslib_1.__decorate([
73
+ (0, mongoose_1.Prop)({
74
+ required: false,
75
+ type: String,
76
+ }),
77
+ tslib_1.__metadata("design:type", String)
78
+ ], RateLimitingRule.prototype, "errorMessage", void 0);
79
+ tslib_1.__decorate([
80
+ (0, mongoose_1.Prop)({
81
+ required: true,
82
+ type: String,
83
+ }),
84
+ tslib_1.__metadata("design:type", String)
85
+ ], RateLimitingRule.prototype, "partner", void 0);
86
+ tslib_1.__decorate([
87
+ (0, mongoose_1.Prop)({
88
+ required: false,
89
+ type: String,
90
+ }),
91
+ tslib_1.__metadata("design:type", String)
92
+ ], RateLimitingRule.prototype, "provider", void 0);
93
+ tslib_1.__decorate([
94
+ (0, mongoose_1.Prop)({
95
+ required: false,
96
+ type: String,
97
+ }),
98
+ tslib_1.__metadata("design:type", String)
99
+ ], RateLimitingRule.prototype, "productType", void 0);
100
+ tslib_1.__decorate([
101
+ (0, mongoose_1.Prop)({
102
+ required: false,
103
+ type: Object,
104
+ }),
105
+ tslib_1.__metadata("design:type", Object)
106
+ ], RateLimitingRule.prototype, "variables", void 0);
107
+ tslib_1.__decorate([
108
+ (0, mongoose_1.Prop)({
109
+ required: false,
110
+ type: Boolean,
111
+ }),
112
+ tslib_1.__metadata("design:type", Boolean)
113
+ ], RateLimitingRule.prototype, "variablesRequired", void 0);
114
+ tslib_1.__decorate([
115
+ (0, mongoose_1.Prop)({
116
+ required: false,
117
+ type: Date,
118
+ }),
119
+ tslib_1.__metadata("design:type", Date)
120
+ ], RateLimitingRule.prototype, "deletedAt", void 0);
121
+ tslib_1.__decorate([
122
+ (0, mongoose_1.Prop)({
123
+ required: false,
124
+ type: Date,
125
+ }),
126
+ tslib_1.__metadata("design:type", Date)
127
+ ], RateLimitingRule.prototype, "createdAt", void 0);
128
+ tslib_1.__decorate([
129
+ (0, mongoose_1.Prop)({
130
+ required: false,
131
+ type: Date,
132
+ }),
133
+ tslib_1.__metadata("design:type", Date)
134
+ ], RateLimitingRule.prototype, "updatedAt", void 0);
135
+ exports.RateLimitingRule = RateLimitingRule = tslib_1.__decorate([
136
+ (0, mongoose_1.Schema)({ timestamps: true })
137
+ ], RateLimitingRule);
138
+ exports.RateLimitingRuleSchema = mongoose_1.SchemaFactory.createForClass(RateLimitingRule);
139
+ exports.RateLimitingRuleSchema.index({
140
+ partner: 1,
141
+ provider: 1,
142
+ productType: 1,
143
+ });
144
+ exports.RateLimitingRuleSchema.index({
145
+ partner: 1,
146
+ provider: 1,
147
+ });
148
+ exports.RateLimitingRuleSchema.index({
149
+ partner: 1,
150
+ });
@@ -0,0 +1,26 @@
1
+ import { LoggerService } from '@edirect/logger';
2
+ import { CacheService } from '../shared/cache/cache.service';
3
+ import { CreateRuleDTO } from './dto/rule.dto';
4
+ import { IPagination } from './interface/pagination.interface';
5
+ import { IFindRule, IRule } from './interface/rule.interface';
6
+ import { RuleRepository } from './rule.repository';
7
+ export declare class RuleService {
8
+ private readonly logger;
9
+ private readonly repository;
10
+ private readonly cacheService;
11
+ private readonly MAX_EXPRESSION_LENGTH;
12
+ private readonly MAX_EXPRESSION_DEPTH;
13
+ private readonly FORBIDDEN_PATTERNS;
14
+ constructor(logger: LoggerService, repository: RuleRepository, cacheService: CacheService);
15
+ create(input?: CreateRuleDTO): Promise<IRule>;
16
+ findAll(queryParameters: IFindRule): Promise<IPagination<IRule[]>>;
17
+ findAllWithoutPagination(queryParameters: IFindRule): Promise<IRule[]>;
18
+ findById(id: string): Promise<IRule>;
19
+ updateOne(id: string, fieldsToUpdate: Partial<IRule>): Promise<IRule | null>;
20
+ delete(id: string): Promise<void>;
21
+ private logError;
22
+ validateRuleExpression(expression: string): string | null;
23
+ private getFromCache;
24
+ private generateRateLimitingCountCacheKey;
25
+ }
26
+ //# sourceMappingURL=rule.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rule.service.d.ts","sourceRoot":"","sources":["../../../src/rules/rule.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAShD,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAe,MAAM,gBAAgB,CAAC;AAC5D,OAAO,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAC;AAC/D,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,4BAA4B,CAAC;AAC9D,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAEnD,qBACa,WAAW;IAqBpB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,YAAY;IAtB/B,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAAO;IAC7C,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAK;IAC1C,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAejC;gBAGiB,MAAM,EAAE,aAAa,EACrB,UAAU,EAAE,cAAc,EAC1B,YAAY,EAAE,YAAY;IAGvC,MAAM,CAAC,KAAK,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,KAAK,CAAC;IA0B7C,OAAO,CAAC,eAAe,EAAE,SAAS,GAAG,OAAO,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC,CAAC;IASlE,wBAAwB,CAAC,eAAe,EAAE,SAAS,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC;IA0BtE,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC;IAapC,SAAS,CACb,EAAE,EAAE,MAAM,EACV,cAAc,EAAE,OAAO,CAAC,KAAK,CAAC,GAC7B,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC;IAgClB,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAkBvC,OAAO,CAAC,QAAQ;IAOhB,sBAAsB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;YAoB3C,YAAY;IAiB1B,OAAO,CAAC,iCAAiC;CAuB1C"}