@flusys/nestjs-entity-builder 9.1.0 → 9.1.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 (65) hide show
  1. package/README.md +59 -26
  2. package/config/entity-builder.constants.d.ts +2 -0
  3. package/config/message-keys.d.ts +96 -12
  4. package/controllers/definition-bundle.controller.d.ts +15 -0
  5. package/controllers/flow-definition.controller.d.ts +7 -1
  6. package/controllers/index.d.ts +1 -1
  7. package/dtos/definition-bundle.dto.d.ts +57 -0
  8. package/dtos/flow.dto.d.ts +12 -20
  9. package/dtos/index.d.ts +1 -0
  10. package/entities/flow-definition.entity.d.ts +3 -9
  11. package/entities/flow-execution.entity.d.ts +3 -0
  12. package/entities/flow-version.entity.d.ts +10 -0
  13. package/entities/index.d.ts +3 -3
  14. package/fesm/21.js +101 -16
  15. package/fesm/458.js +695 -0
  16. package/fesm/{996.js → 677.js} +1582 -1047
  17. package/fesm/794.js +135 -240
  18. package/fesm/{489.js → 857.js} +216 -289
  19. package/fesm/{719.js → 870.js} +1955 -220
  20. package/fesm/{362.js → 897.js} +566 -2
  21. package/fesm/{606.js → 946.js} +564 -290
  22. package/fesm/config/index.js +15 -2
  23. package/fesm/controllers/index.js +9 -9
  24. package/fesm/docs/index.js +7 -4
  25. package/fesm/dtos/index.js +451 -256
  26. package/fesm/entities/index.js +58 -3
  27. package/fesm/guards/index.js +101 -22
  28. package/fesm/index.js +444 -948
  29. package/fesm/interfaces/index.js +92 -4
  30. package/fesm/modules/index.js +10 -628
  31. package/fesm/rule-engine/index.js +12 -3
  32. package/fesm/services/index.js +97 -27
  33. package/flow-engine/flow-api-key.d.ts +3 -7
  34. package/flow-engine/flow-graph.validator.d.ts +4 -2
  35. package/flow-engine/flow-permission-logic.d.ts +2 -0
  36. package/flow-engine/flow-run.types.d.ts +17 -8
  37. package/flow-engine/flow.types.d.ts +107 -15
  38. package/guards/designer-writable.interceptor.d.ts +12 -0
  39. package/guards/index.d.ts +1 -0
  40. package/interfaces/definition-bundle.interface.d.ts +111 -0
  41. package/interfaces/entity-builder-module.interface.d.ts +6 -0
  42. package/interfaces/flow-definition.interface.d.ts +13 -9
  43. package/interfaces/generic-record.interface.d.ts +11 -1
  44. package/interfaces/index.d.ts +1 -0
  45. package/package.json +5 -6
  46. package/rule-engine/rule-engine.service.d.ts +3 -1
  47. package/rule-engine/rule-permission.d.ts +3 -7
  48. package/rule-engine/rule-regex.d.ts +0 -2
  49. package/rule-engine/rule-values.d.ts +4 -1
  50. package/rule-engine/rule.interface.d.ts +2 -3
  51. package/services/definition-bundle.diff.d.ts +62 -0
  52. package/services/definition-bundle.file.d.ts +7 -0
  53. package/services/definition-bundle.service.d.ts +32 -0
  54. package/services/entity-builder-config.service.d.ts +2 -0
  55. package/services/entity-flow-scaffold.d.ts +1 -1
  56. package/services/flow-definition.service.d.ts +25 -12
  57. package/services/flow-execution.service.d.ts +7 -0
  58. package/services/flow-executor.service.d.ts +8 -8
  59. package/services/generic-entity.service.d.ts +5 -1
  60. package/services/index.d.ts +3 -1
  61. package/services/schema-evolution.service.d.ts +3 -1
  62. package/services/schema-sync.service.d.ts +5 -1
  63. package/controllers/flow-api-key.controller.d.ts +0 -14
  64. package/entities/flow-api-key.entity.d.ts +0 -10
  65. package/services/flow-api-key.service.d.ts +0 -31
@@ -1,6 +1,61 @@
1
+ import * as __rspack_external_typeorm from "typeorm";
1
2
  export const __rspack_esm_id = 604;
2
3
  export const __rspack_esm_ids = [604];
