@flusys/nestjs-entity-builder 9.0.1 → 9.1.0

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 (40) hide show
  1. package/README.md +22 -28
  2. package/config/message-keys.d.ts +9 -62
  3. package/controllers/flow-api-key.controller.d.ts +14 -0
  4. package/controllers/flow-definition.controller.d.ts +1 -7
  5. package/controllers/index.d.ts +1 -0
  6. package/dtos/flow.dto.d.ts +20 -10
  7. package/entities/flow-api-key.entity.d.ts +10 -0
  8. package/entities/flow-definition.entity.d.ts +9 -3
  9. package/entities/flow-execution.entity.d.ts +0 -1
  10. package/entities/index.d.ts +3 -3
  11. package/fesm/21.js +11 -64
  12. package/fesm/{582.js → 489.js} +11 -20
  13. package/fesm/{913.js → 606.js} +295 -209
  14. package/fesm/719.js +186 -162
  15. package/fesm/794.js +187 -116
  16. package/fesm/{677.js → 996.js} +616 -1490
  17. package/fesm/controllers/index.js +6 -5
  18. package/fesm/docs/index.js +2 -2
  19. package/fesm/entities/index.js +2 -2
  20. package/fesm/guards/index.js +19 -12
  21. package/fesm/index.js +638 -50
  22. package/fesm/modules/index.js +625 -7
  23. package/fesm/rule-engine/index.js +2 -2
  24. package/fesm/services/index.js +25 -54
  25. package/flow-engine/flow-api-key.d.ts +7 -3
  26. package/flow-engine/flow-graph.validator.d.ts +2 -4
  27. package/flow-engine/flow-run.types.d.ts +4 -14
  28. package/flow-engine/flow.types.d.ts +9 -91
  29. package/interfaces/flow-definition.interface.d.ts +9 -13
  30. package/package.json +5 -5
  31. package/rule-engine/rule-engine.service.d.ts +0 -1
  32. package/services/entity-flow-scaffold.d.ts +1 -1
  33. package/services/flow-api-key.service.d.ts +31 -0
  34. package/services/flow-definition.service.d.ts +12 -24
  35. package/services/flow-execution.service.d.ts +0 -1
  36. package/services/flow-executor.service.d.ts +7 -7
  37. package/services/generic-entity.service.d.ts +1 -1
  38. package/services/index.d.ts +1 -0
  39. package/entities/flow-version.entity.d.ts +0 -10
  40. package/fesm/458.js +0 -649
@@ -5,23 +5,24 @@ import { __webpack_require__ } from '../runtime.js';
5
5
  var __webpack_exec__ = function(moduleId) { return __webpack_require__(__webpack_require__.s = moduleId); }
6
6
  import * as __rspack_chunk_1 from '../21.js';
7
7
  __webpack_require__.C(__rspack_chunk_1);
8
- import * as __rspack_chunk_2 from '../582.js';
8
+ import * as __rspack_chunk_2 from '../489.js';
9
9
  __webpack_require__.C(__rspack_chunk_2);
10
10
  import * as __rspack_chunk_3 from '../794.js';
11
11
  __webpack_require__.C(__rspack_chunk_3);
12
- import * as __rspack_chunk_4 from '../677.js';
12
+ import * as __rspack_chunk_4 from '../996.js';
13
13
  __webpack_require__.C(__rspack_chunk_4);
14
14
  import * as __rspack_chunk_5 from '../362.js';
15
15
  __webpack_require__.C(__rspack_chunk_5);
16
16
  import * as __rspack_chunk_6 from '../719.js';
17
17
  __webpack_require__.C(__rspack_chunk_6);
18
- import * as __rspack_chunk_7 from '../913.js';
18
+ import * as __rspack_chunk_7 from '../606.js';
19
19
  __webpack_require__.C(__rspack_chunk_7);
20
20
  import * as __rspack_chunk_8 from './index.js';
21
21
  __webpack_require__.C(__rspack_chunk_8);
22
- var __webpack_exports__ = __webpack_exec__(6384);var __webpack_exports__EntityDefinitionController = __webpack_exports__.hv;
22
+ var __webpack_exports__ = __webpack_exec__(2517);var __webpack_exports__EntityDefinitionController = __webpack_exports__.hv;
23
23
  var __webpack_exports__FieldDefinitionController = __webpack_exports__.GX;
24
+ var __webpack_exports__FlowApiKeyController = __webpack_exports__.Sv;
24
25
  var __webpack_exports__FlowDefinitionController = __webpack_exports__.W8;
25
26
  var __webpack_exports__FlowExecutionController = __webpack_exports__.VU;
