@flusys/nestjs-entity-builder 9.1.0-rc.1 → 9.1.1

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 (63) hide show
  1. package/README.md +52 -23
  2. package/config/entity-builder.constants.d.ts +2 -0
  3. package/config/message-keys.d.ts +102 -13
  4. package/controllers/definition-bundle.controller.d.ts +15 -0
  5. package/controllers/flow-definition.controller.d.ts +7 -1
  6. package/controllers/flow-runtime.controller.d.ts +16 -8
  7. package/controllers/index.d.ts +1 -1
  8. package/dtos/definition-bundle.dto.d.ts +57 -0
  9. package/dtos/flow.dto.d.ts +13 -20
  10. package/dtos/index.d.ts +1 -0
  11. package/entities/flow-definition.entity.d.ts +3 -9
  12. package/entities/flow-execution.entity.d.ts +3 -0
  13. package/entities/flow-version.entity.d.ts +10 -0
  14. package/entities/index.d.ts +3 -3
  15. package/fesm/21.js +105 -15
  16. package/fesm/458.js +695 -0
  17. package/fesm/{489.js → 582.js} +22 -30
  18. package/fesm/{996.js → 677.js} +1562 -1064
  19. package/fesm/794.js +135 -240
  20. package/fesm/{719.js → 870.js} +2065 -324
  21. package/fesm/{362.js → 897.js} +572 -8
  22. package/fesm/{606.js → 946.js} +621 -296
  23. package/fesm/config/index.js +15 -2
  24. package/fesm/controllers/index.js +9 -9
  25. package/fesm/docs/index.js +7 -4
  26. package/fesm/dtos/index.js +451 -256
  27. package/fesm/entities/index.js +58 -3
  28. package/fesm/guards/index.js +106 -22
  29. package/fesm/index.js +429 -937
  30. package/fesm/interfaces/index.js +19 -2
  31. package/fesm/modules/index.js +10 -627
  32. package/fesm/rule-engine/index.js +12 -3
  33. package/fesm/services/index.js +101 -29
  34. package/flow-engine/flow-api-key.d.ts +3 -7
  35. package/flow-engine/flow-graph.validator.d.ts +5 -4
  36. package/flow-engine/flow-permission-logic.d.ts +2 -0
  37. package/flow-engine/flow-run.types.d.ts +19 -9
  38. package/flow-engine/flow.types.d.ts +115 -11
  39. package/guards/designer-writable.interceptor.d.ts +12 -0
  40. package/guards/index.d.ts +1 -0
  41. package/interfaces/definition-bundle.interface.d.ts +111 -0
  42. package/interfaces/entity-builder-module.interface.d.ts +6 -0
  43. package/interfaces/flow-definition.interface.d.ts +13 -9
  44. package/interfaces/index.d.ts +1 -0
  45. package/package.json +5 -5
  46. package/rule-engine/rule-engine.service.d.ts +1 -0
  47. package/rule-engine/rule-permission.d.ts +3 -7
  48. package/services/definition-bundle.diff.d.ts +62 -0
  49. package/services/definition-bundle.file.d.ts +7 -0
  50. package/services/definition-bundle.service.d.ts +32 -0
  51. package/services/entity-builder-config.service.d.ts +2 -0
  52. package/services/entity-flow-scaffold.d.ts +4 -3
  53. package/services/flow-definition.service.d.ts +26 -12
  54. package/services/flow-execution.service.d.ts +7 -0
  55. package/services/flow-executor.service.d.ts +9 -8
  56. package/services/flow-runtime.service.d.ts +2 -1
  57. package/services/generic-entity.service.d.ts +1 -1
  58. package/services/index.d.ts +3 -1
  59. package/services/schema-evolution.service.d.ts +3 -1
  60. package/services/schema-sync.service.d.ts +6 -2
  61. package/controllers/flow-api-key.controller.d.ts +0 -14
  62. package/entities/flow-api-key.entity.d.ts +0 -10
  63. package/services/flow-api-key.service.d.ts +0 -31
@@ -1,16 +1,24 @@
1
1
  import { type FlowDefinition } from '../entities/flow-definition.entity.js';
2
+ import { type IFlowEndpoint } from '../flow-engine/flow.types.js';
2
3
  import { FlowRuntimeService } from '../services/flow-runtime.service.js';
