@loopstack/core 0.3.0 → 0.3.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.
Files changed (152) hide show
  1. package/CHANGELOG.md +16 -0
  2. package/dist/config/core/tools/batch-create-entity.yaml +16 -0
  3. package/dist/config/core/tools/create-entity.yaml +14 -0
  4. package/dist/config/core/tools/set-context.yaml +14 -0
  5. package/dist/config/core/tools/sql-query.yaml +26 -0
  6. package/dist/config-provider.service.js +0 -2
  7. package/dist/config-provider.service.js.map +1 -1
  8. package/dist/modules/common/common.module.js +2 -1
  9. package/dist/modules/common/common.module.js.map +1 -1
  10. package/dist/modules/common/services/expression-handler/object-expression.handler.d.ts +23 -5
  11. package/dist/modules/common/services/expression-handler/object-expression.handler.js +509 -38
  12. package/dist/modules/common/services/expression-handler/object-expression.handler.js.map +1 -1
  13. package/dist/modules/common/services/handlebars-helpers/{date-formatter-handlebars-helper.service.d.ts → date-formatter-helper.service.d.ts} +1 -1
  14. package/dist/modules/common/services/handlebars-helpers/{date-formatter-handlebars-helper.service.js → date-formatter-helper.service.js} +6 -6
  15. package/dist/modules/common/services/handlebars-helpers/date-formatter-helper.service.js.map +1 -0
  16. package/dist/modules/common/services/handlebars-helpers/index.d.ts +2 -1
  17. package/dist/modules/common/services/handlebars-helpers/index.js +2 -1
  18. package/dist/modules/common/services/handlebars-helpers/index.js.map +1 -1
  19. package/dist/modules/common/services/handlebars-helpers/operators-helper.service.d.ts +41 -0
  20. package/dist/modules/common/services/handlebars-helpers/operators-helper.service.js +418 -0
  21. package/dist/modules/common/services/handlebars-helpers/operators-helper.service.js.map +1 -0
  22. package/dist/modules/common/services/handlebars-processor.service.d.ts +4 -3
  23. package/dist/modules/common/services/handlebars-processor.service.js +75 -7
  24. package/dist/modules/common/services/handlebars-processor.service.js.map +1 -1
  25. package/dist/modules/common/services/template.service.d.ts +2 -2
  26. package/dist/modules/common/services/template.service.js +5 -5
  27. package/dist/modules/common/services/template.service.js.map +1 -1
  28. package/dist/modules/configuration/configuration.module.js +2 -2
  29. package/dist/modules/configuration/services/configuration.service.d.ts +3 -3
  30. package/dist/modules/configuration/services/configuration.service.js +6 -6
  31. package/dist/modules/configuration/services/configuration.service.js.map +1 -1
  32. package/dist/modules/configuration/services/dynamic-schema-generator.service.d.ts +8 -8
  33. package/dist/modules/configuration/services/dynamic-schema-generator.service.js +13 -13
  34. package/dist/modules/configuration/services/dynamic-schema-generator.service.js.map +1 -1
  35. package/dist/modules/configuration/services/handler-registry.service.d.ts +20 -0
  36. package/dist/modules/configuration/services/{service-registry.service.js → handler-registry.service.js} +26 -26
  37. package/dist/modules/configuration/services/{service-registry.service.js.map → handler-registry.service.js.map} +1 -1
  38. package/dist/modules/configuration/services/index.d.ts +1 -1
  39. package/dist/modules/configuration/services/index.js +1 -1
  40. package/dist/modules/persistence/handlers/create-entity.handler.d.ts +24 -0
  41. package/dist/modules/persistence/handlers/create-entity.handler.js +65 -0
  42. package/dist/modules/persistence/handlers/create-entity.handler.js.map +1 -0
  43. package/dist/modules/persistence/handlers/sql-query.handler.d.ts +24 -0
  44. package/dist/modules/persistence/handlers/sql-query.handler.js +62 -0
  45. package/dist/modules/persistence/handlers/sql-query.handler.js.map +1 -0
  46. package/dist/modules/persistence/persistence.module.js +14 -0
  47. package/dist/modules/persistence/persistence.module.js.map +1 -1
  48. package/dist/modules/persistence/services/dynamic-repository.service.d.ts +26 -0
  49. package/dist/modules/persistence/services/dynamic-repository.service.js +97 -0
  50. package/dist/modules/persistence/services/dynamic-repository.service.js.map +1 -0
  51. package/dist/modules/persistence/services/index.d.ts +1 -0
  52. package/dist/modules/persistence/services/index.js +1 -0
  53. package/dist/modules/persistence/services/index.js.map +1 -1
  54. package/dist/modules/scheduler/entities/scheduled-task.entity.d.ts +30 -0
  55. package/dist/modules/scheduler/entities/scheduled-task.entity.js +128 -0
  56. package/dist/modules/scheduler/entities/scheduled-task.entity.js.map +1 -0
  57. package/dist/modules/scheduler/events/task-execution.event.d.ts +8 -0
  58. package/dist/modules/scheduler/events/task-execution.event.js +19 -0
  59. package/dist/modules/scheduler/events/task-execution.event.js.map +1 -0
  60. package/dist/modules/scheduler/handler/create-task-schedule.handler.d.ts +55 -0
  61. package/dist/modules/scheduler/handler/create-task-schedule.handler.js +121 -0
  62. package/dist/modules/scheduler/handler/create-task-schedule.handler.js.map +1 -0
  63. package/dist/modules/scheduler/handler/remove-task-schedule.handler.d.ts +17 -0
  64. package/dist/modules/scheduler/handler/remove-task-schedule.handler.js +48 -0
  65. package/dist/modules/scheduler/handler/remove-task-schedule.handler.js.map +1 -0
  66. package/dist/modules/scheduler/interfaces/create-task-schedule.interface.d.ts +11 -0
  67. package/dist/modules/scheduler/interfaces/create-task-schedule.interface.js +3 -0
  68. package/dist/modules/scheduler/interfaces/create-task-schedule.interface.js.map +1 -0
  69. package/dist/modules/scheduler/scheduler.module.d.ts +2 -0
  70. package/dist/modules/scheduler/scheduler.module.js +39 -0
  71. package/dist/modules/scheduler/scheduler.module.js.map +1 -0
  72. package/dist/modules/scheduler/schemas/task.schema.d.ts +3 -0
  73. package/dist/modules/scheduler/schemas/task.schema.js +30 -0
  74. package/dist/modules/scheduler/schemas/task.schema.js.map +1 -0
  75. package/dist/modules/scheduler/services/task-execution.listener.d.ts +5 -0
  76. package/dist/modules/scheduler/services/task-execution.listener.js +40 -0
  77. package/dist/modules/scheduler/services/task-execution.listener.js.map +1 -0
  78. package/dist/modules/scheduler/services/task-scheduler.service.d.ts +21 -0
  79. package/dist/modules/scheduler/services/task-scheduler.service.js +194 -0
  80. package/dist/modules/scheduler/services/task-scheduler.service.js.map +1 -0
  81. package/dist/modules/workflow-processor/{tool-services/add-namespace.service.d.ts → handlers/add-namespace.handler.d.ts} +3 -3
  82. package/dist/modules/workflow-processor/{tool-services/add-namespace.service.js → handlers/add-namespace.handler.js} +9 -10
  83. package/dist/modules/workflow-processor/handlers/add-namespace.handler.js.map +1 -0
  84. package/dist/modules/workflow-processor/{tool-services/batch-create-documents.service.d.ts → handlers/batch-create-documents.handler.d.ts} +5 -5
  85. package/dist/modules/workflow-processor/{tool-services/batch-create-documents.service.js → handlers/batch-create-documents.handler.js} +9 -10
  86. package/dist/modules/workflow-processor/handlers/batch-create-documents.handler.js.map +1 -0
  87. package/dist/modules/workflow-processor/{tool-services/create-document.service.d.ts → handlers/create-document.handler.d.ts} +16 -16
  88. package/dist/modules/workflow-processor/{tool-services/create-document.service.js → handlers/create-document.handler.js} +10 -11
  89. package/dist/modules/workflow-processor/handlers/create-document.handler.js.map +1 -0
  90. package/dist/modules/workflow-processor/handlers/index.d.ts +9 -0
  91. package/dist/modules/workflow-processor/{tool-services → handlers}/index.js +9 -9
  92. package/dist/modules/workflow-processor/handlers/index.js.map +1 -0
  93. package/dist/modules/workflow-processor/{tool-services/load-document.service.d.ts → handlers/load-document.handler.d.ts} +3 -3
  94. package/dist/modules/workflow-processor/{tool-services/load-document.service.js → handlers/load-document.handler.js} +9 -10
  95. package/dist/modules/workflow-processor/handlers/load-document.handler.js.map +1 -0
  96. package/dist/modules/workflow-processor/{tool-services/mock.service.d.ts → handlers/mock.handler.d.ts} +3 -3
  97. package/dist/modules/workflow-processor/{tool-services/mock.service.js → handlers/mock.handler.js} +9 -13
  98. package/dist/modules/workflow-processor/handlers/mock.handler.js.map +1 -0
  99. package/dist/modules/workflow-processor/{tool-services/set-context.service.d.ts → handlers/set-context.handler.d.ts} +3 -3
  100. package/dist/modules/workflow-processor/{tool-services/set-context.service.js → handlers/set-context.handler.js} +9 -10
  101. package/dist/modules/workflow-processor/handlers/set-context.handler.js.map +1 -0
  102. package/dist/modules/workflow-processor/{tool-services/set-target-place.service.d.ts → handlers/set-target-place.handler.d.ts} +3 -3
  103. package/dist/modules/workflow-processor/{tool-services/set-target-place.service.js → handlers/set-target-place.handler.js} +16 -15
  104. package/dist/modules/workflow-processor/handlers/set-target-place.handler.js.map +1 -0
  105. package/dist/modules/workflow-processor/{tool-services/transition-selector.service.d.ts → handlers/transition-selector.handler.d.ts} +3 -3
  106. package/dist/modules/workflow-processor/{tool-services/transition-selector.service.js → handlers/transition-selector.handler.js} +9 -10
  107. package/dist/modules/workflow-processor/handlers/transition-selector.handler.js.map +1 -0
  108. package/dist/modules/workflow-processor/{tool-services/update-document.service.d.ts → handlers/update-document.handler.d.ts} +16 -16
  109. package/dist/modules/workflow-processor/{tool-services/update-document.service.js → handlers/update-document.handler.js} +9 -10
  110. package/dist/modules/workflow-processor/handlers/update-document.handler.js.map +1 -0
  111. package/dist/modules/workflow-processor/services/handler-execution.service.d.ts +12 -0
  112. package/dist/modules/workflow-processor/services/{service-execution.service.js → handler-execution.service.js} +21 -21
  113. package/dist/modules/workflow-processor/services/{service-execution.service.js.map → handler-execution.service.js.map} +1 -1
  114. package/dist/modules/workflow-processor/services/index.d.ts +1 -1
  115. package/dist/modules/workflow-processor/services/index.js +1 -1
  116. package/dist/modules/workflow-processor/services/pipeline-processor.service.js +10 -3
  117. package/dist/modules/workflow-processor/services/pipeline-processor.service.js.map +1 -1
  118. package/dist/modules/workflow-processor/services/state-machine-config.service.js +3 -3
  119. package/dist/modules/workflow-processor/services/state-machine-config.service.js.map +1 -1
  120. package/dist/modules/workflow-processor/services/state-machine-processor.service.d.ts +3 -3
  121. package/dist/modules/workflow-processor/services/state-machine-processor.service.js +6 -6
  122. package/dist/modules/workflow-processor/services/state-machine-processor.service.js.map +1 -1
  123. package/dist/modules/workflow-processor/services/tool-execution.service.d.ts +4 -4
  124. package/dist/modules/workflow-processor/services/tool-execution.service.js +3 -3
  125. package/dist/modules/workflow-processor/validators/initial-run.validator.js +0 -1
  126. package/dist/modules/workflow-processor/validators/initial-run.validator.js.map +1 -1
  127. package/dist/modules/workflow-processor/validators/workflow-dependencies.validator.js +0 -1
  128. package/dist/modules/workflow-processor/validators/workflow-dependencies.validator.js.map +1 -1
  129. package/dist/modules/workflow-processor/validators/workflow-option.validator.js +0 -1
  130. package/dist/modules/workflow-processor/validators/workflow-option.validator.js.map +1 -1
  131. package/dist/modules/workflow-processor/workflow-processor.module.js +11 -11
  132. package/dist/modules/workflow-processor/workflow-processor.module.js.map +1 -1
  133. package/dist/services/migrations.service.js +4 -4
  134. package/dist/services/migrations.service.js.map +1 -1
  135. package/dist/utils/load-configuration.js +3 -1
  136. package/dist/utils/load-configuration.js.map +1 -1
  137. package/package.json +20 -9
  138. package/dist/config/core.yaml +0 -1
  139. package/dist/modules/common/services/handlebars-helpers/date-formatter-handlebars-helper.service.js.map +0 -1
  140. package/dist/modules/configuration/services/service-registry.service.d.ts +0 -20
  141. package/dist/modules/workflow-processor/services/service-execution.service.d.ts +0 -12
  142. package/dist/modules/workflow-processor/tool-services/add-namespace.service.js.map +0 -1
  143. package/dist/modules/workflow-processor/tool-services/batch-create-documents.service.js.map +0 -1
  144. package/dist/modules/workflow-processor/tool-services/create-document.service.js.map +0 -1
  145. package/dist/modules/workflow-processor/tool-services/index.d.ts +0 -9
  146. package/dist/modules/workflow-processor/tool-services/index.js.map +0 -1
  147. package/dist/modules/workflow-processor/tool-services/load-document.service.js.map +0 -1
  148. package/dist/modules/workflow-processor/tool-services/mock.service.js.map +0 -1
  149. package/dist/modules/workflow-processor/tool-services/set-context.service.js.map +0 -1
  150. package/dist/modules/workflow-processor/tool-services/set-target-place.service.js.map +0 -1
  151. package/dist/modules/workflow-processor/tool-services/transition-selector.service.js.map +0 -1
  152. package/dist/modules/workflow-processor/tool-services/update-document.service.js.map +0 -1
