@open-mercato/core 0.4.2-canary-c71ef83148 → 0.4.2-canary-f821f89ef6
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.
- package/dist/generated/entities/workflow_event_trigger/index.js +33 -0
- package/dist/generated/entities/workflow_event_trigger/index.js.map +7 -0
- package/dist/generated/entities.ids.generated.js +2 -5
- package/dist/generated/entities.ids.generated.js.map +2 -2
- package/dist/generated/entity-fields-registry.js +2 -2
- package/dist/generated/entity-fields-registry.js.map +2 -2
- package/dist/modules/api_docs/frontend/docs/api/page.js +2 -3
- package/dist/modules/api_docs/frontend/docs/api/page.js.map +2 -2
- package/dist/modules/api_keys/backend/api-keys/page.js +1 -1
- package/dist/modules/api_keys/backend/api-keys/page.js.map +2 -2
- package/dist/modules/attachments/components/AttachmentLibrary.js +0 -4
- package/dist/modules/attachments/components/AttachmentLibrary.js.map +2 -2
- package/dist/modules/attachments/components/AttachmentPartitionSettings.js +0 -2
- package/dist/modules/attachments/components/AttachmentPartitionSettings.js.map +2 -2
- package/dist/modules/auth/api/admin/nav.js +3 -4
- package/dist/modules/auth/api/admin/nav.js.map +2 -2
- package/dist/modules/auth/api/login.js +6 -25
- package/dist/modules/auth/api/login.js.map +2 -2
- package/dist/modules/auth/api/reset/confirm.js +2 -25
- package/dist/modules/auth/api/reset/confirm.js.map +2 -2
- package/dist/modules/auth/api/reset.js +0 -23
- package/dist/modules/auth/api/reset.js.map +2 -2
- package/dist/modules/auth/api/sidebar/preferences/route.js +9 -14
- package/dist/modules/auth/api/sidebar/preferences/route.js.map +2 -2
- package/dist/modules/auth/api/users/route.js +2 -4
- package/dist/modules/auth/api/users/route.js.map +2 -2
- package/dist/modules/auth/backend/roles/[id]/edit/page.js +1 -4
- package/dist/modules/auth/backend/roles/[id]/edit/page.js.map +2 -2
- package/dist/modules/auth/backend/roles/page.js +3 -3
- package/dist/modules/auth/backend/roles/page.js.map +2 -2
- package/dist/modules/auth/backend/users/[id]/edit/page.js +3 -18
- package/dist/modules/auth/backend/users/[id]/edit/page.js.map +2 -2
- package/dist/modules/auth/backend/users/create/page.js +2 -15
- package/dist/modules/auth/backend/users/create/page.js.map +2 -2
- package/dist/modules/auth/backend/users/page.js +3 -3
- package/dist/modules/auth/backend/users/page.js.map +2 -2
- package/dist/modules/auth/cli.js +11 -25
- package/dist/modules/auth/cli.js.map +2 -2
- package/dist/modules/auth/commands/users.js +2 -59
- package/dist/modules/auth/commands/users.js.map +2 -2
- package/dist/modules/auth/data/validators.js +3 -6
- package/dist/modules/auth/data/validators.js.map +2 -2
- package/dist/modules/auth/events.js +30 -0
- package/dist/modules/auth/events.js.map +7 -0
- package/dist/modules/auth/frontend/login.js +3 -105
- package/dist/modules/auth/frontend/login.js.map +2 -2
- package/dist/modules/auth/frontend/reset/[token]/page.js +10 -20
- package/dist/modules/auth/frontend/reset/[token]/page.js.map +2 -2
- package/dist/modules/auth/lib/setup-app.js +8 -42
- package/dist/modules/auth/lib/setup-app.js.map +2 -2
- package/dist/modules/auth/services/authService.js +3 -24
- package/dist/modules/auth/services/authService.js.map +2 -2
- package/dist/modules/business_rules/api/execute/[ruleId]/route.js +145 -0
- package/dist/modules/business_rules/api/execute/[ruleId]/route.js.map +7 -0
- package/dist/modules/business_rules/api/execute/route.js +1 -7
- package/dist/modules/business_rules/api/execute/route.js.map +2 -2
- package/dist/modules/business_rules/backend/rules/page.js +0 -4
- package/dist/modules/business_rules/backend/rules/page.js.map +2 -2
- package/dist/modules/business_rules/backend/sets/page.js +0 -3
- package/dist/modules/business_rules/backend/sets/page.js.map +2 -2
- package/dist/modules/business_rules/cli.js +1 -2
- package/dist/modules/business_rules/cli.js.map +2 -2
- package/dist/modules/business_rules/data/validators.js +34 -0
- package/dist/modules/business_rules/data/validators.js.map +2 -2
- package/dist/modules/business_rules/index.js +21 -1
- package/dist/modules/business_rules/index.js.map +2 -2
- package/dist/modules/business_rules/lib/rule-engine.js +185 -34
- package/dist/modules/business_rules/lib/rule-engine.js.map +2 -2
- package/dist/modules/catalog/components/PriceKindSettings.js +0 -2
- package/dist/modules/catalog/components/PriceKindSettings.js.map +2 -2
- package/dist/modules/catalog/components/categories/CategoriesDataTable.js +2 -2
- package/dist/modules/catalog/components/categories/CategoriesDataTable.js.map +2 -2
- package/dist/modules/catalog/components/products/ProductsDataTable.js +0 -2
- package/dist/modules/catalog/components/products/ProductsDataTable.js.map +2 -2
- package/dist/modules/catalog/events.js +34 -0
- package/dist/modules/catalog/events.js.map +7 -0
- package/dist/modules/configs/cli.js +0 -6
- package/dist/modules/configs/cli.js.map +2 -2
- package/dist/modules/configs/components/CachePanel.js +4 -4
- package/dist/modules/configs/components/CachePanel.js.map +2 -2
- package/dist/modules/configs/lib/system-status.js +1 -48
- package/dist/modules/configs/lib/system-status.js.map +2 -2
- package/dist/modules/configs/lib/upgrade-actions.js +0 -18
- package/dist/modules/configs/lib/upgrade-actions.js.map +2 -2
- package/dist/modules/currencies/backend/currencies/page.js +0 -3
- package/dist/modules/currencies/backend/currencies/page.js.map +2 -2
- package/dist/modules/currencies/backend/exchange-rates/page.js +0 -2
- package/dist/modules/currencies/backend/exchange-rates/page.js.map +2 -2
- package/dist/modules/customers/backend/customers/companies/page.js +0 -3
- package/dist/modules/customers/backend/customers/companies/page.js.map +2 -2
- package/dist/modules/customers/backend/customers/deals/page.js +0 -3
- package/dist/modules/customers/backend/customers/deals/page.js.map +2 -2
- package/dist/modules/customers/backend/customers/people/page.js +0 -3
- package/dist/modules/customers/backend/customers/people/page.js.map +2 -2
- package/dist/modules/customers/commands/deals.js +0 -31
- package/dist/modules/customers/commands/deals.js.map +2 -2
- package/dist/modules/customers/components/CustomerTodosTable.js +0 -1
- package/dist/modules/customers/components/CustomerTodosTable.js.map +2 -2
- package/dist/modules/customers/events.js +49 -0
- package/dist/modules/customers/events.js.map +7 -0
- package/dist/modules/customers/widgets/dashboard/customer-todos/widget.js +1 -2
- package/dist/modules/customers/widgets/dashboard/customer-todos/widget.js.map +2 -2
- package/dist/modules/customers/widgets/dashboard/new-customers/widget.js +1 -2
- package/dist/modules/customers/widgets/dashboard/new-customers/widget.js.map +2 -2
- package/dist/modules/customers/widgets/dashboard/new-deals/widget.js +1 -2
- package/dist/modules/customers/widgets/dashboard/new-deals/widget.js.map +2 -2
- package/dist/modules/customers/widgets/dashboard/next-interactions/widget.js +1 -2
- package/dist/modules/customers/widgets/dashboard/next-interactions/widget.js.map +2 -2
- package/dist/modules/dashboards/cli.js +5 -44
- package/dist/modules/dashboards/cli.js.map +2 -2
- package/dist/modules/dashboards/components/WidgetVisibilityEditor.js +11 -16
- package/dist/modules/dashboards/components/WidgetVisibilityEditor.js.map +3 -3
- package/dist/modules/dashboards/services/widgetDataService.js +3 -139
- package/dist/modules/dashboards/services/widgetDataService.js.map +2 -2
- package/dist/modules/dashboards/widgets/dashboard/aov-kpi/widget.js +1 -2
- package/dist/modules/dashboards/widgets/dashboard/aov-kpi/widget.js.map +2 -2
- package/dist/modules/dashboards/widgets/dashboard/new-customers-kpi/widget.js +1 -2
- package/dist/modules/dashboards/widgets/dashboard/new-customers-kpi/widget.js.map +2 -2
- package/dist/modules/dashboards/widgets/dashboard/orders-by-status/widget.js +1 -2
- package/dist/modules/dashboards/widgets/dashboard/orders-by-status/widget.js.map +2 -2
- package/dist/modules/dashboards/widgets/dashboard/orders-kpi/widget.js +1 -2
- package/dist/modules/dashboards/widgets/dashboard/orders-kpi/widget.js.map +2 -2
- package/dist/modules/dashboards/widgets/dashboard/pipeline-summary/widget.js +1 -2
- package/dist/modules/dashboards/widgets/dashboard/pipeline-summary/widget.js.map +2 -2
- package/dist/modules/dashboards/widgets/dashboard/revenue-kpi/widget.js +1 -2
- package/dist/modules/dashboards/widgets/dashboard/revenue-kpi/widget.js.map +2 -2
- package/dist/modules/dashboards/widgets/dashboard/revenue-trend/widget.js +1 -2
- package/dist/modules/dashboards/widgets/dashboard/revenue-trend/widget.js.map +2 -2
- package/dist/modules/dashboards/widgets/dashboard/sales-by-region/widget.js +1 -2
- package/dist/modules/dashboards/widgets/dashboard/sales-by-region/widget.js.map +2 -2
- package/dist/modules/dashboards/widgets/dashboard/top-customers/widget.js +1 -2
- package/dist/modules/dashboards/widgets/dashboard/top-customers/widget.js.map +2 -2
- package/dist/modules/dashboards/widgets/dashboard/top-products/widget.js +1 -2
- package/dist/modules/dashboards/widgets/dashboard/top-products/widget.js.map +2 -2
- package/dist/modules/dictionaries/components/DictionaryTable.js +0 -2
- package/dist/modules/dictionaries/components/DictionaryTable.js.map +2 -2
- package/dist/modules/directory/backend/directory/organizations/page.js +2 -2
- package/dist/modules/directory/backend/directory/organizations/page.js.map +2 -2
- package/dist/modules/directory/backend/directory/tenants/page.js +2 -2
- package/dist/modules/directory/backend/directory/tenants/page.js.map +2 -2
- package/dist/modules/directory/events.js +23 -0
- package/dist/modules/directory/events.js.map +7 -0
- package/dist/modules/entities/backend/entities/user/[entityId]/records/page.js +2 -2
- package/dist/modules/entities/backend/entities/user/[entityId]/records/page.js.map +2 -2
- package/dist/modules/entities/components/SystemEntitiesTable.js +1 -1
- package/dist/modules/entities/components/SystemEntitiesTable.js.map +2 -2
- package/dist/modules/entities/components/UserEntitiesTable.js +2 -2
- package/dist/modules/entities/components/UserEntitiesTable.js.map +2 -2
- package/dist/modules/feature_toggles/components/FeatureTogglesTable.js +3 -3
- package/dist/modules/feature_toggles/components/FeatureTogglesTable.js.map +2 -2
- package/dist/modules/feature_toggles/components/OverridesTable.js +1 -1
- package/dist/modules/feature_toggles/components/OverridesTable.js.map +2 -2
- package/dist/modules/planner/backend/planner/availability-rulesets/page.js +2 -2
- package/dist/modules/planner/backend/planner/availability-rulesets/page.js.map +2 -2
- package/dist/modules/query_index/cli.js +7 -63
- package/dist/modules/query_index/cli.js.map +2 -2
- package/dist/modules/query_index/components/QueryIndexesTable.js +1 -7
- package/dist/modules/query_index/components/QueryIndexesTable.js.map +2 -2
- package/dist/modules/resources/backend/resources/resource-types/page.js +2 -2
- package/dist/modules/resources/backend/resources/resource-types/page.js.map +2 -2
- package/dist/modules/resources/backend/resources/resources/page.js +2 -2
- package/dist/modules/resources/backend/resources/resources/page.js.map +2 -2
- package/dist/modules/sales/acl.js +1 -0
- package/dist/modules/sales/acl.js.map +2 -2
- package/dist/modules/sales/backend/sales/channels/offers/page.js +0 -2
- package/dist/modules/sales/backend/sales/channels/offers/page.js.map +2 -2
- package/dist/modules/sales/backend/sales/channels/page.js +0 -2
- package/dist/modules/sales/backend/sales/channels/page.js.map +2 -2
- package/dist/modules/sales/backend/sales/documents/[id]/page.js +12 -0
- package/dist/modules/sales/backend/sales/documents/[id]/page.js.map +2 -2
- package/dist/modules/sales/commands/documents.js +62 -53
- package/dist/modules/sales/commands/documents.js.map +2 -2
- package/dist/modules/sales/commands/payments.js +0 -26
- package/dist/modules/sales/commands/payments.js.map +2 -2
- package/dist/modules/sales/components/AdjustmentKindSettings.js +2 -2
- package/dist/modules/sales/components/AdjustmentKindSettings.js.map +2 -2
- package/dist/modules/sales/components/PaymentMethodsSettings.js +2 -2
- package/dist/modules/sales/components/PaymentMethodsSettings.js.map +2 -2
- package/dist/modules/sales/components/ShippingMethodsSettings.js +2 -2
- package/dist/modules/sales/components/ShippingMethodsSettings.js.map +2 -2
- package/dist/modules/sales/components/TaxRatesSettings.js +2 -2
- package/dist/modules/sales/components/TaxRatesSettings.js.map +2 -2
- package/dist/modules/sales/components/channels/SalesChannelOffersPanel.js +0 -2
- package/dist/modules/sales/components/channels/SalesChannelOffersPanel.js.map +2 -2
- package/dist/modules/sales/components/documents/AdjustmentsSection.js +0 -2
- package/dist/modules/sales/components/documents/AdjustmentsSection.js.map +2 -2
- package/dist/modules/sales/components/documents/PaymentsSection.js +1 -2
- package/dist/modules/sales/components/documents/PaymentsSection.js.map +2 -2
- package/dist/modules/sales/components/documents/SalesDocumentsTable.js +0 -2
- package/dist/modules/sales/components/documents/SalesDocumentsTable.js.map +2 -2
- package/dist/modules/sales/events.js +63 -0
- package/dist/modules/sales/events.js.map +7 -0
- package/dist/modules/sales/lib/dictionaries.js +3 -0
- package/dist/modules/sales/lib/dictionaries.js.map +2 -2
- package/dist/modules/sales/lib/frontend/documentDataEvents.js +25 -0
- package/dist/modules/sales/lib/frontend/documentDataEvents.js.map +7 -0
- package/dist/modules/staff/backend/staff/team-members/page.js +1 -1
- package/dist/modules/staff/backend/staff/team-members/page.js.map +2 -2
- package/dist/modules/staff/backend/staff/team-roles/page.js +2 -2
- package/dist/modules/staff/backend/staff/team-roles/page.js.map +2 -2
- package/dist/modules/staff/backend/staff/teams/[id]/edit/page.js +2 -2
- package/dist/modules/staff/backend/staff/teams/[id]/edit/page.js.map +2 -2
- package/dist/modules/staff/backend/staff/teams/page.js +2 -2
- package/dist/modules/staff/backend/staff/teams/page.js.map +2 -2
- package/dist/modules/staff/commands/leave-requests.js +0 -79
- package/dist/modules/staff/commands/leave-requests.js.map +2 -2
- package/dist/modules/workflows/acl.js +2 -0
- package/dist/modules/workflows/acl.js.map +2 -2
- package/dist/modules/workflows/api/instances/route.js +18 -6
- package/dist/modules/workflows/api/instances/route.js.map +2 -2
- package/dist/modules/workflows/api/tasks/route.js +6 -1
- package/dist/modules/workflows/api/tasks/route.js.map +2 -2
- package/dist/modules/workflows/backend/definitions/[id]/page.js +9 -1
- package/dist/modules/workflows/backend/definitions/[id]/page.js.map +2 -2
- package/dist/modules/workflows/backend/definitions/[id]/page.meta.js +1 -1
- package/dist/modules/workflows/backend/definitions/[id]/page.meta.js.map +2 -2
- package/dist/modules/workflows/backend/definitions/create/page.js +24 -15
- package/dist/modules/workflows/backend/definitions/create/page.js.map +2 -2
- package/dist/modules/workflows/backend/definitions/create/page.meta.js +1 -1
- package/dist/modules/workflows/backend/definitions/create/page.meta.js.map +2 -2
- package/dist/modules/workflows/backend/definitions/page.js +0 -5
- package/dist/modules/workflows/backend/definitions/page.js.map +2 -2
- package/dist/modules/workflows/backend/definitions/visual-editor/page.js +150 -132
- package/dist/modules/workflows/backend/definitions/visual-editor/page.js.map +2 -2
- package/dist/modules/workflows/backend/definitions/visual-editor/page.meta.js +1 -1
- package/dist/modules/workflows/backend/definitions/visual-editor/page.meta.js.map +2 -2
- package/dist/modules/workflows/backend/events/[id]/page.js +1 -1
- package/dist/modules/workflows/backend/events/[id]/page.js.map +2 -2
- package/dist/modules/workflows/backend/events/[id]/page.meta.js +2 -2
- package/dist/modules/workflows/backend/events/[id]/page.meta.js.map +2 -2
- package/dist/modules/workflows/backend/instances/[id]/page.meta.js +2 -2
- package/dist/modules/workflows/backend/instances/[id]/page.meta.js.map +2 -2
- package/dist/modules/workflows/backend/instances/page.js +0 -3
- package/dist/modules/workflows/backend/instances/page.js.map +2 -2
- package/dist/modules/workflows/backend/tasks/[id]/page.js +1 -1
- package/dist/modules/workflows/backend/tasks/[id]/page.js.map +2 -2
- package/dist/modules/workflows/backend/tasks/[id]/page.meta.js +2 -2
- package/dist/modules/workflows/backend/tasks/[id]/page.meta.js.map +2 -2
- package/dist/modules/workflows/backend/tasks/page.js +5 -9
- package/dist/modules/workflows/backend/tasks/page.js.map +2 -2
- package/dist/modules/workflows/cli.js +93 -15
- package/dist/modules/workflows/cli.js.map +3 -3
- package/dist/modules/workflows/components/DefinitionTriggersEditor.js +481 -0
- package/dist/modules/workflows/components/DefinitionTriggersEditor.js.map +7 -0
- package/dist/modules/workflows/components/EventTriggersEditor.js +553 -0
- package/dist/modules/workflows/components/EventTriggersEditor.js.map +7 -0
- package/dist/modules/workflows/data/entities.js +64 -1
- package/dist/modules/workflows/data/entities.js.map +2 -2
- package/dist/modules/workflows/data/validators.js +115 -0
- package/dist/modules/workflows/data/validators.js.map +2 -2
- package/dist/modules/workflows/events.js +38 -0
- package/dist/modules/workflows/events.js.map +7 -0
- package/dist/modules/workflows/examples/checkout-demo-definition.json +1 -5
- package/dist/modules/workflows/examples/order-approval-definition.json +257 -0
- package/dist/modules/workflows/examples/order-approval-guard-rules.json +32 -0
- package/dist/modules/workflows/lib/activity-executor.js +75 -13
- package/dist/modules/workflows/lib/activity-executor.js.map +2 -2
- package/dist/modules/workflows/lib/event-trigger-service.js +308 -0
- package/dist/modules/workflows/lib/event-trigger-service.js.map +7 -0
- package/dist/modules/workflows/lib/graph-utils.js +71 -2
- package/dist/modules/workflows/lib/graph-utils.js.map +2 -2
- package/dist/modules/workflows/lib/seeds.js +22 -5
- package/dist/modules/workflows/lib/seeds.js.map +2 -2
- package/dist/modules/workflows/lib/start-validator.js +33 -23
- package/dist/modules/workflows/lib/start-validator.js.map +2 -2
- package/dist/modules/workflows/lib/transition-handler.js +161 -57
- package/dist/modules/workflows/lib/transition-handler.js.map +3 -3
- package/dist/modules/workflows/migrations/Migration20260123143500.js +36 -0
- package/dist/modules/workflows/migrations/Migration20260123143500.js.map +7 -0
- package/dist/modules/workflows/subscribers/event-trigger.js +78 -0
- package/dist/modules/workflows/subscribers/event-trigger.js.map +7 -0
- package/dist/modules/workflows/widgets/injection/order-approval/widget.client.js +323 -0
- package/dist/modules/workflows/widgets/injection/order-approval/widget.client.js.map +7 -0
- package/dist/modules/workflows/widgets/injection/order-approval/widget.js +17 -0
- package/dist/modules/workflows/widgets/injection/order-approval/widget.js.map +7 -0
- package/dist/modules/workflows/widgets/injection-table.js +19 -0
- package/dist/modules/workflows/widgets/injection-table.js.map +7 -0
- package/generated/entities/workflow_event_trigger/index.ts +15 -0
- package/generated/entities.ids.generated.ts +2 -5
- package/generated/entity-fields-registry.ts +2 -2
- package/package.json +2 -2
- package/src/modules/api_docs/frontend/docs/api/page.tsx +2 -3
- package/src/modules/api_keys/backend/api-keys/page.tsx +1 -1
- package/src/modules/attachments/components/AttachmentLibrary.tsx +0 -4
- package/src/modules/attachments/components/AttachmentPartitionSettings.tsx +0 -2
- package/src/modules/auth/README.md +1 -1
- package/src/modules/auth/__tests__/cli-setup-acl.test.ts +1 -1
- package/src/modules/auth/api/__tests__/login.test.ts +0 -2
- package/src/modules/auth/api/admin/nav.ts +6 -10
- package/src/modules/auth/api/login.ts +7 -26
- package/src/modules/auth/api/reset/confirm.ts +2 -25
- package/src/modules/auth/api/reset.ts +0 -23
- package/src/modules/auth/api/sidebar/preferences/route.ts +12 -21
- package/src/modules/auth/api/users/route.ts +2 -5
- package/src/modules/auth/backend/roles/[id]/edit/page.tsx +1 -4
- package/src/modules/auth/backend/roles/page.tsx +3 -3
- package/src/modules/auth/backend/users/[id]/edit/page.tsx +3 -22
- package/src/modules/auth/backend/users/create/page.tsx +2 -19
- package/src/modules/auth/backend/users/page.tsx +3 -3
- package/src/modules/auth/cli.ts +11 -38
- package/src/modules/auth/commands/users.ts +2 -73
- package/src/modules/auth/data/validators.ts +2 -6
- package/src/modules/auth/events.ts +39 -0
- package/src/modules/auth/frontend/login.tsx +5 -131
- package/src/modules/auth/frontend/reset/[token]/page.tsx +11 -24
- package/src/modules/auth/i18n/de.json +1 -48
- package/src/modules/auth/i18n/en.json +1 -48
- package/src/modules/auth/i18n/es.json +1 -48
- package/src/modules/auth/i18n/pl.json +1 -48
- package/src/modules/auth/lib/setup-app.ts +9 -58
- package/src/modules/auth/services/authService.ts +4 -27
- package/src/modules/business_rules/api/execute/[ruleId]/route.ts +163 -0
- package/src/modules/business_rules/api/execute/route.ts +1 -8
- package/src/modules/business_rules/backend/rules/page.tsx +0 -4
- package/src/modules/business_rules/backend/sets/page.tsx +0 -3
- package/src/modules/business_rules/cli.ts +1 -2
- package/src/modules/business_rules/data/validators.ts +40 -0
- package/src/modules/business_rules/i18n/en.json +1 -3
- package/src/modules/business_rules/index.ts +25 -0
- package/src/modules/business_rules/lib/__tests__/rule-engine.test.ts +0 -51
- package/src/modules/business_rules/lib/rule-engine.ts +277 -51
- package/src/modules/catalog/components/PriceKindSettings.tsx +0 -2
- package/src/modules/catalog/components/categories/CategoriesDataTable.tsx +2 -2
- package/src/modules/catalog/components/products/ProductsDataTable.tsx +0 -2
- package/src/modules/catalog/events.ts +45 -0
- package/src/modules/catalog/i18n/en.json +1 -3
- package/src/modules/configs/cli.ts +0 -6
- package/src/modules/configs/components/CachePanel.tsx +4 -4
- package/src/modules/configs/i18n/en.json +2 -12
- package/src/modules/configs/i18n/pl.json +2 -12
- package/src/modules/configs/lib/system-status.ts +1 -48
- package/src/modules/configs/lib/system-status.types.ts +0 -1
- package/src/modules/configs/lib/upgrade-actions.ts +0 -18
- package/src/modules/currencies/backend/currencies/page.tsx +0 -3
- package/src/modules/currencies/backend/exchange-rates/page.tsx +0 -2
- package/src/modules/customers/backend/customers/companies/page.tsx +0 -3
- package/src/modules/customers/backend/customers/deals/page.tsx +0 -3
- package/src/modules/customers/backend/customers/people/page.tsx +0 -3
- package/src/modules/customers/commands/deals.ts +0 -39
- package/src/modules/customers/components/CustomerTodosTable.tsx +0 -1
- package/src/modules/customers/events.ts +63 -0
- package/src/modules/customers/i18n/en.json +1 -5
- package/src/modules/customers/widgets/dashboard/customer-todos/widget.ts +2 -2
- package/src/modules/customers/widgets/dashboard/new-customers/widget.ts +2 -2
- package/src/modules/customers/widgets/dashboard/new-deals/widget.ts +2 -2
- package/src/modules/customers/widgets/dashboard/next-interactions/widget.ts +2 -2
- package/src/modules/dashboards/cli.ts +5 -55
- package/src/modules/dashboards/components/WidgetVisibilityEditor.tsx +11 -22
- package/src/modules/dashboards/services/widgetDataService.ts +4 -164
- package/src/modules/dashboards/widgets/dashboard/aov-kpi/widget.ts +2 -2
- package/src/modules/dashboards/widgets/dashboard/new-customers-kpi/widget.ts +2 -2
- package/src/modules/dashboards/widgets/dashboard/orders-by-status/widget.ts +2 -2
- package/src/modules/dashboards/widgets/dashboard/orders-kpi/widget.ts +2 -2
- package/src/modules/dashboards/widgets/dashboard/pipeline-summary/widget.ts +2 -2
- package/src/modules/dashboards/widgets/dashboard/revenue-kpi/widget.ts +2 -2
- package/src/modules/dashboards/widgets/dashboard/revenue-trend/widget.ts +2 -2
- package/src/modules/dashboards/widgets/dashboard/sales-by-region/widget.ts +2 -2
- package/src/modules/dashboards/widgets/dashboard/top-customers/widget.ts +2 -2
- package/src/modules/dashboards/widgets/dashboard/top-products/widget.ts +2 -2
- package/src/modules/dictionaries/components/DictionaryTable.tsx +0 -2
- package/src/modules/directory/backend/directory/organizations/page.tsx +2 -2
- package/src/modules/directory/backend/directory/tenants/page.tsx +2 -2
- package/src/modules/directory/events.ts +31 -0
- package/src/modules/entities/backend/entities/user/[entityId]/records/page.tsx +2 -2
- package/src/modules/entities/components/SystemEntitiesTable.tsx +1 -1
- package/src/modules/entities/components/UserEntitiesTable.tsx +2 -2
- package/src/modules/feature_toggles/components/FeatureTogglesTable.tsx +4 -3
- package/src/modules/feature_toggles/components/OverridesTable.tsx +1 -1
- package/src/modules/planner/backend/planner/availability-rulesets/page.tsx +2 -2
- package/src/modules/query_index/cli.ts +13 -82
- package/src/modules/query_index/components/QueryIndexesTable.tsx +2 -8
- package/src/modules/resources/backend/resources/resource-types/page.tsx +2 -2
- package/src/modules/resources/backend/resources/resources/page.tsx +2 -2
- package/src/modules/sales/acl.ts +1 -0
- package/src/modules/sales/backend/sales/channels/offers/page.tsx +0 -2
- package/src/modules/sales/backend/sales/channels/page.tsx +0 -2
- package/src/modules/sales/backend/sales/documents/[id]/page.tsx +16 -0
- package/src/modules/sales/commands/documents.ts +70 -62
- package/src/modules/sales/commands/payments.ts +0 -33
- package/src/modules/sales/components/AdjustmentKindSettings.tsx +2 -2
- package/src/modules/sales/components/PaymentMethodsSettings.tsx +2 -2
- package/src/modules/sales/components/ShippingMethodsSettings.tsx +2 -2
- package/src/modules/sales/components/TaxRatesSettings.tsx +2 -2
- package/src/modules/sales/components/channels/SalesChannelOffersPanel.tsx +0 -2
- package/src/modules/sales/components/documents/AdjustmentsSection.tsx +0 -2
- package/src/modules/sales/components/documents/PaymentsSection.tsx +1 -2
- package/src/modules/sales/components/documents/SalesDocumentsTable.tsx +0 -2
- package/src/modules/sales/events.ts +82 -0
- package/src/modules/sales/i18n/de.json +0 -20
- package/src/modules/sales/i18n/en.json +1 -25
- package/src/modules/sales/i18n/es.json +0 -20
- package/src/modules/sales/i18n/pl.json +0 -20
- package/src/modules/sales/lib/dictionaries.ts +3 -0
- package/src/modules/sales/lib/frontend/documentDataEvents.ts +28 -0
- package/src/modules/staff/backend/staff/team-members/page.tsx +1 -1
- package/src/modules/staff/backend/staff/team-roles/page.tsx +2 -2
- package/src/modules/staff/backend/staff/teams/[id]/edit/page.tsx +2 -2
- package/src/modules/staff/backend/staff/teams/page.tsx +2 -2
- package/src/modules/staff/commands/leave-requests.ts +0 -94
- package/src/modules/staff/i18n/de.json +0 -4
- package/src/modules/staff/i18n/en.json +1 -9
- package/src/modules/staff/i18n/es.json +0 -4
- package/src/modules/staff/i18n/pl.json +0 -4
- package/src/modules/workflows/acl.ts +2 -0
- package/src/modules/workflows/api/__tests__/instances.route.test.ts +5 -2
- package/src/modules/workflows/api/instances/route.ts +21 -7
- package/src/modules/workflows/api/tasks/route.ts +7 -1
- package/src/modules/workflows/backend/definitions/[id]/page.meta.ts +1 -1
- package/src/modules/workflows/backend/definitions/[id]/page.tsx +9 -0
- package/src/modules/workflows/backend/definitions/create/page.meta.ts +1 -1
- package/src/modules/workflows/backend/definitions/create/page.tsx +9 -0
- package/src/modules/workflows/backend/definitions/page.tsx +0 -5
- package/src/modules/workflows/backend/definitions/visual-editor/page.meta.ts +1 -1
- package/src/modules/workflows/backend/definitions/visual-editor/page.tsx +21 -3
- package/src/modules/workflows/backend/events/[id]/page.meta.ts +2 -2
- package/src/modules/workflows/backend/events/[id]/page.tsx +1 -1
- package/src/modules/workflows/backend/instances/[id]/page.meta.ts +2 -2
- package/src/modules/workflows/backend/instances/page.tsx +1 -4
- package/src/modules/workflows/backend/tasks/[id]/page.meta.ts +2 -2
- package/src/modules/workflows/backend/tasks/[id]/page.tsx +1 -1
- package/src/modules/workflows/backend/tasks/page.tsx +6 -10
- package/src/modules/workflows/cli.ts +123 -12
- package/src/modules/workflows/components/DefinitionTriggersEditor.tsx +581 -0
- package/src/modules/workflows/components/EventTriggersEditor.tsx +664 -0
- package/src/modules/workflows/data/entities.ts +124 -0
- package/src/modules/workflows/data/validators.ts +138 -0
- package/src/modules/workflows/events.ts +49 -0
- package/src/modules/workflows/examples/checkout-demo-definition.json +1 -5
- package/src/modules/workflows/examples/order-approval-definition.json +257 -0
- package/src/modules/workflows/examples/order-approval-guard-rules.json +32 -0
- package/src/modules/workflows/i18n/en.json +72 -3
- package/src/modules/workflows/lib/__tests__/activity-executor.test.ts +43 -36
- package/src/modules/workflows/lib/__tests__/transition-handler.test.ts +170 -90
- package/src/modules/workflows/lib/activity-executor.ts +129 -16
- package/src/modules/workflows/lib/event-trigger-service.ts +557 -0
- package/src/modules/workflows/lib/graph-utils.ts +117 -2
- package/src/modules/workflows/lib/seeds.ts +34 -8
- package/src/modules/workflows/lib/start-validator.ts +38 -28
- package/src/modules/workflows/lib/transition-handler.ts +212 -71
- package/src/modules/workflows/migrations/Migration20260123143500.ts +38 -0
- package/src/modules/workflows/subscribers/event-trigger.ts +109 -0
- package/src/modules/workflows/widgets/injection/order-approval/widget.client.tsx +446 -0
- package/src/modules/workflows/widgets/injection/order-approval/widget.ts +16 -0
- package/src/modules/workflows/widgets/injection-table.ts +21 -0
- package/dist/generated/entities/notification/index.js +0 -57
- package/dist/generated/entities/notification/index.js.map +0 -7
- package/dist/modules/auth/api/profile/route.js +0 -157
- package/dist/modules/auth/api/profile/route.js.map +0 -7
- package/dist/modules/auth/backend/auth/profile/page.js +0 -141
- package/dist/modules/auth/backend/auth/profile/page.js.map +0 -7
- package/dist/modules/auth/backend/auth/profile/page.meta.js +0 -13
- package/dist/modules/auth/backend/auth/profile/page.meta.js.map +0 -7
- package/dist/modules/auth/notifications.js +0 -112
- package/dist/modules/auth/notifications.js.map +0 -7
- package/dist/modules/business_rules/notifications.js +0 -28
- package/dist/modules/business_rules/notifications.js.map +0 -7
- package/dist/modules/business_rules/subscribers/rule-execution-failed-notification.js +0 -37
- package/dist/modules/business_rules/subscribers/rule-execution-failed-notification.js.map +0 -7
- package/dist/modules/catalog/notifications.js +0 -28
- package/dist/modules/catalog/notifications.js.map +0 -7
- package/dist/modules/catalog/subscribers/low-stock-notification.js +0 -38
- package/dist/modules/catalog/subscribers/low-stock-notification.js.map +0 -7
- package/dist/modules/customers/notifications.js +0 -48
- package/dist/modules/customers/notifications.js.map +0 -7
- package/dist/modules/dashboards/lib/role-widgets.js +0 -58
- package/dist/modules/dashboards/lib/role-widgets.js.map +0 -7
- package/dist/modules/directory/api/get/tenants/lookup.js +0 -70
- package/dist/modules/directory/api/get/tenants/lookup.js.map +0 -7
- package/dist/modules/notifications/acl.js +0 -11
- package/dist/modules/notifications/acl.js.map +0 -7
- package/dist/modules/notifications/api/[id]/action/route.js +0 -74
- package/dist/modules/notifications/api/[id]/action/route.js.map +0 -7
- package/dist/modules/notifications/api/[id]/dismiss/route.js +0 -15
- package/dist/modules/notifications/api/[id]/dismiss/route.js.map +0 -7
- package/dist/modules/notifications/api/[id]/read/route.js +0 -15
- package/dist/modules/notifications/api/[id]/read/route.js.map +0 -7
- package/dist/modules/notifications/api/[id]/restore/route.js +0 -53
- package/dist/modules/notifications/api/[id]/restore/route.js.map +0 -7
- package/dist/modules/notifications/api/batch/route.js +0 -17
- package/dist/modules/notifications/api/batch/route.js.map +0 -7
- package/dist/modules/notifications/api/feature/route.js +0 -17
- package/dist/modules/notifications/api/feature/route.js.map +0 -7
- package/dist/modules/notifications/api/mark-all-read/route.js +0 -35
- package/dist/modules/notifications/api/mark-all-read/route.js.map +0 -7
- package/dist/modules/notifications/api/openapi.js +0 -76
- package/dist/modules/notifications/api/openapi.js.map +0 -7
- package/dist/modules/notifications/api/role/route.js +0 -17
- package/dist/modules/notifications/api/role/route.js.map +0 -7
- package/dist/modules/notifications/api/route.js +0 -85
- package/dist/modules/notifications/api/route.js.map +0 -7
- package/dist/modules/notifications/api/settings/route.js +0 -155
- package/dist/modules/notifications/api/settings/route.js.map +0 -7
- package/dist/modules/notifications/api/unread-count/route.js +0 -38
- package/dist/modules/notifications/api/unread-count/route.js.map +0 -7
- package/dist/modules/notifications/backend/config/notifications/page.js +0 -10
- package/dist/modules/notifications/backend/config/notifications/page.js.map +0 -7
- package/dist/modules/notifications/backend/config/notifications/page.meta.js +0 -24
- package/dist/modules/notifications/backend/config/notifications/page.meta.js.map +0 -7
- package/dist/modules/notifications/cli.js +0 -16
- package/dist/modules/notifications/cli.js.map +0 -7
- package/dist/modules/notifications/data/entities.js +0 -112
- package/dist/modules/notifications/data/entities.js.map +0 -7
- package/dist/modules/notifications/data/validators.js +0 -98
- package/dist/modules/notifications/data/validators.js.map +0 -7
- package/dist/modules/notifications/di.js +0 -13
- package/dist/modules/notifications/di.js.map +0 -7
- package/dist/modules/notifications/emails/NotificationEmail.js +0 -58
- package/dist/modules/notifications/emails/NotificationEmail.js.map +0 -7
- package/dist/modules/notifications/frontend/NotificationInboxPageClient.js +0 -44
- package/dist/modules/notifications/frontend/NotificationInboxPageClient.js.map +0 -7
- package/dist/modules/notifications/frontend/NotificationSettingsPageClient.js +0 -220
- package/dist/modules/notifications/frontend/NotificationSettingsPageClient.js.map +0 -7
- package/dist/modules/notifications/index.js +0 -14
- package/dist/modules/notifications/index.js.map +0 -7
- package/dist/modules/notifications/lib/deliveryConfig.js +0 -107
- package/dist/modules/notifications/lib/deliveryConfig.js.map +0 -7
- package/dist/modules/notifications/lib/deliveryStrategies.js +0 -14
- package/dist/modules/notifications/lib/deliveryStrategies.js.map +0 -7
- package/dist/modules/notifications/lib/events.js +0 -12
- package/dist/modules/notifications/lib/events.js.map +0 -7
- package/dist/modules/notifications/lib/notificationBuilder.js +0 -66
- package/dist/modules/notifications/lib/notificationBuilder.js.map +0 -7
- package/dist/modules/notifications/lib/notificationFactory.js +0 -54
- package/dist/modules/notifications/lib/notificationFactory.js.map +0 -7
- package/dist/modules/notifications/lib/notificationMapper.js +0 -34
- package/dist/modules/notifications/lib/notificationMapper.js.map +0 -7
- package/dist/modules/notifications/lib/notificationRecipients.js +0 -35
- package/dist/modules/notifications/lib/notificationRecipients.js.map +0 -7
- package/dist/modules/notifications/lib/notificationService.js +0 -279
- package/dist/modules/notifications/lib/notificationService.js.map +0 -7
- package/dist/modules/notifications/lib/routeHelpers.js +0 -101
- package/dist/modules/notifications/lib/routeHelpers.js.map +0 -7
- package/dist/modules/notifications/lib/safeHref.js +0 -24
- package/dist/modules/notifications/lib/safeHref.js.map +0 -7
- package/dist/modules/notifications/migrations/Migration20260123000001.js +0 -70
- package/dist/modules/notifications/migrations/Migration20260123000001.js.map +0 -7
- package/dist/modules/notifications/migrations/Migration20260126150000.js +0 -37
- package/dist/modules/notifications/migrations/Migration20260126150000.js.map +0 -7
- package/dist/modules/notifications/migrations/Migration20260129082610.js +0 -13
- package/dist/modules/notifications/migrations/Migration20260129082610.js.map +0 -7
- package/dist/modules/notifications/subscribers/deliver-notification.js +0 -165
- package/dist/modules/notifications/subscribers/deliver-notification.js.map +0 -7
- package/dist/modules/notifications/workers/create-notification.worker.js +0 -70
- package/dist/modules/notifications/workers/create-notification.worker.js.map +0 -7
- package/dist/modules/sales/notifications.client.js +0 -51
- package/dist/modules/sales/notifications.client.js.map +0 -7
- package/dist/modules/sales/notifications.js +0 -88
- package/dist/modules/sales/notifications.js.map +0 -7
- package/dist/modules/sales/subscribers/quote-expiring-notification.js +0 -38
- package/dist/modules/sales/subscribers/quote-expiring-notification.js.map +0 -7
- package/dist/modules/sales/widgets/notifications/SalesOrderCreatedRenderer.js +0 -137
- package/dist/modules/sales/widgets/notifications/SalesOrderCreatedRenderer.js.map +0 -7
- package/dist/modules/sales/widgets/notifications/SalesQuoteCreatedRenderer.js +0 -137
- package/dist/modules/sales/widgets/notifications/SalesQuoteCreatedRenderer.js.map +0 -7
- package/dist/modules/sales/widgets/notifications/index.js +0 -7
- package/dist/modules/sales/widgets/notifications/index.js.map +0 -7
- package/dist/modules/sales/widgets/notifications/useSalesDocumentTotals.js +0 -60
- package/dist/modules/sales/widgets/notifications/useSalesDocumentTotals.js.map +0 -7
- package/dist/modules/staff/notifications.js +0 -75
- package/dist/modules/staff/notifications.js.map +0 -7
- package/dist/modules/workflows/notifications.js +0 -28
- package/dist/modules/workflows/notifications.js.map +0 -7
- package/dist/modules/workflows/subscribers/task-assigned-notification.js +0 -38
- package/dist/modules/workflows/subscribers/task-assigned-notification.js.map +0 -7
- package/generated/entities/notification/index.ts +0 -27
- package/src/modules/auth/api/profile/route.ts +0 -163
- package/src/modules/auth/backend/auth/profile/page.meta.ts +0 -9
- package/src/modules/auth/backend/auth/profile/page.tsx +0 -174
- package/src/modules/auth/notifications.ts +0 -109
- package/src/modules/business_rules/notifications.ts +0 -25
- package/src/modules/business_rules/subscribers/rule-execution-failed-notification.ts +0 -50
- package/src/modules/catalog/notifications.ts +0 -25
- package/src/modules/catalog/subscribers/low-stock-notification.ts +0 -52
- package/src/modules/customers/notifications.ts +0 -44
- package/src/modules/dashboards/lib/role-widgets.ts +0 -80
- package/src/modules/directory/api/get/tenants/lookup.ts +0 -75
- package/src/modules/notifications/__tests__/deliver-notification.test.ts +0 -195
- package/src/modules/notifications/__tests__/deliveryStrategies.test.ts +0 -19
- package/src/modules/notifications/__tests__/notificationService.test.ts +0 -208
- package/src/modules/notifications/acl.ts +0 -7
- package/src/modules/notifications/api/[id]/action/route.ts +0 -75
- package/src/modules/notifications/api/[id]/dismiss/route.ts +0 -12
- package/src/modules/notifications/api/[id]/read/route.ts +0 -12
- package/src/modules/notifications/api/[id]/restore/route.ts +0 -53
- package/src/modules/notifications/api/batch/route.ts +0 -14
- package/src/modules/notifications/api/feature/route.ts +0 -14
- package/src/modules/notifications/api/mark-all-read/route.ts +0 -34
- package/src/modules/notifications/api/openapi.ts +0 -76
- package/src/modules/notifications/api/role/route.ts +0 -14
- package/src/modules/notifications/api/route.ts +0 -92
- package/src/modules/notifications/api/settings/route.ts +0 -157
- package/src/modules/notifications/api/unread-count/route.ts +0 -38
- package/src/modules/notifications/backend/config/notifications/page.meta.ts +0 -22
- package/src/modules/notifications/backend/config/notifications/page.tsx +0 -12
- package/src/modules/notifications/cli.ts +0 -18
- package/src/modules/notifications/data/entities.ts +0 -99
- package/src/modules/notifications/data/validators.ts +0 -115
- package/src/modules/notifications/di.ts +0 -11
- package/src/modules/notifications/emails/NotificationEmail.tsx +0 -98
- package/src/modules/notifications/frontend/NotificationInboxPageClient.tsx +0 -42
- package/src/modules/notifications/frontend/NotificationSettingsPageClient.tsx +0 -233
- package/src/modules/notifications/i18n/de.json +0 -50
- package/src/modules/notifications/i18n/en.json +0 -50
- package/src/modules/notifications/i18n/es.json +0 -50
- package/src/modules/notifications/i18n/pl.json +0 -50
- package/src/modules/notifications/index.ts +0 -12
- package/src/modules/notifications/lib/deliveryConfig.ts +0 -153
- package/src/modules/notifications/lib/deliveryStrategies.ts +0 -50
- package/src/modules/notifications/lib/events.ts +0 -48
- package/src/modules/notifications/lib/notificationBuilder.ts +0 -121
- package/src/modules/notifications/lib/notificationFactory.ts +0 -76
- package/src/modules/notifications/lib/notificationMapper.ts +0 -33
- package/src/modules/notifications/lib/notificationRecipients.ts +0 -83
- package/src/modules/notifications/lib/notificationService.ts +0 -414
- package/src/modules/notifications/lib/routeHelpers.ts +0 -151
- package/src/modules/notifications/lib/safeHref.ts +0 -29
- package/src/modules/notifications/migrations/.snapshot-open-mercato.json +0 -336
- package/src/modules/notifications/migrations/Migration20260123000001.ts +0 -73
- package/src/modules/notifications/migrations/Migration20260126150000.ts +0 -39
- package/src/modules/notifications/migrations/Migration20260129082610.ts +0 -13
- package/src/modules/notifications/subscribers/deliver-notification.ts +0 -204
- package/src/modules/notifications/workers/create-notification.worker.ts +0 -122
- package/src/modules/sales/notifications.client.ts +0 -65
- package/src/modules/sales/notifications.ts +0 -82
- package/src/modules/sales/subscribers/quote-expiring-notification.ts +0 -53
- package/src/modules/sales/widgets/notifications/SalesOrderCreatedRenderer.tsx +0 -156
- package/src/modules/sales/widgets/notifications/SalesQuoteCreatedRenderer.tsx +0 -156
- package/src/modules/sales/widgets/notifications/index.ts +0 -2
- package/src/modules/sales/widgets/notifications/useSalesDocumentTotals.ts +0 -81
- package/src/modules/staff/notifications.ts +0 -71
- package/src/modules/workflows/notifications.ts +0 -25
- package/src/modules/workflows/subscribers/task-assigned-notification.ts +0 -53
|
@@ -7,6 +7,8 @@ import checkoutDemoDefinition from '../examples/checkout-demo-definition.json'
|
|
|
7
7
|
import guardRulesExample from '../examples/guard-rules-example.json'
|
|
8
8
|
import salesPipelineDefinition from '../examples/sales-pipeline-definition.json'
|
|
9
9
|
import simpleApprovalDefinition from '../examples/simple-approval-definition.json'
|
|
10
|
+
import orderApprovalDefinition from '../examples/order-approval-definition.json'
|
|
11
|
+
import orderApprovalGuardRules from '../examples/order-approval-guard-rules.json'
|
|
10
12
|
|
|
11
13
|
export type WorkflowSeedScope = { tenantId: string; organizationId: string }
|
|
12
14
|
|
|
@@ -51,6 +53,8 @@ const embeddedSeeds: Record<string, unknown> = {
|
|
|
51
53
|
'guard-rules-example.json': guardRulesExample,
|
|
52
54
|
'sales-pipeline-definition.json': salesPipelineDefinition,
|
|
53
55
|
'simple-approval-definition.json': simpleApprovalDefinition,
|
|
56
|
+
'order-approval-definition.json': orderApprovalDefinition,
|
|
57
|
+
'order-approval-guard-rules.json': orderApprovalGuardRules,
|
|
54
58
|
}
|
|
55
59
|
|
|
56
60
|
function readExampleJson<T>(fileName: string): T {
|
|
@@ -90,16 +94,35 @@ async function seedWorkflowDefinition(
|
|
|
90
94
|
})
|
|
91
95
|
|
|
92
96
|
if (existing) {
|
|
93
|
-
// Check if the definition needs to be updated
|
|
97
|
+
// Check if the definition needs to be updated by comparing steps and transitions
|
|
98
|
+
const seedStepCount = seed.definition.steps.length
|
|
99
|
+
const existingStepCount = existing.definition.steps.length
|
|
100
|
+
const seedTransitionCount = seed.definition.transitions.length
|
|
101
|
+
const existingTransitionCount = existing.definition.transitions.length
|
|
102
|
+
|
|
103
|
+
// Check for preConditions on transitions
|
|
104
|
+
const seedHasTransitionPreConditions = seed.definition.transitions.some(
|
|
105
|
+
(t: any) => t.preConditions && t.preConditions.length > 0
|
|
106
|
+
)
|
|
107
|
+
const existingHasTransitionPreConditions = existing.definition.transitions.some(
|
|
108
|
+
(t: any) => t.preConditions && t.preConditions.length > 0
|
|
109
|
+
)
|
|
110
|
+
|
|
111
|
+
// Check for preConditions on START step
|
|
94
112
|
const seedStartStep = seed.definition.steps.find((s: any) => s.stepType === 'START')
|
|
95
113
|
const existingStartStep = existing.definition.steps.find((s: any) => s.stepType === 'START')
|
|
96
|
-
|
|
97
|
-
const
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
114
|
+
const seedHasStartPreConditions = seedStartStep?.preConditions && seedStartStep.preConditions.length > 0
|
|
115
|
+
const existingHasStartPreConditions = existingStartStep?.preConditions && existingStartStep.preConditions.length > 0
|
|
116
|
+
|
|
117
|
+
// Update if structure has changed
|
|
118
|
+
const needsUpdate =
|
|
119
|
+
seedStepCount !== existingStepCount ||
|
|
120
|
+
seedTransitionCount !== existingTransitionCount ||
|
|
121
|
+
(seedHasStartPreConditions && !existingHasStartPreConditions) ||
|
|
122
|
+
(seedHasTransitionPreConditions && !existingHasTransitionPreConditions)
|
|
123
|
+
|
|
124
|
+
if (needsUpdate) {
|
|
125
|
+
console.log(`[seed] Updating workflow ${workflowId} (steps: ${existingStepCount}→${seedStepCount}, transitions: ${existingTransitionCount}→${seedTransitionCount})`)
|
|
103
126
|
existing.definition = seed.definition
|
|
104
127
|
await em.flush()
|
|
105
128
|
return true
|
|
@@ -172,4 +195,7 @@ export async function seedExampleWorkflows(em: EntityManager, scope: WorkflowSee
|
|
|
172
195
|
await seedGuardRules(em, scope, 'guard-rules-example.json')
|
|
173
196
|
await seedWorkflowDefinition(em, scope, 'sales-pipeline-definition.json')
|
|
174
197
|
await seedWorkflowDefinition(em, scope, 'simple-approval-definition.json')
|
|
198
|
+
// Seed order approval guard rules before the workflow definition
|
|
199
|
+
await seedGuardRules(em, scope, 'order-approval-guard-rules.json')
|
|
200
|
+
await seedWorkflowDefinition(em, scope, 'order-approval-definition.json')
|
|
175
201
|
}
|
|
@@ -128,59 +128,69 @@ export async function validateWorkflowStart(
|
|
|
128
128
|
const validatedRules: ValidatedRule[] = []
|
|
129
129
|
|
|
130
130
|
for (const condition of preConditions) {
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
eventType: 'validate_start',
|
|
131
|
+
// Execute rule directly by string rule_id
|
|
132
|
+
const result = await ruleEngine.executeRuleByRuleId(em, {
|
|
133
|
+
ruleId: condition.ruleId, // String identifier like "workflow_checkout_inventory_available"
|
|
135
134
|
data: {
|
|
136
135
|
workflowId,
|
|
137
136
|
workflowContext: context,
|
|
138
137
|
},
|
|
139
138
|
tenantId,
|
|
140
139
|
organizationId,
|
|
140
|
+
entityType: `workflow:${workflowId}:start`,
|
|
141
|
+
entityId: 'pre_start_validation',
|
|
142
|
+
eventType: 'validate_start',
|
|
141
143
|
dryRun: true, // Don't log execution during validation
|
|
142
|
-
}
|
|
143
|
-
|
|
144
|
-
// Find applicable rules for this context
|
|
145
|
-
const rules = await ruleEngine.findApplicableRules(em, {
|
|
146
|
-
entityType: ruleContext.entityType,
|
|
147
|
-
eventType: ruleContext.eventType,
|
|
148
|
-
tenantId,
|
|
149
|
-
organizationId,
|
|
150
|
-
ruleType: 'GUARD',
|
|
151
144
|
})
|
|
152
145
|
|
|
153
|
-
|
|
146
|
+
validatedRules.push({
|
|
147
|
+
ruleId: condition.ruleId,
|
|
148
|
+
passed: result.conditionResult,
|
|
149
|
+
executionTime: result.executionTime,
|
|
150
|
+
})
|
|
154
151
|
|
|
155
|
-
|
|
156
|
-
|
|
152
|
+
// Handle rule not found
|
|
153
|
+
if (result.error === 'Rule not found') {
|
|
157
154
|
if (condition.required) {
|
|
158
155
|
errors.push({
|
|
159
156
|
ruleId: condition.ruleId,
|
|
160
|
-
message: getLocalizedMessage(condition, null, locale, `Business rule
|
|
157
|
+
message: getLocalizedMessage(condition, null, locale, `Business rule not found: ${condition.ruleId}`),
|
|
161
158
|
code: 'RULE_NOT_FOUND',
|
|
162
159
|
})
|
|
163
|
-
validatedRules.push({ ruleId: condition.ruleId, passed: false })
|
|
164
160
|
}
|
|
165
161
|
continue
|
|
166
162
|
}
|
|
167
163
|
|
|
168
|
-
//
|
|
169
|
-
|
|
164
|
+
// Handle disabled rule
|
|
165
|
+
if (result.error === 'Rule is disabled') {
|
|
166
|
+
if (condition.required) {
|
|
167
|
+
errors.push({
|
|
168
|
+
ruleId: condition.ruleId,
|
|
169
|
+
message: getLocalizedMessage(condition, null, locale, `Business rule is disabled: ${result.ruleName}`),
|
|
170
|
+
code: 'RULE_DISABLED',
|
|
171
|
+
})
|
|
172
|
+
}
|
|
173
|
+
continue
|
|
174
|
+
}
|
|
170
175
|
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
+
// Handle other errors (not yet effective, expired, etc.)
|
|
177
|
+
if (result.error && condition.required) {
|
|
178
|
+
errors.push({
|
|
179
|
+
ruleId: condition.ruleId,
|
|
180
|
+
message: getLocalizedMessage(condition, null, locale, `Rule error: ${result.error}`),
|
|
181
|
+
code: 'RULE_ERROR',
|
|
182
|
+
})
|
|
183
|
+
continue
|
|
184
|
+
}
|
|
176
185
|
|
|
186
|
+
// Handle condition failure
|
|
177
187
|
if (!result.conditionResult && condition.required) {
|
|
178
|
-
// Get localized message from condition
|
|
188
|
+
// Get localized message from condition or use default with rule name
|
|
179
189
|
const message = getLocalizedMessage(
|
|
180
190
|
condition,
|
|
181
|
-
|
|
191
|
+
null,
|
|
182
192
|
locale,
|
|
183
|
-
`Pre-condition '${
|
|
193
|
+
`Pre-condition '${result.ruleName || condition.ruleId}' failed`
|
|
184
194
|
)
|
|
185
195
|
errors.push({
|
|
186
196
|
ruleId: condition.ruleId,
|
|
@@ -12,7 +12,6 @@
|
|
|
12
12
|
|
|
13
13
|
import { EntityManager } from '@mikro-orm/core'
|
|
14
14
|
import type { AwilixContainer } from 'awilix'
|
|
15
|
-
import type { EventBus } from '@open-mercato/events'
|
|
16
15
|
import {
|
|
17
16
|
WorkflowInstance,
|
|
18
17
|
WorkflowDefinition,
|
|
@@ -20,7 +19,6 @@ import {
|
|
|
20
19
|
} from '../data/entities'
|
|
21
20
|
import * as ruleEvaluator from '../../business_rules/lib/rule-evaluator'
|
|
22
21
|
import * as ruleEngine from '../../business_rules/lib/rule-engine'
|
|
23
|
-
import type { RuleEngineContext } from '../../business_rules/lib/rule-engine'
|
|
24
22
|
import * as activityExecutor from './activity-executor'
|
|
25
23
|
import type { ActivityDefinition } from './activity-executor'
|
|
26
24
|
import * as stepHandler from './step-handler'
|
|
@@ -195,11 +193,15 @@ export async function evaluateTransition(
|
|
|
195
193
|
/**
|
|
196
194
|
* Find all valid transitions from current step
|
|
197
195
|
*
|
|
196
|
+
* This function evaluates both inline conditions AND preConditions (business rules)
|
|
197
|
+
* to determine which transitions are truly valid. This is important for decision
|
|
198
|
+
* branching where multiple transitions exist with different preConditions.
|
|
199
|
+
*
|
|
198
200
|
* @param em - Entity manager
|
|
199
201
|
* @param instance - Workflow instance
|
|
200
202
|
* @param fromStepId - Current step ID
|
|
201
203
|
* @param context - Evaluation context
|
|
202
|
-
* @returns Array of evaluation results for all transitions
|
|
204
|
+
* @returns Array of evaluation results for all transitions, sorted by priority (desc)
|
|
203
205
|
*/
|
|
204
206
|
export async function findValidTransitions(
|
|
205
207
|
em: EntityManager,
|
|
@@ -217,16 +219,17 @@ export async function findValidTransitions(
|
|
|
217
219
|
return []
|
|
218
220
|
}
|
|
219
221
|
|
|
220
|
-
// Find all transitions from current step
|
|
221
|
-
const transitions = (definition.definition.transitions || [])
|
|
222
|
-
(t: any) => t.fromStepId === fromStepId
|
|
223
|
-
|
|
222
|
+
// Find all transitions from current step, sorted by priority (highest first)
|
|
223
|
+
const transitions = (definition.definition.transitions || [])
|
|
224
|
+
.filter((t: any) => t.fromStepId === fromStepId)
|
|
225
|
+
.sort((a: any, b: any) => (b.priority || 0) - (a.priority || 0))
|
|
224
226
|
|
|
225
|
-
// Evaluate each transition
|
|
227
|
+
// Evaluate each transition including preConditions
|
|
226
228
|
const results: TransitionEvaluationResult[] = []
|
|
227
229
|
|
|
228
230
|
for (const transition of transitions) {
|
|
229
|
-
|
|
231
|
+
// First check inline condition
|
|
232
|
+
const conditionResult = await evaluateTransition(
|
|
230
233
|
em,
|
|
231
234
|
instance,
|
|
232
235
|
fromStepId,
|
|
@@ -234,7 +237,42 @@ export async function findValidTransitions(
|
|
|
234
237
|
context
|
|
235
238
|
)
|
|
236
239
|
|
|
237
|
-
|
|
240
|
+
if (!conditionResult.isValid) {
|
|
241
|
+
results.push(conditionResult)
|
|
242
|
+
continue
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
// Also evaluate preConditions if they exist
|
|
246
|
+
const preConditions = transition.preConditions || []
|
|
247
|
+
if (preConditions.length > 0) {
|
|
248
|
+
const preConditionsResult = await evaluatePreConditions(
|
|
249
|
+
em,
|
|
250
|
+
instance,
|
|
251
|
+
transition,
|
|
252
|
+
context as TransitionExecutionContext
|
|
253
|
+
)
|
|
254
|
+
|
|
255
|
+
if (!preConditionsResult.allowed) {
|
|
256
|
+
// Transition is invalid due to preConditions
|
|
257
|
+
const failedRules = preConditionsResult.executedRules
|
|
258
|
+
.filter((r) => !r.conditionResult)
|
|
259
|
+
.map((r) => r.rule.ruleId || r.rule.ruleName)
|
|
260
|
+
|
|
261
|
+
results.push({
|
|
262
|
+
isValid: false,
|
|
263
|
+
transition,
|
|
264
|
+
reason: `Pre-conditions failed: ${failedRules.join(', ')}`,
|
|
265
|
+
failedConditions: failedRules,
|
|
266
|
+
})
|
|
267
|
+
continue
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
|
|
271
|
+
// Transition is valid (both condition and preConditions passed)
|
|
272
|
+
results.push({
|
|
273
|
+
...conditionResult,
|
|
274
|
+
transition,
|
|
275
|
+
})
|
|
238
276
|
}
|
|
239
277
|
|
|
240
278
|
return results
|
|
@@ -272,13 +310,6 @@ export async function executeTransition(
|
|
|
272
310
|
context: TransitionExecutionContext
|
|
273
311
|
): Promise<TransitionExecutionResult> {
|
|
274
312
|
try {
|
|
275
|
-
let eventBus: Pick<EventBus, 'emitEvent'> | null = null
|
|
276
|
-
try {
|
|
277
|
-
eventBus = container.resolve('eventBus') as EventBus
|
|
278
|
-
} catch {
|
|
279
|
-
eventBus = null
|
|
280
|
-
}
|
|
281
|
-
|
|
282
313
|
// First, evaluate if transition is valid
|
|
283
314
|
const evaluation = await evaluateTransition(
|
|
284
315
|
em,
|
|
@@ -302,8 +333,7 @@ export async function executeTransition(
|
|
|
302
333
|
em,
|
|
303
334
|
instance,
|
|
304
335
|
transition,
|
|
305
|
-
context
|
|
306
|
-
eventBus
|
|
336
|
+
context
|
|
307
337
|
)
|
|
308
338
|
|
|
309
339
|
if (!preConditionsResult.allowed) {
|
|
@@ -514,8 +544,7 @@ export async function executeTransition(
|
|
|
514
544
|
em,
|
|
515
545
|
instance,
|
|
516
546
|
transition,
|
|
517
|
-
context
|
|
518
|
-
eventBus
|
|
547
|
+
context
|
|
519
548
|
)
|
|
520
549
|
|
|
521
550
|
if (!postConditionsResult.allowed) {
|
|
@@ -659,6 +688,10 @@ async function evaluateTransitionConditions(
|
|
|
659
688
|
* Pre-conditions are GUARD rules that must pass before transition can execute.
|
|
660
689
|
* If any GUARD rule fails, the transition is blocked.
|
|
661
690
|
*
|
|
691
|
+
* If the transition defines specific preConditions with ruleIds, those are
|
|
692
|
+
* executed directly via executeRuleByRuleId. Otherwise, falls back to
|
|
693
|
+
* discovery-based execution via executeRules.
|
|
694
|
+
*
|
|
662
695
|
* @param em - Entity manager
|
|
663
696
|
* @param instance - Workflow instance
|
|
664
697
|
* @param transition - Transition definition
|
|
@@ -669,8 +702,7 @@ async function evaluatePreConditions(
|
|
|
669
702
|
em: EntityManager,
|
|
670
703
|
instance: WorkflowInstance,
|
|
671
704
|
transition: any,
|
|
672
|
-
context: TransitionExecutionContext
|
|
673
|
-
eventBus: Pick<EventBus, 'emitEvent'> | null
|
|
705
|
+
context: TransitionExecutionContext
|
|
674
706
|
): Promise<ruleEngine.RuleEngineResult> {
|
|
675
707
|
try {
|
|
676
708
|
// Load workflow definition to get workflow ID
|
|
@@ -686,32 +718,88 @@ async function evaluatePreConditions(
|
|
|
686
718
|
}
|
|
687
719
|
}
|
|
688
720
|
|
|
689
|
-
//
|
|
690
|
-
const
|
|
691
|
-
|
|
692
|
-
|
|
693
|
-
|
|
694
|
-
|
|
695
|
-
|
|
696
|
-
|
|
697
|
-
|
|
698
|
-
|
|
699
|
-
workflowContext: {
|
|
700
|
-
...instance.context,
|
|
701
|
-
...context.workflowContext,
|
|
702
|
-
},
|
|
703
|
-
triggerData: context.triggerData,
|
|
704
|
-
},
|
|
705
|
-
user: context.userId ? { id: context.userId } : undefined,
|
|
706
|
-
tenantId: instance.tenantId,
|
|
707
|
-
organizationId: instance.organizationId,
|
|
708
|
-
executedBy: context.userId,
|
|
721
|
+
// Check if transition has specific preConditions defined
|
|
722
|
+
const preConditions = transition.preConditions || []
|
|
723
|
+
|
|
724
|
+
// If no pre-conditions defined, allow transition
|
|
725
|
+
if (preConditions.length === 0) {
|
|
726
|
+
return {
|
|
727
|
+
allowed: true,
|
|
728
|
+
executedRules: [],
|
|
729
|
+
totalExecutionTime: 0,
|
|
730
|
+
}
|
|
709
731
|
}
|
|
710
732
|
|
|
711
|
-
// Execute
|
|
712
|
-
const
|
|
733
|
+
// Execute each pre-condition rule directly by ruleId
|
|
734
|
+
const startTime = Date.now()
|
|
735
|
+
const executedRules: ruleEngine.RuleExecutionResult[] = []
|
|
736
|
+
const errors: string[] = []
|
|
737
|
+
let allowed = true
|
|
738
|
+
|
|
739
|
+
for (const condition of preConditions) {
|
|
740
|
+
const result = await ruleEngine.executeRuleByRuleId(em, {
|
|
741
|
+
ruleId: condition.ruleId, // String identifier
|
|
742
|
+
data: {
|
|
743
|
+
workflowInstanceId: instance.id,
|
|
744
|
+
workflowId: definition.workflowId,
|
|
745
|
+
fromStepId: transition.fromStepId,
|
|
746
|
+
toStepId: transition.toStepId,
|
|
747
|
+
workflowContext: {
|
|
748
|
+
...instance.context,
|
|
749
|
+
...context.workflowContext,
|
|
750
|
+
},
|
|
751
|
+
triggerData: context.triggerData,
|
|
752
|
+
},
|
|
753
|
+
user: context.userId ? { id: context.userId } : undefined,
|
|
754
|
+
tenantId: instance.tenantId,
|
|
755
|
+
organizationId: instance.organizationId,
|
|
756
|
+
executedBy: context.userId,
|
|
757
|
+
entityType: `workflow:${definition.workflowId}:transition`,
|
|
758
|
+
entityId: transition.transitionId || `${transition.fromStepId}->${transition.toStepId}`,
|
|
759
|
+
eventType: 'pre_transition',
|
|
760
|
+
})
|
|
713
761
|
|
|
714
|
-
|
|
762
|
+
// Create a compatible RuleExecutionResult for tracking
|
|
763
|
+
// We don't have the full BusinessRule entity, but we can create a partial result
|
|
764
|
+
const ruleResult: ruleEngine.RuleExecutionResult = {
|
|
765
|
+
rule: {
|
|
766
|
+
ruleId: result.ruleId,
|
|
767
|
+
ruleName: result.ruleName,
|
|
768
|
+
ruleType: 'GUARD',
|
|
769
|
+
} as any,
|
|
770
|
+
conditionResult: result.conditionResult,
|
|
771
|
+
actionsExecuted: result.actionsExecuted,
|
|
772
|
+
executionTime: result.executionTime,
|
|
773
|
+
error: result.error,
|
|
774
|
+
logId: result.logId,
|
|
775
|
+
}
|
|
776
|
+
executedRules.push(ruleResult)
|
|
777
|
+
|
|
778
|
+
// Handle rule errors
|
|
779
|
+
if (result.error) {
|
|
780
|
+
// Rule not found, disabled, or other errors
|
|
781
|
+
const isRequired = condition.required !== false // Default to required
|
|
782
|
+
if (isRequired) {
|
|
783
|
+
allowed = false
|
|
784
|
+
errors.push(`Rule '${result.ruleId}': ${result.error}`)
|
|
785
|
+
}
|
|
786
|
+
continue
|
|
787
|
+
}
|
|
788
|
+
|
|
789
|
+
// If required and condition failed, block transition
|
|
790
|
+
const isRequired = condition.required !== false // Default to required
|
|
791
|
+
if (isRequired && !result.conditionResult) {
|
|
792
|
+
allowed = false
|
|
793
|
+
errors.push(`Pre-condition '${result.ruleName || result.ruleId}' failed`)
|
|
794
|
+
}
|
|
795
|
+
}
|
|
796
|
+
|
|
797
|
+
return {
|
|
798
|
+
allowed,
|
|
799
|
+
executedRules,
|
|
800
|
+
totalExecutionTime: Date.now() - startTime,
|
|
801
|
+
errors: errors.length > 0 ? errors : undefined,
|
|
802
|
+
}
|
|
715
803
|
} catch (error) {
|
|
716
804
|
console.error('Error evaluating pre-conditions:', error)
|
|
717
805
|
return {
|
|
@@ -729,6 +817,9 @@ async function evaluatePreConditions(
|
|
|
729
817
|
* Post-conditions are GUARD rules that should pass after transition executes.
|
|
730
818
|
* Unlike pre-conditions, post-condition failures are logged but don't block the transition.
|
|
731
819
|
*
|
|
820
|
+
* If the transition defines specific postConditions with ruleIds, those are
|
|
821
|
+
* executed directly via executeRuleByRuleId. Otherwise, returns allowed: true.
|
|
822
|
+
*
|
|
732
823
|
* @param em - Entity manager
|
|
733
824
|
* @param instance - Workflow instance
|
|
734
825
|
* @param transition - Transition definition
|
|
@@ -739,8 +830,7 @@ async function evaluatePostConditions(
|
|
|
739
830
|
em: EntityManager,
|
|
740
831
|
instance: WorkflowInstance,
|
|
741
832
|
transition: any,
|
|
742
|
-
context: TransitionExecutionContext
|
|
743
|
-
eventBus: Pick<EventBus, 'emitEvent'> | null
|
|
833
|
+
context: TransitionExecutionContext
|
|
744
834
|
): Promise<ruleEngine.RuleEngineResult> {
|
|
745
835
|
try {
|
|
746
836
|
// Load workflow definition to get workflow ID
|
|
@@ -756,32 +846,83 @@ async function evaluatePostConditions(
|
|
|
756
846
|
}
|
|
757
847
|
}
|
|
758
848
|
|
|
759
|
-
//
|
|
760
|
-
const
|
|
761
|
-
|
|
762
|
-
|
|
763
|
-
|
|
764
|
-
|
|
765
|
-
|
|
766
|
-
|
|
767
|
-
|
|
768
|
-
|
|
769
|
-
workflowContext: {
|
|
770
|
-
...instance.context,
|
|
771
|
-
...context.workflowContext,
|
|
772
|
-
},
|
|
773
|
-
triggerData: context.triggerData,
|
|
774
|
-
},
|
|
775
|
-
user: context.userId ? { id: context.userId } : undefined,
|
|
776
|
-
tenantId: instance.tenantId,
|
|
777
|
-
organizationId: instance.organizationId,
|
|
778
|
-
executedBy: context.userId,
|
|
849
|
+
// Check if transition has specific postConditions defined
|
|
850
|
+
const postConditions = transition.postConditions || []
|
|
851
|
+
|
|
852
|
+
// If no post-conditions defined, allow
|
|
853
|
+
if (postConditions.length === 0) {
|
|
854
|
+
return {
|
|
855
|
+
allowed: true,
|
|
856
|
+
executedRules: [],
|
|
857
|
+
totalExecutionTime: 0,
|
|
858
|
+
}
|
|
779
859
|
}
|
|
780
860
|
|
|
781
|
-
// Execute
|
|
782
|
-
const
|
|
861
|
+
// Execute each post-condition rule directly by ruleId
|
|
862
|
+
const startTime = Date.now()
|
|
863
|
+
const executedRules: ruleEngine.RuleExecutionResult[] = []
|
|
864
|
+
const errors: string[] = []
|
|
865
|
+
let allowed = true
|
|
866
|
+
|
|
867
|
+
for (const condition of postConditions) {
|
|
868
|
+
const result = await ruleEngine.executeRuleByRuleId(em, {
|
|
869
|
+
ruleId: condition.ruleId, // String identifier
|
|
870
|
+
data: {
|
|
871
|
+
workflowInstanceId: instance.id,
|
|
872
|
+
workflowId: definition.workflowId,
|
|
873
|
+
fromStepId: transition.fromStepId,
|
|
874
|
+
toStepId: transition.toStepId,
|
|
875
|
+
workflowContext: {
|
|
876
|
+
...instance.context,
|
|
877
|
+
...context.workflowContext,
|
|
878
|
+
},
|
|
879
|
+
triggerData: context.triggerData,
|
|
880
|
+
},
|
|
881
|
+
user: context.userId ? { id: context.userId } : undefined,
|
|
882
|
+
tenantId: instance.tenantId,
|
|
883
|
+
organizationId: instance.organizationId,
|
|
884
|
+
executedBy: context.userId,
|
|
885
|
+
entityType: `workflow:${definition.workflowId}:transition`,
|
|
886
|
+
entityId: transition.transitionId || `${transition.fromStepId}->${transition.toStepId}`,
|
|
887
|
+
eventType: 'post_transition',
|
|
888
|
+
})
|
|
889
|
+
|
|
890
|
+
// Create a compatible RuleExecutionResult for tracking
|
|
891
|
+
const ruleResult: ruleEngine.RuleExecutionResult = {
|
|
892
|
+
rule: {
|
|
893
|
+
ruleId: result.ruleId,
|
|
894
|
+
ruleName: result.ruleName,
|
|
895
|
+
ruleType: 'GUARD',
|
|
896
|
+
} as any,
|
|
897
|
+
conditionResult: result.conditionResult,
|
|
898
|
+
actionsExecuted: result.actionsExecuted,
|
|
899
|
+
executionTime: result.executionTime,
|
|
900
|
+
error: result.error,
|
|
901
|
+
logId: result.logId,
|
|
902
|
+
}
|
|
903
|
+
executedRules.push(ruleResult)
|
|
904
|
+
|
|
905
|
+
// Handle rule errors
|
|
906
|
+
if (result.error) {
|
|
907
|
+
errors.push(`Rule '${result.ruleId}': ${result.error}`)
|
|
908
|
+
// Post-conditions don't block, but track the failure
|
|
909
|
+
allowed = false
|
|
910
|
+
continue
|
|
911
|
+
}
|
|
912
|
+
|
|
913
|
+
// Track condition failures (post-conditions are warnings, not blockers)
|
|
914
|
+
if (!result.conditionResult) {
|
|
915
|
+
allowed = false
|
|
916
|
+
errors.push(`Post-condition '${result.ruleName || result.ruleId}' failed`)
|
|
917
|
+
}
|
|
918
|
+
}
|
|
783
919
|
|
|
784
|
-
return
|
|
920
|
+
return {
|
|
921
|
+
allowed,
|
|
922
|
+
executedRules,
|
|
923
|
+
totalExecutionTime: Date.now() - startTime,
|
|
924
|
+
errors: errors.length > 0 ? errors : undefined,
|
|
925
|
+
}
|
|
785
926
|
} catch (error) {
|
|
786
927
|
console.error('Error evaluating post-conditions:', error)
|
|
787
928
|
return {
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { Migration } from '@mikro-orm/migrations';
|
|
2
|
+
|
|
3
|
+
export class Migration20260123143500 extends Migration {
|
|
4
|
+
|
|
5
|
+
override async up(): Promise<void> {
|
|
6
|
+
// Create workflow_event_triggers table
|
|
7
|
+
this.addSql(`
|
|
8
|
+
create table "workflow_event_triggers" (
|
|
9
|
+
"id" uuid not null default gen_random_uuid(),
|
|
10
|
+
"name" varchar(255) not null,
|
|
11
|
+
"description" text null,
|
|
12
|
+
"workflow_definition_id" uuid not null,
|
|
13
|
+
"event_pattern" varchar(255) not null,
|
|
14
|
+
"config" jsonb null,
|
|
15
|
+
"enabled" bool not null default true,
|
|
16
|
+
"priority" int4 not null default 0,
|
|
17
|
+
"tenant_id" uuid not null,
|
|
18
|
+
"organization_id" uuid not null,
|
|
19
|
+
"created_by" varchar(255) null,
|
|
20
|
+
"updated_by" varchar(255) null,
|
|
21
|
+
"created_at" timestamptz(6) not null,
|
|
22
|
+
"updated_at" timestamptz(6) not null,
|
|
23
|
+
"deleted_at" timestamptz(6) null,
|
|
24
|
+
constraint "workflow_event_triggers_pkey" primary key ("id")
|
|
25
|
+
);
|
|
26
|
+
`);
|
|
27
|
+
|
|
28
|
+
// Create indexes
|
|
29
|
+
this.addSql(`create index "workflow_event_triggers_event_pattern_idx" on "workflow_event_triggers" ("event_pattern", "enabled");`);
|
|
30
|
+
this.addSql(`create index "workflow_event_triggers_definition_idx" on "workflow_event_triggers" ("workflow_definition_id");`);
|
|
31
|
+
this.addSql(`create index "workflow_event_triggers_tenant_org_idx" on "workflow_event_triggers" ("tenant_id", "organization_id");`);
|
|
32
|
+
this.addSql(`create index "workflow_event_triggers_enabled_priority_idx" on "workflow_event_triggers" ("enabled", "priority");`);
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
override async down(): Promise<void> {
|
|
36
|
+
this.addSql(`drop table if exists "workflow_event_triggers" cascade;`);
|
|
37
|
+
}
|
|
38
|
+
}
|