@open-mercato/core 0.4.2-canary-968c919ed2 → 0.4.2-canary-bdaa640a68
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.ids.generated.js +1 -5
- package/dist/generated/entities.ids.generated.js.map +2 -2
- package/dist/generated/entity-fields-registry.js +0 -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/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/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/lib/rule-engine.js +3 -33
- 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/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/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/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/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/commands/documents.js +0 -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/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/backend/definitions/page.js +0 -5
- package/dist/modules/workflows/backend/definitions/page.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/page.js +0 -3
- package/dist/modules/workflows/backend/tasks/page.js.map +2 -2
- package/dist/modules/workflows/cli.js +12 -12
- package/dist/modules/workflows/cli.js.map +2 -2
- package/dist/modules/workflows/lib/transition-handler.js +6 -14
- package/dist/modules/workflows/lib/transition-handler.js.map +2 -2
- package/generated/entities.ids.generated.ts +1 -5
- package/generated/entity-fields-registry.ts +0 -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/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/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/i18n/en.json +1 -3
- package/src/modules/business_rules/lib/__tests__/rule-engine.test.ts +0 -51
- package/src/modules/business_rules/lib/rule-engine.ts +3 -57
- 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/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/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/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/backend/sales/channels/offers/page.tsx +0 -2
- package/src/modules/sales/backend/sales/channels/page.tsx +0 -2
- package/src/modules/sales/commands/documents.ts +0 -65
- 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/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/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/backend/definitions/page.tsx +0 -5
- package/src/modules/workflows/backend/instances/page.tsx +1 -4
- package/src/modules/workflows/backend/tasks/page.tsx +1 -4
- package/src/modules/workflows/cli.ts +12 -12
- package/src/modules/workflows/i18n/en.json +1 -3
- package/src/modules/workflows/lib/transition-handler.ts +6 -18
- 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
|
@@ -2,26 +2,12 @@
|
|
|
2
2
|
"auth.signIn": "Iniciar sesión",
|
|
3
3
|
"auth.email": "Correo electrónico",
|
|
4
4
|
"auth.password": "Contraseña",
|
|
5
|
-
"auth.password.requirements.help": "Requisitos de la contraseña: {requirements}",
|
|
6
|
-
"auth.password.requirements.minLength": "Al menos {min} caracteres",
|
|
7
|
-
"auth.password.requirements.digit": "Un número",
|
|
8
|
-
"auth.password.requirements.uppercase": "Una letra mayúscula",
|
|
9
|
-
"auth.password.requirements.special": "Un carácter especial",
|
|
10
|
-
"auth.password.requirements.separator": ", ",
|
|
11
5
|
"auth.sendResetLink": "Enviar enlace de restablecimiento",
|
|
12
6
|
"auth.resetPassword": "Restablecer contraseña",
|
|
13
|
-
"auth.reset.title": "Establecer una nueva contraseña",
|
|
14
|
-
"auth.reset.subtitle": "Elige una contraseña segura para tu cuenta.",
|
|
15
|
-
"auth.reset.form.password": "Nueva contraseña",
|
|
16
|
-
"auth.reset.form.loading": "...",
|
|
17
|
-
"auth.reset.form.submit": "Actualizar contraseña",
|
|
18
|
-
"auth.reset.errors.failed": "No se pudo restablecer la contraseña",
|
|
19
7
|
"auth.usersRoles": "Usuarios y roles",
|
|
20
8
|
"auth.manageAuthSettings": "Administra la configuración de autenticación.",
|
|
21
9
|
"auth.login.errors.permissionDenied": "No tienes permiso para acceder a esta área. Ponte en contacto con tu administrador.",
|
|
22
10
|
"auth.login.errors.invalidCredentials": "Correo electrónico o contraseña no válidos",
|
|
23
|
-
"auth.login.errors.tenantRequired": "Usa el enlace de inicio de sesión proporcionado con la activación de tu inquilino para continuar.",
|
|
24
|
-
"auth.login.errors.tenantInvalid": "No se encontró el inquilino. Borra la selección e inténtalo de nuevo.",
|
|
25
11
|
"auth.login.errors.generic": "Se produjo un error. Inténtalo de nuevo.",
|
|
26
12
|
"auth.login.logoAlt": "Logotipo de Open Mercato",
|
|
27
13
|
"auth.login.brandName": "Open Mercato",
|
|
@@ -29,9 +15,6 @@
|
|
|
29
15
|
"auth.login.requireRoleMessage": "El acceso requiere el rol: {roles}",
|
|
30
16
|
"auth.login.requireRolesMessage": "El acceso requiere uno de los siguientes roles: {roles}",
|
|
31
17
|
"auth.login.featureDenied": "No tienes acceso a esta funcionalidad ({feature}). Ponte en contacto con tu administrador.",
|
|
32
|
-
"auth.login.tenantBanner": "Estás iniciando sesión en el inquilino {tenant}.",
|
|
33
|
-
"auth.login.tenantLoading": "Cargando detalles del inquilino...",
|
|
34
|
-
"auth.login.tenantClear": "Borrar",
|
|
35
18
|
"auth.login.rememberMe": "Recordarme",
|
|
36
19
|
"auth.login.loading": "Cargando...",
|
|
37
20
|
"auth.login.forgotPassword": "¿Olvidaste tu contraseña?",
|
|
@@ -97,21 +80,6 @@
|
|
|
97
80
|
"auth.users.form.errors.load": "No se pudieron cargar los datos del usuario",
|
|
98
81
|
"auth.users.form.errors.aclUpdate": "No se pudo actualizar el control de acceso del usuario",
|
|
99
82
|
"auth.users.form.errors.delete": "No se pudo eliminar el usuario",
|
|
100
|
-
"auth.profile.title": "Perfil",
|
|
101
|
-
"auth.profile.subtitle": "Cambiar contraseña",
|
|
102
|
-
"auth.profile.form.email": "Correo electrónico",
|
|
103
|
-
"auth.profile.form.password": "Nueva contraseña",
|
|
104
|
-
"auth.profile.form.confirmPassword": "Confirmar nueva contraseña",
|
|
105
|
-
"auth.profile.form.save": "Guardar cambios",
|
|
106
|
-
"auth.profile.form.loading": "Cargando perfil...",
|
|
107
|
-
"auth.profile.form.errors.load": "No se pudo cargar el perfil.",
|
|
108
|
-
"auth.profile.form.errors.save": "No se pudo actualizar el perfil.",
|
|
109
|
-
"auth.profile.form.errors.invalid": "Actualización de perfil inválida.",
|
|
110
|
-
"auth.profile.form.errors.passwordMismatch": "Las contraseñas no coinciden.",
|
|
111
|
-
"auth.profile.form.errors.passwordRequirements": "La contraseña debe cumplir los requisitos.",
|
|
112
|
-
"auth.profile.form.errors.noChanges": "No hay cambios para guardar.",
|
|
113
|
-
"auth.profile.form.errors.emailRequired": "El correo electrónico es obligatorio.",
|
|
114
|
-
"auth.profile.form.success": "Perfil actualizado.",
|
|
115
83
|
"auth.users.list.error.load": "No se pudieron cargar los usuarios",
|
|
116
84
|
"auth.users.list.error.delete": "No se pudo eliminar el usuario",
|
|
117
85
|
"auth.users.flash.created": "Usuario creado",
|
|
@@ -127,20 +95,5 @@
|
|
|
127
95
|
"auth.email.resetPassword.title": "Restablecer tu contraseña",
|
|
128
96
|
"auth.email.resetPassword.body": "Haz clic en el siguiente enlace para establecer una nueva contraseña. Este enlace caducará en 60 minutos.",
|
|
129
97
|
"auth.email.resetPassword.cta": "Establecer nueva contraseña",
|
|
130
|
-
"auth.email.resetPassword.hint": "Si no solicitaste esto, puedes ignorar este correo de forma segura."
|
|
131
|
-
"auth.notifications.passwordReset.requested.title": "Solicitud de restablecimiento de contraseña",
|
|
132
|
-
"auth.notifications.passwordReset.requested.body": "Se ha enviado un enlace de restablecimiento de contraseña a tu correo electrónico",
|
|
133
|
-
"auth.notifications.passwordReset.completed.title": "Contraseña cambiada correctamente",
|
|
134
|
-
"auth.notifications.passwordReset.completed.body": "Tu contraseña se actualizó correctamente",
|
|
135
|
-
"auth.notifications.account.locked.title": "Cuenta bloqueada",
|
|
136
|
-
"auth.notifications.account.locked.body": "Tu cuenta ha sido bloqueada por razones de seguridad. Ponte en contacto con soporte.",
|
|
137
|
-
"auth.notifications.login.newDevice.title": "Nuevo inicio de sesión detectado",
|
|
138
|
-
"auth.notifications.login.newDevice.body": "Se detectó un inicio de sesión desde un dispositivo no reconocido en tu cuenta",
|
|
139
|
-
"auth.notifications.role.assigned.title": "Nuevo rol asignado",
|
|
140
|
-
"auth.notifications.role.assigned.body": "Se te ha asignado un nuevo rol con permisos adicionales",
|
|
141
|
-
"auth.notifications.role.revoked.title": "Rol eliminado",
|
|
142
|
-
"auth.notifications.role.revoked.body": "Se ha eliminado un rol de tu cuenta",
|
|
143
|
-
"auth.actions.contactSupport": "Contactar soporte",
|
|
144
|
-
"auth.actions.viewSessions": "Ver sesiones",
|
|
145
|
-
"auth.actions.viewPermissions": "Ver permisos"
|
|
98
|
+
"auth.email.resetPassword.hint": "Si no solicitaste esto, puedes ignorar este correo de forma segura."
|
|
146
99
|
}
|
|
@@ -2,26 +2,12 @@
|
|
|
2
2
|
"auth.signIn": "Zaloguj się",
|
|
3
3
|
"auth.email": "Email",
|
|
4
4
|
"auth.password": "Hasło",
|
|
5
|
-
"auth.password.requirements.help": "Wymagania hasła: {requirements}",
|
|
6
|
-
"auth.password.requirements.minLength": "Co najmniej {min} znaków",
|
|
7
|
-
"auth.password.requirements.digit": "Jedna cyfra",
|
|
8
|
-
"auth.password.requirements.uppercase": "Jedna wielka litera",
|
|
9
|
-
"auth.password.requirements.special": "Jeden znak specjalny",
|
|
10
|
-
"auth.password.requirements.separator": ", ",
|
|
11
5
|
"auth.sendResetLink": "Wyślij link resetujący",
|
|
12
6
|
"auth.resetPassword": "Resetuj hasło",
|
|
13
|
-
"auth.reset.title": "Ustaw nowe hasło",
|
|
14
|
-
"auth.reset.subtitle": "Wybierz silne hasło dla swojego konta.",
|
|
15
|
-
"auth.reset.form.password": "Nowe hasło",
|
|
16
|
-
"auth.reset.form.loading": "...",
|
|
17
|
-
"auth.reset.form.submit": "Zaktualizuj hasło",
|
|
18
|
-
"auth.reset.errors.failed": "Nie udało się zresetować hasła",
|
|
19
7
|
"auth.usersRoles": "Użytkownicy i role",
|
|
20
8
|
"auth.manageAuthSettings": "Zarządzaj ustawieniami uwierzytelniania.",
|
|
21
9
|
"auth.login.errors.permissionDenied": "Nie masz uprawnień do tego obszaru. Skontaktuj się z administratorem.",
|
|
22
10
|
"auth.login.errors.invalidCredentials": "Nieprawidłowy email lub hasło",
|
|
23
|
-
"auth.login.errors.tenantRequired": "Użyj linku logowania z aktywacji najemcy, aby kontynuować.",
|
|
24
|
-
"auth.login.errors.tenantInvalid": "Nie znaleziono najemcy. Wyczyść wybór i spróbuj ponownie.",
|
|
25
11
|
"auth.login.errors.generic": "Wystąpił błąd. Spróbuj ponownie.",
|
|
26
12
|
"auth.login.logoAlt": "Logo Open Mercato",
|
|
27
13
|
"auth.login.brandName": "Open Mercato",
|
|
@@ -29,9 +15,6 @@
|
|
|
29
15
|
"auth.login.requireRoleMessage": "Dostęp wymaga roli: {roles}",
|
|
30
16
|
"auth.login.requireRolesMessage": "Dostęp wymaga jednej z następujących ról: {roles}",
|
|
31
17
|
"auth.login.featureDenied": "Nie masz dostępu do tej funkcji ({feature}). Skontaktuj się z administratorem.",
|
|
32
|
-
"auth.login.tenantBanner": "Logujesz się do najemcy {tenant}.",
|
|
33
|
-
"auth.login.tenantLoading": "Ładowanie szczegółów najemcy...",
|
|
34
|
-
"auth.login.tenantClear": "Wyczyść",
|
|
35
18
|
"auth.login.rememberMe": "Zapamiętaj mnie",
|
|
36
19
|
"auth.login.loading": "Ładowanie...",
|
|
37
20
|
"auth.login.forgotPassword": "Nie pamiętasz hasła?",
|
|
@@ -97,21 +80,6 @@
|
|
|
97
80
|
"auth.users.form.errors.load": "Nie udało się wczytać danych użytkownika",
|
|
98
81
|
"auth.users.form.errors.aclUpdate": "Nie udało się zaktualizować uprawnień użytkownika",
|
|
99
82
|
"auth.users.form.errors.delete": "Nie udało się usunąć użytkownika",
|
|
100
|
-
"auth.profile.title": "Profil",
|
|
101
|
-
"auth.profile.subtitle": "Zmiana hasła",
|
|
102
|
-
"auth.profile.form.email": "Email",
|
|
103
|
-
"auth.profile.form.password": "Nowe hasło",
|
|
104
|
-
"auth.profile.form.confirmPassword": "Potwierdź nowe hasło",
|
|
105
|
-
"auth.profile.form.save": "Zapisz zmiany",
|
|
106
|
-
"auth.profile.form.loading": "Ładowanie profilu...",
|
|
107
|
-
"auth.profile.form.errors.load": "Nie udało się wczytać profilu.",
|
|
108
|
-
"auth.profile.form.errors.save": "Nie udało się zaktualizować profilu.",
|
|
109
|
-
"auth.profile.form.errors.invalid": "Nieprawidłowa aktualizacja profilu.",
|
|
110
|
-
"auth.profile.form.errors.passwordMismatch": "Hasła nie są zgodne.",
|
|
111
|
-
"auth.profile.form.errors.passwordRequirements": "Hasło musi spełniać wymagania.",
|
|
112
|
-
"auth.profile.form.errors.noChanges": "Brak zmian do zapisania.",
|
|
113
|
-
"auth.profile.form.errors.emailRequired": "Email jest wymagany.",
|
|
114
|
-
"auth.profile.form.success": "Profil zaktualizowany.",
|
|
115
83
|
"auth.users.list.error.load": "Nie udało się wczytać użytkowników",
|
|
116
84
|
"auth.users.list.error.delete": "Nie udało się usunąć użytkownika",
|
|
117
85
|
"auth.users.flash.created": "Użytkownik utworzony",
|
|
@@ -127,20 +95,5 @@
|
|
|
127
95
|
"auth.email.resetPassword.title": "Zresetuj swoje hasło",
|
|
128
96
|
"auth.email.resetPassword.body": "Kliknij poniższy link, aby ustawić nowe hasło. Link wygaśnie za 60 minut.",
|
|
129
97
|
"auth.email.resetPassword.cta": "Ustaw nowe hasło",
|
|
130
|
-
"auth.email.resetPassword.hint": "Jeśli nie prosiłeś o tę wiadomość, możesz ją bezpiecznie zignorować."
|
|
131
|
-
"auth.notifications.passwordReset.requested.title": "Żądanie resetu hasła",
|
|
132
|
-
"auth.notifications.passwordReset.requested.body": "Link do resetu hasła został wysłany na Twój adres e-mail",
|
|
133
|
-
"auth.notifications.passwordReset.completed.title": "Hasło zmienione pomyślnie",
|
|
134
|
-
"auth.notifications.passwordReset.completed.body": "Twoje hasło zostało pomyślnie zaktualizowane",
|
|
135
|
-
"auth.notifications.account.locked.title": "Konto zablokowane",
|
|
136
|
-
"auth.notifications.account.locked.body": "Twoje konto zostało zablokowane z powodów bezpieczeństwa. Skontaktuj się z pomocą techniczną.",
|
|
137
|
-
"auth.notifications.login.newDevice.title": "Wykryto logowanie z nowego urządzenia",
|
|
138
|
-
"auth.notifications.login.newDevice.body": "Wykryto logowanie z nieznanego urządzenia na Twoim koncie",
|
|
139
|
-
"auth.notifications.role.assigned.title": "Przypisano nową rolę",
|
|
140
|
-
"auth.notifications.role.assigned.body": "Przypisano Ci nową rolę z dodatkowymi uprawnieniami",
|
|
141
|
-
"auth.notifications.role.revoked.title": "Rola usunięta",
|
|
142
|
-
"auth.notifications.role.revoked.body": "Z Twojego konta usunięto rolę",
|
|
143
|
-
"auth.actions.contactSupport": "Skontaktuj się z pomocą",
|
|
144
|
-
"auth.actions.viewSessions": "Zobacz sesje",
|
|
145
|
-
"auth.actions.viewPermissions": "Zobacz uprawnienia"
|
|
98
|
+
"auth.email.resetPassword.hint": "Jeśli nie prosiłeś o tę wiadomość, możesz ją bezpiecznie zignorować."
|
|
146
99
|
}
|
|
@@ -16,7 +16,6 @@ import { DEFAULT_ENCRYPTION_MAPS } from '@open-mercato/core/modules/entities/lib
|
|
|
16
16
|
import { createKmsService } from '@open-mercato/shared/lib/encryption/kms'
|
|
17
17
|
import { TenantDataEncryptionService } from '@open-mercato/shared/lib/encryption/tenantDataEncryptionService'
|
|
18
18
|
import { findWithDecryption } from '@open-mercato/shared/lib/encryption/find'
|
|
19
|
-
import { parseBooleanToken } from '@open-mercato/shared/lib/boolean'
|
|
20
19
|
|
|
21
20
|
const DEFAULT_ROLE_NAMES = ['employee', 'admin', 'superadmin'] as const
|
|
22
21
|
const DEMO_SUPERADMIN_EMAIL = 'superadmin@acme.com'
|
|
@@ -88,11 +87,6 @@ type PrimaryUserInput = {
|
|
|
88
87
|
confirm?: boolean
|
|
89
88
|
}
|
|
90
89
|
|
|
91
|
-
const DERIVED_EMAIL_ENV = {
|
|
92
|
-
admin: 'OM_INIT_ADMIN_EMAIL',
|
|
93
|
-
employee: 'OM_INIT_EMPLOYEE_EMAIL',
|
|
94
|
-
} as const
|
|
95
|
-
|
|
96
90
|
export type SetupInitialTenantOptions = {
|
|
97
91
|
orgName: string
|
|
98
92
|
primaryUser: PrimaryUserInput
|
|
@@ -176,28 +170,16 @@ export async function setupInitialTenant(
|
|
|
176
170
|
})
|
|
177
171
|
|
|
178
172
|
if (!existingUser) {
|
|
179
|
-
const baseUsers: Array<{
|
|
180
|
-
email: string
|
|
181
|
-
roles: string[]
|
|
182
|
-
name?: string | null
|
|
183
|
-
passwordHash?: string | null
|
|
184
|
-
}> = [
|
|
173
|
+
const baseUsers: Array<{ email: string; roles: string[]; name?: string | null }> = [
|
|
185
174
|
{ email: primaryUser.email, roles: primaryRoles, name: resolvePrimaryName(primaryUser) },
|
|
186
175
|
]
|
|
187
176
|
if (includeDerivedUsers) {
|
|
188
|
-
const [, domain] = String(primaryUser.email).split('@')
|
|
189
|
-
const
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
const employeePassword = readEnvValue('OM_INIT_EMPLOYEE_PASSWORD')
|
|
195
|
-
const adminPasswordHash = adminPassword ? await resolvePasswordHash({ email: adminEmail, password: adminPassword }) : null
|
|
196
|
-
const employeePasswordHash = employeePassword
|
|
197
|
-
? await resolvePasswordHash({ email: employeeEmail, password: employeePassword })
|
|
198
|
-
: null
|
|
199
|
-
addUniqueBaseUser(baseUsers, { email: adminEmail, roles: ['admin'], passwordHash: adminPasswordHash })
|
|
200
|
-
addUniqueBaseUser(baseUsers, { email: employeeEmail, roles: ['employee'], passwordHash: employeePasswordHash })
|
|
177
|
+
const [local, domain] = String(primaryUser.email).split('@')
|
|
178
|
+
const isSuperadminLocal = (local || '').toLowerCase() === 'superadmin' && !!domain
|
|
179
|
+
if (isSuperadminLocal) {
|
|
180
|
+
baseUsers.push({ email: `admin@${domain}`, roles: ['admin'] })
|
|
181
|
+
baseUsers.push({ email: `employee@${domain}`, roles: ['employee'] })
|
|
182
|
+
}
|
|
201
183
|
}
|
|
202
184
|
const passwordHash = await resolvePasswordHash(primaryUser)
|
|
203
185
|
|
|
@@ -289,14 +271,13 @@ export async function setupInitialTenant(
|
|
|
289
271
|
}
|
|
290
272
|
|
|
291
273
|
for (const base of baseUsers) {
|
|
292
|
-
const resolvedPasswordHash = base.passwordHash ?? passwordHash
|
|
293
274
|
let user = await tem.findOne(User, { email: base.email })
|
|
294
275
|
const confirm = primaryUser.confirm ?? true
|
|
295
276
|
const encryptedPayload = encryptionService
|
|
296
277
|
? await encryptionService.encryptEntityPayload('auth:user', { email: base.email }, tenantId, organizationId)
|
|
297
278
|
: { email: base.email, emailHash: computeEmailHash(base.email) }
|
|
298
279
|
if (user) {
|
|
299
|
-
user.passwordHash =
|
|
280
|
+
user.passwordHash = passwordHash
|
|
300
281
|
user.organizationId = organizationId
|
|
301
282
|
user.tenantId = tenantId
|
|
302
283
|
if (isTenantDataEncryptionEnabled()) {
|
|
@@ -311,7 +292,7 @@ export async function setupInitialTenant(
|
|
|
311
292
|
user = tem.create(User, {
|
|
312
293
|
email: (encryptedPayload as any).email ?? base.email,
|
|
313
294
|
emailHash: isTenantDataEncryptionEnabled() ? (encryptedPayload as any).emailHash ?? computeEmailHash(base.email) : undefined,
|
|
314
|
-
passwordHash
|
|
295
|
+
passwordHash,
|
|
315
296
|
organizationId,
|
|
316
297
|
tenantId,
|
|
317
298
|
name: base.name ?? undefined,
|
|
@@ -359,34 +340,6 @@ function resolvePrimaryName(input: PrimaryUserInput): string | null {
|
|
|
359
340
|
return null
|
|
360
341
|
}
|
|
361
342
|
|
|
362
|
-
function readEnvValue(key: string): string | undefined {
|
|
363
|
-
const value = process.env[key]
|
|
364
|
-
if (typeof value !== 'string') return undefined
|
|
365
|
-
const trimmed = value.trim()
|
|
366
|
-
return trimmed.length > 0 ? trimmed : undefined
|
|
367
|
-
}
|
|
368
|
-
|
|
369
|
-
function addUniqueBaseUser(
|
|
370
|
-
baseUsers: Array<{ email: string; roles: string[]; name?: string | null; passwordHash?: string | null }>,
|
|
371
|
-
entry: { email: string; roles: string[]; name?: string | null; passwordHash?: string | null },
|
|
372
|
-
) {
|
|
373
|
-
if (!entry.email) return
|
|
374
|
-
const normalized = entry.email.toLowerCase()
|
|
375
|
-
if (baseUsers.some((user) => user.email.toLowerCase() === normalized)) return
|
|
376
|
-
baseUsers.push(entry)
|
|
377
|
-
}
|
|
378
|
-
|
|
379
|
-
function isDemoModeEnabled(): boolean {
|
|
380
|
-
const parsed = parseBooleanToken(process.env.DEMO_MODE ?? '')
|
|
381
|
-
return parsed === false ? false : true
|
|
382
|
-
}
|
|
383
|
-
|
|
384
|
-
function shouldKeepDemoSuperadminDuringInit(): boolean {
|
|
385
|
-
if (process.env.OM_INIT_FLOW !== 'true') return false
|
|
386
|
-
if (!readEnvValue('OM_INIT_SUPERADMIN_EMAIL')) return false
|
|
387
|
-
return isDemoModeEnabled()
|
|
388
|
-
}
|
|
389
|
-
|
|
390
343
|
async function resolvePasswordHash(input: PrimaryUserInput): Promise<string | null> {
|
|
391
344
|
if (typeof input.hashedPassword === 'string') return input.hashedPassword
|
|
392
345
|
if (input.password) return hash(input.password, 10)
|
|
@@ -443,7 +396,6 @@ async function ensureDefaultRoleAcls(
|
|
|
443
396
|
'dashboards.admin.assign-widgets',
|
|
444
397
|
'analytics.view',
|
|
445
398
|
'api_keys.*',
|
|
446
|
-
'notifications.manage',
|
|
447
399
|
'perspectives.use',
|
|
448
400
|
'perspectives.role_defaults',
|
|
449
401
|
'business_rules.*',
|
|
@@ -535,7 +487,6 @@ async function ensureRoleAclFor(
|
|
|
535
487
|
|
|
536
488
|
async function deactivateDemoSuperAdminIfSelfOnboardingEnabled(em: EntityManager) {
|
|
537
489
|
if (process.env.SELF_SERVICE_ONBOARDING_ENABLED !== 'true') return
|
|
538
|
-
if (shouldKeepDemoSuperadminDuringInit()) return
|
|
539
490
|
try {
|
|
540
491
|
const user = await em.findOne(User, { email: DEMO_SUPERADMIN_EMAIL })
|
|
541
492
|
if (!user) return
|
|
@@ -18,29 +18,6 @@ export class AuthService {
|
|
|
18
18
|
} as any)
|
|
19
19
|
}
|
|
20
20
|
|
|
21
|
-
async findUsersByEmail(email: string) {
|
|
22
|
-
const emailHash = computeEmailHash(email)
|
|
23
|
-
return this.em.find(User, {
|
|
24
|
-
deletedAt: null,
|
|
25
|
-
$or: [
|
|
26
|
-
{ email },
|
|
27
|
-
{ emailHash },
|
|
28
|
-
],
|
|
29
|
-
} as any)
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
async findUserByEmailAndTenant(email: string, tenantId: string) {
|
|
33
|
-
const emailHash = computeEmailHash(email)
|
|
34
|
-
return this.em.findOne(User, {
|
|
35
|
-
tenantId,
|
|
36
|
-
deletedAt: null,
|
|
37
|
-
$or: [
|
|
38
|
-
{ email },
|
|
39
|
-
{ emailHash },
|
|
40
|
-
],
|
|
41
|
-
} as any)
|
|
42
|
-
}
|
|
43
|
-
|
|
44
21
|
async verifyPassword(user: User, password: string) {
|
|
45
22
|
if (!user.passwordHash) return false
|
|
46
23
|
return compare(password, user.passwordHash)
|
|
@@ -98,15 +75,15 @@ export class AuthService {
|
|
|
98
75
|
return { user, token }
|
|
99
76
|
}
|
|
100
77
|
|
|
101
|
-
async confirmPasswordReset(token: string, newPassword: string)
|
|
78
|
+
async confirmPasswordReset(token: string, newPassword: string) {
|
|
102
79
|
const now = new Date()
|
|
103
80
|
const row = await this.em.findOne(PasswordReset, { token })
|
|
104
|
-
if (!row || (row.usedAt && row.usedAt <= now) || row.expiresAt <= now) return
|
|
81
|
+
if (!row || (row.usedAt && row.usedAt <= now) || row.expiresAt <= now) return false
|
|
105
82
|
const user = await this.em.findOne(User, { id: row.user.id })
|
|
106
|
-
if (!user) return
|
|
83
|
+
if (!user) return false
|
|
107
84
|
user.passwordHash = await hash(newPassword, 10)
|
|
108
85
|
row.usedAt = new Date()
|
|
109
86
|
await this.em.flush()
|
|
110
|
-
return
|
|
87
|
+
return true
|
|
111
88
|
}
|
|
112
89
|
}
|
|
@@ -4,7 +4,6 @@ import type { OpenApiRouteDoc } from '@open-mercato/shared/lib/openapi'
|
|
|
4
4
|
import { getAuthFromRequest } from '@open-mercato/shared/lib/auth/server'
|
|
5
5
|
import { createRequestContainer } from '@open-mercato/shared/lib/di/container'
|
|
6
6
|
import type { EntityManager } from '@mikro-orm/postgresql'
|
|
7
|
-
import type { EventBus } from '@open-mercato/events'
|
|
8
7
|
import { ruleEngineContextSchema } from '../../data/validators'
|
|
9
8
|
import * as ruleEngine from '../../lib/rule-engine'
|
|
10
9
|
|
|
@@ -47,12 +46,6 @@ export async function POST(req: Request) {
|
|
|
47
46
|
|
|
48
47
|
const container = await createRequestContainer()
|
|
49
48
|
const em = container.resolve('em') as EntityManager
|
|
50
|
-
let eventBus: EventBus | null = null
|
|
51
|
-
try {
|
|
52
|
-
eventBus = container.resolve('eventBus') as EventBus
|
|
53
|
-
} catch {
|
|
54
|
-
eventBus = null
|
|
55
|
-
}
|
|
56
49
|
|
|
57
50
|
let body: any
|
|
58
51
|
try {
|
|
@@ -92,7 +85,7 @@ export async function POST(req: Request) {
|
|
|
92
85
|
}
|
|
93
86
|
|
|
94
87
|
try {
|
|
95
|
-
const result = await ruleEngine.executeRules(em, context
|
|
88
|
+
const result = await ruleEngine.executeRules(em, context)
|
|
96
89
|
|
|
97
90
|
const response = {
|
|
98
91
|
allowed: result.allowed,
|
|
@@ -264,17 +264,14 @@ export default function RulesListPage() {
|
|
|
264
264
|
<RowActions
|
|
265
265
|
items={[
|
|
266
266
|
{
|
|
267
|
-
id: 'edit',
|
|
268
267
|
label: t('common.edit'),
|
|
269
268
|
href: `/backend/rules/${row.original.id}`,
|
|
270
269
|
},
|
|
271
270
|
{
|
|
272
|
-
id: row.original.enabled ? 'disable' : 'enable',
|
|
273
271
|
label: row.original.enabled ? t('common.disable') : t('common.enable'),
|
|
274
272
|
onSelect: () => handleToggleEnabled(row.original.id, row.original.enabled),
|
|
275
273
|
},
|
|
276
274
|
{
|
|
277
|
-
id: 'duplicate',
|
|
278
275
|
label: t('common.duplicate'),
|
|
279
276
|
onSelect: () => {
|
|
280
277
|
// TODO: Implement duplicate functionality in Step 5.2
|
|
@@ -282,7 +279,6 @@ export default function RulesListPage() {
|
|
|
282
279
|
},
|
|
283
280
|
},
|
|
284
281
|
{
|
|
285
|
-
id: 'delete',
|
|
286
282
|
label: t('common.delete'),
|
|
287
283
|
onSelect: () => handleDelete(row.original.id, row.original.ruleName),
|
|
288
284
|
destructive: true,
|
|
@@ -196,17 +196,14 @@ export default function RuleSetsListPage() {
|
|
|
196
196
|
<RowActions
|
|
197
197
|
items={[
|
|
198
198
|
{
|
|
199
|
-
id: 'edit',
|
|
200
199
|
label: t('common.edit'),
|
|
201
200
|
href: `/backend/sets/${row.original.id}`,
|
|
202
201
|
},
|
|
203
202
|
{
|
|
204
|
-
id: row.original.enabled ? 'disable' : 'enable',
|
|
205
203
|
label: row.original.enabled ? t('common.disable') : t('common.enable'),
|
|
206
204
|
onSelect: () => handleToggleEnabled(row.original.id, row.original.enabled),
|
|
207
205
|
},
|
|
208
206
|
{
|
|
209
|
-
id: 'delete',
|
|
210
207
|
label: t('common.delete'),
|
|
211
208
|
onSelect: () => handleDelete(row.original.id, row.original.setName),
|
|
212
209
|
destructive: true,
|
|
@@ -44,7 +44,6 @@ const seedGuardRules: ModuleCli = {
|
|
|
44
44
|
const rulesPath = path.join(__dirname, '../workflows/examples', 'guard-rules-example.json')
|
|
45
45
|
const rulesData = JSON.parse(fs.readFileSync(rulesPath, 'utf8'))
|
|
46
46
|
|
|
47
|
-
console.log('🧠 Seeding guard rules...')
|
|
48
47
|
let seededCount = 0
|
|
49
48
|
let skippedCount = 0
|
|
50
49
|
|
|
@@ -74,7 +73,7 @@ const seedGuardRules: ModuleCli = {
|
|
|
74
73
|
seededCount++
|
|
75
74
|
}
|
|
76
75
|
|
|
77
|
-
console.log(`\n
|
|
76
|
+
console.log(`\n✓ Guard rules seeding complete:`)
|
|
78
77
|
console.log(` - Seeded: ${seededCount}`)
|
|
79
78
|
console.log(` - Skipped (existing): ${skippedCount}`)
|
|
80
79
|
console.log(` - Total: ${rulesData.length}`)
|
|
@@ -367,7 +367,5 @@
|
|
|
367
367
|
"business_rules.components.conditionRow.field.comparisonPlaceholder": "e.g., user.role",
|
|
368
368
|
"business_rules.components.conditionRow.value.help": "Use JSON for arrays: [\"a\",\"b\"]",
|
|
369
369
|
"business_rules.components.conditionRow.field.comparisonHelp": "Field path to compare with",
|
|
370
|
-
"business_rules.components.conditionRow.deleteCondition": "Delete condition"
|
|
371
|
-
"businessRules.notifications.rule.executionFailed.title": "Business Rule Failed",
|
|
372
|
-
"businessRules.notifications.rule.executionFailed.body": "Rule \"{ruleName}\" failed to execute{entityType, select, other { on {entityType}}}: {errorMessage}"
|
|
370
|
+
"business_rules.components.conditionRow.deleteCondition": "Delete condition"
|
|
373
371
|
}
|
|
@@ -654,57 +654,6 @@ describe('Rule Engine (Unit Tests)', () => {
|
|
|
654
654
|
expect(result.errors).toBeDefined()
|
|
655
655
|
expect(result.errors![0]).toContain('Rule count limit exceeded')
|
|
656
656
|
})
|
|
657
|
-
|
|
658
|
-
test('should emit execution_failed event when rule evaluation fails', async () => {
|
|
659
|
-
const mockRule: Partial<BusinessRule> = {
|
|
660
|
-
id: 'rule-1',
|
|
661
|
-
ruleId: 'TEST-001',
|
|
662
|
-
ruleName: 'Test Rule',
|
|
663
|
-
ruleType: 'ACTION',
|
|
664
|
-
entityType: 'WorkOrder',
|
|
665
|
-
conditionExpression: { field: 'status', operator: '=', value: 'RELEASED' },
|
|
666
|
-
enabled: true,
|
|
667
|
-
tenantId: testTenantId,
|
|
668
|
-
organizationId: testOrgId,
|
|
669
|
-
}
|
|
670
|
-
|
|
671
|
-
mockEm.find.mockResolvedValue([mockRule as BusinessRule])
|
|
672
|
-
mockEm.create.mockReturnValue({ id: 'log-1' } as any)
|
|
673
|
-
mockEm.persistAndFlush.mockResolvedValue(undefined)
|
|
674
|
-
|
|
675
|
-
jest.mocked(ruleEvaluator.evaluateSingleRule).mockResolvedValue({
|
|
676
|
-
rule: mockRule as BusinessRule,
|
|
677
|
-
conditionsPassed: false,
|
|
678
|
-
evaluationCompleted: false,
|
|
679
|
-
evaluationTime: 1,
|
|
680
|
-
error: 'Evaluation error',
|
|
681
|
-
})
|
|
682
|
-
|
|
683
|
-
const eventBus = { emitEvent: jest.fn().mockResolvedValue(undefined) }
|
|
684
|
-
|
|
685
|
-
const context: RuleEngineContext = {
|
|
686
|
-
entityType: 'WorkOrder',
|
|
687
|
-
entityId: testEntityId,
|
|
688
|
-
data: { status: 'RELEASED' },
|
|
689
|
-
tenantId: testTenantId,
|
|
690
|
-
organizationId: testOrgId,
|
|
691
|
-
dryRun: false,
|
|
692
|
-
}
|
|
693
|
-
|
|
694
|
-
await ruleEngine.executeRules(mockEm, context, { eventBus })
|
|
695
|
-
|
|
696
|
-
expect(eventBus.emitEvent).toHaveBeenCalledWith(
|
|
697
|
-
'business_rules.rule.execution_failed',
|
|
698
|
-
expect.objectContaining({
|
|
699
|
-
ruleId: 'TEST-001',
|
|
700
|
-
ruleName: 'Test Rule',
|
|
701
|
-
entityType: 'WorkOrder',
|
|
702
|
-
errorMessage: 'Evaluation error',
|
|
703
|
-
tenantId: testTenantId,
|
|
704
|
-
organizationId: testOrgId,
|
|
705
|
-
})
|
|
706
|
-
)
|
|
707
|
-
})
|
|
708
657
|
})
|
|
709
658
|
|
|
710
659
|
describe('logRuleExecution', () => {
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import type { EntityManager } from '@mikro-orm/core'
|
|
2
|
-
import type { EventBus } from '@open-mercato/events'
|
|
3
2
|
import { BusinessRule, RuleExecutionLog, type RuleType } from '../data/entities'
|
|
4
3
|
import * as ruleEvaluator from './rule-evaluator'
|
|
5
4
|
import * as actionExecutor from './action-executor'
|
|
@@ -86,19 +85,6 @@ export interface RuleDiscoveryOptions {
|
|
|
86
85
|
ruleType?: RuleType
|
|
87
86
|
}
|
|
88
87
|
|
|
89
|
-
export type RuleEngineExecutionOptions = {
|
|
90
|
-
eventBus?: Pick<EventBus, 'emitEvent'> | null
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
type RuleExecutionFailedPayload = {
|
|
94
|
-
ruleId: string
|
|
95
|
-
ruleName: string
|
|
96
|
-
entityType?: string | null
|
|
97
|
-
errorMessage?: string | null
|
|
98
|
-
tenantId: string
|
|
99
|
-
organizationId?: string | null
|
|
100
|
-
}
|
|
101
|
-
|
|
102
88
|
/**
|
|
103
89
|
* Execute a function with a timeout
|
|
104
90
|
*/
|
|
@@ -127,8 +113,7 @@ async function withTimeout<T>(
|
|
|
127
113
|
*/
|
|
128
114
|
export async function executeRules(
|
|
129
115
|
em: EntityManager,
|
|
130
|
-
context: RuleEngineContext
|
|
131
|
-
options: RuleEngineExecutionOptions = {}
|
|
116
|
+
context: RuleEngineContext
|
|
132
117
|
): Promise<RuleEngineResult> {
|
|
133
118
|
// Validate input
|
|
134
119
|
const validation = ruleEngineContextSchema.safeParse(context)
|
|
@@ -174,7 +159,7 @@ export async function executeRules(
|
|
|
174
159
|
const executionPromise = (async () => {
|
|
175
160
|
for (const rule of rules) {
|
|
176
161
|
try {
|
|
177
|
-
const ruleResult = await executeSingleRule(em, rule, context
|
|
162
|
+
const ruleResult = await executeSingleRule(em, rule, context)
|
|
178
163
|
executedRules.push(ruleResult)
|
|
179
164
|
|
|
180
165
|
if (ruleResult.logId) {
|
|
@@ -192,17 +177,6 @@ export async function executeRules(
|
|
|
192
177
|
`Unexpected error in rule execution [ruleId=${rule.ruleId}, type=${rule.ruleType}]: ${errorMessage}`
|
|
193
178
|
)
|
|
194
179
|
|
|
195
|
-
if (!context.dryRun) {
|
|
196
|
-
await emitRuleExecutionFailed(options.eventBus, {
|
|
197
|
-
ruleId: rule.ruleId,
|
|
198
|
-
ruleName: rule.ruleName,
|
|
199
|
-
entityType: context.entityType ?? null,
|
|
200
|
-
errorMessage,
|
|
201
|
-
tenantId: context.tenantId,
|
|
202
|
-
organizationId: context.organizationId ?? null,
|
|
203
|
-
})
|
|
204
|
-
}
|
|
205
|
-
|
|
206
180
|
executedRules.push({
|
|
207
181
|
rule,
|
|
208
182
|
conditionResult: false,
|
|
@@ -259,8 +233,7 @@ export async function executeRules(
|
|
|
259
233
|
export async function executeSingleRule(
|
|
260
234
|
em: EntityManager,
|
|
261
235
|
rule: BusinessRule,
|
|
262
|
-
context: RuleEngineContext
|
|
263
|
-
options: RuleEngineExecutionOptions = {}
|
|
236
|
+
context: RuleEngineContext
|
|
264
237
|
): Promise<RuleExecutionResult> {
|
|
265
238
|
const startTime = Date.now()
|
|
266
239
|
|
|
@@ -296,15 +269,6 @@ export async function executeSingleRule(
|
|
|
296
269
|
executionTime,
|
|
297
270
|
error: result.error,
|
|
298
271
|
})
|
|
299
|
-
|
|
300
|
-
await emitRuleExecutionFailed(options.eventBus, {
|
|
301
|
-
ruleId: rule.ruleId,
|
|
302
|
-
ruleName: rule.ruleName,
|
|
303
|
-
entityType: context.entityType ?? null,
|
|
304
|
-
errorMessage: result.error ?? null,
|
|
305
|
-
tenantId: context.tenantId,
|
|
306
|
-
organizationId: context.organizationId ?? null,
|
|
307
|
-
})
|
|
308
272
|
}
|
|
309
273
|
|
|
310
274
|
return {
|
|
@@ -382,15 +346,6 @@ export async function executeSingleRule(
|
|
|
382
346
|
executionTime,
|
|
383
347
|
error: enhancedError,
|
|
384
348
|
})
|
|
385
|
-
|
|
386
|
-
await emitRuleExecutionFailed(options.eventBus, {
|
|
387
|
-
ruleId: rule.ruleId,
|
|
388
|
-
ruleName: rule.ruleName,
|
|
389
|
-
entityType: context.entityType ?? null,
|
|
390
|
-
errorMessage: enhancedError,
|
|
391
|
-
tenantId: context.tenantId,
|
|
392
|
-
organizationId: context.organizationId ?? null,
|
|
393
|
-
})
|
|
394
349
|
}
|
|
395
350
|
|
|
396
351
|
return {
|
|
@@ -589,12 +544,3 @@ export async function logRuleExecution(
|
|
|
589
544
|
|
|
590
545
|
return log.id
|
|
591
546
|
}
|
|
592
|
-
|
|
593
|
-
async function emitRuleExecutionFailed(
|
|
594
|
-
eventBus: Pick<EventBus, 'emitEvent'> | null | undefined,
|
|
595
|
-
payload: RuleExecutionFailedPayload
|
|
596
|
-
): Promise<void> {
|
|
597
|
-
if (!eventBus?.emitEvent) return
|
|
598
|
-
|
|
599
|
-
await eventBus.emitEvent('business_rules.rule.execution_failed', payload).catch(() => undefined)
|
|
600
|
-
}
|
|
@@ -420,12 +420,10 @@ export function PriceKindSettings() {
|
|
|
420
420
|
<RowActions
|
|
421
421
|
items={[
|
|
422
422
|
{
|
|
423
|
-
id: 'edit',
|
|
424
423
|
label: t('catalog.priceKinds.actions.edit', 'Edit'),
|
|
425
424
|
onSelect: () => openDialog({ mode: 'edit', entry }),
|
|
426
425
|
},
|
|
427
426
|
{
|
|
428
|
-
id: 'delete',
|
|
429
427
|
label: t('catalog.priceKinds.actions.delete', 'Delete'),
|
|
430
428
|
destructive: true,
|
|
431
429
|
onSelect: () => { void handleDelete(entry) },
|
|
@@ -221,8 +221,8 @@ export default function CategoriesDataTable() {
|
|
|
221
221
|
canManage ? (
|
|
222
222
|
<RowActions
|
|
223
223
|
items={[
|
|
224
|
-
{
|
|
225
|
-
{
|
|
224
|
+
{ label: t('catalog.categories.list.actions.edit', 'Edit'), href: `/backend/catalog/categories/${row.id}/edit` },
|
|
225
|
+
{ label: t('catalog.categories.list.actions.delete', 'Delete'), destructive: true, onSelect: () => handleDelete(row) },
|
|
226
226
|
]}
|
|
227
227
|
/>
|
|
228
228
|
) : null
|
|
@@ -650,12 +650,10 @@ export default function ProductsDataTable() {
|
|
|
650
650
|
<RowActions
|
|
651
651
|
items={[
|
|
652
652
|
{
|
|
653
|
-
id: 'edit',
|
|
654
653
|
label: t('catalog.products.table.actions.edit', 'Edit'),
|
|
655
654
|
href: `/backend/catalog/products/${row.id}`,
|
|
656
655
|
},
|
|
657
656
|
{
|
|
658
|
-
id: 'delete',
|
|
659
657
|
label: t('catalog.products.table.actions.delete', 'Delete'),
|
|
660
658
|
destructive: true,
|
|
661
659
|
onSelect: () => {
|