4
+ type FlowRequest = {
5
+ flowDefinition: FlowDefinition;
6
+ flowEndpoint: IFlowEndpoint;
7
+ user?: never;
8
+ ip?: string;
9
+ headers: Record<string, unknown>;
10
+ query?: Record<string, unknown>;
11
+ path?: string;
12
+ };
3
13
  export declare class FlowRuntimeController {
4
14
  private readonly runtime;
5
15
  constructor(runtime: FlowRuntimeService);
6
- run(_slug: string, body: unknown, req: {
7
- flowDefinition: FlowDefinition;
8
- user?: never;
9
- ip?: string;
10
- headers: Record<string, unknown>;
11
- query?: Record<string, unknown>;
12
- path?: string;
13
- }, res: {
16
+ run(_slug: string, body: unknown, req: FlowRequest, res: {
14
17
  status(code: number): unknown;
15
18
  }): Promise<unknown>;
19
+ runEndpoint(_slug: string, _endpoint: string, body: unknown, req: FlowRequest, res: {
20
+ status(code: number): unknown;
21
+ }): Promise<unknown>;
22
+ private answer;
16
23
  }
24
+ export {};
@@ -1,6 +1,6 @@
1
1
  export * from './entity-definition.controller.js';
2
2
  export * from './field-definition.controller.js';
3
3
  export * from './flow-definition.controller.js';
4
- export * from './flow-api-key.controller.js';
5
4
  export * from './flow-execution.controller.js';
6
5
  export * from './flow-runtime.controller.js';
6
+ export * from './definition-bundle.controller.js';
@@ -0,0 +1,57 @@
1
+ import { EntityStatus } from '../enums/entity-status.enum.js';
2
+ import { FieldType } from '../enums/field-type.enum.js';
3
+ import { type IFlowEdge, type IFlowNode } from '../flow-engine/flow.types.js';
4
+ import { DEFINITION_BUNDLE_FORMAT, DEFINITION_BUNDLE_VERSION } from '../interfaces/definition-bundle.interface.js';
5
+ export declare class BundleFieldDto {
6
+ id: string;
7
+ code: string;
8
+ label: string;
9
+ fieldType: FieldType;
10
+ nullable: boolean;
11
+ unique: boolean;
12
+ isIndexed: boolean;
13
+ defaultValue: unknown;
14
+ validationRules: Record<string, unknown> | null;
15
+ selectOptions: unknown[] | null;
16
+ relationTarget: string | null;
17
+ order: number;
18
+ uiConfig: Record<string, unknown> | null;
19
+ isSearchable: boolean;
20
+ deprecated: boolean;
21
+ }
22
+ export declare class BundleEntityDto {
23
+ id: string;
24
+ code: string;
25
+ label: string;
26
+ description: string | null;
27
+ status: EntityStatus;
28
+ isSoftDeleteEnabled: boolean;
29
+ isAuditEnabled: boolean;
30
+ uiConfig: Record<string, unknown> | null;
31
+ fields: BundleFieldDto[];
32
+ }
33
+ export declare class BundleFlowDto {
34
+ name: string;
35
+ slug: string;
36
+ description: string | null;
37
+ isActive: boolean;
38
+ retainExecutions: number;
39
+ nodes: IFlowNode[];
40
+ edges: IFlowEdge[];
41
+ }
42
+ export declare class DefinitionBundleDto {
43
+ format: typeof DEFINITION_BUNDLE_FORMAT;
44
+ version: typeof DEFINITION_BUNDLE_VERSION;
45
+ entities: BundleEntityDto[];
46
+ flows: BundleFlowDto[];
47
+ }
48
+ export declare class ExportBundleDto {
49
+ entityCodes?: string[];
50
+ flowSlugs?: string[];
51
+ }
52
+ export declare class ImportBundleOptionsDto {
53
+ deprecateMissingFields?: boolean;
54
+ confirm?: boolean;
55
+ expectedChecksum?: string;
56
+ expectedPlanChecksum?: string;
57
+ }
@@ -1,19 +1,12 @@
1
1
  import { IdentityResponseDto } from '@flusys/nestjs-shared/dtos';
2
- import { type FlowAuthMode, type FlowBodyType, type FlowInput, type FlowRunAs, type IFlowEdge, type IFlowInputField, type IFlowNode } from '../flow-engine/flow.types.js';
2
+ import { type IFlowSnapshot } from '../interfaces/flow-definition.interface.js';
3
+ import { type FlowInput, type IFlowEdge, type IFlowNode } from '../flow-engine/flow.types.js';
3
4
  export declare class CreateFlowDefinitionDto {
4
5
  name: string;
5
6
  slug: string;
6
7
  description?: string;
7
8
  isActive?: boolean;
8
- authMode?: FlowAuthMode;
9
- permissionCode?: string;
10
- runAs?: FlowRunAs;
11
- isTransactional?: boolean;
12
- timeoutMs?: number;
13
- rateLimitPerMinute?: number;
14
9
  retainExecutions?: number;
15
- bodyType?: FlowBodyType;
16
- inputSchema?: IFlowInputField[];
17
10
  nodes: IFlowNode[];
18
11
  edges: IFlowEdge[];
19
12
  }
@@ -26,6 +19,7 @@ export declare class FlowDraftDto extends FlowDraftDto_base {
26
19
  name?: string;
27
20
  id?: string;
28
21
  version?: unknown;
22
+ draft?: unknown;
29
23
  createdAt?: unknown;
30
24
  updatedAt?: unknown;
31
25
  deletedAt?: unknown;
@@ -41,6 +35,7 @@ export declare class TestFlowRequestDto {
41
35
  export declare class TestFlowDto {
42
36
  flowId?: string;
43
37
  definition?: FlowDraftDto;
38
+ endpoint?: string;
44
39
  input?: FlowInput;
45
40
  mode?: 'dry_run' | 'live';
46
41
  request?: TestFlowRequestDto;
@@ -51,9 +46,12 @@ export declare class ValidateFlowDto {
51
46
  export declare class FlowIdDto {
52
47
  flowId: string;
53
48
  }
54
- export declare class CreateFlowApiKeyDto extends FlowIdDto {
55
- name: string;
56
- expiresAt?: string;
49
+ export declare class PublishFlowDto {
50
+ id: string;
51
+ note?: string;
52
+ }
53
+ export declare class FlowVersionRefDto extends FlowIdDto {
54
+ version: number;
57
55
  }
58
56
  export declare class IdBodyDto {
59
57
  id: string;
@@ -61,6 +59,8 @@ export declare class IdBodyDto {
61
59
  export declare class ListFlowExecutionsDto {
62
60
  flowId?: string;
63
61
  status?: string;
62
+ trigger?: string;
63
+ endpointNodeId?: string;
64
64
  page?: number;
65
65
  pageSize?: number;
66
66
  }
@@ -69,17 +69,10 @@ export declare class FlowDefinitionResponseDto extends IdentityResponseDto {
69
69
  slug: string;
70
70
  description: string | null;
71
71
  isActive: boolean;
72
- authMode: FlowAuthMode;
73
- permissionCode: string | null;
74
- runAs: FlowRunAs;
75
- isTransactional: boolean;
76
- timeoutMs: number;
77
- rateLimitPerMinute: number;
78
72
  retainExecutions: number;
79
- bodyType: FlowBodyType;
80
- inputSchema: IFlowInputField[];
81
73
  nodes: IFlowNode[];
82
74
  edges: IFlowEdge[];
83
75
  version: number;
76
+ draft: IFlowSnapshot | null;
84
77
  }
85
78
  export {};
package/dtos/index.d.ts CHANGED
@@ -1,3 +1,4 @@
1
1
  export * from './entity-definition.dto.js';
2
2
  export * from './field-definition.dto.js';
3
3
  export * from './schema-change.dto.js';
4
+ export * from './definition-bundle.dto.js';
@@ -1,20 +1,14 @@
1
1
  import { Identity } from '@flusys/nestjs-shared';
2
- import type { FlowAuthMode, FlowBodyType, FlowRunAs, IFlowEdge, IFlowInputField, IFlowNode } from '../flow-engine/flow.types.js';
2
+ import type { IFlowEdge, IFlowNode } from '../flow-engine/flow.types.js';
3
+ import type { IFlowSnapshot } from '../interfaces/flow-definition.interface.js';
3
4
  export declare class FlowDefinition extends Identity {
4
5
  name: string;
5
6
  slug: string;
6
7
  description: string | null;
7
8
  isActive: boolean;
8
- authMode: FlowAuthMode;
9
- permissionCode: string | null;
10
- runAs: FlowRunAs;
11
- isTransactional: boolean;
12
- timeoutMs: number;
13
- rateLimitPerMinute: number;
14
9
  retainExecutions: number;
15
- bodyType: FlowBodyType;
16
- inputSchema: IFlowInputField[];
17
10
  nodes: IFlowNode[];
18
11
  edges: IFlowEdge[];
19
12
  version: number;
13
+ draft: IFlowSnapshot | null;
20
14
  }
@@ -3,8 +3,11 @@ import type { IFlowTraceEntry } from '../flow-engine/flow-run.types.js';
3
3
  export declare class FlowExecution extends Identity {
4
4
  flowId: string | null;
5
5
  flowSlug: string;
6
+ flowVersion: number | null;
6
7
  status: string;
7
8
  trigger: string;
9
+ endpointNodeId: string | null;
10
+ endpointPath: string | null;
8
11
  mode: string;
9
12
  statusCode: number;
10
13
  input: Record<string, unknown> | null;
@@ -0,0 +1,10 @@
1
+ import { Identity } from '@flusys/nestjs-shared';
2
+ import type { IFlowSnapshot } from '../interfaces/flow-definition.interface.js';
3
+ export declare class FlowVersion extends Identity {
4
+ flowId: string;
5
+ version: number;
6
+ definition: IFlowSnapshot;
7
+ note: string | null;
8
+ publishedAt: Date;
9
+ publishedById: string | null;
10
+ }
@@ -2,13 +2,13 @@ export * from './entity-definition.entity.js';
2
2
  export * from './field-definition.entity.js';
3
3
  export * from './schema-change-log.entity.js';
4
4
  export * from './flow-definition.entity.js';
5
- export * from './flow-api-key.entity.js';
6
5
  export * from './flow-execution.entity.js';
6
+ export * from './flow-version.entity.js';
7
7
  import { EntityDefinition } from './entity-definition.entity.js';
8
8
  import { FieldDefinition } from './field-definition.entity.js';
9
9
  import { SchemaChangeLog } from './schema-change-log.entity.js';
10
10
  import { FlowDefinition } from './flow-definition.entity.js';
11
- import { FlowApiKey } from './flow-api-key.entity.js';
12
11
  import { FlowExecution } from './flow-execution.entity.js';
13
- export declare const EntityBuilderEntities: (typeof EntityDefinition | typeof FieldDefinition | typeof SchemaChangeLog | typeof FlowDefinition | typeof FlowApiKey | typeof FlowExecution)[];
12
+ import { FlowVersion } from './flow-version.entity.js';
13
+ export declare const EntityBuilderEntities: (typeof EntityDefinition | typeof FieldDefinition | typeof SchemaChangeLog | typeof FlowDefinition | typeof FlowExecution | typeof FlowVersion)[];
14
14
  export declare function getEntityBuilderEntities(): typeof EntityBuilderEntities;
package/fesm/21.js CHANGED
@@ -257,18 +257,14 @@ const RULE_ENGINE_MESSAGES = {
257
257
  const FLOW_MESSAGES = {
258
258
  NOT_FOUND: 'entity_builder.flow.not.found',
259
259
  NOTHING_TO_TEST: 'entity_builder.flow.nothing.to.test',
260
+ ENDPOINT_NOT_FOUND: 'entity_builder.flow.endpoint.not.found',
260
261
  INVALID: 'entity_builder.flow.invalid',
261
262
  SLUG_TAKEN: 'entity_builder.flow.slug.taken',
262
263
  RATE_LIMITED: 'entity_builder.flow.rate.limited',
263
264
  API_KEY_INVALID: 'entity_builder.flow.api.key.invalid',
264
- API_KEY_NOT_FOUND: 'entity_builder.flow.api.key.not.found',
265
- API_KEY_CREATE_SUCCESS: 'entity_builder.flow.api.key.create.success',
266
- API_KEY_LIST_SUCCESS: 'entity_builder.flow.api.key.list.success',
267
- API_KEY_REVOKE_SUCCESS: 'entity_builder.flow.api.key.revoke.success',
268
- API_KEY_DELETE_SUCCESS: 'entity_builder.flow.api.key.delete.success',
269
- API_KEY_EXPIRED: 'entity_builder.flow.api.key.expired',
270
- API_KEY_EXPIRY_IN_PAST: 'entity_builder.flow.api.key.expiry.in.past',
271
265
  CALLED_BY_OTHER_FLOWS: 'entity_builder.flow.called.by.other.flows',
266
+ ENDPOINT_CALLED_BY_OTHER_FLOWS: 'entity_builder.flow.endpoint.called.by.other.flows',
267
+ CALLERS_BROKEN: 'entity_builder.flow.callers.broken',
272
268
  EXECUTION_NOT_FOUND: 'entity_builder.flow.execution.not.found',
273
269
  EXECUTIONS_SUCCESS: 'entity_builder.flow.executions.success',
274
270
  EXECUTION_SUCCESS: 'entity_builder.flow.execution.success',
@@ -285,7 +281,15 @@ const FLOW_MESSAGES = {
285
281
  INPUT_BODY_NOT_LIST: 'entity_builder.flow.input.body.not.list',
286
282
  INPUT_BODY_ITEM_NOT_OBJECT: 'entity_builder.flow.input.body.item.not.object',
287
283
  CHECKS_FAILED: 'entity_builder.flow.checks.failed',
288
- PERMISSION_DENIED: 'entity_builder.flow.permission.denied'
284
+ PERMISSION_DENIED: 'entity_builder.flow.permission.denied',
285
+ PUBLISH_SUCCESS: 'entity_builder.flow.publish.success',
286
+ NOTHING_TO_PUBLISH: 'entity_builder.flow.nothing.to.publish',
287
+ VERSIONS_SUCCESS: 'entity_builder.flow.versions.success',
288
+ VERSION_SUCCESS: 'entity_builder.flow.version.success',
289
+ VERSION_NOT_FOUND: 'entity_builder.flow.version.not.found',
290
+ VERSION_RESTORED: 'entity_builder.flow.version.restored',
291
+ DRAFT_DISCARDED: 'entity_builder.flow.draft.discarded',
292
+ NO_DRAFT: 'entity_builder.flow.no.draft'
289
293
  };
290
294
  /** Why a run was stopped or a node failed (`trace[].error`, `body.messageKey`). */ const FLOW_ERROR_MESSAGES = {
291
295
  NO_TRIGGER: 'entity_builder.flow.error.no.trigger',
@@ -315,33 +319,50 @@ const FLOW_MESSAGES = {
315
319
  CODE_OUTPUT_INVALID: 'entity_builder.flow.error.code.output.invalid',
316
320
  CODE_UNAVAILABLE: 'entity_builder.flow.error.code.unavailable',
317
321
  CALLED_FLOW_NOT_FOUND: 'entity_builder.flow.error.called.flow.not.found',
322
+ CALLED_FLOW_ENDPOINT_NOT_FOUND: 'entity_builder.flow.error.called.flow.endpoint.not.found',
318
323
  CALLED_FLOW_NOT_ALLOWED: 'entity_builder.flow.error.called.flow.not.allowed',
319
324
  CALLED_FLOW_RECURSION: 'entity_builder.flow.error.called.flow.recursion',
320
325
  CALLED_FLOW_TOO_DEEP: 'entity_builder.flow.error.called.flow.too.deep',
321
326
  CALLED_FLOW_FAILED: 'entity_builder.flow.error.called.flow.failed',
322
327
  CALLED_FLOW_FAILED_AT_NODE: 'entity_builder.flow.error.called.flow.failed.at.node',
323
- RUN_AS_NOT_ALLOWED: 'entity_builder.flow.error.run.as.not.allowed',
324
- FILTER_VALUE_MISSING: 'entity_builder.flow.error.filter.value.missing'
328
+ FILTER_VALUE_MISSING: 'entity_builder.flow.error.filter.value.missing',
329
+ TOO_MANY_MESSAGES: 'entity_builder.flow.error.too.many.messages',
330
+ TOO_MANY_RECIPIENTS: 'entity_builder.flow.error.too.many.recipients',
331
+ NOTIFICATION_UNAVAILABLE: 'entity_builder.flow.error.notification.unavailable',
332
+ NOTIFICATION_RECIPIENT_INVALID: 'entity_builder.flow.error.notification.recipient.invalid',
333
+ NOTIFICATION_COMPANY_INVALID: 'entity_builder.flow.error.notification.company.invalid',
334
+ NOTIFICATION_BRANCH_INVALID: 'entity_builder.flow.error.notification.branch.invalid',
335
+ NOTIFICATION_COMPANY_UNAVAILABLE: 'entity_builder.flow.error.notification.company.unavailable',
336
+ NOTIFICATION_TITLE_EMPTY: 'entity_builder.flow.error.notification.title.empty',
337
+ NOTIFICATION_FAILED: 'entity_builder.flow.error.notification.failed',
338
+ EMAIL_UNAVAILABLE: 'entity_builder.flow.error.email.unavailable',
339
+ EMAIL_ADDRESS_INVALID: 'entity_builder.flow.error.email.address.invalid',
340
+ EMAIL_SUBJECT_EMPTY: 'entity_builder.flow.error.email.subject.empty',
341
+ EMAIL_BODY_EMPTY: 'entity_builder.flow.error.email.body.empty',
342
+ EMAIL_FAILED: 'entity_builder.flow.error.email.failed'
325
343
  };
326
344
  /** Why a node was not executed in a test run (`output.reasonKey`). */ const FLOW_SKIP_MESSAGES = {
327
345
  HTTP: 'entity_builder.flow.skip.http',
328
346
  EVENTS: 'entity_builder.flow.skip.events',
347
+ NOTIFICATION: 'entity_builder.flow.skip.notification',
348
+ EMAIL: 'entity_builder.flow.skip.email',
349
+ NO_RECIPIENTS: 'entity_builder.flow.skip.no.recipients',
329
350
  COMMIT_DRY_RUN: 'entity_builder.flow.skip.commit.dry.run',
330
351
  COMMIT_NO_TRANSACTION: 'entity_builder.flow.skip.commit.no.transaction',
331
352
  COMMIT_JOINED: 'entity_builder.flow.skip.commit.joined'
332
353
  };
333
354
  /** Save-time findings about a flow (`validateFlow`). */ const FLOW_VALIDATION_MESSAGES = {
334
355
  SLUG_INVALID: 'entity_builder.flow.validation.slug.invalid',
335
- RUN_AS_CALLER_NEEDS_AUTH: 'entity_builder.flow.validation.run.as.caller.needs.auth',
336
- RUN_AS_INVALID: 'entity_builder.flow.validation.run.as.invalid',
337
- AUTH_MODE_INVALID: 'entity_builder.flow.validation.auth.mode.invalid',
338
356
  NO_NODES: 'entity_builder.flow.validation.no.nodes',
339
357
  TOO_MANY_NODES: 'entity_builder.flow.validation.too.many.nodes',
340
358
  TOO_MANY_EDGES: 'entity_builder.flow.validation.too.many.edges',
341
359
  NODE_ID_INVALID: 'entity_builder.flow.validation.node.id.invalid',
342
360
  NODE_ID_DUPLICATE: 'entity_builder.flow.validation.node.id.duplicate',
343
361
  NODE_TYPE_UNKNOWN: 'entity_builder.flow.validation.node.type.unknown',
344
- TRIGGER_COUNT: 'entity_builder.flow.validation.trigger.count',
362
+ TRIGGER_MISSING: 'entity_builder.flow.validation.trigger.missing',
363
+ TRIGGER_MAIN_DUPLICATE: 'entity_builder.flow.validation.trigger.main.duplicate',
364
+ TRIGGER_PATH_INVALID: 'entity_builder.flow.validation.trigger.path.invalid',
365
+ TRIGGER_PATH_DUPLICATE: 'entity_builder.flow.validation.trigger.path.duplicate',
345
366
  EDGE_ID_DUPLICATE: 'entity_builder.flow.validation.edge.id.duplicate',
346
367
  EDGE_DANGLING: 'entity_builder.flow.validation.edge.dangling',
347
368
  EDGE_SELF: 'entity_builder.flow.validation.edge.self',
@@ -356,8 +377,17 @@ const FLOW_MESSAGES = {
356
377
  COMMIT_NOT_TRANSACTIONAL: 'entity_builder.flow.validation.commit.not.transactional',
357
378
  COMMIT_IN_LOOP: 'entity_builder.flow.validation.commit.in.loop',
358
379
  COMMIT_IN_CALLED_FLOW: 'entity_builder.flow.validation.commit.in.called.flow',
359
- PUBLIC_SYSTEM_ENTITY: 'entity_builder.flow.validation.public.system.entity',
360
380
  PERMISSION_WITHOUT_USER: 'entity_builder.flow.validation.permission.without.user',
381
+ KEYLESS_ENTITY: 'entity_builder.flow.validation.keyless.entity',
382
+ TRIGGER_AUTH_INVALID: 'entity_builder.flow.validation.trigger.auth.invalid',
383
+ TRIGGER_TRANSACTION_INVALID: 'entity_builder.flow.validation.trigger.transaction.invalid',
384
+ TRIGGER_TIMEOUT_RANGE: 'entity_builder.flow.validation.trigger.timeout.range',
385
+ TRIGGER_RATE_LIMIT_RANGE: 'entity_builder.flow.validation.trigger.rate.limit.range',
386
+ TRIGGER_API_KEY_REQUIRED: 'entity_builder.flow.validation.trigger.api.key.required',
387
+ TRIGGER_API_KEY_INVALID: 'entity_builder.flow.validation.trigger.api.key.invalid',
388
+ NODE_FORWARDS_TOKEN: 'entity_builder.flow.validation.node.forwards.token',
389
+ NODE_ACCESS_TARGET_REQUIRED: 'entity_builder.flow.validation.node.access.target.required',
390
+ NODE_ACCESS_USER_REQUIRED: 'entity_builder.flow.validation.node.access.user.required',
361
391
  INPUT_TOO_MANY: 'entity_builder.flow.validation.input.too.many',
362
392
  INPUT_NAME_INVALID: 'entity_builder.flow.validation.input.name.invalid',
363
393
  INPUT_NAME_DUPLICATE: 'entity_builder.flow.validation.input.name.duplicate',
@@ -379,6 +409,7 @@ const FLOW_MESSAGES = {
379
409
  NODE_CASE_DUPLICATE: 'entity_builder.flow.validation.node.case.duplicate',
380
410
  NODE_MAX_ITEMS_RANGE: 'entity_builder.flow.validation.node.max.items.range',
381
411
  NODE_LIMIT_RANGE: 'entity_builder.flow.validation.node.limit.range',
412
+ NODE_SORT_INVALID: 'entity_builder.flow.validation.node.sort.invalid',
382
413
  NODE_WRITE_TARGET_INVALID: 'entity_builder.flow.validation.node.write.target.invalid',
383
414
  NODE_NOT_FOUND_INVALID: 'entity_builder.flow.validation.node.not.found.invalid',
384
415
  NODE_FILTER_REQUIRED: 'entity_builder.flow.validation.node.filter.required',
@@ -389,6 +420,8 @@ const FLOW_MESSAGES = {
389
420
  NODE_CHILD_PARENT_FIELD_REQUIRED: 'entity_builder.flow.validation.node.child.parent.field.required',
390
421
  NODE_CHOOSE_FLOW: 'entity_builder.flow.validation.node.choose.flow',
391
422
  NODE_FLOW_UNKNOWN: 'entity_builder.flow.validation.node.flow.unknown',
423
+ NODE_FLOW_ENDPOINT_UNKNOWN: 'entity_builder.flow.validation.node.flow.endpoint.unknown',
424
+ NODE_FLOW_ENDPOINT_REQUIRED: 'entity_builder.flow.validation.node.flow.endpoint.required',
392
425
  NODE_CALLS_ITSELF: 'entity_builder.flow.validation.node.calls.itself',
393
426
  NODE_FLOW_INACTIVE: 'entity_builder.flow.validation.node.flow.inactive',
394
427
  NODE_FLOW_API_KEY: 'entity_builder.flow.validation.node.flow.api.key',
@@ -401,6 +434,15 @@ const FLOW_MESSAGES = {
401
434
  NODE_CHOOSE_METHOD: 'entity_builder.flow.validation.node.choose.method',
402
435
  NODE_TIMEOUT_RANGE: 'entity_builder.flow.validation.node.timeout.range',
403
436
  NODE_EVENT_NAME_INVALID: 'entity_builder.flow.validation.node.event.name.invalid',
437
+ NODE_NOTIFICATION_UNAVAILABLE: 'entity_builder.flow.validation.node.notification.unavailable',
438
+ NODE_NOTIFICATION_OPTION_INVALID: 'entity_builder.flow.validation.node.notification.option.invalid',
439
+ NODE_NOTIFICATION_COMPANY_UNAVAILABLE: 'entity_builder.flow.validation.node.notification.company.unavailable',
440
+ NODE_MESSAGE_TARGET_INVALID: 'entity_builder.flow.validation.node.message.target.invalid',
441
+ NODE_EMAIL_UNAVAILABLE: 'entity_builder.flow.validation.node.email.unavailable',
442
+ NODE_EMAIL_OPTION_INVALID: 'entity_builder.flow.validation.node.email.option.invalid',
443
+ NODE_EMAIL_TEMPLATE_REQUIRED: 'entity_builder.flow.validation.node.email.template.required',
444
+ MESSAGE_AFTER_COMMIT: 'entity_builder.flow.validation.message.after.commit',
445
+ PUBLIC_MESSAGE: 'entity_builder.flow.validation.public.message',
404
446
  NODE_STATUS_2XX_5XX: 'entity_builder.flow.validation.node.status.2xx.5xx',
405
447
  REF_BAD_SCOPE: 'entity_builder.flow.validation.ref.bad.scope',
406
448
  REF_NODE_MISSING: 'entity_builder.flow.validation.ref.node.missing',
@@ -468,6 +510,22 @@ const FLOW_MESSAGES = {
468
510
  THE_URL: 'entity_builder.flow.subject.the.url',
469
511
  THE_INPUT_LIST: 'entity_builder.flow.subject.the.input.list',
470
512
  THE_RESPONSE: 'entity_builder.flow.subject.the.response',
513
+ THE_RECIPIENTS: 'entity_builder.flow.subject.the.recipients',
514
+ THE_TITLE: 'entity_builder.flow.subject.the.title',
515
+ THE_MESSAGE: 'entity_builder.flow.subject.the.message',
516
+ THE_COMPANY: 'entity_builder.flow.subject.the.company',
517
+ THE_COMPANIES: 'entity_builder.flow.subject.the.companies',
518
+ THE_BRANCHES: 'entity_builder.flow.subject.the.branches',
519
+ THE_USER: 'entity_builder.flow.subject.the.user',
520
+ THE_CC: 'entity_builder.flow.subject.the.cc',
521
+ THE_BCC: 'entity_builder.flow.subject.the.bcc',
522
+ THE_REPLY_TO: 'entity_builder.flow.subject.the.reply.to',
523
+ THE_SUBJECT: 'entity_builder.flow.subject.the.subject',
524
+ THE_BODY: 'entity_builder.flow.subject.the.body',
525
+ DATA_VALUES: 'entity_builder.flow.subject.data.values',
526
+ DATA_VALUE: 'entity_builder.flow.subject.data.value',
527
+ TEMPLATE_VALUES: 'entity_builder.flow.subject.template.values',
528
+ TEMPLATE_VALUE: 'entity_builder.flow.subject.template.value',
471
529
  VARIABLES: 'entity_builder.flow.subject.variables',
472
530
  VARIABLE: 'entity_builder.flow.subject.variable',
473
531
  FIELDS: 'entity_builder.flow.subject.fields',
@@ -485,6 +543,37 @@ const FLOW_MESSAGES = {
485
543
  RESPONSE_VALUES: 'entity_builder.flow.subject.response.values',
486
544
  RESPONSE_VALUE: 'entity_builder.flow.subject.response.value'
487
545
  };
546
+ /** Promoting entity and flow definitions between environments (export / plan-import / apply-import). */ const BUNDLE_MESSAGES = {
547
+ SETTINGS_SUCCESS: 'entity_builder.bundle.settings.success',
548
+ EXPORT_SUCCESS: 'entity_builder.bundle.export.success',
549
+ PLAN_SUCCESS: 'entity_builder.bundle.plan.success',
550
+ APPLY_SUCCESS: 'entity_builder.bundle.apply.success',
551
+ APPLY_PARTIAL: 'entity_builder.bundle.apply.partial',
552
+ APPLY_BLOCKED: 'entity_builder.bundle.apply.blocked',
553
+ CHECKSUM_MISMATCH: 'entity_builder.bundle.checksum.mismatch',
554
+ PLAN_CHANGED: 'entity_builder.bundle.plan.changed',
555
+ PLAN_CHECKSUM_REQUIRED: 'entity_builder.bundle.plan.checksum.required',
556
+ ENTITY_DRAFT_IN_BUNDLE: 'entity_builder.bundle.entity.draft.in.bundle',
557
+ ENTITY_DRAFT_HERE: 'entity_builder.bundle.entity.draft.here',
558
+ ENTITY_DRAFT_SKIPPED: 'entity_builder.bundle.entity.draft.skipped',
559
+ RENAME_VIA_TEMPORARY: 'entity_builder.bundle.rename.via.temporary',
560
+ FILE_REQUIRED: 'entity_builder.bundle.file.required',
561
+ FILE_INVALID: 'entity_builder.bundle.file.invalid',
562
+ CONFIRM_REQUIRED: 'entity_builder.bundle.confirm.required',
563
+ DUPLICATE_ENTITY: 'entity_builder.bundle.duplicate.entity',
564
+ DUPLICATE_FIELD: 'entity_builder.bundle.duplicate.field',
565
+ DUPLICATE_FLOW: 'entity_builder.bundle.duplicate.flow',
566
+ RELATION_TARGET_UNKNOWN: 'entity_builder.bundle.relation.target.unknown',
567
+ ENTITY_CODE_CHANGED: 'entity_builder.bundle.entity.code.changed',
568
+ VARIABLE_MISSING: 'entity_builder.bundle.variable.missing',
569
+ FLOW_SLUG_DELETED: 'entity_builder.bundle.flow.slug.deleted',
570
+ FLOW_UNPUBLISHED_SKIPPED: 'entity_builder.bundle.flow.unpublished.skipped',
571
+ FLOW_DRAFT_REPLACED: 'entity_builder.bundle.flow.draft.replaced',
572
+ FLOW_API_KEY_GENERATED: 'entity_builder.bundle.flow.api.key.generated',
573
+ STEP_AFTER_EARLIER: 'entity_builder.bundle.step.after.earlier',
574
+ FLOWS_CHECKED_ON_APPLY: 'entity_builder.bundle.flows.checked.on.apply',
575
+ DESIGNER_READ_ONLY: 'entity_builder.designer.read.only'
576
+ };
488
577
 
489
578
  __webpack_require__.d(__webpack_exports__, {
490
579
  }, {
@@ -500,6 +589,7 @@ __webpack_require__.d(__webpack_exports__, {
500
589
  Vu: SCHEMA_FINDING_MESSAGES,
501
590
  aB: SCHEMA_IMPACT_MESSAGES,
502
591
  bc: FLOW_SUBJECT_MESSAGES,
592
+ iX: BUNDLE_MESSAGES,
503
593
  j4: GENERIC_RECORD_MESSAGES,
504
594
  oc: FIELD_DEFINITION_MESSAGES,
505
595
  pL: ENTITY_DEFINITION_MESSAGES,