3
- export const __webpack_modules__ = {};
4
+ export const __webpack_modules__ = {
5
+ 1313(__unused_rspack_module, __webpack_exports__, __webpack_require__) {
6
+ /**
7
+ * Lifecycle status of an EntityDefinition.
8
+ * DRAFT - metadata created, table not yet materialized.
9
+ * ACTIVE - table exists; flows read and write its records.
10
+ * DEPRECATED - no new writes; physical table/data left intact.
11
+ */ var EntityStatus = /*#__PURE__*/ function(EntityStatus) {
12
+ EntityStatus["DRAFT"] = "DRAFT";
13
+ EntityStatus["ACTIVE"] = "ACTIVE";
14
+ EntityStatus["DEPRECATED"] = "DEPRECATED";
15
+ return EntityStatus;
16
+ }({});
17
+
18
+ __webpack_require__.d(__webpack_exports__, {
19
+ c: () => (EntityStatus)
20
+ });
21
+
22
+
23
+ },
24
+ 9614(__unused_rspack_module, __webpack_exports__, __webpack_require__) {
25
+ /**
26
+ * Storable field types a FieldDefinition can declare.
27
+ * Mapped to a driver-specific column type by SchemaDialectAdapterService.
28
+ */ var FieldType = /*#__PURE__*/ function(FieldType) {
29
+ FieldType["TEXT"] = "TEXT";
30
+ FieldType["LONG_TEXT"] = "LONG_TEXT";
31
+ FieldType["INTEGER"] = "INTEGER";
32
+ FieldType["DECIMAL"] = "DECIMAL";
33
+ FieldType["BOOLEAN"] = "BOOLEAN";
34
+ FieldType["DATE"] = "DATE";
35
+ FieldType["DATETIME"] = "DATETIME";
36
+ FieldType["EMAIL"] = "EMAIL";
37
+ FieldType["SINGLE_SELECT"] = "SINGLE_SELECT";
38
+ FieldType["MULTI_SELECT"] = "MULTI_SELECT";
39
+ FieldType["RELATION"] = "RELATION";
40
+ FieldType["JSON"] = "JSON";
41
+ FieldType["FILE"] = "FILE";
42
+ return FieldType;
43
+ }({});
44
+
45
+ __webpack_require__.d(__webpack_exports__, {
46
+ P: () => (FieldType)
47
+ });
48
+
49
+
50
+ },
51
+ 7158(module) {
52
+
53
+ module.exports = __rspack_external_typeorm;
54
+
55
+
56
+ },
57
+
58
+ };
4
59
  import { __webpack_require__ } from '../runtime.js';
5
60
  var __webpack_exec__ = function(moduleId) { return __webpack_require__(__webpack_require__.s = moduleId); }
6
61
  import * as __rspack_chunk_1 from '../794.js';
@@ -10,9 +65,9 @@ __webpack_require__.C(__rspack_chunk_2);
10
65
  var __webpack_exports__ = __webpack_exec__(665);var __webpack_exports__EntityBuilderEntities = __webpack_exports__.Ui;
11
66
  var __webpack_exports__EntityDefinition = __webpack_exports__.f6;
12
67
  var __webpack_exports__FieldDefinition = __webpack_exports__.ck;
13
- var __webpack_exports__FlowApiKey = __webpack_exports__.Sf;
14
68
  var __webpack_exports__FlowDefinition = __webpack_exports__.G;
15
69
  var __webpack_exports__FlowExecution = __webpack_exports__.j5;
70
+ var __webpack_exports__FlowVersion = __webpack_exports__.pj;
16
71
  var __webpack_exports__SchemaChangeLog = __webpack_exports__.We;
17
72
  var __webpack_exports__getEntityBuilderEntities = __webpack_exports__.ac;
18
- export { __webpack_exports__EntityBuilderEntities as EntityBuilderEntities, __webpack_exports__EntityDefinition as EntityDefinition, __webpack_exports__FieldDefinition as FieldDefinition, __webpack_exports__FlowApiKey as FlowApiKey, __webpack_exports__FlowDefinition as FlowDefinition, __webpack_exports__FlowExecution as FlowExecution, __webpack_exports__SchemaChangeLog as SchemaChangeLog, __webpack_exports__getEntityBuilderEntities as getEntityBuilderEntities };
73
+ export { __webpack_exports__EntityBuilderEntities as EntityBuilderEntities, __webpack_exports__EntityDefinition as EntityDefinition, __webpack_exports__FieldDefinition as FieldDefinition, __webpack_exports__FlowDefinition as FlowDefinition, __webpack_exports__FlowExecution as FlowExecution, __webpack_exports__FlowVersion as FlowVersion, __webpack_exports__SchemaChangeLog as SchemaChangeLog, __webpack_exports__getEntityBuilderEntities as getEntityBuilderEntities };
@@ -3,6 +3,84 @@ import * as __rspack_external__flusys_nestjs_shared_guards_3f79ddd1 from "@flusy
3
3
  export const __rspack_esm_id = 333;
