@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
package/src/modules/catalog/widgets/injection/merchandising-assistant-trigger/widget.client.tsx
CHANGED
|
@@ -31,8 +31,6 @@ interface HostInjectionContext {
|
|
|
31
31
|
scopeVersion?: unknown
|
|
32
32
|
total?: number | string
|
|
33
33
|
totalMatching?: number | string
|
|
34
|
-
/** `totalMatching` is a floor, not an exact count (server-capped list count). */
|
|
35
|
-
totalIsCapped?: boolean
|
|
36
34
|
/** Selected row IDs from DataTable (auto-enriched when bulk actions are present). */
|
|
37
35
|
selectedRowIds?: string[]
|
|
38
36
|
selectedCount?: number
|
|
@@ -85,7 +83,6 @@ export function computeCatalogMerchandisingPageContext(
|
|
|
85
83
|
context: HostInjectionContext | undefined,
|
|
86
84
|
): MerchandisingPageContext {
|
|
87
85
|
const totalMatching = readNumber(context?.totalMatching ?? context?.total)
|
|
88
|
-
const totalMatchingIsCapped = context?.totalIsCapped === true
|
|
89
86
|
const selectedRowIds = Array.isArray(context?.selectedRowIds) ? context.selectedRowIds : []
|
|
90
87
|
const selectedCount = selectedRowIds.length > 0 ? selectedRowIds.length : readNumber(context?.selectedCount)
|
|
91
88
|
return {
|
|
@@ -96,7 +93,6 @@ export function computeCatalogMerchandisingPageContext(
|
|
|
96
93
|
extra: {
|
|
97
94
|
filter: normalizeFilters(context),
|
|
98
95
|
totalMatching,
|
|
99
|
-
totalMatchingIsCapped,
|
|
100
96
|
selectedCount,
|
|
101
97
|
},
|
|
102
98
|
}
|
|
@@ -13,10 +13,6 @@ import {
|
|
|
13
13
|
channelOrgScopeWhere,
|
|
14
14
|
} from '../../../../../lib/access-control'
|
|
15
15
|
import { refreshCredentialsIfNeeded } from '../../../../../lib/credential-refresh'
|
|
16
|
-
import {
|
|
17
|
-
MAX_OUTBOUND_RECIPIENT_LENGTH,
|
|
18
|
-
validateOutboundRecipient,
|
|
19
|
-
} from '../../../../../lib/outbound-recipient'
|
|
20
16
|
import { validateRouteMutationGuard } from '../../../../../lib/route-mutation-guard'
|
|
21
17
|
|
|
22
18
|
type RbacServiceLike = {
|
|
@@ -37,15 +33,8 @@ export const metadata = {
|
|
|
37
33
|
},
|
|
38
34
|
}
|
|
39
35
|
|
|
40
|
-
// `to` is deliberately NOT typed as an email here. The recipient shape depends
|
|
41
|
-
// on the provider (an email address for Gmail/IMAP, a channel snowflake for
|
|
42
|
-
// Discord), and the adapter is only known once the channel is loaded — so the
|
|
43
|
-
// schema accepts any non-empty single-line string and `validateOutboundRecipient`
|
|
44
|
-
// applies the provider-appropriate rules below, defaulting to email. The CR/LF
|
|
45
|
-
// rejection stays at the schema level so a header-injection attempt is refused
|
|
46
|
-
// before the request reaches the channel lookup or the mutation guard.
|
|
47
36
|
const bodySchema = z.object({
|
|
48
|
-
to: z.string().
|
|
37
|
+
to: z.string().email(),
|
|
49
38
|
subject: z.string().min(1).max(500).optional(),
|
|
50
39
|
body: z.string().max(50_000).optional(),
|
|
51
40
|
})
|
|
@@ -181,11 +170,6 @@ export async function POST(req: Request, context: RouteContext): Promise<Respons
|
|
|
181
170
|
)
|
|
182
171
|
}
|
|
183
172
|
|
|
184
|
-
const recipientCheck = validateOutboundRecipient(body.to, adapter.capabilities)
|
|
185
|
-
if (!recipientCheck.ok) {
|
|
186
|
-
return NextResponse.json({ error: recipientCheck.error }, { status: 422 })
|
|
187
|
-
}
|
|
188
|
-
|
|
189
173
|
// Resolve credentials + optionally refresh.
|
|
190
174
|
let credentials: Record<string, unknown> = {}
|
|
191
175
|
let credentialsService: CredentialsServiceLike | null = null
|
|
@@ -20,16 +20,10 @@ import {
|
|
|
20
20
|
} from '../../../commands/connect-credential-channel'
|
|
21
21
|
import { emitCommunicationChannelsEvent } from '../../../events'
|
|
22
22
|
import {
|
|
23
|
-
TEST_SEED_CHAT_PROVIDER_KEY,
|
|
24
23
|
TEST_SEED_PROVIDER_KEY,
|
|
25
24
|
ensureTestSeedAdapterRegistered,
|
|
26
25
|
isTestChannelSeedingEnabled,
|
|
27
26
|
} from '../../../lib/test-seed'
|
|
28
|
-
import {
|
|
29
|
-
COMMUNICATION_CHANNELS_INGEST_INBOUND_COMMAND_ID,
|
|
30
|
-
type IngestInboundMessageInput,
|
|
31
|
-
type IngestInboundMessageResult,
|
|
32
|
-
} from '../../../commands/ingest-inbound-message'
|
|
33
27
|
|
|
34
28
|
/**
|
|
35
29
|
* TEST-ONLY channel seeding endpoint.
|
|
@@ -38,22 +32,15 @@ import {
|
|
|
38
32
|
* production default) every request returns 404, so this route is invisible and
|
|
39
33
|
* inert in production. See `lib/test-seed.ts` for the full rationale.
|
|
40
34
|
*
|
|
41
|
-
*
|
|
42
|
-
* - `connect-channel`: connect a network-free
|
|
43
|
-
* (delegates to the real connect-credential command so the channel
|
|
44
|
-
* credentials + lands in `status='connected'`). Enables the outbound
|
|
45
|
-
* compose → deliver → `.sent` chain to complete in CI.
|
|
46
|
-
* connects the non-email stub instead, for tests about sender identity.
|
|
47
|
-
* - `ingest-inbound`: run the REAL `ingest_inbound_message` command over an
|
|
48
|
-
* adapter-normalized chat frame, so the platform compose path — and every
|
|
49
|
-
* validation rule on it — actually executes. Use this for anything that
|
|
50
|
-
* claims inbound works.
|
|
35
|
+
* Two actions, both scoped to the caller's tenant/org:
|
|
36
|
+
* - `connect-channel`: connect a network-free `__test_seed__` channel owned by
|
|
37
|
+
* the caller (delegates to the real connect-credential command so the channel
|
|
38
|
+
* persists credentials + lands in `status='connected'`). Enables the outbound
|
|
39
|
+
* compose → deliver → `.sent` chain to complete in CI.
|
|
51
40
|
* - `emit-inbound`: insert an inbound `MessageChannelLink` (+ a `messages.message`
|
|
52
41
|
* row for threading) and emit `communication_channels.message.received` so the
|
|
53
42
|
* customers link-channel-message subscriber runs against real Postgres. Enables
|
|
54
|
-
* the inbound auto-link tests (TC-CRM-EMAIL-002..005).
|
|
55
|
-
* deliberately bypasses `messages.messages.compose` — it can never prove that
|
|
56
|
-
* the hub accepts a message, only that downstream subscribers fire.
|
|
43
|
+
* the inbound auto-link tests (TC-CRM-EMAIL-002..005).
|
|
57
44
|
*/
|
|
58
45
|
type RbacServiceLike = {
|
|
59
46
|
loadAcl: (
|
|
@@ -81,35 +68,6 @@ const connectChannelSchema = z.object({
|
|
|
81
68
|
action: z.literal('connect-channel'),
|
|
82
69
|
displayName: z.string().min(1).max(255).optional(),
|
|
83
70
|
externalIdentifier: z.string().min(1).max(255).optional(),
|
|
84
|
-
/**
|
|
85
|
-
* Which stub provider to connect. `email` (default) keeps the historical
|
|
86
|
-
* email-shaped channel; `chat` connects a channel whose senders have no
|
|
87
|
-
* address, so a test can exercise the hub's non-email identity contract
|
|
88
|
-
* without inventing one (#4975).
|
|
89
|
-
*/
|
|
90
|
-
providerFlavor: z.enum(['email', 'chat']).optional(),
|
|
91
|
-
})
|
|
92
|
-
|
|
93
|
-
/**
|
|
94
|
-
* Drive the REAL `ingest_inbound_message` command with a chat-shaped frame.
|
|
95
|
-
*
|
|
96
|
-
* `emit-inbound` below deliberately bypasses the platform compose path (it
|
|
97
|
-
* inserts the `messages` row with raw SQL) because it only ever needed a
|
|
98
|
-
* landing zone for the CRM-link subscribers. That bypass is why an inbound test
|
|
99
|
-
* could pass while `composeMessageSchema` rejected every real message (#4975).
|
|
100
|
-
* This action takes the opposite approach: it hands the frame to the adapter and
|
|
101
|
-
* the ingest command and asserts nothing on the way, so whatever the hub's
|
|
102
|
-
* contract really is, the test feels it.
|
|
103
|
-
*/
|
|
104
|
-
const ingestInboundSchema = z.object({
|
|
105
|
-
action: z.literal('ingest-inbound'),
|
|
106
|
-
channelId: z.string().uuid(),
|
|
107
|
-
/** Opaque sender handle — a Discord snowflake, a Slack member id, etc. */
|
|
108
|
-
senderIdentifier: z.string().min(1).max(255),
|
|
109
|
-
senderDisplayName: z.string().max(255).optional(),
|
|
110
|
-
body: z.string().max(50_000).optional(),
|
|
111
|
-
externalMessageId: z.string().min(1).max(255),
|
|
112
|
-
externalConversationId: z.string().min(1).max(255),
|
|
113
71
|
})
|
|
114
72
|
|
|
115
73
|
const emitInboundSchema = z.object({
|
|
@@ -145,11 +103,7 @@ const emitInboundSchema = z.object({
|
|
|
145
103
|
createThreadMapping: z.boolean().optional(),
|
|
146
104
|
})
|
|
147
105
|
|
|
148
|
-
const bodySchema = z.discriminatedUnion('action', [
|
|
149
|
-
connectChannelSchema,
|
|
150
|
-
ingestInboundSchema,
|
|
151
|
-
emitInboundSchema,
|
|
152
|
-
])
|
|
106
|
+
const bodySchema = z.discriminatedUnion('action', [connectChannelSchema, emitInboundSchema])
|
|
153
107
|
|
|
154
108
|
export async function POST(req: Request): Promise<Response> {
|
|
155
109
|
// Fail-closed: invisible in production. Mirrors an unknown route (404) rather
|
|
@@ -185,23 +139,13 @@ export async function POST(req: Request): Promise<Response> {
|
|
|
185
139
|
if (body.action === 'connect-channel') {
|
|
186
140
|
const stamp = Date.now()
|
|
187
141
|
const commandBus = container.resolve('commandBus') as CommandBus
|
|
188
|
-
const isChatFlavor = body.providerFlavor === 'chat'
|
|
189
|
-
// A chat channel is deliberately connected WITHOUT an email-ish credential
|
|
190
|
-
// key, so `connect-credential-channel` derives no `externalIdentifier` and
|
|
191
|
-
// the row is shaped exactly like a real Discord channel (identifier NULL —
|
|
192
|
-
// the condition #4977 describes). Inventing one here would recreate the
|
|
193
|
-
// fixture dishonesty that hid #4975.
|
|
194
|
-
const credentials = isChatFlavor
|
|
195
|
-
? { handle: body.externalIdentifier ?? `test-seed-chat-${stamp}` }
|
|
196
|
-
: {
|
|
197
|
-
username: body.externalIdentifier ?? `test-seed-${stamp}@test-seed.local`,
|
|
198
|
-
fromAddress: body.externalIdentifier ?? `test-seed-${stamp}@test-seed.local`,
|
|
199
|
-
}
|
|
200
142
|
const input: ConnectCredentialChannelInput = {
|
|
201
|
-
providerKey:
|
|
202
|
-
displayName:
|
|
203
|
-
|
|
204
|
-
|
|
143
|
+
providerKey: TEST_SEED_PROVIDER_KEY,
|
|
144
|
+
displayName: body.displayName ?? `Test Seed Channel ${stamp}`,
|
|
145
|
+
credentials: {
|
|
146
|
+
username: body.externalIdentifier ?? `test-seed-${stamp}@test-seed.local`,
|
|
147
|
+
fromAddress: body.externalIdentifier ?? `test-seed-${stamp}@test-seed.local`,
|
|
148
|
+
},
|
|
205
149
|
userId,
|
|
206
150
|
scope: { tenantId, organizationId },
|
|
207
151
|
}
|
|
@@ -230,12 +174,9 @@ export async function POST(req: Request): Promise<Response> {
|
|
|
230
174
|
)
|
|
231
175
|
}
|
|
232
176
|
|
|
233
|
-
// action === '
|
|
177
|
+
// action === 'emit-inbound'
|
|
234
178
|
const em = (container.resolve('em') as EntityManager).fork()
|
|
235
|
-
|
|
236
|
-
// rows it seeds; `ingest-inbound` takes the channel's own (see below).
|
|
237
|
-
const providerKey =
|
|
238
|
-
body.action === 'emit-inbound' ? body.providerKey ?? TEST_SEED_PROVIDER_KEY : TEST_SEED_PROVIDER_KEY
|
|
179
|
+
const providerKey = body.providerKey ?? TEST_SEED_PROVIDER_KEY
|
|
239
180
|
|
|
240
181
|
// `channelId` is caller-supplied, so confirm it names a channel this tenant/org
|
|
241
182
|
// actually owns before seeding rows that reference it. Mirrors the ownership
|
|
@@ -286,85 +227,6 @@ export async function POST(req: Request): Promise<Response> {
|
|
|
286
227
|
)
|
|
287
228
|
}
|
|
288
229
|
|
|
289
|
-
if (body.action === 'ingest-inbound') {
|
|
290
|
-
// Everything below this point is the real path: the adapter normalizes the
|
|
291
|
-
// frame and `ingest_inbound_message` composes the platform message through
|
|
292
|
-
// `messages.messages.compose`. Nothing is short-circuited, so a hub contract
|
|
293
|
-
// the provider cannot satisfy surfaces here as a failure instead of hiding
|
|
294
|
-
// behind seeded rows (#4975).
|
|
295
|
-
// The channel's own provider key, never a hardcoded one: ingest does not
|
|
296
|
-
// check that `providerKey` matches the channel it names, so passing a
|
|
297
|
-
// different one would silently stamp the wrong provider onto the link.
|
|
298
|
-
const channelProviderKey = ownedChannel.providerKey
|
|
299
|
-
if (channelProviderKey !== TEST_SEED_CHAT_PROVIDER_KEY) {
|
|
300
|
-
return NextResponse.json(
|
|
301
|
-
{
|
|
302
|
-
error:
|
|
303
|
-
'ingest-inbound requires a channel connected with providerFlavor: "chat"; ' +
|
|
304
|
-
`channel ${body.channelId} is '${channelProviderKey}'`,
|
|
305
|
-
},
|
|
306
|
-
{ status: 422 },
|
|
307
|
-
)
|
|
308
|
-
}
|
|
309
|
-
|
|
310
|
-
const commandBus = container.resolve('commandBus') as CommandBus
|
|
311
|
-
const adapterRegistry = container.resolve('channelAdapterRegistry') as {
|
|
312
|
-
get: (key: string) => { normalizeInbound: (raw: unknown) => Promise<unknown> } | undefined
|
|
313
|
-
}
|
|
314
|
-
const adapter = adapterRegistry.get(channelProviderKey)
|
|
315
|
-
if (!adapter) {
|
|
316
|
-
return NextResponse.json(
|
|
317
|
-
{ error: '[internal] test-seed chat adapter is not registered' },
|
|
318
|
-
{ status: 500 },
|
|
319
|
-
)
|
|
320
|
-
}
|
|
321
|
-
|
|
322
|
-
const normalized = await adapter.normalizeInbound({
|
|
323
|
-
raw: {
|
|
324
|
-
externalMessageId: body.externalMessageId,
|
|
325
|
-
externalConversationId: body.externalConversationId,
|
|
326
|
-
senderIdentifier: body.senderIdentifier,
|
|
327
|
-
senderDisplayName: body.senderDisplayName,
|
|
328
|
-
body: body.body ?? '',
|
|
329
|
-
},
|
|
330
|
-
eventType: 'message',
|
|
331
|
-
metadata: {},
|
|
332
|
-
})
|
|
333
|
-
|
|
334
|
-
const ingestInput = {
|
|
335
|
-
channelId: body.channelId,
|
|
336
|
-
providerKey: channelProviderKey,
|
|
337
|
-
channelType: ownedChannel.channelType,
|
|
338
|
-
scope: { tenantId, organizationId },
|
|
339
|
-
message: normalized,
|
|
340
|
-
} as IngestInboundMessageInput
|
|
341
|
-
|
|
342
|
-
const { result } = await commandBus.execute<
|
|
343
|
-
IngestInboundMessageInput,
|
|
344
|
-
IngestInboundMessageResult
|
|
345
|
-
>(COMMUNICATION_CHANNELS_INGEST_INBOUND_COMMAND_ID, {
|
|
346
|
-
input: ingestInput,
|
|
347
|
-
ctx: {
|
|
348
|
-
container,
|
|
349
|
-
auth: auth as never,
|
|
350
|
-
organizationScope: null,
|
|
351
|
-
selectedOrganizationId: organizationId,
|
|
352
|
-
organizationIds: organizationId ? [organizationId] : null,
|
|
353
|
-
},
|
|
354
|
-
})
|
|
355
|
-
|
|
356
|
-
return NextResponse.json(
|
|
357
|
-
{
|
|
358
|
-
status: result.status,
|
|
359
|
-
messageId: result.messageId ?? null,
|
|
360
|
-
conversationId: result.externalConversationId ?? null,
|
|
361
|
-
channelLinkId: result.channelLinkId ?? null,
|
|
362
|
-
channelType: ownedChannel.channelType,
|
|
363
|
-
},
|
|
364
|
-
{ status: 201 },
|
|
365
|
-
)
|
|
366
|
-
}
|
|
367
|
-
|
|
368
230
|
// A MessageChannelLink requires a non-null external_conversation_id (FK) and
|
|
369
231
|
// message_id. Create a synthetic conversation + (optionally threaded) message
|
|
370
232
|
// so the link is shaped like a real inbound row the subscriber can consume.
|
|
@@ -479,8 +341,7 @@ export const openApi = {
|
|
|
479
341
|
tags: ['CommunicationChannels'],
|
|
480
342
|
methods: {
|
|
481
343
|
POST: {
|
|
482
|
-
summary:
|
|
483
|
-
'Test-only: seed a connected channel, ingest a real inbound message, or emit a seeded inbound link (env-gated)',
|
|
344
|
+
summary: 'Test-only: seed a connected channel or emit an inbound message (env-gated)',
|
|
484
345
|
tags: ['CommunicationChannels'],
|
|
485
346
|
responses: [
|
|
486
347
|
{ status: 201, description: 'Channel seeded / inbound message emitted' },
|
|
@@ -24,7 +24,6 @@ type ChannelListResponse = {
|
|
|
24
24
|
items?: ChannelRow[]
|
|
25
25
|
total?: number
|
|
26
26
|
totalPages?: number
|
|
27
|
-
totalIsCapped?: boolean
|
|
28
27
|
}
|
|
29
28
|
|
|
30
29
|
export default function ChannelsListPage() {
|
|
@@ -32,7 +31,6 @@ export default function ChannelsListPage() {
|
|
|
32
31
|
const [rows, setRows] = React.useState<ChannelRow[]>([])
|
|
33
32
|
const [total, setTotal] = React.useState(0)
|
|
34
33
|
const [totalPages, setTotalPages] = React.useState(1)
|
|
35
|
-
const [totalIsCapped, setTotalIsCapped] = React.useState(false)
|
|
36
34
|
const [page, setPage] = React.useState(1)
|
|
37
35
|
const [isLoading, setIsLoading] = React.useState(true)
|
|
38
36
|
const [errorMessage, setErrorMessage] = React.useState<string | null>(null)
|
|
@@ -74,7 +72,6 @@ export default function ChannelsListPage() {
|
|
|
74
72
|
setRows(Array.isArray(data.items) ? data.items : [])
|
|
75
73
|
setTotal(typeof data.total === 'number' ? data.total : 0)
|
|
76
74
|
setTotalPages(typeof data.totalPages === 'number' ? data.totalPages : 1)
|
|
77
|
-
setTotalIsCapped(data.totalIsCapped === true)
|
|
78
75
|
}
|
|
79
76
|
setIsLoading(false)
|
|
80
77
|
}
|
|
@@ -142,7 +139,6 @@ export default function ChannelsListPage() {
|
|
|
142
139
|
pageSize,
|
|
143
140
|
total,
|
|
144
141
|
totalPages,
|
|
145
|
-
totalIsCapped,
|
|
146
142
|
onPageChange: setPage,
|
|
147
143
|
}}
|
|
148
144
|
/>
|
|
@@ -4,7 +4,6 @@ import type { EntityManager } from '@mikro-orm/postgresql'
|
|
|
4
4
|
import type { CommandBus, CommandHandler, CommandRuntimeContext } from '@open-mercato/shared/lib/commands'
|
|
5
5
|
import { registerCommand } from '@open-mercato/shared/lib/commands'
|
|
6
6
|
import { findOneWithDecryption } from '@open-mercato/shared/lib/encryption/find'
|
|
7
|
-
import { htmlToPlainText } from '@open-mercato/shared/lib/html/htmlToPlainText'
|
|
8
7
|
import { emitCommunicationChannelsEvent } from '../events'
|
|
9
8
|
import { resolveContact } from '../lib/contact-resolver'
|
|
10
9
|
import type { ChannelAdapterRegistry } from '../lib/registry'
|
|
@@ -337,41 +336,10 @@ const ingestInboundMessageCommand: CommandHandler<IngestInboundMessageInput, Ing
|
|
|
337
336
|
// ExternalMessage.rawPayload if needed for forensic / forward use.
|
|
338
337
|
// - Some legitimate messages have no subject (notifications, bounce
|
|
339
338
|
// digests). Substitute a placeholder instead of failing ingest.
|
|
340
|
-
// - HTML bodies land in the platform body as plain text rather than being
|
|
341
|
-
// merely relabelled as `text`: `MarkdownContent` renders a `text` body
|
|
342
|
-
// verbatim, so unconverted markup shows up as literal doctype, <style>
|
|
343
|
-
// blocks and tags in the inbox preview and the detail body. The source
|
|
344
|
-
// markup is untouched in `channelPayload.html`, which `data/enrichers.ts`
|
|
345
|
-
// sanitizes into `_channelPayload.sanitizedHtml` for the channel-payload
|
|
346
|
-
// renderer widget mounted at `detail:messages:message:body:after`.
|
|
347
|
-
// - The plain-text alternative wins over conversion when the sender's
|
|
348
|
-
// client supplied one (`multipart/alternative`), because that part is
|
|
349
|
-
// what a human actually wrote; `html-to-text` output — inlined link
|
|
350
|
-
// URLs, flattened tables, synthesized list markers — is the fallback for
|
|
351
|
-
// HTML-only senders. `lib/email-mime.ts` preferred `bodyHtml` when
|
|
352
|
-
// picking `body`, but preserved the text part at `channelPayload.text`.
|
|
353
339
|
const MAX_COMPOSE_BODY = 50_000
|
|
354
|
-
// Bound the synchronous parse: inbound mail is untrusted and the 5MB body
|
|
355
|
-
// ceiling from `lib/email-capabilities.ts` would otherwise block the ingest
|
|
356
|
-
// worker on a single oversized document. This cap counts markup bytes while
|
|
357
|
-
// MAX_COMPOSE_BODY counts text characters, so it can bite first — an
|
|
358
|
-
// ordinary marketing template or a long quoted thread is easily over 512KB
|
|
359
|
-
// of markup and still well under 50k characters of text. It therefore
|
|
360
|
-
// carries the same truncation marker, rather than ending mid-sentence with
|
|
361
|
-
// nothing to tell the reader the rest exists.
|
|
362
|
-
const MAX_HTML_PARSE_INPUT = 512 * 1024
|
|
363
340
|
const TRUNCATE_MARKER =
|
|
364
341
|
'\n\n[…message truncated by Open Mercato — full body preserved in ExternalMessage.rawPayload]'
|
|
365
|
-
const
|
|
366
|
-
const plainAlternative =
|
|
367
|
-
typeof m.channelPayload?.text === 'string' ? m.channelPayload.text.trim() : ''
|
|
368
|
-
const convertHtmlBody = () => {
|
|
369
|
-
const converted = htmlToPlainText(sourceBody.slice(0, MAX_HTML_PARSE_INPUT))
|
|
370
|
-
return sourceBody.length > MAX_HTML_PARSE_INPUT ? converted + TRUNCATE_MARKER : converted
|
|
371
|
-
}
|
|
372
|
-
const rawBody = m.bodyFormat === 'html'
|
|
373
|
-
? (plainAlternative || convertHtmlBody())
|
|
374
|
-
: sourceBody
|
|
342
|
+
const rawBody = m.body ?? ''
|
|
375
343
|
const truncatedBody =
|
|
376
344
|
rawBody.length > MAX_COMPOSE_BODY
|
|
377
345
|
? rawBody.slice(0, MAX_COMPOSE_BODY - TRUNCATE_MARKER.length) + TRUNCATE_MARKER
|
|
@@ -385,11 +353,6 @@ const ingestInboundMessageCommand: CommandHandler<IngestInboundMessageInput, Ing
|
|
|
385
353
|
sourceEntityId: conversation.id,
|
|
386
354
|
externalEmail: contactHint?.email ?? undefined,
|
|
387
355
|
externalName: contactHint?.displayName ?? m.senderDisplayName,
|
|
388
|
-
// #4975: tells the hub which identity contract applies to this sender.
|
|
389
|
-
// Email-typed channels keep the mandatory `externalEmail`; providers whose
|
|
390
|
-
// senders have no address (Discord, Slack, SMS…) are validated without it.
|
|
391
|
-
// The messages validator fails closed on any type it does not recognize.
|
|
392
|
-
sourceChannelType: input.channelType,
|
|
393
356
|
recipients: mapping?.assignedUserId
|
|
394
357
|
? [{ userId: mapping.assignedUserId, type: 'to' as const }]
|
|
395
358
|
: [],
|
|
@@ -11,7 +11,6 @@ import {
|
|
|
11
11
|
import { getChannelAdapterRegistry } from './lib/adapter-registry-singleton'
|
|
12
12
|
import { ensureTestSeedAdapterRegistered } from './lib/test-seed'
|
|
13
13
|
import { sendAsUser } from './lib/send-as-user'
|
|
14
|
-
import { resolveChannelTypeSafely } from './lib/resolve-channel-type'
|
|
15
14
|
|
|
16
15
|
export function register(container: AppContainer) {
|
|
17
16
|
// Test-only: register the network-free stub channel adapter when
|
|
@@ -37,11 +36,5 @@ export function register(container: AppContainer) {
|
|
|
37
36
|
// In-process send-as-user facade. Cross-module callers (e.g. the customers
|
|
38
37
|
// compose route) resolve this instead of making an HTTP self-call.
|
|
39
38
|
communicationChannelsSendAsUser: asValue(sendAsUser),
|
|
40
|
-
|
|
41
|
-
// Cross-module channel-type lookup. The messages compose route resolves this
|
|
42
|
-
// to decide whether an external correspondent must carry an email address
|
|
43
|
-
// (#4975); absent module or failed lookup reads as "unknown", which the
|
|
44
|
-
// messages validator handles fail-closed.
|
|
45
|
-
communicationChannelsResolveChannelType: asValue(resolveChannelTypeSafely),
|
|
46
39
|
})
|
|
47
40
|
}
|
|
@@ -48,20 +48,6 @@ export interface ChannelCapabilities {
|
|
|
48
48
|
* Optional; existing chat providers (Slack, WhatsApp) omit and are treated as `true`.
|
|
49
49
|
*/
|
|
50
50
|
realtimePush?: boolean
|
|
51
|
-
|
|
52
|
-
/**
|
|
53
|
-
* Shape of the outbound recipient this provider's `sendMessage` accepts as
|
|
54
|
-
* `metadata.to`. Optional; when absent the hub validates recipients as email
|
|
55
|
-
* addresses, so every provider that predates this field keeps its exact
|
|
56
|
-
* behavior.
|
|
57
|
-
*
|
|
58
|
-
* Declare `'provider-native'` when recipients are provider-issued identifiers
|
|
59
|
-
* rather than email addresses (e.g. a Discord channel snowflake). The hub then
|
|
60
|
-
* applies transport-safety checks only (see `validateOutboundRecipient`) and
|
|
61
|
-
* the adapter owns the provider-specific format — it MUST treat the value as
|
|
62
|
-
* untrusted input.
|
|
63
|
-
*/
|
|
64
|
-
recipientFormat?: 'email' | 'provider-native'
|
|
65
51
|
}
|
|
66
52
|
|
|
67
53
|
// ── Send / status / sender listing ────────────────────────────
|
|
@@ -57,8 +57,4 @@ export const baseEmailCapabilities: ChannelCapabilities = {
|
|
|
57
57
|
|
|
58
58
|
// Polling (real-time push deferred to v2 for all email providers)
|
|
59
59
|
realtimePush: false,
|
|
60
|
-
|
|
61
|
-
// Stated rather than left to the default so the email baseline reads as an
|
|
62
|
-
// explicit choice: outbound recipients here are addresses, not provider ids.
|
|
63
|
-
recipientFormat: 'email',
|
|
64
60
|
}
|
|
@@ -41,19 +41,6 @@ import { hasChannelAdapter, registerChannelAdapter } from './adapter-registry-si
|
|
|
41
41
|
/** Provider key for the network-free test stub adapter. */
|
|
42
42
|
export const TEST_SEED_PROVIDER_KEY = '__test_seed__'
|
|
43
43
|
|
|
44
|
-
/**
|
|
45
|
-
* Provider key for the network-free stub adapter that stands in for a CHAT
|
|
46
|
-
* provider — one whose senders are identified by an opaque handle and have no
|
|
47
|
-
* email address at all (Discord, Slack, Telegram…).
|
|
48
|
-
*
|
|
49
|
-
* It exists because the email-shaped stub above can only ever prove the hub
|
|
50
|
-
* accepts email-shaped data. That is precisely how CI stayed green while every
|
|
51
|
-
* real inbound Discord message was rejected (#4975): the fixture invented an
|
|
52
|
-
* address the provider can never produce. Tests that need to prove the hub's
|
|
53
|
-
* non-email identity contract MUST drive this provider instead.
|
|
54
|
-
*/
|
|
55
|
-
export const TEST_SEED_CHAT_PROVIDER_KEY = '__test_seed_chat__'
|
|
56
|
-
|
|
57
44
|
/** Env flag that unlocks test-only channel seeding. Off in production. */
|
|
58
45
|
export const TEST_CHANNEL_SEEDING_ENV = 'OM_ENABLE_TEST_CHANNEL_SEEDING'
|
|
59
46
|
|
|
@@ -85,10 +72,8 @@ const testSeedCapabilities: ChannelCapabilities = {
|
|
|
85
72
|
* delivery worker reach its success path and emit `communication_channels.message.sent`.
|
|
86
73
|
*/
|
|
87
74
|
class TestSeedChannelAdapter implements ChannelAdapter {
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
readonly providerKey: string = TEST_SEED_PROVIDER_KEY
|
|
91
|
-
readonly channelType: string = 'email'
|
|
75
|
+
readonly providerKey = TEST_SEED_PROVIDER_KEY
|
|
76
|
+
readonly channelType = 'email'
|
|
92
77
|
readonly capabilities = testSeedCapabilities
|
|
93
78
|
|
|
94
79
|
async sendMessage(input: SendMessageInput): Promise<SendMessageResult> {
|
|
@@ -136,54 +121,13 @@ class TestSeedChannelAdapter implements ChannelAdapter {
|
|
|
136
121
|
}
|
|
137
122
|
}
|
|
138
123
|
|
|
139
|
-
/**
|
|
140
|
-
* Chat-flavoured twin of {@link TestSeedChannelAdapter}: same network-free
|
|
141
|
-
* behaviour, but it declares a non-email `channelType`, so a channel connected
|
|
142
|
-
* through it is shaped like a real chat channel — including an
|
|
143
|
-
* `externalIdentifier` of NULL when no email-ish credential key is supplied.
|
|
144
|
-
*/
|
|
145
|
-
class TestSeedChatChannelAdapter extends TestSeedChannelAdapter {
|
|
146
|
-
readonly providerKey: string = TEST_SEED_CHAT_PROVIDER_KEY
|
|
147
|
-
readonly channelType: string = 'discord'
|
|
148
|
-
|
|
149
|
-
async normalizeInbound(raw: InboundMessage): Promise<NormalizedInboundMessage> {
|
|
150
|
-
// Unlike the email stub, this one is reachable: the test-seed ingest action
|
|
151
|
-
// feeds it a chat-shaped frame so the message travels the real ingest path
|
|
152
|
-
// (and therefore the real compose validation) rather than a SQL shortcut.
|
|
153
|
-
const frame = (raw.raw ?? {}) as Record<string, unknown>
|
|
154
|
-
const senderIdentifier = String(frame.senderIdentifier ?? '')
|
|
155
|
-
if (!senderIdentifier) {
|
|
156
|
-
throw new Error('[internal] TestSeedChatChannelAdapter requires a senderIdentifier')
|
|
157
|
-
}
|
|
158
|
-
return {
|
|
159
|
-
externalMessageId: String(frame.externalMessageId ?? ''),
|
|
160
|
-
externalConversationId: String(frame.externalConversationId ?? ''),
|
|
161
|
-
senderIdentifier,
|
|
162
|
-
senderDisplayName:
|
|
163
|
-
typeof frame.senderDisplayName === 'string' ? frame.senderDisplayName : undefined,
|
|
164
|
-
body: typeof frame.body === 'string' ? frame.body : '',
|
|
165
|
-
bodyFormat: 'text',
|
|
166
|
-
timestamp: new Date(),
|
|
167
|
-
channelPayload: {},
|
|
168
|
-
channelContentType: 'text/plain',
|
|
169
|
-
channelMetadata: {},
|
|
170
|
-
}
|
|
171
|
-
}
|
|
172
|
-
}
|
|
173
|
-
|
|
174
124
|
let cachedTestSeedAdapter: TestSeedChannelAdapter | null = null
|
|
175
|
-
let cachedTestSeedChatAdapter: TestSeedChatChannelAdapter | null = null
|
|
176
125
|
|
|
177
126
|
function getTestSeedChannelAdapter(): TestSeedChannelAdapter {
|
|
178
127
|
if (!cachedTestSeedAdapter) cachedTestSeedAdapter = new TestSeedChannelAdapter()
|
|
179
128
|
return cachedTestSeedAdapter
|
|
180
129
|
}
|
|
181
130
|
|
|
182
|
-
function getTestSeedChatChannelAdapter(): TestSeedChatChannelAdapter {
|
|
183
|
-
if (!cachedTestSeedChatAdapter) cachedTestSeedChatAdapter = new TestSeedChatChannelAdapter()
|
|
184
|
-
return cachedTestSeedChatAdapter
|
|
185
|
-
}
|
|
186
|
-
|
|
187
131
|
/**
|
|
188
132
|
* Register the test-seed adapter exactly once, but ONLY when the env flag is set.
|
|
189
133
|
* Idempotent and safe to call from every container creation (`di.register`) — a
|
|
@@ -191,10 +135,6 @@ function getTestSeedChatChannelAdapter(): TestSeedChatChannelAdapter {
|
|
|
191
135
|
*/
|
|
192
136
|
export function ensureTestSeedAdapterRegistered(): void {
|
|
193
137
|
if (!isTestChannelSeedingEnabled()) return
|
|
194
|
-
if (
|
|
195
|
-
|
|
196
|
-
}
|
|
197
|
-
if (!hasChannelAdapter(TEST_SEED_CHAT_PROVIDER_KEY)) {
|
|
198
|
-
registerChannelAdapter(getTestSeedChatChannelAdapter())
|
|
199
|
-
}
|
|
138
|
+
if (hasChannelAdapter(TEST_SEED_PROVIDER_KEY)) return
|
|
139
|
+
registerChannelAdapter(getTestSeedChannelAdapter())
|
|
200
140
|
}
|
|
@@ -155,8 +155,6 @@
|
|
|
155
155
|
"configs.systemStatus.variables.entitiesBackcompatEav.label": "Legacy-EAV-Schreibvorgänge",
|
|
156
156
|
"configs.systemStatus.variables.forceQueryIndexOnPartialIndexes.description": "Query-Index-Ergebnisse auch bei unvollständiger Abdeckung bereitstellen.",
|
|
157
157
|
"configs.systemStatus.variables.forceQueryIndexOnPartialIndexes.label": "Teilindex-Nutzung erzwingen",
|
|
158
|
-
"configs.systemStatus.variables.listCountCap.description": "Maximal gemeldete Gesamtzahl einer Liste; die Zählung stoppt an der Obergrenze und begrenzte Summen werden z. B. als „10 000+“ angezeigt. 0 deaktiviert die Begrenzung.",
|
|
159
|
-
"configs.systemStatus.variables.listCountCap.label": "Obergrenze für Listenzählung",
|
|
160
158
|
"configs.systemStatus.variables.logLevel.description": "Fallback-Log-Level, wenn die Verbosität nicht gesetzt ist.",
|
|
161
159
|
"configs.systemStatus.variables.logLevel.label": "Log-Level",
|
|
162
160
|
"configs.systemStatus.variables.logVerbosity.description": "Überschreibt die strukturierte Log-Verbosität wie Debug oder Trace.",
|
|
@@ -155,8 +155,6 @@
|
|
|
155
155
|
"configs.systemStatus.variables.entitiesBackcompatEav.label": "Legacy EAV writes",
|
|
156
156
|
"configs.systemStatus.variables.forceQueryIndexOnPartialIndexes.description": "Serve query index results even when coverage is partial.",
|
|
157
157
|
"configs.systemStatus.variables.forceQueryIndexOnPartialIndexes.label": "Force partial index usage",
|
|
158
|
-
"configs.systemStatus.variables.listCountCap.description": "Maximum reported list total; counting stops at the cap and capped totals render as e.g. “10 000+”. 0 disables capping.",
|
|
159
|
-
"configs.systemStatus.variables.listCountCap.label": "List count cap",
|
|
160
158
|
"configs.systemStatus.variables.logLevel.description": "Fallback log level applied when verbosity is not set.",
|
|
161
159
|
"configs.systemStatus.variables.logLevel.label": "Log level",
|
|
162
160
|
"configs.systemStatus.variables.logVerbosity.description": "Overrides structured log verbosity such as debug or trace.",
|
|
@@ -155,8 +155,6 @@
|
|
|
155
155
|
"configs.systemStatus.variables.entitiesBackcompatEav.label": "Escrituras EAV heredadas",
|
|
156
156
|
"configs.systemStatus.variables.forceQueryIndexOnPartialIndexes.description": "Servir resultados del índice de consultas incluso cuando la cobertura es parcial.",
|
|
157
157
|
"configs.systemStatus.variables.forceQueryIndexOnPartialIndexes.label": "Forzar uso de índice parcial",
|
|
158
|
-
"configs.systemStatus.variables.listCountCap.description": "Total máximo informado en listas; el conteo se detiene en el límite y los totales limitados se muestran p. ej. como «10 000+». 0 desactiva el límite.",
|
|
159
|
-
"configs.systemStatus.variables.listCountCap.label": "Límite del conteo de listas",
|
|
160
158
|
"configs.systemStatus.variables.logLevel.description": "Nivel de registro de respaldo cuando la verbosidad no está configurada.",
|
|
161
159
|
"configs.systemStatus.variables.logLevel.label": "Nivel de registro",
|
|
162
160
|
"configs.systemStatus.variables.logVerbosity.description": "Anula la verbosidad del registro estructurado, como debug o trace.",
|
|
@@ -155,8 +155,6 @@
|
|
|
155
155
|
"configs.systemStatus.variables.entitiesBackcompatEav.label": "레거시 EAV 쓰기",
|
|
156
156
|
"configs.systemStatus.variables.forceQueryIndexOnPartialIndexes.description": "커버리지가 부분적이어도 쿼리 인덱스 결과를 제공합니다.",
|
|
157
157
|
"configs.systemStatus.variables.forceQueryIndexOnPartialIndexes.label": "부분 인덱스 사용 강제",
|
|
158
|
-
"configs.systemStatus.variables.listCountCap.description": "목록 총계의 최대 보고 값입니다. 카운트는 상한에서 멈추며 제한된 총계는 예를 들어 “10 000+”로 표시됩니다. 0이면 상한이 비활성화됩니다.",
|
|
159
|
-
"configs.systemStatus.variables.listCountCap.label": "목록 카운트 상한",
|
|
160
158
|
"configs.systemStatus.variables.logLevel.description": "상세 수준이 설정되지 않았을 때 적용되는 대체 로그 레벨입니다.",
|
|
161
159
|
"configs.systemStatus.variables.logLevel.label": "로그 레벨",
|
|
162
160
|
"configs.systemStatus.variables.logVerbosity.description": "debug나 trace와 같은 구조화된 로그 상세 수준을 재정의합니다.",
|
|
@@ -155,8 +155,6 @@
|
|
|
155
155
|
"configs.systemStatus.variables.entitiesBackcompatEav.label": "Zapis do legacy EAV",
|
|
156
156
|
"configs.systemStatus.variables.forceQueryIndexOnPartialIndexes.description": "Pozwala korzystać z wyników indeksu zapytań nawet przy częściowym pokryciu.",
|
|
157
157
|
"configs.systemStatus.variables.forceQueryIndexOnPartialIndexes.label": "Wymuś użycie częściowego indeksu",
|
|
158
|
-
"configs.systemStatus.variables.listCountCap.description": "Maksymalna raportowana liczba wyników listy; zliczanie zatrzymuje się na limicie, a ograniczone sumy są pokazywane np. jako „10 000+”. 0 wyłącza limit.",
|
|
159
|
-
"configs.systemStatus.variables.listCountCap.label": "Limit licznika list",
|
|
160
158
|
"configs.systemStatus.variables.logLevel.description": "Domyślny poziom logowania używany, gdy nie ustawiono szczegółowości.",
|
|
161
159
|
"configs.systemStatus.variables.logLevel.label": "Poziom logowania",
|
|
162
160
|
"configs.systemStatus.variables.logVerbosity.description": "Nadpisuje poziom szczegółowości logów, np. debug lub trace.",
|
|
@@ -267,15 +267,6 @@ export const SYSTEM_STATUS_VARIABLES: SystemStatusVariableDefinition[] = [
|
|
|
267
267
|
docUrl: `${SYSTEM_STATUS_DOC_BASE}#optimize_index_coverage_stats`,
|
|
268
268
|
defaultValue: 'false',
|
|
269
269
|
},
|
|
270
|
-
{
|
|
271
|
-
key: 'OM_LIST_COUNT_CAP',
|
|
272
|
-
category: 'query_index',
|
|
273
|
-
kind: 'string',
|
|
274
|
-
labelKey: 'configs.systemStatus.variables.listCountCap.label',
|
|
275
|
-
descriptionKey: 'configs.systemStatus.variables.listCountCap.description',
|
|
276
|
-
docUrl: `${SYSTEM_STATUS_DOC_BASE}#om_list_count_cap`,
|
|
277
|
-
defaultValue: '10000',
|
|
278
|
-
},
|
|
279
270
|
{
|
|
280
271
|
key: 'FORCE_QUERY_INDEX_ON_PARTIAL_INDEXES',
|
|
281
272
|
category: 'query_index',
|
|
@@ -41,7 +41,6 @@ type ResponsePayload = {
|
|
|
41
41
|
total: number
|
|
42
42
|
page: number
|
|
43
43
|
totalPages: number
|
|
44
|
-
totalIsCapped?: boolean
|
|
45
44
|
}
|
|
46
45
|
|
|
47
46
|
export default function CurrenciesPage() {
|
|
@@ -51,7 +50,6 @@ export default function CurrenciesPage() {
|
|
|
51
50
|
const [page, setPage] = React.useState(1)
|
|
52
51
|
const [total, setTotal] = React.useState(0)
|
|
53
52
|
const [totalPages, setTotalPages] = React.useState(1)
|
|
54
|
-
const [totalIsCapped, setTotalIsCapped] = React.useState(false)
|
|
55
53
|
const [search, setSearch] = React.useState('')
|
|
56
54
|
const [filters, setFilters] = React.useState<FilterValues>({})
|
|
57
55
|
const [isLoading, setIsLoading] = React.useState(true)
|
|
@@ -98,7 +96,6 @@ export default function CurrenciesPage() {
|
|
|
98
96
|
setRows(Array.isArray(payload.items) ? payload.items : [])
|
|
99
97
|
setTotal(payload.total || 0)
|
|
100
98
|
setTotalPages(payload.totalPages || 1)
|
|
101
|
-
setTotalIsCapped(payload?.totalIsCapped === true)
|
|
102
99
|
}
|
|
103
100
|
} catch (error) {
|
|
104
101
|
if (!cancelled) {
|
|
@@ -345,7 +342,7 @@ export default function CurrenciesPage() {
|
|
|
345
342
|
createLabel={t('currencies.list.actions.create')}
|
|
346
343
|
/>
|
|
347
344
|
)}
|
|
348
|
-
pagination={{ page, pageSize: 50, total, totalPages,
|
|
345
|
+
pagination={{ page, pageSize: 50, total, totalPages, onPageChange: setPage }}
|
|
349
346
|
isLoading={isLoading}
|
|
350
347
|
perspective={{ tableId: extensionPoints.hosts.currenciesTable.tableId }}
|
|
351
348
|
/>
|