@open-mercato/core 0.6.8-develop.7100.1.fbf66fca35 → 0.7.0
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/.turbo/turbo-build.log +1 -1
- package/dist/helpers/integration/api.js +1 -13
- package/dist/helpers/integration/api.js.map +2 -2
- package/dist/helpers/integration/communicationChannelsFixtures.js +0 -19
- package/dist/helpers/integration/communicationChannelsFixtures.js.map +2 -2
- package/dist/modules/api_keys/api/keys/route.js +1 -1
- package/dist/modules/api_keys/api/keys/route.js.map +2 -2
- package/dist/modules/api_keys/backend/api-keys/page.js +1 -3
- package/dist/modules/api_keys/backend/api-keys/page.js.map +2 -2
- package/dist/modules/attachments/api/route.js +2 -2
- package/dist/modules/attachments/api/route.js.map +2 -2
- package/dist/modules/attachments/components/AttachmentLibrary.js +0 -2
- package/dist/modules/attachments/components/AttachmentLibrary.js.map +2 -2
- package/dist/modules/attachments/di.js +1 -11
- package/dist/modules/attachments/di.js.map +2 -2
- package/dist/modules/attachments/index.js.map +1 -1
- package/dist/modules/attachments/lib/scoped-upload-service.js +2 -15
- package/dist/modules/attachments/lib/scoped-upload-service.js.map +2 -2
- package/dist/modules/attachments/lib/upload-limits.js +2 -6
- package/dist/modules/attachments/lib/upload-limits.js.map +2 -2
- package/dist/modules/audit_logs/backend/audit-logs/page.js +0 -6
- package/dist/modules/audit_logs/backend/audit-logs/page.js.map +2 -2
- package/dist/modules/audit_logs/lib/display-helpers.js +11 -19
- package/dist/modules/audit_logs/lib/display-helpers.js.map +2 -2
- package/dist/modules/audit_logs/services/actionLogService.js +12 -57
- package/dist/modules/audit_logs/services/actionLogService.js.map +3 -3
- package/dist/modules/auth/acl.js +5 -30
- package/dist/modules/auth/acl.js.map +2 -2
- package/dist/modules/auth/api/feature-check.js +2 -8
- package/dist/modules/auth/api/feature-check.js.map +2 -2
- package/dist/modules/auth/api/login.js +20 -4
- package/dist/modules/auth/api/login.js.map +2 -2
- package/dist/modules/auth/api/roles/acl/route.js +33 -28
- package/dist/modules/auth/api/roles/acl/route.js.map +2 -2
- package/dist/modules/auth/api/routeError.js +11 -0
- package/dist/modules/auth/api/routeError.js.map +7 -0
- package/dist/modules/auth/api/session/refresh.js +1 -25
- package/dist/modules/auth/api/session/refresh.js.map +2 -2
- package/dist/modules/auth/api/users/acl/route.js +73 -102
- package/dist/modules/auth/api/users/acl/route.js.map +2 -2
- package/dist/modules/auth/api/users/route.js +5 -13
- package/dist/modules/auth/api/users/route.js.map +2 -2
- package/dist/modules/auth/backend/roles/[id]/edit/page.meta.js +1 -5
- package/dist/modules/auth/backend/roles/[id]/edit/page.meta.js.map +2 -2
- package/dist/modules/auth/backend/roles/page.js +1 -3
- package/dist/modules/auth/backend/roles/page.js.map +2 -2
- package/dist/modules/auth/backend/users/[id]/edit/page.meta.js +1 -5
- package/dist/modules/auth/backend/users/[id]/edit/page.meta.js.map +2 -2
- package/dist/modules/auth/backend/users/page.js +1 -2
- package/dist/modules/auth/backend/users/page.js.map +2 -2
- package/dist/modules/auth/components/AclEditor.js +30 -39
- package/dist/modules/auth/components/AclEditor.js.map +2 -2
- package/dist/modules/auth/data/entities.js.map +2 -2
- package/dist/modules/auth/data/validators.js +1 -5
- package/dist/modules/auth/data/validators.js.map +2 -2
- package/dist/modules/auth/di.js +9 -35
- package/dist/modules/auth/di.js.map +2 -2
- package/dist/modules/auth/frontend/reset/[token]/page.js +0 -46
- package/dist/modules/auth/frontend/reset/[token]/page.js.map +2 -2
- package/dist/modules/auth/lib/grantChecks.js.map +2 -2
- package/dist/modules/auth/services/authService.js +2 -16
- package/dist/modules/auth/services/authService.js.map +2 -2
- package/dist/modules/auth/services/rbacService.js +24 -67
- package/dist/modules/auth/services/rbacService.js.map +3 -3
- package/dist/modules/business_rules/backend/logs/page.js +1 -3
- package/dist/modules/business_rules/backend/logs/page.js.map +2 -2
- package/dist/modules/business_rules/backend/rules/[id]/page.meta.js +6 -1
- package/dist/modules/business_rules/backend/rules/[id]/page.meta.js.map +2 -2
- package/dist/modules/business_rules/backend/rules/create/page.meta.js +5 -1
- package/dist/modules/business_rules/backend/rules/create/page.meta.js.map +2 -2
- package/dist/modules/business_rules/backend/rules/page.js +1 -3
- package/dist/modules/business_rules/backend/rules/page.js.map +2 -2
- package/dist/modules/business_rules/backend/sets/[id]/page.meta.js +6 -1
- package/dist/modules/business_rules/backend/sets/[id]/page.meta.js.map +2 -2
- package/dist/modules/business_rules/backend/sets/create/page.meta.js +5 -1
- package/dist/modules/business_rules/backend/sets/create/page.meta.js.map +2 -2
- package/dist/modules/business_rules/backend/sets/page.js +1 -3
- package/dist/modules/business_rules/backend/sets/page.js.map +2 -2
- package/dist/modules/business_rules/lib/expression-evaluator.js +9 -9
- package/dist/modules/business_rules/lib/expression-evaluator.js.map +2 -2
- package/dist/modules/business_rules/lib/rule-evaluator.js +9 -10
- package/dist/modules/business_rules/lib/rule-evaluator.js.map +2 -2
- package/dist/modules/catalog/ai-agents.js +1 -1
- package/dist/modules/catalog/ai-agents.js.map +1 -1
- package/dist/modules/catalog/ai-tools/merchandising-pack.js +2 -2
- package/dist/modules/catalog/ai-tools/merchandising-pack.js.map +2 -2
- package/dist/modules/catalog/backend/catalog/products/MerchandisingAssistantSheet.js +2 -5
- package/dist/modules/catalog/backend/catalog/products/MerchandisingAssistantSheet.js.map +2 -2
- package/dist/modules/catalog/components/categories/CategoriesDataTable.js +0 -2
- package/dist/modules/catalog/components/categories/CategoriesDataTable.js.map +2 -2
- package/dist/modules/catalog/components/products/ProductsDataTable.js +1 -7
- package/dist/modules/catalog/components/products/ProductsDataTable.js.map +2 -2
- package/dist/modules/catalog/widgets/injection/merchandising-assistant-trigger/widget.client.js +0 -2
- package/dist/modules/catalog/widgets/injection/merchandising-assistant-trigger/widget.client.js.map +2 -2
- package/dist/modules/communication_channels/api/post/channels/[id]/test-send/route.js +1 -9
- package/dist/modules/communication_channels/api/post/channels/[id]/test-send/route.js.map +2 -2
- package/dist/modules/communication_channels/api/post/test-seed/route.js +10 -95
- package/dist/modules/communication_channels/api/post/test-seed/route.js.map +2 -2
- package/dist/modules/communication_channels/backend/communication_channels/channels/page.js +0 -3
- package/dist/modules/communication_channels/backend/communication_channels/channels/page.js.map +2 -2
- package/dist/modules/communication_channels/commands/ingest-inbound-message.js +1 -14
- package/dist/modules/communication_channels/commands/ingest-inbound-message.js.map +2 -2
- package/dist/modules/communication_channels/di.js +1 -7
- package/dist/modules/communication_channels/di.js.map +2 -2
- package/dist/modules/communication_channels/lib/email-capabilities.js +1 -4
- package/dist/modules/communication_channels/lib/email-capabilities.js.map +2 -2
- package/dist/modules/communication_channels/lib/test-seed.js +2 -41
- package/dist/modules/communication_channels/lib/test-seed.js.map +2 -2
- package/dist/modules/configs/lib/system-status.js +0 -9
- package/dist/modules/configs/lib/system-status.js.map +2 -2
- package/dist/modules/currencies/backend/currencies/page.js +1 -3
- package/dist/modules/currencies/backend/currencies/page.js.map +2 -2
- package/dist/modules/currencies/backend/exchange-rates/page.js +1 -3
- package/dist/modules/currencies/backend/exchange-rates/page.js.map +2 -2
- package/dist/modules/customer_accounts/api/admin/domain-mappings.js +0 -9
- package/dist/modules/customer_accounts/api/admin/domain-mappings.js.map +2 -2
- package/dist/modules/customer_accounts/backend/customer_accounts/roles/page.js +1 -3
- package/dist/modules/customer_accounts/backend/customer_accounts/roles/page.js.map +2 -2
- package/dist/modules/customer_accounts/backend/customer_accounts/settings/CustomerAccountsSettingsPageClient.js +84 -0
- package/dist/modules/customer_accounts/backend/customer_accounts/settings/CustomerAccountsSettingsPageClient.js.map +7 -0
- package/dist/modules/customer_accounts/backend/customer_accounts/settings/page.js +7 -81
- package/dist/modules/customer_accounts/backend/customer_accounts/settings/page.js.map +2 -2
- package/dist/modules/customer_accounts/backend/customer_accounts/users/PortalUsersPageClient.js +523 -0
- package/dist/modules/customer_accounts/backend/customer_accounts/users/PortalUsersPageClient.js.map +7 -0
- package/dist/modules/customer_accounts/backend/customer_accounts/users/[id]/PortalUserDetailPageClient.js +731 -0
- package/dist/modules/customer_accounts/backend/customer_accounts/users/[id]/PortalUserDetailPageClient.js.map +7 -0
- package/dist/modules/customer_accounts/backend/customer_accounts/users/[id]/page.js +7 -727
- package/dist/modules/customer_accounts/backend/customer_accounts/users/[id]/page.js.map +2 -2
- package/dist/modules/customer_accounts/backend/customer_accounts/users/page.js +7 -521
- package/dist/modules/customer_accounts/backend/customer_accounts/users/page.js.map +2 -2
- package/dist/modules/customer_accounts/extension-points.js +1 -1
- package/dist/modules/customer_accounts/extension-points.js.map +2 -2
- package/dist/modules/customer_accounts/lib/portalUrl.js +69 -0
- package/dist/modules/customer_accounts/lib/portalUrl.js.map +7 -0
- package/dist/modules/customer_accounts/services/domainMappingService.js +0 -10
- package/dist/modules/customer_accounts/services/domainMappingService.js.map +2 -2
- package/dist/modules/customers/ai-tools/companies-pack.js +1 -4
- package/dist/modules/customers/ai-tools/companies-pack.js.map +2 -2
- package/dist/modules/customers/ai-tools/deal-analyzer-pack.js +2 -13
- package/dist/modules/customers/ai-tools/deal-analyzer-pack.js.map +2 -2
- package/dist/modules/customers/ai-tools/deals-pack.js +6 -52
- package/dist/modules/customers/ai-tools/deals-pack.js.map +2 -2
- package/dist/modules/customers/ai-tools/people-pack.js +1 -4
- package/dist/modules/customers/ai-tools/people-pack.js.map +2 -2
- package/dist/modules/customers/api/activities/route.js +6 -48
- package/dist/modules/customers/api/activities/route.js.map +2 -2
- package/dist/modules/customers/api/companies/[id]/people/route.js +64 -20
- package/dist/modules/customers/api/companies/[id]/people/route.js.map +2 -2
- package/dist/modules/customers/api/companies/[id]/route.js +94 -17
- package/dist/modules/customers/api/companies/[id]/route.js.map +2 -2
- package/dist/modules/customers/api/dashboard/widgets/customer-todos/route.js +5 -8
- package/dist/modules/customers/api/dashboard/widgets/customer-todos/route.js.map +2 -2
- package/dist/modules/customers/api/deals/[id]/companies/route.js +1 -1
- package/dist/modules/customers/api/deals/[id]/companies/route.js.map +2 -2
- package/dist/modules/customers/api/deals/[id]/people/route.js +1 -1
- package/dist/modules/customers/api/deals/[id]/people/route.js.map +2 -2
- package/dist/modules/customers/api/deals/[id]/route.js +25 -8
- package/dist/modules/customers/api/deals/[id]/route.js.map +2 -2
- package/dist/modules/customers/api/deals/[id]/stats/route.js +22 -3
- package/dist/modules/customers/api/deals/[id]/stats/route.js.map +2 -2
- package/dist/modules/customers/api/deals/aggregate/route.js +4 -11
- package/dist/modules/customers/api/deals/aggregate/route.js.map +2 -2
- package/dist/modules/customers/api/deals/map/route.js +1 -2
- package/dist/modules/customers/api/deals/map/route.js.map +2 -2
- package/dist/modules/customers/api/deals/route.js +1 -38
- package/dist/modules/customers/api/deals/route.js.map +2 -2
- package/dist/modules/customers/api/entity-roles-factory.js +4 -4
- package/dist/modules/customers/api/entity-roles-factory.js.map +2 -2
- package/dist/modules/customers/api/interactions/route.js +1 -3
- package/dist/modules/customers/api/interactions/route.js.map +2 -2
- package/dist/modules/customers/api/interactions/tasks/route.js +4 -27
- package/dist/modules/customers/api/interactions/tasks/route.js.map +2 -2
- package/dist/modules/customers/api/people/[id]/companies/[linkId]/route.js +3 -4
- package/dist/modules/customers/api/people/[id]/companies/[linkId]/route.js.map +2 -2
- package/dist/modules/customers/api/people/[id]/companies/context.js +1 -1
- package/dist/modules/customers/api/people/[id]/companies/context.js.map +2 -2
- package/dist/modules/customers/api/people/[id]/companies/enriched/route.js +1 -1
- package/dist/modules/customers/api/people/[id]/companies/enriched/route.js.map +2 -2
- package/dist/modules/customers/api/people/[id]/route.js +10 -11
- package/dist/modules/customers/api/people/[id]/route.js.map +2 -2
- package/dist/modules/customers/api/people/check-phone/route.js +9 -51
- package/dist/modules/customers/api/people/check-phone/route.js.map +2 -2
- package/dist/modules/customers/api/todos/route.js +5 -30
- package/dist/modules/customers/api/todos/route.js.map +2 -2
- package/dist/modules/customers/backend/customers/companies/page.js +4 -6
- package/dist/modules/customers/backend/customers/companies/page.js.map +2 -2
- package/dist/modules/customers/backend/customers/deals/[id]/page.js +1 -6
- package/dist/modules/customers/backend/customers/deals/[id]/page.js.map +2 -2
- package/dist/modules/customers/backend/customers/deals/page.js +4 -7
- package/dist/modules/customers/backend/customers/deals/page.js.map +2 -2
- package/dist/modules/customers/backend/customers/deals/pipeline/components/Lane.js +13 -4
- package/dist/modules/customers/backend/customers/deals/pipeline/components/Lane.js.map +2 -2
- package/dist/modules/customers/backend/customers/deals/pipeline/components/StatusFilterPopover.js +14 -85
- package/dist/modules/customers/backend/customers/deals/pipeline/components/StatusFilterPopover.js.map +2 -2
- package/dist/modules/customers/backend/customers/people/page.js +4 -6
- package/dist/modules/customers/backend/customers/people/page.js.map +2 -2
- package/dist/modules/customers/backend/hooks/useEmailDuplicateCheck.js +3 -9
- package/dist/modules/customers/backend/hooks/useEmailDuplicateCheck.js.map +2 -2
- package/dist/modules/customers/commands/deals.js +34 -21
- package/dist/modules/customers/commands/deals.js.map +2 -2
- package/dist/modules/customers/commands/interactions.js.map +1 -1
- package/dist/modules/customers/commands/personCompanyLinks.js +2 -131
- package/dist/modules/customers/commands/personCompanyLinks.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/components/DealsKpiStrip.js +6 -7
- package/dist/modules/customers/components/DealsKpiStrip.js.map +2 -2
- package/dist/modules/customers/components/calendar/AgendaList.js +2 -2
- package/dist/modules/customers/components/calendar/AgendaList.js.map +2 -2
- package/dist/modules/customers/components/calendar/CalendarEventEditor.js +1 -1
- package/dist/modules/customers/components/calendar/CalendarEventEditor.js.map +2 -2
- package/dist/modules/customers/components/calendar/CalendarScreen.js +1 -1
- package/dist/modules/customers/components/calendar/CalendarScreen.js.map +2 -2
- package/dist/modules/customers/components/calendar/CalendarSettingsModal.js +1 -1
- package/dist/modules/customers/components/calendar/CalendarSettingsModal.js.map +2 -2
- package/dist/modules/customers/components/calendar/EventBlock.js +1 -1
- package/dist/modules/customers/components/calendar/EventBlock.js.map +2 -2
- package/dist/modules/customers/components/calendar/EventPeekPopover.js +2 -3
- package/dist/modules/customers/components/calendar/EventPeekPopover.js.map +2 -2
- package/dist/modules/customers/components/calendar/editor/PeopleField.js +5 -40
- package/dist/modules/customers/components/calendar/editor/PeopleField.js.map +2 -2
- package/dist/modules/customers/components/calendar/editor/hooks.js +1 -2
- package/dist/modules/customers/components/calendar/editor/hooks.js.map +2 -2
- package/dist/modules/customers/components/calendar/types.js +1 -1
- package/dist/modules/customers/components/calendar/types.js.map +2 -2
- package/dist/modules/customers/components/detail/AssignRoleDialog.js +33 -28
- package/dist/modules/customers/components/detail/AssignRoleDialog.js.map +2 -2
- package/dist/modules/customers/components/detail/CompanyKpiBar.js +4 -5
- package/dist/modules/customers/components/detail/CompanyKpiBar.js.map +2 -2
- package/dist/modules/customers/components/detail/CompanyPeopleSection.js +1 -3
- package/dist/modules/customers/components/detail/CompanyPeopleSection.js.map +2 -2
- package/dist/modules/customers/components/detail/DealForm.js +7 -19
- package/dist/modules/customers/components/detail/DealForm.js.map +2 -2
- package/dist/modules/customers/components/detail/DealsSection.js +5 -6
- package/dist/modules/customers/components/detail/DealsSection.js.map +2 -2
- package/dist/modules/customers/components/detail/EntityTagsDialog.js +11 -35
- package/dist/modules/customers/components/detail/EntityTagsDialog.js.map +2 -2
- package/dist/modules/customers/components/detail/PersonCompaniesSection.js +1 -3
- package/dist/modules/customers/components/detail/PersonCompaniesSection.js.map +2 -2
- package/dist/modules/customers/components/detail/hooks/usePersonTasks.js +13 -19
- package/dist/modules/customers/components/detail/hooks/usePersonTasks.js.map +2 -2
- package/dist/modules/customers/components/detail/schedule/ParticipantsField.js +4 -4
- package/dist/modules/customers/components/detail/schedule/ParticipantsField.js.map +2 -2
- package/dist/modules/customers/components/detail/schedule/useScheduleFormState.js +3 -3
- package/dist/modules/customers/components/detail/schedule/useScheduleFormState.js.map +2 -2
- package/dist/modules/customers/components/detail/utils.js +5 -5
- package/dist/modules/customers/components/detail/utils.js.map +2 -2
- package/dist/modules/customers/data/entities.js.map +1 -1
- package/dist/modules/customers/data/validators.js +3 -32
- package/dist/modules/customers/data/validators.js.map +2 -2
- package/dist/modules/customers/events.js +0 -5
- package/dist/modules/customers/events.js.map +2 -2
- package/dist/modules/customers/lib/calendar/conflicts.js +2 -8
- package/dist/modules/customers/lib/calendar/conflicts.js.map +2 -2
- package/dist/modules/customers/lib/calendar/editorPayload.js +2 -3
- package/dist/modules/customers/lib/calendar/editorPayload.js.map +2 -2
- package/dist/modules/customers/lib/calendar/mapItem.js +3 -8
- package/dist/modules/customers/lib/calendar/mapItem.js.map +2 -2
- package/dist/modules/customers/lib/dealStatus.js +0 -30
- package/dist/modules/customers/lib/dealStatus.js.map +2 -2
- package/dist/modules/customers/lib/findPeopleByAddresses.js +0 -1
- package/dist/modules/customers/lib/findPeopleByAddresses.js.map +2 -2
- package/dist/modules/customers/lib/personCompanies.js +2 -100
- package/dist/modules/customers/lib/personCompanies.js.map +2 -2
- package/dist/modules/customers/lib/todoCompatibility.js +0 -12
- package/dist/modules/customers/lib/todoCompatibility.js.map +2 -2
- package/dist/modules/dashboards/lib/widgetScope.js +1 -6
- package/dist/modules/dashboards/lib/widgetScope.js.map +2 -2
- package/dist/modules/data_sync/backend/data-sync/page.js +1 -3
- package/dist/modules/data_sync/backend/data-sync/page.js.map +2 -2
- package/dist/modules/data_sync/lib/sync-engine.js +6 -72
- package/dist/modules/data_sync/lib/sync-engine.js.map +2 -2
- package/dist/modules/data_sync/workers/sync-export.js +1 -5
- package/dist/modules/data_sync/workers/sync-export.js.map +2 -2
- package/dist/modules/data_sync/workers/sync-import.js +1 -5
- package/dist/modules/data_sync/workers/sync-import.js.map +2 -2
- package/dist/modules/devices/acl.js +1 -9
- package/dist/modules/devices/acl.js.map +2 -2
- package/dist/modules/devices/api/admin/devices/[id]/route.js +32 -5
- package/dist/modules/devices/api/admin/devices/[id]/route.js.map +2 -2
- package/dist/modules/devices/api/admin/devices/route.js +1 -14
- package/dist/modules/devices/api/admin/devices/route.js.map +2 -2
- package/dist/modules/devices/api/deviceList.js +12 -99
- package/dist/modules/devices/api/deviceList.js.map +2 -2
- package/dist/modules/devices/api/openapi.js +1 -3
- package/dist/modules/devices/api/openapi.js.map +2 -2
- package/dist/modules/devices/api/route.js +1 -9
- package/dist/modules/devices/api/route.js.map +2 -2
- package/dist/modules/devices/backend/devices/[id]/page.js +26 -10
- package/dist/modules/devices/backend/devices/[id]/page.js.map +2 -2
- package/dist/modules/devices/backend/devices/create/page.js +1 -17
- package/dist/modules/devices/backend/devices/create/page.js.map +2 -2
- package/dist/modules/devices/backend/devices/page.js +34 -28
- package/dist/modules/devices/backend/devices/page.js.map +2 -2
- package/dist/modules/devices/setup.js +2 -6
- package/dist/modules/devices/setup.js.map +2 -2
- package/dist/modules/directory/backend/directory/organizations/page.js +1 -2
- package/dist/modules/directory/backend/directory/organizations/page.js.map +2 -2
- package/dist/modules/directory/backend/directory/tenants/page.js +1 -2
- package/dist/modules/directory/backend/directory/tenants/page.js.map +2 -2
- package/dist/modules/directory/di.js +0 -9
- package/dist/modules/directory/di.js.map +2 -2
- package/dist/modules/directory/utils/organizationScope.js.map +2 -2
- package/dist/modules/entities/api/records.js +2 -4
- package/dist/modules/entities/api/records.js.map +2 -2
- package/dist/modules/entities/backend/entities/user/[entityId]/records/page.js +1 -3
- package/dist/modules/entities/backend/entities/user/[entityId]/records/page.js.map +2 -2
- package/dist/modules/eudr/api/plots/route.js +1 -5
- package/dist/modules/eudr/api/plots/route.js.map +2 -2
- package/dist/modules/eudr/backend/eudr/evidence-submissions/[id]/page.meta.js +3 -1
- package/dist/modules/eudr/backend/eudr/evidence-submissions/[id]/page.meta.js.map +2 -2
- package/dist/modules/eudr/backend/eudr/evidence-submissions/create/page.meta.js +1 -0
- package/dist/modules/eudr/backend/eudr/evidence-submissions/create/page.meta.js.map +2 -2
- package/dist/modules/eudr/backend/eudr/evidence-submissions/page.js +0 -3
- package/dist/modules/eudr/backend/eudr/evidence-submissions/page.js.map +2 -2
- package/dist/modules/eudr/backend/eudr/evidence-submissions/page.meta.js +4 -1
- package/dist/modules/eudr/backend/eudr/evidence-submissions/page.meta.js.map +2 -2
- package/dist/modules/eudr/backend/eudr/page.meta.js +2 -2
- package/dist/modules/eudr/backend/eudr/page.meta.js.map +2 -2
- package/dist/modules/eudr/backend/eudr/plots/[id]/page.js +8 -2
- package/dist/modules/eudr/backend/eudr/plots/[id]/page.js.map +2 -2
- package/dist/modules/eudr/backend/eudr/plots/[id]/page.meta.js +3 -1
- package/dist/modules/eudr/backend/eudr/plots/[id]/page.meta.js.map +2 -2
- package/dist/modules/eudr/backend/eudr/plots/create/page.js +8 -2
- package/dist/modules/eudr/backend/eudr/plots/create/page.js.map +2 -2
- package/dist/modules/eudr/backend/eudr/plots/create/page.meta.js +1 -0
- package/dist/modules/eudr/backend/eudr/plots/create/page.meta.js.map +2 -2
- package/dist/modules/eudr/backend/eudr/plots/page.js +0 -3
- package/dist/modules/eudr/backend/eudr/plots/page.js.map +2 -2
- package/dist/modules/eudr/backend/eudr/plots/page.meta.js +4 -1
- package/dist/modules/eudr/backend/eudr/plots/page.meta.js.map +2 -2
- package/dist/modules/eudr/backend/eudr/product-mappings/[id]/page.meta.js +3 -1
- package/dist/modules/eudr/backend/eudr/product-mappings/[id]/page.meta.js.map +2 -2
- package/dist/modules/eudr/backend/eudr/product-mappings/create/page.meta.js +1 -0
- package/dist/modules/eudr/backend/eudr/product-mappings/create/page.meta.js.map +2 -2
- package/dist/modules/eudr/backend/eudr/product-mappings/page.js +0 -3
- package/dist/modules/eudr/backend/eudr/product-mappings/page.js.map +2 -2
- package/dist/modules/eudr/backend/eudr/product-mappings/page.meta.js +4 -1
- package/dist/modules/eudr/backend/eudr/product-mappings/page.meta.js.map +2 -2
- package/dist/modules/eudr/backend/eudr/risk-assessments/[id]/page.meta.js +3 -1
- package/dist/modules/eudr/backend/eudr/risk-assessments/[id]/page.meta.js.map +2 -2
- package/dist/modules/eudr/backend/eudr/risk-assessments/create/page.meta.js +1 -0
- package/dist/modules/eudr/backend/eudr/risk-assessments/create/page.meta.js.map +2 -2
- package/dist/modules/eudr/backend/eudr/risk-assessments/page.js +0 -3
- package/dist/modules/eudr/backend/eudr/risk-assessments/page.js.map +2 -2
- package/dist/modules/eudr/backend/eudr/risk-assessments/page.meta.js +4 -1
- package/dist/modules/eudr/backend/eudr/risk-assessments/page.meta.js.map +2 -2
- package/dist/modules/eudr/backend/eudr/statements/[id]/page.js +2 -0
- package/dist/modules/eudr/backend/eudr/statements/[id]/page.js.map +2 -2
- package/dist/modules/eudr/backend/eudr/statements/[id]/page.meta.js +3 -1
- package/dist/modules/eudr/backend/eudr/statements/[id]/page.meta.js.map +2 -2
- package/dist/modules/eudr/backend/eudr/statements/create/page.meta.js +1 -0
- package/dist/modules/eudr/backend/eudr/statements/create/page.meta.js.map +2 -2
- package/dist/modules/eudr/backend/eudr/statements/page.js +30 -28
- package/dist/modules/eudr/backend/eudr/statements/page.js.map +2 -2
- package/dist/modules/eudr/backend/eudr/statements/page.meta.js +4 -1
- package/dist/modules/eudr/backend/eudr/statements/page.meta.js.map +2 -2
- package/dist/modules/eudr/commands/statements.js +8 -3
- package/dist/modules/eudr/commands/statements.js.map +2 -2
- package/dist/modules/eudr/components/crudErrorI18n.js +21 -1
- package/dist/modules/eudr/components/crudErrorI18n.js.map +2 -2
- package/dist/modules/eudr/components/formConfig.js +6 -2
- package/dist/modules/eudr/components/formConfig.js.map +2 -2
- package/dist/modules/eudr/data/validators.js +1 -4
- package/dist/modules/eudr/data/validators.js.map +2 -2
- package/dist/modules/eudr/lib/statement-lifecycle.js +9 -1
- package/dist/modules/eudr/lib/statement-lifecycle.js.map +2 -2
- package/dist/modules/feature_toggles/components/FeatureTogglesTable.js +0 -1
- package/dist/modules/feature_toggles/components/FeatureTogglesTable.js.map +2 -2
- package/dist/modules/feature_toggles/components/OverridesTable.js +0 -1
- package/dist/modules/feature_toggles/components/OverridesTable.js.map +2 -2
- package/dist/modules/feature_toggles/defaults.json +8 -0
- package/dist/modules/inbox_ops/backend/inbox-ops/log/page.js +0 -3
- package/dist/modules/inbox_ops/backend/inbox-ops/log/page.js.map +2 -2
- package/dist/modules/inbox_ops/backend/inbox-ops/page.js +0 -3
- package/dist/modules/inbox_ops/backend/inbox-ops/page.js.map +2 -2
- package/dist/modules/inbox_ops/lib/htmlToPlainText.js +12 -1
- package/dist/modules/inbox_ops/lib/htmlToPlainText.js.map +2 -2
- package/dist/modules/integrations/api/[id]/credentials/route.js +1 -6
- package/dist/modules/integrations/api/[id]/credentials/route.js.map +2 -2
- package/dist/modules/integrations/backend/integrations/[id]/page.js +29 -38
- package/dist/modules/integrations/backend/integrations/[id]/page.js.map +2 -2
- package/dist/modules/integrations/backend/integrations/bundle/[id]/page.js +9 -36
- package/dist/modules/integrations/backend/integrations/bundle/[id]/page.js.map +2 -2
- package/dist/modules/integrations/data/validators.js +3 -11
- package/dist/modules/integrations/data/validators.js.map +2 -2
- package/dist/modules/integrations/lib/credentials-masking.js +2 -6
- package/dist/modules/integrations/lib/credentials-masking.js.map +2 -2
- package/dist/modules/messages/api/[id]/route.js +1 -29
- package/dist/modules/messages/api/[id]/route.js.map +2 -2
- package/dist/modules/messages/api/openapi.js +2 -17
- package/dist/modules/messages/api/openapi.js.map +2 -2
- package/dist/modules/messages/api/route.js +2 -17
- package/dist/modules/messages/api/route.js.map +2 -2
- package/dist/modules/messages/components/MessagesInboxPageClient.js +14 -7
- package/dist/modules/messages/components/MessagesInboxPageClient.js.map +2 -2
- package/dist/modules/messages/components/inboxFilters.js +0 -15
- package/dist/modules/messages/components/inboxFilters.js.map +2 -2
- package/dist/modules/messages/components/message-detail/hooks/useMessageDetailsConversation.js +1 -11
- package/dist/modules/messages/components/message-detail/hooks/useMessageDetailsConversation.js.map +2 -2
- package/dist/modules/messages/components/message-detail/panels/MessageHeader.js +1 -3
- package/dist/modules/messages/components/message-detail/panels/MessageHeader.js.map +2 -2
- package/dist/modules/messages/components/message-detail/panels/thread-panel.js +1 -2
- package/dist/modules/messages/components/message-detail/panels/thread-panel.js.map +2 -2
- package/dist/modules/messages/components/messageListLabels.js +2 -14
- package/dist/modules/messages/components/messageListLabels.js.map +2 -2
- package/dist/modules/messages/data/validators.js +4 -18
- package/dist/modules/messages/data/validators.js.map +2 -2
- package/dist/modules/payment_gateways/api/webhook/[provider]/route.js +6 -4
- package/dist/modules/payment_gateways/api/webhook/[provider]/route.js.map +2 -2
- package/dist/modules/payment_gateways/backend/payment-gateways/page.js +1 -3
- package/dist/modules/payment_gateways/backend/payment-gateways/page.js.map +2 -2
- package/dist/modules/payment_gateways/lib/webhook-processor.js +0 -7
- package/dist/modules/payment_gateways/lib/webhook-processor.js.map +2 -2
- package/dist/modules/planner/backend/planner/availability-rulesets/page.js +0 -3
- package/dist/modules/planner/backend/planner/availability-rulesets/page.js.map +2 -2
- package/dist/modules/push_notifications/backend/push_notifications/page.js +1 -3
- package/dist/modules/push_notifications/backend/push_notifications/page.js.map +2 -2
- package/dist/modules/push_notifications/backend/push_notifications/send/page.js +1 -1
- package/dist/modules/push_notifications/backend/push_notifications/send/page.js.map +2 -2
- package/dist/modules/query_index/lib/engine.js +51 -150
- package/dist/modules/query_index/lib/engine.js.map +2 -2
- package/dist/modules/query_index/lib/search-tokens.js +3 -79
- package/dist/modules/query_index/lib/search-tokens.js.map +2 -2
- package/dist/modules/resources/backend/resources/resource-types/page.js +1 -3
- package/dist/modules/resources/backend/resources/resource-types/page.js.map +2 -2
- package/dist/modules/resources/backend/resources/resources/page.js +1 -3
- package/dist/modules/resources/backend/resources/resources/page.js.map +2 -2
- package/dist/modules/sales/backend/sales/channels/offers/page.js +0 -3
- package/dist/modules/sales/backend/sales/channels/offers/page.js.map +2 -2
- package/dist/modules/sales/backend/sales/channels/page.js +0 -3
- package/dist/modules/sales/backend/sales/channels/page.js.map +2 -2
- package/dist/modules/sales/backend/sales/documents/[id]/page.js +8 -10
- package/dist/modules/sales/backend/sales/documents/[id]/page.js.map +2 -2
- package/dist/modules/sales/commands/documents.js +1 -79
- package/dist/modules/sales/commands/documents.js.map +2 -2
- package/dist/modules/sales/components/PriceWithCurrency.js +5 -7
- package/dist/modules/sales/components/PriceWithCurrency.js.map +2 -2
- package/dist/modules/sales/components/channels/SalesChannelOffersPanel.js +0 -3
- package/dist/modules/sales/components/channels/SalesChannelOffersPanel.js.map +2 -2
- package/dist/modules/sales/components/documents/AdjustmentsSection.js +6 -8
- package/dist/modules/sales/components/documents/AdjustmentsSection.js.map +2 -2
- package/dist/modules/sales/components/documents/ItemsSection.js +22 -51
- package/dist/modules/sales/components/documents/ItemsSection.js.map +2 -2
- package/dist/modules/sales/components/documents/LineItemDialog.js +19 -84
- package/dist/modules/sales/components/documents/LineItemDialog.js.map +2 -2
- package/dist/modules/sales/components/documents/PaymentsSection.js +9 -23
- package/dist/modules/sales/components/documents/PaymentsSection.js.map +2 -2
- package/dist/modules/sales/components/documents/ReturnsSection.js +6 -8
- package/dist/modules/sales/components/documents/ReturnsSection.js.map +2 -2
- package/dist/modules/sales/components/documents/SalesDocumentsTable.js +14 -68
- package/dist/modules/sales/components/documents/SalesDocumentsTable.js.map +2 -2
- package/dist/modules/sales/components/documents/SalesOrderDraftLines.js +5 -6
- package/dist/modules/sales/components/documents/SalesOrderDraftLines.js.map +2 -2
- package/dist/modules/sales/components/documents/ShipmentDialog.js +4 -5
- package/dist/modules/sales/components/documents/ShipmentDialog.js.map +2 -2
- package/dist/modules/sales/components/documents/ShipmentsSection.js +6 -8
- package/dist/modules/sales/components/documents/ShipmentsSection.js.map +2 -2
- package/dist/modules/sales/components/documents/lineItemUtils.js +2 -2
- package/dist/modules/sales/components/documents/lineItemUtils.js.map +2 -2
- package/dist/modules/sales/data/entities.js +2 -8
- package/dist/modules/sales/data/entities.js.map +2 -2
- package/dist/modules/sales/extension-points.js +0 -1
- package/dist/modules/sales/extension-points.js.map +2 -2
- package/dist/modules/sales/setup.js +0 -2
- package/dist/modules/sales/setup.js.map +2 -2
- package/dist/modules/sales/widgets/injection/document-history/widget.client.js +44 -2
- package/dist/modules/sales/widgets/injection/document-history/widget.client.js.map +2 -2
- package/dist/modules/sales/widgets/injection/payment-gateway-status-column/widget.js +2 -10
- package/dist/modules/sales/widgets/injection/payment-gateway-status-column/widget.js.map +2 -2
- package/dist/modules/sales/widgets/injection-table.js +7 -4
- package/dist/modules/sales/widgets/injection-table.js.map +2 -2
- package/dist/modules/staff/backend/staff/leave-requests/page.js +0 -3
- package/dist/modules/staff/backend/staff/leave-requests/page.js.map +2 -2
- package/dist/modules/staff/backend/staff/my-leave-requests/page.js +0 -3
- package/dist/modules/staff/backend/staff/my-leave-requests/page.js.map +2 -2
- package/dist/modules/staff/backend/staff/team-members/page.js +0 -3
- package/dist/modules/staff/backend/staff/team-members/page.js.map +2 -2
- package/dist/modules/staff/backend/staff/team-roles/page.js +0 -3
- package/dist/modules/staff/backend/staff/team-roles/page.js.map +2 -2
- package/dist/modules/staff/backend/staff/teams/[id]/edit/page.js +0 -3
- package/dist/modules/staff/backend/staff/teams/[id]/edit/page.js.map +2 -2
- package/dist/modules/staff/backend/staff/teams/page.js +0 -3
- package/dist/modules/staff/backend/staff/teams/page.js.map +2 -2
- package/dist/modules/staff/backend/staff/timesheets/page.js +18 -29
- package/dist/modules/staff/backend/staff/timesheets/page.js.map +2 -2
- package/dist/modules/staff/backend/staff/timesheets/projects/page.js +0 -3
- package/dist/modules/staff/backend/staff/timesheets/projects/page.js.map +2 -2
- package/dist/modules/sync_excel/lib/adapters/customers.js +0 -1
- package/dist/modules/sync_excel/lib/adapters/customers.js.map +2 -2
- package/dist/modules/warranty_claims/api/assignees/route.js +3 -3
- package/dist/modules/warranty_claims/api/assignees/route.js.map +2 -2
- package/dist/modules/warranty_claims/api/portal/attachments/route.js +2 -2
- package/dist/modules/warranty_claims/api/portal/attachments/route.js.map +2 -2
- package/dist/modules/warranty_claims/api/portal/claims/route.js +9 -12
- package/dist/modules/warranty_claims/api/portal/claims/route.js.map +2 -2
- package/dist/modules/warranty_claims/backend/page.js +0 -3
- package/dist/modules/warranty_claims/backend/page.js.map +2 -2
- package/dist/modules/warranty_claims/backend/warranty_claims/registrations/page.js +0 -3
- package/dist/modules/warranty_claims/backend/warranty_claims/registrations/page.js.map +2 -2
- package/dist/modules/warranty_claims/backend/warranty_claims/troubleshooting-guides/page.js +0 -3
- package/dist/modules/warranty_claims/backend/warranty_claims/troubleshooting-guides/page.js.map +2 -2
- package/dist/modules/warranty_claims/backend/warranty_claims/vendor-policies/page.js +0 -3
- package/dist/modules/warranty_claims/backend/warranty_claims/vendor-policies/page.js.map +2 -2
- package/dist/modules/warranty_claims/frontend/[orgSlug]/portal/claims/page.js +0 -3
- package/dist/modules/warranty_claims/frontend/[orgSlug]/portal/claims/page.js.map +2 -2
- package/dist/modules/wms/api/warehouses/route.js +9 -13
- package/dist/modules/wms/api/warehouses/route.js.map +2 -2
- package/dist/modules/wms/api/zones/route.js +2 -15
- package/dist/modules/wms/api/zones/route.js.map +2 -2
- package/dist/modules/wms/commands/configuration.js +9 -121
- package/dist/modules/wms/commands/configuration.js.map +2 -2
- package/dist/modules/wms/commands/inventory-actions.js +0 -3
- package/dist/modules/wms/commands/inventory-actions.js.map +2 -2
- package/dist/modules/wms/commands/shared.js +1 -9
- package/dist/modules/wms/commands/shared.js.map +2 -2
- package/dist/modules/wms/components/backend/WmsConfigurationPage.js +111 -76
- package/dist/modules/wms/components/backend/WmsConfigurationPage.js.map +3 -3
- package/dist/modules/wms/components/backend/WmsInventoryConsolePage.js +0 -1
- package/dist/modules/wms/components/backend/WmsInventoryConsolePage.js.map +2 -2
- package/dist/modules/wms/components/backend/WmsLocationDetailPage.js +20 -16
- package/dist/modules/wms/components/backend/WmsLocationDetailPage.js.map +2 -2
- package/dist/modules/wms/components/backend/WmsLotDetailPage.js +10 -6
- package/dist/modules/wms/components/backend/WmsLotDetailPage.js.map +2 -2
- package/dist/modules/wms/components/backend/WmsLotsListPage.js +0 -1
- package/dist/modules/wms/components/backend/WmsLotsListPage.js.map +2 -2
- package/dist/modules/wms/components/backend/WmsOperationalDashboardPage.js +11 -7
- package/dist/modules/wms/components/backend/WmsOperationalDashboardPage.js.map +2 -2
- package/dist/modules/wms/components/backend/WmsSkuDetailPage.js +10 -6
- package/dist/modules/wms/components/backend/WmsSkuDetailPage.js.map +2 -2
- package/dist/modules/wms/components/backend/inventoryMutationLoaders.js +20 -27
- package/dist/modules/wms/components/backend/inventoryMutationLoaders.js.map +2 -2
- package/dist/modules/workflows/backend/definitions/page.js +1 -3
- package/dist/modules/workflows/backend/definitions/page.js.map +2 -2
- package/dist/modules/workflows/backend/events/page.js +1 -3
- package/dist/modules/workflows/backend/events/page.js.map +2 -2
- package/dist/modules/workflows/backend/instances/page.js +1 -3
- package/dist/modules/workflows/backend/instances/page.js.map +2 -2
- package/dist/modules/workflows/backend/tasks/page.js +1 -3
- package/dist/modules/workflows/backend/tasks/page.js.map +2 -2
- package/dist/modules/workflows/lib/activity-executor.js +0 -4
- package/dist/modules/workflows/lib/activity-executor.js.map +2 -2
- package/package.json +10 -9
- package/src/helpers/integration/api.ts +1 -33
- package/src/helpers/integration/communicationChannelsFixtures.ts +1 -69
- package/src/modules/api_keys/api/keys/route.ts +1 -3
- package/src/modules/api_keys/backend/api-keys/page.tsx +1 -4
- package/src/modules/attachments/AGENTS.md +0 -15
- package/src/modules/attachments/api/route.ts +2 -2
- package/src/modules/attachments/components/AttachmentLibrary.tsx +0 -3
- package/src/modules/attachments/di.ts +0 -16
- package/src/modules/attachments/i18n/de.json +0 -5
- package/src/modules/attachments/i18n/en.json +0 -5
- package/src/modules/attachments/i18n/es.json +0 -5
- package/src/modules/attachments/i18n/ko.json +0 -5
- package/src/modules/attachments/i18n/pl.json +0 -5
- package/src/modules/attachments/index.ts +0 -10
- package/src/modules/attachments/lib/scoped-upload-service.ts +0 -46
- package/src/modules/attachments/lib/upload-limits.ts +2 -6
- package/src/modules/audit_logs/backend/audit-logs/page.tsx +0 -8
- package/src/modules/audit_logs/lib/display-helpers.tsx +32 -42
- package/src/modules/audit_logs/services/actionLogService.ts +11 -74
- package/src/modules/auth/acl.ts +6 -30
- package/src/modules/auth/api/feature-check.ts +3 -10
- package/src/modules/auth/api/login.ts +24 -9
- package/src/modules/auth/api/roles/acl/route.ts +39 -42
- package/src/modules/auth/api/routeError.ts +30 -0
- package/src/modules/auth/api/session/refresh.ts +1 -32
- package/src/modules/auth/api/users/acl/route.ts +101 -185
- package/src/modules/auth/api/users/route.ts +5 -18
- package/src/modules/auth/backend/roles/[id]/edit/page.meta.ts +2 -5
- package/src/modules/auth/backend/roles/page.tsx +2 -4
- package/src/modules/auth/backend/users/[id]/edit/page.meta.ts +2 -5
- package/src/modules/auth/backend/users/page.tsx +2 -3
- package/src/modules/auth/components/AclEditor.tsx +33 -63
- package/src/modules/auth/data/entities.ts +1 -4
- package/src/modules/auth/data/validators.ts +0 -5
- package/src/modules/auth/di.ts +16 -46
- package/src/modules/auth/frontend/reset/[token]/page.tsx +0 -74
- package/src/modules/auth/i18n/de.json +0 -389
- package/src/modules/auth/i18n/en.json +0 -389
- package/src/modules/auth/i18n/es.json +0 -389
- package/src/modules/auth/i18n/ko.json +0 -389
- package/src/modules/auth/i18n/pl.json +2 -391
- package/src/modules/auth/lib/grantChecks.ts +0 -6
- package/src/modules/auth/services/authService.ts +2 -18
- package/src/modules/auth/services/rbacService.ts +24 -110
- package/src/modules/business_rules/backend/logs/page.tsx +1 -4
- package/src/modules/business_rules/backend/rules/[id]/page.meta.ts +5 -0
- package/src/modules/business_rules/backend/rules/create/page.meta.ts +5 -1
- package/src/modules/business_rules/backend/rules/page.tsx +1 -4
- package/src/modules/business_rules/backend/sets/[id]/page.meta.ts +5 -0
- package/src/modules/business_rules/backend/sets/create/page.meta.ts +5 -1
- package/src/modules/business_rules/backend/sets/page.tsx +1 -4
- package/src/modules/business_rules/lib/expression-evaluator.ts +9 -9
- package/src/modules/business_rules/lib/rule-evaluator.ts +9 -10
- package/src/modules/catalog/ai-agents.ts +1 -1
- package/src/modules/catalog/ai-tools/merchandising-pack.ts +2 -2
- package/src/modules/catalog/backend/catalog/products/MerchandisingAssistantSheet.tsx +5 -12
- package/src/modules/catalog/components/categories/CategoriesDataTable.tsx +0 -3
- package/src/modules/catalog/components/products/ProductsDataTable.tsx +0 -7
- package/src/modules/catalog/i18n/de.json +0 -1
- package/src/modules/catalog/i18n/en.json +0 -1
- package/src/modules/catalog/i18n/es.json +0 -1
- package/src/modules/catalog/i18n/ko.json +0 -1
- package/src/modules/catalog/i18n/pl.json +0 -1
- package/src/modules/catalog/widgets/injection/merchandising-assistant-trigger/widget.client.tsx +0 -4
- package/src/modules/communication_channels/api/post/channels/[id]/test-send/route.ts +1 -17
- package/src/modules/communication_channels/api/post/test-seed/route.ts +16 -155
- package/src/modules/communication_channels/backend/communication_channels/channels/page.tsx +0 -4
- package/src/modules/communication_channels/commands/ingest-inbound-message.ts +1 -38
- package/src/modules/communication_channels/di.ts +0 -7
- package/src/modules/communication_channels/lib/adapter.ts +0 -14
- package/src/modules/communication_channels/lib/email-capabilities.ts +0 -4
- package/src/modules/communication_channels/lib/test-seed.ts +4 -64
- package/src/modules/configs/i18n/de.json +0 -2
- package/src/modules/configs/i18n/en.json +0 -2
- package/src/modules/configs/i18n/es.json +0 -2
- package/src/modules/configs/i18n/ko.json +0 -2
- package/src/modules/configs/i18n/pl.json +0 -2
- package/src/modules/configs/lib/system-status.ts +0 -9
- package/src/modules/currencies/backend/currencies/page.tsx +1 -4
- package/src/modules/currencies/backend/exchange-rates/page.tsx +1 -4
- package/src/modules/customer_accounts/api/admin/domain-mappings.ts +0 -7
- package/src/modules/customer_accounts/backend/customer_accounts/roles/page.tsx +1 -4
- package/src/modules/customer_accounts/backend/customer_accounts/settings/CustomerAccountsSettingsPageClient.tsx +138 -0
- package/src/modules/customer_accounts/backend/customer_accounts/settings/page.tsx +8 -132
- package/src/modules/customer_accounts/backend/customer_accounts/users/PortalUsersPageClient.tsx +598 -0
- package/src/modules/customer_accounts/backend/customer_accounts/users/[id]/PortalUserDetailPageClient.tsx +838 -0
- package/src/modules/customer_accounts/backend/customer_accounts/users/[id]/page.tsx +6 -838
- package/src/modules/customer_accounts/backend/customer_accounts/users/page.tsx +6 -590
- package/src/modules/customer_accounts/extension-points.ts +1 -1
- package/src/modules/customer_accounts/lib/portalUrl.ts +112 -0
- package/src/modules/customer_accounts/services/domainMappingService.ts +0 -10
- package/src/modules/customers/ai-tools/companies-pack.ts +1 -4
- package/src/modules/customers/ai-tools/deal-analyzer-pack.ts +2 -17
- package/src/modules/customers/ai-tools/deals-pack.ts +1 -66
- package/src/modules/customers/ai-tools/people-pack.ts +1 -4
- package/src/modules/customers/api/activities/route.ts +0 -45
- package/src/modules/customers/api/companies/[id]/people/route.ts +73 -24
- package/src/modules/customers/api/companies/[id]/route.ts +107 -24
- package/src/modules/customers/api/dashboard/widgets/customer-todos/route.ts +8 -16
- package/src/modules/customers/api/deals/[id]/companies/route.ts +1 -4
- package/src/modules/customers/api/deals/[id]/people/route.ts +1 -4
- package/src/modules/customers/api/deals/[id]/route.ts +28 -17
- package/src/modules/customers/api/deals/[id]/stats/route.ts +25 -10
- package/src/modules/customers/api/deals/aggregate/route.ts +4 -14
- package/src/modules/customers/api/deals/map/route.ts +0 -1
- package/src/modules/customers/api/deals/route.ts +1 -50
- package/src/modules/customers/api/entity-roles-factory.ts +4 -8
- package/src/modules/customers/api/interactions/route.ts +2 -8
- package/src/modules/customers/api/interactions/tasks/route.ts +1 -24
- package/src/modules/customers/api/people/[id]/companies/[linkId]/route.ts +4 -12
- package/src/modules/customers/api/people/[id]/companies/context.ts +1 -4
- package/src/modules/customers/api/people/[id]/companies/enriched/route.ts +1 -4
- package/src/modules/customers/api/people/[id]/route.ts +11 -16
- package/src/modules/customers/api/people/check-phone/route.ts +10 -75
- package/src/modules/customers/api/todos/route.ts +2 -27
- package/src/modules/customers/backend/customers/companies/page.tsx +4 -7
- package/src/modules/customers/backend/customers/deals/[id]/page.tsx +2 -7
- package/src/modules/customers/backend/customers/deals/page.tsx +4 -10
- package/src/modules/customers/backend/customers/deals/pipeline/components/Lane.tsx +14 -5
- package/src/modules/customers/backend/customers/deals/pipeline/components/StatusFilterPopover.tsx +27 -109
- package/src/modules/customers/backend/customers/people/page.tsx +4 -7
- package/src/modules/customers/backend/hooks/useEmailDuplicateCheck.ts +4 -12
- package/src/modules/customers/commands/deals.ts +59 -34
- package/src/modules/customers/commands/interactions.ts +1 -1
- package/src/modules/customers/commands/personCompanyLinks.ts +8 -224
- package/src/modules/customers/components/CustomerTodosTable.tsx +0 -2
- package/src/modules/customers/components/DealsKpiStrip.tsx +7 -7
- package/src/modules/customers/components/calendar/AgendaList.tsx +3 -3
- package/src/modules/customers/components/calendar/CalendarEventEditor.tsx +1 -1
- package/src/modules/customers/components/calendar/CalendarScreen.tsx +1 -1
- package/src/modules/customers/components/calendar/CalendarSettingsModal.tsx +1 -1
- package/src/modules/customers/components/calendar/EventBlock.tsx +2 -2
- package/src/modules/customers/components/calendar/EventPeekPopover.tsx +2 -4
- package/src/modules/customers/components/calendar/editor/PeopleField.tsx +5 -61
- package/src/modules/customers/components/calendar/editor/hooks.ts +1 -7
- package/src/modules/customers/components/calendar/types.ts +2 -2
- package/src/modules/customers/components/detail/AssignRoleDialog.tsx +12 -7
- package/src/modules/customers/components/detail/CompanyKpiBar.tsx +4 -5
- package/src/modules/customers/components/detail/CompanyPeopleSection.tsx +1 -8
- package/src/modules/customers/components/detail/DealForm.tsx +2 -22
- package/src/modules/customers/components/detail/DealsSection.tsx +5 -11
- package/src/modules/customers/components/detail/EntityTagsDialog.tsx +12 -58
- package/src/modules/customers/components/detail/PersonCompaniesSection.tsx +1 -8
- package/src/modules/customers/components/detail/hooks/usePersonTasks.ts +14 -23
- package/src/modules/customers/components/detail/schedule/ParticipantsField.tsx +5 -5
- package/src/modules/customers/components/detail/schedule/useScheduleFormState.ts +5 -5
- package/src/modules/customers/components/detail/types.ts +1 -1
- package/src/modules/customers/components/detail/utils.ts +5 -15
- package/src/modules/customers/data/entities.ts +1 -1
- package/src/modules/customers/data/validators.ts +9 -50
- package/src/modules/customers/events.ts +0 -5
- package/src/modules/customers/i18n/de.json +1 -9
- package/src/modules/customers/i18n/en.json +1 -9
- package/src/modules/customers/i18n/es.json +1 -9
- package/src/modules/customers/i18n/ko.json +1 -9
- package/src/modules/customers/i18n/pl.json +1 -9
- package/src/modules/customers/lib/calendar/conflicts.ts +2 -10
- package/src/modules/customers/lib/calendar/editorPayload.ts +3 -4
- package/src/modules/customers/lib/calendar/mapItem.ts +3 -8
- package/src/modules/customers/lib/dealStatus.ts +0 -42
- package/src/modules/customers/lib/findPeopleByAddresses.ts +6 -8
- package/src/modules/customers/lib/personCompanies.ts +1 -136
- package/src/modules/customers/lib/todoCompatibility.ts +1 -19
- package/src/modules/dashboards/i18n/es.json +4 -4
- package/src/modules/dashboards/i18n/pl.json +7 -7
- package/src/modules/dashboards/lib/widgetScope.ts +0 -6
- package/src/modules/data_sync/AGENTS.md +1 -1
- package/src/modules/data_sync/backend/data-sync/page.tsx +1 -4
- package/src/modules/data_sync/lib/adapter.ts +0 -36
- package/src/modules/data_sync/lib/sync-engine.ts +5 -113
- package/src/modules/data_sync/workers/sync-export.ts +0 -4
- package/src/modules/data_sync/workers/sync-import.ts +0 -4
- package/src/modules/devices/AGENTS.md +1 -20
- package/src/modules/devices/acl.ts +1 -9
- package/src/modules/devices/api/admin/devices/[id]/route.ts +34 -5
- package/src/modules/devices/api/admin/devices/route.ts +1 -14
- package/src/modules/devices/api/deviceList.ts +11 -135
- package/src/modules/devices/api/openapi.ts +1 -9
- package/src/modules/devices/api/route.ts +1 -9
- package/src/modules/devices/backend/devices/[id]/page.tsx +32 -18
- package/src/modules/devices/backend/devices/create/page.tsx +1 -17
- package/src/modules/devices/backend/devices/page.tsx +45 -44
- package/src/modules/devices/i18n/de.json +2 -3
- package/src/modules/devices/i18n/en.json +2 -3
- package/src/modules/devices/i18n/es.json +2 -3
- package/src/modules/devices/i18n/ko.json +2 -3
- package/src/modules/devices/i18n/pl.json +2 -3
- package/src/modules/devices/setup.ts +2 -6
- package/src/modules/directory/backend/directory/organizations/page.tsx +1 -3
- package/src/modules/directory/backend/directory/tenants/page.tsx +1 -3
- package/src/modules/directory/di.ts +2 -14
- package/src/modules/directory/utils/organizationScope.ts +15 -4
- package/src/modules/entities/api/records.ts +0 -2
- package/src/modules/entities/backend/entities/user/[entityId]/records/page.tsx +1 -4
- package/src/modules/eudr/api/plots/route.ts +0 -4
- package/src/modules/eudr/backend/eudr/evidence-submissions/[id]/page.meta.ts +2 -0
- package/src/modules/eudr/backend/eudr/evidence-submissions/create/page.meta.ts +1 -0
- package/src/modules/eudr/backend/eudr/evidence-submissions/page.meta.ts +4 -1
- package/src/modules/eudr/backend/eudr/evidence-submissions/page.tsx +0 -4
- package/src/modules/eudr/backend/eudr/page.meta.ts +2 -2
- package/src/modules/eudr/backend/eudr/plots/[id]/page.meta.ts +2 -0
- package/src/modules/eudr/backend/eudr/plots/[id]/page.tsx +8 -2
- package/src/modules/eudr/backend/eudr/plots/create/page.meta.ts +1 -0
- package/src/modules/eudr/backend/eudr/plots/create/page.tsx +8 -2
- package/src/modules/eudr/backend/eudr/plots/page.meta.ts +4 -1
- package/src/modules/eudr/backend/eudr/plots/page.tsx +0 -4
- package/src/modules/eudr/backend/eudr/product-mappings/[id]/page.meta.ts +2 -0
- package/src/modules/eudr/backend/eudr/product-mappings/create/page.meta.ts +1 -0
- package/src/modules/eudr/backend/eudr/product-mappings/page.meta.ts +4 -1
- package/src/modules/eudr/backend/eudr/product-mappings/page.tsx +0 -4
- package/src/modules/eudr/backend/eudr/risk-assessments/[id]/page.meta.ts +2 -0
- package/src/modules/eudr/backend/eudr/risk-assessments/create/page.meta.ts +1 -0
- package/src/modules/eudr/backend/eudr/risk-assessments/page.meta.ts +4 -1
- package/src/modules/eudr/backend/eudr/risk-assessments/page.tsx +0 -4
- package/src/modules/eudr/backend/eudr/statements/[id]/page.meta.ts +2 -0
- package/src/modules/eudr/backend/eudr/statements/[id]/page.tsx +2 -0
- package/src/modules/eudr/backend/eudr/statements/create/page.meta.ts +1 -0
- package/src/modules/eudr/backend/eudr/statements/page.meta.ts +4 -1
- package/src/modules/eudr/backend/eudr/statements/page.tsx +32 -30
- package/src/modules/eudr/commands/statements.ts +7 -2
- package/src/modules/eudr/components/crudErrorI18n.ts +31 -0
- package/src/modules/eudr/components/formConfig.tsx +9 -1
- package/src/modules/eudr/data/validators.ts +1 -16
- package/src/modules/eudr/i18n/de.json +3 -2
- package/src/modules/eudr/i18n/en.json +3 -2
- package/src/modules/eudr/i18n/es.json +3 -2
- package/src/modules/eudr/i18n/ko.json +3 -2
- package/src/modules/eudr/i18n/pl.json +3 -2
- package/src/modules/eudr/lib/statement-lifecycle.ts +8 -0
- package/src/modules/feature_toggles/components/FeatureTogglesTable.tsx +1 -2
- package/src/modules/feature_toggles/components/OverridesTable.tsx +1 -2
- package/src/modules/feature_toggles/defaults.json +8 -0
- package/src/modules/inbox_ops/backend/inbox-ops/log/page.tsx +0 -4
- package/src/modules/inbox_ops/backend/inbox-ops/page.tsx +0 -4
- package/src/modules/inbox_ops/lib/htmlToPlainText.ts +17 -1
- package/src/modules/integrations/api/[id]/credentials/route.ts +4 -6
- package/src/modules/integrations/backend/integrations/[id]/page.tsx +31 -61
- package/src/modules/integrations/backend/integrations/bundle/[id]/page.tsx +9 -44
- package/src/modules/integrations/data/validators.ts +2 -12
- package/src/modules/integrations/i18n/de.json +0 -1
- package/src/modules/integrations/i18n/en.json +0 -1
- package/src/modules/integrations/i18n/es.json +0 -1
- package/src/modules/integrations/i18n/ko.json +0 -1
- package/src/modules/integrations/i18n/pl.json +0 -1
- package/src/modules/integrations/lib/credentials-masking.ts +6 -10
- package/src/modules/messages/api/[id]/route.ts +1 -55
- package/src/modules/messages/api/openapi.ts +0 -20
- package/src/modules/messages/api/route.ts +2 -31
- package/src/modules/messages/components/MessagesInboxPageClient.tsx +16 -9
- package/src/modules/messages/components/inboxFilters.ts +0 -36
- package/src/modules/messages/components/message-detail/hooks/useMessageDetailsConversation.ts +1 -14
- package/src/modules/messages/components/message-detail/panels/MessageHeader.tsx +1 -3
- package/src/modules/messages/components/message-detail/panels/thread-panel.tsx +1 -2
- package/src/modules/messages/components/message-detail/types.ts +0 -3
- package/src/modules/messages/components/messageListLabels.ts +3 -52
- package/src/modules/messages/data/validators.ts +4 -43
- package/src/modules/payment_gateways/api/webhook/[provider]/route.ts +6 -4
- package/src/modules/payment_gateways/backend/payment-gateways/page.tsx +1 -4
- package/src/modules/payment_gateways/lib/webhook-processor.ts +0 -11
- package/src/modules/planner/backend/planner/availability-rulesets/page.tsx +0 -4
- package/src/modules/push_notifications/backend/push_notifications/page.tsx +1 -4
- package/src/modules/push_notifications/backend/push_notifications/send/page.tsx +4 -4
- package/src/modules/query_index/lib/engine.ts +61 -249
- package/src/modules/query_index/lib/search-tokens.ts +3 -135
- package/src/modules/resources/backend/resources/resource-types/page.tsx +1 -4
- package/src/modules/resources/backend/resources/resources/page.tsx +1 -4
- package/src/modules/sales/backend/sales/channels/offers/page.tsx +0 -4
- package/src/modules/sales/backend/sales/channels/page.tsx +0 -4
- package/src/modules/sales/backend/sales/documents/[id]/page.tsx +8 -14
- package/src/modules/sales/commands/documents.ts +0 -93
- package/src/modules/sales/components/PriceWithCurrency.tsx +5 -17
- package/src/modules/sales/components/channels/SalesChannelOffersPanel.tsx +0 -4
- package/src/modules/sales/components/documents/AdjustmentsSection.tsx +5 -6
- package/src/modules/sales/components/documents/ItemsSection.tsx +18 -56
- package/src/modules/sales/components/documents/LineItemDialog.tsx +21 -138
- package/src/modules/sales/components/documents/PaymentsSection.tsx +9 -20
- package/src/modules/sales/components/documents/ReturnsSection.tsx +5 -6
- package/src/modules/sales/components/documents/SalesDocumentsTable.tsx +14 -106
- package/src/modules/sales/components/documents/SalesOrderDraftLines.tsx +5 -6
- package/src/modules/sales/components/documents/ShipmentDialog.tsx +4 -5
- package/src/modules/sales/components/documents/ShipmentsSection.tsx +5 -6
- package/src/modules/sales/components/documents/lineItemUtils.ts +2 -7
- package/src/modules/sales/data/entities.ts +0 -6
- package/src/modules/sales/extension-points.ts +0 -1
- package/src/modules/sales/i18n/de.json +37 -8
- package/src/modules/sales/i18n/en.json +37 -8
- package/src/modules/sales/i18n/es.json +37 -8
- package/src/modules/sales/i18n/ko.json +37 -8
- package/src/modules/sales/i18n/pl.json +37 -8
- package/src/modules/sales/migrations/.snapshot-open-mercato.json +0 -60
- package/src/modules/sales/setup.ts +0 -2
- package/src/modules/sales/widgets/injection/document-history/widget.client.tsx +42 -2
- package/src/modules/sales/widgets/injection/payment-gateway-status-column/widget.ts +1 -9
- package/src/modules/sales/widgets/injection-table.ts +7 -4
- package/src/modules/staff/backend/staff/leave-requests/page.tsx +0 -4
- package/src/modules/staff/backend/staff/my-leave-requests/page.tsx +0 -4
- package/src/modules/staff/backend/staff/team-members/page.tsx +0 -6
- package/src/modules/staff/backend/staff/team-roles/page.tsx +0 -4
- package/src/modules/staff/backend/staff/teams/[id]/edit/page.tsx +0 -4
- package/src/modules/staff/backend/staff/teams/page.tsx +0 -4
- package/src/modules/staff/backend/staff/timesheets/page.tsx +1 -12
- package/src/modules/staff/backend/staff/timesheets/projects/page.tsx +0 -4
- package/src/modules/sync_excel/lib/adapters/customers.ts +0 -5
- package/src/modules/warranty_claims/api/assignees/route.ts +3 -3
- package/src/modules/warranty_claims/api/portal/attachments/route.ts +2 -2
- package/src/modules/warranty_claims/api/portal/claims/route.ts +9 -12
- package/src/modules/warranty_claims/backend/page.tsx +0 -4
- package/src/modules/warranty_claims/backend/warranty_claims/registrations/page.tsx +0 -4
- package/src/modules/warranty_claims/backend/warranty_claims/troubleshooting-guides/page.tsx +0 -4
- package/src/modules/warranty_claims/backend/warranty_claims/vendor-policies/page.tsx +0 -4
- package/src/modules/warranty_claims/frontend/[orgSlug]/portal/claims/page.tsx +0 -4
- package/src/modules/wms/api/warehouses/route.ts +9 -13
- package/src/modules/wms/api/zones/route.ts +0 -16
- package/src/modules/wms/commands/configuration.ts +10 -159
- package/src/modules/wms/commands/inventory-actions.ts +0 -3
- package/src/modules/wms/commands/shared.ts +0 -17
- package/src/modules/wms/components/backend/WmsConfigurationPage.tsx +141 -95
- package/src/modules/wms/components/backend/WmsInventoryConsolePage.tsx +0 -2
- package/src/modules/wms/components/backend/WmsLocationDetailPage.tsx +30 -26
- package/src/modules/wms/components/backend/WmsLotDetailPage.tsx +21 -17
- package/src/modules/wms/components/backend/WmsLotsListPage.tsx +0 -2
- package/src/modules/wms/components/backend/WmsOperationalDashboardPage.tsx +17 -13
- package/src/modules/wms/components/backend/WmsSkuDetailPage.tsx +16 -12
- package/src/modules/wms/components/backend/inventoryMutationLoaders.ts +20 -36
- package/src/modules/wms/i18n/de.json +0 -2
- package/src/modules/wms/i18n/en.json +0 -2
- package/src/modules/wms/i18n/es.json +0 -2
- package/src/modules/wms/i18n/ko.json +0 -2
- package/src/modules/wms/i18n/pl.json +0 -2
- package/src/modules/workflows/backend/definitions/page.tsx +1 -4
- package/src/modules/workflows/backend/events/page.tsx +1 -4
- package/src/modules/workflows/backend/instances/page.tsx +1 -4
- package/src/modules/workflows/backend/tasks/page.tsx +1 -4
- package/src/modules/workflows/lib/activity-executor.ts +0 -9
- package/dist/modules/api_keys/di.js +0 -9
- package/dist/modules/api_keys/di.js.map +0 -7
- package/dist/modules/api_keys/services/principalService.js +0 -31
- package/dist/modules/api_keys/services/principalService.js.map +0 -7
- package/dist/modules/attachments/lib/attachment-service.js +0 -313
- package/dist/modules/attachments/lib/attachment-service.js.map +0 -7
- package/dist/modules/auth/api/reset/validate.js +0 -55
- package/dist/modules/auth/api/reset/validate.js.map +0 -7
- package/dist/modules/auth/commands/acl.js +0 -254
- package/dist/modules/auth/commands/acl.js.map +0 -7
- package/dist/modules/auth/lib/userIdFilter.js +0 -16
- package/dist/modules/auth/lib/userIdFilter.js.map +0 -7
- package/dist/modules/auth/services/principalService.js +0 -200
- package/dist/modules/auth/services/principalService.js.map +0 -7
- package/dist/modules/auth/services/roleOrganizationScope.js +0 -41
- package/dist/modules/auth/services/roleOrganizationScope.js.map +0 -7
- package/dist/modules/communication_channels/lib/outbound-recipient.js +0 -33
- package/dist/modules/communication_channels/lib/outbound-recipient.js.map +0 -7
- package/dist/modules/communication_channels/lib/resolve-channel-type.js +0 -51
- package/dist/modules/communication_channels/lib/resolve-channel-type.js.map +0 -7
- package/dist/modules/customers/backend/customers/deals/pipeline/components/toneClasses.js +0 -18
- package/dist/modules/customers/backend/customers/deals/pipeline/components/toneClasses.js.map +0 -7
- package/dist/modules/customers/lib/calendar/participantIdentity.js +0 -9
- package/dist/modules/customers/lib/calendar/participantIdentity.js.map +0 -7
- package/dist/modules/customers/lib/closureStage.js +0 -45
- package/dist/modules/customers/lib/closureStage.js.map +0 -7
- package/dist/modules/customers/lib/detailReadAccess.js +0 -12
- package/dist/modules/customers/lib/detailReadAccess.js.map +0 -7
- package/dist/modules/data_sync/lib/abandoned-run.js +0 -19
- package/dist/modules/data_sync/lib/abandoned-run.js.map +0 -7
- package/dist/modules/devices/api/deviceSerialization.js +0 -46
- package/dist/modules/devices/api/deviceSerialization.js.map +0 -7
- package/dist/modules/devices/backend/devices/useDeviceUserLabels.js +0 -34
- package/dist/modules/devices/backend/devices/useDeviceUserLabels.js.map +0 -7
- package/dist/modules/devices/backend/devices/userOptions.js +0 -52
- package/dist/modules/devices/backend/devices/userOptions.js.map +0 -7
- package/dist/modules/directory/services/organizationHierarchyService.js +0 -29
- package/dist/modules/directory/services/organizationHierarchyService.js.map +0 -7
- package/dist/modules/directory/services/organizationScopeService.js +0 -56
- package/dist/modules/directory/services/organizationScopeService.js.map +0 -7
- package/dist/modules/integrations/backend/integrations/credential-secret-fields.js +0 -55
- package/dist/modules/integrations/backend/integrations/credential-secret-fields.js.map +0 -7
- package/dist/modules/messages/lib/channel-sender-identity.js +0 -26
- package/dist/modules/messages/lib/channel-sender-identity.js.map +0 -7
- package/dist/modules/messages/lib/composeSourceChannelType.js +0 -41
- package/dist/modules/messages/lib/composeSourceChannelType.js.map +0 -7
- package/dist/modules/query_index/lib/search-entity-policy.js +0 -14
- package/dist/modules/query_index/lib/search-entity-policy.js.map +0 -7
- package/dist/modules/sales/components/documents/lineItemShipmentLock.js +0 -54
- package/dist/modules/sales/components/documents/lineItemShipmentLock.js.map +0 -7
- package/dist/modules/sales/lib/salesChannelsToggleSeed.js +0 -33
- package/dist/modules/sales/lib/salesChannelsToggleSeed.js.map +0 -7
- package/dist/modules/sales/migrations/Migration20260821120000_sales_notes_addresses_context_idx.js +0 -32
- package/dist/modules/sales/migrations/Migration20260821120000_sales_notes_addresses_context_idx.js.map +0 -7
- package/dist/modules/wms/api/warehouseSearch.js +0 -21
- package/dist/modules/wms/api/warehouseSearch.js.map +0 -7
- package/dist/modules/wms/components/backend/WarehouseEditDialog.js +0 -158
- package/dist/modules/wms/components/backend/WarehouseEditDialog.js.map +0 -7
- package/dist/modules/wms/components/backend/warehouseFormOptions.js +0 -66
- package/dist/modules/wms/components/backend/warehouseFormOptions.js.map +0 -7
- package/src/modules/api_keys/di.ts +0 -7
- package/src/modules/api_keys/services/principalService.ts +0 -33
- package/src/modules/attachments/lib/attachment-service.ts +0 -468
- package/src/modules/auth/api/reset/validate.ts +0 -57
- package/src/modules/auth/commands/acl.ts +0 -495
- package/src/modules/auth/lib/userIdFilter.ts +0 -31
- package/src/modules/auth/services/principalService.ts +0 -266
- package/src/modules/auth/services/roleOrganizationScope.ts +0 -70
- package/src/modules/communication_channels/lib/outbound-recipient.ts +0 -71
- package/src/modules/communication_channels/lib/resolve-channel-type.ts +0 -99
- package/src/modules/customers/backend/customers/deals/pipeline/components/toneClasses.ts +0 -21
- package/src/modules/customers/lib/calendar/participantIdentity.ts +0 -17
- package/src/modules/customers/lib/closureStage.ts +0 -76
- package/src/modules/customers/lib/detailReadAccess.ts +0 -35
- package/src/modules/data_sync/lib/abandoned-run.ts +0 -56
- package/src/modules/devices/api/deviceSerialization.ts +0 -50
- package/src/modules/devices/backend/devices/useDeviceUserLabels.ts +0 -45
- package/src/modules/devices/backend/devices/userOptions.ts +0 -99
- package/src/modules/directory/services/organizationHierarchyService.ts +0 -34
- package/src/modules/directory/services/organizationScopeService.ts +0 -85
- package/src/modules/integrations/backend/integrations/credential-secret-fields.ts +0 -84
- package/src/modules/messages/lib/channel-sender-identity.ts +0 -55
- package/src/modules/messages/lib/composeSourceChannelType.ts +0 -95
- package/src/modules/query_index/lib/search-entity-policy.ts +0 -46
- package/src/modules/sales/components/documents/lineItemShipmentLock.ts +0 -74
- package/src/modules/sales/lib/salesChannelsToggleSeed.ts +0 -42
- package/src/modules/sales/migrations/Migration20260821120000_sales_notes_addresses_context_idx.ts +0 -87
- package/src/modules/wms/api/warehouseSearch.ts +0 -23
- package/src/modules/wms/components/backend/WarehouseEditDialog.tsx +0 -216
- package/src/modules/wms/components/backend/warehouseFormOptions.ts +0 -72
|
@@ -4,14 +4,12 @@ import { getCurrentCacheTenant, runWithCacheTenant } from '@open-mercato/cache'
|
|
|
4
4
|
import { UserAcl, RoleAcl, User, UserRole } from '@open-mercato/core/modules/auth/data/entities'
|
|
5
5
|
import { ApiKey } from '@open-mercato/core/modules/api_keys/data/entities'
|
|
6
6
|
import { findWithDecryption } from '@open-mercato/shared/lib/encryption/find'
|
|
7
|
-
import type { OrganizationHierarchyService } from '@open-mercato/shared/lib/auth/principal-service'
|
|
8
7
|
import { buildOrgScopeUserCacheTag, buildOrgScopeTenantCacheTag } from '@open-mercato/core/modules/directory/utils/organizationScope'
|
|
9
8
|
import {
|
|
10
9
|
authorizeFeatures,
|
|
11
10
|
resolveEffectiveFeatures,
|
|
12
11
|
} from '@open-mercato/shared/security/featurePolicy'
|
|
13
12
|
import { filterGrantsByEnabledModules } from '@open-mercato/shared/security/enabledModulesRegistry'
|
|
14
|
-
import { resolveRoleOrganizationScope, roleAclAllowsOrganization } from './roleOrganizationScope'
|
|
15
13
|
|
|
16
14
|
interface AclData {
|
|
17
15
|
isSuperAdmin: boolean
|
|
@@ -31,22 +29,12 @@ function isAclData(value: unknown): value is AclData {
|
|
|
31
29
|
return true
|
|
32
30
|
}
|
|
33
31
|
|
|
34
|
-
function isRestrictedRoleAcl(acl: Pick<RoleAcl, 'organizationsJson'>): boolean {
|
|
35
|
-
return Array.isArray(acl.organizationsJson)
|
|
36
|
-
&& acl.organizationsJson.length > 0
|
|
37
|
-
&& !acl.organizationsJson.includes('__all__')
|
|
38
|
-
}
|
|
39
|
-
|
|
40
32
|
export class RbacService {
|
|
41
33
|
private cacheTtlMs: number = 5 * 60 * 1000 // 5 minutes default
|
|
42
34
|
private cache: CacheStrategy | null = null
|
|
43
35
|
private globalSuperAdminCache = new Map<string, boolean>()
|
|
44
36
|
|
|
45
|
-
constructor(
|
|
46
|
-
private em: EntityManager,
|
|
47
|
-
cache?: CacheStrategy,
|
|
48
|
-
private readonly organizationHierarchyService?: OrganizationHierarchyService,
|
|
49
|
-
) {
|
|
37
|
+
constructor(private em: EntityManager, cache?: CacheStrategy) {
|
|
50
38
|
this.cache = cache || null
|
|
51
39
|
}
|
|
52
40
|
|
|
@@ -63,6 +51,13 @@ export class RbacService {
|
|
|
63
51
|
return authorizeFeatures(required, { grantedFeatures: granted })
|
|
64
52
|
}
|
|
65
53
|
|
|
54
|
+
private roleAclAllowsOrganization(acl: RoleAcl, organizationId: string | null | undefined): boolean {
|
|
55
|
+
if (!organizationId) return true
|
|
56
|
+
const organizations = Array.isArray(acl.organizationsJson) ? acl.organizationsJson : null
|
|
57
|
+
if (!organizations || !organizations.length || organizations.includes('__all__')) return true
|
|
58
|
+
return organizations.includes(organizationId)
|
|
59
|
+
}
|
|
60
|
+
|
|
66
61
|
private getCacheKey(userId: string, scope: { tenantId: string | null; organizationId: string | null }): string {
|
|
67
62
|
return `rbac:${userId}:${scope.tenantId || 'null'}:${scope.organizationId || 'null'}`
|
|
68
63
|
}
|
|
@@ -96,10 +91,6 @@ export class RbacService {
|
|
|
96
91
|
|
|
97
92
|
if (scope.tenantId) {
|
|
98
93
|
tags.push(this.getTenantTag(scope.tenantId))
|
|
99
|
-
// Scoped role projections depend on the selected organization's ancestor
|
|
100
|
-
// chain, so Directory hierarchy changes must evict them as well as the
|
|
101
|
-
// separately cached OrganizationScope entries.
|
|
102
|
-
tags.push(buildOrgScopeTenantCacheTag(scope.tenantId))
|
|
103
94
|
}
|
|
104
95
|
|
|
105
96
|
if (scope.organizationId) {
|
|
@@ -212,10 +203,8 @@ export class RbacService {
|
|
|
212
203
|
this.globalSuperAdminCache.set(userId, false)
|
|
213
204
|
return false
|
|
214
205
|
}
|
|
215
|
-
const
|
|
216
|
-
const result =
|
|
217
|
-
!!roleAcl.isSuperAdmin && !isRestrictedRoleAcl(roleAcl)
|
|
218
|
-
))
|
|
206
|
+
const roleSuper = await em.findOne(RoleAcl, { isSuperAdmin: true, role: { $in: roleIds as any } } as any)
|
|
207
|
+
const result = !!(roleSuper && (roleSuper as any).isSuperAdmin)
|
|
219
208
|
this.globalSuperAdminCache.set(userId, result)
|
|
220
209
|
return result
|
|
221
210
|
}
|
|
@@ -250,10 +239,6 @@ export class RbacService {
|
|
|
250
239
|
const cached = await this.getFromCache(cacheKey)
|
|
251
240
|
if (cached) return cached
|
|
252
241
|
|
|
253
|
-
// Direct user-level super-admin grants and unrestricted role-level
|
|
254
|
-
// super-admin grants are global. Organization-restricted role grants are
|
|
255
|
-
// deliberately excluded by isGlobalSuperAdmin and continue through the
|
|
256
|
-
// scoped ACL projection below.
|
|
257
242
|
if (!userId.startsWith('api_key:')) {
|
|
258
243
|
if (await this.isGlobalSuperAdmin(userId)) {
|
|
259
244
|
const result = { isSuperAdmin: true, features: ['*'], organizations: null }
|
|
@@ -273,71 +258,28 @@ export class RbacService {
|
|
|
273
258
|
}
|
|
274
259
|
const tenantId = scope.tenantId || key.tenantId || null
|
|
275
260
|
const roleIds = Array.isArray(key.rolesJson) ? key.rolesJson.filter(Boolean) : []
|
|
276
|
-
const keyOrganizationId = typeof key.organizationId === 'string' && key.organizationId.trim().length > 0
|
|
277
|
-
? key.organizationId.trim()
|
|
278
|
-
: null
|
|
279
|
-
const evaluatedOrganizationId = scope.organizationId || keyOrganizationId
|
|
280
261
|
let isSuper = false
|
|
281
262
|
const features: string[] = []
|
|
282
|
-
let
|
|
283
|
-
let hasApplicableRestrictedRole = false
|
|
263
|
+
let organizations: string[] | null = key.organizationId ? [key.organizationId] : null
|
|
284
264
|
if (tenantId && roleIds.length) {
|
|
285
|
-
const roleOrganizationScope = await resolveRoleOrganizationScope(
|
|
286
|
-
this.organizationHierarchyService,
|
|
287
|
-
tenantId,
|
|
288
|
-
evaluatedOrganizationId,
|
|
289
|
-
)
|
|
290
265
|
const racls = await em.find(RoleAcl, { tenantId, role: { $in: roleIds as any } } as any)
|
|
291
266
|
for (const acl of racls) {
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
for (const f of acl.featuresJson) if (!features.includes(f)) features.push(f)
|
|
296
|
-
}
|
|
297
|
-
if (isRestrictedRoleAcl(acl)) hasApplicableRestrictedRole = true
|
|
267
|
+
isSuper = isSuper || !!acl.isSuperAdmin
|
|
268
|
+
if (Array.isArray(acl.featuresJson)) {
|
|
269
|
+
for (const f of acl.featuresJson) if (!features.includes(f)) features.push(f)
|
|
298
270
|
}
|
|
299
|
-
if (
|
|
300
|
-
if (acl.organizationsJson == null
|
|
301
|
-
|
|
271
|
+
if (organizations !== null) {
|
|
272
|
+
if (acl.organizationsJson == null) {
|
|
273
|
+
organizations = null
|
|
302
274
|
} else if (Array.isArray(acl.organizationsJson) && acl.organizationsJson.includes('__all__')) {
|
|
303
|
-
|
|
275
|
+
organizations = null
|
|
304
276
|
} else {
|
|
305
|
-
|
|
306
|
-
...roleOrganizations,
|
|
307
|
-
...(Array.isArray(acl.organizationsJson) ? acl.organizationsJson : []),
|
|
308
|
-
]))
|
|
277
|
+
organizations = Array.from(new Set([...(organizations || []), ...acl.organizationsJson]))
|
|
309
278
|
}
|
|
310
279
|
}
|
|
311
280
|
}
|
|
312
|
-
if (
|
|
313
|
-
roleOrganizations !== null
|
|
314
|
-
&& evaluatedOrganizationId
|
|
315
|
-
&& roleOrganizationScope !== null
|
|
316
|
-
&& roleOrganizationScope.size > 0
|
|
317
|
-
&& hasApplicableRestrictedRole
|
|
318
|
-
&& !roleOrganizations.includes(evaluatedOrganizationId)
|
|
319
|
-
) {
|
|
320
|
-
roleOrganizations.push(evaluatedOrganizationId)
|
|
321
|
-
}
|
|
322
|
-
}
|
|
323
|
-
let organizations = roleOrganizations
|
|
324
|
-
if (keyOrganizationId) {
|
|
325
|
-
const keyOrganizationScope = await resolveRoleOrganizationScope(
|
|
326
|
-
this.organizationHierarchyService,
|
|
327
|
-
tenantId,
|
|
328
|
-
keyOrganizationId,
|
|
329
|
-
)
|
|
330
|
-
organizations = roleOrganizations === null
|
|
331
|
-
|| roleOrganizations.some((organizationId) => keyOrganizationScope?.has(organizationId))
|
|
332
|
-
? [keyOrganizationId]
|
|
333
|
-
: []
|
|
334
281
|
}
|
|
335
|
-
|
|
336
|
-
// organization allowlist. Represent it as a wildcard feature whenever
|
|
337
|
-
// the key is restricted so downstream super-admin shortcuts cannot
|
|
338
|
-
// bypass the key or role organization bounds.
|
|
339
|
-
if (isSuper && organizations !== null && !features.includes('*')) features.push('*')
|
|
340
|
-
const result = { isSuperAdmin: isSuper && organizations === null, features, organizations }
|
|
282
|
+
const result = { isSuperAdmin: isSuper, features, organizations }
|
|
341
283
|
await this.setCache(cacheKey, result, userId, scope)
|
|
342
284
|
return result
|
|
343
285
|
}
|
|
@@ -384,42 +326,18 @@ export class RbacService {
|
|
|
384
326
|
let isSuper = false
|
|
385
327
|
const features: string[] = []
|
|
386
328
|
let organizations: string[] | null = []
|
|
387
|
-
let hasApplicableRestrictedRole = false
|
|
388
329
|
if (roleIds.length) {
|
|
389
|
-
const roleOrganizationScope = await resolveRoleOrganizationScope(
|
|
390
|
-
this.organizationHierarchyService,
|
|
391
|
-
tenantId,
|
|
392
|
-
scope.organizationId,
|
|
393
|
-
)
|
|
394
330
|
const racls = await em.find(RoleAcl, { tenantId, role: { $in: roleIds as any } } as any, {})
|
|
395
331
|
const roleAcls = Array.isArray(racls) ? racls : []
|
|
396
332
|
for (const r of roleAcls) {
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
if (Array.isArray(r.featuresJson)) for (const f of r.featuresJson) if (!features.includes(f)) features.push(f)
|
|
400
|
-
if (isRestrictedRoleAcl(r)) hasApplicableRestrictedRole = true
|
|
401
|
-
}
|
|
333
|
+
isSuper = isSuper || !!r.isSuperAdmin
|
|
334
|
+
if (Array.isArray(r.featuresJson)) for (const f of r.featuresJson) if (!features.includes(f)) features.push(f)
|
|
402
335
|
if (organizations !== null) {
|
|
403
|
-
// For a user principal an empty allowlist is a deny-all scope (#4033), not
|
|
404
|
-
// "unrestricted": it must merge to an empty set so scoped reads and deletes
|
|
405
|
-
// fail closed. Only an absent allowlist or an explicit '__all__' widens to
|
|
406
|
-
// every organization. (The API-key branch above deliberately differs — an
|
|
407
|
-
// empty role list there means the key inherits the key's own scope.)
|
|
408
336
|
if (r.organizationsJson == null) organizations = null
|
|
409
337
|
else if (Array.isArray(r.organizationsJson) && r.organizationsJson.includes('__all__')) organizations = null
|
|
410
338
|
else organizations = Array.from(new Set([...(organizations || []), ...r.organizationsJson]))
|
|
411
339
|
}
|
|
412
340
|
}
|
|
413
|
-
if (
|
|
414
|
-
organizations !== null
|
|
415
|
-
&& scope.organizationId
|
|
416
|
-
&& roleOrganizationScope !== null
|
|
417
|
-
&& roleOrganizationScope.size > 0
|
|
418
|
-
&& hasApplicableRestrictedRole
|
|
419
|
-
&& !organizations.includes(scope.organizationId)
|
|
420
|
-
) {
|
|
421
|
-
organizations.push(scope.organizationId)
|
|
422
|
-
}
|
|
423
341
|
}
|
|
424
342
|
if (organizations && orgId && !organizations.includes(orgId) && !organizations.includes('__all__')) {
|
|
425
343
|
// Out-of-scope org; caller will enforce
|
|
@@ -443,16 +361,12 @@ export class RbacService {
|
|
|
443
361
|
if (!tenantId || !feature) return false
|
|
444
362
|
|
|
445
363
|
const em = this.em.fork()
|
|
446
|
-
const roleOrganizationScope = await resolveRoleOrganizationScope(
|
|
447
|
-
this.organizationHierarchyService,
|
|
448
|
-
tenantId,
|
|
449
|
-
opts?.organizationId,
|
|
450
|
-
)
|
|
451
364
|
const roleAcls = await em.find(RoleAcl, { tenantId, deletedAt: null } as any, {})
|
|
452
365
|
const list = Array.isArray(roleAcls) ? roleAcls : []
|
|
366
|
+
const organizationId = opts?.organizationId ?? null
|
|
453
367
|
|
|
454
368
|
for (const acl of list) {
|
|
455
|
-
if (!roleAclAllowsOrganization(acl,
|
|
369
|
+
if (!this.roleAclAllowsOrganization(acl, organizationId)) continue
|
|
456
370
|
const grants = Array.isArray(acl.featuresJson) ? acl.featuresJson : []
|
|
457
371
|
if (authorizeFeatures([feature], {
|
|
458
372
|
grantedFeatures: grants,
|
|
@@ -38,7 +38,6 @@ type LogsResponse = {
|
|
|
38
38
|
items: RuleExecutionLog[]
|
|
39
39
|
total: number
|
|
40
40
|
totalPages: number
|
|
41
|
-
totalIsCapped?: boolean
|
|
42
41
|
}
|
|
43
42
|
|
|
44
43
|
export default function ExecutionLogsPage() {
|
|
@@ -46,7 +45,6 @@ export default function ExecutionLogsPage() {
|
|
|
46
45
|
const [pageSize] = React.useState(50)
|
|
47
46
|
const [total, setTotal] = React.useState(0)
|
|
48
47
|
const [totalPages, setTotalPages] = React.useState(1)
|
|
49
|
-
const [totalIsCapped, setTotalIsCapped] = React.useState(false)
|
|
50
48
|
const t = useT()
|
|
51
49
|
const [filterValues, setFilterValues] = React.useState<FilterValues>({})
|
|
52
50
|
|
|
@@ -78,7 +76,6 @@ export default function ExecutionLogsPage() {
|
|
|
78
76
|
if (response) {
|
|
79
77
|
setTotal(response.total || 0)
|
|
80
78
|
setTotalPages(response.totalPages || 1)
|
|
81
|
-
setTotalIsCapped(response?.totalIsCapped === true)
|
|
82
79
|
}
|
|
83
80
|
|
|
84
81
|
return response?.items || []
|
|
@@ -249,7 +246,7 @@ export default function ExecutionLogsPage() {
|
|
|
249
246
|
onFiltersClear={handleFiltersClear}
|
|
250
247
|
isLoading={isLoading}
|
|
251
248
|
error={error ? t('business_rules.logs.messages.loadFailed') : undefined}
|
|
252
|
-
pagination={{ page, pageSize, total, totalPages,
|
|
249
|
+
pagination={{ page, pageSize, total, totalPages, onPageChange: setPage }}
|
|
253
250
|
/>
|
|
254
251
|
</PageBody>
|
|
255
252
|
</Page>
|
|
@@ -1,5 +1,10 @@
|
|
|
1
1
|
export const metadata = {
|
|
2
2
|
pageTitle: 'Edit Business Rule',
|
|
3
|
+
pageTitleKey: 'business_rules.rules.edit.title',
|
|
3
4
|
requireAuth: true,
|
|
4
5
|
requireFeatures: ['business_rules.manage'],
|
|
6
|
+
breadcrumb: [
|
|
7
|
+
{ label: 'Business Rules', labelKey: 'rules.nav.rules' },
|
|
8
|
+
{ label: 'Edit Business Rule', labelKey: 'business_rules.rules.edit.title' },
|
|
9
|
+
],
|
|
5
10
|
}
|
|
@@ -2,7 +2,11 @@ export const metadata = {
|
|
|
2
2
|
requireAuth: true,
|
|
3
3
|
requireFeatures: ['business_rules.manage'],
|
|
4
4
|
pageTitle: 'Create Business Rule',
|
|
5
|
+
pageTitleKey: 'business_rules.rules.create.title',
|
|
5
6
|
pageGroup: 'Business Rules',
|
|
6
7
|
pageGroupKey: 'rules.nav.group',
|
|
7
|
-
breadcrumb: [
|
|
8
|
+
breadcrumb: [
|
|
9
|
+
{ label: 'Business Rules', labelKey: 'rules.nav.rules' },
|
|
10
|
+
{ label: 'Create Business Rule', labelKey: 'business_rules.rules.create.title' },
|
|
11
|
+
],
|
|
8
12
|
}
|
|
@@ -42,7 +42,6 @@ type RulesResponse = {
|
|
|
42
42
|
items: Rule[]
|
|
43
43
|
total: number
|
|
44
44
|
totalPages: number
|
|
45
|
-
totalIsCapped?: boolean
|
|
46
45
|
}
|
|
47
46
|
|
|
48
47
|
export default function RulesListPage() {
|
|
@@ -50,7 +49,6 @@ export default function RulesListPage() {
|
|
|
50
49
|
const [pageSize] = React.useState(20)
|
|
51
50
|
const [total, setTotal] = React.useState(0)
|
|
52
51
|
const [totalPages, setTotalPages] = React.useState(1)
|
|
53
|
-
const [totalIsCapped, setTotalIsCapped] = React.useState(false)
|
|
54
52
|
const t = useT()
|
|
55
53
|
const router = useRouter()
|
|
56
54
|
const queryClient = useQueryClient()
|
|
@@ -84,7 +82,6 @@ export default function RulesListPage() {
|
|
|
84
82
|
if (response) {
|
|
85
83
|
setTotal(response.total || 0)
|
|
86
84
|
setTotalPages(response.totalPages || 1)
|
|
87
|
-
setTotalIsCapped(response?.totalIsCapped === true)
|
|
88
85
|
}
|
|
89
86
|
|
|
90
87
|
return response?.items || []
|
|
@@ -355,7 +352,7 @@ export default function RulesListPage() {
|
|
|
355
352
|
createLabel={t('business_rules.actions.create')}
|
|
356
353
|
/>
|
|
357
354
|
)}
|
|
358
|
-
pagination={{ page, pageSize, total, totalPages,
|
|
355
|
+
pagination={{ page, pageSize, total, totalPages, onPageChange: setPage }}
|
|
359
356
|
/>
|
|
360
357
|
</PageBody>
|
|
361
358
|
{ConfirmDialogElement}
|
|
@@ -1,5 +1,10 @@
|
|
|
1
1
|
export const metadata = {
|
|
2
2
|
pageTitle: 'Edit Rule Set',
|
|
3
|
+
pageTitleKey: 'business_rules.sets.edit.title',
|
|
3
4
|
requireAuth: true,
|
|
4
5
|
requireFeatures: ['business_rules.manage_sets'],
|
|
6
|
+
breadcrumb: [
|
|
7
|
+
{ label: 'Rule Sets', labelKey: 'rules.nav.sets' },
|
|
8
|
+
{ label: 'Edit Rule Set', labelKey: 'business_rules.sets.edit.title' },
|
|
9
|
+
],
|
|
5
10
|
}
|
|
@@ -2,7 +2,11 @@ export const metadata = {
|
|
|
2
2
|
requireAuth: true,
|
|
3
3
|
requireFeatures: ['business_rules.manage_sets'],
|
|
4
4
|
pageTitle: 'Create Rule Set',
|
|
5
|
+
pageTitleKey: 'business_rules.sets.create.title',
|
|
5
6
|
pageGroup: 'Business Rules',
|
|
6
7
|
pageGroupKey: 'rules.nav.group',
|
|
7
|
-
breadcrumb: [
|
|
8
|
+
breadcrumb: [
|
|
9
|
+
{ label: 'Rule Sets', labelKey: 'rules.nav.sets' },
|
|
10
|
+
{ label: 'Create Rule Set', labelKey: 'business_rules.sets.create.title' },
|
|
11
|
+
],
|
|
8
12
|
}
|
|
@@ -35,7 +35,6 @@ type RuleSetsResponse = {
|
|
|
35
35
|
items: RuleSet[]
|
|
36
36
|
total: number
|
|
37
37
|
totalPages: number
|
|
38
|
-
totalIsCapped?: boolean
|
|
39
38
|
}
|
|
40
39
|
|
|
41
40
|
export default function RuleSetsListPage() {
|
|
@@ -43,7 +42,6 @@ export default function RuleSetsListPage() {
|
|
|
43
42
|
const [pageSize] = React.useState(20)
|
|
44
43
|
const [total, setTotal] = React.useState(0)
|
|
45
44
|
const [totalPages, setTotalPages] = React.useState(1)
|
|
46
|
-
const [totalIsCapped, setTotalIsCapped] = React.useState(false)
|
|
47
45
|
const t = useT()
|
|
48
46
|
const router = useRouter()
|
|
49
47
|
const queryClient = useQueryClient()
|
|
@@ -74,7 +72,6 @@ export default function RuleSetsListPage() {
|
|
|
74
72
|
if (response) {
|
|
75
73
|
setTotal(response.total || 0)
|
|
76
74
|
setTotalPages(response.totalPages || 1)
|
|
77
|
-
setTotalIsCapped(response?.totalIsCapped === true)
|
|
78
75
|
}
|
|
79
76
|
|
|
80
77
|
return response?.items || []
|
|
@@ -261,7 +258,7 @@ export default function RuleSetsListPage() {
|
|
|
261
258
|
createLabel={t('business_rules.sets.actions.create')}
|
|
262
259
|
/>
|
|
263
260
|
)}
|
|
264
|
-
pagination={{ page, pageSize, total, totalPages,
|
|
261
|
+
pagination={{ page, pageSize, total, totalPages, onPageChange: setPage }}
|
|
265
262
|
/>
|
|
266
263
|
</PageBody>
|
|
267
264
|
{ConfirmDialogElement}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { ComparisonOperator, LogicalOperator } from '../data/validators'
|
|
2
2
|
import { testLinearRegex } from '@open-mercato/shared/lib/regex/linear'
|
|
3
3
|
import { getNestedValue, resolveSpecialValue } from './value-resolver'
|
|
4
|
-
import { createLogger
|
|
4
|
+
import { createLogger } from '@open-mercato/shared/lib/logger'
|
|
5
5
|
|
|
6
6
|
const logger = createLogger('business_rules').child({ component: 'expression-evaluator' })
|
|
7
7
|
|
|
@@ -86,14 +86,14 @@ function evaluateSimpleCondition(
|
|
|
86
86
|
|
|
87
87
|
const result = applyOperator(leftValue, condition.operator, rightValue)
|
|
88
88
|
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
}
|
|
89
|
+
logger.debug('Simple condition evaluated', {
|
|
90
|
+
field: condition.field,
|
|
91
|
+
operator: condition.operator,
|
|
92
|
+
expectedValue: rightValue,
|
|
93
|
+
actualValue: leftValue,
|
|
94
|
+
actualValueType: typeof leftValue,
|
|
95
|
+
passed: result,
|
|
96
|
+
})
|
|
97
97
|
|
|
98
98
|
return result
|
|
99
99
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { BusinessRule } from '../data/entities'
|
|
2
2
|
import { evaluateExpression, type EvaluationContext, type ConditionExpression } from './expression-evaluator'
|
|
3
|
-
import { createLogger
|
|
3
|
+
import { createLogger } from '@open-mercato/shared/lib/logger'
|
|
4
4
|
|
|
5
5
|
const logger = createLogger('business_rules').child({ component: 'rule-evaluator' })
|
|
6
6
|
|
|
@@ -105,15 +105,14 @@ export async function evaluateSingleRule(
|
|
|
105
105
|
): Promise<SingleRuleResult> {
|
|
106
106
|
const startTime = Date.now()
|
|
107
107
|
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
}
|
|
108
|
+
logger.debug('Evaluating rule', {
|
|
109
|
+
ruleId: rule.ruleId,
|
|
110
|
+
ruleName: rule.ruleName,
|
|
111
|
+
ruleType: rule.ruleType,
|
|
112
|
+
entityType: rule.entityType,
|
|
113
|
+
eventType: rule.eventType,
|
|
114
|
+
conditions: rule.conditionExpression,
|
|
115
|
+
})
|
|
117
116
|
|
|
118
117
|
try {
|
|
119
118
|
// Check if rule is enabled
|
|
@@ -407,7 +407,7 @@ const MERCHANDISING_PROMPT_SECTIONS: PromptSection[] = [
|
|
|
407
407
|
'- Selection-first: if `pageContext.recordId` contains a non-empty comma-separated UUID list (or `pageContext.extra.selectedCount > 0`), the operator has selected rows in the grid and EXPECTS you to act on those first. Call catalog.list_selected_products with those IDs, present what you found, and THEN ask whether to expand to the full catalog or to a broader search. Do NOT silently fall back to catalog.search_products when a selection is present.',
|
|
408
408
|
'- "list products" with no selection → call catalog.search_products with NO parameters (returns all active products, paginated; default limit=50, max=100).',
|
|
409
409
|
'- User mentions a product name → call catalog.search_products with q=that name.',
|
|
410
|
-
'- If catalog.search_products
|
|
410
|
+
'- If catalog.search_products returns more rows than the page (i.e. `total` > `limit + offset`), say so and offer to fetch the next page; do NOT raise `limit` above 100.',
|
|
411
411
|
'Present results first, then offer refinement options. The user does NOT want to answer questions before seeing data.',
|
|
412
412
|
].join('\n'),
|
|
413
413
|
},
|
|
@@ -97,7 +97,7 @@ function resolveSearchService(ctx: CatalogToolContext): SearchServiceLike | null
|
|
|
97
97
|
const searchProductsInput = z
|
|
98
98
|
.object({
|
|
99
99
|
q: z.string().trim().optional().describe('Optional fulltext query (title / subtitle / sku / handle). Omit or leave empty (or do NOT pass it at all) to list all products. NEVER use "*", "**", or "%" — they are not wildcards and will be discarded.'),
|
|
100
|
-
limit: z.number().int().min(1).max(100).optional().describe('Page size. Default 50, hard maximum 100. Results are paginated:
|
|
100
|
+
limit: z.number().int().min(1).max(100).optional().describe('Page size. Default 50, hard maximum 100. Results are paginated: when `total` exceeds `limit + offset`, call again with the next `offset` instead of asking for more than 100 rows.'),
|
|
101
101
|
offset: z.number().int().min(0).optional().describe('Rows to skip for pagination (default 0). Combine with `limit` to fetch subsequent pages — for example offset=100, limit=100 fetches rows 101..200.'),
|
|
102
102
|
categoryId: z.string().optional().describe('Restrict to products assigned to this catalog category UUID. Only use a category ID returned by a previous tool call — do NOT guess. Empty string is treated the same as omitting the field.'),
|
|
103
103
|
priceMin: z.number().optional().describe('Lower-bound (inclusive) on the gross unit price. OMIT this field when you do not want a lower bound — do NOT pass 0 as "no minimum", because 0 is a real bound that combined with priceMax=0 will return only free products.'),
|
|
@@ -266,7 +266,7 @@ const searchProductsTool: CatalogAiToolDefinition = {
|
|
|
266
266
|
displayName: 'Search products',
|
|
267
267
|
description:
|
|
268
268
|
'Hybrid search + filter across tenant products. When `q` is non-empty, routes through the search service (tenant + organization scoped) then hydrates tenant-scoped product summaries; when `q` is empty or omitted, runs the catalog query engine with the supplied filters and returns ALL products. ' +
|
|
269
|
-
'Pagination: response shape is `{ items, total,
|
|
269
|
+
'Pagination: response shape is `{ items, total, limit, offset, source }`. Hard cap is 100 rows per call (`limit` max=100, default=50); if `total` exceeds `limit + offset`, call again with the next `offset` rather than asking for >100. ' +
|
|
270
270
|
'Empty / sentinel inputs: pass an empty `q` (or omit it) to list all products. NEVER pass `0` for `priceMin`/`priceMax` to mean "no bound" — `0` is a real numeric bound (priceMin=0 + priceMax=0 returns only free products). To remove a bound, OMIT the field. Empty string `categoryId` and empty `tags` arrays are ignored. ' +
|
|
271
271
|
'`source` in the output indicates which path executed (`search_service` vs `query_engine`).',
|
|
272
272
|
inputSchema: searchProductsInput,
|
|
@@ -73,8 +73,6 @@ export interface MerchandisingPageContext {
|
|
|
73
73
|
extra: {
|
|
74
74
|
filter: MerchandisingPageContextFilter
|
|
75
75
|
totalMatching: number
|
|
76
|
-
/** `totalMatching` is a floor, not an exact count (server-capped list count). */
|
|
77
|
-
totalMatchingIsCapped?: boolean
|
|
78
76
|
selectedCount: number
|
|
79
77
|
}
|
|
80
78
|
}
|
|
@@ -183,7 +181,7 @@ function useContextItems(pageContext: MerchandisingPageContext): AiChatContextIt
|
|
|
183
181
|
const t = useT()
|
|
184
182
|
return React.useMemo(() => {
|
|
185
183
|
const items: AiChatContextItem[] = []
|
|
186
|
-
const { selectedCount, totalMatching,
|
|
184
|
+
const { selectedCount, totalMatching, filter } = pageContext.extra
|
|
187
185
|
if (selectedCount > 0) {
|
|
188
186
|
items.push({
|
|
189
187
|
label: t(
|
|
@@ -193,15 +191,10 @@ function useContextItems(pageContext: MerchandisingPageContext): AiChatContextIt
|
|
|
193
191
|
})
|
|
194
192
|
} else if (totalMatching > 0) {
|
|
195
193
|
items.push({
|
|
196
|
-
label:
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
).replace('{count}', String(totalMatching))
|
|
201
|
-
: t(
|
|
202
|
-
'catalog.merchandising_assistant.context.matchingProducts',
|
|
203
|
-
'{count} products in view',
|
|
204
|
-
).replace('{count}', String(totalMatching)),
|
|
194
|
+
label: t(
|
|
195
|
+
'catalog.merchandising_assistant.context.matchingProducts',
|
|
196
|
+
'{count} products in view',
|
|
197
|
+
).replace('{count}', String(totalMatching)),
|
|
205
198
|
})
|
|
206
199
|
}
|
|
207
200
|
if (filter.categoryId) {
|
|
@@ -39,7 +39,6 @@ type CategoriesResponse = {
|
|
|
39
39
|
page: number
|
|
40
40
|
pageSize: number
|
|
41
41
|
totalPages: number
|
|
42
|
-
totalIsCapped?: boolean
|
|
43
42
|
}
|
|
44
43
|
|
|
45
44
|
const PAGE_SIZE = 50
|
|
@@ -115,7 +114,6 @@ export default function CategoriesDataTable() {
|
|
|
115
114
|
const rows = data?.items ?? []
|
|
116
115
|
const total = data?.total ?? 0
|
|
117
116
|
const totalPages = data?.totalPages ?? 0
|
|
118
|
-
const totalIsCapped = data?.totalIsCapped === true
|
|
119
117
|
|
|
120
118
|
const columns = React.useMemo<ColumnDef<CategoryRow>[]>(() => [
|
|
121
119
|
{
|
|
@@ -251,7 +249,6 @@ export default function CategoriesDataTable() {
|
|
|
251
249
|
pageSize: PAGE_SIZE,
|
|
252
250
|
total,
|
|
253
251
|
totalPages,
|
|
254
|
-
totalIsCapped,
|
|
255
252
|
onPageChange: setPage,
|
|
256
253
|
}}
|
|
257
254
|
isLoading={isLoading}
|
|
@@ -86,7 +86,6 @@ type ProductsResponse = {
|
|
|
86
86
|
items?: ProductRow[]
|
|
87
87
|
total?: number
|
|
88
88
|
totalPages?: number
|
|
89
|
-
totalIsCapped?: boolean
|
|
90
89
|
}
|
|
91
90
|
|
|
92
91
|
const PAGE_SIZE = 25
|
|
@@ -178,7 +177,6 @@ export default function ProductsDataTable({
|
|
|
178
177
|
const [page, setPage] = React.useState(1)
|
|
179
178
|
const [total, setTotal] = React.useState(0)
|
|
180
179
|
const [totalPages, setTotalPages] = React.useState(1)
|
|
181
|
-
const [totalIsCapped, setTotalIsCapped] = React.useState(false)
|
|
182
180
|
const [cacheStatus, setCacheStatus] = React.useState<'hit' | 'miss' | null>(null)
|
|
183
181
|
const [sorting, setSorting] = React.useState<SortingState>([{ id: 'title', desc: false }])
|
|
184
182
|
const [search, setSearch] = React.useState('')
|
|
@@ -600,7 +598,6 @@ export default function ProductsDataTable({
|
|
|
600
598
|
setRows(normalized)
|
|
601
599
|
setTotal(typeof payload.total === 'number' ? payload.total : normalized.length)
|
|
602
600
|
setTotalPages(typeof payload.totalPages === 'number' ? payload.totalPages : 1)
|
|
603
|
-
setTotalIsCapped(payload.totalIsCapped === true)
|
|
604
601
|
} catch (error) {
|
|
605
602
|
if (!cancelled) {
|
|
606
603
|
setCacheStatus(null)
|
|
@@ -715,16 +712,12 @@ export default function ProductsDataTable({
|
|
|
715
712
|
// dependency on the host page.
|
|
716
713
|
total,
|
|
717
714
|
totalMatching: total,
|
|
718
|
-
// `total` is a floor when the server capped the count, so the
|
|
719
|
-
// merchandising widget must not present it as an exact match count.
|
|
720
|
-
totalIsCapped,
|
|
721
715
|
}}
|
|
722
716
|
pagination={{
|
|
723
717
|
page,
|
|
724
718
|
pageSize: PAGE_SIZE,
|
|
725
719
|
total,
|
|
726
720
|
totalPages,
|
|
727
|
-
totalIsCapped,
|
|
728
721
|
onPageChange: setPage,
|
|
729
722
|
cacheStatus,
|
|
730
723
|
}}
|
|
@@ -90,7 +90,6 @@
|
|
|
90
90
|
"catalog.merchandising_assistant.agents.merchandising.label": "Merchandising-Assistent",
|
|
91
91
|
"catalog.merchandising_assistant.context.filteredByCategory": "Filtered by category",
|
|
92
92
|
"catalog.merchandising_assistant.context.matchingProducts": "{count} Produkte in der Ansicht",
|
|
93
|
-
"catalog.merchandising_assistant.context.matchingProductsCapped": "{count}+ Produkte in der Ansicht",
|
|
94
93
|
"catalog.merchandising_assistant.context.selectedProducts": "{count} Produkte ausgewählt",
|
|
95
94
|
"catalog.merchandising_assistant.context.tags": "{count} tags",
|
|
96
95
|
"catalog.merchandising_assistant.dock.subtitle": "Catalog",
|
|
@@ -90,7 +90,6 @@
|
|
|
90
90
|
"catalog.merchandising_assistant.agents.merchandising.label": "Merchandising Assistant",
|
|
91
91
|
"catalog.merchandising_assistant.context.filteredByCategory": "Filtered by category",
|
|
92
92
|
"catalog.merchandising_assistant.context.matchingProducts": "{count} products in view",
|
|
93
|
-
"catalog.merchandising_assistant.context.matchingProductsCapped": "{count}+ products in view",
|
|
94
93
|
"catalog.merchandising_assistant.context.selectedProducts": "{count} products selected",
|
|
95
94
|
"catalog.merchandising_assistant.context.tags": "{count} tags",
|
|
96
95
|
"catalog.merchandising_assistant.dock.subtitle": "Catalog",
|
|
@@ -90,7 +90,6 @@
|
|
|
90
90
|
"catalog.merchandising_assistant.agents.merchandising.label": "Asistente de Merchandising",
|
|
91
91
|
"catalog.merchandising_assistant.context.filteredByCategory": "Filtered by category",
|
|
92
92
|
"catalog.merchandising_assistant.context.matchingProducts": "{count} productos en la vista",
|
|
93
|
-
"catalog.merchandising_assistant.context.matchingProductsCapped": "{count}+ productos en la vista",
|
|
94
93
|
"catalog.merchandising_assistant.context.selectedProducts": "{count} productos seleccionados",
|
|
95
94
|
"catalog.merchandising_assistant.context.tags": "{count} tags",
|
|
96
95
|
"catalog.merchandising_assistant.dock.subtitle": "Catalog",
|
|
@@ -90,7 +90,6 @@
|
|
|
90
90
|
"catalog.merchandising_assistant.agents.merchandising.label": "머천다이징 어시스턴트",
|
|
91
91
|
"catalog.merchandising_assistant.context.filteredByCategory": "카테고리로 필터링됨",
|
|
92
92
|
"catalog.merchandising_assistant.context.matchingProducts": "{count} 제품 보기",
|
|
93
|
-
"catalog.merchandising_assistant.context.matchingProductsCapped": "조회 중 {count}+개 제품",
|
|
94
93
|
"catalog.merchandising_assistant.context.selectedProducts": "{count} 제품 선택됨",
|
|
95
94
|
"catalog.merchandising_assistant.context.tags": "태그 {count}개",
|
|
96
95
|
"catalog.merchandising_assistant.dock.subtitle": "카탈로그",
|
|
@@ -90,7 +90,6 @@
|
|
|
90
90
|
"catalog.merchandising_assistant.agents.merchandising.label": "Asystent merchandisingu",
|
|
91
91
|
"catalog.merchandising_assistant.context.filteredByCategory": "Filtrowane po kategorii",
|
|
92
92
|
"catalog.merchandising_assistant.context.matchingProducts": "{count} produktów w widoku",
|
|
93
|
-
"catalog.merchandising_assistant.context.matchingProductsCapped": "{count}+ produktów w widoku",
|
|
94
93
|
"catalog.merchandising_assistant.context.selectedProducts": "Wybrano {count} produktów",
|
|
95
94
|
"catalog.merchandising_assistant.context.tags": "Tagi: {count}",
|
|
96
95
|
"catalog.merchandising_assistant.dock.subtitle": "Katalog",
|