@open-mercato/core 0.7.0 → 0.7.1-develop.7103.1.41ff100d93
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 +13 -1
- package/dist/helpers/integration/api.js.map +2 -2
- package/dist/helpers/integration/communicationChannelsFixtures.js +19 -0
- 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 +3 -1
- package/dist/modules/api_keys/backend/api-keys/page.js.map +2 -2
- package/dist/modules/api_keys/di.js +9 -0
- package/dist/modules/api_keys/di.js.map +7 -0
- package/dist/modules/api_keys/services/principalService.js +31 -0
- package/dist/modules/api_keys/services/principalService.js.map +7 -0
- 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 +2 -0
- package/dist/modules/attachments/components/AttachmentLibrary.js.map +2 -2
- package/dist/modules/attachments/di.js +11 -1
- package/dist/modules/attachments/di.js.map +2 -2
- package/dist/modules/attachments/index.js.map +1 -1
- package/dist/modules/attachments/lib/attachment-service.js +313 -0
- package/dist/modules/attachments/lib/attachment-service.js.map +7 -0
- package/dist/modules/attachments/lib/scoped-upload-service.js +15 -2
- package/dist/modules/attachments/lib/scoped-upload-service.js.map +2 -2
- package/dist/modules/attachments/lib/upload-limits.js +6 -2
- package/dist/modules/attachments/lib/upload-limits.js.map +2 -2
- package/dist/modules/audit_logs/backend/audit-logs/page.js +6 -0
- package/dist/modules/audit_logs/backend/audit-logs/page.js.map +2 -2
- package/dist/modules/audit_logs/lib/display-helpers.js +19 -11
- package/dist/modules/audit_logs/lib/display-helpers.js.map +2 -2
- package/dist/modules/audit_logs/services/actionLogService.js +57 -12
- package/dist/modules/audit_logs/services/actionLogService.js.map +3 -3
- package/dist/modules/auth/acl.js +30 -5
- package/dist/modules/auth/acl.js.map +2 -2
- package/dist/modules/auth/api/feature-check.js +8 -2
- package/dist/modules/auth/api/feature-check.js.map +2 -2
- package/dist/modules/auth/api/login.js +4 -1
- package/dist/modules/auth/api/login.js.map +2 -2
- package/dist/modules/auth/api/reset/validate.js +55 -0
- package/dist/modules/auth/api/reset/validate.js.map +7 -0
- package/dist/modules/auth/api/roles/acl/route.js +28 -33
- package/dist/modules/auth/api/roles/acl/route.js.map +2 -2
- package/dist/modules/auth/api/session/refresh.js +25 -1
- package/dist/modules/auth/api/session/refresh.js.map +2 -2
- package/dist/modules/auth/api/users/acl/route.js +96 -51
- package/dist/modules/auth/api/users/acl/route.js.map +2 -2
- package/dist/modules/auth/api/users/route.js +13 -5
- package/dist/modules/auth/api/users/route.js.map +2 -2
- package/dist/modules/auth/backend/roles/[id]/edit/page.meta.js +5 -1
- package/dist/modules/auth/backend/roles/[id]/edit/page.meta.js.map +2 -2
- package/dist/modules/auth/backend/roles/page.js +3 -1
- package/dist/modules/auth/backend/roles/page.js.map +2 -2
- package/dist/modules/auth/backend/users/[id]/edit/page.meta.js +5 -1
- package/dist/modules/auth/backend/users/[id]/edit/page.meta.js.map +2 -2
- package/dist/modules/auth/backend/users/page.js +2 -1
- package/dist/modules/auth/backend/users/page.js.map +2 -2
- package/dist/modules/auth/commands/acl.js +254 -0
- package/dist/modules/auth/commands/acl.js.map +7 -0
- package/dist/modules/auth/components/AclEditor.js +39 -30
- 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 +5 -1
- package/dist/modules/auth/data/validators.js.map +2 -2
- package/dist/modules/auth/di.js +35 -9
- package/dist/modules/auth/di.js.map +2 -2
- package/dist/modules/auth/frontend/reset/[token]/page.js +46 -0
- 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/lib/userIdFilter.js +16 -0
- package/dist/modules/auth/lib/userIdFilter.js.map +7 -0
- package/dist/modules/auth/services/authService.js +16 -2
- package/dist/modules/auth/services/authService.js.map +2 -2
- package/dist/modules/auth/services/principalService.js +200 -0
- package/dist/modules/auth/services/principalService.js.map +7 -0
- package/dist/modules/auth/services/rbacService.js +67 -24
- package/dist/modules/auth/services/rbacService.js.map +3 -3
- package/dist/modules/auth/services/roleOrganizationScope.js +41 -0
- package/dist/modules/auth/services/roleOrganizationScope.js.map +7 -0
- package/dist/modules/business_rules/backend/logs/page.js +3 -1
- package/dist/modules/business_rules/backend/logs/page.js.map +2 -2
- package/dist/modules/business_rules/backend/rules/page.js +3 -1
- package/dist/modules/business_rules/backend/rules/page.js.map +2 -2
- package/dist/modules/business_rules/backend/sets/page.js +3 -1
- 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 +10 -9
- 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 +5 -2
- package/dist/modules/catalog/backend/catalog/products/MerchandisingAssistantSheet.js.map +2 -2
- package/dist/modules/catalog/components/categories/CategoriesDataTable.js +2 -0
- package/dist/modules/catalog/components/categories/CategoriesDataTable.js.map +2 -2
- package/dist/modules/catalog/components/products/ProductsDataTable.js +7 -1
- package/dist/modules/catalog/components/products/ProductsDataTable.js.map +2 -2
- package/dist/modules/catalog/widgets/injection/merchandising-assistant-trigger/widget.client.js +2 -0
- 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 +9 -1
- 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 +95 -10
- 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 +3 -0
- package/dist/modules/communication_channels/backend/communication_channels/channels/page.js.map +2 -2
- package/dist/modules/communication_channels/commands/ingest-inbound-message.js +14 -1
- package/dist/modules/communication_channels/commands/ingest-inbound-message.js.map +2 -2
- package/dist/modules/communication_channels/di.js +7 -1
- package/dist/modules/communication_channels/di.js.map +2 -2
- package/dist/modules/communication_channels/lib/email-capabilities.js +4 -1
- package/dist/modules/communication_channels/lib/email-capabilities.js.map +2 -2
- package/dist/modules/communication_channels/lib/outbound-recipient.js +33 -0
- package/dist/modules/communication_channels/lib/outbound-recipient.js.map +7 -0
- package/dist/modules/communication_channels/lib/resolve-channel-type.js +51 -0
- package/dist/modules/communication_channels/lib/resolve-channel-type.js.map +7 -0
- package/dist/modules/communication_channels/lib/test-seed.js +41 -2
- package/dist/modules/communication_channels/lib/test-seed.js.map +2 -2
- package/dist/modules/configs/lib/system-status.js +9 -0
- package/dist/modules/configs/lib/system-status.js.map +2 -2
- package/dist/modules/currencies/backend/currencies/page.js +3 -1
- package/dist/modules/currencies/backend/currencies/page.js.map +2 -2
- package/dist/modules/currencies/backend/exchange-rates/page.js +3 -1
- package/dist/modules/currencies/backend/exchange-rates/page.js.map +2 -2
- package/dist/modules/currencies/services/rateFetchingService.js +6 -1
- package/dist/modules/currencies/services/rateFetchingService.js.map +2 -2
- package/dist/modules/customer_accounts/api/admin/domain-mappings.js +9 -0
- package/dist/modules/customer_accounts/api/admin/domain-mappings.js.map +2 -2
- package/dist/modules/customer_accounts/backend/customer_accounts/roles/page.js +3 -1
- package/dist/modules/customer_accounts/backend/customer_accounts/roles/page.js.map +2 -2
- package/dist/modules/customer_accounts/backend/customer_accounts/users/PortalUsersPageClient.js +3 -1
- package/dist/modules/customer_accounts/backend/customer_accounts/users/PortalUsersPageClient.js.map +2 -2
- package/dist/modules/customer_accounts/services/domainMappingService.js +10 -0
- package/dist/modules/customer_accounts/services/domainMappingService.js.map +2 -2
- package/dist/modules/customers/ai-tools/companies-pack.js +4 -1
- package/dist/modules/customers/ai-tools/companies-pack.js.map +2 -2
- package/dist/modules/customers/ai-tools/deal-analyzer-pack.js +13 -2
- package/dist/modules/customers/ai-tools/deal-analyzer-pack.js.map +2 -2
- package/dist/modules/customers/ai-tools/deals-pack.js +52 -6
- package/dist/modules/customers/ai-tools/deals-pack.js.map +2 -2
- package/dist/modules/customers/ai-tools/people-pack.js +4 -1
- package/dist/modules/customers/ai-tools/people-pack.js.map +2 -2
- package/dist/modules/customers/api/activities/route.js +48 -6
- package/dist/modules/customers/api/activities/route.js.map +2 -2
- package/dist/modules/customers/api/companies/[id]/people/route.js +20 -64
- package/dist/modules/customers/api/companies/[id]/people/route.js.map +2 -2
- package/dist/modules/customers/api/companies/[id]/route.js +17 -94
- package/dist/modules/customers/api/companies/[id]/route.js.map +2 -2
- package/dist/modules/customers/api/dashboard/widgets/customer-todos/route.js +8 -5
- 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 +8 -25
- package/dist/modules/customers/api/deals/[id]/route.js.map +2 -2
- package/dist/modules/customers/api/deals/[id]/stats/route.js +3 -22
- package/dist/modules/customers/api/deals/[id]/stats/route.js.map +2 -2
- package/dist/modules/customers/api/deals/aggregate/route.js +14 -9
- package/dist/modules/customers/api/deals/aggregate/route.js.map +2 -2
- package/dist/modules/customers/api/deals/map/route.js +5 -5
- package/dist/modules/customers/api/deals/map/route.js.map +2 -2
- package/dist/modules/customers/api/deals/route.js +38 -1
- 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 +3 -1
- package/dist/modules/customers/api/interactions/route.js.map +2 -2
- package/dist/modules/customers/api/interactions/tasks/route.js +27 -4
- package/dist/modules/customers/api/interactions/tasks/route.js.map +2 -2
- package/dist/modules/customers/api/people/[id]/companies/[linkId]/route.js +4 -3
- 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 +11 -10
- package/dist/modules/customers/api/people/[id]/route.js.map +2 -2
- package/dist/modules/customers/api/people/check-phone/route.js +51 -9
- package/dist/modules/customers/api/people/check-phone/route.js.map +2 -2
- package/dist/modules/customers/api/todos/route.js +30 -5
- package/dist/modules/customers/api/todos/route.js.map +2 -2
- package/dist/modules/customers/backend/customers/companies/page.js +4 -2
- package/dist/modules/customers/backend/customers/companies/page.js.map +2 -2
- package/dist/modules/customers/backend/customers/deals/[id]/page.js +6 -1
- package/dist/modules/customers/backend/customers/deals/[id]/page.js.map +2 -2
- package/dist/modules/customers/backend/customers/deals/page.js +5 -2
- package/dist/modules/customers/backend/customers/deals/page.js.map +2 -2
- package/dist/modules/customers/backend/customers/deals/pipeline/components/Lane.js +4 -13
- 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 +85 -14
- package/dist/modules/customers/backend/customers/deals/pipeline/components/StatusFilterPopover.js.map +2 -2
- package/dist/modules/customers/backend/customers/deals/pipeline/components/toneClasses.js +18 -0
- package/dist/modules/customers/backend/customers/deals/pipeline/components/toneClasses.js.map +7 -0
- package/dist/modules/customers/backend/customers/people/page.js +4 -2
- package/dist/modules/customers/backend/customers/people/page.js.map +2 -2
- package/dist/modules/customers/backend/hooks/useEmailDuplicateCheck.js +9 -3
- package/dist/modules/customers/backend/hooks/useEmailDuplicateCheck.js.map +2 -2
- package/dist/modules/customers/commands/deals.js +21 -34
- 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 +131 -2
- package/dist/modules/customers/commands/personCompanyLinks.js.map +2 -2
- package/dist/modules/customers/components/CustomerTodosTable.js +1 -0
- package/dist/modules/customers/components/CustomerTodosTable.js.map +2 -2
- package/dist/modules/customers/components/DealsKpiStrip.js +7 -6
- 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 +3 -2
- package/dist/modules/customers/components/calendar/EventPeekPopover.js.map +2 -2
- package/dist/modules/customers/components/calendar/editor/PeopleField.js +40 -5
- package/dist/modules/customers/components/calendar/editor/PeopleField.js.map +2 -2
- package/dist/modules/customers/components/calendar/editor/hooks.js +2 -1
- 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/CompanyKpiBar.js +5 -4
- package/dist/modules/customers/components/detail/CompanyKpiBar.js.map +2 -2
- package/dist/modules/customers/components/detail/CompanyPeopleSection.js +3 -1
- package/dist/modules/customers/components/detail/CompanyPeopleSection.js.map +2 -2
- package/dist/modules/customers/components/detail/DealForm.js +19 -7
- package/dist/modules/customers/components/detail/DealForm.js.map +2 -2
- package/dist/modules/customers/components/detail/DealsSection.js +6 -5
- package/dist/modules/customers/components/detail/DealsSection.js.map +2 -2
- package/dist/modules/customers/components/detail/EntityTagsDialog.js +35 -11
- package/dist/modules/customers/components/detail/EntityTagsDialog.js.map +2 -2
- package/dist/modules/customers/components/detail/PersonCompaniesSection.js +3 -1
- package/dist/modules/customers/components/detail/PersonCompaniesSection.js.map +2 -2
- package/dist/modules/customers/components/detail/hooks/usePersonTasks.js +19 -13
- 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 +32 -3
- package/dist/modules/customers/data/validators.js.map +2 -2
- package/dist/modules/customers/events.js +5 -0
- package/dist/modules/customers/events.js.map +2 -2
- package/dist/modules/customers/lib/calendar/conflicts.js +8 -2
- package/dist/modules/customers/lib/calendar/conflicts.js.map +2 -2
- package/dist/modules/customers/lib/calendar/editorPayload.js +3 -2
- package/dist/modules/customers/lib/calendar/editorPayload.js.map +2 -2
- package/dist/modules/customers/lib/calendar/mapItem.js +8 -3
- package/dist/modules/customers/lib/calendar/mapItem.js.map +2 -2
- package/dist/modules/customers/lib/calendar/participantIdentity.js +9 -0
- package/dist/modules/customers/lib/calendar/participantIdentity.js.map +7 -0
- package/dist/modules/customers/lib/closureStage.js +45 -0
- package/dist/modules/customers/lib/closureStage.js.map +7 -0
- package/dist/modules/customers/lib/dealStatus.js +30 -0
- package/dist/modules/customers/lib/dealStatus.js.map +2 -2
- package/dist/modules/customers/lib/detailReadAccess.js +12 -0
- package/dist/modules/customers/lib/detailReadAccess.js.map +7 -0
- package/dist/modules/customers/lib/findPeopleByAddresses.js +1 -0
- package/dist/modules/customers/lib/findPeopleByAddresses.js.map +2 -2
- package/dist/modules/customers/lib/personCompanies.js +100 -2
- package/dist/modules/customers/lib/personCompanies.js.map +2 -2
- package/dist/modules/customers/lib/todoCompatibility.js +12 -0
- package/dist/modules/customers/lib/todoCompatibility.js.map +2 -2
- package/dist/modules/dashboards/lib/widgetScope.js +6 -1
- package/dist/modules/dashboards/lib/widgetScope.js.map +2 -2
- package/dist/modules/data_sync/backend/data-sync/page.js +3 -1
- package/dist/modules/data_sync/backend/data-sync/page.js.map +2 -2
- package/dist/modules/data_sync/lib/abandoned-run.js +19 -0
- package/dist/modules/data_sync/lib/abandoned-run.js.map +7 -0
- package/dist/modules/data_sync/lib/sync-engine.js +72 -6
- package/dist/modules/data_sync/lib/sync-engine.js.map +2 -2
- package/dist/modules/data_sync/workers/sync-export.js +5 -1
- package/dist/modules/data_sync/workers/sync-export.js.map +2 -2
- package/dist/modules/data_sync/workers/sync-import.js +5 -1
- package/dist/modules/data_sync/workers/sync-import.js.map +2 -2
- package/dist/modules/devices/acl.js +9 -1
- package/dist/modules/devices/acl.js.map +2 -2
- package/dist/modules/devices/api/admin/devices/[id]/route.js +5 -32
- package/dist/modules/devices/api/admin/devices/[id]/route.js.map +2 -2
- package/dist/modules/devices/api/admin/devices/route.js +14 -1
- package/dist/modules/devices/api/admin/devices/route.js.map +2 -2
- package/dist/modules/devices/api/deviceList.js +99 -12
- package/dist/modules/devices/api/deviceList.js.map +2 -2
- package/dist/modules/devices/api/deviceSerialization.js +46 -0
- package/dist/modules/devices/api/deviceSerialization.js.map +7 -0
- package/dist/modules/devices/api/openapi.js +3 -1
- package/dist/modules/devices/api/openapi.js.map +2 -2
- package/dist/modules/devices/api/route.js +9 -1
- package/dist/modules/devices/api/route.js.map +2 -2
- package/dist/modules/devices/backend/devices/[id]/page.js +10 -26
- package/dist/modules/devices/backend/devices/[id]/page.js.map +2 -2
- package/dist/modules/devices/backend/devices/create/page.js +17 -1
- package/dist/modules/devices/backend/devices/create/page.js.map +2 -2
- package/dist/modules/devices/backend/devices/page.js +28 -34
- package/dist/modules/devices/backend/devices/page.js.map +2 -2
- package/dist/modules/devices/backend/devices/useDeviceUserLabels.js +34 -0
- package/dist/modules/devices/backend/devices/useDeviceUserLabels.js.map +7 -0
- package/dist/modules/devices/backend/devices/userOptions.js +52 -0
- package/dist/modules/devices/backend/devices/userOptions.js.map +7 -0
- package/dist/modules/devices/setup.js +6 -2
- package/dist/modules/devices/setup.js.map +2 -2
- package/dist/modules/directory/backend/directory/organizations/page.js +2 -1
- package/dist/modules/directory/backend/directory/organizations/page.js.map +2 -2
- package/dist/modules/directory/backend/directory/tenants/page.js +2 -1
- package/dist/modules/directory/backend/directory/tenants/page.js.map +2 -2
- package/dist/modules/directory/di.js +9 -0
- package/dist/modules/directory/di.js.map +2 -2
- package/dist/modules/directory/services/organizationHierarchyService.js +29 -0
- package/dist/modules/directory/services/organizationHierarchyService.js.map +7 -0
- package/dist/modules/directory/services/organizationScopeService.js +56 -0
- package/dist/modules/directory/services/organizationScopeService.js.map +7 -0
- package/dist/modules/directory/utils/organizationScope.js.map +2 -2
- package/dist/modules/entities/api/records.js +4 -2
- package/dist/modules/entities/api/records.js.map +2 -2
- package/dist/modules/entities/backend/entities/user/[entityId]/records/page.js +3 -1
- package/dist/modules/entities/backend/entities/user/[entityId]/records/page.js.map +2 -2
- package/dist/modules/eudr/api/plots/route.js +5 -1
- package/dist/modules/eudr/api/plots/route.js.map +2 -2
- package/dist/modules/eudr/backend/eudr/evidence-submissions/page.js +3 -0
- package/dist/modules/eudr/backend/eudr/evidence-submissions/page.js.map +2 -2
- package/dist/modules/eudr/backend/eudr/plots/page.js +3 -0
- package/dist/modules/eudr/backend/eudr/plots/page.js.map +2 -2
- package/dist/modules/eudr/backend/eudr/product-mappings/page.js +3 -0
- package/dist/modules/eudr/backend/eudr/product-mappings/page.js.map +2 -2
- package/dist/modules/eudr/backend/eudr/risk-assessments/page.js +3 -0
- package/dist/modules/eudr/backend/eudr/risk-assessments/page.js.map +2 -2
- package/dist/modules/eudr/backend/eudr/statements/page.js +3 -0
- package/dist/modules/eudr/backend/eudr/statements/page.js.map +2 -2
- package/dist/modules/eudr/commands/statements.js +0 -3
- package/dist/modules/eudr/commands/statements.js.map +2 -2
- package/dist/modules/eudr/data/validators.js +4 -1
- package/dist/modules/eudr/data/validators.js.map +2 -2
- package/dist/modules/feature_toggles/components/FeatureTogglesTable.js +1 -0
- package/dist/modules/feature_toggles/components/FeatureTogglesTable.js.map +2 -2
- package/dist/modules/feature_toggles/components/OverridesTable.js +1 -0
- package/dist/modules/feature_toggles/components/OverridesTable.js.map +2 -2
- package/dist/modules/feature_toggles/defaults.json +0 -8
- package/dist/modules/inbox_ops/backend/inbox-ops/log/page.js +3 -0
- package/dist/modules/inbox_ops/backend/inbox-ops/log/page.js.map +2 -2
- package/dist/modules/inbox_ops/backend/inbox-ops/page.js +3 -0
- package/dist/modules/inbox_ops/backend/inbox-ops/page.js.map +2 -2
- package/dist/modules/inbox_ops/lib/htmlToPlainText.js +1 -12
- package/dist/modules/inbox_ops/lib/htmlToPlainText.js.map +2 -2
- package/dist/modules/integrations/api/[id]/credentials/route.js +6 -1
- package/dist/modules/integrations/api/[id]/credentials/route.js.map +2 -2
- package/dist/modules/integrations/backend/integrations/[id]/page.js +38 -29
- package/dist/modules/integrations/backend/integrations/[id]/page.js.map +2 -2
- package/dist/modules/integrations/backend/integrations/bundle/[id]/page.js +36 -9
- package/dist/modules/integrations/backend/integrations/bundle/[id]/page.js.map +2 -2
- package/dist/modules/integrations/backend/integrations/credential-secret-fields.js +55 -0
- package/dist/modules/integrations/backend/integrations/credential-secret-fields.js.map +7 -0
- package/dist/modules/integrations/data/validators.js +11 -3
- package/dist/modules/integrations/data/validators.js.map +2 -2
- package/dist/modules/integrations/lib/credentials-masking.js +6 -2
- package/dist/modules/integrations/lib/credentials-masking.js.map +2 -2
- package/dist/modules/messages/api/[id]/route.js +29 -1
- package/dist/modules/messages/api/[id]/route.js.map +2 -2
- package/dist/modules/messages/api/openapi.js +17 -2
- package/dist/modules/messages/api/openapi.js.map +2 -2
- package/dist/modules/messages/api/route.js +17 -2
- package/dist/modules/messages/api/route.js.map +2 -2
- package/dist/modules/messages/components/MessagesInboxPageClient.js +7 -14
- package/dist/modules/messages/components/MessagesInboxPageClient.js.map +2 -2
- package/dist/modules/messages/components/inboxFilters.js +15 -0
- package/dist/modules/messages/components/inboxFilters.js.map +2 -2
- package/dist/modules/messages/components/message-detail/hooks/useMessageDetailsConversation.js +11 -1
- package/dist/modules/messages/components/message-detail/hooks/useMessageDetailsConversation.js.map +2 -2
- package/dist/modules/messages/components/message-detail/panels/MessageHeader.js +3 -1
- package/dist/modules/messages/components/message-detail/panels/MessageHeader.js.map +2 -2
- package/dist/modules/messages/components/message-detail/panels/thread-panel.js +2 -1
- package/dist/modules/messages/components/message-detail/panels/thread-panel.js.map +2 -2
- package/dist/modules/messages/components/messageListLabels.js +14 -2
- package/dist/modules/messages/components/messageListLabels.js.map +2 -2
- package/dist/modules/messages/data/validators.js +18 -4
- package/dist/modules/messages/data/validators.js.map +2 -2
- package/dist/modules/messages/lib/channel-sender-identity.js +26 -0
- package/dist/modules/messages/lib/channel-sender-identity.js.map +7 -0
- package/dist/modules/messages/lib/composeSourceChannelType.js +41 -0
- package/dist/modules/messages/lib/composeSourceChannelType.js.map +7 -0
- package/dist/modules/payment_gateways/api/webhook/[provider]/route.js +4 -6
- package/dist/modules/payment_gateways/api/webhook/[provider]/route.js.map +2 -2
- package/dist/modules/payment_gateways/backend/payment-gateways/page.js +3 -1
- package/dist/modules/payment_gateways/backend/payment-gateways/page.js.map +2 -2
- package/dist/modules/payment_gateways/lib/webhook-processor.js +7 -0
- package/dist/modules/payment_gateways/lib/webhook-processor.js.map +2 -2
- package/dist/modules/planner/backend/planner/availability-rulesets/page.js +3 -0
- package/dist/modules/planner/backend/planner/availability-rulesets/page.js.map +2 -2
- package/dist/modules/push_notifications/backend/push_notifications/page.js +3 -1
- 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 +150 -51
- package/dist/modules/query_index/lib/engine.js.map +2 -2
- package/dist/modules/query_index/lib/search-entity-policy.js +14 -0
- package/dist/modules/query_index/lib/search-entity-policy.js.map +7 -0
- package/dist/modules/query_index/lib/search-tokens.js +79 -3
- package/dist/modules/query_index/lib/search-tokens.js.map +2 -2
- package/dist/modules/resources/backend/resources/resource-types/page.js +3 -1
- package/dist/modules/resources/backend/resources/resource-types/page.js.map +2 -2
- package/dist/modules/resources/backend/resources/resources/page.js +3 -1
- package/dist/modules/resources/backend/resources/resources/page.js.map +2 -2
- package/dist/modules/sales/backend/sales/channels/offers/page.js +3 -0
- package/dist/modules/sales/backend/sales/channels/offers/page.js.map +2 -2
- package/dist/modules/sales/backend/sales/channels/page.js +3 -0
- package/dist/modules/sales/backend/sales/channels/page.js.map +2 -2
- package/dist/modules/sales/backend/sales/documents/[id]/page.js +10 -8
- package/dist/modules/sales/backend/sales/documents/[id]/page.js.map +2 -2
- package/dist/modules/sales/commands/documents.js +79 -1
- package/dist/modules/sales/commands/documents.js.map +2 -2
- package/dist/modules/sales/components/PriceWithCurrency.js +7 -5
- package/dist/modules/sales/components/PriceWithCurrency.js.map +2 -2
- package/dist/modules/sales/components/channels/SalesChannelOffersPanel.js +3 -0
- package/dist/modules/sales/components/channels/SalesChannelOffersPanel.js.map +2 -2
- package/dist/modules/sales/components/documents/AdjustmentsSection.js +8 -6
- package/dist/modules/sales/components/documents/AdjustmentsSection.js.map +2 -2
- package/dist/modules/sales/components/documents/ItemsSection.js +51 -22
- package/dist/modules/sales/components/documents/ItemsSection.js.map +2 -2
- package/dist/modules/sales/components/documents/LineItemDialog.js +83 -18
- package/dist/modules/sales/components/documents/LineItemDialog.js.map +2 -2
- package/dist/modules/sales/components/documents/PaymentsSection.js +23 -9
- package/dist/modules/sales/components/documents/PaymentsSection.js.map +2 -2
- package/dist/modules/sales/components/documents/ReturnsSection.js +8 -6
- package/dist/modules/sales/components/documents/ReturnsSection.js.map +2 -2
- package/dist/modules/sales/components/documents/SalesDocumentsTable.js +68 -14
- package/dist/modules/sales/components/documents/SalesDocumentsTable.js.map +2 -2
- package/dist/modules/sales/components/documents/SalesOrderDraftLines.js +6 -5
- package/dist/modules/sales/components/documents/SalesOrderDraftLines.js.map +2 -2
- package/dist/modules/sales/components/documents/ShipmentDialog.js +5 -4
- package/dist/modules/sales/components/documents/ShipmentDialog.js.map +2 -2
- package/dist/modules/sales/components/documents/ShipmentsSection.js +8 -6
- package/dist/modules/sales/components/documents/ShipmentsSection.js.map +2 -2
- package/dist/modules/sales/components/documents/lineItemShipmentLock.js +54 -0
- package/dist/modules/sales/components/documents/lineItemShipmentLock.js.map +7 -0
- 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 +8 -2
- package/dist/modules/sales/data/entities.js.map +2 -2
- package/dist/modules/sales/extension-points.js +1 -0
- package/dist/modules/sales/extension-points.js.map +2 -2
- package/dist/modules/sales/lib/salesChannelsToggleSeed.js +33 -0
- package/dist/modules/sales/lib/salesChannelsToggleSeed.js.map +7 -0
- package/dist/modules/sales/migrations/Migration20260821120000_sales_notes_addresses_context_idx.js +32 -0
- package/dist/modules/sales/migrations/Migration20260821120000_sales_notes_addresses_context_idx.js.map +7 -0
- package/dist/modules/sales/setup.js +2 -0
- package/dist/modules/sales/setup.js.map +2 -2
- package/dist/modules/sales/widgets/injection/payment-gateway-status-column/widget.js +10 -2
- package/dist/modules/sales/widgets/injection/payment-gateway-status-column/widget.js.map +2 -2
- package/dist/modules/sales/widgets/injection-table.js +4 -7
- package/dist/modules/sales/widgets/injection-table.js.map +2 -2
- package/dist/modules/staff/backend/staff/leave-requests/page.js +3 -0
- package/dist/modules/staff/backend/staff/leave-requests/page.js.map +2 -2
- package/dist/modules/staff/backend/staff/my-leave-requests/page.js +3 -0
- package/dist/modules/staff/backend/staff/my-leave-requests/page.js.map +2 -2
- package/dist/modules/staff/backend/staff/team-members/page.js +3 -0
- package/dist/modules/staff/backend/staff/team-members/page.js.map +2 -2
- package/dist/modules/staff/backend/staff/team-roles/page.js +3 -0
- package/dist/modules/staff/backend/staff/team-roles/page.js.map +2 -2
- package/dist/modules/staff/backend/staff/teams/[id]/edit/page.js +3 -0
- package/dist/modules/staff/backend/staff/teams/[id]/edit/page.js.map +2 -2
- package/dist/modules/staff/backend/staff/teams/page.js +3 -0
- package/dist/modules/staff/backend/staff/teams/page.js.map +2 -2
- package/dist/modules/staff/backend/staff/timesheets/page.js +29 -18
- package/dist/modules/staff/backend/staff/timesheets/page.js.map +2 -2
- package/dist/modules/staff/backend/staff/timesheets/projects/page.js +3 -0
- package/dist/modules/staff/backend/staff/timesheets/projects/page.js.map +2 -2
- package/dist/modules/sync_excel/lib/adapters/customers.js +1 -0
- 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 +12 -9
- package/dist/modules/warranty_claims/api/portal/claims/route.js.map +2 -2
- package/dist/modules/warranty_claims/backend/page.js +3 -0
- package/dist/modules/warranty_claims/backend/page.js.map +2 -2
- package/dist/modules/warranty_claims/backend/warranty_claims/registrations/page.js +3 -0
- 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 +3 -0
- 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 +3 -0
- 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 +3 -0
- package/dist/modules/warranty_claims/frontend/[orgSlug]/portal/claims/page.js.map +2 -2
- package/dist/modules/wms/api/warehouseSearch.js +21 -0
- package/dist/modules/wms/api/warehouseSearch.js.map +7 -0
- package/dist/modules/wms/api/warehouses/route.js +13 -9
- package/dist/modules/wms/api/warehouses/route.js.map +2 -2
- package/dist/modules/wms/api/zones/route.js +15 -2
- package/dist/modules/wms/api/zones/route.js.map +2 -2
- package/dist/modules/wms/commands/configuration.js +121 -9
- package/dist/modules/wms/commands/configuration.js.map +2 -2
- package/dist/modules/wms/commands/inventory-actions.js +3 -0
- package/dist/modules/wms/commands/inventory-actions.js.map +2 -2
- package/dist/modules/wms/commands/shared.js +9 -1
- package/dist/modules/wms/commands/shared.js.map +2 -2
- package/dist/modules/wms/components/backend/WarehouseEditDialog.js +158 -0
- package/dist/modules/wms/components/backend/WarehouseEditDialog.js.map +7 -0
- package/dist/modules/wms/components/backend/WmsConfigurationPage.js +76 -111
- package/dist/modules/wms/components/backend/WmsConfigurationPage.js.map +3 -3
- package/dist/modules/wms/components/backend/WmsInventoryConsolePage.js +1 -0
- package/dist/modules/wms/components/backend/WmsInventoryConsolePage.js.map +2 -2
- package/dist/modules/wms/components/backend/WmsLotsListPage.js +1 -0
- package/dist/modules/wms/components/backend/WmsLotsListPage.js.map +2 -2
- package/dist/modules/wms/components/backend/inventoryMutationLoaders.js +27 -20
- package/dist/modules/wms/components/backend/inventoryMutationLoaders.js.map +2 -2
- package/dist/modules/wms/components/backend/warehouseFormOptions.js +66 -0
- package/dist/modules/wms/components/backend/warehouseFormOptions.js.map +7 -0
- package/dist/modules/workflows/backend/definitions/page.js +3 -1
- package/dist/modules/workflows/backend/definitions/page.js.map +2 -2
- package/dist/modules/workflows/backend/events/page.js +3 -1
- package/dist/modules/workflows/backend/events/page.js.map +2 -2
- package/dist/modules/workflows/backend/instances/page.js +3 -1
- package/dist/modules/workflows/backend/instances/page.js.map +2 -2
- package/dist/modules/workflows/backend/tasks/page.js +3 -1
- package/dist/modules/workflows/backend/tasks/page.js.map +2 -2
- package/dist/modules/workflows/lib/activity-executor.js +4 -0
- package/dist/modules/workflows/lib/activity-executor.js.map +2 -2
- package/package.json +9 -10
- package/src/helpers/integration/api.ts +33 -1
- package/src/helpers/integration/communicationChannelsFixtures.ts +69 -1
- package/src/modules/api_keys/api/keys/route.ts +3 -1
- package/src/modules/api_keys/backend/api-keys/page.tsx +4 -1
- package/src/modules/api_keys/di.ts +7 -0
- package/src/modules/api_keys/services/principalService.ts +33 -0
- package/src/modules/attachments/AGENTS.md +15 -0
- package/src/modules/attachments/api/route.ts +2 -2
- package/src/modules/attachments/components/AttachmentLibrary.tsx +3 -0
- package/src/modules/attachments/di.ts +16 -0
- package/src/modules/attachments/i18n/de.json +5 -0
- package/src/modules/attachments/i18n/en.json +5 -0
- package/src/modules/attachments/i18n/es.json +5 -0
- package/src/modules/attachments/i18n/ko.json +5 -0
- package/src/modules/attachments/i18n/pl.json +5 -0
- package/src/modules/attachments/index.ts +10 -0
- package/src/modules/attachments/lib/attachment-service.ts +468 -0
- package/src/modules/attachments/lib/scoped-upload-service.ts +46 -0
- package/src/modules/attachments/lib/upload-limits.ts +6 -2
- package/src/modules/audit_logs/backend/audit-logs/page.tsx +8 -0
- package/src/modules/audit_logs/lib/display-helpers.tsx +42 -32
- package/src/modules/audit_logs/services/actionLogService.ts +74 -11
- package/src/modules/auth/acl.ts +30 -6
- package/src/modules/auth/api/feature-check.ts +10 -3
- package/src/modules/auth/api/login.ts +9 -1
- package/src/modules/auth/api/reset/validate.ts +57 -0
- package/src/modules/auth/api/roles/acl/route.ts +42 -39
- package/src/modules/auth/api/session/refresh.ts +32 -1
- package/src/modules/auth/api/users/acl/route.ts +177 -53
- package/src/modules/auth/api/users/route.ts +18 -5
- package/src/modules/auth/backend/roles/[id]/edit/page.meta.ts +5 -2
- package/src/modules/auth/backend/roles/page.tsx +4 -2
- package/src/modules/auth/backend/users/[id]/edit/page.meta.ts +5 -2
- package/src/modules/auth/backend/users/page.tsx +3 -2
- package/src/modules/auth/commands/acl.ts +495 -0
- package/src/modules/auth/components/AclEditor.tsx +63 -33
- package/src/modules/auth/data/entities.ts +4 -1
- package/src/modules/auth/data/validators.ts +5 -0
- package/src/modules/auth/di.ts +46 -16
- package/src/modules/auth/frontend/reset/[token]/page.tsx +74 -0
- package/src/modules/auth/i18n/de.json +389 -0
- package/src/modules/auth/i18n/en.json +389 -0
- package/src/modules/auth/i18n/es.json +389 -0
- package/src/modules/auth/i18n/ko.json +389 -0
- package/src/modules/auth/i18n/pl.json +391 -2
- package/src/modules/auth/lib/grantChecks.ts +6 -0
- package/src/modules/auth/lib/userIdFilter.ts +31 -0
- package/src/modules/auth/services/authService.ts +18 -2
- package/src/modules/auth/services/principalService.ts +266 -0
- package/src/modules/auth/services/rbacService.ts +110 -24
- package/src/modules/auth/services/roleOrganizationScope.ts +70 -0
- package/src/modules/business_rules/backend/logs/page.tsx +4 -1
- package/src/modules/business_rules/backend/rules/page.tsx +4 -1
- package/src/modules/business_rules/backend/sets/page.tsx +4 -1
- package/src/modules/business_rules/lib/expression-evaluator.ts +9 -9
- package/src/modules/business_rules/lib/rule-evaluator.ts +10 -9
- 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 +12 -5
- package/src/modules/catalog/components/categories/CategoriesDataTable.tsx +3 -0
- package/src/modules/catalog/components/products/ProductsDataTable.tsx +7 -0
- package/src/modules/catalog/i18n/de.json +1 -0
- package/src/modules/catalog/i18n/en.json +1 -0
- package/src/modules/catalog/i18n/es.json +1 -0
- package/src/modules/catalog/i18n/ko.json +1 -0
- package/src/modules/catalog/i18n/pl.json +1 -0
- package/src/modules/catalog/widgets/injection/merchandising-assistant-trigger/widget.client.tsx +4 -0
- package/src/modules/communication_channels/api/post/channels/[id]/test-send/route.ts +17 -1
- package/src/modules/communication_channels/api/post/test-seed/route.ts +155 -16
- package/src/modules/communication_channels/backend/communication_channels/channels/page.tsx +4 -0
- package/src/modules/communication_channels/commands/ingest-inbound-message.ts +38 -1
- package/src/modules/communication_channels/di.ts +7 -0
- package/src/modules/communication_channels/lib/adapter.ts +14 -0
- package/src/modules/communication_channels/lib/email-capabilities.ts +4 -0
- package/src/modules/communication_channels/lib/outbound-recipient.ts +71 -0
- package/src/modules/communication_channels/lib/resolve-channel-type.ts +99 -0
- package/src/modules/communication_channels/lib/test-seed.ts +64 -4
- package/src/modules/configs/i18n/de.json +2 -0
- package/src/modules/configs/i18n/en.json +2 -0
- package/src/modules/configs/i18n/es.json +2 -0
- package/src/modules/configs/i18n/ko.json +2 -0
- package/src/modules/configs/i18n/pl.json +2 -0
- package/src/modules/configs/lib/system-status.ts +9 -0
- package/src/modules/currencies/AGENTS.md +3 -0
- package/src/modules/currencies/backend/currencies/page.tsx +4 -1
- package/src/modules/currencies/backend/exchange-rates/page.tsx +4 -1
- package/src/modules/currencies/services/README.md +45 -0
- package/src/modules/currencies/services/rateFetchingService.ts +6 -1
- package/src/modules/customer_accounts/api/admin/domain-mappings.ts +7 -0
- package/src/modules/customer_accounts/backend/customer_accounts/roles/page.tsx +4 -1
- package/src/modules/customer_accounts/backend/customer_accounts/users/PortalUsersPageClient.tsx +4 -1
- package/src/modules/customer_accounts/services/domainMappingService.ts +10 -0
- package/src/modules/customers/ai-tools/companies-pack.ts +4 -1
- package/src/modules/customers/ai-tools/deal-analyzer-pack.ts +17 -2
- package/src/modules/customers/ai-tools/deals-pack.ts +66 -1
- package/src/modules/customers/ai-tools/people-pack.ts +4 -1
- package/src/modules/customers/api/activities/route.ts +45 -0
- package/src/modules/customers/api/companies/[id]/people/route.ts +24 -73
- package/src/modules/customers/api/companies/[id]/route.ts +24 -107
- package/src/modules/customers/api/dashboard/widgets/customer-todos/route.ts +16 -8
- package/src/modules/customers/api/deals/[id]/companies/route.ts +4 -1
- package/src/modules/customers/api/deals/[id]/people/route.ts +4 -1
- package/src/modules/customers/api/deals/[id]/route.ts +17 -28
- package/src/modules/customers/api/deals/[id]/stats/route.ts +10 -25
- package/src/modules/customers/api/deals/aggregate/route.ts +17 -9
- package/src/modules/customers/api/deals/map/route.ts +4 -4
- package/src/modules/customers/api/deals/route.ts +50 -1
- package/src/modules/customers/api/entity-roles-factory.ts +8 -4
- package/src/modules/customers/api/interactions/route.ts +8 -2
- package/src/modules/customers/api/interactions/tasks/route.ts +24 -1
- package/src/modules/customers/api/people/[id]/companies/[linkId]/route.ts +12 -4
- package/src/modules/customers/api/people/[id]/companies/context.ts +4 -1
- package/src/modules/customers/api/people/[id]/companies/enriched/route.ts +4 -1
- package/src/modules/customers/api/people/[id]/route.ts +16 -11
- package/src/modules/customers/api/people/check-phone/route.ts +75 -10
- package/src/modules/customers/api/todos/route.ts +27 -2
- package/src/modules/customers/backend/customers/companies/page.tsx +5 -2
- package/src/modules/customers/backend/customers/deals/[id]/page.tsx +7 -2
- package/src/modules/customers/backend/customers/deals/page.tsx +8 -2
- package/src/modules/customers/backend/customers/deals/pipeline/components/Lane.tsx +5 -14
- package/src/modules/customers/backend/customers/deals/pipeline/components/StatusFilterPopover.tsx +109 -27
- package/src/modules/customers/backend/customers/deals/pipeline/components/toneClasses.ts +21 -0
- package/src/modules/customers/backend/customers/people/page.tsx +5 -2
- package/src/modules/customers/backend/hooks/useEmailDuplicateCheck.ts +12 -4
- package/src/modules/customers/commands/deals.ts +34 -59
- package/src/modules/customers/commands/interactions.ts +1 -1
- package/src/modules/customers/commands/personCompanyLinks.ts +224 -8
- package/src/modules/customers/components/CustomerTodosTable.tsx +2 -0
- 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 +4 -2
- package/src/modules/customers/components/calendar/editor/PeopleField.tsx +61 -5
- package/src/modules/customers/components/calendar/editor/hooks.ts +7 -1
- package/src/modules/customers/components/calendar/types.ts +2 -2
- package/src/modules/customers/components/detail/CompanyKpiBar.tsx +5 -4
- package/src/modules/customers/components/detail/CompanyPeopleSection.tsx +8 -1
- package/src/modules/customers/components/detail/DealForm.tsx +22 -2
- package/src/modules/customers/components/detail/DealsSection.tsx +11 -5
- package/src/modules/customers/components/detail/EntityTagsDialog.tsx +58 -12
- package/src/modules/customers/components/detail/PersonCompaniesSection.tsx +8 -1
- package/src/modules/customers/components/detail/hooks/usePersonTasks.ts +23 -14
- 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 +15 -5
- package/src/modules/customers/data/entities.ts +1 -1
- package/src/modules/customers/data/validators.ts +50 -9
- package/src/modules/customers/events.ts +5 -0
- package/src/modules/customers/i18n/de.json +9 -1
- package/src/modules/customers/i18n/en.json +9 -1
- package/src/modules/customers/i18n/es.json +9 -1
- package/src/modules/customers/i18n/ko.json +9 -1
- package/src/modules/customers/i18n/pl.json +9 -1
- package/src/modules/customers/lib/calendar/conflicts.ts +10 -2
- package/src/modules/customers/lib/calendar/editorPayload.ts +4 -3
- package/src/modules/customers/lib/calendar/mapItem.ts +8 -3
- package/src/modules/customers/lib/calendar/participantIdentity.ts +17 -0
- package/src/modules/customers/lib/closureStage.ts +76 -0
- package/src/modules/customers/lib/dealStatus.ts +42 -0
- package/src/modules/customers/lib/detailReadAccess.ts +35 -0
- package/src/modules/customers/lib/findPeopleByAddresses.ts +8 -6
- package/src/modules/customers/lib/personCompanies.ts +136 -1
- package/src/modules/customers/lib/todoCompatibility.ts +19 -1
- 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 +6 -0
- package/src/modules/data_sync/AGENTS.md +1 -1
- package/src/modules/data_sync/backend/data-sync/page.tsx +4 -1
- package/src/modules/data_sync/lib/abandoned-run.ts +56 -0
- package/src/modules/data_sync/lib/adapter.ts +36 -0
- package/src/modules/data_sync/lib/sync-engine.ts +113 -5
- package/src/modules/data_sync/workers/sync-export.ts +4 -0
- package/src/modules/data_sync/workers/sync-import.ts +4 -0
- package/src/modules/devices/AGENTS.md +20 -1
- package/src/modules/devices/acl.ts +9 -1
- package/src/modules/devices/api/admin/devices/[id]/route.ts +5 -34
- package/src/modules/devices/api/admin/devices/route.ts +14 -1
- package/src/modules/devices/api/deviceList.ts +135 -11
- package/src/modules/devices/api/deviceSerialization.ts +50 -0
- package/src/modules/devices/api/openapi.ts +9 -1
- package/src/modules/devices/api/route.ts +9 -1
- package/src/modules/devices/backend/devices/[id]/page.tsx +18 -32
- package/src/modules/devices/backend/devices/create/page.tsx +17 -1
- package/src/modules/devices/backend/devices/page.tsx +44 -45
- package/src/modules/devices/backend/devices/useDeviceUserLabels.ts +45 -0
- package/src/modules/devices/backend/devices/userOptions.ts +99 -0
- package/src/modules/devices/i18n/de.json +3 -2
- package/src/modules/devices/i18n/en.json +3 -2
- package/src/modules/devices/i18n/es.json +3 -2
- package/src/modules/devices/i18n/ko.json +3 -2
- package/src/modules/devices/i18n/pl.json +3 -2
- package/src/modules/devices/setup.ts +6 -2
- package/src/modules/directory/backend/directory/organizations/page.tsx +3 -1
- package/src/modules/directory/backend/directory/tenants/page.tsx +3 -1
- package/src/modules/directory/di.ts +14 -2
- package/src/modules/directory/services/organizationHierarchyService.ts +34 -0
- package/src/modules/directory/services/organizationScopeService.ts +85 -0
- package/src/modules/directory/utils/organizationScope.ts +4 -15
- package/src/modules/entities/api/records.ts +2 -0
- package/src/modules/entities/backend/entities/user/[entityId]/records/page.tsx +4 -1
- package/src/modules/eudr/api/plots/route.ts +4 -0
- package/src/modules/eudr/backend/eudr/evidence-submissions/page.tsx +4 -0
- package/src/modules/eudr/backend/eudr/plots/page.tsx +4 -0
- package/src/modules/eudr/backend/eudr/product-mappings/page.tsx +4 -0
- package/src/modules/eudr/backend/eudr/risk-assessments/page.tsx +4 -0
- package/src/modules/eudr/backend/eudr/statements/page.tsx +4 -0
- package/src/modules/eudr/commands/statements.ts +0 -3
- package/src/modules/eudr/data/validators.ts +16 -1
- package/src/modules/feature_toggles/components/FeatureTogglesTable.tsx +2 -1
- package/src/modules/feature_toggles/components/OverridesTable.tsx +2 -1
- package/src/modules/feature_toggles/defaults.json +0 -8
- package/src/modules/inbox_ops/backend/inbox-ops/log/page.tsx +4 -0
- package/src/modules/inbox_ops/backend/inbox-ops/page.tsx +4 -0
- package/src/modules/inbox_ops/lib/htmlToPlainText.ts +1 -17
- package/src/modules/integrations/api/[id]/credentials/route.ts +6 -4
- package/src/modules/integrations/backend/integrations/[id]/page.tsx +61 -31
- package/src/modules/integrations/backend/integrations/bundle/[id]/page.tsx +44 -9
- package/src/modules/integrations/backend/integrations/credential-secret-fields.ts +84 -0
- package/src/modules/integrations/data/validators.ts +12 -2
- package/src/modules/integrations/i18n/de.json +1 -0
- package/src/modules/integrations/i18n/en.json +1 -0
- package/src/modules/integrations/i18n/es.json +1 -0
- package/src/modules/integrations/i18n/ko.json +1 -0
- package/src/modules/integrations/i18n/pl.json +1 -0
- package/src/modules/integrations/lib/credentials-masking.ts +10 -6
- package/src/modules/messages/api/[id]/route.ts +55 -1
- package/src/modules/messages/api/openapi.ts +20 -0
- package/src/modules/messages/api/route.ts +31 -2
- package/src/modules/messages/components/MessagesInboxPageClient.tsx +9 -16
- package/src/modules/messages/components/inboxFilters.ts +36 -0
- package/src/modules/messages/components/message-detail/hooks/useMessageDetailsConversation.ts +14 -1
- package/src/modules/messages/components/message-detail/panels/MessageHeader.tsx +3 -1
- package/src/modules/messages/components/message-detail/panels/thread-panel.tsx +2 -1
- package/src/modules/messages/components/message-detail/types.ts +3 -0
- package/src/modules/messages/components/messageListLabels.ts +52 -3
- package/src/modules/messages/data/validators.ts +43 -4
- package/src/modules/messages/lib/channel-sender-identity.ts +55 -0
- package/src/modules/messages/lib/composeSourceChannelType.ts +95 -0
- package/src/modules/payment_gateways/api/webhook/[provider]/route.ts +4 -6
- package/src/modules/payment_gateways/backend/payment-gateways/page.tsx +4 -1
- package/src/modules/payment_gateways/lib/webhook-processor.ts +11 -0
- package/src/modules/planner/backend/planner/availability-rulesets/page.tsx +4 -0
- package/src/modules/push_notifications/backend/push_notifications/page.tsx +4 -1
- package/src/modules/push_notifications/backend/push_notifications/send/page.tsx +4 -4
- package/src/modules/query_index/lib/engine.ts +249 -61
- package/src/modules/query_index/lib/search-entity-policy.ts +46 -0
- package/src/modules/query_index/lib/search-tokens.ts +135 -3
- package/src/modules/resources/backend/resources/resource-types/page.tsx +4 -1
- package/src/modules/resources/backend/resources/resources/page.tsx +4 -1
- package/src/modules/sales/backend/sales/channels/offers/page.tsx +4 -0
- package/src/modules/sales/backend/sales/channels/page.tsx +4 -0
- package/src/modules/sales/backend/sales/documents/[id]/page.tsx +14 -8
- package/src/modules/sales/commands/documents.ts +93 -0
- package/src/modules/sales/components/PriceWithCurrency.tsx +17 -5
- package/src/modules/sales/components/channels/SalesChannelOffersPanel.tsx +4 -0
- package/src/modules/sales/components/documents/AdjustmentsSection.tsx +6 -5
- package/src/modules/sales/components/documents/ItemsSection.tsx +56 -18
- package/src/modules/sales/components/documents/LineItemDialog.tsx +137 -20
- package/src/modules/sales/components/documents/PaymentsSection.tsx +20 -9
- package/src/modules/sales/components/documents/ReturnsSection.tsx +6 -5
- package/src/modules/sales/components/documents/SalesDocumentsTable.tsx +106 -14
- package/src/modules/sales/components/documents/SalesOrderDraftLines.tsx +6 -5
- package/src/modules/sales/components/documents/ShipmentDialog.tsx +5 -4
- package/src/modules/sales/components/documents/ShipmentsSection.tsx +6 -5
- package/src/modules/sales/components/documents/lineItemShipmentLock.ts +74 -0
- package/src/modules/sales/components/documents/lineItemUtils.ts +7 -2
- package/src/modules/sales/data/entities.ts +6 -0
- package/src/modules/sales/extension-points.ts +1 -0
- package/src/modules/sales/i18n/de.json +8 -0
- package/src/modules/sales/i18n/en.json +8 -0
- package/src/modules/sales/i18n/es.json +8 -0
- package/src/modules/sales/i18n/ko.json +8 -0
- package/src/modules/sales/i18n/pl.json +8 -0
- package/src/modules/sales/lib/salesChannelsToggleSeed.ts +42 -0
- package/src/modules/sales/migrations/.snapshot-open-mercato.json +60 -0
- package/src/modules/sales/migrations/Migration20260821120000_sales_notes_addresses_context_idx.ts +87 -0
- package/src/modules/sales/setup.ts +2 -0
- package/src/modules/sales/widgets/injection/payment-gateway-status-column/widget.ts +9 -1
- package/src/modules/sales/widgets/injection-table.ts +4 -7
- package/src/modules/staff/backend/staff/leave-requests/page.tsx +4 -0
- package/src/modules/staff/backend/staff/my-leave-requests/page.tsx +4 -0
- package/src/modules/staff/backend/staff/team-members/page.tsx +6 -0
- package/src/modules/staff/backend/staff/team-roles/page.tsx +4 -0
- package/src/modules/staff/backend/staff/teams/[id]/edit/page.tsx +4 -0
- package/src/modules/staff/backend/staff/teams/page.tsx +4 -0
- package/src/modules/staff/backend/staff/timesheets/page.tsx +12 -1
- package/src/modules/staff/backend/staff/timesheets/projects/page.tsx +4 -0
- package/src/modules/sync_excel/lib/adapters/customers.ts +5 -0
- 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 +12 -9
- package/src/modules/warranty_claims/backend/page.tsx +4 -0
- package/src/modules/warranty_claims/backend/warranty_claims/registrations/page.tsx +4 -0
- package/src/modules/warranty_claims/backend/warranty_claims/troubleshooting-guides/page.tsx +4 -0
- package/src/modules/warranty_claims/backend/warranty_claims/vendor-policies/page.tsx +4 -0
- package/src/modules/warranty_claims/frontend/[orgSlug]/portal/claims/page.tsx +4 -0
- package/src/modules/wms/api/warehouseSearch.ts +23 -0
- package/src/modules/wms/api/warehouses/route.ts +13 -9
- package/src/modules/wms/api/zones/route.ts +16 -0
- package/src/modules/wms/commands/configuration.ts +159 -10
- package/src/modules/wms/commands/inventory-actions.ts +3 -0
- package/src/modules/wms/commands/shared.ts +17 -0
- package/src/modules/wms/components/backend/WarehouseEditDialog.tsx +216 -0
- package/src/modules/wms/components/backend/WmsConfigurationPage.tsx +95 -141
- package/src/modules/wms/components/backend/WmsInventoryConsolePage.tsx +2 -0
- package/src/modules/wms/components/backend/WmsLotsListPage.tsx +2 -0
- package/src/modules/wms/components/backend/inventoryMutationLoaders.ts +36 -20
- package/src/modules/wms/components/backend/warehouseFormOptions.ts +72 -0
- package/src/modules/wms/i18n/de.json +2 -0
- package/src/modules/wms/i18n/en.json +2 -0
- package/src/modules/wms/i18n/es.json +2 -0
- package/src/modules/wms/i18n/ko.json +2 -0
- package/src/modules/wms/i18n/pl.json +2 -0
- package/src/modules/workflows/backend/definitions/page.tsx +4 -1
- package/src/modules/workflows/backend/events/page.tsx +4 -1
- package/src/modules/workflows/backend/instances/page.tsx +4 -1
- package/src/modules/workflows/backend/tasks/page.tsx +4 -1
- package/src/modules/workflows/lib/activity-executor.ts +9 -0
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import type { FilterQuery } from '@mikro-orm/core'
|
|
2
|
+
import type { EntityManager } from '@mikro-orm/postgresql'
|
|
3
|
+
import type { OrganizationHierarchyService } from '@open-mercato/shared/lib/auth/principal-service'
|
|
4
|
+
import { findOneWithDecryption } from '@open-mercato/shared/lib/encryption/find'
|
|
5
|
+
import { Organization } from '../data/entities'
|
|
6
|
+
|
|
7
|
+
function normalizeIds(values: unknown): string[] {
|
|
8
|
+
if (!Array.isArray(values)) return []
|
|
9
|
+
return Array.from(new Set(values
|
|
10
|
+
.map((value) => typeof value === 'string' ? value.trim() : '')
|
|
11
|
+
.filter(Boolean)))
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
export class DefaultOrganizationHierarchyService implements OrganizationHierarchyService {
|
|
15
|
+
constructor(private readonly em: EntityManager) {}
|
|
16
|
+
|
|
17
|
+
async resolveAncestorIds(input: {
|
|
18
|
+
tenantId: string
|
|
19
|
+
organizationId: string
|
|
20
|
+
}): Promise<string[] | null> {
|
|
21
|
+
const organization = await findOneWithDecryption(
|
|
22
|
+
this.em,
|
|
23
|
+
Organization,
|
|
24
|
+
{
|
|
25
|
+
id: input.organizationId,
|
|
26
|
+
tenant: input.tenantId,
|
|
27
|
+
deletedAt: null,
|
|
28
|
+
} as FilterQuery<Organization>,
|
|
29
|
+
{ fields: ['id', 'ancestorIds'] },
|
|
30
|
+
{ tenantId: input.tenantId, organizationId: input.organizationId },
|
|
31
|
+
)
|
|
32
|
+
return organization ? normalizeIds(organization.ancestorIds) : null
|
|
33
|
+
}
|
|
34
|
+
}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import type { EntityManager } from '@mikro-orm/postgresql'
|
|
2
|
+
import type { AwilixContainer } from 'awilix'
|
|
3
|
+
import type {
|
|
4
|
+
OrganizationScopeService,
|
|
5
|
+
OrganizationScopeRequest,
|
|
6
|
+
} from '@open-mercato/shared/lib/auth/principal-service'
|
|
7
|
+
import type { AuthContext } from '@open-mercato/shared/lib/auth/server'
|
|
8
|
+
import { resolveOrganizationScope, resolveOrganizationScopeForRequest } from '../utils/organizationScope'
|
|
9
|
+
|
|
10
|
+
type OrganizationScopeRbac = {
|
|
11
|
+
invalidateUserCache(userId: string): Promise<void>
|
|
12
|
+
loadAcl(
|
|
13
|
+
userId: string,
|
|
14
|
+
scope: { tenantId: string | null; organizationId: string | null },
|
|
15
|
+
): Promise<{ isSuperAdmin: boolean; features: string[]; organizations: string[] | null }>
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
export class DefaultOrganizationScopeService implements OrganizationScopeService {
|
|
19
|
+
constructor(
|
|
20
|
+
private readonly em: EntityManager,
|
|
21
|
+
private readonly rbac: OrganizationScopeRbac,
|
|
22
|
+
private readonly container: AwilixContainer,
|
|
23
|
+
) {}
|
|
24
|
+
|
|
25
|
+
resolve(input: {
|
|
26
|
+
auth: AuthContext | null | undefined
|
|
27
|
+
selectedId?: string | null
|
|
28
|
+
tenantId?: string | null
|
|
29
|
+
freshAcl?: boolean
|
|
30
|
+
}) {
|
|
31
|
+
const auth = input.auth
|
|
32
|
+
if (input.freshAcl && auth?.sub) {
|
|
33
|
+
return this.resolveFresh({
|
|
34
|
+
auth,
|
|
35
|
+
selectedId: input.selectedId,
|
|
36
|
+
tenantId: input.tenantId,
|
|
37
|
+
}).then((result) => result.scope)
|
|
38
|
+
}
|
|
39
|
+
return resolveOrganizationScope({
|
|
40
|
+
em: this.em,
|
|
41
|
+
rbac: this.rbac as Parameters<typeof resolveOrganizationScope>[0]['rbac'],
|
|
42
|
+
auth: input.auth,
|
|
43
|
+
selectedId: input.selectedId,
|
|
44
|
+
tenantId: input.tenantId,
|
|
45
|
+
})
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
async resolveFresh(input: {
|
|
49
|
+
auth: NonNullable<AuthContext>
|
|
50
|
+
selectedId?: string | null
|
|
51
|
+
tenantId?: string | null
|
|
52
|
+
}) {
|
|
53
|
+
await this.rbac.invalidateUserCache(input.auth.sub)
|
|
54
|
+
const acl = await this.rbac.loadAcl(input.auth.sub, {
|
|
55
|
+
tenantId: input.tenantId ?? input.auth.tenantId ?? null,
|
|
56
|
+
organizationId: input.selectedId ?? input.auth.orgId ?? null,
|
|
57
|
+
})
|
|
58
|
+
const freshRbac: Parameters<typeof resolveOrganizationScope>[0]['rbac'] = {
|
|
59
|
+
loadAcl: async () => acl,
|
|
60
|
+
}
|
|
61
|
+
const scope = await resolveOrganizationScope({
|
|
62
|
+
em: this.em,
|
|
63
|
+
rbac: freshRbac,
|
|
64
|
+
auth: input.auth,
|
|
65
|
+
selectedId: input.selectedId,
|
|
66
|
+
tenantId: input.tenantId,
|
|
67
|
+
})
|
|
68
|
+
return { scope, acl }
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
resolveForRequest(input: {
|
|
72
|
+
auth: AuthContext | null | undefined
|
|
73
|
+
request?: OrganizationScopeRequest
|
|
74
|
+
selectedId?: string | null
|
|
75
|
+
tenantId?: string | null
|
|
76
|
+
}) {
|
|
77
|
+
return resolveOrganizationScopeForRequest({
|
|
78
|
+
container: this.container,
|
|
79
|
+
auth: input.auth,
|
|
80
|
+
request: input.request,
|
|
81
|
+
selectedId: input.selectedId,
|
|
82
|
+
tenantId: input.tenantId,
|
|
83
|
+
})
|
|
84
|
+
}
|
|
85
|
+
}
|
|
@@ -5,6 +5,7 @@ import { Organization } from '@open-mercato/core/modules/directory/data/entities
|
|
|
5
5
|
import { isAllOrganizationsSelection } from '@open-mercato/core/modules/directory/constants'
|
|
6
6
|
import type { RbacService } from '@open-mercato/core/modules/auth/services/rbacService'
|
|
7
7
|
import type { AuthContext } from '@open-mercato/shared/lib/auth/server'
|
|
8
|
+
import type { OrganizationScope } from '@open-mercato/shared/lib/auth/principal-service'
|
|
8
9
|
import { getCurrentCacheTenant, runWithCacheTenant, type CacheStrategy } from '@open-mercato/cache'
|
|
9
10
|
import { parseSelectedOrganizationCookie, parseSelectedTenantCookie } from './scopeCookies'
|
|
10
11
|
import { createLogger } from '@open-mercato/shared/lib/logger'
|
|
@@ -13,19 +14,7 @@ const logger = createLogger('directory').child({ component: 'org-scope-cache' })
|
|
|
13
14
|
|
|
14
15
|
export { parseSelectedOrganizationCookie, parseSelectedTenantCookie }
|
|
15
16
|
|
|
16
|
-
export type OrganizationScope
|
|
17
|
-
selectedId: string | null
|
|
18
|
-
filterIds: string[] | null
|
|
19
|
-
allowedIds: string[] | null
|
|
20
|
-
tenantId: string | null
|
|
21
|
-
// True when the caller explicitly selected a concrete organization (cookie /
|
|
22
|
-
// selectedId param) that could not be honored — it does not exist for the
|
|
23
|
-
// tenant or is not accessible. Reads degrade gracefully (filterIds/selectedId
|
|
24
|
-
// fall back to the caller's accessible orgs), but writes MUST fail loudly on
|
|
25
|
-
// this so a record never lands under an org the caller did not intend. Absent
|
|
26
|
-
// (undefined) means the selection — if any — was honored.
|
|
27
|
-
selectionRejected?: boolean
|
|
28
|
-
}
|
|
17
|
+
export type { OrganizationScope }
|
|
29
18
|
|
|
30
19
|
// Phase 4 — short-TTL cache for resolveOrganizationScopeForRequest.
|
|
31
20
|
// OrganizationScope is a pure function of (userId, tenantId, selectedOrgId,
|
|
@@ -249,8 +238,8 @@ export async function resolveOrganizationScope({
|
|
|
249
238
|
tenantId: tenantIdOverride,
|
|
250
239
|
}: {
|
|
251
240
|
em: EntityManager
|
|
252
|
-
rbac: RbacService
|
|
253
|
-
auth: AuthContext
|
|
241
|
+
rbac: Pick<RbacService, 'loadAcl'>
|
|
242
|
+
auth: AuthContext | null | undefined
|
|
254
243
|
selectedId?: string | null
|
|
255
244
|
tenantId?: string | null
|
|
256
245
|
}): Promise<OrganizationScope> {
|
|
@@ -148,6 +148,7 @@ const listRecordsResponseSchema = z.object({
|
|
|
148
148
|
page: z.number(),
|
|
149
149
|
pageSize: z.number(),
|
|
150
150
|
totalPages: z.number(),
|
|
151
|
+
totalIsCapped: z.boolean().optional(),
|
|
151
152
|
})
|
|
152
153
|
|
|
153
154
|
export async function GET(req: Request) {
|
|
@@ -328,6 +329,7 @@ export async function GET(req: Request) {
|
|
|
328
329
|
page: res.page || page,
|
|
329
330
|
pageSize: effectivePageSize,
|
|
330
331
|
totalPages: Math.ceil(total / (effectivePageSize || 1)),
|
|
332
|
+
...(res.meta?.listCountCapWarning ? { totalIsCapped: true } : {}),
|
|
331
333
|
}
|
|
332
334
|
|
|
333
335
|
if (requestedExport) {
|
|
@@ -36,6 +36,7 @@ type RecordsResponse = {
|
|
|
36
36
|
page: number
|
|
37
37
|
pageSize: number
|
|
38
38
|
totalPages: number
|
|
39
|
+
totalIsCapped?: boolean
|
|
39
40
|
}
|
|
40
41
|
|
|
41
42
|
function toCsvUrl(base: string, params: URLSearchParams) {
|
|
@@ -87,6 +88,7 @@ function RecordsPageInner({ params }: { params: { entityId?: string } }) {
|
|
|
87
88
|
const [rawData, setRawData] = React.useState<any[]>([])
|
|
88
89
|
const [total, setTotal] = React.useState(0)
|
|
89
90
|
const [totalPages, setTotalPages] = React.useState(1)
|
|
91
|
+
const [totalIsCapped, setTotalIsCapped] = React.useState(false)
|
|
90
92
|
const [loading, setLoading] = React.useState(false)
|
|
91
93
|
const scopeVersion = useOrganizationScopeVersion()
|
|
92
94
|
const { confirm, ConfirmDialogElement } = useConfirmDialog()
|
|
@@ -170,6 +172,7 @@ function RecordsPageInner({ params }: { params: { entityId?: string } }) {
|
|
|
170
172
|
setRawData(j.items || [])
|
|
171
173
|
setTotal(j.total)
|
|
172
174
|
setTotalPages(j.totalPages)
|
|
175
|
+
setTotalIsCapped(j?.totalIsCapped === true)
|
|
173
176
|
}
|
|
174
177
|
} catch (e) {
|
|
175
178
|
if (!cancelled) {
|
|
@@ -467,7 +470,7 @@ export RECORD_ID="<record uuid>"`}</code></pre>
|
|
|
467
470
|
onSearchChange={(v) => { setSearch(v); setPage(1) }}
|
|
468
471
|
onFiltersApply={(vals) => { setFilterValues(vals); setPage(1) }}
|
|
469
472
|
onFiltersClear={() => { setFilterValues({}); setPage(1) }}
|
|
470
|
-
pagination={{ page, pageSize, total, totalPages, onPageChange: setPage }}
|
|
473
|
+
pagination={{ page, pageSize, total, totalPages, totalIsCapped, onPageChange: setPage }}
|
|
471
474
|
isLoading={loading}
|
|
472
475
|
/>
|
|
473
476
|
</RelationDisplaysProvider>
|
|
@@ -159,6 +159,10 @@ const crud = makeCrudRoute({
|
|
|
159
159
|
name: 'name',
|
|
160
160
|
area_ha: 'area_ha',
|
|
161
161
|
areaHa: 'area_ha',
|
|
162
|
+
origin_country: 'origin_country',
|
|
163
|
+
originCountry: 'origin_country',
|
|
164
|
+
plot_type: 'plot_type',
|
|
165
|
+
plotType: 'plot_type',
|
|
162
166
|
},
|
|
163
167
|
buildFilters,
|
|
164
168
|
transformItem: transformPlotItem,
|
|
@@ -54,6 +54,7 @@ type EvidenceSubmissionsResponse = {
|
|
|
54
54
|
items: EvidenceSubmissionRow[]
|
|
55
55
|
total: number
|
|
56
56
|
totalPages: number
|
|
57
|
+
totalIsCapped?: boolean
|
|
57
58
|
}
|
|
58
59
|
|
|
59
60
|
function formatDateTime(value: string | null | undefined, emptyLabel: string, locale: string): string {
|
|
@@ -92,6 +93,7 @@ export default function EudrEvidenceSubmissionsPage() {
|
|
|
92
93
|
const [pageSize, setPageSize] = React.useState(20)
|
|
93
94
|
const [total, setTotal] = React.useState(0)
|
|
94
95
|
const [totalPages, setTotalPages] = React.useState(1)
|
|
96
|
+
const [totalIsCapped, setTotalIsCapped] = React.useState(false)
|
|
95
97
|
const [search, setSearch] = React.useState('')
|
|
96
98
|
const [sorting, setSorting] = React.useState<SortingState>([])
|
|
97
99
|
const [filters, setFilters] = React.useState<FilterValues>({})
|
|
@@ -147,6 +149,7 @@ export default function EudrEvidenceSubmissionsPage() {
|
|
|
147
149
|
setRows(Array.isArray(payload.items) ? payload.items : [])
|
|
148
150
|
setTotal(typeof payload.total === 'number' ? payload.total : 0)
|
|
149
151
|
setTotalPages(typeof payload.totalPages === 'number' ? payload.totalPages : 1)
|
|
152
|
+
setTotalIsCapped(payload?.totalIsCapped === true)
|
|
150
153
|
} catch {
|
|
151
154
|
if (!cancelled) flash(translate('eudr.evidenceSubmissions.list.loadError'), 'error')
|
|
152
155
|
} finally {
|
|
@@ -361,6 +364,7 @@ export default function EudrEvidenceSubmissionsPage() {
|
|
|
361
364
|
pageSize,
|
|
362
365
|
total,
|
|
363
366
|
totalPages,
|
|
367
|
+
totalIsCapped,
|
|
364
368
|
onPageChange: setPage,
|
|
365
369
|
pageSizeOptions: [20, 50, 100],
|
|
366
370
|
onPageSizeChange: (nextPageSize) => {
|
|
@@ -44,6 +44,7 @@ type PlotListResponse = {
|
|
|
44
44
|
items: PlotRow[]
|
|
45
45
|
total: number
|
|
46
46
|
totalPages: number
|
|
47
|
+
totalIsCapped?: boolean
|
|
47
48
|
}
|
|
48
49
|
|
|
49
50
|
type CompanyOptionResponse = {
|
|
@@ -102,6 +103,7 @@ export default function EudrPlotsPage() {
|
|
|
102
103
|
const [pageSize, setPageSize] = React.useState(20)
|
|
103
104
|
const [total, setTotal] = React.useState(0)
|
|
104
105
|
const [totalPages, setTotalPages] = React.useState(1)
|
|
106
|
+
const [totalIsCapped, setTotalIsCapped] = React.useState(false)
|
|
105
107
|
const [search, setSearch] = React.useState('')
|
|
106
108
|
const [sorting, setSorting] = React.useState<SortingState>([])
|
|
107
109
|
const [filters, setFilters] = React.useState<FilterValues>({})
|
|
@@ -164,6 +166,7 @@ export default function EudrPlotsPage() {
|
|
|
164
166
|
setRows(Array.isArray(payload.items) ? payload.items : [])
|
|
165
167
|
setTotal(typeof payload.total === 'number' ? payload.total : 0)
|
|
166
168
|
setTotalPages(typeof payload.totalPages === 'number' ? payload.totalPages : 1)
|
|
169
|
+
setTotalIsCapped(payload?.totalIsCapped === true)
|
|
167
170
|
} catch {
|
|
168
171
|
if (!cancelled) flash(translate('eudr.plots.list.loadError'), 'error')
|
|
169
172
|
} finally {
|
|
@@ -419,6 +422,7 @@ export default function EudrPlotsPage() {
|
|
|
419
422
|
pageSize,
|
|
420
423
|
total,
|
|
421
424
|
totalPages,
|
|
425
|
+
totalIsCapped,
|
|
422
426
|
onPageChange: setPage,
|
|
423
427
|
pageSizeOptions: [20, 50, 100],
|
|
424
428
|
onPageSizeChange: (nextPageSize) => {
|
|
@@ -40,6 +40,7 @@ type ProductMappingsResponse = {
|
|
|
40
40
|
items: ProductMappingRow[]
|
|
41
41
|
total: number
|
|
42
42
|
totalPages: number
|
|
43
|
+
totalIsCapped?: boolean
|
|
43
44
|
}
|
|
44
45
|
|
|
45
46
|
function formatDateTime(value: string | null | undefined, emptyLabel: string, locale: string): string {
|
|
@@ -71,6 +72,7 @@ export default function EudrProductMappingsPage() {
|
|
|
71
72
|
const [pageSize, setPageSize] = React.useState(20)
|
|
72
73
|
const [total, setTotal] = React.useState(0)
|
|
73
74
|
const [totalPages, setTotalPages] = React.useState(1)
|
|
75
|
+
const [totalIsCapped, setTotalIsCapped] = React.useState(false)
|
|
74
76
|
const [search, setSearch] = React.useState('')
|
|
75
77
|
const [sorting, setSorting] = React.useState<SortingState>([])
|
|
76
78
|
const [filters, setFilters] = React.useState<FilterValues>({})
|
|
@@ -127,6 +129,7 @@ export default function EudrProductMappingsPage() {
|
|
|
127
129
|
setRows(Array.isArray(payload.items) ? payload.items : [])
|
|
128
130
|
setTotal(typeof payload.total === 'number' ? payload.total : 0)
|
|
129
131
|
setTotalPages(typeof payload.totalPages === 'number' ? payload.totalPages : 1)
|
|
132
|
+
setTotalIsCapped(payload?.totalIsCapped === true)
|
|
130
133
|
} catch {
|
|
131
134
|
if (!cancelled) flash(translate('eudr.productMappings.list.loadError'), 'error')
|
|
132
135
|
} finally {
|
|
@@ -321,6 +324,7 @@ export default function EudrProductMappingsPage() {
|
|
|
321
324
|
pageSize,
|
|
322
325
|
total,
|
|
323
326
|
totalPages,
|
|
327
|
+
totalIsCapped,
|
|
324
328
|
onPageChange: setPage,
|
|
325
329
|
pageSizeOptions: [20, 50, 100],
|
|
326
330
|
onPageSizeChange: (nextPageSize) => {
|
|
@@ -47,6 +47,7 @@ type RiskAssessmentsResponse = {
|
|
|
47
47
|
items: RiskAssessmentRow[]
|
|
48
48
|
total: number
|
|
49
49
|
totalPages: number
|
|
50
|
+
totalIsCapped?: boolean
|
|
50
51
|
}
|
|
51
52
|
|
|
52
53
|
type MutationContext = {
|
|
@@ -105,6 +106,7 @@ export default function EudrRiskAssessmentsPage() {
|
|
|
105
106
|
const [pageSize, setPageSize] = React.useState(20)
|
|
106
107
|
const [total, setTotal] = React.useState(0)
|
|
107
108
|
const [totalPages, setTotalPages] = React.useState(1)
|
|
109
|
+
const [totalIsCapped, setTotalIsCapped] = React.useState(false)
|
|
108
110
|
const [sorting, setSorting] = React.useState<SortingState>([{ id: 'assessedAt', desc: true }])
|
|
109
111
|
const [filters, setFilters] = React.useState<FilterValues>({})
|
|
110
112
|
const [search, setSearch] = React.useState('')
|
|
@@ -158,6 +160,7 @@ export default function EudrRiskAssessmentsPage() {
|
|
|
158
160
|
setRows(Array.isArray(payload.items) ? payload.items : [])
|
|
159
161
|
setTotal(typeof payload.total === 'number' ? payload.total : 0)
|
|
160
162
|
setTotalPages(typeof payload.totalPages === 'number' ? payload.totalPages : 1)
|
|
163
|
+
setTotalIsCapped(payload?.totalIsCapped === true)
|
|
161
164
|
} catch {
|
|
162
165
|
if (!cancelled) flash(translate('eudr.riskAssessments.list.loadError'), 'error')
|
|
163
166
|
} finally {
|
|
@@ -365,6 +368,7 @@ export default function EudrRiskAssessmentsPage() {
|
|
|
365
368
|
pageSize,
|
|
366
369
|
total,
|
|
367
370
|
totalPages,
|
|
371
|
+
totalIsCapped,
|
|
368
372
|
onPageChange: setPage,
|
|
369
373
|
pageSizeOptions: [20, 50, 100],
|
|
370
374
|
onPageSizeChange: (nextPageSize) => {
|
|
@@ -53,6 +53,7 @@ type StatementsResponse = {
|
|
|
53
53
|
items: StatementRow[]
|
|
54
54
|
total: number
|
|
55
55
|
totalPages: number
|
|
56
|
+
totalIsCapped?: boolean
|
|
56
57
|
}
|
|
57
58
|
|
|
58
59
|
function formatDateTime(value: string | null | undefined, emptyLabel: string, locale: string): string {
|
|
@@ -79,6 +80,7 @@ export default function EudrStatementsPage() {
|
|
|
79
80
|
const [pageSize, setPageSize] = React.useState(20)
|
|
80
81
|
const [total, setTotal] = React.useState(0)
|
|
81
82
|
const [totalPages, setTotalPages] = React.useState(1)
|
|
83
|
+
const [totalIsCapped, setTotalIsCapped] = React.useState(false)
|
|
82
84
|
const [search, setSearch] = React.useState('')
|
|
83
85
|
const [sorting, setSorting] = React.useState<SortingState>([])
|
|
84
86
|
const [filters, setFilters] = React.useState<FilterValues>({})
|
|
@@ -134,6 +136,7 @@ export default function EudrStatementsPage() {
|
|
|
134
136
|
setRows(Array.isArray(payload.items) ? payload.items : [])
|
|
135
137
|
setTotal(typeof payload.total === 'number' ? payload.total : 0)
|
|
136
138
|
setTotalPages(typeof payload.totalPages === 'number' ? payload.totalPages : 1)
|
|
139
|
+
setTotalIsCapped(payload?.totalIsCapped === true)
|
|
137
140
|
} catch {
|
|
138
141
|
if (!cancelled) flash(translate('eudr.statements.list.loadError'), 'error')
|
|
139
142
|
} finally {
|
|
@@ -360,6 +363,7 @@ export default function EudrStatementsPage() {
|
|
|
360
363
|
pageSize,
|
|
361
364
|
total,
|
|
362
365
|
totalPages,
|
|
366
|
+
totalIsCapped,
|
|
363
367
|
onPageChange: setPage,
|
|
364
368
|
pageSizeOptions: [20, 50, 100],
|
|
365
369
|
onPageSizeChange: (nextPageSize) => {
|
|
@@ -582,9 +582,6 @@ const createStatementCommand: CommandHandler<ScopedStatementCreateInput, Stateme
|
|
|
582
582
|
if (parsed.status !== undefined && parsed.status !== 'draft') {
|
|
583
583
|
throw new CrudHttpError(400, { error: 'eudr.errors.invalidTransition' })
|
|
584
584
|
}
|
|
585
|
-
if (parsed.referenceIssuedAt !== undefined) {
|
|
586
|
-
throw new CrudHttpError(400, { error: 'eudr.errors.referenceIssuedAtImmutable' })
|
|
587
|
-
}
|
|
588
585
|
|
|
589
586
|
const entityManager = (ctx.container.resolve('em') as EntityManager).fork()
|
|
590
587
|
let record!: EudrDueDiligenceStatement
|
|
@@ -46,6 +46,11 @@ export const GEOJSON_TYPES = ['Feature', 'FeatureCollection', 'Point', 'Polygon'
|
|
|
46
46
|
|
|
47
47
|
const uuid = () => z.string().uuid()
|
|
48
48
|
const geoJsonSizeLimit = 1_048_576
|
|
49
|
+
// Two conventions for server-managed fields on these entities: fields listed below
|
|
50
|
+
// are never advertised as create inputs, so a client sending a real value is rejected
|
|
51
|
+
// (`rejectServerComputedFields` tolerates a null/undefined no-op echo). A field that
|
|
52
|
+
// WAS advertised in the create schema — statements' `referenceIssuedAt` — is instead
|
|
53
|
+
// dropped from the create schema, so it is stripped rather than rejected (#5508).
|
|
49
54
|
const serverComputedSubmissionFields = ['completenessScore', 'missingFields'] as const
|
|
50
55
|
const serverComputedPlotFields = ['validationWarnings', 'computedArea'] as const
|
|
51
56
|
const serverComputedRiskAssessmentFields = ['countryRisks', 'overallTier', 'isSimplified', 'assessedByName'] as const
|
|
@@ -64,12 +69,16 @@ const orderSnapshotSchema = z.object({
|
|
|
64
69
|
orderNumber: z.string().max(255).optional().nullable(),
|
|
65
70
|
})
|
|
66
71
|
|
|
72
|
+
// A whole-object POST echoes server-computed fields back with their no-op value
|
|
73
|
+
// (a fresh draft's `submittedAt` is null), so tolerate a null/undefined echo and
|
|
74
|
+
// reject only a meaningful attempt to set server-owned state (#5508).
|
|
67
75
|
function rejectServerComputedFields(fields: readonly string[]): z.ZodType<unknown> {
|
|
68
76
|
return z.unknown().superRefine((input, context) => {
|
|
69
77
|
if (input === null || typeof input !== 'object' || Array.isArray(input)) return
|
|
70
78
|
const record = input as Record<string, unknown>
|
|
71
79
|
for (const field of fields) {
|
|
72
80
|
if (!(field in record)) continue
|
|
81
|
+
if (record[field] === null || record[field] === undefined) continue
|
|
73
82
|
context.addIssue({
|
|
74
83
|
code: z.ZodIssueCode.custom,
|
|
75
84
|
path: [field],
|
|
@@ -333,7 +342,13 @@ const statementBaseSchema = z.object({
|
|
|
333
342
|
notes: z.string().max(5000).optional().nullable(),
|
|
334
343
|
})
|
|
335
344
|
|
|
336
|
-
|
|
345
|
+
// referenceIssuedAt is server-managed (only set at the submitted->available
|
|
346
|
+
// transition) and is never a create input, so it is dropped from the create
|
|
347
|
+
// schema. A whole-object POST that echoes it (null or a value) is accepted and
|
|
348
|
+
// the field ignored, instead of a self-contradictory 400 (#5508).
|
|
349
|
+
export const statementCreateSchema = rejectServerComputedFields(serverComputedStatementFields).pipe(
|
|
350
|
+
statementBaseSchema.omit({ referenceIssuedAt: true }),
|
|
351
|
+
)
|
|
337
352
|
|
|
338
353
|
export const statementUpdateSchema = rejectServerComputedFields(serverComputedStatementFields).pipe(
|
|
339
354
|
z
|
|
@@ -81,7 +81,7 @@ export function FeatureTogglesTable() {
|
|
|
81
81
|
const { data: featureTogglesData, isLoading } = useQuery({
|
|
82
82
|
queryKey: ['feature_toggles', queryParams],
|
|
83
83
|
queryFn: async () => {
|
|
84
|
-
const call = await apiCall<{ items: Row[]; total: number; totalPages: number; page: number; pageSize: number; isSuperAdmin?: boolean }>(
|
|
84
|
+
const call = await apiCall<{ items: Row[]; total: number; totalPages: number; totalIsCapped?: boolean; page: number; pageSize: number; isSuperAdmin?: boolean }>(
|
|
85
85
|
`/api/feature_toggles/global${queryParams ? `?${queryParams}` : ''}`,
|
|
86
86
|
)
|
|
87
87
|
if (!call.ok) {
|
|
@@ -222,6 +222,7 @@ export function FeatureTogglesTable() {
|
|
|
222
222
|
pageSize: featureTogglesData?.pageSize ?? 25,
|
|
223
223
|
total: featureTogglesData?.total ?? 0,
|
|
224
224
|
totalPages: featureTogglesData?.totalPages ?? 0,
|
|
225
|
+
totalIsCapped: featureTogglesData?.totalIsCapped === true,
|
|
225
226
|
onPageChange: handlePageChange,
|
|
226
227
|
}}
|
|
227
228
|
rowActions={(row) => (
|
|
@@ -45,7 +45,7 @@ export default function OverridesTable() {
|
|
|
45
45
|
const call = await apiCall<{
|
|
46
46
|
items: OverrideListResponse[];
|
|
47
47
|
total: number;
|
|
48
|
-
totalPages: number;
|
|
48
|
+
totalPages: number; totalIsCapped?: boolean;
|
|
49
49
|
page: number;
|
|
50
50
|
pageSize: number;
|
|
51
51
|
isSuperAdmin?: boolean
|
|
@@ -153,6 +153,7 @@ export default function OverridesTable() {
|
|
|
153
153
|
pageSize: featureTogglesData?.pageSize ?? 25,
|
|
154
154
|
total: featureTogglesData?.total ?? 0,
|
|
155
155
|
totalPages: featureTogglesData?.totalPages ?? 0,
|
|
156
|
+
totalIsCapped: featureTogglesData?.totalIsCapped === true,
|
|
156
157
|
onPageChange: handlePageChange,
|
|
157
158
|
}}
|
|
158
159
|
refreshButton={{
|
|
@@ -16,14 +16,6 @@
|
|
|
16
16
|
"type": "string",
|
|
17
17
|
"defaultValue": "Free shipping on orders over $50"
|
|
18
18
|
},
|
|
19
|
-
{
|
|
20
|
-
"identifier": "sales_channels_enabled",
|
|
21
|
-
"name": "Sales Channels",
|
|
22
|
-
"description": "Show sales channel pickers, filters, and management UI. Disable for tenants that do not use sales channels.",
|
|
23
|
-
"category": "sales",
|
|
24
|
-
"type": "boolean",
|
|
25
|
-
"defaultValue": true
|
|
26
|
-
},
|
|
27
19
|
{
|
|
28
20
|
"identifier": "order_review_threshold",
|
|
29
21
|
"name": "Order Review Threshold",
|
|
@@ -28,6 +28,7 @@ type EmailListResponse = {
|
|
|
28
28
|
total?: number
|
|
29
29
|
page?: number
|
|
30
30
|
totalPages?: number
|
|
31
|
+
totalIsCapped?: boolean
|
|
31
32
|
}
|
|
32
33
|
|
|
33
34
|
const STATUS_COLORS: Record<string, string> = {
|
|
@@ -42,6 +43,7 @@ export default function ProcessingLogPage() {
|
|
|
42
43
|
const t = useT()
|
|
43
44
|
const [items, setItems] = React.useState<EmailRow[]>([])
|
|
44
45
|
const [total, setTotal] = React.useState(0)
|
|
46
|
+
const [totalIsCapped, setTotalIsCapped] = React.useState(false)
|
|
45
47
|
const [page, setPage] = React.useState(1)
|
|
46
48
|
const [pageSize] = React.useState(25)
|
|
47
49
|
const [statusFilter, setStatusFilter] = React.useState<string | undefined>()
|
|
@@ -65,6 +67,7 @@ export default function ProcessingLogPage() {
|
|
|
65
67
|
if (result?.ok && result.result?.items) {
|
|
66
68
|
setItems(result.result.items)
|
|
67
69
|
setTotal(result.result.total || 0)
|
|
70
|
+
setTotalIsCapped(result.result.totalIsCapped === true)
|
|
68
71
|
} else {
|
|
69
72
|
setError(t('inbox_ops.log.load_failed', 'Failed to load processing log'))
|
|
70
73
|
}
|
|
@@ -220,6 +223,7 @@ export default function ProcessingLogPage() {
|
|
|
220
223
|
pageSize,
|
|
221
224
|
total,
|
|
222
225
|
totalPages: Math.ceil(total / pageSize),
|
|
226
|
+
totalIsCapped,
|
|
223
227
|
onPageChange: setPage,
|
|
224
228
|
}}
|
|
225
229
|
/>
|
|
@@ -41,6 +41,7 @@ type ProposalListResponse = {
|
|
|
41
41
|
total?: number
|
|
42
42
|
page?: number
|
|
43
43
|
totalPages?: number
|
|
44
|
+
totalIsCapped?: boolean
|
|
44
45
|
}
|
|
45
46
|
|
|
46
47
|
type StatusCounts = {
|
|
@@ -90,6 +91,7 @@ export default function InboxOpsProposalsPage() {
|
|
|
90
91
|
|
|
91
92
|
const [items, setItems] = React.useState<ProposalRow[]>([])
|
|
92
93
|
const [total, setTotal] = React.useState(0)
|
|
94
|
+
const [totalIsCapped, setTotalIsCapped] = React.useState(false)
|
|
93
95
|
const [page, setPage] = React.useState(1)
|
|
94
96
|
const [pageSize] = React.useState(25)
|
|
95
97
|
const [filterValues, setFilterValues] = React.useState<FilterValues>({})
|
|
@@ -119,6 +121,7 @@ export default function InboxOpsProposalsPage() {
|
|
|
119
121
|
if (result?.ok && result.result?.items) {
|
|
120
122
|
setItems(result.result.items)
|
|
121
123
|
setTotal(result.result.total || 0)
|
|
124
|
+
setTotalIsCapped(result.result.totalIsCapped === true)
|
|
122
125
|
} else {
|
|
123
126
|
setError(t('inbox_ops.flash.load_failed', 'Failed to load proposals'))
|
|
124
127
|
}
|
|
@@ -384,6 +387,7 @@ export default function InboxOpsProposalsPage() {
|
|
|
384
387
|
pageSize,
|
|
385
388
|
total,
|
|
386
389
|
totalPages: Math.ceil(total / pageSize),
|
|
390
|
+
totalIsCapped,
|
|
387
391
|
onPageChange: setPage,
|
|
388
392
|
}}
|
|
389
393
|
isLoading={isLoading}
|
|
@@ -1,17 +1 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
export function htmlToPlainText(html: string): string {
|
|
4
|
-
if (!html) return ''
|
|
5
|
-
return convert(html, {
|
|
6
|
-
wordwrap: false,
|
|
7
|
-
preserveNewlines: true,
|
|
8
|
-
selectors: [
|
|
9
|
-
{ selector: 'script', format: 'skip' },
|
|
10
|
-
{ selector: 'style', format: 'skip' },
|
|
11
|
-
],
|
|
12
|
-
})
|
|
13
|
-
.replace(/\r\n/g, '\n')
|
|
14
|
-
.replace(/\r/g, '\n')
|
|
15
|
-
.replace(/\n{3,}/g, '\n\n')
|
|
16
|
-
.trim()
|
|
17
|
-
}
|
|
1
|
+
export { htmlToPlainText } from '@open-mercato/shared/lib/html/htmlToPlainText'
|
|
@@ -183,11 +183,13 @@ export async function PUT(req: Request, ctx: { params?: Promise<{ id?: string }>
|
|
|
183
183
|
}
|
|
184
184
|
|
|
185
185
|
try {
|
|
186
|
-
// Secret fields are returned masked on GET; when the client round-trips the
|
|
187
|
-
// mask sentinel it means "unchanged", so restore the existing stored secret
|
|
188
|
-
// instead of overwriting it with the placeholder.
|
|
189
186
|
const existing = await credentialsService.resolve(integration.id, scope)
|
|
190
|
-
const credentialsToSave = mergeMaskedSecretCredentials(
|
|
187
|
+
const credentialsToSave = mergeMaskedSecretCredentials(
|
|
188
|
+
schema,
|
|
189
|
+
payloadData.credentials,
|
|
190
|
+
existing ?? {},
|
|
191
|
+
payloadData.unchangedSecretFields,
|
|
192
|
+
)
|
|
191
193
|
await credentialsService.save(integration.id, credentialsToSave, scope)
|
|
192
194
|
} catch (error) {
|
|
193
195
|
if (isCredentialsEncryptionUnavailableError(error)) {
|