@open-mercato/core 0.4.2-canary-f821f89ef6 → 0.4.2-canary-3b5064ce72
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/notification/index.js +57 -0
- package/dist/generated/entities/notification/index.js.map +7 -0
- package/dist/generated/entities.ids.generated.js +5 -2
- 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 +3 -2
- 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 +4 -0
- package/dist/modules/attachments/components/AttachmentLibrary.js.map +2 -2
- package/dist/modules/attachments/components/AttachmentPartitionSettings.js +2 -0
- package/dist/modules/attachments/components/AttachmentPartitionSettings.js.map +2 -2
- package/dist/modules/auth/api/admin/nav.js +4 -3
- package/dist/modules/auth/api/admin/nav.js.map +2 -2
- package/dist/modules/auth/api/login.js +25 -6
- package/dist/modules/auth/api/login.js.map +2 -2
- package/dist/modules/auth/api/profile/route.js +157 -0
- package/dist/modules/auth/api/profile/route.js.map +7 -0
- package/dist/modules/auth/api/reset/confirm.js +25 -2
- package/dist/modules/auth/api/reset/confirm.js.map +2 -2
- package/dist/modules/auth/api/reset.js +23 -0
- package/dist/modules/auth/api/reset.js.map +2 -2
- package/dist/modules/auth/api/sidebar/preferences/route.js +14 -9
- package/dist/modules/auth/api/sidebar/preferences/route.js.map +2 -2
- package/dist/modules/auth/api/users/route.js +4 -2
- package/dist/modules/auth/api/users/route.js.map +2 -2
- package/dist/modules/auth/backend/auth/profile/page.js +141 -0
- package/dist/modules/auth/backend/auth/profile/page.js.map +7 -0
- package/dist/modules/auth/backend/auth/profile/page.meta.js +13 -0
- package/dist/modules/auth/backend/auth/profile/page.meta.js.map +7 -0
- package/dist/modules/auth/backend/roles/[id]/edit/page.js +4 -1
- 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 +18 -3
- package/dist/modules/auth/backend/users/[id]/edit/page.js.map +2 -2
- package/dist/modules/auth/backend/users/create/page.js +15 -2
- 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 +25 -11
- package/dist/modules/auth/cli.js.map +2 -2
- package/dist/modules/auth/commands/users.js +59 -2
- package/dist/modules/auth/commands/users.js.map +2 -2
- package/dist/modules/auth/data/validators.js +6 -3
- package/dist/modules/auth/data/validators.js.map +2 -2
- package/dist/modules/auth/frontend/login.js +112 -3
- package/dist/modules/auth/frontend/login.js.map +2 -2
- package/dist/modules/auth/frontend/reset/[token]/page.js +20 -10
- package/dist/modules/auth/frontend/reset/[token]/page.js.map +2 -2
- package/dist/modules/auth/lib/setup-app.js +42 -8
- package/dist/modules/auth/lib/setup-app.js.map +2 -2
- package/dist/modules/auth/notifications.js +112 -0
- package/dist/modules/auth/notifications.js.map +7 -0
- package/dist/modules/auth/services/authService.js +24 -3
- package/dist/modules/auth/services/authService.js.map +2 -2
- package/dist/modules/business_rules/api/execute/route.js +7 -1
- package/dist/modules/business_rules/api/execute/route.js.map +2 -2
- package/dist/modules/business_rules/backend/rules/page.js +4 -0
- package/dist/modules/business_rules/backend/rules/page.js.map +2 -2
- package/dist/modules/business_rules/backend/sets/page.js +3 -0
- package/dist/modules/business_rules/backend/sets/page.js.map +2 -2
- package/dist/modules/business_rules/cli.js +2 -1
- package/dist/modules/business_rules/cli.js.map +2 -2
- package/dist/modules/business_rules/data/validators.js +0 -34
- package/dist/modules/business_rules/data/validators.js.map +2 -2
- package/dist/modules/business_rules/index.js +1 -21
- package/dist/modules/business_rules/index.js.map +2 -2
- package/dist/modules/business_rules/lib/rule-engine.js +34 -185
- package/dist/modules/business_rules/lib/rule-engine.js.map +2 -2
- package/dist/modules/business_rules/notifications.js +28 -0
- package/dist/modules/business_rules/notifications.js.map +7 -0
- package/dist/modules/business_rules/subscribers/rule-execution-failed-notification.js +37 -0
- package/dist/modules/business_rules/subscribers/rule-execution-failed-notification.js.map +7 -0
- package/dist/modules/catalog/components/PriceKindSettings.js +2 -0
- 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 +2 -0
- package/dist/modules/catalog/components/products/ProductsDataTable.js.map +2 -2
- package/dist/modules/catalog/notifications.js +28 -0
- package/dist/modules/catalog/notifications.js.map +7 -0
- package/dist/modules/catalog/subscribers/low-stock-notification.js +38 -0
- package/dist/modules/catalog/subscribers/low-stock-notification.js.map +7 -0
- package/dist/modules/configs/cli.js +6 -0
- 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 +48 -1
- package/dist/modules/configs/lib/system-status.js.map +2 -2
- package/dist/modules/configs/lib/upgrade-actions.js +18 -0
- package/dist/modules/configs/lib/upgrade-actions.js.map +2 -2
- package/dist/modules/currencies/backend/currencies/page.js +3 -0
- package/dist/modules/currencies/backend/currencies/page.js.map +2 -2
- package/dist/modules/currencies/backend/exchange-rates/page.js +2 -0
- package/dist/modules/currencies/backend/exchange-rates/page.js.map +2 -2
- package/dist/modules/customers/backend/customers/companies/page.js +3 -0
- package/dist/modules/customers/backend/customers/companies/page.js.map +2 -2
- package/dist/modules/customers/backend/customers/deals/page.js +3 -0
- package/dist/modules/customers/backend/customers/deals/page.js.map +2 -2
- package/dist/modules/customers/backend/customers/people/page.js +3 -0
- package/dist/modules/customers/backend/customers/people/page.js.map +2 -2
- package/dist/modules/customers/commands/deals.js +31 -0
- package/dist/modules/customers/commands/deals.js.map +2 -2
- package/dist/modules/customers/components/CustomerTodosTable.js +1 -0
- package/dist/modules/customers/components/CustomerTodosTable.js.map +2 -2
- package/dist/modules/customers/notifications.js +48 -0
- package/dist/modules/customers/notifications.js.map +7 -0
- package/dist/modules/customers/widgets/dashboard/customer-todos/widget.js +2 -1
- package/dist/modules/customers/widgets/dashboard/customer-todos/widget.js.map +2 -2
- package/dist/modules/customers/widgets/dashboard/new-customers/widget.js +2 -1
- package/dist/modules/customers/widgets/dashboard/new-customers/widget.js.map +2 -2
- package/dist/modules/customers/widgets/dashboard/new-deals/widget.js +2 -1
- package/dist/modules/customers/widgets/dashboard/new-deals/widget.js.map +2 -2
- package/dist/modules/customers/widgets/dashboard/next-interactions/widget.js +2 -1
- package/dist/modules/customers/widgets/dashboard/next-interactions/widget.js.map +2 -2
- package/dist/modules/dashboards/cli.js +44 -5
- package/dist/modules/dashboards/cli.js.map +2 -2
- package/dist/modules/dashboards/components/WidgetVisibilityEditor.js +16 -11
- package/dist/modules/dashboards/components/WidgetVisibilityEditor.js.map +3 -3
- package/dist/modules/dashboards/lib/role-widgets.js +58 -0
- package/dist/modules/dashboards/lib/role-widgets.js.map +7 -0
- package/dist/modules/dashboards/services/widgetDataService.js +139 -3
- package/dist/modules/dashboards/services/widgetDataService.js.map +2 -2
- package/dist/modules/dashboards/widgets/dashboard/aov-kpi/widget.js +2 -1
- package/dist/modules/dashboards/widgets/dashboard/aov-kpi/widget.js.map +2 -2
- package/dist/modules/dashboards/widgets/dashboard/new-customers-kpi/widget.js +2 -1
- 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 +2 -1
- package/dist/modules/dashboards/widgets/dashboard/orders-by-status/widget.js.map +2 -2
- package/dist/modules/dashboards/widgets/dashboard/orders-kpi/widget.js +2 -1
- package/dist/modules/dashboards/widgets/dashboard/orders-kpi/widget.js.map +2 -2
- package/dist/modules/dashboards/widgets/dashboard/pipeline-summary/widget.js +2 -1
- package/dist/modules/dashboards/widgets/dashboard/pipeline-summary/widget.js.map +2 -2
- package/dist/modules/dashboards/widgets/dashboard/revenue-kpi/widget.js +2 -1
- package/dist/modules/dashboards/widgets/dashboard/revenue-kpi/widget.js.map +2 -2
- package/dist/modules/dashboards/widgets/dashboard/revenue-trend/widget.js +2 -1
- package/dist/modules/dashboards/widgets/dashboard/revenue-trend/widget.js.map +2 -2
- package/dist/modules/dashboards/widgets/dashboard/sales-by-region/widget.js +2 -1
- package/dist/modules/dashboards/widgets/dashboard/sales-by-region/widget.js.map +2 -2
- package/dist/modules/dashboards/widgets/dashboard/top-customers/widget.js +2 -1
- package/dist/modules/dashboards/widgets/dashboard/top-customers/widget.js.map +2 -2
- package/dist/modules/dashboards/widgets/dashboard/top-products/widget.js +2 -1
- package/dist/modules/dashboards/widgets/dashboard/top-products/widget.js.map +2 -2
- package/dist/modules/dictionaries/components/DictionaryTable.js +2 -0
- package/dist/modules/dictionaries/components/DictionaryTable.js.map +2 -2
- package/dist/modules/directory/api/get/tenants/lookup.js +70 -0
- package/dist/modules/directory/api/get/tenants/lookup.js.map +7 -0
- 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/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/notifications/acl.js +11 -0
- package/dist/modules/notifications/acl.js.map +7 -0
- package/dist/modules/notifications/api/[id]/action/route.js +74 -0
- package/dist/modules/notifications/api/[id]/action/route.js.map +7 -0
- package/dist/modules/notifications/api/[id]/dismiss/route.js +15 -0
- package/dist/modules/notifications/api/[id]/dismiss/route.js.map +7 -0
- package/dist/modules/notifications/api/[id]/read/route.js +15 -0
- package/dist/modules/notifications/api/[id]/read/route.js.map +7 -0
- package/dist/modules/notifications/api/[id]/restore/route.js +53 -0
- package/dist/modules/notifications/api/[id]/restore/route.js.map +7 -0
- package/dist/modules/notifications/api/batch/route.js +17 -0
- package/dist/modules/notifications/api/batch/route.js.map +7 -0
- package/dist/modules/notifications/api/feature/route.js +17 -0
- package/dist/modules/notifications/api/feature/route.js.map +7 -0
- package/dist/modules/notifications/api/mark-all-read/route.js +35 -0
- package/dist/modules/notifications/api/mark-all-read/route.js.map +7 -0
- package/dist/modules/notifications/api/openapi.js +76 -0
- package/dist/modules/notifications/api/openapi.js.map +7 -0
- package/dist/modules/notifications/api/role/route.js +17 -0
- package/dist/modules/notifications/api/role/route.js.map +7 -0
- package/dist/modules/notifications/api/route.js +85 -0
- package/dist/modules/notifications/api/route.js.map +7 -0
- package/dist/modules/notifications/api/settings/route.js +155 -0
- package/dist/modules/notifications/api/settings/route.js.map +7 -0
- package/dist/modules/notifications/api/unread-count/route.js +38 -0
- package/dist/modules/notifications/api/unread-count/route.js.map +7 -0
- package/dist/modules/notifications/backend/config/notifications/page.js +10 -0
- package/dist/modules/notifications/backend/config/notifications/page.js.map +7 -0
- package/dist/modules/notifications/backend/config/notifications/page.meta.js +24 -0
- package/dist/modules/notifications/backend/config/notifications/page.meta.js.map +7 -0
- package/dist/modules/notifications/cli.js +16 -0
- package/dist/modules/notifications/cli.js.map +7 -0
- package/dist/modules/notifications/data/entities.js +112 -0
- package/dist/modules/notifications/data/entities.js.map +7 -0
- package/dist/modules/notifications/data/validators.js +98 -0
- package/dist/modules/notifications/data/validators.js.map +7 -0
- package/dist/modules/notifications/di.js +13 -0
- package/dist/modules/notifications/di.js.map +7 -0
- package/dist/modules/notifications/emails/NotificationEmail.js +58 -0
- package/dist/modules/notifications/emails/NotificationEmail.js.map +7 -0
- package/dist/modules/notifications/frontend/NotificationInboxPageClient.js +44 -0
- package/dist/modules/notifications/frontend/NotificationInboxPageClient.js.map +7 -0
- package/dist/modules/notifications/frontend/NotificationSettingsPageClient.js +220 -0
- package/dist/modules/notifications/frontend/NotificationSettingsPageClient.js.map +7 -0
- package/dist/modules/notifications/index.js +14 -0
- package/dist/modules/notifications/index.js.map +7 -0
- package/dist/modules/notifications/lib/deliveryConfig.js +107 -0
- package/dist/modules/notifications/lib/deliveryConfig.js.map +7 -0
- package/dist/modules/notifications/lib/deliveryStrategies.js +14 -0
- package/dist/modules/notifications/lib/deliveryStrategies.js.map +7 -0
- package/dist/modules/notifications/lib/events.js +12 -0
- package/dist/modules/notifications/lib/events.js.map +7 -0
- package/dist/modules/notifications/lib/notificationBuilder.js +66 -0
- package/dist/modules/notifications/lib/notificationBuilder.js.map +7 -0
- package/dist/modules/notifications/lib/notificationFactory.js +54 -0
- package/dist/modules/notifications/lib/notificationFactory.js.map +7 -0
- package/dist/modules/notifications/lib/notificationMapper.js +34 -0
- package/dist/modules/notifications/lib/notificationMapper.js.map +7 -0
- package/dist/modules/notifications/lib/notificationRecipients.js +35 -0
- package/dist/modules/notifications/lib/notificationRecipients.js.map +7 -0
- package/dist/modules/notifications/lib/notificationService.js +279 -0
- package/dist/modules/notifications/lib/notificationService.js.map +7 -0
- package/dist/modules/notifications/lib/routeHelpers.js +101 -0
- package/dist/modules/notifications/lib/routeHelpers.js.map +7 -0
- package/dist/modules/notifications/lib/safeHref.js +24 -0
- package/dist/modules/notifications/lib/safeHref.js.map +7 -0
- package/dist/modules/notifications/migrations/Migration20260123000001.js +70 -0
- package/dist/modules/notifications/migrations/Migration20260123000001.js.map +7 -0
- package/dist/modules/notifications/migrations/Migration20260126150000.js +37 -0
- package/dist/modules/notifications/migrations/Migration20260126150000.js.map +7 -0
- package/dist/modules/notifications/migrations/Migration20260129082610.js +13 -0
- package/dist/modules/notifications/migrations/Migration20260129082610.js.map +7 -0
- package/dist/modules/notifications/subscribers/deliver-notification.js +165 -0
- package/dist/modules/notifications/subscribers/deliver-notification.js.map +7 -0
- package/dist/modules/notifications/workers/create-notification.worker.js +70 -0
- package/dist/modules/notifications/workers/create-notification.worker.js.map +7 -0
- 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 +63 -7
- package/dist/modules/query_index/cli.js.map +2 -2
- package/dist/modules/query_index/components/QueryIndexesTable.js +7 -1
- 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 +0 -1
- package/dist/modules/sales/acl.js.map +2 -2
- package/dist/modules/sales/backend/sales/channels/offers/page.js +2 -0
- package/dist/modules/sales/backend/sales/channels/offers/page.js.map +2 -2
- package/dist/modules/sales/backend/sales/channels/page.js +2 -0
- package/dist/modules/sales/backend/sales/channels/page.js.map +2 -2
- package/dist/modules/sales/backend/sales/documents/[id]/page.js +0 -12
- package/dist/modules/sales/backend/sales/documents/[id]/page.js.map +2 -2
- package/dist/modules/sales/commands/documents.js +53 -62
- package/dist/modules/sales/commands/documents.js.map +2 -2
- package/dist/modules/sales/commands/payments.js +26 -0
- 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 +2 -0
- package/dist/modules/sales/components/channels/SalesChannelOffersPanel.js.map +2 -2
- package/dist/modules/sales/components/documents/AdjustmentsSection.js +2 -0
- package/dist/modules/sales/components/documents/AdjustmentsSection.js.map +2 -2
- package/dist/modules/sales/components/documents/PaymentsSection.js +2 -1
- package/dist/modules/sales/components/documents/PaymentsSection.js.map +2 -2
- package/dist/modules/sales/components/documents/SalesDocumentsTable.js +2 -0
- package/dist/modules/sales/components/documents/SalesDocumentsTable.js.map +2 -2
- package/dist/modules/sales/lib/dictionaries.js +0 -3
- package/dist/modules/sales/lib/dictionaries.js.map +2 -2
- package/dist/modules/sales/notifications.client.js +51 -0
- package/dist/modules/sales/notifications.client.js.map +7 -0
- package/dist/modules/sales/notifications.js +88 -0
- package/dist/modules/sales/notifications.js.map +7 -0
- package/dist/modules/sales/subscribers/quote-expiring-notification.js +38 -0
- package/dist/modules/sales/subscribers/quote-expiring-notification.js.map +7 -0
- package/dist/modules/sales/widgets/notifications/SalesOrderCreatedRenderer.js +137 -0
- package/dist/modules/sales/widgets/notifications/SalesOrderCreatedRenderer.js.map +7 -0
- package/dist/modules/sales/widgets/notifications/SalesQuoteCreatedRenderer.js +137 -0
- package/dist/modules/sales/widgets/notifications/SalesQuoteCreatedRenderer.js.map +7 -0
- package/dist/modules/sales/widgets/notifications/index.js +7 -0
- package/dist/modules/sales/widgets/notifications/index.js.map +7 -0
- package/dist/modules/sales/widgets/notifications/useSalesDocumentTotals.js +60 -0
- package/dist/modules/sales/widgets/notifications/useSalesDocumentTotals.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 +79 -0
- package/dist/modules/staff/commands/leave-requests.js.map +2 -2
- package/dist/modules/staff/notifications.js +75 -0
- package/dist/modules/staff/notifications.js.map +7 -0
- package/dist/modules/workflows/acl.js +0 -2
- package/dist/modules/workflows/acl.js.map +2 -2
- package/dist/modules/workflows/api/instances/route.js +6 -18
- package/dist/modules/workflows/api/instances/route.js.map +2 -2
- package/dist/modules/workflows/api/tasks/route.js +1 -6
- package/dist/modules/workflows/api/tasks/route.js.map +2 -2
- package/dist/modules/workflows/backend/definitions/[id]/page.js +1 -9
- 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 +15 -24
- 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 +5 -0
- package/dist/modules/workflows/backend/definitions/page.js.map +2 -2
- package/dist/modules/workflows/backend/definitions/visual-editor/page.js +132 -150
- 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 +3 -0
- 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 +9 -5
- package/dist/modules/workflows/backend/tasks/page.js.map +2 -2
- package/dist/modules/workflows/cli.js +15 -93
- package/dist/modules/workflows/cli.js.map +3 -3
- package/dist/modules/workflows/data/entities.js +1 -64
- package/dist/modules/workflows/data/entities.js.map +2 -2
- package/dist/modules/workflows/data/validators.js +0 -115
- package/dist/modules/workflows/data/validators.js.map +2 -2
- package/dist/modules/workflows/examples/checkout-demo-definition.json +5 -1
- package/dist/modules/workflows/lib/activity-executor.js +13 -75
- package/dist/modules/workflows/lib/activity-executor.js.map +2 -2
- package/dist/modules/workflows/lib/graph-utils.js +2 -71
- package/dist/modules/workflows/lib/graph-utils.js.map +2 -2
- package/dist/modules/workflows/lib/seeds.js +5 -22
- package/dist/modules/workflows/lib/seeds.js.map +2 -2
- package/dist/modules/workflows/lib/start-validator.js +23 -33
- package/dist/modules/workflows/lib/start-validator.js.map +2 -2
- package/dist/modules/workflows/lib/transition-handler.js +57 -161
- package/dist/modules/workflows/lib/transition-handler.js.map +3 -3
- package/dist/modules/workflows/notifications.js +28 -0
- package/dist/modules/workflows/notifications.js.map +7 -0
- package/dist/modules/workflows/subscribers/task-assigned-notification.js +38 -0
- package/dist/modules/workflows/subscribers/task-assigned-notification.js.map +7 -0
- package/generated/entities/notification/index.ts +27 -0
- package/generated/entities.ids.generated.ts +5 -2
- package/generated/entity-fields-registry.ts +2 -2
- package/package.json +2 -2
- package/src/modules/api_docs/frontend/docs/api/page.tsx +3 -2
- package/src/modules/api_keys/backend/api-keys/page.tsx +1 -1
- package/src/modules/attachments/components/AttachmentLibrary.tsx +4 -0
- package/src/modules/attachments/components/AttachmentPartitionSettings.tsx +2 -0
- 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 +2 -0
- package/src/modules/auth/api/admin/nav.ts +10 -6
- package/src/modules/auth/api/login.ts +26 -7
- package/src/modules/auth/api/profile/route.ts +163 -0
- package/src/modules/auth/api/reset/confirm.ts +25 -2
- package/src/modules/auth/api/reset.ts +23 -0
- package/src/modules/auth/api/sidebar/preferences/route.ts +21 -12
- package/src/modules/auth/api/users/route.ts +5 -2
- package/src/modules/auth/backend/auth/profile/page.meta.ts +9 -0
- package/src/modules/auth/backend/auth/profile/page.tsx +174 -0
- package/src/modules/auth/backend/roles/[id]/edit/page.tsx +4 -1
- package/src/modules/auth/backend/roles/page.tsx +3 -3
- package/src/modules/auth/backend/users/[id]/edit/page.tsx +22 -3
- package/src/modules/auth/backend/users/create/page.tsx +19 -2
- package/src/modules/auth/backend/users/page.tsx +3 -3
- package/src/modules/auth/cli.ts +38 -11
- package/src/modules/auth/commands/users.ts +73 -2
- package/src/modules/auth/data/validators.ts +6 -2
- package/src/modules/auth/frontend/login.tsx +134 -5
- package/src/modules/auth/frontend/reset/[token]/page.tsx +24 -11
- package/src/modules/auth/i18n/de.json +48 -1
- package/src/modules/auth/i18n/en.json +48 -1
- package/src/modules/auth/i18n/es.json +48 -1
- package/src/modules/auth/i18n/pl.json +48 -1
- package/src/modules/auth/lib/setup-app.ts +58 -9
- package/src/modules/auth/notifications.ts +109 -0
- package/src/modules/auth/services/authService.ts +27 -4
- package/src/modules/business_rules/api/execute/route.ts +8 -1
- package/src/modules/business_rules/backend/rules/page.tsx +4 -0
- package/src/modules/business_rules/backend/sets/page.tsx +3 -0
- package/src/modules/business_rules/cli.ts +2 -1
- package/src/modules/business_rules/data/validators.ts +0 -40
- package/src/modules/business_rules/i18n/en.json +3 -1
- package/src/modules/business_rules/index.ts +0 -25
- package/src/modules/business_rules/lib/__tests__/rule-engine.test.ts +51 -0
- package/src/modules/business_rules/lib/rule-engine.ts +51 -277
- package/src/modules/business_rules/notifications.ts +25 -0
- package/src/modules/business_rules/subscribers/rule-execution-failed-notification.ts +50 -0
- package/src/modules/catalog/components/PriceKindSettings.tsx +2 -0
- package/src/modules/catalog/components/categories/CategoriesDataTable.tsx +2 -2
- package/src/modules/catalog/components/products/ProductsDataTable.tsx +2 -0
- package/src/modules/catalog/i18n/en.json +3 -1
- package/src/modules/catalog/notifications.ts +25 -0
- package/src/modules/catalog/subscribers/low-stock-notification.ts +52 -0
- package/src/modules/configs/cli.ts +6 -0
- package/src/modules/configs/components/CachePanel.tsx +4 -4
- package/src/modules/configs/i18n/en.json +12 -2
- package/src/modules/configs/i18n/pl.json +12 -2
- package/src/modules/configs/lib/system-status.ts +48 -1
- package/src/modules/configs/lib/system-status.types.ts +1 -0
- package/src/modules/configs/lib/upgrade-actions.ts +18 -0
- package/src/modules/currencies/backend/currencies/page.tsx +3 -0
- package/src/modules/currencies/backend/exchange-rates/page.tsx +2 -0
- package/src/modules/customers/backend/customers/companies/page.tsx +3 -0
- package/src/modules/customers/backend/customers/deals/page.tsx +3 -0
- package/src/modules/customers/backend/customers/people/page.tsx +3 -0
- package/src/modules/customers/commands/deals.ts +39 -0
- package/src/modules/customers/components/CustomerTodosTable.tsx +1 -0
- package/src/modules/customers/i18n/en.json +5 -1
- package/src/modules/customers/notifications.ts +44 -0
- 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 +55 -5
- package/src/modules/dashboards/components/WidgetVisibilityEditor.tsx +22 -11
- package/src/modules/dashboards/lib/role-widgets.ts +80 -0
- package/src/modules/dashboards/services/widgetDataService.ts +164 -4
- 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 +2 -0
- package/src/modules/directory/api/get/tenants/lookup.ts +75 -0
- 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/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 +3 -4
- package/src/modules/feature_toggles/components/OverridesTable.tsx +1 -1
- package/src/modules/notifications/__tests__/deliver-notification.test.ts +195 -0
- package/src/modules/notifications/__tests__/deliveryStrategies.test.ts +19 -0
- package/src/modules/notifications/__tests__/notificationService.test.ts +208 -0
- package/src/modules/notifications/acl.ts +7 -0
- package/src/modules/notifications/api/[id]/action/route.ts +75 -0
- package/src/modules/notifications/api/[id]/dismiss/route.ts +12 -0
- package/src/modules/notifications/api/[id]/read/route.ts +12 -0
- package/src/modules/notifications/api/[id]/restore/route.ts +53 -0
- package/src/modules/notifications/api/batch/route.ts +14 -0
- package/src/modules/notifications/api/feature/route.ts +14 -0
- package/src/modules/notifications/api/mark-all-read/route.ts +34 -0
- package/src/modules/notifications/api/openapi.ts +76 -0
- package/src/modules/notifications/api/role/route.ts +14 -0
- package/src/modules/notifications/api/route.ts +92 -0
- package/src/modules/notifications/api/settings/route.ts +157 -0
- package/src/modules/notifications/api/unread-count/route.ts +38 -0
- package/src/modules/notifications/backend/config/notifications/page.meta.ts +22 -0
- package/src/modules/notifications/backend/config/notifications/page.tsx +12 -0
- package/src/modules/notifications/cli.ts +18 -0
- package/src/modules/notifications/data/entities.ts +99 -0
- package/src/modules/notifications/data/validators.ts +115 -0
- package/src/modules/notifications/di.ts +11 -0
- package/src/modules/notifications/emails/NotificationEmail.tsx +98 -0
- package/src/modules/notifications/frontend/NotificationInboxPageClient.tsx +42 -0
- package/src/modules/notifications/frontend/NotificationSettingsPageClient.tsx +233 -0
- package/src/modules/notifications/i18n/de.json +50 -0
- package/src/modules/notifications/i18n/en.json +50 -0
- package/src/modules/notifications/i18n/es.json +50 -0
- package/src/modules/notifications/i18n/pl.json +50 -0
- package/src/modules/notifications/index.ts +12 -0
- package/src/modules/notifications/lib/deliveryConfig.ts +153 -0
- package/src/modules/notifications/lib/deliveryStrategies.ts +50 -0
- package/src/modules/notifications/lib/events.ts +48 -0
- package/src/modules/notifications/lib/notificationBuilder.ts +121 -0
- package/src/modules/notifications/lib/notificationFactory.ts +76 -0
- package/src/modules/notifications/lib/notificationMapper.ts +33 -0
- package/src/modules/notifications/lib/notificationRecipients.ts +83 -0
- package/src/modules/notifications/lib/notificationService.ts +414 -0
- package/src/modules/notifications/lib/routeHelpers.ts +151 -0
- package/src/modules/notifications/lib/safeHref.ts +29 -0
- package/src/modules/notifications/migrations/.snapshot-open-mercato.json +336 -0
- package/src/modules/notifications/migrations/Migration20260123000001.ts +73 -0
- package/src/modules/notifications/migrations/Migration20260126150000.ts +39 -0
- package/src/modules/notifications/migrations/Migration20260129082610.ts +13 -0
- package/src/modules/notifications/subscribers/deliver-notification.ts +204 -0
- package/src/modules/notifications/workers/create-notification.worker.ts +122 -0
- package/src/modules/planner/backend/planner/availability-rulesets/page.tsx +2 -2
- package/src/modules/query_index/cli.ts +82 -13
- package/src/modules/query_index/components/QueryIndexesTable.tsx +8 -2
- 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 +0 -1
- package/src/modules/sales/backend/sales/channels/offers/page.tsx +2 -0
- package/src/modules/sales/backend/sales/channels/page.tsx +2 -0
- package/src/modules/sales/backend/sales/documents/[id]/page.tsx +0 -16
- package/src/modules/sales/commands/documents.ts +62 -70
- package/src/modules/sales/commands/payments.ts +33 -0
- 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 +2 -0
- package/src/modules/sales/components/documents/AdjustmentsSection.tsx +2 -0
- package/src/modules/sales/components/documents/PaymentsSection.tsx +2 -1
- package/src/modules/sales/components/documents/SalesDocumentsTable.tsx +2 -0
- package/src/modules/sales/i18n/de.json +20 -0
- package/src/modules/sales/i18n/en.json +25 -1
- package/src/modules/sales/i18n/es.json +20 -0
- package/src/modules/sales/i18n/pl.json +20 -0
- package/src/modules/sales/lib/dictionaries.ts +0 -3
- package/src/modules/sales/notifications.client.ts +65 -0
- package/src/modules/sales/notifications.ts +82 -0
- package/src/modules/sales/subscribers/quote-expiring-notification.ts +53 -0
- package/src/modules/sales/widgets/notifications/SalesOrderCreatedRenderer.tsx +156 -0
- package/src/modules/sales/widgets/notifications/SalesQuoteCreatedRenderer.tsx +156 -0
- package/src/modules/sales/widgets/notifications/index.ts +2 -0
- package/src/modules/sales/widgets/notifications/useSalesDocumentTotals.ts +81 -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 +94 -0
- package/src/modules/staff/i18n/de.json +4 -0
- package/src/modules/staff/i18n/en.json +9 -1
- package/src/modules/staff/i18n/es.json +4 -0
- package/src/modules/staff/i18n/pl.json +4 -0
- package/src/modules/staff/notifications.ts +71 -0
- package/src/modules/workflows/acl.ts +0 -2
- package/src/modules/workflows/api/__tests__/instances.route.test.ts +2 -5
- package/src/modules/workflows/api/instances/route.ts +7 -21
- package/src/modules/workflows/api/tasks/route.ts +1 -7
- package/src/modules/workflows/backend/definitions/[id]/page.meta.ts +1 -1
- package/src/modules/workflows/backend/definitions/[id]/page.tsx +0 -9
- package/src/modules/workflows/backend/definitions/create/page.meta.ts +1 -1
- package/src/modules/workflows/backend/definitions/create/page.tsx +0 -9
- package/src/modules/workflows/backend/definitions/page.tsx +5 -0
- package/src/modules/workflows/backend/definitions/visual-editor/page.meta.ts +1 -1
- package/src/modules/workflows/backend/definitions/visual-editor/page.tsx +3 -21
- 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 +4 -1
- 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 +10 -6
- package/src/modules/workflows/cli.ts +12 -123
- package/src/modules/workflows/data/entities.ts +0 -124
- package/src/modules/workflows/data/validators.ts +0 -138
- package/src/modules/workflows/examples/checkout-demo-definition.json +5 -1
- package/src/modules/workflows/i18n/en.json +3 -72
- package/src/modules/workflows/lib/__tests__/activity-executor.test.ts +36 -43
- package/src/modules/workflows/lib/__tests__/transition-handler.test.ts +90 -170
- package/src/modules/workflows/lib/activity-executor.ts +16 -129
- package/src/modules/workflows/lib/graph-utils.ts +2 -117
- package/src/modules/workflows/lib/seeds.ts +8 -34
- package/src/modules/workflows/lib/start-validator.ts +28 -38
- package/src/modules/workflows/lib/transition-handler.ts +71 -212
- package/src/modules/workflows/notifications.ts +25 -0
- package/src/modules/workflows/subscribers/task-assigned-notification.ts +53 -0
- package/dist/generated/entities/workflow_event_trigger/index.js +0 -33
- package/dist/generated/entities/workflow_event_trigger/index.js.map +0 -7
- package/dist/modules/auth/events.js +0 -30
- package/dist/modules/auth/events.js.map +0 -7
- package/dist/modules/business_rules/api/execute/[ruleId]/route.js +0 -145
- package/dist/modules/business_rules/api/execute/[ruleId]/route.js.map +0 -7
- package/dist/modules/catalog/events.js +0 -34
- package/dist/modules/catalog/events.js.map +0 -7
- package/dist/modules/customers/events.js +0 -49
- package/dist/modules/customers/events.js.map +0 -7
- package/dist/modules/directory/events.js +0 -23
- package/dist/modules/directory/events.js.map +0 -7
- package/dist/modules/sales/events.js +0 -63
- package/dist/modules/sales/events.js.map +0 -7
- package/dist/modules/sales/lib/frontend/documentDataEvents.js +0 -25
- package/dist/modules/sales/lib/frontend/documentDataEvents.js.map +0 -7
- package/dist/modules/workflows/components/DefinitionTriggersEditor.js +0 -481
- package/dist/modules/workflows/components/DefinitionTriggersEditor.js.map +0 -7
- package/dist/modules/workflows/components/EventTriggersEditor.js +0 -553
- package/dist/modules/workflows/components/EventTriggersEditor.js.map +0 -7
- package/dist/modules/workflows/events.js +0 -38
- package/dist/modules/workflows/events.js.map +0 -7
- package/dist/modules/workflows/examples/order-approval-definition.json +0 -257
- package/dist/modules/workflows/examples/order-approval-guard-rules.json +0 -32
- package/dist/modules/workflows/lib/event-trigger-service.js +0 -308
- package/dist/modules/workflows/lib/event-trigger-service.js.map +0 -7
- package/dist/modules/workflows/migrations/Migration20260123143500.js +0 -36
- package/dist/modules/workflows/migrations/Migration20260123143500.js.map +0 -7
- package/dist/modules/workflows/subscribers/event-trigger.js +0 -78
- package/dist/modules/workflows/subscribers/event-trigger.js.map +0 -7
- package/dist/modules/workflows/widgets/injection/order-approval/widget.client.js +0 -323
- package/dist/modules/workflows/widgets/injection/order-approval/widget.client.js.map +0 -7
- package/dist/modules/workflows/widgets/injection/order-approval/widget.js +0 -17
- package/dist/modules/workflows/widgets/injection/order-approval/widget.js.map +0 -7
- package/dist/modules/workflows/widgets/injection-table.js +0 -19
- package/dist/modules/workflows/widgets/injection-table.js.map +0 -7
- package/generated/entities/workflow_event_trigger/index.ts +0 -15
- package/src/modules/auth/events.ts +0 -39
- package/src/modules/business_rules/api/execute/[ruleId]/route.ts +0 -163
- package/src/modules/catalog/events.ts +0 -45
- package/src/modules/customers/events.ts +0 -63
- package/src/modules/directory/events.ts +0 -31
- package/src/modules/sales/events.ts +0 -82
- package/src/modules/sales/lib/frontend/documentDataEvents.ts +0 -28
- package/src/modules/workflows/components/DefinitionTriggersEditor.tsx +0 -581
- package/src/modules/workflows/components/EventTriggersEditor.tsx +0 -664
- package/src/modules/workflows/events.ts +0 -49
- package/src/modules/workflows/examples/order-approval-definition.json +0 -257
- package/src/modules/workflows/examples/order-approval-guard-rules.json +0 -32
- package/src/modules/workflows/lib/event-trigger-service.ts +0 -557
- package/src/modules/workflows/migrations/Migration20260123143500.ts +0 -38
- package/src/modules/workflows/subscribers/event-trigger.ts +0 -109
- package/src/modules/workflows/widgets/injection/order-approval/widget.client.tsx +0 -446
- package/src/modules/workflows/widgets/injection/order-approval/widget.ts +0 -16
- package/src/modules/workflows/widgets/injection-table.ts +0 -21
|
@@ -7,8 +7,6 @@ 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'
|
|
12
10
|
|
|
13
11
|
export type WorkflowSeedScope = { tenantId: string; organizationId: string }
|
|
14
12
|
|
|
@@ -53,8 +51,6 @@ const embeddedSeeds: Record<string, unknown> = {
|
|
|
53
51
|
'guard-rules-example.json': guardRulesExample,
|
|
54
52
|
'sales-pipeline-definition.json': salesPipelineDefinition,
|
|
55
53
|
'simple-approval-definition.json': simpleApprovalDefinition,
|
|
56
|
-
'order-approval-definition.json': orderApprovalDefinition,
|
|
57
|
-
'order-approval-guard-rules.json': orderApprovalGuardRules,
|
|
58
54
|
}
|
|
59
55
|
|
|
60
56
|
function readExampleJson<T>(fileName: string): T {
|
|
@@ -94,35 +90,16 @@ async function seedWorkflowDefinition(
|
|
|
94
90
|
})
|
|
95
91
|
|
|
96
92
|
if (existing) {
|
|
97
|
-
// Check if the definition needs to be updated
|
|
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
|
|
93
|
+
// Check if the definition needs to be updated (e.g., missing preConditions on START step)
|
|
112
94
|
const seedStartStep = seed.definition.steps.find((s: any) => s.stepType === 'START')
|
|
113
95
|
const existingStartStep = existing.definition.steps.find((s: any) => s.stepType === 'START')
|
|
114
|
-
|
|
115
|
-
const
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
(seedHasStartPreConditions && !existingHasStartPreConditions) ||
|
|
122
|
-
(seedHasTransitionPreConditions && !existingHasTransitionPreConditions)
|
|
123
|
-
|
|
124
|
-
if (needsUpdate) {
|
|
125
|
-
console.log(`[seed] Updating workflow ${workflowId} (steps: ${existingStepCount}→${seedStepCount}, transitions: ${existingTransitionCount}→${seedTransitionCount})`)
|
|
96
|
+
|
|
97
|
+
const seedHasPreConditions = seedStartStep?.preConditions && seedStartStep.preConditions.length > 0
|
|
98
|
+
const existingHasPreConditions = existingStartStep?.preConditions && existingStartStep.preConditions.length > 0
|
|
99
|
+
|
|
100
|
+
// Update if seed has preConditions but existing doesn't
|
|
101
|
+
if (seedHasPreConditions && !existingHasPreConditions) {
|
|
102
|
+
console.log(`[seed] Updating workflow ${workflowId} with preConditions`)
|
|
126
103
|
existing.definition = seed.definition
|
|
127
104
|
await em.flush()
|
|
128
105
|
return true
|
|
@@ -195,7 +172,4 @@ export async function seedExampleWorkflows(em: EntityManager, scope: WorkflowSee
|
|
|
195
172
|
await seedGuardRules(em, scope, 'guard-rules-example.json')
|
|
196
173
|
await seedWorkflowDefinition(em, scope, 'sales-pipeline-definition.json')
|
|
197
174
|
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')
|
|
201
175
|
}
|
|
@@ -128,69 +128,59 @@ export async function validateWorkflowStart(
|
|
|
128
128
|
const validatedRules: ValidatedRule[] = []
|
|
129
129
|
|
|
130
130
|
for (const condition of preConditions) {
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
131
|
+
const ruleContext: ruleEngine.RuleEngineContext = {
|
|
132
|
+
entityType: `workflow:${workflowId}:start`,
|
|
133
|
+
entityId: 'pre_start_validation',
|
|
134
|
+
eventType: 'validate_start',
|
|
134
135
|
data: {
|
|
135
136
|
workflowId,
|
|
136
137
|
workflowContext: context,
|
|
137
138
|
},
|
|
138
139
|
tenantId,
|
|
139
140
|
organizationId,
|
|
140
|
-
entityType: `workflow:${workflowId}:start`,
|
|
141
|
-
entityId: 'pre_start_validation',
|
|
142
|
-
eventType: 'validate_start',
|
|
143
141
|
dryRun: true, // Don't log execution during validation
|
|
144
|
-
}
|
|
142
|
+
}
|
|
145
143
|
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
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',
|
|
150
151
|
})
|
|
151
152
|
|
|
152
|
-
|
|
153
|
-
|
|
153
|
+
const rule = rules.find(r => r.ruleId === condition.ruleId)
|
|
154
|
+
|
|
155
|
+
if (!rule) {
|
|
156
|
+
// Rule not found - if required, this is an error
|
|
154
157
|
if (condition.required) {
|
|
155
158
|
errors.push({
|
|
156
159
|
ruleId: condition.ruleId,
|
|
157
|
-
message: getLocalizedMessage(condition, null, locale, `Business rule
|
|
160
|
+
message: getLocalizedMessage(condition, null, locale, `Business rule '${condition.ruleId}' not found`),
|
|
158
161
|
code: 'RULE_NOT_FOUND',
|
|
159
162
|
})
|
|
163
|
+
validatedRules.push({ ruleId: condition.ruleId, passed: false })
|
|
160
164
|
}
|
|
161
165
|
continue
|
|
162
166
|
}
|
|
163
167
|
|
|
164
|
-
//
|
|
165
|
-
|
|
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
|
-
}
|
|
168
|
+
// Execute the single rule
|
|
169
|
+
const result = await ruleEngine.executeSingleRule(em, rule, ruleContext)
|
|
175
170
|
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
code: 'RULE_ERROR',
|
|
182
|
-
})
|
|
183
|
-
continue
|
|
184
|
-
}
|
|
171
|
+
validatedRules.push({
|
|
172
|
+
ruleId: condition.ruleId,
|
|
173
|
+
passed: result.conditionResult,
|
|
174
|
+
executionTime: result.executionTime,
|
|
175
|
+
})
|
|
185
176
|
|
|
186
|
-
// Handle condition failure
|
|
187
177
|
if (!result.conditionResult && condition.required) {
|
|
188
|
-
// Get localized message from condition
|
|
178
|
+
// Get localized message from condition, rule failure actions, or default
|
|
189
179
|
const message = getLocalizedMessage(
|
|
190
180
|
condition,
|
|
191
|
-
|
|
181
|
+
rule,
|
|
192
182
|
locale,
|
|
193
|
-
`Pre-condition '${
|
|
183
|
+
`Pre-condition '${rule.ruleName || condition.ruleId}' failed`
|
|
194
184
|
)
|
|
195
185
|
errors.push({
|
|
196
186
|
ruleId: condition.ruleId,
|
|
@@ -12,6 +12,7 @@
|
|
|
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'
|
|
15
16
|
import {
|
|
16
17
|
WorkflowInstance,
|
|
17
18
|
WorkflowDefinition,
|
|
@@ -19,6 +20,7 @@ import {
|
|
|
19
20
|
} from '../data/entities'
|
|
20
21
|
import * as ruleEvaluator from '../../business_rules/lib/rule-evaluator'
|
|
21
22
|
import * as ruleEngine from '../../business_rules/lib/rule-engine'
|
|
23
|
+
import type { RuleEngineContext } from '../../business_rules/lib/rule-engine'
|
|
22
24
|
import * as activityExecutor from './activity-executor'
|
|
23
25
|
import type { ActivityDefinition } from './activity-executor'
|
|
24
26
|
import * as stepHandler from './step-handler'
|
|
@@ -193,15 +195,11 @@ export async function evaluateTransition(
|
|
|
193
195
|
/**
|
|
194
196
|
* Find all valid transitions from current step
|
|
195
197
|
*
|
|
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
|
-
*
|
|
200
198
|
* @param em - Entity manager
|
|
201
199
|
* @param instance - Workflow instance
|
|
202
200
|
* @param fromStepId - Current step ID
|
|
203
201
|
* @param context - Evaluation context
|
|
204
|
-
* @returns Array of evaluation results for all transitions
|
|
202
|
+
* @returns Array of evaluation results for all transitions
|
|
205
203
|
*/
|
|
206
204
|
export async function findValidTransitions(
|
|
207
205
|
em: EntityManager,
|
|
@@ -219,17 +217,16 @@ export async function findValidTransitions(
|
|
|
219
217
|
return []
|
|
220
218
|
}
|
|
221
219
|
|
|
222
|
-
// Find all transitions from current step
|
|
223
|
-
const transitions = (definition.definition.transitions || [])
|
|
224
|
-
|
|
225
|
-
|
|
220
|
+
// Find all transitions from current step
|
|
221
|
+
const transitions = (definition.definition.transitions || []).filter(
|
|
222
|
+
(t: any) => t.fromStepId === fromStepId
|
|
223
|
+
)
|
|
226
224
|
|
|
227
|
-
// Evaluate each transition
|
|
225
|
+
// Evaluate each transition
|
|
228
226
|
const results: TransitionEvaluationResult[] = []
|
|
229
227
|
|
|
230
228
|
for (const transition of transitions) {
|
|
231
|
-
|
|
232
|
-
const conditionResult = await evaluateTransition(
|
|
229
|
+
const result = await evaluateTransition(
|
|
233
230
|
em,
|
|
234
231
|
instance,
|
|
235
232
|
fromStepId,
|
|
@@ -237,42 +234,7 @@ export async function findValidTransitions(
|
|
|
237
234
|
context
|
|
238
235
|
)
|
|
239
236
|
|
|
240
|
-
|
|
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
|
-
})
|
|
237
|
+
results.push(result)
|
|
276
238
|
}
|
|
277
239
|
|
|
278
240
|
return results
|
|
@@ -310,6 +272,13 @@ export async function executeTransition(
|
|
|
310
272
|
context: TransitionExecutionContext
|
|
311
273
|
): Promise<TransitionExecutionResult> {
|
|
312
274
|
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
|
+
|
|
313
282
|
// First, evaluate if transition is valid
|
|
314
283
|
const evaluation = await evaluateTransition(
|
|
315
284
|
em,
|
|
@@ -333,7 +302,8 @@ export async function executeTransition(
|
|
|
333
302
|
em,
|
|
334
303
|
instance,
|
|
335
304
|
transition,
|
|
336
|
-
context
|
|
305
|
+
context,
|
|
306
|
+
eventBus
|
|
337
307
|
)
|
|
338
308
|
|
|
339
309
|
if (!preConditionsResult.allowed) {
|
|
@@ -544,7 +514,8 @@ export async function executeTransition(
|
|
|
544
514
|
em,
|
|
545
515
|
instance,
|
|
546
516
|
transition,
|
|
547
|
-
context
|
|
517
|
+
context,
|
|
518
|
+
eventBus
|
|
548
519
|
)
|
|
549
520
|
|
|
550
521
|
if (!postConditionsResult.allowed) {
|
|
@@ -688,10 +659,6 @@ async function evaluateTransitionConditions(
|
|
|
688
659
|
* Pre-conditions are GUARD rules that must pass before transition can execute.
|
|
689
660
|
* If any GUARD rule fails, the transition is blocked.
|
|
690
661
|
*
|
|
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
|
-
*
|
|
695
662
|
* @param em - Entity manager
|
|
696
663
|
* @param instance - Workflow instance
|
|
697
664
|
* @param transition - Transition definition
|
|
@@ -702,7 +669,8 @@ async function evaluatePreConditions(
|
|
|
702
669
|
em: EntityManager,
|
|
703
670
|
instance: WorkflowInstance,
|
|
704
671
|
transition: any,
|
|
705
|
-
context: TransitionExecutionContext
|
|
672
|
+
context: TransitionExecutionContext,
|
|
673
|
+
eventBus: Pick<EventBus, 'emitEvent'> | null
|
|
706
674
|
): Promise<ruleEngine.RuleEngineResult> {
|
|
707
675
|
try {
|
|
708
676
|
// Load workflow definition to get workflow ID
|
|
@@ -718,88 +686,32 @@ async function evaluatePreConditions(
|
|
|
718
686
|
}
|
|
719
687
|
}
|
|
720
688
|
|
|
721
|
-
//
|
|
722
|
-
const
|
|
723
|
-
|
|
724
|
-
|
|
725
|
-
|
|
726
|
-
|
|
727
|
-
|
|
728
|
-
|
|
729
|
-
|
|
730
|
-
|
|
731
|
-
|
|
732
|
-
|
|
733
|
-
|
|
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,
|
|
689
|
+
// Build rule engine context
|
|
690
|
+
const ruleContext: RuleEngineContext = {
|
|
691
|
+
entityType: `workflow:${definition.workflowId}:transition`,
|
|
692
|
+
entityId: transition.transitionId || `${transition.fromStepId}->${transition.toStepId}`,
|
|
693
|
+
eventType: 'pre_transition',
|
|
694
|
+
data: {
|
|
695
|
+
workflowInstanceId: instance.id,
|
|
696
|
+
workflowId: definition.workflowId,
|
|
697
|
+
fromStepId: transition.fromStepId,
|
|
698
|
+
toStepId: transition.toStepId,
|
|
699
|
+
workflowContext: {
|
|
700
|
+
...instance.context,
|
|
701
|
+
...context.workflowContext,
|
|
752
702
|
},
|
|
753
|
-
|
|
754
|
-
|
|
755
|
-
|
|
756
|
-
|
|
757
|
-
|
|
758
|
-
|
|
759
|
-
eventType: 'pre_transition',
|
|
760
|
-
})
|
|
761
|
-
|
|
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
|
-
}
|
|
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,
|
|
795
709
|
}
|
|
796
710
|
|
|
797
|
-
|
|
798
|
-
|
|
799
|
-
|
|
800
|
-
|
|
801
|
-
errors: errors.length > 0 ? errors : undefined,
|
|
802
|
-
}
|
|
711
|
+
// Execute rules - only GUARD rules will affect the 'allowed' status
|
|
712
|
+
const result = await ruleEngine.executeRules(em, ruleContext, { eventBus })
|
|
713
|
+
|
|
714
|
+
return result
|
|
803
715
|
} catch (error) {
|
|
804
716
|
console.error('Error evaluating pre-conditions:', error)
|
|
805
717
|
return {
|
|
@@ -817,9 +729,6 @@ async function evaluatePreConditions(
|
|
|
817
729
|
* Post-conditions are GUARD rules that should pass after transition executes.
|
|
818
730
|
* Unlike pre-conditions, post-condition failures are logged but don't block the transition.
|
|
819
731
|
*
|
|
820
|
-
* If the transition defines specific postConditions with ruleIds, those are
|
|
821
|
-
* executed directly via executeRuleByRuleId. Otherwise, returns allowed: true.
|
|
822
|
-
*
|
|
823
732
|
* @param em - Entity manager
|
|
824
733
|
* @param instance - Workflow instance
|
|
825
734
|
* @param transition - Transition definition
|
|
@@ -830,7 +739,8 @@ async function evaluatePostConditions(
|
|
|
830
739
|
em: EntityManager,
|
|
831
740
|
instance: WorkflowInstance,
|
|
832
741
|
transition: any,
|
|
833
|
-
context: TransitionExecutionContext
|
|
742
|
+
context: TransitionExecutionContext,
|
|
743
|
+
eventBus: Pick<EventBus, 'emitEvent'> | null
|
|
834
744
|
): Promise<ruleEngine.RuleEngineResult> {
|
|
835
745
|
try {
|
|
836
746
|
// Load workflow definition to get workflow ID
|
|
@@ -846,83 +756,32 @@ async function evaluatePostConditions(
|
|
|
846
756
|
}
|
|
847
757
|
}
|
|
848
758
|
|
|
849
|
-
//
|
|
850
|
-
const
|
|
851
|
-
|
|
852
|
-
|
|
853
|
-
|
|
854
|
-
|
|
855
|
-
|
|
856
|
-
|
|
857
|
-
|
|
858
|
-
|
|
859
|
-
|
|
860
|
-
|
|
861
|
-
|
|
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,
|
|
759
|
+
// Build rule engine context
|
|
760
|
+
const ruleContext: RuleEngineContext = {
|
|
761
|
+
entityType: `workflow:${definition.workflowId}:transition`,
|
|
762
|
+
entityId: transition.transitionId || `${transition.fromStepId}->${transition.toStepId}`,
|
|
763
|
+
eventType: 'post_transition',
|
|
764
|
+
data: {
|
|
765
|
+
workflowInstanceId: instance.id,
|
|
766
|
+
workflowId: definition.workflowId,
|
|
767
|
+
fromStepId: transition.fromStepId,
|
|
768
|
+
toStepId: transition.toStepId,
|
|
769
|
+
workflowContext: {
|
|
770
|
+
...instance.context,
|
|
771
|
+
...context.workflowContext,
|
|
880
772
|
},
|
|
881
|
-
|
|
882
|
-
|
|
883
|
-
|
|
884
|
-
|
|
885
|
-
|
|
886
|
-
|
|
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
|
-
}
|
|
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,
|
|
918
779
|
}
|
|
919
780
|
|
|
920
|
-
|
|
921
|
-
|
|
922
|
-
|
|
923
|
-
|
|
924
|
-
errors: errors.length > 0 ? errors : undefined,
|
|
925
|
-
}
|
|
781
|
+
// Execute rules
|
|
782
|
+
const result = await ruleEngine.executeRules(em, ruleContext, { eventBus })
|
|
783
|
+
|
|
784
|
+
return result
|
|
926
785
|
} catch (error) {
|
|
927
786
|
console.error('Error evaluating post-conditions:', error)
|
|
928
787
|
return {
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { NotificationTypeDefinition } from '@open-mercato/shared/modules/notifications/types'
|
|
2
|
+
|
|
3
|
+
export const notificationTypes: NotificationTypeDefinition[] = [
|
|
4
|
+
{
|
|
5
|
+
type: 'workflows.task.assigned',
|
|
6
|
+
module: 'workflows',
|
|
7
|
+
titleKey: 'workflows.notifications.task.assigned.title',
|
|
8
|
+
bodyKey: 'workflows.notifications.task.assigned.body',
|
|
9
|
+
icon: 'clipboard-list',
|
|
10
|
+
severity: 'info',
|
|
11
|
+
actions: [
|
|
12
|
+
{
|
|
13
|
+
id: 'view',
|
|
14
|
+
labelKey: 'common.view',
|
|
15
|
+
variant: 'outline',
|
|
16
|
+
href: '/backend/workflows/tasks/{sourceEntityId}',
|
|
17
|
+
icon: 'external-link',
|
|
18
|
+
},
|
|
19
|
+
],
|
|
20
|
+
linkHref: '/backend/workflows/tasks/{sourceEntityId}',
|
|
21
|
+
expiresAfterHours: 168, // 7 days
|
|
22
|
+
},
|
|
23
|
+
]
|
|
24
|
+
|
|
25
|
+
export default notificationTypes
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import type { EntityManager } from '@mikro-orm/postgresql'
|
|
2
|
+
import { resolveNotificationService } from '../../notifications/lib/notificationService'
|
|
3
|
+
import { buildNotificationFromType } from '../../notifications/lib/notificationBuilder'
|
|
4
|
+
import { notificationTypes } from '../notifications'
|
|
5
|
+
|
|
6
|
+
export const metadata = {
|
|
7
|
+
event: 'workflows.task.assigned',
|
|
8
|
+
persistent: true,
|
|
9
|
+
id: 'workflows:task-assigned-notification',
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
type TaskAssignedPayload = {
|
|
13
|
+
taskId: string
|
|
14
|
+
taskName: string
|
|
15
|
+
workflowName: string
|
|
16
|
+
assignedUserId: string
|
|
17
|
+
dueDate?: string | null
|
|
18
|
+
tenantId: string
|
|
19
|
+
organizationId?: string | null
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
type ResolverContext = {
|
|
23
|
+
resolve: <T = unknown>(name: string) => T
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
export default async function handle(payload: TaskAssignedPayload, ctx: ResolverContext) {
|
|
27
|
+
if (!payload.assignedUserId) return
|
|
28
|
+
|
|
29
|
+
try {
|
|
30
|
+
const notificationService = resolveNotificationService(ctx)
|
|
31
|
+
const typeDef = notificationTypes.find((type) => type.type === 'workflows.task.assigned')
|
|
32
|
+
if (!typeDef) return
|
|
33
|
+
|
|
34
|
+
const notificationInput = buildNotificationFromType(typeDef, {
|
|
35
|
+
recipientUserId: payload.assignedUserId,
|
|
36
|
+
bodyVariables: {
|
|
37
|
+
taskName: payload.taskName,
|
|
38
|
+
workflowName: payload.workflowName,
|
|
39
|
+
dueDate: payload.dueDate ?? '',
|
|
40
|
+
},
|
|
41
|
+
sourceEntityType: 'workflows:user_task',
|
|
42
|
+
sourceEntityId: payload.taskId,
|
|
43
|
+
linkHref: `/backend/workflows/tasks/${payload.taskId}`,
|
|
44
|
+
})
|
|
45
|
+
|
|
46
|
+
await notificationService.create(notificationInput, {
|
|
47
|
+
tenantId: payload.tenantId,
|
|
48
|
+
organizationId: payload.organizationId ?? null,
|
|
49
|
+
})
|
|
50
|
+
} catch (err) {
|
|
51
|
+
console.error('[workflows:task-assigned-notification] Failed to create notification:', err)
|
|
52
|
+
}
|
|
53
|
+
}
|
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
const id = "id";
|
|
2
|
-
const name = "name";
|
|
3
|
-
const description = "description";
|
|
4
|
-
const workflow_definition_id = "workflow_definition_id";
|
|
5
|
-
const event_pattern = "event_pattern";
|
|
6
|
-
const config = "config";
|
|
7
|
-
const enabled = "enabled";
|
|
8
|
-
const priority = "priority";
|
|
9
|
-
const tenant_id = "tenant_id";
|
|
10
|
-
const organization_id = "organization_id";
|
|
11
|
-
const created_by = "created_by";
|
|
12
|
-
const updated_by = "updated_by";
|
|
13
|
-
const created_at = "created_at";
|
|
14
|
-
const updated_at = "updated_at";
|
|
15
|
-
const deleted_at = "deleted_at";
|
|
16
|
-
export {
|
|
17
|
-
config,
|
|
18
|
-
created_at,
|
|
19
|
-
created_by,
|
|
20
|
-
deleted_at,
|
|
21
|
-
description,
|
|
22
|
-
enabled,
|
|
23
|
-
event_pattern,
|
|
24
|
-
id,
|
|
25
|
-
name,
|
|
26
|
-
organization_id,
|
|
27
|
-
priority,
|
|
28
|
-
tenant_id,
|
|
29
|
-
updated_at,
|
|
30
|
-
updated_by,
|
|
31
|
-
workflow_definition_id
|
|
32
|
-
};
|
|
33
|
-
//# sourceMappingURL=index.js.map
|