@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,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;
@@ -52,9 +46,12 @@ export declare class ValidateFlowDto {
52
46
  export declare class FlowIdDto {
53
47
  flowId: string;
54
48
  }
55
- export declare class CreateFlowApiKeyDto extends FlowIdDto {
56
- name: string;
57
- expiresAt?: string;
49
+ export declare class PublishFlowDto {
50
+ id: string;
51
+ note?: string;
52
+ }
53
+ export declare class FlowVersionRefDto extends FlowIdDto {
54
+ version: number;
58
55
  }
59
56
  export declare class IdBodyDto {
60
57
  id: string;
@@ -62,6 +59,8 @@ export declare class IdBodyDto {
62
59
  export declare class ListFlowExecutionsDto {
63
60
  flowId?: string;
64
61
  status?: string;
62
+ trigger?: string;
63
+ endpointNodeId?: string;
65
64
  page?: number;
66
65
  pageSize?: number;
67
66
  }
@@ -70,17 +69,10 @@ export declare class FlowDefinitionResponseDto extends IdentityResponseDto {
70
69
  slug: string;
71
70
  description: string | null;
72
71
  isActive: boolean;
73
- authMode: FlowAuthMode;
74
- permissionCode: string | null;
75
- runAs: FlowRunAs;
76
- isTransactional: boolean;
77
- timeoutMs: number;
78
- rateLimitPerMinute: number;
79
72
  retainExecutions: number;
80
- bodyType: FlowBodyType;
81
- inputSchema: IFlowInputField[];
82
73
  nodes: IFlowNode[];
83
74
  edges: IFlowEdge[];
84
75
  version: number;
76
+ draft: IFlowSnapshot | null;
85
77
  }
86
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
@@ -61,7 +61,8 @@ const GENERIC_RECORD_MESSAGES = {
61
61
  REFERENCE_VIOLATION: 'entity_builder.generic_record.reference.violation',
62
62
  FILTER_OPERATOR_UNKNOWN: 'entity_builder.generic_record.filter.operator.unknown',
63
63
  FILTER_VALUE_INVALID: 'entity_builder.generic_record.filter.value.invalid',
64
- FILTER_TOO_MANY_VALUES: 'entity_builder.generic_record.filter.too.many.values'
64
+ FILTER_TOO_MANY_VALUES: 'entity_builder.generic_record.filter.too.many.values',
65
+ FILTER_OPERATOR_NOT_FOR_FIELD: 'entity_builder.generic_record.filter.operator.not.for.field'
65
66
  };
66
67
  const SCHEMA_MESSAGES = {
67
68
  BUSY: 'entity_builder.schema.busy',
@@ -262,15 +263,9 @@ const FLOW_MESSAGES = {
262
263
  SLUG_TAKEN: 'entity_builder.flow.slug.taken',
263
264
  RATE_LIMITED: 'entity_builder.flow.rate.limited',
264
265
  API_KEY_INVALID: 'entity_builder.flow.api.key.invalid',
265
- API_KEY_NOT_FOUND: 'entity_builder.flow.api.key.not.found',
266
- API_KEY_CREATE_SUCCESS: 'entity_builder.flow.api.key.create.success',
267
- API_KEY_LIST_SUCCESS: 'entity_builder.flow.api.key.list.success',
268
- API_KEY_REVOKE_SUCCESS: 'entity_builder.flow.api.key.revoke.success',
269
- API_KEY_DELETE_SUCCESS: 'entity_builder.flow.api.key.delete.success',
270
- API_KEY_EXPIRED: 'entity_builder.flow.api.key.expired',
271
- API_KEY_EXPIRY_IN_PAST: 'entity_builder.flow.api.key.expiry.in.past',
272
266
  CALLED_BY_OTHER_FLOWS: 'entity_builder.flow.called.by.other.flows',
273
267
  ENDPOINT_CALLED_BY_OTHER_FLOWS: 'entity_builder.flow.endpoint.called.by.other.flows',
268
+ CALLERS_BROKEN: 'entity_builder.flow.callers.broken',
274
269
  EXECUTION_NOT_FOUND: 'entity_builder.flow.execution.not.found',
275
270
  EXECUTIONS_SUCCESS: 'entity_builder.flow.executions.success',
276
271
  EXECUTION_SUCCESS: 'entity_builder.flow.execution.success',
@@ -287,7 +282,15 @@ const FLOW_MESSAGES = {
287
282
  INPUT_BODY_NOT_LIST: 'entity_builder.flow.input.body.not.list',
288
283
  INPUT_BODY_ITEM_NOT_OBJECT: 'entity_builder.flow.input.body.item.not.object',
289
284
  CHECKS_FAILED: 'entity_builder.flow.checks.failed',
290
- PERMISSION_DENIED: 'entity_builder.flow.permission.denied'
285
+ PERMISSION_DENIED: 'entity_builder.flow.permission.denied',
286
+ PUBLISH_SUCCESS: 'entity_builder.flow.publish.success',
287
+ NOTHING_TO_PUBLISH: 'entity_builder.flow.nothing.to.publish',
288
+ VERSIONS_SUCCESS: 'entity_builder.flow.versions.success',
289
+ VERSION_SUCCESS: 'entity_builder.flow.version.success',
290
+ VERSION_NOT_FOUND: 'entity_builder.flow.version.not.found',
291
+ VERSION_RESTORED: 'entity_builder.flow.version.restored',
292
+ DRAFT_DISCARDED: 'entity_builder.flow.draft.discarded',
293
+ NO_DRAFT: 'entity_builder.flow.no.draft'
291
294
  };
292
295
  /** Why a run was stopped or a node failed (`trace[].error`, `body.messageKey`). */ const FLOW_ERROR_MESSAGES = {
293
296
  NO_TRIGGER: 'entity_builder.flow.error.no.trigger',
@@ -323,21 +326,34 @@ const FLOW_MESSAGES = {
323
326
  CALLED_FLOW_TOO_DEEP: 'entity_builder.flow.error.called.flow.too.deep',
324
327
  CALLED_FLOW_FAILED: 'entity_builder.flow.error.called.flow.failed',
325
328
  CALLED_FLOW_FAILED_AT_NODE: 'entity_builder.flow.error.called.flow.failed.at.node',
326
- RUN_AS_NOT_ALLOWED: 'entity_builder.flow.error.run.as.not.allowed',
327
- FILTER_VALUE_MISSING: 'entity_builder.flow.error.filter.value.missing'
329
+ FILTER_VALUE_MISSING: 'entity_builder.flow.error.filter.value.missing',
330
+ TOO_MANY_MESSAGES: 'entity_builder.flow.error.too.many.messages',
331
+ TOO_MANY_RECIPIENTS: 'entity_builder.flow.error.too.many.recipients',
332
+ NOTIFICATION_UNAVAILABLE: 'entity_builder.flow.error.notification.unavailable',
333
+ NOTIFICATION_RECIPIENT_INVALID: 'entity_builder.flow.error.notification.recipient.invalid',
334
+ NOTIFICATION_COMPANY_INVALID: 'entity_builder.flow.error.notification.company.invalid',
335
+ NOTIFICATION_BRANCH_INVALID: 'entity_builder.flow.error.notification.branch.invalid',
336
+ NOTIFICATION_COMPANY_UNAVAILABLE: 'entity_builder.flow.error.notification.company.unavailable',
337
+ NOTIFICATION_TITLE_EMPTY: 'entity_builder.flow.error.notification.title.empty',
338
+ NOTIFICATION_FAILED: 'entity_builder.flow.error.notification.failed',
339
+ EMAIL_UNAVAILABLE: 'entity_builder.flow.error.email.unavailable',
340
+ EMAIL_ADDRESS_INVALID: 'entity_builder.flow.error.email.address.invalid',
341
+ EMAIL_SUBJECT_EMPTY: 'entity_builder.flow.error.email.subject.empty',
342
+ EMAIL_BODY_EMPTY: 'entity_builder.flow.error.email.body.empty',
343
+ EMAIL_FAILED: 'entity_builder.flow.error.email.failed'
328
344
  };
329
345
  /** Why a node was not executed in a test run (`output.reasonKey`). */ const FLOW_SKIP_MESSAGES = {
330
346
  HTTP: 'entity_builder.flow.skip.http',
331
347
  EVENTS: 'entity_builder.flow.skip.events',
348
+ NOTIFICATION: 'entity_builder.flow.skip.notification',
349
+ EMAIL: 'entity_builder.flow.skip.email',
350
+ NO_RECIPIENTS: 'entity_builder.flow.skip.no.recipients',
332
351
  COMMIT_DRY_RUN: 'entity_builder.flow.skip.commit.dry.run',
333
352
  COMMIT_NO_TRANSACTION: 'entity_builder.flow.skip.commit.no.transaction',
334
353
  COMMIT_JOINED: 'entity_builder.flow.skip.commit.joined'
335
354
  };
336
355
  /** Save-time findings about a flow (`validateFlow`). */ const FLOW_VALIDATION_MESSAGES = {
337
356
  SLUG_INVALID: 'entity_builder.flow.validation.slug.invalid',
338
- RUN_AS_CALLER_NEEDS_AUTH: 'entity_builder.flow.validation.run.as.caller.needs.auth',
339
- RUN_AS_INVALID: 'entity_builder.flow.validation.run.as.invalid',
340
- AUTH_MODE_INVALID: 'entity_builder.flow.validation.auth.mode.invalid',
341
357
  NO_NODES: 'entity_builder.flow.validation.no.nodes',
342
358
  TOO_MANY_NODES: 'entity_builder.flow.validation.too.many.nodes',
343
359
  TOO_MANY_EDGES: 'entity_builder.flow.validation.too.many.edges',
@@ -362,8 +378,17 @@ const FLOW_MESSAGES = {
362
378
  COMMIT_NOT_TRANSACTIONAL: 'entity_builder.flow.validation.commit.not.transactional',
363
379
  COMMIT_IN_LOOP: 'entity_builder.flow.validation.commit.in.loop',
364
380
  COMMIT_IN_CALLED_FLOW: 'entity_builder.flow.validation.commit.in.called.flow',
365
- PUBLIC_SYSTEM_ENTITY: 'entity_builder.flow.validation.public.system.entity',
366
381
  PERMISSION_WITHOUT_USER: 'entity_builder.flow.validation.permission.without.user',
382
+ KEYLESS_ENTITY: 'entity_builder.flow.validation.keyless.entity',
383
+ TRIGGER_AUTH_INVALID: 'entity_builder.flow.validation.trigger.auth.invalid',
384
+ TRIGGER_TRANSACTION_INVALID: 'entity_builder.flow.validation.trigger.transaction.invalid',
385
+ TRIGGER_TIMEOUT_RANGE: 'entity_builder.flow.validation.trigger.timeout.range',
386
+ TRIGGER_RATE_LIMIT_RANGE: 'entity_builder.flow.validation.trigger.rate.limit.range',
387
+ TRIGGER_API_KEY_REQUIRED: 'entity_builder.flow.validation.trigger.api.key.required',
388
+ TRIGGER_API_KEY_INVALID: 'entity_builder.flow.validation.trigger.api.key.invalid',
389
+ NODE_FORWARDS_TOKEN: 'entity_builder.flow.validation.node.forwards.token',
390
+ NODE_ACCESS_TARGET_REQUIRED: 'entity_builder.flow.validation.node.access.target.required',
391
+ NODE_ACCESS_USER_REQUIRED: 'entity_builder.flow.validation.node.access.user.required',
367
392
  INPUT_TOO_MANY: 'entity_builder.flow.validation.input.too.many',
368
393
  INPUT_NAME_INVALID: 'entity_builder.flow.validation.input.name.invalid',
369
394
  INPUT_NAME_DUPLICATE: 'entity_builder.flow.validation.input.name.duplicate',
@@ -385,6 +410,7 @@ const FLOW_MESSAGES = {
385
410
  NODE_CASE_DUPLICATE: 'entity_builder.flow.validation.node.case.duplicate',
386
411
  NODE_MAX_ITEMS_RANGE: 'entity_builder.flow.validation.node.max.items.range',
387
412
  NODE_LIMIT_RANGE: 'entity_builder.flow.validation.node.limit.range',
413
+ NODE_SORT_INVALID: 'entity_builder.flow.validation.node.sort.invalid',
388
414
  NODE_WRITE_TARGET_INVALID: 'entity_builder.flow.validation.node.write.target.invalid',
389
415
  NODE_NOT_FOUND_INVALID: 'entity_builder.flow.validation.node.not.found.invalid',
390
416
  NODE_FILTER_REQUIRED: 'entity_builder.flow.validation.node.filter.required',
@@ -409,6 +435,15 @@ const FLOW_MESSAGES = {
409
435
  NODE_CHOOSE_METHOD: 'entity_builder.flow.validation.node.choose.method',
410
436
  NODE_TIMEOUT_RANGE: 'entity_builder.flow.validation.node.timeout.range',
411
437
  NODE_EVENT_NAME_INVALID: 'entity_builder.flow.validation.node.event.name.invalid',
438
+ NODE_NOTIFICATION_UNAVAILABLE: 'entity_builder.flow.validation.node.notification.unavailable',
439
+ NODE_NOTIFICATION_OPTION_INVALID: 'entity_builder.flow.validation.node.notification.option.invalid',
440
+ NODE_NOTIFICATION_COMPANY_UNAVAILABLE: 'entity_builder.flow.validation.node.notification.company.unavailable',
441
+ NODE_MESSAGE_TARGET_INVALID: 'entity_builder.flow.validation.node.message.target.invalid',
442
+ NODE_EMAIL_UNAVAILABLE: 'entity_builder.flow.validation.node.email.unavailable',
443
+ NODE_EMAIL_OPTION_INVALID: 'entity_builder.flow.validation.node.email.option.invalid',
444
+ NODE_EMAIL_TEMPLATE_REQUIRED: 'entity_builder.flow.validation.node.email.template.required',
445
+ MESSAGE_AFTER_COMMIT: 'entity_builder.flow.validation.message.after.commit',
446
+ PUBLIC_MESSAGE: 'entity_builder.flow.validation.public.message',
412
447
  NODE_STATUS_2XX_5XX: 'entity_builder.flow.validation.node.status.2xx.5xx',
413
448
  REF_BAD_SCOPE: 'entity_builder.flow.validation.ref.bad.scope',
414
449
  REF_NODE_MISSING: 'entity_builder.flow.validation.ref.node.missing',
@@ -461,7 +496,8 @@ const FLOW_MESSAGES = {
461
496
  LOOKUP_FILTER_INVALID: 'entity_builder.flow.shape.lookup.filter.invalid',
462
497
  LOOKUP_FIELD_INVALID: 'entity_builder.flow.shape.lookup.field.invalid',
463
498
  FILTER_OPERATOR_UNKNOWN: 'entity_builder.flow.shape.filter.operator.unknown',
464
- FILTER_VALUE_REQUIRED: 'entity_builder.flow.shape.filter.value.required'
499
+ FILTER_VALUE_REQUIRED: 'entity_builder.flow.shape.filter.value.required',
500
+ FILTER_RANGE_INVALID: 'entity_builder.flow.shape.filter.range.invalid'
465
501
  };
466
502
  /** What a flow node problem is about (`what` variable of the node validation messages). */ const FLOW_SUBJECT_MESSAGES = {
467
503
  THE_RULE: 'entity_builder.flow.subject.the.rule',
@@ -476,6 +512,23 @@ const FLOW_MESSAGES = {
476
512
  THE_URL: 'entity_builder.flow.subject.the.url',
477
513
  THE_INPUT_LIST: 'entity_builder.flow.subject.the.input.list',
478
514
  THE_RESPONSE: 'entity_builder.flow.subject.the.response',
515
+ THE_RECIPIENTS: 'entity_builder.flow.subject.the.recipients',
516
+ THE_TITLE: 'entity_builder.flow.subject.the.title',
517
+ THE_MESSAGE: 'entity_builder.flow.subject.the.message',
518
+ THE_COMPANY: 'entity_builder.flow.subject.the.company',
519
+ THE_COMPANIES: 'entity_builder.flow.subject.the.companies',
520
+ THE_BRANCHES: 'entity_builder.flow.subject.the.branches',
521
+ THE_BRANCH: 'entity_builder.flow.subject.the.branch',
522
+ THE_USER: 'entity_builder.flow.subject.the.user',
523
+ THE_CC: 'entity_builder.flow.subject.the.cc',
524
+ THE_BCC: 'entity_builder.flow.subject.the.bcc',
525
+ THE_REPLY_TO: 'entity_builder.flow.subject.the.reply.to',
526
+ THE_SUBJECT: 'entity_builder.flow.subject.the.subject',
527
+ THE_BODY: 'entity_builder.flow.subject.the.body',
528
+ DATA_VALUES: 'entity_builder.flow.subject.data.values',
529
+ DATA_VALUE: 'entity_builder.flow.subject.data.value',
530
+ TEMPLATE_VALUES: 'entity_builder.flow.subject.template.values',
531
+ TEMPLATE_VALUE: 'entity_builder.flow.subject.template.value',
479
532
  VARIABLES: 'entity_builder.flow.subject.variables',
480
533
  VARIABLE: 'entity_builder.flow.subject.variable',
481
534
  FIELDS: 'entity_builder.flow.subject.fields',
@@ -493,6 +546,37 @@ const FLOW_MESSAGES = {
493
546
  RESPONSE_VALUES: 'entity_builder.flow.subject.response.values',
494
547
  RESPONSE_VALUE: 'entity_builder.flow.subject.response.value'
495
548
  };
549
+ /** Promoting entity and flow definitions between environments (export / plan-import / apply-import). */ const BUNDLE_MESSAGES = {
550
+ SETTINGS_SUCCESS: 'entity_builder.bundle.settings.success',
551
+ EXPORT_SUCCESS: 'entity_builder.bundle.export.success',
552
+ PLAN_SUCCESS: 'entity_builder.bundle.plan.success',
553
+ APPLY_SUCCESS: 'entity_builder.bundle.apply.success',
554
+ APPLY_PARTIAL: 'entity_builder.bundle.apply.partial',
555
+ APPLY_BLOCKED: 'entity_builder.bundle.apply.blocked',
556
+ CHECKSUM_MISMATCH: 'entity_builder.bundle.checksum.mismatch',
557
+ PLAN_CHANGED: 'entity_builder.bundle.plan.changed',
558
+ PLAN_CHECKSUM_REQUIRED: 'entity_builder.bundle.plan.checksum.required',
559
+ ENTITY_DRAFT_IN_BUNDLE: 'entity_builder.bundle.entity.draft.in.bundle',
560
+ ENTITY_DRAFT_HERE: 'entity_builder.bundle.entity.draft.here',
561
+ ENTITY_DRAFT_SKIPPED: 'entity_builder.bundle.entity.draft.skipped',
562
+ RENAME_VIA_TEMPORARY: 'entity_builder.bundle.rename.via.temporary',
563
+ FILE_REQUIRED: 'entity_builder.bundle.file.required',
564
+ FILE_INVALID: 'entity_builder.bundle.file.invalid',
565
+ CONFIRM_REQUIRED: 'entity_builder.bundle.confirm.required',
566
+ DUPLICATE_ENTITY: 'entity_builder.bundle.duplicate.entity',
567
+ DUPLICATE_FIELD: 'entity_builder.bundle.duplicate.field',
568
+ DUPLICATE_FLOW: 'entity_builder.bundle.duplicate.flow',
569
+ RELATION_TARGET_UNKNOWN: 'entity_builder.bundle.relation.target.unknown',
570
+ ENTITY_CODE_CHANGED: 'entity_builder.bundle.entity.code.changed',
571
+ VARIABLE_MISSING: 'entity_builder.bundle.variable.missing',
572
+ FLOW_SLUG_DELETED: 'entity_builder.bundle.flow.slug.deleted',
573
+ FLOW_UNPUBLISHED_SKIPPED: 'entity_builder.bundle.flow.unpublished.skipped',
574
+ FLOW_DRAFT_REPLACED: 'entity_builder.bundle.flow.draft.replaced',
575
+ FLOW_API_KEY_GENERATED: 'entity_builder.bundle.flow.api.key.generated',
576
+ STEP_AFTER_EARLIER: 'entity_builder.bundle.step.after.earlier',
577
+ FLOWS_CHECKED_ON_APPLY: 'entity_builder.bundle.flows.checked.on.apply',
578
+ DESIGNER_READ_ONLY: 'entity_builder.designer.read.only'
579
+ };
496
580
 
497
581
  __webpack_require__.d(__webpack_exports__, {
498
582
  }, {
@@ -508,6 +592,7 @@ __webpack_require__.d(__webpack_exports__, {
508
592
  Vu: SCHEMA_FINDING_MESSAGES,
509
593
  aB: SCHEMA_IMPACT_MESSAGES,
510
594
  bc: FLOW_SUBJECT_MESSAGES,
595
+ iX: BUNDLE_MESSAGES,
511
596
  j4: GENERIC_RECORD_MESSAGES,
512
597
  oc: FIELD_DEFINITION_MESSAGES,
513
598
  pL: ENTITY_DEFINITION_MESSAGES,