4
4
  export const __rspack_esm_ids = [333];
5
5
  export const __webpack_modules__ = {
6
+ 417(__unused_rspack_module, __webpack_exports__, __webpack_require__) {
7
+ /* import */ var _nestjs_common__rspack_import_0 = __webpack_require__(6157);
8
+ /* import */ var _nestjs_core__rspack_import_1 = __webpack_require__(3075);
9
+ /* import */ var _config_message_keys_js__rspack_import_4 = __webpack_require__(5732);
10
+ /* import */ var _dtos_schema_change_dto_js__rspack_import_2 = __webpack_require__(4945);
11
+ /* import */ var _services_entity_builder_config_service_js__rspack_import_3 = __webpack_require__(4281);
12
+ function _ts_decorate(decorators, target, key, desc) {
13
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
14
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") {
15
+ r = Reflect.decorate(decorators, target, key, desc);
16
+ } else {
17
+ for(var i = decorators.length - 1; i >= 0; i--){
18
+ if (d = decorators[i]) {
19
+ r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
20
+ }
21
+ }
22
+ }
23
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
24
+ }
25
+ function _ts_metadata(metadataKey, metadataValue) {
26
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") {
27
+ return Reflect.metadata(metadataKey, metadataValue);
28
+ }
29
+ }
30
+ function _ts_param(paramIndex, decorator) {
31
+ return function(target, key) {
32
+ decorator(target, key, paramIndex);
33
+ };
34
+ }
35
+
36
+
37
+
38
+
39
+
40
+ const DESIGNER_WRITE_HANDLERS = 'entity_builder:designer_write_handlers';
41
+ /** The handlers of a controller (inherited ones included) that change definitions by hand. */ const DesignerWrites = (...handlers)=>(0,_nestjs_common__rspack_import_0.SetMetadata)(DESIGNER_WRITE_HANDLERS, handlers);
42
+ class DesignerWritableInterceptor {
43
+ reflector;
44
+ config;
45
+ constructor(reflector, config){
46
+ this.reflector = reflector;
47
+ this.config = config;
48
+ }
49
+ intercept(context, next) {
50
+ if (this.isLocked(context)) {
51
+ throw new _nestjs_common__rspack_import_0.HttpException({
52
+ message: 'Definitions are read-only in this environment. Change them where they are designed and import the bundle here.',
53
+ messageKey: _config_message_keys_js__rspack_import_4/* .BUNDLE_MESSAGES.DESIGNER_READ_ONLY */.iX.DESIGNER_READ_ONLY
54
+ }, _nestjs_common__rspack_import_0.HttpStatus.LOCKED);
55
+ }
56
+ return next.handle();
57
+ }
58
+ isLocked(context) {
59
+ if (!this.config.isDesignerReadOnly()) return false;
60
+ const handlers = this.reflector.get(DESIGNER_WRITE_HANDLERS, context.getClass()) ?? [];
61
+ if (!handlers.includes(context.getHandler().name)) return false;
62
+ return context.switchToHttp().getRequest().body?.action !== _dtos_schema_change_dto_js__rspack_import_2/* .SchemaChangeAction.REPAIR */.M3.REPAIR;
63
+ }
64
+ }
65
+ DesignerWritableInterceptor = _ts_decorate([
66
+ (0,_nestjs_common__rspack_import_0.Injectable)(),
67
+ _ts_param(0, (0,_nestjs_common__rspack_import_0.Inject)(_nestjs_core__rspack_import_1.Reflector)),
68
+ _ts_param(1, (0,_nestjs_common__rspack_import_0.Inject)(_services_entity_builder_config_service_js__rspack_import_3/* .EntityBuilderConfigService */.E)),
69
+ _ts_metadata("design:type", Function),
70
+ _ts_metadata("design:paramtypes", [
71
+ typeof _nestjs_core__rspack_import_1.Reflector === "undefined" ? Object : _nestjs_core__rspack_import_1.Reflector,
72
+ typeof _services_entity_builder_config_service_js__rspack_import_3/* .EntityBuilderConfigService */.E === "undefined" ? Object : _services_entity_builder_config_service_js__rspack_import_3/* .EntityBuilderConfigService */.E
73
+ ])
74
+ ], DesignerWritableInterceptor);
75
+
76
+ __webpack_require__.d(__webpack_exports__, {
77
+ X: () => (DesignerWritableInterceptor)
78
+ }, {
79
+ W: DesignerWrites
80
+ });
81
+
82
+
83
+ },
6
84
  4196(__unused_rspack_module, __webpack_exports__, __webpack_require__) {
7
85
 
8
86
  // EXPORTS
@@ -26,8 +104,6 @@ var core_ = __webpack_require__(3075);
26
104
  var message_keys = __webpack_require__(5732);
27
105
  // EXTERNAL MODULE: ./projects/nestjs-entity-builder/src/services/flow-definition.service.ts
28
106
  var flow_definition_service = __webpack_require__(5229);
29
- // EXTERNAL MODULE: ./projects/nestjs-entity-builder/src/services/flow-api-key.service.ts + 1 modules
30
- var flow_api_key_service = __webpack_require__(8888);
31
107
  // EXTERNAL MODULE: ./projects/nestjs-entity-builder/src/services/flow-runtime.service.ts
32
108
  var flow_runtime_service = __webpack_require__(2300);
33
109
  ;// CONCATENATED MODULE: ./projects/nestjs-entity-builder/src/flow-engine/flow-rate-limiter.ts
@@ -71,6 +147,8 @@ const DEFAULT_MAX_KEYS = 10_000;
71
147
  }
