@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
|
@@ -17,6 +17,8 @@ import {
|
|
|
17
17
|
CustomerDealCompanyLink,
|
|
18
18
|
CustomerDeal,
|
|
19
19
|
CustomerTodoLink,
|
|
20
|
+
CustomerPersonCompanyLink,
|
|
21
|
+
CustomerPersonProfile,
|
|
20
22
|
CustomerInteraction,
|
|
21
23
|
} from '../../../data/entities'
|
|
22
24
|
import { User } from '@open-mercato/core/modules/auth/data/entities'
|
|
@@ -45,12 +47,11 @@ import type { OpenApiRouteDoc } from '@open-mercato/shared/lib/openapi'
|
|
|
45
47
|
import { findOneWithDecryption, findWithDecryption } from '@open-mercato/shared/lib/encryption/find'
|
|
46
48
|
import { parseBooleanFromUnknown } from '@open-mercato/shared/lib/boolean'
|
|
47
49
|
import {
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
} from '../../../lib/personCompanies'
|
|
50
|
+
filterActivePersonCompanyLinks,
|
|
51
|
+
withActiveCustomerPersonCompanyLinkFilter,
|
|
52
|
+
} from '../../../lib/personCompanyLinkTable'
|
|
52
53
|
import { normalizeCustomerDetailCustomFields } from '../../detailCustomFields'
|
|
53
|
-
import {
|
|
54
|
+
import { isOrganizationReadAccessAllowed } from '@open-mercato/core/modules/directory/utils/organizationScopeGuard'
|
|
54
55
|
import { runWithCacheTenant } from '@open-mercato/cache'
|
|
55
56
|
import {
|
|
56
57
|
buildCollectionTags,
|
|
@@ -145,6 +146,10 @@ function parseIncludeParams(request: Request): Set<string> {
|
|
|
145
146
|
return tokens
|
|
146
147
|
}
|
|
147
148
|
|
|
149
|
+
function forbidden(message: string) {
|
|
150
|
+
return NextResponse.json({ error: message }, { status: 403 })
|
|
151
|
+
}
|
|
152
|
+
|
|
148
153
|
function notFound(message: string) {
|
|
149
154
|
return NextResponse.json({ error: message }, { status: 404 })
|
|
150
155
|
}
|
|
@@ -458,16 +463,9 @@ export async function GET(_req: Request, ctx: { params?: { id?: string } }) {
|
|
|
458
463
|
)
|
|
459
464
|
if (!company) return notFound('Company not found')
|
|
460
465
|
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
// collapses to a uniform 404 not-found. The dispatcher already returns a
|
|
465
|
-
// uniform 403 for callers who lack the feature entirely.
|
|
466
|
-
const organizationReadDenied = denyCustomerDetailReadAsNotFound(
|
|
467
|
-
{ scope, auth, organizationId: company.organizationId },
|
|
468
|
-
'Company not found',
|
|
469
|
-
)
|
|
470
|
-
if (organizationReadDenied) return organizationReadDenied
|
|
466
|
+
if (!isOrganizationReadAccessAllowed({ scope, auth, organizationId: company.organizationId })) {
|
|
467
|
+
return forbidden('Access denied')
|
|
468
|
+
}
|
|
471
469
|
|
|
472
470
|
const companyScope = {
|
|
473
471
|
tenantId: company.tenantId ?? auth.tenantId ?? null,
|
|
@@ -803,13 +801,79 @@ export async function GET(_req: Request, ctx: { params?: { id?: string } }) {
|
|
|
803
801
|
deal.organizationId === company.organizationId,
|
|
804
802
|
)
|
|
805
803
|
|
|
806
|
-
|
|
807
|
-
|
|
808
|
-
|
|
809
|
-
|
|
810
|
-
|
|
804
|
+
let relatedPeople: Array<{
|
|
805
|
+
entity: CustomerEntity
|
|
806
|
+
profile: CustomerPersonProfile | null
|
|
807
|
+
linkedAt: string | null
|
|
808
|
+
}> = []
|
|
811
809
|
if (includePeople) {
|
|
812
|
-
|
|
810
|
+
const peopleDecryptionScope = {
|
|
811
|
+
tenantId: company.tenantId ?? auth.tenantId ?? null,
|
|
812
|
+
organizationId: company.organizationId ?? scope?.selectedId ?? auth.orgId ?? null,
|
|
813
|
+
}
|
|
814
|
+
const relatedPeopleById = new Map<
|
|
815
|
+
string,
|
|
816
|
+
{ entity: CustomerEntity; profile: CustomerPersonProfile | null; linkedAt: string | null }
|
|
817
|
+
>()
|
|
818
|
+
const companyLinkWhere = await withActiveCustomerPersonCompanyLinkFilter(
|
|
819
|
+
em,
|
|
820
|
+
{
|
|
821
|
+
company: company.id,
|
|
822
|
+
organizationId: company.organizationId,
|
|
823
|
+
tenantId: company.tenantId,
|
|
824
|
+
},
|
|
825
|
+
'customers.companies.GET',
|
|
826
|
+
)
|
|
827
|
+
const companyLinks = filterActivePersonCompanyLinks(
|
|
828
|
+
await findWithDecryption(
|
|
829
|
+
em,
|
|
830
|
+
CustomerPersonCompanyLink,
|
|
831
|
+
companyLinkWhere,
|
|
832
|
+
{
|
|
833
|
+
populate: ['person', 'person.personProfile'],
|
|
834
|
+
orderBy: { isPrimary: 'desc', createdAt: 'asc' },
|
|
835
|
+
},
|
|
836
|
+
peopleDecryptionScope,
|
|
837
|
+
),
|
|
838
|
+
)
|
|
839
|
+
companyLinks.forEach((link) => {
|
|
840
|
+
const entity = typeof link.person === 'string' ? null : link.person
|
|
841
|
+
if (!entity || entity.kind !== 'person' || entity.deletedAt) return
|
|
842
|
+
const personProfile =
|
|
843
|
+
entity.personProfile && typeof entity.personProfile !== 'string'
|
|
844
|
+
? entity.personProfile
|
|
845
|
+
: null
|
|
846
|
+
relatedPeopleById.set(entity.id, {
|
|
847
|
+
entity,
|
|
848
|
+
profile: personProfile,
|
|
849
|
+
linkedAt: link.createdAt instanceof Date ? link.createdAt.toISOString() : null,
|
|
850
|
+
})
|
|
851
|
+
})
|
|
852
|
+
|
|
853
|
+
const profiles = await findWithDecryption(
|
|
854
|
+
em,
|
|
855
|
+
CustomerPersonProfile,
|
|
856
|
+
{
|
|
857
|
+
company: company.id,
|
|
858
|
+
tenantId: company.tenantId,
|
|
859
|
+
organizationId: company.organizationId,
|
|
860
|
+
entity: { deletedAt: null },
|
|
861
|
+
},
|
|
862
|
+
{ populate: ['entity'] },
|
|
863
|
+
peopleDecryptionScope,
|
|
864
|
+
)
|
|
865
|
+
profiles.forEach((entry) => {
|
|
866
|
+
const entity = entry.entity as CustomerEntity | null
|
|
867
|
+
if (!entity || entity.kind !== 'person' || entity.deletedAt) return
|
|
868
|
+
if (!relatedPeopleById.has(entity.id)) {
|
|
869
|
+
relatedPeopleById.set(entity.id, {
|
|
870
|
+
entity,
|
|
871
|
+
profile: entry ?? null,
|
|
872
|
+
linkedAt: entry.createdAt instanceof Date ? entry.createdAt.toISOString() : null,
|
|
873
|
+
})
|
|
874
|
+
}
|
|
875
|
+
})
|
|
876
|
+
relatedPeople = Array.from(relatedPeopleById.values())
|
|
813
877
|
}
|
|
814
878
|
|
|
815
879
|
// Entity custom fields, profile custom fields, and the routing lookup do not
|
|
@@ -855,7 +919,26 @@ export async function GET(_req: Request, ctx: { params?: { id?: string } }) {
|
|
|
855
919
|
// instead of a waterfall (issue #3203).
|
|
856
920
|
const peopleCountQuery = includePeople
|
|
857
921
|
? Promise.resolve(relatedPeople.length)
|
|
858
|
-
:
|
|
922
|
+
: (async () => {
|
|
923
|
+
const peopleLinkWhere = await withActiveCustomerPersonCompanyLinkFilter(
|
|
924
|
+
em,
|
|
925
|
+
{
|
|
926
|
+
company: company.id,
|
|
927
|
+
organizationId: company.organizationId,
|
|
928
|
+
tenantId: company.tenantId,
|
|
929
|
+
},
|
|
930
|
+
'customers.companies.GET',
|
|
931
|
+
)
|
|
932
|
+
return filterActivePersonCompanyLinks(
|
|
933
|
+
await findWithDecryption(
|
|
934
|
+
em,
|
|
935
|
+
CustomerPersonCompanyLink,
|
|
936
|
+
peopleLinkWhere,
|
|
937
|
+
{},
|
|
938
|
+
{ tenantId: company.tenantId, organizationId: company.organizationId },
|
|
939
|
+
),
|
|
940
|
+
).length
|
|
941
|
+
})()
|
|
859
942
|
const [
|
|
860
943
|
activityCount,
|
|
861
944
|
interactionCount,
|
|
@@ -1403,8 +1486,8 @@ export const openApi: OpenApiRouteDoc = {
|
|
|
1403
1486
|
errors: [
|
|
1404
1487
|
{ status: 400, description: 'Invalid identifier', schema: companyDetailErrorSchema },
|
|
1405
1488
|
{ status: 401, description: 'Unauthorized', schema: companyDetailErrorSchema },
|
|
1406
|
-
{ status: 403, description: 'Forbidden
|
|
1407
|
-
{ status: 404, description: 'Company not found
|
|
1489
|
+
{ status: 403, description: 'Forbidden for tenant/organization scope', schema: companyDetailErrorSchema },
|
|
1490
|
+
{ status: 404, description: 'Company not found', schema: companyDetailErrorSchema },
|
|
1408
1491
|
],
|
|
1409
1492
|
},
|
|
1410
1493
|
},
|
|
@@ -28,10 +28,7 @@ export const metadata = {
|
|
|
28
28
|
|
|
29
29
|
type WidgetContext = WidgetScopeContext & { limit: number }
|
|
30
30
|
|
|
31
|
-
async function resolveContext(
|
|
32
|
-
req: Request,
|
|
33
|
-
translate: (key: string, fallback?: string) => string,
|
|
34
|
-
): Promise<WidgetContext> {
|
|
31
|
+
async function resolveContext(req: Request, translate: (key: string, fallback?: string) => string): Promise<WidgetContext> {
|
|
35
32
|
const url = new URL(req.url)
|
|
36
33
|
const rawQuery: Record<string, string> = {}
|
|
37
34
|
for (const [key, value] of url.searchParams.entries()) {
|
|
@@ -42,18 +39,16 @@ async function resolveContext(
|
|
|
42
39
|
throw new CrudHttpError(400, { error: translate('customers.errors.invalid_query', 'Invalid query parameters') })
|
|
43
40
|
}
|
|
44
41
|
|
|
45
|
-
const { container, em, tenantId, organizationIds
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
})
|
|
42
|
+
const { container, em, tenantId, organizationIds } = await resolveWidgetScope(req, translate, {
|
|
43
|
+
tenantId: parsed.data.tenantId ?? null,
|
|
44
|
+
organizationId: parsed.data.organizationId ?? null,
|
|
45
|
+
})
|
|
50
46
|
|
|
51
47
|
return {
|
|
52
48
|
container,
|
|
53
49
|
em,
|
|
54
50
|
tenantId,
|
|
55
51
|
organizationIds,
|
|
56
|
-
isUnrestrictedOrganizationScope,
|
|
57
52
|
limit: parsed.data.limit,
|
|
58
53
|
}
|
|
59
54
|
}
|
|
@@ -61,8 +56,7 @@ async function resolveContext(
|
|
|
61
56
|
export async function GET(req: Request) {
|
|
62
57
|
const { translate } = await resolveTranslations()
|
|
63
58
|
try {
|
|
64
|
-
const { container, em, tenantId, organizationIds,
|
|
65
|
-
await resolveContext(req, translate)
|
|
59
|
+
const { container, em, tenantId, organizationIds, limit } = await resolveContext(req, translate)
|
|
66
60
|
const auth = {
|
|
67
61
|
tenantId,
|
|
68
62
|
orgId: organizationIds?.[0] ?? null,
|
|
@@ -70,7 +64,6 @@ export async function GET(req: Request) {
|
|
|
70
64
|
}
|
|
71
65
|
const flags = await resolveCustomerInteractionFeatureFlags(container, tenantId)
|
|
72
66
|
const mergedWindow = Math.min(limit * 4, 50)
|
|
73
|
-
const isUnrestricted = isUnrestrictedOrganizationScope === true
|
|
74
67
|
const rows = flags.unified
|
|
75
68
|
? (await listCanonicalTodoRows(
|
|
76
69
|
em,
|
|
@@ -78,7 +71,7 @@ export async function GET(req: Request) {
|
|
|
78
71
|
auth,
|
|
79
72
|
organizationIds?.[0] ?? null,
|
|
80
73
|
organizationIds ?? null,
|
|
81
|
-
{ pagination: { page: 1, pageSize: limit }
|
|
74
|
+
{ pagination: { page: 1, pageSize: limit } },
|
|
82
75
|
)).items
|
|
83
76
|
: await Promise.all([
|
|
84
77
|
listLegacyTodoRows(
|
|
@@ -87,7 +80,7 @@ export async function GET(req: Request) {
|
|
|
87
80
|
tenantId,
|
|
88
81
|
organizationIds ?? null,
|
|
89
82
|
undefined,
|
|
90
|
-
{ limit: mergedWindow
|
|
83
|
+
{ limit: mergedWindow },
|
|
91
84
|
),
|
|
92
85
|
listCanonicalTodoRows(
|
|
93
86
|
em,
|
|
@@ -98,7 +91,6 @@ export async function GET(req: Request) {
|
|
|
98
91
|
{
|
|
99
92
|
includeDeleted: true,
|
|
100
93
|
limit: mergedWindow,
|
|
101
|
-
isUnrestricted,
|
|
102
94
|
},
|
|
103
95
|
),
|
|
104
96
|
]).then(([legacyRows, canonicalRows]) =>
|
|
@@ -101,11 +101,8 @@ export async function GET(req: Request, ctx: { params?: { id?: string } }) {
|
|
|
101
101
|
throw notFound(translate('customers.errors.deal_not_found', 'Deal not found'))
|
|
102
102
|
}
|
|
103
103
|
|
|
104
|
-
// Existence oracle (#5504): deny a cross-org read as not-found — identical to
|
|
105
|
-
// the parent-not-found above — so it cannot reveal that a deal exists in an
|
|
106
|
-
// organization the caller cannot see.
|
|
107
104
|
if (!isOrganizationReadAccessAllowed({ scope, auth, organizationId: deal.organizationId })) {
|
|
108
|
-
throw
|
|
105
|
+
throw new CrudHttpError(403, { error: translate('customers.errors.access_denied', 'Access denied') })
|
|
109
106
|
}
|
|
110
107
|
|
|
111
108
|
const entityScope = { tenantId: deal.tenantId, organizationId: deal.organizationId }
|
|
@@ -102,11 +102,8 @@ export async function GET(req: Request, ctx: { params?: { id?: string } }) {
|
|
|
102
102
|
throw notFound(translate('customers.errors.deal_not_found', 'Deal not found'))
|
|
103
103
|
}
|
|
104
104
|
|
|
105
|
-
// Existence oracle (#5504): deny a cross-org read as not-found — identical to
|
|
106
|
-
// the parent-not-found above — so it cannot reveal that a deal exists in an
|
|
107
|
-
// organization the caller cannot see.
|
|
108
105
|
if (!isOrganizationReadAccessAllowed({ scope, auth, organizationId: deal.organizationId })) {
|
|
109
|
-
throw
|
|
106
|
+
throw new CrudHttpError(403, { error: translate('customers.errors.access_denied', 'Access denied') })
|
|
110
107
|
}
|
|
111
108
|
|
|
112
109
|
const entityScope = { tenantId: deal.tenantId, organizationId: deal.organizationId }
|
|
@@ -19,9 +19,10 @@ import type { ActionLogService } from '@open-mercato/core/modules/audit_logs/ser
|
|
|
19
19
|
import { loadCustomFieldValues } from '@open-mercato/shared/lib/crud/custom-fields'
|
|
20
20
|
import { normalizeCustomFieldResponse } from '@open-mercato/shared/lib/custom-fields/normalize'
|
|
21
21
|
import { E } from '#generated/entities.ids.generated'
|
|
22
|
+
import type { RbacService } from '@open-mercato/core/modules/auth/services/rbacService'
|
|
22
23
|
import type { OpenApiRouteDoc } from '@open-mercato/shared/lib/openapi'
|
|
23
24
|
import { findWithDecryption, findOneWithDecryption } from '@open-mercato/shared/lib/encryption/find'
|
|
24
|
-
import {
|
|
25
|
+
import { isOrganizationReadAccessAllowed } from '@open-mercato/core/modules/directory/utils/organizationScopeGuard'
|
|
25
26
|
import { decryptEntitiesWithFallbackScope } from '@open-mercato/shared/lib/encryption/subscriber'
|
|
26
27
|
import { runWithCacheTenant } from '@open-mercato/cache'
|
|
27
28
|
import {
|
|
@@ -46,6 +47,10 @@ function notFound(message: string) {
|
|
|
46
47
|
return NextResponse.json({ error: message }, { status: 404 })
|
|
47
48
|
}
|
|
48
49
|
|
|
50
|
+
function forbidden(message: string) {
|
|
51
|
+
return NextResponse.json({ error: message }, { status: 403 })
|
|
52
|
+
}
|
|
53
|
+
|
|
49
54
|
type DealAssociation = {
|
|
50
55
|
id: string
|
|
51
56
|
label: string
|
|
@@ -411,10 +416,23 @@ export async function GET(request: Request, context: { params?: Record<string, u
|
|
|
411
416
|
return NextResponse.json({ error: 'Authentication required' }, { status: 401 })
|
|
412
417
|
}
|
|
413
418
|
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
419
|
+
let rbac: RbacService | null = null
|
|
420
|
+
try {
|
|
421
|
+
rbac = (container.resolve('rbacService') as RbacService)
|
|
422
|
+
} catch {
|
|
423
|
+
rbac = null
|
|
424
|
+
}
|
|
425
|
+
|
|
426
|
+
if (!rbac || !auth?.sub) {
|
|
427
|
+
return forbidden('Access denied')
|
|
428
|
+
}
|
|
429
|
+
const hasFeature = await rbac.userHasAllFeatures(auth.sub, ['customers.deals.view'], {
|
|
430
|
+
tenantId: auth.tenantId ?? null,
|
|
431
|
+
organizationId: auth.orgId ?? null,
|
|
432
|
+
})
|
|
433
|
+
if (!hasFeature) {
|
|
434
|
+
return forbidden('Access denied')
|
|
435
|
+
}
|
|
418
436
|
|
|
419
437
|
const scope = await resolveOrganizationScopeForRequest({ container, auth, request })
|
|
420
438
|
const em = (container.resolve('em') as EntityManager)
|
|
@@ -436,16 +454,9 @@ export async function GET(request: Request, context: { params?: Record<string, u
|
|
|
436
454
|
return notFound('Deal not found')
|
|
437
455
|
}
|
|
438
456
|
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
// uniform 404 not-found. The dispatcher already returns a uniform 403 for
|
|
443
|
-
// callers who lack the feature entirely.
|
|
444
|
-
const organizationReadDenied = denyCustomerDetailReadAsNotFound(
|
|
445
|
-
{ scope, auth, organizationId: deal.organizationId },
|
|
446
|
-
'Deal not found',
|
|
447
|
-
)
|
|
448
|
-
if (organizationReadDenied) return organizationReadDenied
|
|
457
|
+
if (!isOrganizationReadAccessAllowed({ scope, auth, organizationId: deal.organizationId })) {
|
|
458
|
+
return forbidden('Access denied')
|
|
459
|
+
}
|
|
449
460
|
|
|
450
461
|
const decryptionScope = {
|
|
451
462
|
tenantId: deal.tenantId ?? auth.tenantId ?? null,
|
|
@@ -966,8 +977,8 @@ export const openApi: OpenApiRouteDoc = {
|
|
|
966
977
|
],
|
|
967
978
|
errors: [
|
|
968
979
|
{ status: 401, description: 'Unauthorized', schema: dealDetailErrorSchema },
|
|
969
|
-
{ status: 403, description: 'Forbidden
|
|
970
|
-
{ status: 404, description: 'Deal not found
|
|
980
|
+
{ status: 403, description: 'Forbidden for tenant/organization scope', schema: dealDetailErrorSchema },
|
|
981
|
+
{ status: 404, description: 'Deal not found', schema: dealDetailErrorSchema },
|
|
971
982
|
],
|
|
972
983
|
},
|
|
973
984
|
},
|
|
@@ -7,6 +7,7 @@ import { resolveTranslations } from '@open-mercato/shared/lib/i18n/server'
|
|
|
7
7
|
import type { EntityManager } from '@mikro-orm/postgresql'
|
|
8
8
|
import { CustomerDeal, CustomerPipeline } from '../../../../data/entities'
|
|
9
9
|
import { DictionaryEntry } from '@open-mercato/core/modules/dictionaries/data/entities'
|
|
10
|
+
import type { RbacService } from '@open-mercato/core/modules/auth/services/rbacService'
|
|
10
11
|
import type { OpenApiRouteDoc } from '@open-mercato/shared/lib/openapi'
|
|
11
12
|
import { findOneWithDecryption } from '@open-mercato/shared/lib/encryption/find'
|
|
12
13
|
import { isOrganizationReadAccessAllowed } from '@open-mercato/core/modules/directory/utils/organizationScopeGuard'
|
|
@@ -23,6 +24,10 @@ function notFound(message: string) {
|
|
|
23
24
|
return NextResponse.json({ error: message }, { status: 404 })
|
|
24
25
|
}
|
|
25
26
|
|
|
27
|
+
function forbidden(message: string) {
|
|
28
|
+
return NextResponse.json({ error: message }, { status: 403 })
|
|
29
|
+
}
|
|
30
|
+
|
|
26
31
|
function badRequest(message: string, code?: string) {
|
|
27
32
|
return NextResponse.json(
|
|
28
33
|
code ? { error: message, code } : { error: message },
|
|
@@ -62,10 +67,23 @@ export async function GET(request: Request, context: { params?: Record<string, u
|
|
|
62
67
|
return NextResponse.json({ error: translate('customers.errors.authentication_required', 'Authentication required') }, { status: 401 })
|
|
63
68
|
}
|
|
64
69
|
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
70
|
+
let rbac: RbacService | null = null
|
|
71
|
+
try {
|
|
72
|
+
rbac = (container.resolve('rbacService') as RbacService)
|
|
73
|
+
} catch {
|
|
74
|
+
rbac = null
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
if (!rbac || !auth?.sub) {
|
|
78
|
+
return forbidden(translate('customers.errors.access_denied', 'Access denied'))
|
|
79
|
+
}
|
|
80
|
+
const hasFeature = await rbac.userHasAllFeatures(auth.sub, ['customers.deals.view'], {
|
|
81
|
+
tenantId: auth.tenantId ?? null,
|
|
82
|
+
organizationId: auth.orgId ?? null,
|
|
83
|
+
})
|
|
84
|
+
if (!hasFeature) {
|
|
85
|
+
return forbidden(translate('customers.errors.access_denied', 'Access denied'))
|
|
86
|
+
}
|
|
69
87
|
|
|
70
88
|
const scope = await resolveOrganizationScopeForRequest({ container, auth, request })
|
|
71
89
|
const em = (container.resolve('em') as EntityManager)
|
|
@@ -80,11 +98,8 @@ export async function GET(request: Request, context: { params?: Record<string, u
|
|
|
80
98
|
return notFound(translate('customers.errors.deal_not_found', 'Deal not found'))
|
|
81
99
|
}
|
|
82
100
|
|
|
83
|
-
// Existence oracle (#5504): deny a cross-org read as not-found — identical to
|
|
84
|
-
// the deal-not-found above — so it cannot reveal that a deal exists in an
|
|
85
|
-
// organization the caller cannot see.
|
|
86
101
|
if (!isOrganizationReadAccessAllowed({ scope, auth, organizationId: deal.organizationId })) {
|
|
87
|
-
return
|
|
102
|
+
return forbidden(translate('customers.errors.access_denied', 'Access denied'))
|
|
88
103
|
}
|
|
89
104
|
|
|
90
105
|
if (!deal.closureOutcome) {
|
|
@@ -191,8 +206,8 @@ export const openApi: OpenApiRouteDoc = {
|
|
|
191
206
|
errors: [
|
|
192
207
|
{ status: 400, description: 'Deal is not closed', schema: dealStatsErrorSchema },
|
|
193
208
|
{ status: 401, description: 'Unauthorized', schema: dealStatsErrorSchema },
|
|
194
|
-
{ status: 403, description: 'Forbidden
|
|
195
|
-
{ status: 404, description: 'Deal not found
|
|
209
|
+
{ status: 403, description: 'Forbidden for tenant/organization scope', schema: dealStatsErrorSchema },
|
|
210
|
+
{ status: 404, description: 'Deal not found', schema: dealStatsErrorSchema },
|
|
196
211
|
],
|
|
197
212
|
},
|
|
198
213
|
},
|
|
@@ -14,7 +14,6 @@ import type { CrudCtx } from '@open-mercato/shared/lib/crud/factory'
|
|
|
14
14
|
import { isTenantDataEncryptionEnabled } from '@open-mercato/shared/lib/encryption/toggles'
|
|
15
15
|
import type { OpenApiRouteDoc } from '@open-mercato/shared/lib/openapi'
|
|
16
16
|
import { fetchStuckDealIds } from '../../../lib/stuckDeals'
|
|
17
|
-
import { expandDealStatusAliases } from '../../../lib/dealStatus'
|
|
18
17
|
import { findMatchingEntityIdsBySearchTokensAcrossSources } from '../../utils'
|
|
19
18
|
import { E } from '#generated/entities.ids.generated'
|
|
20
19
|
import { createLogger } from '@open-mercato/shared/lib/logger'
|
|
@@ -28,7 +27,7 @@ export const metadata = {
|
|
|
28
27
|
const querySchema = z.object({
|
|
29
28
|
pipelineId: z.string().uuid().optional(),
|
|
30
29
|
search: z.string().optional(),
|
|
31
|
-
status: z.array(z.
|
|
30
|
+
status: z.array(z.enum(['open', 'closed', 'win', 'loose'])).optional(),
|
|
32
31
|
ownerUserId: z.array(z.string().uuid()).optional(),
|
|
33
32
|
personId: z.array(z.string().uuid()).optional(),
|
|
34
33
|
companyId: z.array(z.string().uuid()).optional(),
|
|
@@ -248,11 +247,9 @@ export async function GET(req: Request) {
|
|
|
248
247
|
}
|
|
249
248
|
}
|
|
250
249
|
if (parsed.data.status && parsed.data.status.length) {
|
|
251
|
-
|
|
252
|
-
const expandedStatuses = expandDealStatusAliases(parsed.data.status)
|
|
253
|
-
const placeholders = expandedStatuses.map(() => '?').join(',')
|
|
250
|
+
const placeholders = parsed.data.status.map(() => '?').join(',')
|
|
254
251
|
where.push(`status IN (${placeholders})`)
|
|
255
|
-
values.push(...
|
|
252
|
+
values.push(...parsed.data.status)
|
|
256
253
|
}
|
|
257
254
|
if (parsed.data.ownerUserId && parsed.data.ownerUserId.length) {
|
|
258
255
|
const placeholders = parsed.data.ownerUserId.map(() => '?').join(',')
|
|
@@ -268,14 +265,7 @@ export async function GET(req: Request) {
|
|
|
268
265
|
values.push(parsed.data.expectedCloseAtTo)
|
|
269
266
|
}
|
|
270
267
|
if (parsed.data.isOverdue) {
|
|
271
|
-
|
|
272
|
-
// status='open' is injected only when none was provided.
|
|
273
|
-
const hasCallerStatus = !!parsed.data.status?.length
|
|
274
|
-
if (hasCallerStatus) {
|
|
275
|
-
where.push('expected_close_at < CURRENT_DATE')
|
|
276
|
-
} else {
|
|
277
|
-
where.push("expected_close_at < CURRENT_DATE AND status = 'open'")
|
|
278
|
-
}
|
|
268
|
+
where.push("expected_close_at < CURRENT_DATE AND status = 'open'")
|
|
279
269
|
}
|
|
280
270
|
if (parsed.data.isStuck) {
|
|
281
271
|
// Reuse the list endpoint's stuck-deal lookup so kanban headers, lane counts, and the
|
|
@@ -22,9 +22,7 @@ import { findWithDecryption } from '@open-mercato/shared/lib/encryption/find'
|
|
|
22
22
|
import { isTenantDataEncryptionEnabled } from '@open-mercato/shared/lib/encryption/toggles'
|
|
23
23
|
import { escapeLikePattern } from '@open-mercato/shared/lib/db/escapeLikePattern'
|
|
24
24
|
import { consumeAdvancedFilterState, mergeAdvancedFilterTree } from '@open-mercato/shared/lib/crud/advanced-filter-integration'
|
|
25
|
-
import type { FilterGroup, FilterRule } from '@open-mercato/shared/lib/query/advanced-filter-tree'
|
|
26
25
|
import { fetchStuckDealIds } from '../../lib/stuckDeals'
|
|
27
|
-
import { expandDealStatusAliases } from '../../lib/dealStatus'
|
|
28
26
|
import { createLogger } from '@open-mercato/shared/lib/logger'
|
|
29
27
|
|
|
30
28
|
const logger = createLogger('customers')
|
|
@@ -33,19 +31,6 @@ const rawBodySchema = z.object({}).passthrough()
|
|
|
33
31
|
|
|
34
32
|
const stringOrStringArray = z.union([z.string(), z.array(z.string())])
|
|
35
33
|
const OPEN_DEAL_STATUSES = ['open', 'in_progress'] as const
|
|
36
|
-
// Tree operators whose `status` values are rewritten through the canonical vocabulary.
|
|
37
|
-
// Text (`contains`/`starts_with`/…) and range (`between`) operators are left untouched
|
|
38
|
-
// so a URL-supplied rule keeps its scalar semantics.
|
|
39
|
-
const STATUS_TREE_OPERATORS = new Set([
|
|
40
|
-
'is',
|
|
41
|
-
'equals',
|
|
42
|
-
'is_not',
|
|
43
|
-
'not_equals',
|
|
44
|
-
'is_any_of',
|
|
45
|
-
'has_any_of',
|
|
46
|
-
'is_none_of',
|
|
47
|
-
'has_none_of',
|
|
48
|
-
])
|
|
49
34
|
const booleanQueryParam = z.preprocess((value) => {
|
|
50
35
|
const parsed = parseBooleanFromUnknown(value)
|
|
51
36
|
return parsed === null ? value : parsed
|
|
@@ -260,39 +245,6 @@ function normalizeUuidList(values: Array<unknown>): string[] {
|
|
|
260
245
|
|
|
261
246
|
export async function buildDealListFilters(query: DealListQuery, ctx?: import('@open-mercato/shared/lib/crud/factory').CrudCtx) {
|
|
262
247
|
const advancedFilterTree = consumeAdvancedFilterState(query)
|
|
263
|
-
if (advancedFilterTree) {
|
|
264
|
-
// Expand status aliases in the advanced-filter tree so List (tree path) and
|
|
265
|
-
// Kanban (plain ?status=) share the same canonical vocabulary (#5107). Only
|
|
266
|
-
// set-membership operators are rewritten — text/range operators on `status`
|
|
267
|
-
// keep their pre-existing scalar semantics instead of being corrupted.
|
|
268
|
-
const walk = (node: FilterGroup | FilterRule): void => {
|
|
269
|
-
if (node.type === 'rule' && node.field === 'status' && STATUS_TREE_OPERATORS.has(node.operator)) {
|
|
270
|
-
const listOperators = new Set(['is_any_of', 'has_any_of', 'is_none_of', 'has_none_of'])
|
|
271
|
-
const rawValues: string[] = Array.isArray(node.value)
|
|
272
|
-
? (node.value as unknown[]).filter((v): v is string => typeof v === 'string')
|
|
273
|
-
: typeof node.value === 'string'
|
|
274
|
-
? [node.value]
|
|
275
|
-
: []
|
|
276
|
-
if (rawValues.length === 0) return
|
|
277
|
-
const expanded = expandDealStatusAliases(rawValues)
|
|
278
|
-
if (listOperators.has(node.operator)) {
|
|
279
|
-
node.value = expanded
|
|
280
|
-
} else if (expanded.length === 1) {
|
|
281
|
-
node.value = expanded[0]
|
|
282
|
-
} else {
|
|
283
|
-
node.value = expanded
|
|
284
|
-
if (node.operator === 'is' || node.operator === 'equals') {
|
|
285
|
-
node.operator = 'is_any_of'
|
|
286
|
-
} else if (node.operator === 'is_not' || node.operator === 'not_equals') {
|
|
287
|
-
node.operator = 'is_none_of'
|
|
288
|
-
}
|
|
289
|
-
}
|
|
290
|
-
} else if (node.type === 'group') {
|
|
291
|
-
for (const child of node.children) walk(child)
|
|
292
|
-
}
|
|
293
|
-
}
|
|
294
|
-
walk(advancedFilterTree.root)
|
|
295
|
-
}
|
|
296
248
|
const filters: Record<string, unknown> = {}
|
|
297
249
|
let restrictedIds: string[] | null = null
|
|
298
250
|
|
|
@@ -348,8 +300,7 @@ export async function buildDealListFilters(query: DealListQuery, ctx?: import('@
|
|
|
348
300
|
}
|
|
349
301
|
}
|
|
350
302
|
|
|
351
|
-
const
|
|
352
|
-
const statusList = expandDealStatusAliases(rawStatusList)
|
|
303
|
+
const statusList = query.status ? normalizeStringList(query.status) : []
|
|
353
304
|
if (statusList.length > 0) {
|
|
354
305
|
filters.status = statusList.length === 1 ? { $eq: statusList[0] } : { $in: statusList }
|
|
355
306
|
}
|
|
@@ -77,14 +77,10 @@ function ensureRouteOrganizationAccess(
|
|
|
77
77
|
organizationId: string,
|
|
78
78
|
scope: Awaited<ReturnType<typeof resolveCustomersRequestContext>>['scope'],
|
|
79
79
|
auth: Awaited<ReturnType<typeof resolveCustomersRequestContext>>['auth'],
|
|
80
|
-
|
|
80
|
+
translate: Translator,
|
|
81
81
|
) {
|
|
82
|
-
// Existence oracle (#5504): a caller who holds the feature but whose scope
|
|
83
|
-
// excludes the record's organization is denied as not-found (the same response
|
|
84
|
-
// the caller gets for a missing record), so this cannot reveal that the record
|
|
85
|
-
// exists in an organization they cannot see.
|
|
86
82
|
if (!isOrganizationReadAccessAllowed({ scope, auth, organizationId })) {
|
|
87
|
-
throw
|
|
83
|
+
throw new CrudHttpError(403, { error: translate('customers.errors.access_denied', 'Access denied') })
|
|
88
84
|
}
|
|
89
85
|
}
|
|
90
86
|
|
|
@@ -136,7 +132,7 @@ async function resolveEntityRouteScope(
|
|
|
136
132
|
if (!entity || entity.tenantId !== auth.tenantId) {
|
|
137
133
|
throw notFound(translate('customers.errors.customer_not_found', 'Customer not found'))
|
|
138
134
|
}
|
|
139
|
-
ensureRouteOrganizationAccess(entity.organizationId, scope, auth, translate
|
|
135
|
+
ensureRouteOrganizationAccess(entity.organizationId, scope, auth, translate)
|
|
140
136
|
return {
|
|
141
137
|
entity,
|
|
142
138
|
organizationId: entity.organizationId,
|
|
@@ -168,7 +164,7 @@ async function resolveRoleRouteScope(
|
|
|
168
164
|
) {
|
|
169
165
|
throw notFound(translate('customers.errors.role_not_found', 'Role not found'))
|
|
170
166
|
}
|
|
171
|
-
ensureRouteOrganizationAccess(role.organizationId, scope, auth, translate
|
|
167
|
+
ensureRouteOrganizationAccess(role.organizationId, scope, auth, translate)
|
|
172
168
|
return {
|
|
173
169
|
role,
|
|
174
170
|
organizationId: role.organizationId,
|
|
@@ -180,7 +180,7 @@ type InteractionListRow = {
|
|
|
180
180
|
all_day: boolean | null
|
|
181
181
|
recurrence_rule: string | null
|
|
182
182
|
recurrence_end: Date | null
|
|
183
|
-
participants: Array<{ userId
|
|
183
|
+
participants: Array<{ userId: string; name?: string; email?: string; status?: string }> | null
|
|
184
184
|
reminder_minutes: number | null
|
|
185
185
|
visibility: string | null
|
|
186
186
|
linked_entities: Array<{ id: string; type: string; label: string }> | null
|
|
@@ -744,13 +744,7 @@ const interactionListItemSchema = z
|
|
|
744
744
|
recurrenceEnd: z.string().nullable().optional(),
|
|
745
745
|
participants: z.array(
|
|
746
746
|
z.object({
|
|
747
|
-
userId: z
|
|
748
|
-
.string()
|
|
749
|
-
.uuid()
|
|
750
|
-
.optional()
|
|
751
|
-
.describe(
|
|
752
|
-
'Absent for an external guest, who has no person/customer/staff record and is identified by email instead. Identify a participant by userId when present, otherwise by its normalized email.',
|
|
753
|
-
),
|
|
747
|
+
userId: z.string().uuid(),
|
|
754
748
|
name: z.string().optional(),
|
|
755
749
|
email: z.string().optional(),
|
|
756
750
|
status: z.string().optional(),
|