@edirect/rate-limit-module 1.0.10 → 2.0.2
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 +270 -29
- package/dist/src/guards/rate-limiting.guard.d.ts +8 -0
- package/dist/src/guards/rate-limiting.guard.js +145 -18
- package/dist/src/guards/rate-limiting.guard.js.map +1 -1
- package/dist/src/index.d.ts +2 -0
- package/dist/src/index.js +2 -0
- package/dist/src/index.js.map +1 -1
- package/dist/src/rules/dto/rule.dto.d.ts +1 -1
- package/dist/src/rules/dto/rule.dto.js.map +1 -1
- package/dist/src/rules/interface/rule.interface.d.ts +1 -1
- package/dist/src/shared/dls/dsl.interface.d.ts +42 -0
- package/dist/src/shared/dls/dsl.interface.js +10 -0
- package/dist/src/shared/dls/dsl.interface.js.map +1 -0
- package/dist/src/shared/dls/dsl.utils.d.ts +3 -0
- package/dist/src/shared/dls/dsl.utils.js +73 -0
- package/dist/src/shared/dls/dsl.utils.js.map +1 -0
- package/dist/src/shared/dsl/dsl.interface.d.ts +42 -0
- package/dist/src/shared/dsl/dsl.interface.js +10 -0
- package/dist/src/shared/dsl/dsl.interface.js.map +1 -0
- package/dist/src/shared/dsl/dsl.service.d.ts +6 -0
- package/dist/src/shared/dsl/dsl.service.js +74 -0
- package/dist/src/shared/dsl/dsl.service.js.map +1 -0
- package/dist/src/shared/dsl/dsl.utils.d.ts +3 -0
- package/dist/src/shared/dsl/dsl.utils.js +73 -0
- package/dist/src/shared/dsl/dsl.utils.js.map +1 -0
- package/dist/src/shared/rule-engine/rule-engine.service.d.ts +3 -2
- package/dist/src/shared/rule-engine/rule-engine.service.js +15 -4
- package/dist/src/shared/rule-engine/rule-engine.service.js.map +1 -1
- package/dist/test/mocks/rule.mocks.js +1 -0
- package/dist/test/mocks/rule.mocks.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +2 -1
package/README.md
CHANGED
|
@@ -1,102 +1,343 @@
|
|
|
1
1
|
# 📈 Rate Limiting Module
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
This module provides a flexible **rate-limiting system** where access to operations can be restricted based on dynamic **rule expressions** such as `count_quote( ) > 1`. If the condition evaluates to `true`, access is **blocked**.
|
|
6
|
+
|
|
7
|
+
|
|
4
8
|
|
|
5
9
|
## ✨ Features
|
|
6
10
|
|
|
11
|
+
|
|
12
|
+
|
|
7
13
|
- Define rate-limiting rules with custom expressions.
|
|
14
|
+
|
|
8
15
|
- Dynamically inject context-aware functions for rule evaluation.
|
|
16
|
+
|
|
9
17
|
- Easily integrate with any resource via a decorator.
|
|
18
|
+
|
|
10
19
|
- Built with extensibility and modularity in mind.
|
|
11
20
|
|
|
21
|
+
|
|
22
|
+
|
|
12
23
|
## 🧱 How It Works
|
|
13
24
|
|
|
14
|
-
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
1. You define a rule using a simple expression (e.g., `count_quote( ) > 1`).
|
|
28
|
+
|
|
15
29
|
2. The rule is evaluated in runtime using data injected from the request context.
|
|
30
|
+
|
|
16
31
|
3. If the expression is true, the action is blocked.
|
|
17
32
|
|
|
33
|
+
|
|
34
|
+
|
|
18
35
|
## 🧩 Usage
|
|
19
36
|
|
|
37
|
+
|
|
38
|
+
|
|
20
39
|
### 1. Install the Module
|
|
21
40
|
|
|
41
|
+
|
|
42
|
+
|
|
22
43
|
```ts
|
|
44
|
+
|
|
23
45
|
@Module({
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
46
|
+
|
|
47
|
+
imports: [
|
|
48
|
+
|
|
49
|
+
RateLimitingModule,
|
|
50
|
+
|
|
51
|
+
RuleEngineModule.forFeatureAsync({
|
|
52
|
+
|
|
53
|
+
useFactory: async (quoteService: QuoteService) => {
|
|
54
|
+
|
|
55
|
+
return await quoteService.countQuote();
|
|
56
|
+
|
|
57
|
+
},
|
|
58
|
+
|
|
59
|
+
inject: [QuoteService],
|
|
60
|
+
|
|
61
|
+
}),
|
|
62
|
+
|
|
63
|
+
],
|
|
64
|
+
|
|
33
65
|
})
|
|
34
|
-
|
|
66
|
+
|
|
67
|
+
export class YourFeatureModule {}
|
|
68
|
+
|
|
35
69
|
```
|
|
36
70
|
|
|
71
|
+
|
|
72
|
+
|
|
37
73
|
## 2. Decorate Your Handlers
|
|
38
74
|
|
|
75
|
+
|
|
76
|
+
|
|
39
77
|
Use the `@RateLimitingRuleMetadata` decorator to attach metadata used during rule evaluation.
|
|
40
78
|
|
|
79
|
+
|
|
80
|
+
|
|
41
81
|
```ts
|
|
42
|
-
|
|
82
|
+
|
|
83
|
+
import { RateLimitingRuleMetadata } from 'path-to-rate-limiting-module';
|
|
84
|
+
|
|
85
|
+
|
|
43
86
|
|
|
44
87
|
@RateLimitingRuleMetadata({
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
88
|
+
|
|
89
|
+
action: 'create_quote',
|
|
90
|
+
|
|
91
|
+
partnerPath: 'partner.partnerId',
|
|
92
|
+
|
|
93
|
+
providerPath: 'provider',
|
|
94
|
+
|
|
95
|
+
productTypePath: 'productType',
|
|
96
|
+
|
|
97
|
+
marketPath: 'market',
|
|
98
|
+
|
|
49
99
|
})
|
|
100
|
+
|
|
50
101
|
@Post('quotes')
|
|
102
|
+
|
|
51
103
|
createQuote(@Body() body: CreateQuoteDto) {
|
|
52
|
-
|
|
104
|
+
|
|
105
|
+
return this.quoteService.create(body);
|
|
106
|
+
|
|
53
107
|
}
|
|
108
|
+
|
|
54
109
|
```
|
|
55
110
|
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
*
|
|
59
|
-
|
|
111
|
+
|
|
112
|
+
|
|
113
|
+
* `action`: Name of the action to be controlled.
|
|
114
|
+
|
|
115
|
+
* `partnerPath`: Path to extract the partner ID from the request context.
|
|
116
|
+
|
|
117
|
+
* `providerPath`: Path to extract the provider.
|
|
118
|
+
|
|
119
|
+
* `productTypePath`: Path to extract the product type.
|
|
120
|
+
|
|
121
|
+
|
|
60
122
|
|
|
61
123
|
## 🛠 Rule Engine Integration
|
|
62
124
|
|
|
125
|
+
|
|
126
|
+
|
|
63
127
|
This module depends on an underlying rule engine to evaluate expressions. You must provide the functions used in expressions through:
|
|
64
128
|
|
|
129
|
+
|
|
130
|
+
|
|
65
131
|
```ts
|
|
132
|
+
|
|
66
133
|
RuleEngineModule.forFeatureAsync({
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
134
|
+
|
|
135
|
+
useFactory: async (useCase: RateLimitingInjectFunctionsUseCase) => {
|
|
136
|
+
|
|
137
|
+
return await useCase.getFunctions();
|
|
138
|
+
|
|
139
|
+
// returns an object like { count_quote: async () => number }
|
|
140
|
+
|
|
141
|
+
},
|
|
142
|
+
|
|
143
|
+
inject: [RateLimitingInjectFunctionsUseCase],
|
|
144
|
+
|
|
72
145
|
});
|
|
146
|
+
|
|
73
147
|
```
|
|
74
148
|
|
|
149
|
+
|
|
150
|
+
|
|
75
151
|
## 🧪 Example Rule
|
|
76
152
|
|
|
153
|
+
|
|
77
154
|
A rule stored in your system might look like:
|
|
78
155
|
|
|
156
|
+
|
|
79
157
|
```json
|
|
158
|
+
|
|
80
159
|
{
|
|
81
|
-
|
|
82
|
-
|
|
160
|
+
"expression": "count_quote() > 1",
|
|
161
|
+
"action": "create_quote"
|
|
83
162
|
}
|
|
163
|
+
|
|
84
164
|
```
|
|
85
165
|
|
|
166
|
+
|
|
167
|
+
|
|
86
168
|
If the expression returns `true`, the rate limiter will block further `create_quote` actions for the user based on the context values.
|
|
87
169
|
|
|
170
|
+
|
|
171
|
+
## 🧠 Dynamic Parameter Resolution
|
|
172
|
+
|
|
173
|
+
When building queries based on request context, it's possible to reference nested values using paths. This system supports:
|
|
174
|
+
|
|
175
|
+
- Resolving values using variable placeholders like `:applicant.documents[0].value`.
|
|
176
|
+
|
|
177
|
+
- Interpreting date expressions safely, like `date(-5d)` (5 days ago), without using `eval`.
|
|
178
|
+
|
|
179
|
+
### Supported Syntax
|
|
180
|
+
```json
|
|
181
|
+
|
|
182
|
+
{
|
|
183
|
+
"value": ":applicant.documents[0].value",
|
|
184
|
+
"label": "applicant.documents.value"
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
```
|
|
188
|
+
|
|
189
|
+
Will extract the value from the context:
|
|
190
|
+
|
|
191
|
+
```json
|
|
192
|
+
{
|
|
193
|
+
"applicant": {
|
|
194
|
+
"documents": [
|
|
195
|
+
{ "type": "NIF", "value": "ABCDE" }
|
|
196
|
+
]
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
```
|
|
200
|
+
Result: `"ABCDE"`
|
|
201
|
+
|
|
202
|
+
|
|
203
|
+
You can also use dynamic dates:
|
|
204
|
+
|
|
205
|
+
```json
|
|
206
|
+
{
|
|
207
|
+
"value": "date(-7d)",
|
|
208
|
+
"label": "createdAt",
|
|
209
|
+
"op": "gte"
|
|
210
|
+
}
|
|
211
|
+
```
|
|
212
|
+
|
|
213
|
+
Result: `"2025-07-10T00:00:00.000Z"` (7 days ago)
|
|
214
|
+
|
|
215
|
+
### Supported Date Units
|
|
216
|
+
|
|
217
|
+
- `d`: Days (default)
|
|
218
|
+
|
|
219
|
+
- `M`: Months
|
|
220
|
+
|
|
221
|
+
- `y`: Years
|
|
222
|
+
|
|
223
|
+
Examples:
|
|
224
|
+
|
|
225
|
+
- `date(-5d)` → 5 days ago
|
|
226
|
+
|
|
227
|
+
- `date(-1M)` → 1 month ago
|
|
228
|
+
|
|
229
|
+
- `date(0)` → Today
|
|
230
|
+
|
|
231
|
+
No dynamic code execution (`eval`, `new Function`) is used — expressions are parsed securely.
|
|
232
|
+
|
|
233
|
+
## ⚙️ Supported Operators (`op`)
|
|
234
|
+
|
|
235
|
+
You can optionally define an `op` (operation) field to specify how the value should be interpreted. The system currently supports:
|
|
236
|
+
|
|
237
|
+
### `gte` — Greater Than or Equal (usually for dates)
|
|
238
|
+
|
|
239
|
+
```json
|
|
240
|
+
{
|
|
241
|
+
"value": "date(-7d)",
|
|
242
|
+
"label": "createdAt",
|
|
243
|
+
"op": "gte"
|
|
244
|
+
}
|
|
245
|
+
```
|
|
246
|
+
🔍 This means: only include records created after **7 days ago**.
|
|
247
|
+
|
|
248
|
+
```json
|
|
249
|
+
{
|
|
250
|
+
"value": {
|
|
251
|
+
"from": 1,
|
|
252
|
+
"to": 10
|
|
253
|
+
},
|
|
254
|
+
"label": "createdAt",
|
|
255
|
+
"op": "range"
|
|
256
|
+
}
|
|
257
|
+
```
|
|
258
|
+
🔍 This sets a static date or value range. Can be used for numbers, dates, or custom fields.
|
|
259
|
+
|
|
260
|
+
### `rangeDate` — Dynamic Date Range
|
|
261
|
+
|
|
262
|
+
```json
|
|
263
|
+
{
|
|
264
|
+
"value": {
|
|
265
|
+
"from": "date(-30d)",
|
|
266
|
+
"to": "date(0)"
|
|
267
|
+
},
|
|
268
|
+
"label": "createdAt",
|
|
269
|
+
"op": "rangeDate"
|
|
270
|
+
}
|
|
271
|
+
```
|
|
272
|
+
🔍 This automatically resolves both `from` and `to` values as dates. For example, this would generate a date range from **30 days ago** to **now**.
|
|
273
|
+
|
|
274
|
+
|
|
275
|
+
## 🧬 DSL Support and MongoDB Integration
|
|
276
|
+
|
|
277
|
+
This module uses a lightweight **DSL (Domain-Specific Language)** to define rules and filters in a declarative and expressive way.
|
|
278
|
+
|
|
279
|
+
### What is a DSL?
|
|
280
|
+
|
|
281
|
+
A **DSL** is a simplified, pseudo-language designed for expressing business logic in a readable and configurable format. In this module, the DSL is used to define:
|
|
282
|
+
|
|
283
|
+
- Conditional expressions (e.g., `count_quote() > 1`)
|
|
284
|
+
- Filter structures using dynamic context variables and operators (`eq`, `range`, `gte`, etc.)
|
|
285
|
+
|
|
286
|
+
These DSL expressions are **not executed as raw code**, but safely parsed and evaluated using resolvers and expression evaluators.
|
|
287
|
+
|
|
288
|
+
---
|
|
289
|
+
|
|
290
|
+
### DSL to MongoDB Filter Conversion
|
|
291
|
+
|
|
292
|
+
One powerful feature of this module is the ability to **transform DSL filters into MongoDB-compatible query objects**.
|
|
293
|
+
|
|
294
|
+
For example, the following DSL input:
|
|
295
|
+
```json
|
|
296
|
+
{
|
|
297
|
+
createdAt: {
|
|
298
|
+
$gte: new Date('2025-06-17T00:00:00.000Z'),
|
|
299
|
+
$lte: new Date('2025-07-17T00:00:00.000Z')
|
|
300
|
+
}
|
|
301
|
+
}
|
|
302
|
+
```
|
|
303
|
+
This is handled by utility functions like `buildDlsOp`, which map DSL constructs to database query.
|
|
304
|
+
|
|
305
|
+
### ✅ Benefits of Using DSL
|
|
306
|
+
|
|
307
|
+
- **Separation of logic from code:** Business rules can be stored in DB or configs
|
|
308
|
+
|
|
309
|
+
- **Extensibility:** Easy to support new operators or DB backends (e.g., SQL, Elasticsearch)
|
|
310
|
+
|
|
311
|
+
- **Security:** No raw `eval` or dynamic JS execution
|
|
312
|
+
|
|
313
|
+
- **Readability:** DSL is expressive for non-technical stakeholders
|
|
314
|
+
|
|
315
|
+
By combining DSL definitions with path-based context extraction and safe runtime resolution, this module provides a highly flexible and secure rate-limiting engine ready for dynamic environments.
|
|
316
|
+
|
|
317
|
+
|
|
88
318
|
## 🧰 Requirements
|
|
89
319
|
|
|
320
|
+
|
|
90
321
|
* NestJS
|
|
322
|
+
|
|
91
323
|
* RuleEngineModule (compatible expression parser/executor)
|
|
324
|
+
|
|
92
325
|
* Custom service to inject context functions (like `RateLimitingInjectFunctionsUseCase`)
|
|
93
326
|
|
|
327
|
+
|
|
94
328
|
## 📎 Notes
|
|
329
|
+
|
|
95
330
|
|
|
96
331
|
* Rules should be defined and stored externally (e.g., DB, config).
|
|
332
|
+
|
|
97
333
|
* The context extractor paths must match the structure of your handler inputs (e.g., body, params).
|
|
334
|
+
|
|
98
335
|
* Ensure `getFunctions()` returns **async functions** that provide the required values for the expression.
|
|
99
336
|
|
|
337
|
+
|
|
338
|
+
|
|
100
339
|
## 🧾 License
|
|
101
340
|
|
|
341
|
+
|
|
342
|
+
|
|
102
343
|
MIT
|
|
@@ -9,4 +9,12 @@ export declare class RateLimitingRuleGuard implements CanActivate {
|
|
|
9
9
|
private readonly logger;
|
|
10
10
|
constructor(reflector: Reflector, ruleService: RuleService, ruleEngine: RuleEngineService);
|
|
11
11
|
canActivate(context: ExecutionContext): Promise<boolean>;
|
|
12
|
+
private _getValueFromPathOrRoot;
|
|
13
|
+
private _resolveDateExpr;
|
|
14
|
+
private _resolveValue;
|
|
15
|
+
private _resolveVariables;
|
|
16
|
+
private _resolveParams;
|
|
17
|
+
private _getByPath;
|
|
18
|
+
private _injectFnsResults;
|
|
19
|
+
private _updateFnsResults;
|
|
12
20
|
}
|
|
@@ -39,12 +39,12 @@ let RateLimitingRuleGuard = RateLimitingRuleGuard_1 = class RateLimitingRuleGuar
|
|
|
39
39
|
const req = context.switchToHttp().getRequest();
|
|
40
40
|
const entity = req.body;
|
|
41
41
|
const { action, partnerPath, providerPath, productTypePath, marketPath, } = ruleMetaData;
|
|
42
|
-
const partner =
|
|
42
|
+
const partner = this._getValueFromPathOrRoot(entity, partnerPath);
|
|
43
43
|
if (!partner)
|
|
44
44
|
return true;
|
|
45
|
-
const provider =
|
|
46
|
-
const productType =
|
|
47
|
-
const market =
|
|
45
|
+
const provider = this._getValueFromPathOrRoot(entity, providerPath);
|
|
46
|
+
const productType = this._getValueFromPathOrRoot(entity, productTypePath);
|
|
47
|
+
const market = this._getValueFromPathOrRoot(entity, marketPath);
|
|
48
48
|
const parameters = {
|
|
49
49
|
enabled: 'true',
|
|
50
50
|
partner: partner,
|
|
@@ -60,10 +60,8 @@ let RateLimitingRuleGuard = RateLimitingRuleGuard_1 = class RateLimitingRuleGuar
|
|
|
60
60
|
if (!rules || !rules.length)
|
|
61
61
|
return true;
|
|
62
62
|
for (const rule of rules) {
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
...rule.variables,
|
|
66
|
-
};
|
|
63
|
+
await this._injectFnsResults(rule.variables, entity);
|
|
64
|
+
const contextVars = this._resolveVariables(rule.variables, entity);
|
|
67
65
|
const invalidExpressionMessage = this.ruleService.validateRuleExpression(rule.expression);
|
|
68
66
|
if (invalidExpressionMessage && invalidExpressionMessage.length) {
|
|
69
67
|
throw new common_1.HttpException(invalidExpressionMessage, common_1.HttpStatus.TOO_MANY_REQUESTS);
|
|
@@ -88,9 +86,147 @@ let RateLimitingRuleGuard = RateLimitingRuleGuard_1 = class RateLimitingRuleGuar
|
|
|
88
86
|
return true;
|
|
89
87
|
}
|
|
90
88
|
catch (err) {
|
|
91
|
-
|
|
89
|
+
if (err instanceof common_1.HttpException && err.getStatus?.() === 429) {
|
|
90
|
+
throw err;
|
|
91
|
+
}
|
|
92
|
+
return true;
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
_getValueFromPathOrRoot(obj, path) {
|
|
96
|
+
const valueFromPath = path
|
|
97
|
+
.split('.')
|
|
98
|
+
.reduce((acc, key) => (acc && acc[key] !== undefined ? acc[key] : undefined), obj);
|
|
99
|
+
if (valueFromPath !== undefined) {
|
|
100
|
+
return valueFromPath;
|
|
101
|
+
}
|
|
102
|
+
return obj?.[path];
|
|
103
|
+
}
|
|
104
|
+
_resolveDateExpr(expr) {
|
|
105
|
+
const match = expr.match(/^date\(([-\d]+)([dMy])?\)$/);
|
|
106
|
+
if (!match)
|
|
107
|
+
return expr;
|
|
108
|
+
const amount = parseInt(match[1], 10);
|
|
109
|
+
const unit = match[2] || 'd';
|
|
110
|
+
const date = new Date();
|
|
111
|
+
switch (unit) {
|
|
112
|
+
case 'd':
|
|
113
|
+
date.setDate(date.getDate() + amount);
|
|
114
|
+
break;
|
|
115
|
+
case 'M':
|
|
116
|
+
date.setMonth(date.getMonth() + amount);
|
|
117
|
+
break;
|
|
118
|
+
case 'y':
|
|
119
|
+
date.setFullYear(date.getFullYear() + amount);
|
|
120
|
+
break;
|
|
121
|
+
}
|
|
122
|
+
if (amount !== 0) {
|
|
123
|
+
date.setHours(0, 0, 0, 0);
|
|
124
|
+
}
|
|
125
|
+
return date.toISOString();
|
|
126
|
+
}
|
|
127
|
+
_resolveValue(raw, context, defaultValue) {
|
|
128
|
+
if (typeof raw === 'string') {
|
|
129
|
+
if (!raw) {
|
|
130
|
+
if (defaultValue)
|
|
131
|
+
return this._resolveValue(defaultValue, context);
|
|
132
|
+
return;
|
|
133
|
+
}
|
|
134
|
+
if (raw.startsWith(':')) {
|
|
135
|
+
const path = raw.slice(1);
|
|
136
|
+
const val = this._getByPath(context, path);
|
|
137
|
+
return this._resolveValue(val, context);
|
|
138
|
+
}
|
|
139
|
+
if (/^\s*fn:/.test(raw)) {
|
|
140
|
+
return;
|
|
141
|
+
}
|
|
142
|
+
if (raw.startsWith('date(')) {
|
|
143
|
+
return this._resolveDateExpr(raw);
|
|
144
|
+
}
|
|
145
|
+
return raw;
|
|
146
|
+
}
|
|
147
|
+
if (typeof raw === 'object' && raw !== null && raw.from && raw.to) {
|
|
148
|
+
const defaultDates = defaultValue;
|
|
149
|
+
if (!raw.from && defaultDates?.from) {
|
|
150
|
+
raw.from = defaultDates.from;
|
|
151
|
+
}
|
|
152
|
+
if (!raw.to && defaultDates?.to) {
|
|
153
|
+
raw.to = defaultDates.to;
|
|
154
|
+
}
|
|
155
|
+
return {
|
|
156
|
+
from: this._resolveValue(raw.from, context),
|
|
157
|
+
to: this._resolveValue(raw.to, context)
|
|
158
|
+
};
|
|
159
|
+
}
|
|
160
|
+
return raw;
|
|
161
|
+
}
|
|
162
|
+
_resolveVariables(vars, context) {
|
|
163
|
+
if (!vars.queries || !vars.queries.length)
|
|
164
|
+
return vars;
|
|
165
|
+
return {
|
|
166
|
+
queries: vars.queries.map(q => ({
|
|
167
|
+
...q,
|
|
168
|
+
query: q.query.map(entry => ({
|
|
169
|
+
...entry,
|
|
170
|
+
value: this._resolveValue(entry.value, context, entry?.defaultValue)
|
|
171
|
+
}))
|
|
172
|
+
}))
|
|
173
|
+
};
|
|
174
|
+
}
|
|
175
|
+
_resolveParams(vars, context) {
|
|
176
|
+
if (!vars.variables || !vars.variables.queries || !vars.variables.queries.length)
|
|
177
|
+
return vars;
|
|
178
|
+
return {
|
|
179
|
+
...vars.variables,
|
|
180
|
+
queries: vars.variables.queries.map(q => ({
|
|
181
|
+
...q,
|
|
182
|
+
value: this._resolveValue(q.value, context, q?.defaultValue)
|
|
183
|
+
})),
|
|
184
|
+
};
|
|
185
|
+
}
|
|
186
|
+
_getByPath(obj, path) {
|
|
187
|
+
if (!path)
|
|
188
|
+
return undefined;
|
|
189
|
+
const parts = path.replace(/\[(\d+)\]/g, '.$1').split('.');
|
|
190
|
+
return parts.reduce((acc, key) => {
|
|
191
|
+
if (acc && typeof acc === 'object') {
|
|
192
|
+
return acc[key];
|
|
193
|
+
}
|
|
194
|
+
return undefined;
|
|
195
|
+
}, obj);
|
|
196
|
+
}
|
|
197
|
+
async _injectFnsResults(variables, entity) {
|
|
198
|
+
if (!variables || !variables.functions)
|
|
199
|
+
return;
|
|
200
|
+
const fns = variables.functions;
|
|
201
|
+
for (const fn of fns) {
|
|
202
|
+
const contextVars = this._resolveParams(fn, entity);
|
|
203
|
+
const value = await this.ruleEngine.getResultCustomFunction(fn.fn, contextVars);
|
|
204
|
+
this._updateFnsResults(variables, fn.name, value);
|
|
92
205
|
}
|
|
93
206
|
}
|
|
207
|
+
_updateFnsResults(vars, fnName, value) {
|
|
208
|
+
if (!value)
|
|
209
|
+
return;
|
|
210
|
+
vars.queries.forEach(q => {
|
|
211
|
+
q.query.forEach(cond => {
|
|
212
|
+
if (/^\s*fn:/.test(cond.value) || typeof cond.value === 'object') {
|
|
213
|
+
if (typeof cond.value === 'object' && cond.value?.from && cond.value?.to) {
|
|
214
|
+
if (cond.value.from.replace(/^fn:/, '') === fnName) {
|
|
215
|
+
cond.value.from = value;
|
|
216
|
+
}
|
|
217
|
+
if (cond.value.to.replace(/^fn:/, '') === fnName) {
|
|
218
|
+
cond.value.to = value;
|
|
219
|
+
}
|
|
220
|
+
return;
|
|
221
|
+
}
|
|
222
|
+
const name = cond.value.replace(/^fn:/, '');
|
|
223
|
+
if (name === fnName) {
|
|
224
|
+
cond.value = value;
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
});
|
|
228
|
+
});
|
|
229
|
+
}
|
|
94
230
|
};
|
|
95
231
|
exports.RateLimitingRuleGuard = RateLimitingRuleGuard;
|
|
96
232
|
exports.RateLimitingRuleGuard = RateLimitingRuleGuard = RateLimitingRuleGuard_1 = __decorate([
|
|
@@ -100,13 +236,4 @@ exports.RateLimitingRuleGuard = RateLimitingRuleGuard = RateLimitingRuleGuard_1
|
|
|
100
236
|
rule_service_1.RuleService,
|
|
101
237
|
rule_engine_service_1.RuleEngineService])
|
|
102
238
|
], RateLimitingRuleGuard);
|
|
103
|
-
function getValueFromPathOrRoot(obj, path) {
|
|
104
|
-
const valueFromPath = path
|
|
105
|
-
.split('.')
|
|
106
|
-
.reduce((acc, key) => (acc && acc[key] !== undefined ? acc[key] : undefined), obj);
|
|
107
|
-
if (valueFromPath !== undefined) {
|
|
108
|
-
return valueFromPath;
|
|
109
|
-
}
|
|
110
|
-
return obj?.[path];
|
|
111
|
-
}
|
|
112
239
|
//# sourceMappingURL=rate-limiting.guard.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rate-limiting.guard.js","sourceRoot":"","sources":["../../../src/guards/rate-limiting.guard.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,2CAQwB;AACxB,uCAAyC;AACzC,6FAGoD;AACpD,kDAAkD;AAElD,wDAAoD;AACpD,mFAA8E;
|
|
1
|
+
{"version":3,"file":"rate-limiting.guard.js","sourceRoot":"","sources":["../../../src/guards/rate-limiting.guard.ts"],"names":[],"mappings":"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"}
|
package/dist/src/index.d.ts
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
export * from './decorators/rate-limiting-rule.decorator';
|
|
2
2
|
export * from './guards/rate-limiting.guard';
|
|
3
3
|
export * from './rate-limiting.module';
|
|
4
|
+
export * from './shared/dsl/dsl.interface';
|
|
5
|
+
export * from './shared/dsl/dsl.service';
|
|
4
6
|
export * from './shared/rule-engine/rule-engine.module';
|
|
5
7
|
export * from './validators/rule.constraint';
|
|
6
8
|
export declare const RULE_ENGINE_INSTANCE = "RULE_ENGINE_INSTANCE";
|
package/dist/src/index.js
CHANGED
|
@@ -18,6 +18,8 @@ exports.CUSTOM_RULE_FUNCTIONS = exports.RULE_ENGINE_INSTANCE = void 0;
|
|
|
18
18
|
__exportStar(require("./decorators/rate-limiting-rule.decorator"), exports);
|
|
19
19
|
__exportStar(require("./guards/rate-limiting.guard"), exports);
|
|
20
20
|
__exportStar(require("./rate-limiting.module"), exports);
|
|
21
|
+
__exportStar(require("./shared/dsl/dsl.interface"), exports);
|
|
22
|
+
__exportStar(require("./shared/dsl/dsl.service"), exports);
|
|
21
23
|
__exportStar(require("./shared/rule-engine/rule-engine.module"), exports);
|
|
22
24
|
__exportStar(require("./validators/rule.constraint"), exports);
|
|
23
25
|
exports.RULE_ENGINE_INSTANCE = 'RULE_ENGINE_INSTANCE';
|
package/dist/src/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,4EAA0D;AAC1D,+DAA6C;AAC7C,yDAAuC;AACvC,0EAAwD;AACxD,+DAA6C;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,4EAA0D;AAC1D,+DAA6C;AAC7C,yDAAuC;AACvC,6DAA2C;AAC3C,2DAAyC;AACzC,0EAAwD;AACxD,+DAA6C;AAEhC,QAAA,oBAAoB,GAAG,sBAAsB,CAAC;AAC9C,QAAA,qBAAqB,GAAG,uBAAuB,CAAC"}
|
|
@@ -5,7 +5,7 @@ export declare class CreateRuleDTO implements IRule {
|
|
|
5
5
|
expression: string;
|
|
6
6
|
targetAction: string;
|
|
7
7
|
errorMessage?: string;
|
|
8
|
-
variables?: Record<string,
|
|
8
|
+
variables?: Record<string, unknown>;
|
|
9
9
|
variablesRequired?: boolean;
|
|
10
10
|
productType?: string;
|
|
11
11
|
partner?: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rule.dto.js","sourceRoot":"","sources":["../../../../src/rules/dto/rule.dto.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,6CAA8C;AAC9C,qDAAwF;AACxF,oEAAoE;AAEpE,qDAAiD;AAGjD,MAAa,aAAa;IAOxB,IAAI,CAAS;IASb,UAAU,CAAS;IAQnB,YAAY,CAAS;IASrB,YAAY,CAAU;IAStB,SAAS,
|
|
1
|
+
{"version":3,"file":"rule.dto.js","sourceRoot":"","sources":["../../../../src/rules/dto/rule.dto.ts"],"names":[],"mappings":"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"}
|