@open-mercato/core 0.6.8-develop.7099.1.7ba2771d06 → 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/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/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 +8 -8
- package/dist/modules/devices/backend/devices/[id]/page.js.map +2 -2
- package/dist/modules/devices/backend/devices/page.js +13 -15
- package/dist/modules/devices/backend/devices/page.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/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 +0 -8
- 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 +15 -15
- package/src/modules/devices/backend/devices/page.tsx +21 -24
- 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/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/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/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/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,13 +1,9 @@
|
|
|
1
1
|
import type { EntityManager } from '@mikro-orm/postgresql'
|
|
2
2
|
import { getGatewayAdapter, type WebhookEvent } from '@open-mercato/shared/modules/payment_gateways/types'
|
|
3
|
-
import { isTrustedWebhookDispatch } from '@open-mercato/shared/lib/queue/dispatchOrigin'
|
|
4
|
-
import { createLogger } from '@open-mercato/shared/lib/logger'
|
|
5
3
|
import type { IntegrationLogService } from '../../integrations/lib/log-service'
|
|
6
4
|
import type { PaymentGatewayService } from './gateway-service'
|
|
7
5
|
import { claimWebhookProcessing, releaseWebhookClaim } from './webhook-utils'
|
|
8
6
|
|
|
9
|
-
const logger = createLogger('payment_gateways').child({ component: 'webhook-processor' })
|
|
10
|
-
|
|
11
7
|
export type PaymentGatewayWebhookJobPayload = {
|
|
12
8
|
providerKey: string
|
|
13
9
|
event: WebhookEvent
|
|
@@ -57,13 +53,6 @@ export async function processPaymentGatewayWebhookJob(
|
|
|
57
53
|
): Promise<void> {
|
|
58
54
|
const { em, paymentGatewayService, integrationLogService } = deps
|
|
59
55
|
const { providerKey, event } = payload
|
|
60
|
-
// Fail closed on untrusted dispatch origins (#5213): only jobs enqueued by the
|
|
61
|
-
// inbound webhook route (signature verified) may drive payment state. Jobs that
|
|
62
|
-
// arrive through any other path — e.g. a scheduled queue target — are dropped.
|
|
63
|
-
if (!isTrustedWebhookDispatch(payload)) {
|
|
64
|
-
logger.error('Dropping webhook job with missing or untrusted dispatch origin', { providerKey, eventType: event?.eventType ?? null })
|
|
65
|
-
return
|
|
66
|
-
}
|
|
67
56
|
// Scope MUST come from the trusted route layer (derived from a verified GatewayTransaction).
|
|
68
57
|
// Never fall back to attacker-controlled metadata on `event.data.metadata` — that was the
|
|
69
58
|
// vector that allowed forged mock webhooks to mutate another tenant's payment state.
|
|
@@ -39,7 +39,6 @@ type RuleSetResponse = {
|
|
|
39
39
|
items?: Array<Record<string, unknown>>
|
|
40
40
|
total?: number
|
|
41
41
|
totalPages?: number
|
|
42
|
-
totalIsCapped?: boolean
|
|
43
42
|
}
|
|
44
43
|
|
|
45
44
|
export default function PlannerAvailabilityRuleSetsPage() {
|
|
@@ -68,7 +67,6 @@ export default function PlannerAvailabilityRuleSetsPage() {
|
|
|
68
67
|
const [page, setPage] = React.useState(1)
|
|
69
68
|
const [total, setTotal] = React.useState(0)
|
|
70
69
|
const [totalPages, setTotalPages] = React.useState(1)
|
|
71
|
-
const [totalIsCapped, setTotalIsCapped] = React.useState(false)
|
|
72
70
|
const [sorting, setSorting] = React.useState<SortingState>([{ id: 'name', desc: false }])
|
|
73
71
|
const [search, setSearch] = React.useState('')
|
|
74
72
|
const [isLoading, setIsLoading] = React.useState(true)
|
|
@@ -122,7 +120,6 @@ export default function PlannerAvailabilityRuleSetsPage() {
|
|
|
122
120
|
setRows(items.map(mapRuleSet))
|
|
123
121
|
setTotal(typeof payload.total === 'number' ? payload.total : items.length)
|
|
124
122
|
setTotalPages(typeof payload.totalPages === 'number' ? payload.totalPages : Math.max(1, Math.ceil(items.length / PAGE_SIZE)))
|
|
125
|
-
setTotalIsCapped(payload?.totalIsCapped === true)
|
|
126
123
|
} catch (error) {
|
|
127
124
|
logger.error('Failed to list availability rule sets', { err: error })
|
|
128
125
|
flash(labels.errors.load, 'error')
|
|
@@ -232,7 +229,6 @@ export default function PlannerAvailabilityRuleSetsPage() {
|
|
|
232
229
|
pageSize: PAGE_SIZE,
|
|
233
230
|
total,
|
|
234
231
|
totalPages,
|
|
235
|
-
totalIsCapped,
|
|
236
232
|
onPageChange: setPage,
|
|
237
233
|
}}
|
|
238
234
|
rowActions={(row) => (
|
|
@@ -32,7 +32,6 @@ type ResponsePayload = {
|
|
|
32
32
|
page?: number
|
|
33
33
|
pageSize?: number
|
|
34
34
|
totalPages: number
|
|
35
|
-
totalIsCapped?: boolean
|
|
36
35
|
}
|
|
37
36
|
|
|
38
37
|
const statusVariant: StatusMap<PushDeliveryStatus> = {
|
|
@@ -60,7 +59,6 @@ export default function PushDeliveriesListPage() {
|
|
|
60
59
|
const [page, setPage] = React.useState(1)
|
|
61
60
|
const [total, setTotal] = React.useState(0)
|
|
62
61
|
const [totalPages, setTotalPages] = React.useState(1)
|
|
63
|
-
const [totalIsCapped, setTotalIsCapped] = React.useState(false)
|
|
64
62
|
const [isLoading, setIsLoading] = React.useState(true)
|
|
65
63
|
const scopeVersion = useOrganizationScopeVersion()
|
|
66
64
|
const t = useT()
|
|
@@ -158,7 +156,6 @@ export default function PushDeliveriesListPage() {
|
|
|
158
156
|
setRows(Array.isArray(payload.items) ? payload.items : [])
|
|
159
157
|
setTotal(payload.total || 0)
|
|
160
158
|
setTotalPages(payload.totalPages || 1)
|
|
161
|
-
setTotalIsCapped(payload?.totalIsCapped === true)
|
|
162
159
|
}
|
|
163
160
|
} catch (error) {
|
|
164
161
|
if (!cancelled) {
|
|
@@ -232,7 +229,7 @@ export default function PushDeliveriesListPage() {
|
|
|
232
229
|
onFiltersClear={() => { setFilterValues({}); setPage(1) }}
|
|
233
230
|
perspective={{ tableId: 'push_notifications.deliveries' }}
|
|
234
231
|
onRowClick={(row) => { window.location.href = `/backend/push_notifications/${row.id}` }}
|
|
235
|
-
pagination={{ page, pageSize: 50, total, totalPages,
|
|
232
|
+
pagination={{ page, pageSize: 50, total, totalPages, onPageChange: setPage }}
|
|
236
233
|
isLoading={isLoading}
|
|
237
234
|
emptyState={t('push_notifications.deliveries.empty')}
|
|
238
235
|
/>
|
|
@@ -70,7 +70,7 @@ function DeviceField({ value, setValue, setFormValue, values, onState }: CrudCus
|
|
|
70
70
|
let cancelled = false
|
|
71
71
|
setLoading(true)
|
|
72
72
|
const params = new URLSearchParams({ userId, pageSize: '50' })
|
|
73
|
-
apiCall<{ items?: Array<{ id: string;
|
|
73
|
+
apiCall<{ items?: Array<{ id: string; device_id: string; platform: string; push_provider?: string | null }> }>(
|
|
74
74
|
`/api/devices/admin/devices?${params.toString()}`,
|
|
75
75
|
{ headers: { 'x-om-forbidden-redirect': '0' } },
|
|
76
76
|
{ fallback: null },
|
|
@@ -80,9 +80,9 @@ function DeviceField({ value, setValue, setFormValue, values, onState }: CrudCus
|
|
|
80
80
|
if (cancelled) return
|
|
81
81
|
const items = (call && call.ok ? call.result?.items : []) ?? []
|
|
82
82
|
const opts = items
|
|
83
|
-
.filter((d): d is { id: string;
|
|
84
|
-
!!d && typeof d.id === 'string' && !!d.
|
|
85
|
-
.map((d) => ({ id: d.id, label: `${d.
|
|
83
|
+
.filter((d): d is { id: string; device_id: string; platform: string; push_provider?: string | null } =>
|
|
84
|
+
!!d && typeof d.id === 'string' && !!d.push_provider)
|
|
85
|
+
.map((d) => ({ id: d.id, label: `${d.device_id} · ${d.platform}${d.push_provider ? ` · ${d.push_provider}` : ''}`, platform: d.platform }))
|
|
86
86
|
setDevices(opts)
|
|
87
87
|
if (selected && !opts.some((o) => o.id === selected)) setValue('')
|
|
88
88
|
})
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { QueryEngine, QueryOptions, QueryResult, QueryResultMeta, EncryptedSortRowCapWarning,
|
|
1
|
+
import type { QueryEngine, QueryOptions, QueryResult, QueryResultMeta, EncryptedSortRowCapWarning, FilterOp, Filter, QueryCustomFieldSource, PartialIndexWarning, QueryExtensionsConfig, Sort } from '@open-mercato/shared/lib/query/types'
|
|
2
2
|
import { SortDir } from '@open-mercato/shared/lib/query/types'
|
|
3
3
|
import type { EntityId } from '@open-mercato/shared/modules/entities'
|
|
4
4
|
import type { EntityManager } from '@mikro-orm/postgresql'
|
|
@@ -20,8 +20,6 @@ import {
|
|
|
20
20
|
type ResolvedJoin,
|
|
21
21
|
} from '@open-mercato/shared/lib/query/join-utils'
|
|
22
22
|
import { resolveSearchConfig, type SearchConfig } from '@open-mercato/shared/lib/search/config'
|
|
23
|
-
import { isEncryptedLikeField, resolveEncryptedLikeFieldSet } from '@open-mercato/shared/lib/query/engine'
|
|
24
|
-
import { isTenantDataEncryptionEnabled } from '@open-mercato/shared/lib/encryption/toggles'
|
|
25
23
|
import {
|
|
26
24
|
createSearchTokenAvailability,
|
|
27
25
|
isSearchFilterOp,
|
|
@@ -34,7 +32,6 @@ import { tokenizeText } from '@open-mercato/shared/lib/search/tokenize'
|
|
|
34
32
|
import { runBeforeQueryPipeline, runAfterQueryPipeline, type QueryExtensionContext } from '@open-mercato/shared/lib/query/query-extension-runner'
|
|
35
33
|
import { warnOnCiphertextLikeFallback } from '@open-mercato/shared/lib/query/ciphertext-search-warning'
|
|
36
34
|
import { resolveEncryptedSortFields, resolveEncryptedSortMaxRows, sortRowsInMemory } from '@open-mercato/shared/lib/query/encrypted-sort'
|
|
37
|
-
import { resolveListCountCap } from '@open-mercato/shared/lib/query/count-cap'
|
|
38
35
|
import { mapWithConcurrency } from '@open-mercato/shared/lib/query/bounded-decrypt'
|
|
39
36
|
import { createLogger } from '@open-mercato/shared/lib/logger'
|
|
40
37
|
import { parseNumberWithDefault } from '@open-mercato/shared/lib/number'
|
|
@@ -151,25 +148,13 @@ type SearchRuntime = {
|
|
|
151
148
|
organizationScope?: { ids: string[]; includeNull: boolean } | null
|
|
152
149
|
tenantId?: string | null
|
|
153
150
|
searchSources?: SearchTokenSource[]
|
|
154
|
-
/**
|
|
155
|
-
* Base-column fields whose stored value is ciphertext, so a like/ilike on them can only be
|
|
156
|
-
* answered via search tokens. A plaintext column keeps exact SQL ILIKE instead: the token
|
|
157
|
-
* rewrite is approximate -- it splits on non-alphanumerics and drops tokens shorter than
|
|
158
|
-
* minTokenLength, so a document-number search like "ZK 1/2026" degrades to the tokens
|
|
159
|
-
* {202, 2026} and matches every record from that year, and an all-short term like "ZK"
|
|
160
|
-
* produces no tokens and silently drops the predicate. `null`/absent = the encryption
|
|
161
|
-
* service could not answer (or a caller predates this field); keep the old rewrite then,
|
|
162
|
-
* because guessing "plaintext" would turn encrypted-column search into an
|
|
163
|
-
* ILIKE-on-ciphertext that matches nothing.
|
|
164
|
-
*/
|
|
165
|
-
encryptedFields?: Set<string> | null
|
|
166
151
|
/** Per-`query()` alias minter for `search_tokens` subqueries (see #2738). */
|
|
167
152
|
mintAlias: () => string
|
|
168
153
|
}
|
|
169
154
|
|
|
170
155
|
type EncryptionResolver = () => {
|
|
171
156
|
decryptEntityPayload?: (entityId: EntityId, payload: Record<string, unknown>, tenantId?: string | null, organizationId?: string | null) => Promise<Record<string, unknown>>
|
|
172
|
-
getEncryptedFieldNames?: (entityId: EntityId, tenantId?: string | null, organizationId?: string | null
|
|
157
|
+
getEncryptedFieldNames?: (entityId: EntityId, tenantId?: string | null, organizationId?: string | null) => Promise<readonly string[]>
|
|
173
158
|
isEnabled?: () => boolean
|
|
174
159
|
} | null
|
|
175
160
|
|
|
@@ -511,51 +496,6 @@ export class HybridQueryEngine implements QueryEngine {
|
|
|
511
496
|
? await this.searchAvailability().anySourceHasTokens(searchSources, opts.tenantId ?? null, orgScope)
|
|
512
497
|
: false
|
|
513
498
|
const searchRuntime: SearchRuntime = { ...searchRuntimeBase, searchSources, enabled: searchEnabled && hasSearchTokens }
|
|
514
|
-
if (
|
|
515
|
-
searchRuntime.enabled &&
|
|
516
|
-
searchConfig.useIlikeForNonEncryptedFields === true &&
|
|
517
|
-
sourceSearchFilters.some((filter) => !String(filter.field).startsWith('cf:'))
|
|
518
|
-
) {
|
|
519
|
-
// `ignoreRuntimeHealth` asks the on-disk question -- a column holds ciphertext even while
|
|
520
|
-
// the KMS is down -- so an outage keeps encrypted columns on the token path (#4622).
|
|
521
|
-
// `organizationId: null` is deliberate, not an omission: the service then unions in every
|
|
522
|
-
// organization's map (`fetchAllOrganizationFieldNames`), so a field any org encrypts stays
|
|
523
|
-
// on the token path -- a wider set fails safe. Passing the request's org instead would
|
|
524
|
-
// silently break encrypted-column search for orgs without their own map. That union is an
|
|
525
|
-
// UNCACHED `encryption_maps` read, one extra round-trip per searched list request.
|
|
526
|
-
try {
|
|
527
|
-
const encryptionService = this.getEncryptionService()
|
|
528
|
-
const readEncryptedFieldNames = encryptionService?.getEncryptedFieldNames?.bind(encryptionService)
|
|
529
|
-
if (readEncryptedFieldNames) {
|
|
530
|
-
searchRuntime.encryptedFields = await resolveEncryptedLikeFieldSet(
|
|
531
|
-
() => readEncryptedFieldNames(
|
|
532
|
-
entity as EntityId,
|
|
533
|
-
opts.tenantId ?? null,
|
|
534
|
-
null,
|
|
535
|
-
{ ignoreRuntimeHealth: true },
|
|
536
|
-
),
|
|
537
|
-
String(entity),
|
|
538
|
-
opts.tenantId ?? null,
|
|
539
|
-
)
|
|
540
|
-
} else if (isTenantDataEncryptionEnabled()) {
|
|
541
|
-
// Encryption is on but the service is unreachable (a swallowed DI failure looks
|
|
542
|
-
// exactly like "no service"): treat the map as UNKNOWN and keep the token rewrite,
|
|
543
|
-
// rather than guessing "plaintext" and running ILIKE against ciphertext.
|
|
544
|
-
searchRuntime.encryptedFields = null
|
|
545
|
-
} else {
|
|
546
|
-
// Encryption disabled: nothing is ciphertext at rest, exact ILIKE is always right.
|
|
547
|
-
searchRuntime.encryptedFields = new Set()
|
|
548
|
-
}
|
|
549
|
-
} catch (err) {
|
|
550
|
-
// The fallback is safe (the old rewrite-everything behavior), but taking it silently
|
|
551
|
-
// would hide that the gate has stopped working.
|
|
552
|
-
logger.warn('search: encrypted-field map unavailable; keeping the token rewrite for all columns', {
|
|
553
|
-
entity: String(entity),
|
|
554
|
-
error: err instanceof Error ? err.message : String(err),
|
|
555
|
-
})
|
|
556
|
-
searchRuntime.encryptedFields = null
|
|
557
|
-
}
|
|
558
|
-
}
|
|
559
499
|
if (searchFilters.length) {
|
|
560
500
|
this.logSearchDebug('search:init', {
|
|
561
501
|
entity,
|
|
@@ -845,9 +785,10 @@ export class HybridQueryEngine implements QueryEngine {
|
|
|
845
785
|
return next
|
|
846
786
|
}
|
|
847
787
|
|
|
848
|
-
// Also used by the count
|
|
849
|
-
//
|
|
850
|
-
//
|
|
788
|
+
// Also used by the optimized count path, which builds from a bare base table with
|
|
789
|
+
// no index/custom-field joins. Emitting a cf predicate there would reference an
|
|
790
|
+
// alias that query has never joined, so this stays safe only while
|
|
791
|
+
// `canOptimizeCount` is false whenever any cf filter exists (see `hasCustomFieldFilters`).
|
|
851
792
|
const applyOrGroupedBaseFilters = (q: AnyBuilder): AnyBuilder => {
|
|
852
793
|
if (orGroupFilters.length === 0 && orGroupCfFilters.length === 0) return q
|
|
853
794
|
// `BaseFilter` here is just the normalized-leaf shape; the `cf` bucket holds
|
|
@@ -996,101 +937,6 @@ export class HybridQueryEngine implements QueryEngine {
|
|
|
996
937
|
const hasCustomFieldFilters = cfFilters.length > 0
|
|
997
938
|
const canOptimizeCount = !hasCustomFieldFilters && !hasNonBaseSearchSource
|
|
998
939
|
|
|
999
|
-
// ── Count shape (#4552 Phase 2) ─────────────────────────────────
|
|
1000
|
-
// The count query is rebuilt rather than derived from the display shape:
|
|
1001
|
-
// base scope + filters only. Predicates that read the left-joined index
|
|
1002
|
-
// rowset (cf filters, doc filters, or-groups with doc members, token
|
|
1003
|
-
// searches over joined sources) evaluate against the *same* rowset as the
|
|
1004
|
-
// display query, but confined inside a single correlated EXISTS built
|
|
1005
|
-
// from a one-row seed — so the per-base-row rowset is identical, yet a
|
|
1006
|
-
// semi-join cannot multiply base rows. The count therefore needs no
|
|
1007
|
-
// DISTINCT or GROUP BY, and an outer LIMIT actually bounds the scan (no
|
|
1008
|
-
// blocking aggregate between the LIMIT and the scan).
|
|
1009
|
-
const isRowsetDependentFilter = (filter: BaseFilter): boolean => {
|
|
1010
|
-
const baseField = resolveBaseColumn(String(filter.field))
|
|
1011
|
-
if (!baseField) return true
|
|
1012
|
-
// Token search may probe joined sources' record ids, which only exist
|
|
1013
|
-
// on the index rowset.
|
|
1014
|
-
if (
|
|
1015
|
-
(filter.op === 'like' || filter.op === 'ilike') &&
|
|
1016
|
-
searchRuntime.enabled &&
|
|
1017
|
-
typeof filter.value === 'string' &&
|
|
1018
|
-
hasNonBaseSearchSource
|
|
1019
|
-
) return true
|
|
1020
|
-
return false
|
|
1021
|
-
}
|
|
1022
|
-
const rowsetRegularFilters = regularBaseFilters.filter((filter) => isRowsetDependentFilter(filter))
|
|
1023
|
-
const outerRegularFilters = regularBaseFilters.filter((filter) => !isRowsetDependentFilter(filter))
|
|
1024
|
-
// Or-groups are disjuncts of one $or, so they cannot be split between the
|
|
1025
|
-
// outer query and the rowset — one doc-dependent member moves them all in.
|
|
1026
|
-
const orGroupsRowsetDependent =
|
|
1027
|
-
orGroupCfFilters.length > 0 ||
|
|
1028
|
-
orGroupFilters.some((filter) => isRowsetDependentFilter(filter))
|
|
1029
|
-
const hasInnerTypedCfSource = preparedCfSources.some((source) =>
|
|
1030
|
-
((opts.customFieldSources ?? []).find((s) => s && (s.alias ?? undefined) === source.alias)?.join?.type ?? 'left') === 'inner')
|
|
1031
|
-
const needsIndexRowset =
|
|
1032
|
-
hasCustomFieldFilters ||
|
|
1033
|
-
rowsetRegularFilters.length > 0 ||
|
|
1034
|
-
orGroupsRowsetDependent ||
|
|
1035
|
-
hasInnerTypedCfSource
|
|
1036
|
-
|
|
1037
|
-
const applyCountShape = async (q: AnyBuilder): Promise<AnyBuilder> => {
|
|
1038
|
-
let next = applyBaseScope(q)
|
|
1039
|
-
for (const filter of outerRegularFilters) {
|
|
1040
|
-
const baseField = resolveBaseColumn(String(filter.field))
|
|
1041
|
-
if (!baseField) continue
|
|
1042
|
-
next = this.applyColumnFilter(next, qualify(baseField), filter, {
|
|
1043
|
-
...searchRuntime, entity, field: String(filter.field), recordIdColumn: qualify('id'),
|
|
1044
|
-
})
|
|
1045
|
-
}
|
|
1046
|
-
if (!orGroupsRowsetDependent) next = applyOrGroupedBaseFilters(next)
|
|
1047
|
-
if (needsIndexRowset) {
|
|
1048
|
-
// One seed row per base row, then the display query's own join
|
|
1049
|
-
// builders — the rowset inside the EXISTS is the display rowset.
|
|
1050
|
-
// Built from `db` (not the where-callback's expression builder),
|
|
1051
|
-
// matching applyJoinFilters' detached-subquery idiom; correlated
|
|
1052
|
-
// references to the outer base alias resolve at compile time.
|
|
1053
|
-
let rowset: AnyBuilder = db
|
|
1054
|
-
.selectFrom(sql`(select 1)`.as('om_count_seed'))
|
|
1055
|
-
.select(sql<number>`1`.as('one'))
|
|
1056
|
-
rowset = applyEntityIndexesJoin(rowset)
|
|
1057
|
-
rowset = applyCustomFieldSourceJoins(rowset)
|
|
1058
|
-
rowset = applyCfFilters(rowset)
|
|
1059
|
-
for (const filter of rowsetRegularFilters) {
|
|
1060
|
-
const baseField = resolveBaseColumn(String(filter.field))
|
|
1061
|
-
if (!baseField) {
|
|
1062
|
-
rowset = this.applyIndexDocFilterFromAlias(
|
|
1063
|
-
rowset, 'ei', entity, String(filter.field), filter.op, filter.value, qualify('id'), searchRuntime,
|
|
1064
|
-
)
|
|
1065
|
-
continue
|
|
1066
|
-
}
|
|
1067
|
-
rowset = this.applyColumnFilter(rowset, qualify(baseField), filter, {
|
|
1068
|
-
...searchRuntime, entity, field: String(filter.field), recordIdColumn: qualify('id'),
|
|
1069
|
-
})
|
|
1070
|
-
}
|
|
1071
|
-
if (orGroupsRowsetDependent) rowset = applyOrGroupedBaseFilters(rowset)
|
|
1072
|
-
const capturedRowset = rowset
|
|
1073
|
-
next = next.where((eb: any) => eb.exists(capturedRowset))
|
|
1074
|
-
}
|
|
1075
|
-
next = await applyJoinFilters({
|
|
1076
|
-
db,
|
|
1077
|
-
baseTable,
|
|
1078
|
-
builder: next,
|
|
1079
|
-
joinMap,
|
|
1080
|
-
joinFilters,
|
|
1081
|
-
aliasTables,
|
|
1082
|
-
qualifyBase: (column) => qualify(column),
|
|
1083
|
-
applyAliasScope: async (target: any, alias: string) => applyAliasScopes(target as AnyBuilder, alias),
|
|
1084
|
-
applyFilterOp: (target, column, op, value) => applyJoinFilterOpFn(target as AnyBuilder, column, op, value),
|
|
1085
|
-
applyJoinFilterOp: async (target, filter, qualified, join) => {
|
|
1086
|
-
const applied = await applyJoinSearchFilterOp(target as AnyBuilder, filter, qualified, join)
|
|
1087
|
-
return { applied, builder: target }
|
|
1088
|
-
},
|
|
1089
|
-
columnExists: (tbl, column) => this.columnExists(tbl, column),
|
|
1090
|
-
})
|
|
1091
|
-
return next
|
|
1092
|
-
}
|
|
1093
|
-
|
|
1094
940
|
// Selection (for data query)
|
|
1095
941
|
const selectFieldSet = new Set<string>((opts.fields && opts.fields.length) ? opts.fields.map(String) : Array.from(columns.keys()))
|
|
1096
942
|
if (requiresPlaintextSort) {
|
|
@@ -1151,23 +997,33 @@ export class HybridQueryEngine implements QueryEngine {
|
|
|
1151
997
|
const pageSize = opts.page?.pageSize ?? 20
|
|
1152
998
|
const sqlDebugEnabled = this.isSqlDebugEnabled()
|
|
1153
999
|
|
|
1154
|
-
|
|
1000
|
+
let total: number
|
|
1155
1001
|
|
|
1156
|
-
|
|
1157
|
-
|
|
1158
|
-
|
|
1159
|
-
|
|
1160
|
-
|
|
1161
|
-
|
|
1162
|
-
|
|
1163
|
-
|
|
1164
|
-
|
|
1165
|
-
|
|
1166
|
-
|
|
1167
|
-
|
|
1168
|
-
|
|
1169
|
-
|
|
1170
|
-
:
|
|
1002
|
+
if (canOptimizeCount) {
|
|
1003
|
+
// Optimized count: apply only base-scope + regular filters + or-group filters (no index joins).
|
|
1004
|
+
const optimizedRoot = db.selectFrom(`${baseTable} as b` as any)
|
|
1005
|
+
let countCore = applyBaseScope(optimizedRoot)
|
|
1006
|
+
countCore = applyRegularBaseFilters(countCore)
|
|
1007
|
+
countCore = applyOrGroupedBaseFilters(countCore)
|
|
1008
|
+
// joinFilters still need to be re-applied in the optimized path
|
|
1009
|
+
countCore = await applyJoinFilters({
|
|
1010
|
+
db,
|
|
1011
|
+
baseTable,
|
|
1012
|
+
builder: countCore,
|
|
1013
|
+
joinMap,
|
|
1014
|
+
joinFilters,
|
|
1015
|
+
aliasTables,
|
|
1016
|
+
qualifyBase: (column) => qualify(column),
|
|
1017
|
+
applyAliasScope: async (target: any, alias: string) => applyAliasScopes(target as AnyBuilder, alias),
|
|
1018
|
+
applyFilterOp: (target, column, op, value) => applyJoinFilterOpFn(target as AnyBuilder, column, op, value),
|
|
1019
|
+
applyJoinFilterOp: async (target, filter, qualified, join) => {
|
|
1020
|
+
const applied = await applyJoinSearchFilterOp(target as AnyBuilder, filter, qualified, join)
|
|
1021
|
+
return { applied, builder: target }
|
|
1022
|
+
},
|
|
1023
|
+
columnExists: (tbl, column) => this.columnExists(tbl, column),
|
|
1024
|
+
})
|
|
1025
|
+
const sub = countCore.select(sql.ref(qualify('id')).as('id')).groupBy(qualify('id')).as('sq')
|
|
1026
|
+
const countQuery = db.selectFrom(sub as any).select(sql<string>`count(*)`.as('count'))
|
|
1171
1027
|
if (debugEnabled && sqlDebugEnabled) {
|
|
1172
1028
|
const compiled = countQuery.compile()
|
|
1173
1029
|
this.debug('query:sql:count', { entity, sql: compiled.sql, bindings: compiled.parameters })
|
|
@@ -1175,19 +1031,25 @@ export class HybridQueryEngine implements QueryEngine {
|
|
|
1175
1031
|
const countRow = await this.captureSqlTiming(
|
|
1176
1032
|
'query:sql:count', entity,
|
|
1177
1033
|
() => countQuery.executeTakeFirst(),
|
|
1178
|
-
{ optimized:
|
|
1034
|
+
{ optimized: true }, profiler,
|
|
1179
1035
|
)
|
|
1180
|
-
|
|
1181
|
-
|
|
1182
|
-
|
|
1036
|
+
total = this.parseCount(countRow)
|
|
1037
|
+
} else {
|
|
1038
|
+
const countRoot = db.selectFrom(`${baseTable} as b` as any)
|
|
1039
|
+
const countBuilder = (await applyQueryShape(countRoot))
|
|
1040
|
+
.select(sql<string>`count(distinct ${sql.ref(qualify('id'))})`.as('count'))
|
|
1041
|
+
if (debugEnabled && sqlDebugEnabled) {
|
|
1042
|
+
const compiled = countBuilder.compile()
|
|
1043
|
+
this.debug('query:sql:count', { entity, sql: compiled.sql, bindings: compiled.parameters })
|
|
1183
1044
|
}
|
|
1184
|
-
|
|
1045
|
+
const countRow = await this.captureSqlTiming(
|
|
1046
|
+
'query:sql:count', entity,
|
|
1047
|
+
() => countBuilder.executeTakeFirst(),
|
|
1048
|
+
{ optimized: false }, profiler,
|
|
1049
|
+
)
|
|
1050
|
+
total = this.parseCount(countRow)
|
|
1185
1051
|
}
|
|
1186
1052
|
|
|
1187
|
-
const counted = await runBoundedCount(canOptimizeCount)
|
|
1188
|
-
const total: number = counted.total
|
|
1189
|
-
const listCountCapWarning: ListCountCapWarning | undefined = counted.warning
|
|
1190
|
-
|
|
1191
1053
|
const dekKeyCache = new Map<string | null, string | null>()
|
|
1192
1054
|
|
|
1193
1055
|
const decryptRow = async (item: Record<string, unknown>): Promise<Record<string, unknown>> => {
|
|
@@ -1238,29 +1100,24 @@ export class HybridQueryEngine implements QueryEngine {
|
|
|
1238
1100
|
const sortFieldNames = Array.from(new Set(['id', ...scopeFieldNames, ...resolvedSorts.map((s) => String(s.field))]))
|
|
1239
1101
|
phase1 = applySelection(phase1, sortFieldNames)
|
|
1240
1102
|
if (cap !== null) {
|
|
1241
|
-
|
|
1242
|
-
// scan itself, not by comparing against `total` — which may itself be
|
|
1243
|
-
// capped (`OM_LIST_COUNT_CAP`) and would then never exceed the sort cap.
|
|
1244
|
-
phase1 = phase1.limit(cap + 1).orderBy(qualify('id'), 'asc' as any)
|
|
1103
|
+
phase1 = phase1.limit(cap).orderBy(qualify('id'), 'asc' as any)
|
|
1245
1104
|
}
|
|
1246
1105
|
if (debugEnabled && sqlDebugEnabled) {
|
|
1247
1106
|
const compiled = phase1.compile()
|
|
1248
1107
|
this.debug('query:sql:data:phase1', { entity, sql: compiled.sql, bindings: compiled.parameters })
|
|
1249
1108
|
}
|
|
1250
|
-
const
|
|
1109
|
+
const candidateRows = await this.captureSqlTiming(
|
|
1251
1110
|
'query:sql:data:phase1', entity,
|
|
1252
1111
|
() => phase1.execute(),
|
|
1253
1112
|
{ phase: 1 }, profiler,
|
|
1254
1113
|
) as Record<string, unknown>[]
|
|
1255
|
-
const sortTruncated = cap !== null && candidateRowsRaw.length > cap
|
|
1256
|
-
const candidateRows = sortTruncated && cap !== null ? candidateRowsRaw.slice(0, cap) : candidateRowsRaw
|
|
1257
1114
|
const decryptedCandidates = await mapWithConcurrency(candidateRows, DECRYPT_CONCURRENCY, decryptRow)
|
|
1258
1115
|
const orderedCandidates = sortRowsInMemory(decryptedCandidates, resolvedSorts)
|
|
1259
1116
|
const pageIds = orderedCandidates
|
|
1260
1117
|
.slice((page - 1) * pageSize, page * pageSize)
|
|
1261
1118
|
.map((row) => row.id)
|
|
1262
1119
|
|
|
1263
|
-
if (
|
|
1120
|
+
if (cap !== null && total > cap) {
|
|
1264
1121
|
encryptedSortRowCapWarning = {
|
|
1265
1122
|
entity,
|
|
1266
1123
|
sortFields: resolvedSorts.map((s) => String(s.field)),
|
|
@@ -1316,11 +1173,10 @@ export class HybridQueryEngine implements QueryEngine {
|
|
|
1316
1173
|
|
|
1317
1174
|
const typedItems = items as unknown as T[]
|
|
1318
1175
|
let result: QueryResult<T> = { items: typedItems, page, pageSize, total }
|
|
1319
|
-
if (partialIndexWarning || encryptedSortRowCapWarning
|
|
1176
|
+
if (partialIndexWarning || encryptedSortRowCapWarning) {
|
|
1320
1177
|
const meta: QueryResultMeta = {}
|
|
1321
1178
|
if (partialIndexWarning) meta.partialIndexWarning = partialIndexWarning
|
|
1322
1179
|
if (encryptedSortRowCapWarning) meta.encryptedSortRowCapWarning = encryptedSortRowCapWarning
|
|
1323
|
-
if (listCountCapWarning) meta.listCountCapWarning = listCountCapWarning
|
|
1324
1180
|
result.meta = meta
|
|
1325
1181
|
}
|
|
1326
1182
|
|
|
@@ -1887,13 +1743,11 @@ export class HybridQueryEngine implements QueryEngine {
|
|
|
1887
1743
|
return this.buildIndexDocFilterExpression(eb, 'ei', entity, fieldName, filter.op, filter.value, 'b.id', searchRuntime)
|
|
1888
1744
|
}
|
|
1889
1745
|
// For like/ilike with active search-tokens, route through hashed-token EXISTS subquery
|
|
1890
|
-
// so encrypted-at-rest columns can still be searched.
|
|
1891
|
-
// SQL ILIKE -- see SearchRuntime.encryptedFields.
|
|
1746
|
+
// so encrypted-at-rest columns can still be searched.
|
|
1892
1747
|
if (
|
|
1893
1748
|
(filter.op === 'like' || filter.op === 'ilike') &&
|
|
1894
1749
|
searchRuntime?.enabled &&
|
|
1895
|
-
typeof filter.value === 'string'
|
|
1896
|
-
(searchRuntime.encryptedFields == null || isEncryptedLikeField(searchRuntime.encryptedFields, fieldName))
|
|
1750
|
+
typeof filter.value === 'string'
|
|
1897
1751
|
) {
|
|
1898
1752
|
const tokens = tokenizeText(String(filter.value), searchRuntime.config)
|
|
1899
1753
|
if (tokens.hashes.length) {
|
|
@@ -1917,14 +1771,10 @@ export class HybridQueryEngine implements QueryEngine {
|
|
|
1917
1771
|
)
|
|
1918
1772
|
}
|
|
1919
1773
|
}
|
|
1920
|
-
// Tokenizer produced no hashes (e.g. value too short)
|
|
1921
|
-
//
|
|
1922
|
-
//
|
|
1923
|
-
|
|
1924
|
-
// keeps the legacy predicate-skipping `true`.
|
|
1925
|
-
return searchRuntime?.encryptedFields != null && isEncryptedLikeField(searchRuntime.encryptedFields, fieldName)
|
|
1926
|
-
? sql<boolean>`false`
|
|
1927
|
-
: sql<boolean>`true`
|
|
1774
|
+
// Tokenizer produced no hashes (e.g. value too short). Match the regular-base-filter
|
|
1775
|
+
// path's behavior of skipping the predicate (no filter), which is preferable to
|
|
1776
|
+
// silently turning into a plain `ilike` against an encrypted column.
|
|
1777
|
+
return sql<boolean>`true`
|
|
1928
1778
|
}
|
|
1929
1779
|
return this.buildColumnFilterExpression(eb, qualify(baseField), filter.op, filter.value)
|
|
1930
1780
|
}
|
|
@@ -2003,9 +1853,6 @@ export class HybridQueryEngine implements QueryEngine {
|
|
|
2003
1853
|
const hasSearchTokens = searchEnabled && hasSearchFilter(normalizedFilters)
|
|
2004
1854
|
? await this.searchAvailability().hasTokens(entity, opts.tenantId ?? null, orgScope)
|
|
2005
1855
|
: false
|
|
2006
|
-
// `encryptedFields` is deliberately NOT resolved here: custom-entity rows live in the
|
|
2007
|
-
// `entity_indexes` doc store, whose fields the base-column encryption map does not describe,
|
|
2008
|
-
// so the ILIKE gate stays inert on this path and like/ilike keeps its previous semantics.
|
|
2009
1856
|
const searchRuntime: SearchRuntime = {
|
|
2010
1857
|
enabled: searchEnabled && hasSearchTokens,
|
|
2011
1858
|
config: searchConfig,
|
|
@@ -2121,35 +1968,17 @@ export class HybridQueryEngine implements QueryEngine {
|
|
|
2121
1968
|
const page = opts.page?.page ?? 1
|
|
2122
1969
|
const pageSize = opts.page?.pageSize ?? 20
|
|
2123
1970
|
|
|
2124
|
-
// Single-table count: `applyScope` adds only WHERE predicates (cf filters
|
|
2125
|
-
// included — no join), and doc storage holds one row per record within a
|
|
2126
|
-
// scope, so `count(*)` needs no DISTINCT and — when the cap is active — a
|
|
2127
|
-
// LIMIT on the row-producing inner query bounds the scan (#4552 Phase 2).
|
|
2128
|
-
const countCap = resolveListCountCap()
|
|
2129
1971
|
const root = db.selectFrom(`custom_entities_storage as ${alias}`)
|
|
2130
|
-
const
|
|
2131
|
-
const countQuery = countCap !== null
|
|
2132
|
-
? db
|
|
2133
|
-
.selectFrom(countShape.select(sql<number>`1`.as('one')).limit(countCap + 1).as('om_count_probe') as any)
|
|
2134
|
-
.select(sql<string>`count(*)`.as('count'))
|
|
2135
|
-
: countShape.select(sql<string>`count(*)`.as('count'))
|
|
1972
|
+
const countQuery = applyScope(root).select(sql<string>`count(distinct ${sql.ref(`${alias}.entity_id`)})`.as('count'))
|
|
2136
1973
|
const countRow = await countQuery.executeTakeFirst()
|
|
2137
|
-
const
|
|
2138
|
-
let total = probed
|
|
2139
|
-
let listCountCapWarning: ListCountCapWarning | undefined
|
|
2140
|
-
if (countCap !== null && probed > countCap) {
|
|
2141
|
-
total = countCap
|
|
2142
|
-
listCountCapWarning = { entity: entity as EntityId, cap: countCap }
|
|
2143
|
-
}
|
|
1974
|
+
const total = this.parseCount(countRow)
|
|
2144
1975
|
|
|
2145
1976
|
let dataQuery = applyScope(db.selectFrom(`custom_entities_storage as ${alias}`))
|
|
2146
1977
|
dataQuery = applySelection(dataQuery)
|
|
2147
1978
|
dataQuery = applySort(dataQuery)
|
|
2148
1979
|
dataQuery = dataQuery.limit(pageSize).offset((page - 1) * pageSize)
|
|
2149
1980
|
const items = await dataQuery.execute()
|
|
2150
|
-
|
|
2151
|
-
if (listCountCapWarning) result.meta = { listCountCapWarning }
|
|
2152
|
-
return result
|
|
1981
|
+
return { items, page, pageSize, total }
|
|
2153
1982
|
}
|
|
2154
1983
|
|
|
2155
1984
|
private async tableExists(table: string): Promise<boolean> {
|
|
@@ -2555,11 +2384,7 @@ export class HybridQueryEngine implements QueryEngine {
|
|
|
2555
2384
|
if (
|
|
2556
2385
|
(filter.op === 'like' || filter.op === 'ilike') &&
|
|
2557
2386
|
search?.enabled &&
|
|
2558
|
-
typeof filter.value === 'string'
|
|
2559
|
-
// Plaintext base columns keep exact SQL ILIKE -- see SearchRuntime.encryptedFields.
|
|
2560
|
-
// Membership runs across name-shape candidates: maps may declare `displayName` while the
|
|
2561
|
-
// filter carries the column name `display_name`.
|
|
2562
|
-
(search.encryptedFields == null || isEncryptedLikeField(search.encryptedFields, search.field))
|
|
2387
|
+
typeof filter.value === 'string'
|
|
2563
2388
|
) {
|
|
2564
2389
|
const tokens = tokenizeText(String(filter.value), search.config)
|
|
2565
2390
|
const hashes = tokens.hashes
|
|
@@ -2588,23 +2413,10 @@ export class HybridQueryEngine implements QueryEngine {
|
|
|
2588
2413
|
})
|
|
2589
2414
|
return q
|
|
2590
2415
|
}
|
|
2591
|
-
// Hashes exist but no usable search source: same reasoning as the no-hash branch below --
|
|
2592
|
-
// a KNOWN-encrypted column must fail closed rather than drop the predicate (which would
|
|
2593
|
-
// return the full list on exactly the columns ILIKE cannot serve).
|
|
2594
|
-
if (search.encryptedFields != null && isEncryptedLikeField(search.encryptedFields, search.field)) {
|
|
2595
|
-
return q.where(sql<boolean>`false`)
|
|
2596
|
-
}
|
|
2597
2416
|
} else {
|
|
2598
2417
|
this.logSearchDebug('search:skip-empty-hashes', {
|
|
2599
2418
|
entity: search.entity, field: search.field, value: filter.value,
|
|
2600
2419
|
})
|
|
2601
|
-
// A column KNOWN to be encrypted has no way to match the term except the token index:
|
|
2602
|
-
// dropping the predicate would return every row for a term merely too short to tokenize.
|
|
2603
|
-
// Every other case (gate off, custom-entity runtime, resolution failure) keeps the
|
|
2604
|
-
// legacy behavior of skipping the predicate.
|
|
2605
|
-
if (search.encryptedFields != null && isEncryptedLikeField(search.encryptedFields, search.field)) {
|
|
2606
|
-
return q.where(sql<boolean>`false`)
|
|
2607
|
-
}
|
|
2608
2420
|
}
|
|
2609
2421
|
return q
|
|
2610
2422
|
}
|