@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
|
@@ -1,56 +0,0 @@
|
|
|
1
|
-
import type { AbandonedJobInfo } from '@open-mercato/queue'
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* Fail the run behind a job the queue gave up on.
|
|
5
|
-
*
|
|
6
|
-
* A resumable data_sync job is ONE long-lived job for a whole run — `runImport` is entered once and
|
|
7
|
-
* stays there for the duration, which for a full backfill is days. Every worker death (a deploy, an
|
|
8
|
-
* OOM) therefore stalls that job, and BullMQ's stalled counter is cumulative for the job's life:
|
|
9
|
-
* past `DATA_SYNC_MAX_STALLED_COUNT` it writes a deferred failure and the next worker fails the job
|
|
10
|
-
* BEFORE calling the processor.
|
|
11
|
-
*
|
|
12
|
-
* So `runImport` never runs, never throws, and never finalizes — and `sync_runs` is left saying
|
|
13
|
-
* `running` for a run nothing is running, forever. That is the residual state `queue-policy.ts`
|
|
14
|
-
* describes as what remains after a job exhausts its stall budget; this repairs it.
|
|
15
|
-
*
|
|
16
|
-
* It only ever moves a non-terminal run: `markStatus` refuses to overwrite `completed` / `failed` /
|
|
17
|
-
* `cancelled`, so a job abandoned after its run has ended is a no-op. `onJobAbandoned` may deliver
|
|
18
|
-
* the same job more than once, which for the same reason is also a no-op.
|
|
19
|
-
*
|
|
20
|
-
* The run's progress job is failed alongside it, the way the worker's own catch path does in
|
|
21
|
-
* `workers/sync-import.ts`. Without that the two halves disagree — the run reads `failed` while the
|
|
22
|
-
* operation still shows as in flight in the top bar — until the progress staleness sweep eventually
|
|
23
|
-
* fails it with a generic no-heartbeat message instead of the reason the queue recorded.
|
|
24
|
-
*/
|
|
25
|
-
export async function failAbandonedRun(payload: unknown, info: AbandonedJobInfo): Promise<void> {
|
|
26
|
-
const data = payload as { payload?: { runId?: unknown; scope?: { organizationId?: unknown; tenantId?: unknown } } } | undefined
|
|
27
|
-
const runId = data?.payload?.runId
|
|
28
|
-
const scope = data?.payload?.scope
|
|
29
|
-
// Nothing to repair without both: the run row is keyed by id AND tenant scope.
|
|
30
|
-
if (typeof runId !== 'string' || typeof scope?.organizationId !== 'string' || typeof scope?.tenantId !== 'string') return
|
|
31
|
-
|
|
32
|
-
const runScope = { organizationId: scope.organizationId, tenantId: scope.tenantId }
|
|
33
|
-
const errorMessage = `the queue abandoned this run's job without running it: ${info.reason}`
|
|
34
|
-
|
|
35
|
-
const { createRequestContainer } = await import('@open-mercato/shared/lib/di/container')
|
|
36
|
-
const container = await createRequestContainer()
|
|
37
|
-
const runService = container.resolve('dataSyncRunService') as {
|
|
38
|
-
markStatus(
|
|
39
|
-
runId: string,
|
|
40
|
-
status: string,
|
|
41
|
-
scope: { organizationId: string; tenantId: string },
|
|
42
|
-
error?: string,
|
|
43
|
-
): Promise<{ progressJobId?: string | null } | null>
|
|
44
|
-
}
|
|
45
|
-
const run = await runService.markStatus(runId, 'failed', runScope, errorMessage)
|
|
46
|
-
if (!run?.progressJobId) return
|
|
47
|
-
|
|
48
|
-
const progressService = container.resolve('progressService') as {
|
|
49
|
-
failJob(
|
|
50
|
-
jobId: string,
|
|
51
|
-
input: { errorMessage: string },
|
|
52
|
-
ctx: { organizationId: string; tenantId: string },
|
|
53
|
-
): Promise<unknown>
|
|
54
|
-
}
|
|
55
|
-
await progressService.failJob(run.progressJobId, { errorMessage }, runScope)
|
|
56
|
-
}
|
|
@@ -1,50 +0,0 @@
|
|
|
1
|
-
import { z } from 'zod'
|
|
2
|
-
import type { UserDevice } from '../data/entities'
|
|
3
|
-
import { toDeprecatedSnakeCaseAliases, toIso } from './deviceList'
|
|
4
|
-
|
|
5
|
-
// Detail contract for `GET /api/devices/admin/devices/:id`. Keys are camelCase like every other
|
|
6
|
-
// module's responses (#5513); the snake_case keys stay alongside as deprecated aliases for one minor
|
|
7
|
-
// version, per the deprecation protocol in BACKWARD_COMPATIBILITY.md § 7.
|
|
8
|
-
// push_token is a secret and is never returned.
|
|
9
|
-
export function serializeDeviceDetail(device: UserDevice): Record<string, unknown> {
|
|
10
|
-
const camel = {
|
|
11
|
-
id: device.id,
|
|
12
|
-
userId: device.userId,
|
|
13
|
-
deviceId: device.deviceId,
|
|
14
|
-
platform: device.platform,
|
|
15
|
-
clientAppVersion: device.clientAppVersion ?? null,
|
|
16
|
-
osVersion: device.osVersion ?? null,
|
|
17
|
-
pushProvider: device.pushProvider ?? null,
|
|
18
|
-
pushTokenUpdatedAt: toIso(device.pushTokenUpdatedAt),
|
|
19
|
-
lastSeenAt: toIso(device.lastSeenAt),
|
|
20
|
-
createdAt: toIso(device.createdAt),
|
|
21
|
-
updatedAt: toIso(device.updatedAt),
|
|
22
|
-
}
|
|
23
|
-
return { ...camel, ...toDeprecatedSnakeCaseAliases(camel) }
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
// See the note in ./deviceList — the rendered deprecation notice lives on the endpoint description.
|
|
27
|
-
const deprecatedAlias = (of: string) => `Deprecated alias for \`${of}\`; removed in the next minor release.`
|
|
28
|
-
|
|
29
|
-
export const deviceDetailItemSchema = z.object({
|
|
30
|
-
id: z.string().uuid(),
|
|
31
|
-
userId: z.string().uuid(),
|
|
32
|
-
deviceId: z.string(),
|
|
33
|
-
platform: z.enum(['ios', 'android', 'web']),
|
|
34
|
-
clientAppVersion: z.string().nullable(),
|
|
35
|
-
osVersion: z.string().nullable(),
|
|
36
|
-
pushProvider: z.string().nullable(),
|
|
37
|
-
pushTokenUpdatedAt: z.string().nullable(),
|
|
38
|
-
lastSeenAt: z.string().nullable(),
|
|
39
|
-
createdAt: z.string().nullable(),
|
|
40
|
-
updatedAt: z.string().nullable(),
|
|
41
|
-
user_id: z.string().uuid().describe(deprecatedAlias('userId')),
|
|
42
|
-
device_id: z.string().describe(deprecatedAlias('deviceId')),
|
|
43
|
-
client_app_version: z.string().nullable().describe(deprecatedAlias('clientAppVersion')),
|
|
44
|
-
os_version: z.string().nullable().describe(deprecatedAlias('osVersion')),
|
|
45
|
-
push_provider: z.string().nullable().describe(deprecatedAlias('pushProvider')),
|
|
46
|
-
push_token_updated_at: z.string().nullable().describe(deprecatedAlias('pushTokenUpdatedAt')),
|
|
47
|
-
last_seen_at: z.string().nullable().describe(deprecatedAlias('lastSeenAt')),
|
|
48
|
-
created_at: z.string().nullable().describe(deprecatedAlias('createdAt')),
|
|
49
|
-
updated_at: z.string().nullable().describe(deprecatedAlias('updatedAt')),
|
|
50
|
-
})
|
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
'use client'
|
|
2
|
-
|
|
3
|
-
import * as React from 'react'
|
|
4
|
-
import { resolveDeviceUserOptions } from './userOptions'
|
|
5
|
-
|
|
6
|
-
// Resolves owner ids that are on screen into display labels. Modelled on
|
|
7
|
-
// warranty_claims/backend/components/useUserDisplayNames, but every failure degrades to an empty
|
|
8
|
-
// map instead of throwing: a devices admin without `auth.users.list` must still see the page.
|
|
9
|
-
export function useDeviceUserLabels(userIds: readonly (string | null | undefined)[]): Record<string, string> {
|
|
10
|
-
const [labels, setLabels] = React.useState<Record<string, string>>({})
|
|
11
|
-
const resolvedIdsRef = React.useRef<Set<string>>(new Set())
|
|
12
|
-
|
|
13
|
-
const idsKey = React.useMemo(() => {
|
|
14
|
-
const normalized = new Set<string>()
|
|
15
|
-
for (const userId of userIds) {
|
|
16
|
-
if (typeof userId === 'string' && userId.trim()) normalized.add(userId.trim())
|
|
17
|
-
}
|
|
18
|
-
return Array.from(normalized)
|
|
19
|
-
.sort((left, right) => (left < right ? -1 : left > right ? 1 : 0))
|
|
20
|
-
.join(',')
|
|
21
|
-
}, [userIds])
|
|
22
|
-
|
|
23
|
-
React.useEffect(() => {
|
|
24
|
-
if (!idsKey) return
|
|
25
|
-
const unresolved = idsKey.split(',').filter((userId) => !resolvedIdsRef.current.has(userId))
|
|
26
|
-
if (unresolved.length === 0) return
|
|
27
|
-
|
|
28
|
-
const controller = new AbortController()
|
|
29
|
-
void resolveDeviceUserOptions(unresolved, controller.signal)
|
|
30
|
-
.then(({ options, resolvedIds }) => {
|
|
31
|
-
if (controller.signal.aborted) return
|
|
32
|
-
// Only ids the server actually answered for are remembered. Marking an id whose request
|
|
33
|
-
// failed would keep its row showing a bare UUID for the life of the component, even though
|
|
34
|
-
// the next attempt would have worked.
|
|
35
|
-
for (const userId of resolvedIds) resolvedIdsRef.current.add(userId)
|
|
36
|
-
const next: Record<string, string> = {}
|
|
37
|
-
for (const option of options) next[option.value] = option.label
|
|
38
|
-
if (Object.keys(next).length) setLabels((current) => ({ ...current, ...next }))
|
|
39
|
-
})
|
|
40
|
-
.catch(() => {})
|
|
41
|
-
return () => controller.abort()
|
|
42
|
-
}, [idsKey])
|
|
43
|
-
|
|
44
|
-
return labels
|
|
45
|
-
}
|
|
@@ -1,99 +0,0 @@
|
|
|
1
|
-
import { apiCall } from '@open-mercato/ui/backend/utils/apiCall'
|
|
2
|
-
import { MAX_USER_LOOKUP_IDS } from '@open-mercato/core/modules/auth/lib/userIdFilter'
|
|
3
|
-
|
|
4
|
-
export type DeviceUserOption = {
|
|
5
|
-
value: string
|
|
6
|
-
label: string
|
|
7
|
-
}
|
|
8
|
-
|
|
9
|
-
type AuthUserItem = {
|
|
10
|
-
id?: unknown
|
|
11
|
-
name?: unknown
|
|
12
|
-
email?: unknown
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
const SEARCH_PAGE_SIZE = 20
|
|
16
|
-
// Imported rather than restated: `parseIdsParam` slices past the route's cap without complaining,
|
|
17
|
-
// so a client batch larger than the server accepts loses the overflow ids silently.
|
|
18
|
-
const MAX_IDS_PER_LOOKUP = MAX_USER_LOOKUP_IDS
|
|
19
|
-
|
|
20
|
-
/**
|
|
21
|
-
* Two label styles on purpose. A picker suggestion has to disambiguate two people with the same
|
|
22
|
-
* display name, and neither `CrudForm`'s combobox nor `FilterBar` renders anything but the label —
|
|
23
|
-
* so the email has to live in the label there. A resolved column label is read next to a device,
|
|
24
|
-
* where the email is noise.
|
|
25
|
-
*/
|
|
26
|
-
type LabelStyle = 'search' | 'compact'
|
|
27
|
-
|
|
28
|
-
function toOption(item: AuthUserItem | null | undefined, style: LabelStyle): DeviceUserOption[] {
|
|
29
|
-
if (!item || typeof item.id !== 'string' || !item.id.trim()) return []
|
|
30
|
-
const id = item.id.trim()
|
|
31
|
-
const name = typeof item.name === 'string' && item.name.trim() ? item.name.trim() : null
|
|
32
|
-
const email = typeof item.email === 'string' && item.email.trim() ? item.email.trim() : null
|
|
33
|
-
const label = style === 'search' && name && email ? `${name} — ${email}` : name ?? email ?? id
|
|
34
|
-
return [{ value: id, label }]
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
// `devices.admin` declares `dependsOn: ['auth.users.list']`, but dependsOn only diagnoses — a
|
|
38
|
-
// hand-built role can still reach these screens without it until the ACL editor or
|
|
39
|
-
// `sync-role-acls` fixes it. `x-om-forbidden-redirect: 0` keeps that 403 from bouncing the whole
|
|
40
|
-
// page to /login. `null` means the call itself failed, which callers must not
|
|
41
|
-
// confuse with a successful call that matched nobody — a caller caching "already resolved" would
|
|
42
|
-
// otherwise remember a transient network error forever.
|
|
43
|
-
async function fetchUsers(
|
|
44
|
-
params: URLSearchParams,
|
|
45
|
-
style: LabelStyle,
|
|
46
|
-
signal?: AbortSignal,
|
|
47
|
-
): Promise<DeviceUserOption[] | null> {
|
|
48
|
-
const call = await apiCall<{ items?: AuthUserItem[] }>(
|
|
49
|
-
`/api/auth/users?${params.toString()}`,
|
|
50
|
-
{ headers: { 'x-om-forbidden-redirect': '0' }, signal },
|
|
51
|
-
{ fallback: null },
|
|
52
|
-
).catch(() => null)
|
|
53
|
-
if (!call || !call.ok) return null
|
|
54
|
-
return (call.result?.items ?? []).flatMap((item) => toOption(item, style))
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
export async function loadDeviceUserOptions(query?: string): Promise<DeviceUserOption[]> {
|
|
58
|
-
const params = new URLSearchParams()
|
|
59
|
-
params.set('page', '1')
|
|
60
|
-
params.set('pageSize', String(SEARCH_PAGE_SIZE))
|
|
61
|
-
const trimmed = query?.trim()
|
|
62
|
-
if (trimmed) params.set('search', trimmed)
|
|
63
|
-
// A picker has nothing to cache, so a failed lookup is just an empty suggestion list.
|
|
64
|
-
return (await fetchUsers(params, 'search')) ?? []
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
/**
|
|
68
|
-
* The outcome of a batch lookup. `resolvedIds` lists the ids the server actually answered for —
|
|
69
|
-
* an id that came back without a row (deleted user) still counts as resolved, an id whose request
|
|
70
|
-
* failed does not. Callers cache on `resolvedIds`, so a transient failure is retried rather than
|
|
71
|
-
* remembered as a permanent blank.
|
|
72
|
-
*/
|
|
73
|
-
export type DeviceUserLookup = {
|
|
74
|
-
options: DeviceUserOption[]
|
|
75
|
-
resolvedIds: string[]
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
// Batch id → label resolution for rows already on screen, so a device whose owner never appeared in
|
|
79
|
-
// a search result still renders a name instead of a bare UUID.
|
|
80
|
-
export async function resolveDeviceUserOptions(ids: string[], signal?: AbortSignal): Promise<DeviceUserLookup> {
|
|
81
|
-
const unique = Array.from(new Set(ids.map((id) => id.trim()).filter(Boolean)))
|
|
82
|
-
if (unique.length === 0) return { options: [], resolvedIds: [] }
|
|
83
|
-
const options: DeviceUserOption[] = []
|
|
84
|
-
const resolvedIds: string[] = []
|
|
85
|
-
for (let offset = 0; offset < unique.length; offset += MAX_IDS_PER_LOOKUP) {
|
|
86
|
-
const batch = unique.slice(offset, offset + MAX_IDS_PER_LOOKUP)
|
|
87
|
-
const params = new URLSearchParams()
|
|
88
|
-
params.set('page', '1')
|
|
89
|
-
params.set('pageSize', String(batch.length))
|
|
90
|
-
// URLSearchParams encodes on toString(); pre-encoding here would double-escape the commas.
|
|
91
|
-
params.set('ids', batch.join(','))
|
|
92
|
-
const batchOptions = await fetchUsers(params, 'compact', signal)
|
|
93
|
-
// One failed batch must not cost the batches that did answer.
|
|
94
|
-
if (batchOptions === null) continue
|
|
95
|
-
options.push(...batchOptions)
|
|
96
|
-
resolvedIds.push(...batch)
|
|
97
|
-
}
|
|
98
|
-
return { options, resolvedIds }
|
|
99
|
-
}
|
|
@@ -1,34 +0,0 @@
|
|
|
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
|
-
}
|
|
@@ -1,85 +0,0 @@
|
|
|
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
|
-
}
|
|
@@ -1,84 +0,0 @@
|
|
|
1
|
-
import type { IntegrationCredentialField } from '@open-mercato/shared/modules/integrations/types'
|
|
2
|
-
import { SECRET_CREDENTIAL_FIELD_TYPES } from '../../lib/credentials-masking'
|
|
3
|
-
|
|
4
|
-
export type SecretFieldsConfigured = Record<string, boolean>
|
|
5
|
-
|
|
6
|
-
export type CredentialSavePayload = {
|
|
7
|
-
credentials: Record<string, unknown>
|
|
8
|
-
unchangedSecretFields?: string[]
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
export function buildCredentialEditValues(
|
|
12
|
-
credentials: Record<string, unknown>,
|
|
13
|
-
secretFieldsConfigured: SecretFieldsConfigured,
|
|
14
|
-
): Record<string, unknown> {
|
|
15
|
-
const editValues = { ...credentials }
|
|
16
|
-
|
|
17
|
-
for (const [fieldKey, configured] of Object.entries(secretFieldsConfigured)) {
|
|
18
|
-
if (configured) delete editValues[fieldKey]
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
return editValues
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
export function buildCredentialSavePayload(
|
|
25
|
-
values: Record<string, unknown>,
|
|
26
|
-
fields: readonly IntegrationCredentialField[],
|
|
27
|
-
secretFieldsConfigured: SecretFieldsConfigured,
|
|
28
|
-
deliberatelyClearedSecretFields: ReadonlySet<string> = new Set(),
|
|
29
|
-
): CredentialSavePayload {
|
|
30
|
-
const credentials = { ...values }
|
|
31
|
-
const unchangedSecretFields = new Set<string>()
|
|
32
|
-
|
|
33
|
-
for (const field of fields) {
|
|
34
|
-
if (!SECRET_CREDENTIAL_FIELD_TYPES.has(field.type)) continue
|
|
35
|
-
|
|
36
|
-
if (deliberatelyClearedSecretFields.has(field.key)) {
|
|
37
|
-
delete credentials[field.key]
|
|
38
|
-
continue
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
if (!secretFieldsConfigured[field.key]) continue
|
|
42
|
-
const value = credentials[field.key]
|
|
43
|
-
if (value !== undefined && value !== '') continue
|
|
44
|
-
|
|
45
|
-
delete credentials[field.key]
|
|
46
|
-
unchangedSecretFields.add(field.key)
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
return unchangedSecretFields.size > 0
|
|
50
|
-
? { credentials, unchangedSecretFields: [...unchangedSecretFields] }
|
|
51
|
-
: { credentials }
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
export function buildIntegrationCredentialSavePayload(
|
|
55
|
-
integrationId: string,
|
|
56
|
-
values: Record<string, unknown>,
|
|
57
|
-
fields: readonly IntegrationCredentialField[],
|
|
58
|
-
secretFieldsConfigured: SecretFieldsConfigured,
|
|
59
|
-
): CredentialSavePayload {
|
|
60
|
-
const normalizedValues = { ...values }
|
|
61
|
-
const deliberatelyClearedSecretFields = new Set<string>()
|
|
62
|
-
|
|
63
|
-
if (integrationId === 'storage_s3') {
|
|
64
|
-
const authMode = normalizedValues.authMode
|
|
65
|
-
if (authMode !== 'access_keys' && authMode !== 'ambient') {
|
|
66
|
-
const hasKeys = Boolean(normalizedValues.accessKeyId || normalizedValues.secretAccessKey)
|
|
67
|
-
normalizedValues.authMode = hasKeys ? 'access_keys' : 'ambient'
|
|
68
|
-
}
|
|
69
|
-
if (normalizedValues.authMode === 'ambient') {
|
|
70
|
-
delete normalizedValues.accessKeyId
|
|
71
|
-
delete normalizedValues.secretAccessKey
|
|
72
|
-
delete normalizedValues.sessionToken
|
|
73
|
-
deliberatelyClearedSecretFields.add('secretAccessKey')
|
|
74
|
-
deliberatelyClearedSecretFields.add('sessionToken')
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
return buildCredentialSavePayload(
|
|
79
|
-
normalizedValues,
|
|
80
|
-
fields,
|
|
81
|
-
secretFieldsConfigured,
|
|
82
|
-
deliberatelyClearedSecretFields,
|
|
83
|
-
)
|
|
84
|
-
}
|
|
@@ -1,55 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* How the hub decides whether an external correspondent must be identified by an
|
|
3
|
-
* email address.
|
|
4
|
-
*
|
|
5
|
-
* Background (#4975): `composeMessageSchema` used to require `externalEmail` for
|
|
6
|
-
* every non-draft message with `visibility: 'public'` — which is every message
|
|
7
|
-
* from an external sender. That assumption holds only for email-typed channels.
|
|
8
|
-
* A Discord sender is a snowflake and has no address at all, so inbound Discord
|
|
9
|
-
* failed validation deterministically and the ingest job died in the queue while
|
|
10
|
-
* the channel still reported `Connected`.
|
|
11
|
-
*
|
|
12
|
-
* Variant A of the spec's § Open decision — hub sender-identity contract makes
|
|
13
|
-
* the requirement conditional on the originating channel type, and **fails
|
|
14
|
-
* closed**: only a channel type this list positively recognizes as non-email
|
|
15
|
-
* waives the requirement. An unrecognized, empty or absent channel type keeps
|
|
16
|
-
* the pre-existing behaviour, so no current caller changes and a typo'd or
|
|
17
|
-
* caller-asserted type cannot quietly switch a validation rule off.
|
|
18
|
-
*
|
|
19
|
-
* For these channels the sender identity is not lost — it is carried by
|
|
20
|
-
* `ExternalMessage.sender_identifier` and joined 1:1 to the platform message
|
|
21
|
-
* through `MessageChannelLink`.
|
|
22
|
-
*
|
|
23
|
-
* Adding a channel type here is additive and non-breaking: it only widens the
|
|
24
|
-
* set of inputs the hub accepts.
|
|
25
|
-
*/
|
|
26
|
-
const NON_EMAIL_SENDER_CHANNEL_TYPES = new Set([
|
|
27
|
-
'discord',
|
|
28
|
-
'slack',
|
|
29
|
-
'teams',
|
|
30
|
-
'telegram',
|
|
31
|
-
'signal',
|
|
32
|
-
'whatsapp',
|
|
33
|
-
'messenger',
|
|
34
|
-
'instagram',
|
|
35
|
-
'sms',
|
|
36
|
-
'push',
|
|
37
|
-
])
|
|
38
|
-
|
|
39
|
-
/**
|
|
40
|
-
* True when a message originating from `channelType` must carry an
|
|
41
|
-
* `externalEmail` to be composed with `visibility: 'public'`.
|
|
42
|
-
*
|
|
43
|
-
* Fail-closed by design — see the note above.
|
|
44
|
-
*/
|
|
45
|
-
export function channelTypeRequiresExternalEmail(channelType?: string | null): boolean {
|
|
46
|
-
if (typeof channelType !== 'string') return true
|
|
47
|
-
const normalized = channelType.trim().toLowerCase()
|
|
48
|
-
if (!normalized) return true
|
|
49
|
-
return !NON_EMAIL_SENDER_CHANNEL_TYPES.has(normalized)
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
/** The recognized non-email channel types, for tests and diagnostics. */
|
|
53
|
-
export function listNonEmailSenderChannelTypes(): string[] {
|
|
54
|
-
return Array.from(NON_EMAIL_SENDER_CHANNEL_TYPES).sort((left, right) => left.localeCompare(right))
|
|
55
|
-
}
|
|
@@ -1,95 +0,0 @@
|
|
|
1
|
-
import { z } from 'zod'
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* Entity type a channel-backed conversation is exposed under on a message's
|
|
5
|
-
* `sourceEntityType`. Written by `communication_channels`' inbound ingest.
|
|
6
|
-
*/
|
|
7
|
-
const EXTERNAL_CONVERSATION_SOURCE_ENTITY_TYPE = 'communication_channels.external_conversation'
|
|
8
|
-
|
|
9
|
-
/**
|
|
10
|
-
* The only parts of a compose body this resolution needs. Read defensively from
|
|
11
|
-
* the raw request body, before the body is validated, because the validation
|
|
12
|
-
* outcome itself depends on the answer (#4975).
|
|
13
|
-
*/
|
|
14
|
-
export const composeSourceHintSchema = z.object({
|
|
15
|
-
sourceEntityType: z.string().optional(),
|
|
16
|
-
sourceEntityId: z.string().uuid().optional(),
|
|
17
|
-
parentMessageId: z.string().uuid().optional(),
|
|
18
|
-
})
|
|
19
|
-
|
|
20
|
-
export type ComposeSourceHint = z.infer<typeof composeSourceHintSchema>
|
|
21
|
-
|
|
22
|
-
/**
|
|
23
|
-
* Whether the compose validator can consult a resolved channel type at all.
|
|
24
|
-
*
|
|
25
|
-
* `sourceChannelType` is read in exactly one branch — a non-draft, public
|
|
26
|
-
* message that carries no address. Every internal reply, every draft and every
|
|
27
|
-
* public message that already supplies an address ignores it, so resolving it
|
|
28
|
-
* for them is a DI resolve plus a database round-trip whose answer is
|
|
29
|
-
* discarded. Mirrors `refineComposeMessage` and reads the raw body defensively,
|
|
30
|
-
* because this runs before validation. Skipping resolution yields `undefined`,
|
|
31
|
-
* which is already the fail-closed value.
|
|
32
|
-
*/
|
|
33
|
-
export function composeRequiresChannelTypeResolution(body: unknown): boolean {
|
|
34
|
-
if (!body || typeof body !== 'object') return false
|
|
35
|
-
const raw = body as Record<string, unknown>
|
|
36
|
-
if (raw.visibility !== 'public') return false
|
|
37
|
-
if (raw.isDraft === true) return false
|
|
38
|
-
const externalEmail = raw.externalEmail
|
|
39
|
-
return !(typeof externalEmail === 'string' && externalEmail.trim().length > 0)
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
type ResolveChannelTypeService = (
|
|
43
|
-
container: ContainerLike,
|
|
44
|
-
scope: { tenantId: string; organizationId: string | null },
|
|
45
|
-
reference: { externalConversationId?: string | null; messageId?: string | null },
|
|
46
|
-
) => Promise<string | null>
|
|
47
|
-
|
|
48
|
-
type ContainerLike = { resolve: <T = unknown>(name: string) => T }
|
|
49
|
-
|
|
50
|
-
function tryResolveChannelTypeService(
|
|
51
|
-
container: ContainerLike,
|
|
52
|
-
): ResolveChannelTypeService | undefined {
|
|
53
|
-
try {
|
|
54
|
-
return container.resolve<ResolveChannelTypeService>('communicationChannelsResolveChannelType')
|
|
55
|
-
} catch {
|
|
56
|
-
// `communication_channels` is optional: without it no message can originate
|
|
57
|
-
// from a channel, so "unknown" is both correct and fail-closed.
|
|
58
|
-
return undefined
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
/**
|
|
63
|
-
* Resolve the channel type a compose request originates from, server-side.
|
|
64
|
-
*
|
|
65
|
-
* Never derived from the request body's own `sourceChannelType` — that would let
|
|
66
|
-
* any caller waive the `externalEmail` requirement by asserting a channel type.
|
|
67
|
-
* It is looked up from the conversation the message is being composed on, or
|
|
68
|
-
* from the parent message it replies to.
|
|
69
|
-
*
|
|
70
|
-
* Returns `undefined` when nothing can be established, which the compose
|
|
71
|
-
* validator treats as "unknown" and therefore keeps the pre-#4975 rule.
|
|
72
|
-
*/
|
|
73
|
-
export async function resolveComposeSourceChannelType(
|
|
74
|
-
container: ContainerLike,
|
|
75
|
-
scope: { tenantId: string; organizationId: string | null },
|
|
76
|
-
hint: ComposeSourceHint,
|
|
77
|
-
): Promise<string | undefined> {
|
|
78
|
-
const externalConversationId =
|
|
79
|
-
hint.sourceEntityType === EXTERNAL_CONVERSATION_SOURCE_ENTITY_TYPE
|
|
80
|
-
? hint.sourceEntityId ?? null
|
|
81
|
-
: null
|
|
82
|
-
const messageId = hint.parentMessageId ?? null
|
|
83
|
-
if (!externalConversationId && !messageId) return undefined
|
|
84
|
-
|
|
85
|
-
const resolveChannelType = tryResolveChannelTypeService(container)
|
|
86
|
-
if (!resolveChannelType) return undefined
|
|
87
|
-
|
|
88
|
-
const channelType = await resolveChannelType(container, scope, {
|
|
89
|
-
externalConversationId,
|
|
90
|
-
messageId,
|
|
91
|
-
})
|
|
92
|
-
return channelType ?? undefined
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
export { EXTERNAL_CONVERSATION_SOURCE_ENTITY_TYPE }
|
|
@@ -1,46 +0,0 @@
|
|
|
1
|
-
import { parseBooleanWithDefault } from '@open-mercato/shared/lib/boolean'
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* The canonical customer record. Every customer also has a person or company profile indexed under
|
|
5
|
-
* its own entity type, and it is the profile — not the base row — that carries the detail-page
|
|
6
|
-
* navigation.
|
|
7
|
-
*/
|
|
8
|
-
export const CUSTOMERS_BASE_ENTITY_TYPE = 'customers:customer_entity'
|
|
9
|
-
|
|
10
|
-
/**
|
|
11
|
-
* Whether base customer rows are offered as search results.
|
|
12
|
-
*
|
|
13
|
-
* Why the knob exists: `search_tokens` is written by the query index for **every** entity a CRUD
|
|
14
|
-
* route indexes, independently of any module's `search.ts` config. `customers:customer_entity` is
|
|
15
|
-
* indexed but no module registers it for search, so its rows only ever surface a second,
|
|
16
|
-
* navigation-less copy of a customer who is already represented by their person or company
|
|
17
|
-
* profile — the duplicate reported in #5046. Worse, the duplicate was visible to superadmins only:
|
|
18
|
-
* `resolveReadableEntityTypes` narrows every other caller to entity types a module registered for
|
|
19
|
-
* search, so the same query returned different shapes for different users.
|
|
20
|
-
*
|
|
21
|
-
* Default `false`: the token strategy never returns base customer rows, so a customer appears
|
|
22
|
-
* exactly once, as their profile. `OM_SEARCH_CUSTOMERS_INDEX_BASE_ENTITY=true` restores the
|
|
23
|
-
* previous behavior, where both rows are returned and the presenter enricher's linked-result merge
|
|
24
|
-
* collapses the pair into the canonical entity result.
|
|
25
|
-
*
|
|
26
|
-
* Deliberately a **read-side** filter. `search_tokens` is not only the token-search index: the
|
|
27
|
-
* People and Companies list routes resolve their search box through
|
|
28
|
-
* `findEntityIdsBySearchTokens` on this exact entity type, and both query engines rewrite
|
|
29
|
-
* `like`/`ilike` on encrypted customer columns into the same table. Dropping the rows would
|
|
30
|
-
* silently break list search on `display_name`, `primary_email`, `description` and friends, so the
|
|
31
|
-
* rows stay and only the search strategy stops offering them.
|
|
32
|
-
*/
|
|
33
|
-
export function indexesCustomerBaseEntity(): boolean {
|
|
34
|
-
return parseBooleanWithDefault(process.env.OM_SEARCH_CUSTOMERS_INDEX_BASE_ENTITY, false)
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
/**
|
|
38
|
-
* Entity types the token search strategy must not return.
|
|
39
|
-
*
|
|
40
|
-
* Exposed as a list so the strategy can express the exclusion as a single `NOT IN` predicate
|
|
41
|
-
* instead of post-filtering rows it already paid to fetch — a post-filter would silently shrink
|
|
42
|
-
* the caller's `limit`.
|
|
43
|
-
*/
|
|
44
|
-
export function listSearchTokenExcludedEntityTypes(): string[] {
|
|
45
|
-
return indexesCustomerBaseEntity() ? [] : [CUSTOMERS_BASE_ENTITY_TYPE]
|
|
46
|
-
}
|