72
148
  }
73
149
 
150
+ // EXTERNAL MODULE: ./projects/nestjs-entity-builder/src/flow-engine/flow-api-key.ts
151
+ var flow_api_key = __webpack_require__(4816);
74
152
  // EXTERNAL MODULE: ./projects/nestjs-entity-builder/src/flow-engine/flow.types.ts
75
153
  var flow_types = __webpack_require__(6256);
76
154
  ;// CONCATENATED MODULE: ./projects/nestjs-entity-builder/src/guards/flow-access.guard.ts
@@ -127,34 +205,27 @@ class FlowAccessGuard {
127
205
  });
128
206
  const flow = slug ? await runtime.findActive(slug) : null;
129
207
  const endpoint = flow ? (0,flow_types/* .findEndpoint */.vS)(flow, request.params?.endpoint) : undefined;
130
- if (!flow || !endpoint) throw new common_.NotFoundException({
208
+ // A Request step for other flows only has no URL: it looks the same as an unknown one.
209
+ if (!flow || !endpoint || endpoint.authMode === 'internal') throw new common_.NotFoundException({
131
210
  message: 'Not found',
132
211
  messageKey: message_keys/* .FLOW_MESSAGES.NOT_FOUND */.wu.NOT_FOUND
133
212
  });
134
213
  request.flowDefinition = flow;
135
214
  request.flowEndpoint = endpoint;
136
215
  const ip = request.ip ?? request.socket?.remoteAddress ?? 'unknown';
137
- if (!limiter.hit(`${flow.id}|${ip}`, flow.rateLimitPerMinute)) {
216
+ if (!limiter.hit(`${flow.id}|${endpoint.nodeId}|${ip}`, endpoint.rateLimitPerMinute)) {
138
217
  throw new common_.HttpException({
139
218
  message: 'Too many requests. Try again in a minute.',
140
219
  messageKey: message_keys/* .FLOW_MESSAGES.RATE_LIMITED */.wu.RATE_LIMITED
141
220
  }, common_.HttpStatus.TOO_MANY_REQUESTS);
142
221
  }
143
- switch(flow.authMode){
222
+ switch(endpoint.authMode){
144
223
  case 'public':
145
224
  return true;
146
225
  case 'api_key':
147
226
  {
148
- const keys = await this.moduleRef.resolve(flow_api_key_service/* .FlowApiKeyService */.T, contextId, {
149
- strict: false
150
- });
151
227
  const header = request.headers?.['x-api-key'];
152
- const check = await keys.verify(flow.id, Array.isArray(header) ? header[0] : header);
153
- if (check === 'expired') throw new common_.UnauthorizedException({
154
- message: 'This API key has expired.',
155
- messageKey: message_keys/* .FLOW_MESSAGES.API_KEY_EXPIRED */.wu.API_KEY_EXPIRED
156
- });
157
- if (check !== 'valid') {
228
+ if (!(0,flow_api_key/* .apiKeyOpens */.NT)(endpoint.apiKey, Array.isArray(header) ? header[0] : header)) {
158
229
  throw new common_.UnauthorizedException({
159
230
  message: 'A valid API key is required (x-api-key header).',
160
231
  messageKey: message_keys/* .FLOW_MESSAGES.API_KEY_INVALID */.wu.API_KEY_INVALID
@@ -168,7 +239,7 @@ class FlowAccessGuard {
168
239
  case 'permission':
169
240
  {
170
241
  if (!await this.authenticate(context)) return false;
171
- await this.permissionCache.assertPermission(request.user, flow.permissionCode || (0,flow_definition_service/* .defaultFlowPermissionCode */.Er)(flow.slug));
242
+ await this.permissionCache.assertPermissionLogic(request.user, (0,flow_definition_service/* .flowPermissions */.j4)(endpoint, flow.slug));
172
243
  return true;
173
244
  }
174
245
  default:
@@ -201,10 +272,14 @@ FlowAccessGuard = _ts_decorate([
201
272
  },
202
273
  5460(__unused_rspack_module, __webpack_exports__, __webpack_require__) {
203
274
  /* import */ var _flow_access_guard_js__rspack_import_0 = __webpack_require__(4196);
275
+ /* import */ var _designer_writable_interceptor_js__rspack_import_1 = __webpack_require__(417);
276
+
204
277
 
205
278
 
206
279
  __webpack_require__.d(__webpack_exports__, {
207
- C: () => (/* reexport safe */ _flow_access_guard_js__rspack_import_0.C)
280
+ CA: () => (/* reexport safe */ _flow_access_guard_js__rspack_import_0.C),
281
+ Wq: () => (/* reexport safe */ _designer_writable_interceptor_js__rspack_import_1.W),
282
+ Xg: () => (/* reexport safe */ _designer_writable_interceptor_js__rspack_import_1.X)
208
283
  });
209
284
 
210
285
 
@@ -221,13 +296,17 @@ import { __webpack_require__ } from '../runtime.js';
221
296
  var __webpack_exec__ = function(moduleId) { return __webpack_require__(__webpack_require__.s = moduleId); }
222
297
  import * as __rspack_chunk_1 from '../21.js';
223
298
  __webpack_require__.C(__rspack_chunk_1);
224
- import * as __rspack_chunk_2 from '../489.js';
299
+ import * as __rspack_chunk_2 from '../897.js';
225
300
  __webpack_require__.C(__rspack_chunk_2);
226
- import * as __rspack_chunk_3 from '../794.js';
301
+ import * as __rspack_chunk_3 from '../857.js';
227
302
  __webpack_require__.C(__rspack_chunk_3);
228
- import * as __rspack_chunk_4 from '../996.js';
303
+ import * as __rspack_chunk_4 from '../794.js';
229
304
  __webpack_require__.C(__rspack_chunk_4);
230
- import * as __rspack_chunk_5 from './index.js';
305
+ import * as __rspack_chunk_5 from '../677.js';
231
306
  __webpack_require__.C(__rspack_chunk_5);
232
- var __webpack_exports__ = __webpack_exec__(5460);var __webpack_exports__FlowAccessGuard = __webpack_exports__.C;
233
- export { __webpack_exports__FlowAccessGuard as FlowAccessGuard };
307
+ import * as __rspack_chunk_6 from './index.js';
308
+ __webpack_require__.C(__rspack_chunk_6);
309
+ var __webpack_exports__ = __webpack_exec__(5460);var __webpack_exports__DesignerWritableInterceptor = __webpack_exports__.Xg;
310
+ var __webpack_exports__DesignerWrites = __webpack_exports__.Wq;
311
+ var __webpack_exports__FlowAccessGuard = __webpack_exports__.CA;
312
+ export { __webpack_exports__DesignerWritableInterceptor as DesignerWritableInterceptor, __webpack_exports__DesignerWrites as DesignerWrites, __webpack_exports__FlowAccessGuard as FlowAccessGuard };