26
27
  var __webpack_exports__FlowRuntimeController = __webpack_exports__.bw;
27
- export { __webpack_exports__EntityDefinitionController as EntityDefinitionController, __webpack_exports__FieldDefinitionController as FieldDefinitionController, __webpack_exports__FlowDefinitionController as FlowDefinitionController, __webpack_exports__FlowExecutionController as FlowExecutionController, __webpack_exports__FlowRuntimeController as FlowRuntimeController };
28
+ export { __webpack_exports__EntityDefinitionController as EntityDefinitionController, __webpack_exports__FieldDefinitionController as FieldDefinitionController, __webpack_exports__FlowApiKeyController as FlowApiKeyController, __webpack_exports__FlowDefinitionController as FlowDefinitionController, __webpack_exports__FlowExecutionController as FlowExecutionController, __webpack_exports__FlowRuntimeController as FlowRuntimeController };
@@ -36,7 +36,7 @@ Runtime-defined business entities backed by real database tables, whose records
36
36
  - Permissions per entity and action: \`entity_builder.entity.<entityCode>.<create|read|update|delete>\`, checked by flows running as the caller
37
37
 
38
38
  ### ⚙️ Automation
39
- - **Flows**: visual virtual APIs served at \`POST /api-flows/:slug[/:path]\` - each Request step sets its own access (jwt, permission, api_key or public), run-as, transaction, time limit and rate limit - validate, branch, loop, read/write entities, call other flows, HTTP requests and events
39
+ - **Flows**: visual virtual APIs served at \`POST /api-flows/:slug\` (jwt, permission, api_key or public) - validate, branch, loop, read/write entities in one transaction, call other flows, HTTP requests and events
40
40
 
41
41
  ## Data Isolation
42
42
 
@@ -49,7 +49,7 @@ to a company or branch, add fields such as \`company_id\` / \`branch_id\` and ma
49
49
 
50
50
  - \`/entity-builder/entity-definitions/*\` - Entities, schema changes, health and history
51
51
  - \`/entity-builder/field-definitions/*\` - Field metadata (read-only; changes go through schema changes)
52
- - \`/entity-builder/flows/*\`, \`/entity-builder/flow-executions/*\` - Flows
52
+ - \`/entity-builder/flows/*\`, \`/entity-builder/flow-api-keys/*\`, \`/entity-builder/flow-executions/*\` - Flows
53
53
  - \`/api-flows/:slug\` - Call a flow
54
54
 
55
55
  ## Common Error Codes
@@ -10,9 +10,9 @@ __webpack_require__.C(__rspack_chunk_2);
10
10
  var __webpack_exports__ = __webpack_exec__(665);var __webpack_exports__EntityBuilderEntities = __webpack_exports__.Ui;
11
11
  var __webpack_exports__EntityDefinition = __webpack_exports__.f6;
12
12
  var __webpack_exports__FieldDefinition = __webpack_exports__.ck;
13
+ var __webpack_exports__FlowApiKey = __webpack_exports__.Sf;
13
14
  var __webpack_exports__FlowDefinition = __webpack_exports__.G;
14
15
  var __webpack_exports__FlowExecution = __webpack_exports__.j5;
15
- var __webpack_exports__FlowVersion = __webpack_exports__.pj;
16
16
  var __webpack_exports__SchemaChangeLog = __webpack_exports__.We;
17
17
  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__FlowDefinition as FlowDefinition, __webpack_exports__FlowExecution as FlowExecution, __webpack_exports__FlowVersion as FlowVersion, __webpack_exports__SchemaChangeLog as SchemaChangeLog, __webpack_exports__getEntityBuilderEntities as getEntityBuilderEntities };
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 };
@@ -24,8 +24,10 @@ var core_ = __webpack_require__(3075);
24
24
 
25
25
  // EXTERNAL MODULE: ./projects/nestjs-entity-builder/src/config/message-keys.ts
26
26
  var message_keys = __webpack_require__(5732);
27
- // EXTERNAL MODULE: ./projects/nestjs-entity-builder/src/services/flow-definition.service.ts + 1 modules
28
- var flow_definition_service = __webpack_require__(4921);
27
+ // EXTERNAL MODULE: ./projects/nestjs-entity-builder/src/services/flow-definition.service.ts
28
+ 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);
29
31
  // EXTERNAL MODULE: ./projects/nestjs-entity-builder/src/services/flow-runtime.service.ts
30
32
  var flow_runtime_service = __webpack_require__(2300);
31
33
  ;// CONCATENATED MODULE: ./projects/nestjs-entity-builder/src/flow-engine/flow-rate-limiter.ts
@@ -69,8 +71,6 @@ const DEFAULT_MAX_KEYS = 10_000;
69
71
  }
70
72
  }
71
73
 
72
- // EXTERNAL MODULE: ./projects/nestjs-entity-builder/src/flow-engine/flow-api-key.ts
73
- var flow_api_key = __webpack_require__(4816);
74
74
  // EXTERNAL MODULE: ./projects/nestjs-entity-builder/src/flow-engine/flow.types.ts
75
75
  var flow_types = __webpack_require__(6256);
76
76
  ;// CONCATENATED MODULE: ./projects/nestjs-entity-builder/src/guards/flow-access.guard.ts
@@ -127,27 +127,34 @@ class FlowAccessGuard {
127
127
  });
128
128
  const flow = slug ? await runtime.findActive(slug) : null;
129
129
  const endpoint = flow ? (0,flow_types/* .findEndpoint */.vS)(flow, request.params?.endpoint) : undefined;
130
- // A Request step for other flows only has no URL: it looks the same as an unknown one.
131
- if (!flow || !endpoint || endpoint.authMode === 'internal') throw new common_.NotFoundException({
130
+ if (!flow || !endpoint) throw new common_.NotFoundException({
132
131
  message: 'Not found',
133
132
  messageKey: message_keys/* .FLOW_MESSAGES.NOT_FOUND */.wu.NOT_FOUND
134
133
  });
135
134
  request.flowDefinition = flow;
136
135
  request.flowEndpoint = endpoint;
137
136
  const ip = request.ip ?? request.socket?.remoteAddress ?? 'unknown';
138
- if (!limiter.hit(`${flow.id}|${endpoint.nodeId}|${ip}`, endpoint.rateLimitPerMinute)) {
137
+ if (!limiter.hit(`${flow.id}|${ip}`, flow.rateLimitPerMinute)) {
139
138
  throw new common_.HttpException({
140
139
  message: 'Too many requests. Try again in a minute.',
141
140
  messageKey: message_keys/* .FLOW_MESSAGES.RATE_LIMITED */.wu.RATE_LIMITED
142
141
  }, common_.HttpStatus.TOO_MANY_REQUESTS);
143
142
  }
144
- switch(endpoint.authMode){
143
+ switch(flow.authMode){
145
144
  case 'public':
146
145
  return true;
147
146
  case 'api_key':
148
147
  {
148
+ const keys = await this.moduleRef.resolve(flow_api_key_service/* .FlowApiKeyService */.T, contextId, {
149
+ strict: false
150
+ });
149
151
  const header = request.headers?.['x-api-key'];
150
- if (!(0,flow_api_key/* .apiKeyOpens */.NT)(endpoint.apiKey, Array.isArray(header) ? header[0] : header)) {
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') {
151
158
  throw new common_.UnauthorizedException({
152
159
  message: 'A valid API key is required (x-api-key header).',
153
160
  messageKey: message_keys/* .FLOW_MESSAGES.API_KEY_INVALID */.wu.API_KEY_INVALID
@@ -161,7 +168,7 @@ class FlowAccessGuard {
161
168
  case 'permission':
162
169
  {
163
170
  if (!await this.authenticate(context)) return false;
164
- await this.permissionCache.assertPermission(request.user, endpoint.permissionCode || (0,flow_definition_service/* .defaultFlowPermissionCode */.Er)(flow.slug));
171
+ await this.permissionCache.assertPermission(request.user, flow.permissionCode || (0,flow_definition_service/* .defaultFlowPermissionCode */.Er)(flow.slug));
165
172
  return true;
166
173
  }
167
174
  default:
@@ -214,11 +221,11 @@ import { __webpack_require__ } from '../runtime.js';
214
221
  var __webpack_exec__ = function(moduleId) { return __webpack_require__(__webpack_require__.s = moduleId); }
215
222
  import * as __rspack_chunk_1 from '../21.js';
216
223
  __webpack_require__.C(__rspack_chunk_1);
217
- import * as __rspack_chunk_2 from '../582.js';
224
+ import * as __rspack_chunk_2 from '../489.js';
218
225
  __webpack_require__.C(__rspack_chunk_2);
219
226
  import * as __rspack_chunk_3 from '../794.js';
220
227
  __webpack_require__.C(__rspack_chunk_3);
221
- import * as __rspack_chunk_4 from '../677.js';
228
+ import * as __rspack_chunk_4 from '../996.js';
222
229
  __webpack_require__.C(__rspack_chunk_4);
223
230
  import * as __rspack_chunk_5 from './index.js';
224
231
  __webpack_require__.C(__rspack_chunk_5);