@@ -13,33 +13,47 @@ Object.defineProperty(exports, "__esModule", { value: true });
13
13
  exports.ObjectExpressionHandler = void 0;
14
14
  const common_1 = require("@nestjs/common");
15
15
  const lodash_1 = require("lodash");
16
- const variable_sanitizer_service_1 = require("../variable-sanitizer.service");
17
16
  const object_expression_error_1 = require("../../errors/object-expression.error");
18
17
  let ObjectExpressionHandler = ObjectExpressionHandler_1 = class ObjectExpressionHandler {
19
- variableSanitizerService;
20
18
  logger = new common_1.Logger(ObjectExpressionHandler_1.name);
21
19
  DEFAULT_MAX_DEPTH = 10;
22
20
  DEFAULT_MAX_LENGTH = 1000;
21
+ RESOURCE_LIMITS = {
22
+ maxIterations: 1000,
23
+ maxMemoryMB: 128,
24
+ timeoutMs: 5000,
25
+ maxDataSize: 1024 * 1024,
26
+ maxObjectDepth: 10,
27
+ };
23
28
  EXPRESSION_PATTERN = /^\$\{(.+)\}$/;
24
- DANGEROUS_PATTERNS = [
25
- /^__/,
26
- /\b__proto__\b/i,
27
- /\bprototype\b$/i,
28
- /\bconstructor\b$/i,
29
- /\beval\b$/i,
30
- /\bfunction\b$/i,
31
- /\brequire\b$/i,
32
- /\bimport\b$/i,
33
- /\bprocess\b$/i,
34
- /\bprocess\.env\b/i,
35
- /\bglobal\b$/i,
36
- /\bwindow\b$/i,
37
- /\bBuffer\b$/i,
38
- /\bconsole\b$/i,
39
- ];
29
+ FUNCTION_PATTERN = /^([a-zA-Z_][a-zA-Z0-9_]*)\s*\(\s*(.*?)\s*\)$/;
40
30
  VALID_SEGMENT_PATTERN = /^[a-zA-Z0-9_-]+(\[\d+\])?$/;
41
- constructor(variableSanitizerService) {
42
- this.variableSanitizerService = variableSanitizerService;
31
+ FORBIDDEN_PROPERTIES = new Set([
32
+ '__proto__',
33
+ 'constructor',
34
+ 'prototype',
35
+ '__defineGetter__',
36
+ '__defineSetter__',
37
+ '__lookupGetter__',
38
+ '__lookupSetter__',
39
+ 'hasOwnProperty',
40
+ 'isPrototypeOf',
41
+ 'propertyIsEnumerable',
42
+ 'toString',
43
+ 'valueOf',
44
+ 'console',
45
+ 'Buffer',
46
+ 'window',
47
+ 'global',
48
+ 'process',
49
+ 'import',
50
+ 'require',
51
+ 'function',
52
+ 'eval',
53
+ ]);
54
+ functions = new Map();
55
+ constructor() {
56
+ this.registerBuiltInFunctions();
43
57
  }
44
58
  canHandle(value) {
45
59
  if (typeof value !== 'string') {
@@ -57,8 +71,14 @@ let ObjectExpressionHandler = ObjectExpressionHandler_1 = class ObjectExpression
57
71
  return this.processExpression(content, context);
58
72
  }
59
73
  catch (error) {
60
- this.logger.error(`Failed to process object expression (${content}): ${error.message}`, {
61
- expression: content,
74
+ this.logger.error(`Failed to process object expression: ${error.message}`);
75
+ this.logger.debug('Expression processing failed', {
76
+ expression: content.substring(0, 100),
77
+ errorType: error.constructor.name,
78
+ errorCode: error instanceof object_expression_error_1.ObjectExpressionError ? error.code : 'UNKNOWN',
79
+ variableKeys: Object.keys(variables).slice(0, 10),
80
+ expressionLength: content.length,
81
+ timestamp: new Date().toISOString(),
62
82
  });
63
83
  if (error instanceof object_expression_error_1.ObjectExpressionError) {
64
84
  throw error;
@@ -69,17 +89,23 @@ let ObjectExpressionHandler = ObjectExpressionHandler_1 = class ObjectExpression
69
89
  processExpression(content, context) {
70
90
  const expression = this.extractExpression(content);
71
91
  this.validateExpression(expression);
72
- const sanitizedVariables = this.variableSanitizerService.sanitizeVariables(context.variables);
73
- return this.evaluateExpression(expression, sanitizedVariables);
92
+ return this.evaluateExpression(expression, context.variables);
74
93
  }
75
94
  extractExpression(content) {
76
95
  const trimmed = content.trim();
77
96
  const match = trimmed.match(this.EXPRESSION_PATTERN);
78
97
  if (!match || !match[1]) {
98
+ this.logger.debug('Expression format validation failed', {
99
+ content: trimmed.substring(0, 50),
100
+ patternUsed: this.EXPRESSION_PATTERN.source,
101
+ });
79
102
  throw new object_expression_error_1.ObjectExpressionError('Invalid expression format', 'INVALID_FORMAT');
80
103
  }
81
104
  const expression = match[1].trim();
82
105
  if (!expression) {
106
+ this.logger.debug('Empty expression detected', {
107
+ originalContent: trimmed,
108
+ });
83
109
  throw new object_expression_error_1.ObjectExpressionError('Empty expression not allowed', 'EMPTY_EXPRESSION');
84
110
  }
85
111
  return expression;
@@ -87,39 +113,484 @@ let ObjectExpressionHandler = ObjectExpressionHandler_1 = class ObjectExpression
87
113
  validateExpression(expression, options = {}) {
88
114
  const { maxDepth = this.DEFAULT_MAX_DEPTH, maxLength = this.DEFAULT_MAX_LENGTH, } = options;
89
115
  if (expression.length > maxLength) {
116
+ this.logger.debug('Expression length exceeded', {
117
+ expressionLength: expression.length,
118
+ maxLength,
119
+ expressionPrefix: expression.substring(0, 50),
120
+ });
90
121
  throw new object_expression_error_1.ObjectExpressionError(`Expression too long (max: ${maxLength} characters)`, 'EXPRESSION_TOO_LONG');
91
122
  }
92
- const segments = this.parseExpressionSegments(expression);
93
- if (segments.length > maxDepth) {
94
- throw new object_expression_error_1.ObjectExpressionError(`Expression depth too high (max: ${maxDepth} levels)`, 'DEPTH_EXCEEDED');
123
+ if (this.isFunctionCall(expression)) {
124
+ this.validateFunctionCall(expression);
125
+ }
126
+ else {
127
+ const segments = this.parseExpressionSegments(expression);
128
+ if (segments.length > maxDepth) {
129
+ this.logger.debug('Expression depth exceeded', {
130
+ segmentCount: segments.length,
131
+ maxDepth,
132
+ segments: segments.slice(0, 5),
133
+ });
134
+ throw new object_expression_error_1.ObjectExpressionError(`Expression depth too high (max: ${maxDepth} levels)`, 'DEPTH_EXCEEDED');
135
+ }
136
+ this.validateSegmentsSecurity(segments);
137
+ }
138
+ }
139
+ evaluateExpression(expression, variables) {
140
+ const resourceMonitor = {
141
+ iterations: 0,
142
+ startTime: Date.now(),
143
+ memoryBaseline: process.memoryUsage().heapUsed,
144
+ operationMemory: 0,
145
+ };
146
+ this.checkResourceLimits(resourceMonitor);
147
+ try {
148
+ if (this.isFunctionCall(expression)) {
149
+ return this.evaluateFunctionCall(expression, variables, resourceMonitor);
150
+ }
151
+ return (0, lodash_1.get)(variables, expression);
152
+ }
153
+ catch (error) {
154
+ this.logger.debug('Expression evaluation failed', {
155
+ expression: expression.substring(0, 100),
156
+ errorMessage: error.message,
157
+ iterations: resourceMonitor.iterations,
158
+ timeElapsed: Date.now() - resourceMonitor.startTime,
159
+ });
160
+ throw new object_expression_error_1.ObjectExpressionError('Failed to evaluate expression', 'EVALUATION_FAILED');
95
161
  }
96
- this.validateSegmentsSecurity(segments);
162
+ }
163
+ evaluateFunctionCall(expression, variables, resourceMonitor) {
164
+ const functionCall = this.parseFunctionCall(expression);
165
+ const func = this.functions.get(functionCall.name);
166
+ const resolvedArgs = functionCall.args.map((arg) => {
167
+ if (this.isPropertyAccess(arg)) {
168
+ this.checkResourceLimits(resourceMonitor);
169
+ return (0, lodash_1.get)(variables, arg);
170
+ }
171
+ else {
172
+ return this.parseLiteral(arg);
173
+ }
174
+ });
175
+ this.checkResourceLimits(resourceMonitor);
176
+ return this.wrapFunctionWithLimits(func, resourceMonitor)(resolvedArgs, variables);
177
+ }
178
+ parseLiteral(arg) {
179
+ if ((arg.startsWith('"') && arg.endsWith('"')) ||
180
+ (arg.startsWith("'") && arg.endsWith("'"))) {
181
+ return arg.slice(1, -1);
182
+ }
183
+ return arg;
184
+ }
185
+ wrapFunctionWithLimits(func, resourceMonitor) {
186
+ return (args, variables) => {
187
+ if (func.minArgs !== undefined && args.length < func.minArgs) {
188
+ this.logger.debug('Function argument count insufficient', {
189
+ functionName: func.name,
190
+ providedArgs: args.length,
191
+ minArgs: func.minArgs,
192
+ });
193
+ throw new object_expression_error_1.ObjectExpressionError(`Function ${func.name} requires at least ${func.minArgs} arguments`, 'INSUFFICIENT_ARGS');
194
+ }
195
+ if (func.maxArgs !== undefined && args.length > func.maxArgs) {
196
+ this.logger.debug('Function argument count exceeded', {
197
+ functionName: func.name,
198
+ providedArgs: args.length,
199
+ maxArgs: func.maxArgs,
200
+ });
201
+ throw new object_expression_error_1.ObjectExpressionError(`Function ${func.name} accepts at most ${func.maxArgs} arguments`, 'TOO_MANY_ARGS');
202
+ }
203
+ return func.handler(args, variables);
204
+ };
205
+ }
206
+ checkResourceLimits(resourceMonitor) {
207
+ const currentTime = Date.now();
208
+ const timeElapsed = currentTime - resourceMonitor.startTime;
209
+ if (timeElapsed > this.RESOURCE_LIMITS.timeoutMs) {
210
+ this.logger.debug('Resource timeout exceeded', {
211
+ timeElapsed,
212
+ timeoutMs: this.RESOURCE_LIMITS.timeoutMs,
213
+ iterations: resourceMonitor.iterations,
214
+ });
215
+ throw new object_expression_error_1.ObjectExpressionError('Resource timeout exceeded', 'TIMEOUT_EXCEEDED');
216
+ }
217
+ resourceMonitor.iterations++;
218
+ if (resourceMonitor.iterations > this.RESOURCE_LIMITS.maxIterations) {
219
+ this.logger.debug('Iteration limit exceeded', {
220
+ iterations: resourceMonitor.iterations,
221
+ maxIterations: this.RESOURCE_LIMITS.maxIterations,
222
+ timeElapsed,
223
+ });
224
+ throw new object_expression_error_1.ObjectExpressionError('Iteration limit exceeded', 'ITERATION_LIMIT_EXCEEDED');
225
+ }
226
+ const currentMemory = process.memoryUsage().heapUsed;
227
+ const memoryDiff = (currentMemory - resourceMonitor.memoryBaseline) / 1024 / 1024;
228
+ if (memoryDiff > this.RESOURCE_LIMITS.maxMemoryMB) {
229
+ this.logger.debug('Memory limit exceeded', {
230
+ memoryDiff: memoryDiff.toFixed(2),
231
+ maxMemoryMB: this.RESOURCE_LIMITS.maxMemoryMB,
232
+ iterations: resourceMonitor.iterations,
233
+ timeElapsed,
234
+ });
235
+ throw new object_expression_error_1.ObjectExpressionError('Memory limit exceeded', 'MEMORY_LIMIT_EXCEEDED');
236
+ }
237
+ }
238
+ isFunctionCall(expression) {
239
+ const maxLength = 1000;
240
+ if (expression.length > maxLength) {
241
+ return false;
242
+ }
243
+ return this.FUNCTION_PATTERN.test(expression);
244
+ }
245
+ validateFunctionCall(expression) {
246
+ const functionCall = this.parseFunctionCall(expression);
247
+ if (!this.functions.has(functionCall.name)) {
248
+ this.logger.debug('Unknown function called', {
249
+ functionName: functionCall.name,
250
+ availableFunctions: Array.from(this.functions.keys()),
251
+ });
252
+ throw new object_expression_error_1.ObjectExpressionError(`Unknown function: ${functionCall.name}`, 'UNKNOWN_FUNCTION');
253
+ }
254
+ const func = this.functions.get(functionCall.name);
255
+ if (func.minArgs !== undefined && functionCall.args.length < func.minArgs) {
256
+ this.logger.debug('Function validation failed - insufficient arguments', {
257
+ functionName: functionCall.name,
258
+ providedArgs: functionCall.args.length,
259
+ minArgs: func.minArgs,
260
+ args: functionCall.args,
261
+ });
262
+ throw new object_expression_error_1.ObjectExpressionError(`Function ${functionCall.name} requires at least ${func.minArgs} arguments`, 'INSUFFICIENT_ARGS');
263
+ }
264
+ if (func.maxArgs !== undefined && functionCall.args.length > func.maxArgs) {
265
+ this.logger.debug('Function validation failed - too many arguments', {
266
+ functionName: functionCall.name,
267
+ providedArgs: functionCall.args.length,
268
+ maxArgs: func.maxArgs,
269
+ args: functionCall.args,
270
+ });
271
+ throw new object_expression_error_1.ObjectExpressionError(`Function ${functionCall.name} accepts at most ${func.maxArgs} arguments`, 'TOO_MANY_ARGS');
272
+ }
273
+ for (const arg of functionCall.args) {
274
+ if (this.isPropertyAccess(arg)) {
275
+ const segments = this.parseExpressionSegments(arg);
276
+ this.validateSegmentsSecurity(segments);
277
+ }
278
+ }
279
+ }
280
+ parseFunctionCall(expression) {
281
+ const match = expression.match(this.FUNCTION_PATTERN);
282
+ if (!match) {
283
+ this.logger.debug('Function call parsing failed', {
284
+ expression: expression.substring(0, 100),
285
+ patternUsed: this.FUNCTION_PATTERN.source,
286
+ });
287
+ throw new object_expression_error_1.ObjectExpressionError('Invalid function call format', 'INVALID_FUNCTION_FORMAT');
288
+ }
289
+ const name = match[1];
290
+ const argsString = match[2];
291
+ const args = argsString
292
+ ? argsString
293
+ .split(',')
294
+ .map((arg) => arg.trim())
295
+ .filter((arg) => arg)
296
+ : [];
297
+ return { name, args };
298
+ }
299
+ isPropertyAccess(arg) {
300
+ return /^[a-zA-Z_][a-zA-Z0-9_.-]*$/.test(arg);
97
301
  }
98
302
  parseExpressionSegments(expression) {
99
303
  return expression.split('.').filter((segment) => segment.length > 0);
100
304
  }
101
305
  validateSegmentsSecurity(segments) {
102
306
  for (const segment of segments) {
103
- if (this.DANGEROUS_PATTERNS.some((pattern) => pattern.test(segment))) {
104
- throw new object_expression_error_1.ObjectExpressionError('Expression contains prohibited patterns', 'SECURITY_VIOLATION');
307
+ if (this.FORBIDDEN_PROPERTIES.has(segment)) {
308
+ this.logger.debug('Forbidden property access attempt', {
309
+ segment,
310
+ allSegments: segments,
311
+ forbiddenProperties: Array.from(this.FORBIDDEN_PROPERTIES),
312
+ });
313
+ throw new object_expression_error_1.ObjectExpressionError('Expression contains forbidden property access', 'FORBIDDEN_PROPERTY');
105
314
  }
106
315
  if (!this.VALID_SEGMENT_PATTERN.test(segment)) {
316
+ this.logger.debug('Invalid segment detected', {
317
+ segment,
318
+ allSegments: segments,
319
+ patternUsed: this.VALID_SEGMENT_PATTERN.source,
320
+ });
107
321
  throw new object_expression_error_1.ObjectExpressionError('Expression contains invalid characters or format', 'INVALID_SEGMENT');
108
322
  }
109
323
  }
110
324
  }
111
- evaluateExpression(expression, variables) {
112
- try {
113
- return (0, lodash_1.get)(variables, expression);
114
- }
115
- catch (error) {
116
- throw new object_expression_error_1.ObjectExpressionError('Failed to evaluate expression path', 'EVALUATION_FAILED');
117
- }
325
+ registerBuiltInFunctions() {
326
+ this.registerFunction({
327
+ name: 'concat',
328
+ handler: (args) => {
329
+ return args.reduce((result, arg) => {
330
+ if (typeof arg === 'string') {
331
+ return result + arg;
332
+ }
333
+ this.logger.debug('concat function type error', {
334
+ argType: typeof arg,
335
+ argValue: String(arg).substring(0, 50),
336
+ });
337
+ throw new object_expression_error_1.ObjectExpressionError('concat() function only accepts strings', 'INVALID_ARGUMENT_TYPE');
338
+ }, '');
339
+ },
340
+ minArgs: 2,
341
+ });
342
+ this.registerFunction({
343
+ name: 'map',
344
+ handler: (args) => {
345
+ const array = args[0];
346
+ const propertyPath = args[1];
347
+ return (0, lodash_1.map)(array, propertyPath);
348
+ },
349
+ minArgs: 2,
350
+ });
351
+ this.registerFunction({
352
+ name: 'difference',
353
+ handler: (args) => {
354
+ return (0, lodash_1.difference)(args[0], args[1]);
355
+ },
356
+ minArgs: 2,
357
+ });
358
+ this.registerFunction({
359
+ name: 'or',
360
+ handler: (args) => {
361
+ return !!args[0] || !!args[1];
362
+ },
363
+ minArgs: 2,
364
+ });
365
+ this.registerFunction({
366
+ name: 'flatMap',
367
+ handler: (args, variables) => {
368
+ const array = args[0];
369
+ const propertyPath = args[1];
370
+ if (!Array.isArray(array)) {
371
+ this.logger.debug('flatMap function type error - not array', {
372
+ argType: typeof array,
373
+ argValue: String(array).substring(0, 50),
374
+ });
375
+ throw new object_expression_error_1.ObjectExpressionError('flatMap() function first argument must be an array', 'INVALID_ARGUMENT_TYPE');
376
+ }
377
+ if (typeof propertyPath !== 'string') {
378
+ this.logger.debug('flatMap function type error - property path not string', {
379
+ propertyPathType: typeof propertyPath,
380
+ propertyPath: String(propertyPath),
381
+ });
382
+ throw new object_expression_error_1.ObjectExpressionError('flatMap() function second argument must be a property path string', 'INVALID_ARGUMENT_TYPE');
383
+ }
384
+ if (array.length > this.RESOURCE_LIMITS.maxIterations) {
385
+ this.logger.debug('flatMap array too large', {
386
+ arrayLength: array.length,
387
+ maxIterations: this.RESOURCE_LIMITS.maxIterations,
388
+ });
389
+ throw new object_expression_error_1.ObjectExpressionError(`Array too large for flatMap (max: ${this.RESOURCE_LIMITS.maxIterations})`, 'ARRAY_TOO_LARGE');
390
+ }
391
+ const result = [];
392
+ let iterations = 0;
393
+ for (const item of array) {
394
+ if (++iterations > this.RESOURCE_LIMITS.maxIterations) {
395
+ this.logger.debug('flatMap iteration limit exceeded', {
396
+ iterations,
397
+ maxIterations: this.RESOURCE_LIMITS.maxIterations,
398
+ resultLength: result.length,
399
+ });
400
+ throw new object_expression_error_1.ObjectExpressionError('Iteration limit exceeded in flatMap', 'ITERATION_LIMIT_EXCEEDED');
401
+ }
402
+ if (typeof item === 'object' && item !== null) {
403
+ const value = (0, lodash_1.get)(item, propertyPath);
404
+ if (Array.isArray(value)) {
405
+ for (const valueItem of value) {
406
+ if (result.length >= this.RESOURCE_LIMITS.maxIterations) {
407
+ this.logger.debug('flatMap result too large', {
408
+ resultLength: result.length,
409
+ maxIterations: this.RESOURCE_LIMITS.maxIterations,
410
+ });
411
+ throw new object_expression_error_1.ObjectExpressionError('Result array too large in flatMap', 'RESULT_TOO_LARGE');
412
+ }
413
+ result.push(valueItem);
414
+ }
415
+ }
416
+ else if (value !== undefined) {
417
+ if (result.length >= this.RESOURCE_LIMITS.maxIterations) {
418
+ this.logger.debug('flatMap result too large', {
419
+ resultLength: result.length,
420
+ maxIterations: this.RESOURCE_LIMITS.maxIterations,
421
+ });
422
+ throw new object_expression_error_1.ObjectExpressionError('Result array too large in flatMap', 'RESULT_TOO_LARGE');
423
+ }
424
+ result.push(value);
425
+ }
426
+ }
427
+ }
428
+ return result;
429
+ },
430
+ minArgs: 2,
431
+ maxArgs: 2,
432
+ });
433
+ this.registerFunction({
434
+ name: 'length',
435
+ handler: (args) => {
436
+ const value = args[0];
437
+ if (Array.isArray(value) || typeof value === 'string') {
438
+ return value.length;
439
+ }
440
+ this.logger.debug('length function type error', {
441
+ argType: typeof value,
442
+ isArray: Array.isArray(value),
443
+ argValue: String(value).substring(0, 50),
444
+ });
445
+ throw new object_expression_error_1.ObjectExpressionError('length() function only accepts arrays or strings', 'INVALID_ARGUMENT_TYPE');
446
+ },
447
+ minArgs: 1,
448
+ maxArgs: 1,
449
+ });
450
+ this.registerFunction({
451
+ name: 'first',
452
+ handler: (args) => {
453
+ const array = args[0];
454
+ if (!Array.isArray(array)) {
455
+ this.logger.debug('first function type error', {
456
+ argType: typeof array,
457
+ argValue: String(array).substring(0, 50),
458
+ });
459
+ throw new object_expression_error_1.ObjectExpressionError('first() function only accepts arrays', 'INVALID_ARGUMENT_TYPE');
460
+ }
461
+ return array[0];
462
+ },
463
+ minArgs: 1,
464
+ maxArgs: 1,
465
+ });
466
+ this.registerFunction({
467
+ name: 'last',
468
+ handler: (args) => {
469
+ const array = args[0];
470
+ if (!Array.isArray(array)) {
471
+ this.logger.debug('last function type error', {
472
+ argType: typeof array,
473
+ argValue: String(array).substring(0, 50),
474
+ });
475
+ throw new object_expression_error_1.ObjectExpressionError('last() function only accepts arrays', 'INVALID_ARGUMENT_TYPE');
476
+ }
477
+ return array[array.length - 1];
478
+ },
479
+ minArgs: 1,
480
+ maxArgs: 1,
481
+ });
482
+ this.registerFunction({
483
+ name: 'merge',
484
+ handler: (args) => {
485
+ const obj1 = args[0];
486
+ const obj2 = args[1];
487
+ if (typeof obj1 !== 'object' || obj1 === null || Array.isArray(obj1)) {
488
+ this.logger.debug('merge function type error - first arg not object', {
489
+ argType: typeof obj1,
490
+ argValue: String(obj1).substring(0, 50),
491
+ });
492
+ throw new object_expression_error_1.ObjectExpressionError('merge() function first argument must be an object', 'INVALID_ARGUMENT_TYPE');
493
+ }
494
+ if (typeof obj2 !== 'object' || obj2 === null || Array.isArray(obj2)) {
495
+ this.logger.debug('merge function type error - second arg not object', {
496
+ argType: typeof obj2,
497
+ argValue: String(obj2).substring(0, 50),
498
+ });
499
+ throw new object_expression_error_1.ObjectExpressionError('merge() function second argument must be an object', 'INVALID_ARGUMENT_TYPE');
500
+ }
501
+ const combinedKeys = new Set([
502
+ ...Object.keys(obj1),
503
+ ...Object.keys(obj2),
504
+ ]);
505
+ if (combinedKeys.size > this.RESOURCE_LIMITS.maxIterations) {
506
+ this.logger.debug('merge result too large', {
507
+ combinedKeyCount: combinedKeys.size,
508
+ maxIterations: this.RESOURCE_LIMITS.maxIterations,
509
+ });
510
+ throw new object_expression_error_1.ObjectExpressionError(`Merged object too large (max keys: ${this.RESOURCE_LIMITS.maxIterations})`, 'OBJECT_TOO_LARGE');
511
+ }
512
+ return { ...obj1, ...obj2 };
513
+ },
514
+ minArgs: 2,
515
+ maxArgs: 2,
516
+ });
517
+ this.registerFunction({
518
+ name: 'mergeWith',
519
+ handler: (args) => {
520
+ const array = args[0];
521
+ const commonObject = args[1];
522
+ if (!Array.isArray(array)) {
523
+ this.logger.debug('mergeWith function type error - not array', {
524
+ argType: typeof array,
525
+ argValue: String(array).substring(0, 50),
526
+ });
527
+ throw new object_expression_error_1.ObjectExpressionError('mergeWith() function first argument must be an array', 'INVALID_ARGUMENT_TYPE');
528
+ }
529
+ if (typeof commonObject !== 'object' ||
530
+ commonObject === null ||
531
+ Array.isArray(commonObject)) {
532
+ this.logger.debug('mergeWith function type error - common object not object', {
533
+ argType: typeof commonObject,
534
+ argValue: String(commonObject).substring(0, 50),
535
+ });
536
+ throw new object_expression_error_1.ObjectExpressionError('mergeWith() function second argument must be an object', 'INVALID_ARGUMENT_TYPE');
537
+ }
538
+ if (array.length > this.RESOURCE_LIMITS.maxIterations) {
539
+ this.logger.debug('mergeWith array too large', {
540
+ arrayLength: array.length,
541
+ maxIterations: this.RESOURCE_LIMITS.maxIterations,
542
+ });
543
+ throw new object_expression_error_1.ObjectExpressionError(`Array too large for mergeWith (max: ${this.RESOURCE_LIMITS.maxIterations})`, 'ARRAY_TOO_LARGE');
544
+ }
545
+ const result = [];
546
+ let iterations = 0;
547
+ for (const item of array) {
548
+ if (++iterations > this.RESOURCE_LIMITS.maxIterations) {
549
+ this.logger.debug('mergeWith iteration limit exceeded', {
550
+ iterations,
551
+ maxIterations: this.RESOURCE_LIMITS.maxIterations,
552
+ });
553
+ throw new object_expression_error_1.ObjectExpressionError('Iteration limit exceeded in mergeWith', 'ITERATION_LIMIT_EXCEEDED');
554
+ }
555
+ if (typeof item === 'object' &&
556
+ item !== null &&
557
+ !Array.isArray(item)) {
558
+ const combinedKeys = new Set([
559
+ ...Object.keys(item),
560
+ ...Object.keys(commonObject),
561
+ ]);
562
+ if (combinedKeys.size > this.RESOURCE_LIMITS.maxIterations) {
563
+ this.logger.debug('mergeWith merged item too large', {
564
+ combinedKeyCount: combinedKeys.size,
565
+ maxIterations: this.RESOURCE_LIMITS.maxIterations,
566
+ itemIndex: iterations - 1,
567
+ });
568
+ throw new object_expression_error_1.ObjectExpressionError('Merged item too large in mergeWith', 'OBJECT_TOO_LARGE');
569
+ }
570
+ result.push({ ...item, ...commonObject });
571
+ }
572
+ else {
573
+ this.logger.debug('mergeWith skipping non-object item', {
574
+ itemType: typeof item,
575
+ itemValue: String(item).substring(0, 50),
576
+ itemIndex: iterations - 1,
577
+ });
578
+ result.push(item);
579
+ }
580
+ }
581
+ return result;
582
+ },
583
+ minArgs: 2,
584
+ maxArgs: 2,
585
+ });
586
+ }
587
+ registerFunction(func) {
588
+ this.functions.set(func.name, func);
118
589
  }
119
590
  };
120
591
  exports.ObjectExpressionHandler = ObjectExpressionHandler;
121
592
  exports.ObjectExpressionHandler = ObjectExpressionHandler = ObjectExpressionHandler_1 = __decorate([
122
593
  (0, common_1.Injectable)(),
123
- __metadata("design:paramtypes", [variable_sanitizer_service_1.VariableSanitizerService])
594
+ __metadata("design:paramtypes", [])
124
595
  ], ObjectExpressionHandler);
125
596
  //# sourceMappingURL=object-expression.handler.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"object-expression.handler.js","sourceRoot":"","sources":["../../../../../src/modules/common/services/expression-handler/object-expression.handler.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"object-expression.handler.js","sourceRoot":"","sources":["../../../../../src/modules/common/services/expression-handler/object-expression.handler.ts"],"names":[],"mappings":"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"}