@open-mercato/core 0.6.8-develop.7100.1.fbf66fca35 → 0.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.turbo/turbo-build.log +1 -1
- package/dist/helpers/integration/api.js +1 -13
- package/dist/helpers/integration/api.js.map +2 -2
- package/dist/helpers/integration/communicationChannelsFixtures.js +0 -19
- package/dist/helpers/integration/communicationChannelsFixtures.js.map +2 -2
- package/dist/modules/api_keys/api/keys/route.js +1 -1
- package/dist/modules/api_keys/api/keys/route.js.map +2 -2
- package/dist/modules/api_keys/backend/api-keys/page.js +1 -3
- package/dist/modules/api_keys/backend/api-keys/page.js.map +2 -2
- package/dist/modules/attachments/api/route.js +2 -2
- package/dist/modules/attachments/api/route.js.map +2 -2
- package/dist/modules/attachments/components/AttachmentLibrary.js +0 -2
- package/dist/modules/attachments/components/AttachmentLibrary.js.map +2 -2
- package/dist/modules/attachments/di.js +1 -11
- package/dist/modules/attachments/di.js.map +2 -2
- package/dist/modules/attachments/index.js.map +1 -1
- package/dist/modules/attachments/lib/scoped-upload-service.js +2 -15
- package/dist/modules/attachments/lib/scoped-upload-service.js.map +2 -2
- package/dist/modules/attachments/lib/upload-limits.js +2 -6
- package/dist/modules/attachments/lib/upload-limits.js.map +2 -2
- package/dist/modules/audit_logs/backend/audit-logs/page.js +0 -6
- package/dist/modules/audit_logs/backend/audit-logs/page.js.map +2 -2
- package/dist/modules/audit_logs/lib/display-helpers.js +11 -19
- package/dist/modules/audit_logs/lib/display-helpers.js.map +2 -2
- package/dist/modules/audit_logs/services/actionLogService.js +12 -57
- package/dist/modules/audit_logs/services/actionLogService.js.map +3 -3
- package/dist/modules/auth/acl.js +5 -30
- package/dist/modules/auth/acl.js.map +2 -2
- package/dist/modules/auth/api/feature-check.js +2 -8
- package/dist/modules/auth/api/feature-check.js.map +2 -2
- package/dist/modules/auth/api/login.js +20 -4
- package/dist/modules/auth/api/login.js.map +2 -2
- package/dist/modules/auth/api/roles/acl/route.js +33 -28
- package/dist/modules/auth/api/roles/acl/route.js.map +2 -2
- package/dist/modules/auth/api/routeError.js +11 -0
- package/dist/modules/auth/api/routeError.js.map +7 -0
- package/dist/modules/auth/api/session/refresh.js +1 -25
- package/dist/modules/auth/api/session/refresh.js.map +2 -2
- package/dist/modules/auth/api/users/acl/route.js +73 -102
- package/dist/modules/auth/api/users/acl/route.js.map +2 -2
- package/dist/modules/auth/api/users/route.js +5 -13
- package/dist/modules/auth/api/users/route.js.map +2 -2
- package/dist/modules/auth/backend/roles/[id]/edit/page.meta.js +1 -5
- package/dist/modules/auth/backend/roles/[id]/edit/page.meta.js.map +2 -2
- package/dist/modules/auth/backend/roles/page.js +1 -3
- package/dist/modules/auth/backend/roles/page.js.map +2 -2
- package/dist/modules/auth/backend/users/[id]/edit/page.meta.js +1 -5
- package/dist/modules/auth/backend/users/[id]/edit/page.meta.js.map +2 -2
- package/dist/modules/auth/backend/users/page.js +1 -2
- package/dist/modules/auth/backend/users/page.js.map +2 -2
- package/dist/modules/auth/components/AclEditor.js +30 -39
- package/dist/modules/auth/components/AclEditor.js.map +2 -2
- package/dist/modules/auth/data/entities.js.map +2 -2
- package/dist/modules/auth/data/validators.js +1 -5
- package/dist/modules/auth/data/validators.js.map +2 -2
- package/dist/modules/auth/di.js +9 -35
- package/dist/modules/auth/di.js.map +2 -2
- package/dist/modules/auth/frontend/reset/[token]/page.js +0 -46
- package/dist/modules/auth/frontend/reset/[token]/page.js.map +2 -2
- package/dist/modules/auth/lib/grantChecks.js.map +2 -2
- package/dist/modules/auth/services/authService.js +2 -16
- package/dist/modules/auth/services/authService.js.map +2 -2
- package/dist/modules/auth/services/rbacService.js +24 -67
- package/dist/modules/auth/services/rbacService.js.map +3 -3
- package/dist/modules/business_rules/backend/logs/page.js +1 -3
- package/dist/modules/business_rules/backend/logs/page.js.map +2 -2
- package/dist/modules/business_rules/backend/rules/[id]/page.meta.js +6 -1
- package/dist/modules/business_rules/backend/rules/[id]/page.meta.js.map +2 -2
- package/dist/modules/business_rules/backend/rules/create/page.meta.js +5 -1
- package/dist/modules/business_rules/backend/rules/create/page.meta.js.map +2 -2
- package/dist/modules/business_rules/backend/rules/page.js +1 -3
- package/dist/modules/business_rules/backend/rules/page.js.map +2 -2
- package/dist/modules/business_rules/backend/sets/[id]/page.meta.js +6 -1
- package/dist/modules/business_rules/backend/sets/[id]/page.meta.js.map +2 -2
- package/dist/modules/business_rules/backend/sets/create/page.meta.js +5 -1
- package/dist/modules/business_rules/backend/sets/create/page.meta.js.map +2 -2
- package/dist/modules/business_rules/backend/sets/page.js +1 -3
- package/dist/modules/business_rules/backend/sets/page.js.map +2 -2
- package/dist/modules/business_rules/lib/expression-evaluator.js +9 -9
- package/dist/modules/business_rules/lib/expression-evaluator.js.map +2 -2
- package/dist/modules/business_rules/lib/rule-evaluator.js +9 -10
- package/dist/modules/business_rules/lib/rule-evaluator.js.map +2 -2
- package/dist/modules/catalog/ai-agents.js +1 -1
- package/dist/modules/catalog/ai-agents.js.map +1 -1
- package/dist/modules/catalog/ai-tools/merchandising-pack.js +2 -2
- package/dist/modules/catalog/ai-tools/merchandising-pack.js.map +2 -2
- package/dist/modules/catalog/backend/catalog/products/MerchandisingAssistantSheet.js +2 -5
- package/dist/modules/catalog/backend/catalog/products/MerchandisingAssistantSheet.js.map +2 -2
- package/dist/modules/catalog/components/categories/CategoriesDataTable.js +0 -2
- package/dist/modules/catalog/components/categories/CategoriesDataTable.js.map +2 -2
- package/dist/modules/catalog/components/products/ProductsDataTable.js +1 -7
- package/dist/modules/catalog/components/products/ProductsDataTable.js.map +2 -2
- package/dist/modules/catalog/widgets/injection/merchandising-assistant-trigger/widget.client.js +0 -2
- package/dist/modules/catalog/widgets/injection/merchandising-assistant-trigger/widget.client.js.map +2 -2
- package/dist/modules/communication_channels/api/post/channels/[id]/test-send/route.js +1 -9
- package/dist/modules/communication_channels/api/post/channels/[id]/test-send/route.js.map +2 -2
- package/dist/modules/communication_channels/api/post/test-seed/route.js +10 -95
- package/dist/modules/communication_channels/api/post/test-seed/route.js.map +2 -2
- package/dist/modules/communication_channels/backend/communication_channels/channels/page.js +0 -3
- package/dist/modules/communication_channels/backend/communication_channels/channels/page.js.map +2 -2
- package/dist/modules/communication_channels/commands/ingest-inbound-message.js +1 -14
- package/dist/modules/communication_channels/commands/ingest-inbound-message.js.map +2 -2
- package/dist/modules/communication_channels/di.js +1 -7
- package/dist/modules/communication_channels/di.js.map +2 -2
- package/dist/modules/communication_channels/lib/email-capabilities.js +1 -4
- package/dist/modules/communication_channels/lib/email-capabilities.js.map +2 -2
- package/dist/modules/communication_channels/lib/test-seed.js +2 -41
- package/dist/modules/communication_channels/lib/test-seed.js.map +2 -2
- package/dist/modules/configs/lib/system-status.js +0 -9
- package/dist/modules/configs/lib/system-status.js.map +2 -2
- package/dist/modules/currencies/backend/currencies/page.js +1 -3
- package/dist/modules/currencies/backend/currencies/page.js.map +2 -2
- package/dist/modules/currencies/backend/exchange-rates/page.js +1 -3
- package/dist/modules/currencies/backend/exchange-rates/page.js.map +2 -2
- package/dist/modules/customer_accounts/api/admin/domain-mappings.js +0 -9
- package/dist/modules/customer_accounts/api/admin/domain-mappings.js.map +2 -2
- package/dist/modules/customer_accounts/backend/customer_accounts/roles/page.js +1 -3
- package/dist/modules/customer_accounts/backend/customer_accounts/roles/page.js.map +2 -2
- package/dist/modules/customer_accounts/backend/customer_accounts/settings/CustomerAccountsSettingsPageClient.js +84 -0
- package/dist/modules/customer_accounts/backend/customer_accounts/settings/CustomerAccountsSettingsPageClient.js.map +7 -0
- package/dist/modules/customer_accounts/backend/customer_accounts/settings/page.js +7 -81
- package/dist/modules/customer_accounts/backend/customer_accounts/settings/page.js.map +2 -2
- package/dist/modules/customer_accounts/backend/customer_accounts/users/PortalUsersPageClient.js +523 -0
- package/dist/modules/customer_accounts/backend/customer_accounts/users/PortalUsersPageClient.js.map +7 -0
- package/dist/modules/customer_accounts/backend/customer_accounts/users/[id]/PortalUserDetailPageClient.js +731 -0
- package/dist/modules/customer_accounts/backend/customer_accounts/users/[id]/PortalUserDetailPageClient.js.map +7 -0
- package/dist/modules/customer_accounts/backend/customer_accounts/users/[id]/page.js +7 -727
- package/dist/modules/customer_accounts/backend/customer_accounts/users/[id]/page.js.map +2 -2
- package/dist/modules/customer_accounts/backend/customer_accounts/users/page.js +7 -521
- package/dist/modules/customer_accounts/backend/customer_accounts/users/page.js.map +2 -2
- package/dist/modules/customer_accounts/extension-points.js +1 -1
- package/dist/modules/customer_accounts/extension-points.js.map +2 -2
- package/dist/modules/customer_accounts/lib/portalUrl.js +69 -0
- package/dist/modules/customer_accounts/lib/portalUrl.js.map +7 -0
- package/dist/modules/customer_accounts/services/domainMappingService.js +0 -10
- package/dist/modules/customer_accounts/services/domainMappingService.js.map +2 -2
- package/dist/modules/customers/ai-tools/companies-pack.js +1 -4
- package/dist/modules/customers/ai-tools/companies-pack.js.map +2 -2
- package/dist/modules/customers/ai-tools/deal-analyzer-pack.js +2 -13
- package/dist/modules/customers/ai-tools/deal-analyzer-pack.js.map +2 -2
- package/dist/modules/customers/ai-tools/deals-pack.js +6 -52
- package/dist/modules/customers/ai-tools/deals-pack.js.map +2 -2
- package/dist/modules/customers/ai-tools/people-pack.js +1 -4
- package/dist/modules/customers/ai-tools/people-pack.js.map +2 -2
- package/dist/modules/customers/api/activities/route.js +6 -48
- package/dist/modules/customers/api/activities/route.js.map +2 -2
- package/dist/modules/customers/api/companies/[id]/people/route.js +64 -20
- package/dist/modules/customers/api/companies/[id]/people/route.js.map +2 -2
- package/dist/modules/customers/api/companies/[id]/route.js +94 -17
- package/dist/modules/customers/api/companies/[id]/route.js.map +2 -2
- package/dist/modules/customers/api/dashboard/widgets/customer-todos/route.js +5 -8
- package/dist/modules/customers/api/dashboard/widgets/customer-todos/route.js.map +2 -2
- package/dist/modules/customers/api/deals/[id]/companies/route.js +1 -1
- package/dist/modules/customers/api/deals/[id]/companies/route.js.map +2 -2
- package/dist/modules/customers/api/deals/[id]/people/route.js +1 -1
- package/dist/modules/customers/api/deals/[id]/people/route.js.map +2 -2
- package/dist/modules/customers/api/deals/[id]/route.js +25 -8
- package/dist/modules/customers/api/deals/[id]/route.js.map +2 -2
- package/dist/modules/customers/api/deals/[id]/stats/route.js +22 -3
- package/dist/modules/customers/api/deals/[id]/stats/route.js.map +2 -2
- package/dist/modules/customers/api/deals/aggregate/route.js +4 -11
- package/dist/modules/customers/api/deals/aggregate/route.js.map +2 -2
- package/dist/modules/customers/api/deals/map/route.js +1 -2
- package/dist/modules/customers/api/deals/map/route.js.map +2 -2
- package/dist/modules/customers/api/deals/route.js +1 -38
- package/dist/modules/customers/api/deals/route.js.map +2 -2
- package/dist/modules/customers/api/entity-roles-factory.js +4 -4
- package/dist/modules/customers/api/entity-roles-factory.js.map +2 -2
- package/dist/modules/customers/api/interactions/route.js +1 -3
- package/dist/modules/customers/api/interactions/route.js.map +2 -2
- package/dist/modules/customers/api/interactions/tasks/route.js +4 -27
- package/dist/modules/customers/api/interactions/tasks/route.js.map +2 -2
- package/dist/modules/customers/api/people/[id]/companies/[linkId]/route.js +3 -4
- package/dist/modules/customers/api/people/[id]/companies/[linkId]/route.js.map +2 -2
- package/dist/modules/customers/api/people/[id]/companies/context.js +1 -1
- package/dist/modules/customers/api/people/[id]/companies/context.js.map +2 -2
- package/dist/modules/customers/api/people/[id]/companies/enriched/route.js +1 -1
- package/dist/modules/customers/api/people/[id]/companies/enriched/route.js.map +2 -2
- package/dist/modules/customers/api/people/[id]/route.js +10 -11
- package/dist/modules/customers/api/people/[id]/route.js.map +2 -2
- package/dist/modules/customers/api/people/check-phone/route.js +9 -51
- package/dist/modules/customers/api/people/check-phone/route.js.map +2 -2
- package/dist/modules/customers/api/todos/route.js +5 -30
- package/dist/modules/customers/api/todos/route.js.map +2 -2
- package/dist/modules/customers/backend/customers/companies/page.js +4 -6
- package/dist/modules/customers/backend/customers/companies/page.js.map +2 -2
- package/dist/modules/customers/backend/customers/deals/[id]/page.js +1 -6
- package/dist/modules/customers/backend/customers/deals/[id]/page.js.map +2 -2
- package/dist/modules/customers/backend/customers/deals/page.js +4 -7
- package/dist/modules/customers/backend/customers/deals/page.js.map +2 -2
- package/dist/modules/customers/backend/customers/deals/pipeline/components/Lane.js +13 -4
- package/dist/modules/customers/backend/customers/deals/pipeline/components/Lane.js.map +2 -2
- package/dist/modules/customers/backend/customers/deals/pipeline/components/StatusFilterPopover.js +14 -85
- package/dist/modules/customers/backend/customers/deals/pipeline/components/StatusFilterPopover.js.map +2 -2
- package/dist/modules/customers/backend/customers/people/page.js +4 -6
- package/dist/modules/customers/backend/customers/people/page.js.map +2 -2
- package/dist/modules/customers/backend/hooks/useEmailDuplicateCheck.js +3 -9
- package/dist/modules/customers/backend/hooks/useEmailDuplicateCheck.js.map +2 -2
- package/dist/modules/customers/commands/deals.js +34 -21
- package/dist/modules/customers/commands/deals.js.map +2 -2
- package/dist/modules/customers/commands/interactions.js.map +1 -1
- package/dist/modules/customers/commands/personCompanyLinks.js +2 -131
- package/dist/modules/customers/commands/personCompanyLinks.js.map +2 -2
- package/dist/modules/customers/components/CustomerTodosTable.js +0 -1
- package/dist/modules/customers/components/CustomerTodosTable.js.map +2 -2
- package/dist/modules/customers/components/DealsKpiStrip.js +6 -7
- package/dist/modules/customers/components/DealsKpiStrip.js.map +2 -2
- package/dist/modules/customers/components/calendar/AgendaList.js +2 -2
- package/dist/modules/customers/components/calendar/AgendaList.js.map +2 -2
- package/dist/modules/customers/components/calendar/CalendarEventEditor.js +1 -1
- package/dist/modules/customers/components/calendar/CalendarEventEditor.js.map +2 -2
- package/dist/modules/customers/components/calendar/CalendarScreen.js +1 -1
- package/dist/modules/customers/components/calendar/CalendarScreen.js.map +2 -2
- package/dist/modules/customers/components/calendar/CalendarSettingsModal.js +1 -1
- package/dist/modules/customers/components/calendar/CalendarSettingsModal.js.map +2 -2
- package/dist/modules/customers/components/calendar/EventBlock.js +1 -1
- package/dist/modules/customers/components/calendar/EventBlock.js.map +2 -2
- package/dist/modules/customers/components/calendar/EventPeekPopover.js +2 -3
- package/dist/modules/customers/components/calendar/EventPeekPopover.js.map +2 -2
- package/dist/modules/customers/components/calendar/editor/PeopleField.js +5 -40
- package/dist/modules/customers/components/calendar/editor/PeopleField.js.map +2 -2
- package/dist/modules/customers/components/calendar/editor/hooks.js +1 -2
- package/dist/modules/customers/components/calendar/editor/hooks.js.map +2 -2
- package/dist/modules/customers/components/calendar/types.js +1 -1
- package/dist/modules/customers/components/calendar/types.js.map +2 -2
- package/dist/modules/customers/components/detail/AssignRoleDialog.js +33 -28
- package/dist/modules/customers/components/detail/AssignRoleDialog.js.map +2 -2
- package/dist/modules/customers/components/detail/CompanyKpiBar.js +4 -5
- package/dist/modules/customers/components/detail/CompanyKpiBar.js.map +2 -2
- package/dist/modules/customers/components/detail/CompanyPeopleSection.js +1 -3
- package/dist/modules/customers/components/detail/CompanyPeopleSection.js.map +2 -2
- package/dist/modules/customers/components/detail/DealForm.js +7 -19
- package/dist/modules/customers/components/detail/DealForm.js.map +2 -2
- package/dist/modules/customers/components/detail/DealsSection.js +5 -6
- package/dist/modules/customers/components/detail/DealsSection.js.map +2 -2
- package/dist/modules/customers/components/detail/EntityTagsDialog.js +11 -35
- package/dist/modules/customers/components/detail/EntityTagsDialog.js.map +2 -2
- package/dist/modules/customers/components/detail/PersonCompaniesSection.js +1 -3
- package/dist/modules/customers/components/detail/PersonCompaniesSection.js.map +2 -2
- package/dist/modules/customers/components/detail/hooks/usePersonTasks.js +13 -19
- package/dist/modules/customers/components/detail/hooks/usePersonTasks.js.map +2 -2
- package/dist/modules/customers/components/detail/schedule/ParticipantsField.js +4 -4
- package/dist/modules/customers/components/detail/schedule/ParticipantsField.js.map +2 -2
- package/dist/modules/customers/components/detail/schedule/useScheduleFormState.js +3 -3
- package/dist/modules/customers/components/detail/schedule/useScheduleFormState.js.map +2 -2
- package/dist/modules/customers/components/detail/utils.js +5 -5
- package/dist/modules/customers/components/detail/utils.js.map +2 -2
- package/dist/modules/customers/data/entities.js.map +1 -1
- package/dist/modules/customers/data/validators.js +3 -32
- package/dist/modules/customers/data/validators.js.map +2 -2
- package/dist/modules/customers/events.js +0 -5
- package/dist/modules/customers/events.js.map +2 -2
- package/dist/modules/customers/lib/calendar/conflicts.js +2 -8
- package/dist/modules/customers/lib/calendar/conflicts.js.map +2 -2
- package/dist/modules/customers/lib/calendar/editorPayload.js +2 -3
- package/dist/modules/customers/lib/calendar/editorPayload.js.map +2 -2
- package/dist/modules/customers/lib/calendar/mapItem.js +3 -8
- package/dist/modules/customers/lib/calendar/mapItem.js.map +2 -2
- package/dist/modules/customers/lib/dealStatus.js +0 -30
- package/dist/modules/customers/lib/dealStatus.js.map +2 -2
- package/dist/modules/customers/lib/findPeopleByAddresses.js +0 -1
- package/dist/modules/customers/lib/findPeopleByAddresses.js.map +2 -2
- package/dist/modules/customers/lib/personCompanies.js +2 -100
- package/dist/modules/customers/lib/personCompanies.js.map +2 -2
- package/dist/modules/customers/lib/todoCompatibility.js +0 -12
- package/dist/modules/customers/lib/todoCompatibility.js.map +2 -2
- package/dist/modules/dashboards/lib/widgetScope.js +1 -6
- package/dist/modules/dashboards/lib/widgetScope.js.map +2 -2
- package/dist/modules/data_sync/backend/data-sync/page.js +1 -3
- package/dist/modules/data_sync/backend/data-sync/page.js.map +2 -2
- package/dist/modules/data_sync/lib/sync-engine.js +6 -72
- package/dist/modules/data_sync/lib/sync-engine.js.map +2 -2
- package/dist/modules/data_sync/workers/sync-export.js +1 -5
- package/dist/modules/data_sync/workers/sync-export.js.map +2 -2
- package/dist/modules/data_sync/workers/sync-import.js +1 -5
- package/dist/modules/data_sync/workers/sync-import.js.map +2 -2
- package/dist/modules/devices/acl.js +1 -9
- package/dist/modules/devices/acl.js.map +2 -2
- package/dist/modules/devices/api/admin/devices/[id]/route.js +32 -5
- package/dist/modules/devices/api/admin/devices/[id]/route.js.map +2 -2
- package/dist/modules/devices/api/admin/devices/route.js +1 -14
- package/dist/modules/devices/api/admin/devices/route.js.map +2 -2
- package/dist/modules/devices/api/deviceList.js +12 -99
- package/dist/modules/devices/api/deviceList.js.map +2 -2
- package/dist/modules/devices/api/openapi.js +1 -3
- package/dist/modules/devices/api/openapi.js.map +2 -2
- package/dist/modules/devices/api/route.js +1 -9
- package/dist/modules/devices/api/route.js.map +2 -2
- package/dist/modules/devices/backend/devices/[id]/page.js +26 -10
- package/dist/modules/devices/backend/devices/[id]/page.js.map +2 -2
- package/dist/modules/devices/backend/devices/create/page.js +1 -17
- package/dist/modules/devices/backend/devices/create/page.js.map +2 -2
- package/dist/modules/devices/backend/devices/page.js +34 -28
- package/dist/modules/devices/backend/devices/page.js.map +2 -2
- package/dist/modules/devices/setup.js +2 -6
- package/dist/modules/devices/setup.js.map +2 -2
- package/dist/modules/directory/backend/directory/organizations/page.js +1 -2
- package/dist/modules/directory/backend/directory/organizations/page.js.map +2 -2
- package/dist/modules/directory/backend/directory/tenants/page.js +1 -2
- package/dist/modules/directory/backend/directory/tenants/page.js.map +2 -2
- package/dist/modules/directory/di.js +0 -9
- package/dist/modules/directory/di.js.map +2 -2
- package/dist/modules/directory/utils/organizationScope.js.map +2 -2
- package/dist/modules/entities/api/records.js +2 -4
- package/dist/modules/entities/api/records.js.map +2 -2
- package/dist/modules/entities/backend/entities/user/[entityId]/records/page.js +1 -3
- package/dist/modules/entities/backend/entities/user/[entityId]/records/page.js.map +2 -2
- package/dist/modules/eudr/api/plots/route.js +1 -5
- package/dist/modules/eudr/api/plots/route.js.map +2 -2
- package/dist/modules/eudr/backend/eudr/evidence-submissions/[id]/page.meta.js +3 -1
- package/dist/modules/eudr/backend/eudr/evidence-submissions/[id]/page.meta.js.map +2 -2
- package/dist/modules/eudr/backend/eudr/evidence-submissions/create/page.meta.js +1 -0
- package/dist/modules/eudr/backend/eudr/evidence-submissions/create/page.meta.js.map +2 -2
- package/dist/modules/eudr/backend/eudr/evidence-submissions/page.js +0 -3
- package/dist/modules/eudr/backend/eudr/evidence-submissions/page.js.map +2 -2
- package/dist/modules/eudr/backend/eudr/evidence-submissions/page.meta.js +4 -1
- package/dist/modules/eudr/backend/eudr/evidence-submissions/page.meta.js.map +2 -2
- package/dist/modules/eudr/backend/eudr/page.meta.js +2 -2
- package/dist/modules/eudr/backend/eudr/page.meta.js.map +2 -2
- package/dist/modules/eudr/backend/eudr/plots/[id]/page.js +8 -2
- package/dist/modules/eudr/backend/eudr/plots/[id]/page.js.map +2 -2
- package/dist/modules/eudr/backend/eudr/plots/[id]/page.meta.js +3 -1
- package/dist/modules/eudr/backend/eudr/plots/[id]/page.meta.js.map +2 -2
- package/dist/modules/eudr/backend/eudr/plots/create/page.js +8 -2
- package/dist/modules/eudr/backend/eudr/plots/create/page.js.map +2 -2
- package/dist/modules/eudr/backend/eudr/plots/create/page.meta.js +1 -0
- package/dist/modules/eudr/backend/eudr/plots/create/page.meta.js.map +2 -2
- package/dist/modules/eudr/backend/eudr/plots/page.js +0 -3
- package/dist/modules/eudr/backend/eudr/plots/page.js.map +2 -2
- package/dist/modules/eudr/backend/eudr/plots/page.meta.js +4 -1
- package/dist/modules/eudr/backend/eudr/plots/page.meta.js.map +2 -2
- package/dist/modules/eudr/backend/eudr/product-mappings/[id]/page.meta.js +3 -1
- package/dist/modules/eudr/backend/eudr/product-mappings/[id]/page.meta.js.map +2 -2
- package/dist/modules/eudr/backend/eudr/product-mappings/create/page.meta.js +1 -0
- package/dist/modules/eudr/backend/eudr/product-mappings/create/page.meta.js.map +2 -2
- package/dist/modules/eudr/backend/eudr/product-mappings/page.js +0 -3
- package/dist/modules/eudr/backend/eudr/product-mappings/page.js.map +2 -2
- package/dist/modules/eudr/backend/eudr/product-mappings/page.meta.js +4 -1
- package/dist/modules/eudr/backend/eudr/product-mappings/page.meta.js.map +2 -2
- package/dist/modules/eudr/backend/eudr/risk-assessments/[id]/page.meta.js +3 -1
- package/dist/modules/eudr/backend/eudr/risk-assessments/[id]/page.meta.js.map +2 -2
- package/dist/modules/eudr/backend/eudr/risk-assessments/create/page.meta.js +1 -0
- package/dist/modules/eudr/backend/eudr/risk-assessments/create/page.meta.js.map +2 -2
- package/dist/modules/eudr/backend/eudr/risk-assessments/page.js +0 -3
- package/dist/modules/eudr/backend/eudr/risk-assessments/page.js.map +2 -2
- package/dist/modules/eudr/backend/eudr/risk-assessments/page.meta.js +4 -1
- package/dist/modules/eudr/backend/eudr/risk-assessments/page.meta.js.map +2 -2
- package/dist/modules/eudr/backend/eudr/statements/[id]/page.js +2 -0
- package/dist/modules/eudr/backend/eudr/statements/[id]/page.js.map +2 -2
- package/dist/modules/eudr/backend/eudr/statements/[id]/page.meta.js +3 -1
- package/dist/modules/eudr/backend/eudr/statements/[id]/page.meta.js.map +2 -2
- package/dist/modules/eudr/backend/eudr/statements/create/page.meta.js +1 -0
- package/dist/modules/eudr/backend/eudr/statements/create/page.meta.js.map +2 -2
- package/dist/modules/eudr/backend/eudr/statements/page.js +30 -28
- package/dist/modules/eudr/backend/eudr/statements/page.js.map +2 -2
- package/dist/modules/eudr/backend/eudr/statements/page.meta.js +4 -1
- package/dist/modules/eudr/backend/eudr/statements/page.meta.js.map +2 -2
- package/dist/modules/eudr/commands/statements.js +8 -3
- package/dist/modules/eudr/commands/statements.js.map +2 -2
- package/dist/modules/eudr/components/crudErrorI18n.js +21 -1
- package/dist/modules/eudr/components/crudErrorI18n.js.map +2 -2
- package/dist/modules/eudr/components/formConfig.js +6 -2
- package/dist/modules/eudr/components/formConfig.js.map +2 -2
- package/dist/modules/eudr/data/validators.js +1 -4
- package/dist/modules/eudr/data/validators.js.map +2 -2
- package/dist/modules/eudr/lib/statement-lifecycle.js +9 -1
- package/dist/modules/eudr/lib/statement-lifecycle.js.map +2 -2
- package/dist/modules/feature_toggles/components/FeatureTogglesTable.js +0 -1
- package/dist/modules/feature_toggles/components/FeatureTogglesTable.js.map +2 -2
- package/dist/modules/feature_toggles/components/OverridesTable.js +0 -1
- package/dist/modules/feature_toggles/components/OverridesTable.js.map +2 -2
- package/dist/modules/feature_toggles/defaults.json +8 -0
- package/dist/modules/inbox_ops/backend/inbox-ops/log/page.js +0 -3
- package/dist/modules/inbox_ops/backend/inbox-ops/log/page.js.map +2 -2
- package/dist/modules/inbox_ops/backend/inbox-ops/page.js +0 -3
- package/dist/modules/inbox_ops/backend/inbox-ops/page.js.map +2 -2
- package/dist/modules/inbox_ops/lib/htmlToPlainText.js +12 -1
- package/dist/modules/inbox_ops/lib/htmlToPlainText.js.map +2 -2
- package/dist/modules/integrations/api/[id]/credentials/route.js +1 -6
- package/dist/modules/integrations/api/[id]/credentials/route.js.map +2 -2
- package/dist/modules/integrations/backend/integrations/[id]/page.js +29 -38
- package/dist/modules/integrations/backend/integrations/[id]/page.js.map +2 -2
- package/dist/modules/integrations/backend/integrations/bundle/[id]/page.js +9 -36
- package/dist/modules/integrations/backend/integrations/bundle/[id]/page.js.map +2 -2
- package/dist/modules/integrations/data/validators.js +3 -11
- package/dist/modules/integrations/data/validators.js.map +2 -2
- package/dist/modules/integrations/lib/credentials-masking.js +2 -6
- package/dist/modules/integrations/lib/credentials-masking.js.map +2 -2
- package/dist/modules/messages/api/[id]/route.js +1 -29
- package/dist/modules/messages/api/[id]/route.js.map +2 -2
- package/dist/modules/messages/api/openapi.js +2 -17
- package/dist/modules/messages/api/openapi.js.map +2 -2
- package/dist/modules/messages/api/route.js +2 -17
- package/dist/modules/messages/api/route.js.map +2 -2
- package/dist/modules/messages/components/MessagesInboxPageClient.js +14 -7
- package/dist/modules/messages/components/MessagesInboxPageClient.js.map +2 -2
- package/dist/modules/messages/components/inboxFilters.js +0 -15
- package/dist/modules/messages/components/inboxFilters.js.map +2 -2
- package/dist/modules/messages/components/message-detail/hooks/useMessageDetailsConversation.js +1 -11
- package/dist/modules/messages/components/message-detail/hooks/useMessageDetailsConversation.js.map +2 -2
- package/dist/modules/messages/components/message-detail/panels/MessageHeader.js +1 -3
- package/dist/modules/messages/components/message-detail/panels/MessageHeader.js.map +2 -2
- package/dist/modules/messages/components/message-detail/panels/thread-panel.js +1 -2
- package/dist/modules/messages/components/message-detail/panels/thread-panel.js.map +2 -2
- package/dist/modules/messages/components/messageListLabels.js +2 -14
- package/dist/modules/messages/components/messageListLabels.js.map +2 -2
- package/dist/modules/messages/data/validators.js +4 -18
- package/dist/modules/messages/data/validators.js.map +2 -2
- package/dist/modules/payment_gateways/api/webhook/[provider]/route.js +6 -4
- package/dist/modules/payment_gateways/api/webhook/[provider]/route.js.map +2 -2
- package/dist/modules/payment_gateways/backend/payment-gateways/page.js +1 -3
- package/dist/modules/payment_gateways/backend/payment-gateways/page.js.map +2 -2
- package/dist/modules/payment_gateways/lib/webhook-processor.js +0 -7
- package/dist/modules/payment_gateways/lib/webhook-processor.js.map +2 -2
- package/dist/modules/planner/backend/planner/availability-rulesets/page.js +0 -3
- package/dist/modules/planner/backend/planner/availability-rulesets/page.js.map +2 -2
- package/dist/modules/push_notifications/backend/push_notifications/page.js +1 -3
- package/dist/modules/push_notifications/backend/push_notifications/page.js.map +2 -2
- package/dist/modules/push_notifications/backend/push_notifications/send/page.js +1 -1
- package/dist/modules/push_notifications/backend/push_notifications/send/page.js.map +2 -2
- package/dist/modules/query_index/lib/engine.js +51 -150
- package/dist/modules/query_index/lib/engine.js.map +2 -2
- package/dist/modules/query_index/lib/search-tokens.js +3 -79
- package/dist/modules/query_index/lib/search-tokens.js.map +2 -2
- package/dist/modules/resources/backend/resources/resource-types/page.js +1 -3
- package/dist/modules/resources/backend/resources/resource-types/page.js.map +2 -2
- package/dist/modules/resources/backend/resources/resources/page.js +1 -3
- package/dist/modules/resources/backend/resources/resources/page.js.map +2 -2
- package/dist/modules/sales/backend/sales/channels/offers/page.js +0 -3
- package/dist/modules/sales/backend/sales/channels/offers/page.js.map +2 -2
- package/dist/modules/sales/backend/sales/channels/page.js +0 -3
- package/dist/modules/sales/backend/sales/channels/page.js.map +2 -2
- package/dist/modules/sales/backend/sales/documents/[id]/page.js +8 -10
- package/dist/modules/sales/backend/sales/documents/[id]/page.js.map +2 -2
- package/dist/modules/sales/commands/documents.js +1 -79
- package/dist/modules/sales/commands/documents.js.map +2 -2
- package/dist/modules/sales/components/PriceWithCurrency.js +5 -7
- package/dist/modules/sales/components/PriceWithCurrency.js.map +2 -2
- package/dist/modules/sales/components/channels/SalesChannelOffersPanel.js +0 -3
- package/dist/modules/sales/components/channels/SalesChannelOffersPanel.js.map +2 -2
- package/dist/modules/sales/components/documents/AdjustmentsSection.js +6 -8
- package/dist/modules/sales/components/documents/AdjustmentsSection.js.map +2 -2
- package/dist/modules/sales/components/documents/ItemsSection.js +22 -51
- package/dist/modules/sales/components/documents/ItemsSection.js.map +2 -2
- package/dist/modules/sales/components/documents/LineItemDialog.js +19 -84
- package/dist/modules/sales/components/documents/LineItemDialog.js.map +2 -2
- package/dist/modules/sales/components/documents/PaymentsSection.js +9 -23
- package/dist/modules/sales/components/documents/PaymentsSection.js.map +2 -2
- package/dist/modules/sales/components/documents/ReturnsSection.js +6 -8
- package/dist/modules/sales/components/documents/ReturnsSection.js.map +2 -2
- package/dist/modules/sales/components/documents/SalesDocumentsTable.js +14 -68
- package/dist/modules/sales/components/documents/SalesDocumentsTable.js.map +2 -2
- package/dist/modules/sales/components/documents/SalesOrderDraftLines.js +5 -6
- package/dist/modules/sales/components/documents/SalesOrderDraftLines.js.map +2 -2
- package/dist/modules/sales/components/documents/ShipmentDialog.js +4 -5
- package/dist/modules/sales/components/documents/ShipmentDialog.js.map +2 -2
- package/dist/modules/sales/components/documents/ShipmentsSection.js +6 -8
- package/dist/modules/sales/components/documents/ShipmentsSection.js.map +2 -2
- package/dist/modules/sales/components/documents/lineItemUtils.js +2 -2
- package/dist/modules/sales/components/documents/lineItemUtils.js.map +2 -2
- package/dist/modules/sales/data/entities.js +2 -8
- package/dist/modules/sales/data/entities.js.map +2 -2
- package/dist/modules/sales/extension-points.js +0 -1
- package/dist/modules/sales/extension-points.js.map +2 -2
- package/dist/modules/sales/setup.js +0 -2
- package/dist/modules/sales/setup.js.map +2 -2
- package/dist/modules/sales/widgets/injection/document-history/widget.client.js +44 -2
- package/dist/modules/sales/widgets/injection/document-history/widget.client.js.map +2 -2
- package/dist/modules/sales/widgets/injection/payment-gateway-status-column/widget.js +2 -10
- package/dist/modules/sales/widgets/injection/payment-gateway-status-column/widget.js.map +2 -2
- package/dist/modules/sales/widgets/injection-table.js +7 -4
- package/dist/modules/sales/widgets/injection-table.js.map +2 -2
- package/dist/modules/staff/backend/staff/leave-requests/page.js +0 -3
- package/dist/modules/staff/backend/staff/leave-requests/page.js.map +2 -2
- package/dist/modules/staff/backend/staff/my-leave-requests/page.js +0 -3
- package/dist/modules/staff/backend/staff/my-leave-requests/page.js.map +2 -2
- package/dist/modules/staff/backend/staff/team-members/page.js +0 -3
- package/dist/modules/staff/backend/staff/team-members/page.js.map +2 -2
- package/dist/modules/staff/backend/staff/team-roles/page.js +0 -3
- package/dist/modules/staff/backend/staff/team-roles/page.js.map +2 -2
- package/dist/modules/staff/backend/staff/teams/[id]/edit/page.js +0 -3
- package/dist/modules/staff/backend/staff/teams/[id]/edit/page.js.map +2 -2
- package/dist/modules/staff/backend/staff/teams/page.js +0 -3
- package/dist/modules/staff/backend/staff/teams/page.js.map +2 -2
- package/dist/modules/staff/backend/staff/timesheets/page.js +18 -29
- package/dist/modules/staff/backend/staff/timesheets/page.js.map +2 -2
- package/dist/modules/staff/backend/staff/timesheets/projects/page.js +0 -3
- package/dist/modules/staff/backend/staff/timesheets/projects/page.js.map +2 -2
- package/dist/modules/sync_excel/lib/adapters/customers.js +0 -1
- package/dist/modules/sync_excel/lib/adapters/customers.js.map +2 -2
- package/dist/modules/warranty_claims/api/assignees/route.js +3 -3
- package/dist/modules/warranty_claims/api/assignees/route.js.map +2 -2
- package/dist/modules/warranty_claims/api/portal/attachments/route.js +2 -2
- package/dist/modules/warranty_claims/api/portal/attachments/route.js.map +2 -2
- package/dist/modules/warranty_claims/api/portal/claims/route.js +9 -12
- package/dist/modules/warranty_claims/api/portal/claims/route.js.map +2 -2
- package/dist/modules/warranty_claims/backend/page.js +0 -3
- package/dist/modules/warranty_claims/backend/page.js.map +2 -2
- package/dist/modules/warranty_claims/backend/warranty_claims/registrations/page.js +0 -3
- package/dist/modules/warranty_claims/backend/warranty_claims/registrations/page.js.map +2 -2
- package/dist/modules/warranty_claims/backend/warranty_claims/troubleshooting-guides/page.js +0 -3
- package/dist/modules/warranty_claims/backend/warranty_claims/troubleshooting-guides/page.js.map +2 -2
- package/dist/modules/warranty_claims/backend/warranty_claims/vendor-policies/page.js +0 -3
- package/dist/modules/warranty_claims/backend/warranty_claims/vendor-policies/page.js.map +2 -2
- package/dist/modules/warranty_claims/frontend/[orgSlug]/portal/claims/page.js +0 -3
- package/dist/modules/warranty_claims/frontend/[orgSlug]/portal/claims/page.js.map +2 -2
- package/dist/modules/wms/api/warehouses/route.js +9 -13
- package/dist/modules/wms/api/warehouses/route.js.map +2 -2
- package/dist/modules/wms/api/zones/route.js +2 -15
- package/dist/modules/wms/api/zones/route.js.map +2 -2
- package/dist/modules/wms/commands/configuration.js +9 -121
- package/dist/modules/wms/commands/configuration.js.map +2 -2
- package/dist/modules/wms/commands/inventory-actions.js +0 -3
- package/dist/modules/wms/commands/inventory-actions.js.map +2 -2
- package/dist/modules/wms/commands/shared.js +1 -9
- package/dist/modules/wms/commands/shared.js.map +2 -2
- package/dist/modules/wms/components/backend/WmsConfigurationPage.js +111 -76
- package/dist/modules/wms/components/backend/WmsConfigurationPage.js.map +3 -3
- package/dist/modules/wms/components/backend/WmsInventoryConsolePage.js +0 -1
- package/dist/modules/wms/components/backend/WmsInventoryConsolePage.js.map +2 -2
- package/dist/modules/wms/components/backend/WmsLocationDetailPage.js +20 -16
- package/dist/modules/wms/components/backend/WmsLocationDetailPage.js.map +2 -2
- package/dist/modules/wms/components/backend/WmsLotDetailPage.js +10 -6
- package/dist/modules/wms/components/backend/WmsLotDetailPage.js.map +2 -2
- package/dist/modules/wms/components/backend/WmsLotsListPage.js +0 -1
- package/dist/modules/wms/components/backend/WmsLotsListPage.js.map +2 -2
- package/dist/modules/wms/components/backend/WmsOperationalDashboardPage.js +11 -7
- package/dist/modules/wms/components/backend/WmsOperationalDashboardPage.js.map +2 -2
- package/dist/modules/wms/components/backend/WmsSkuDetailPage.js +10 -6
- package/dist/modules/wms/components/backend/WmsSkuDetailPage.js.map +2 -2
- package/dist/modules/wms/components/backend/inventoryMutationLoaders.js +20 -27
- package/dist/modules/wms/components/backend/inventoryMutationLoaders.js.map +2 -2
- package/dist/modules/workflows/backend/definitions/page.js +1 -3
- package/dist/modules/workflows/backend/definitions/page.js.map +2 -2
- package/dist/modules/workflows/backend/events/page.js +1 -3
- package/dist/modules/workflows/backend/events/page.js.map +2 -2
- package/dist/modules/workflows/backend/instances/page.js +1 -3
- package/dist/modules/workflows/backend/instances/page.js.map +2 -2
- package/dist/modules/workflows/backend/tasks/page.js +1 -3
- package/dist/modules/workflows/backend/tasks/page.js.map +2 -2
- package/dist/modules/workflows/lib/activity-executor.js +0 -4
- package/dist/modules/workflows/lib/activity-executor.js.map +2 -2
- package/package.json +10 -9
- package/src/helpers/integration/api.ts +1 -33
- package/src/helpers/integration/communicationChannelsFixtures.ts +1 -69
- package/src/modules/api_keys/api/keys/route.ts +1 -3
- package/src/modules/api_keys/backend/api-keys/page.tsx +1 -4
- package/src/modules/attachments/AGENTS.md +0 -15
- package/src/modules/attachments/api/route.ts +2 -2
- package/src/modules/attachments/components/AttachmentLibrary.tsx +0 -3
- package/src/modules/attachments/di.ts +0 -16
- package/src/modules/attachments/i18n/de.json +0 -5
- package/src/modules/attachments/i18n/en.json +0 -5
- package/src/modules/attachments/i18n/es.json +0 -5
- package/src/modules/attachments/i18n/ko.json +0 -5
- package/src/modules/attachments/i18n/pl.json +0 -5
- package/src/modules/attachments/index.ts +0 -10
- package/src/modules/attachments/lib/scoped-upload-service.ts +0 -46
- package/src/modules/attachments/lib/upload-limits.ts +2 -6
- package/src/modules/audit_logs/backend/audit-logs/page.tsx +0 -8
- package/src/modules/audit_logs/lib/display-helpers.tsx +32 -42
- package/src/modules/audit_logs/services/actionLogService.ts +11 -74
- package/src/modules/auth/acl.ts +6 -30
- package/src/modules/auth/api/feature-check.ts +3 -10
- package/src/modules/auth/api/login.ts +24 -9
- package/src/modules/auth/api/roles/acl/route.ts +39 -42
- package/src/modules/auth/api/routeError.ts +30 -0
- package/src/modules/auth/api/session/refresh.ts +1 -32
- package/src/modules/auth/api/users/acl/route.ts +101 -185
- package/src/modules/auth/api/users/route.ts +5 -18
- package/src/modules/auth/backend/roles/[id]/edit/page.meta.ts +2 -5
- package/src/modules/auth/backend/roles/page.tsx +2 -4
- package/src/modules/auth/backend/users/[id]/edit/page.meta.ts +2 -5
- package/src/modules/auth/backend/users/page.tsx +2 -3
- package/src/modules/auth/components/AclEditor.tsx +33 -63
- package/src/modules/auth/data/entities.ts +1 -4
- package/src/modules/auth/data/validators.ts +0 -5
- package/src/modules/auth/di.ts +16 -46
- package/src/modules/auth/frontend/reset/[token]/page.tsx +0 -74
- package/src/modules/auth/i18n/de.json +0 -389
- package/src/modules/auth/i18n/en.json +0 -389
- package/src/modules/auth/i18n/es.json +0 -389
- package/src/modules/auth/i18n/ko.json +0 -389
- package/src/modules/auth/i18n/pl.json +2 -391
- package/src/modules/auth/lib/grantChecks.ts +0 -6
- package/src/modules/auth/services/authService.ts +2 -18
- package/src/modules/auth/services/rbacService.ts +24 -110
- package/src/modules/business_rules/backend/logs/page.tsx +1 -4
- package/src/modules/business_rules/backend/rules/[id]/page.meta.ts +5 -0
- package/src/modules/business_rules/backend/rules/create/page.meta.ts +5 -1
- package/src/modules/business_rules/backend/rules/page.tsx +1 -4
- package/src/modules/business_rules/backend/sets/[id]/page.meta.ts +5 -0
- package/src/modules/business_rules/backend/sets/create/page.meta.ts +5 -1
- package/src/modules/business_rules/backend/sets/page.tsx +1 -4
- package/src/modules/business_rules/lib/expression-evaluator.ts +9 -9
- package/src/modules/business_rules/lib/rule-evaluator.ts +9 -10
- package/src/modules/catalog/ai-agents.ts +1 -1
- package/src/modules/catalog/ai-tools/merchandising-pack.ts +2 -2
- package/src/modules/catalog/backend/catalog/products/MerchandisingAssistantSheet.tsx +5 -12
- package/src/modules/catalog/components/categories/CategoriesDataTable.tsx +0 -3
- package/src/modules/catalog/components/products/ProductsDataTable.tsx +0 -7
- package/src/modules/catalog/i18n/de.json +0 -1
- package/src/modules/catalog/i18n/en.json +0 -1
- package/src/modules/catalog/i18n/es.json +0 -1
- package/src/modules/catalog/i18n/ko.json +0 -1
- package/src/modules/catalog/i18n/pl.json +0 -1
- package/src/modules/catalog/widgets/injection/merchandising-assistant-trigger/widget.client.tsx +0 -4
- package/src/modules/communication_channels/api/post/channels/[id]/test-send/route.ts +1 -17
- package/src/modules/communication_channels/api/post/test-seed/route.ts +16 -155
- package/src/modules/communication_channels/backend/communication_channels/channels/page.tsx +0 -4
- package/src/modules/communication_channels/commands/ingest-inbound-message.ts +1 -38
- package/src/modules/communication_channels/di.ts +0 -7
- package/src/modules/communication_channels/lib/adapter.ts +0 -14
- package/src/modules/communication_channels/lib/email-capabilities.ts +0 -4
- package/src/modules/communication_channels/lib/test-seed.ts +4 -64
- package/src/modules/configs/i18n/de.json +0 -2
- package/src/modules/configs/i18n/en.json +0 -2
- package/src/modules/configs/i18n/es.json +0 -2
- package/src/modules/configs/i18n/ko.json +0 -2
- package/src/modules/configs/i18n/pl.json +0 -2
- package/src/modules/configs/lib/system-status.ts +0 -9
- package/src/modules/currencies/backend/currencies/page.tsx +1 -4
- package/src/modules/currencies/backend/exchange-rates/page.tsx +1 -4
- package/src/modules/customer_accounts/api/admin/domain-mappings.ts +0 -7
- package/src/modules/customer_accounts/backend/customer_accounts/roles/page.tsx +1 -4
- package/src/modules/customer_accounts/backend/customer_accounts/settings/CustomerAccountsSettingsPageClient.tsx +138 -0
- package/src/modules/customer_accounts/backend/customer_accounts/settings/page.tsx +8 -132
- package/src/modules/customer_accounts/backend/customer_accounts/users/PortalUsersPageClient.tsx +598 -0
- package/src/modules/customer_accounts/backend/customer_accounts/users/[id]/PortalUserDetailPageClient.tsx +838 -0
- package/src/modules/customer_accounts/backend/customer_accounts/users/[id]/page.tsx +6 -838
- package/src/modules/customer_accounts/backend/customer_accounts/users/page.tsx +6 -590
- package/src/modules/customer_accounts/extension-points.ts +1 -1
- package/src/modules/customer_accounts/lib/portalUrl.ts +112 -0
- package/src/modules/customer_accounts/services/domainMappingService.ts +0 -10
- package/src/modules/customers/ai-tools/companies-pack.ts +1 -4
- package/src/modules/customers/ai-tools/deal-analyzer-pack.ts +2 -17
- package/src/modules/customers/ai-tools/deals-pack.ts +1 -66
- package/src/modules/customers/ai-tools/people-pack.ts +1 -4
- package/src/modules/customers/api/activities/route.ts +0 -45
- package/src/modules/customers/api/companies/[id]/people/route.ts +73 -24
- package/src/modules/customers/api/companies/[id]/route.ts +107 -24
- package/src/modules/customers/api/dashboard/widgets/customer-todos/route.ts +8 -16
- package/src/modules/customers/api/deals/[id]/companies/route.ts +1 -4
- package/src/modules/customers/api/deals/[id]/people/route.ts +1 -4
- package/src/modules/customers/api/deals/[id]/route.ts +28 -17
- package/src/modules/customers/api/deals/[id]/stats/route.ts +25 -10
- package/src/modules/customers/api/deals/aggregate/route.ts +4 -14
- package/src/modules/customers/api/deals/map/route.ts +0 -1
- package/src/modules/customers/api/deals/route.ts +1 -50
- package/src/modules/customers/api/entity-roles-factory.ts +4 -8
- package/src/modules/customers/api/interactions/route.ts +2 -8
- package/src/modules/customers/api/interactions/tasks/route.ts +1 -24
- package/src/modules/customers/api/people/[id]/companies/[linkId]/route.ts +4 -12
- package/src/modules/customers/api/people/[id]/companies/context.ts +1 -4
- package/src/modules/customers/api/people/[id]/companies/enriched/route.ts +1 -4
- package/src/modules/customers/api/people/[id]/route.ts +11 -16
- package/src/modules/customers/api/people/check-phone/route.ts +10 -75
- package/src/modules/customers/api/todos/route.ts +2 -27
- package/src/modules/customers/backend/customers/companies/page.tsx +4 -7
- package/src/modules/customers/backend/customers/deals/[id]/page.tsx +2 -7
- package/src/modules/customers/backend/customers/deals/page.tsx +4 -10
- package/src/modules/customers/backend/customers/deals/pipeline/components/Lane.tsx +14 -5
- package/src/modules/customers/backend/customers/deals/pipeline/components/StatusFilterPopover.tsx +27 -109
- package/src/modules/customers/backend/customers/people/page.tsx +4 -7
- package/src/modules/customers/backend/hooks/useEmailDuplicateCheck.ts +4 -12
- package/src/modules/customers/commands/deals.ts +59 -34
- package/src/modules/customers/commands/interactions.ts +1 -1
- package/src/modules/customers/commands/personCompanyLinks.ts +8 -224
- package/src/modules/customers/components/CustomerTodosTable.tsx +0 -2
- package/src/modules/customers/components/DealsKpiStrip.tsx +7 -7
- package/src/modules/customers/components/calendar/AgendaList.tsx +3 -3
- package/src/modules/customers/components/calendar/CalendarEventEditor.tsx +1 -1
- package/src/modules/customers/components/calendar/CalendarScreen.tsx +1 -1
- package/src/modules/customers/components/calendar/CalendarSettingsModal.tsx +1 -1
- package/src/modules/customers/components/calendar/EventBlock.tsx +2 -2
- package/src/modules/customers/components/calendar/EventPeekPopover.tsx +2 -4
- package/src/modules/customers/components/calendar/editor/PeopleField.tsx +5 -61
- package/src/modules/customers/components/calendar/editor/hooks.ts +1 -7
- package/src/modules/customers/components/calendar/types.ts +2 -2
- package/src/modules/customers/components/detail/AssignRoleDialog.tsx +12 -7
- package/src/modules/customers/components/detail/CompanyKpiBar.tsx +4 -5
- package/src/modules/customers/components/detail/CompanyPeopleSection.tsx +1 -8
- package/src/modules/customers/components/detail/DealForm.tsx +2 -22
- package/src/modules/customers/components/detail/DealsSection.tsx +5 -11
- package/src/modules/customers/components/detail/EntityTagsDialog.tsx +12 -58
- package/src/modules/customers/components/detail/PersonCompaniesSection.tsx +1 -8
- package/src/modules/customers/components/detail/hooks/usePersonTasks.ts +14 -23
- package/src/modules/customers/components/detail/schedule/ParticipantsField.tsx +5 -5
- package/src/modules/customers/components/detail/schedule/useScheduleFormState.ts +5 -5
- package/src/modules/customers/components/detail/types.ts +1 -1
- package/src/modules/customers/components/detail/utils.ts +5 -15
- package/src/modules/customers/data/entities.ts +1 -1
- package/src/modules/customers/data/validators.ts +9 -50
- package/src/modules/customers/events.ts +0 -5
- package/src/modules/customers/i18n/de.json +1 -9
- package/src/modules/customers/i18n/en.json +1 -9
- package/src/modules/customers/i18n/es.json +1 -9
- package/src/modules/customers/i18n/ko.json +1 -9
- package/src/modules/customers/i18n/pl.json +1 -9
- package/src/modules/customers/lib/calendar/conflicts.ts +2 -10
- package/src/modules/customers/lib/calendar/editorPayload.ts +3 -4
- package/src/modules/customers/lib/calendar/mapItem.ts +3 -8
- package/src/modules/customers/lib/dealStatus.ts +0 -42
- package/src/modules/customers/lib/findPeopleByAddresses.ts +6 -8
- package/src/modules/customers/lib/personCompanies.ts +1 -136
- package/src/modules/customers/lib/todoCompatibility.ts +1 -19
- package/src/modules/dashboards/i18n/es.json +4 -4
- package/src/modules/dashboards/i18n/pl.json +7 -7
- package/src/modules/dashboards/lib/widgetScope.ts +0 -6
- package/src/modules/data_sync/AGENTS.md +1 -1
- package/src/modules/data_sync/backend/data-sync/page.tsx +1 -4
- package/src/modules/data_sync/lib/adapter.ts +0 -36
- package/src/modules/data_sync/lib/sync-engine.ts +5 -113
- package/src/modules/data_sync/workers/sync-export.ts +0 -4
- package/src/modules/data_sync/workers/sync-import.ts +0 -4
- package/src/modules/devices/AGENTS.md +1 -20
- package/src/modules/devices/acl.ts +1 -9
- package/src/modules/devices/api/admin/devices/[id]/route.ts +34 -5
- package/src/modules/devices/api/admin/devices/route.ts +1 -14
- package/src/modules/devices/api/deviceList.ts +11 -135
- package/src/modules/devices/api/openapi.ts +1 -9
- package/src/modules/devices/api/route.ts +1 -9
- package/src/modules/devices/backend/devices/[id]/page.tsx +32 -18
- package/src/modules/devices/backend/devices/create/page.tsx +1 -17
- package/src/modules/devices/backend/devices/page.tsx +45 -44
- package/src/modules/devices/i18n/de.json +2 -3
- package/src/modules/devices/i18n/en.json +2 -3
- package/src/modules/devices/i18n/es.json +2 -3
- package/src/modules/devices/i18n/ko.json +2 -3
- package/src/modules/devices/i18n/pl.json +2 -3
- package/src/modules/devices/setup.ts +2 -6
- package/src/modules/directory/backend/directory/organizations/page.tsx +1 -3
- package/src/modules/directory/backend/directory/tenants/page.tsx +1 -3
- package/src/modules/directory/di.ts +2 -14
- package/src/modules/directory/utils/organizationScope.ts +15 -4
- package/src/modules/entities/api/records.ts +0 -2
- package/src/modules/entities/backend/entities/user/[entityId]/records/page.tsx +1 -4
- package/src/modules/eudr/api/plots/route.ts +0 -4
- package/src/modules/eudr/backend/eudr/evidence-submissions/[id]/page.meta.ts +2 -0
- package/src/modules/eudr/backend/eudr/evidence-submissions/create/page.meta.ts +1 -0
- package/src/modules/eudr/backend/eudr/evidence-submissions/page.meta.ts +4 -1
- package/src/modules/eudr/backend/eudr/evidence-submissions/page.tsx +0 -4
- package/src/modules/eudr/backend/eudr/page.meta.ts +2 -2
- package/src/modules/eudr/backend/eudr/plots/[id]/page.meta.ts +2 -0
- package/src/modules/eudr/backend/eudr/plots/[id]/page.tsx +8 -2
- package/src/modules/eudr/backend/eudr/plots/create/page.meta.ts +1 -0
- package/src/modules/eudr/backend/eudr/plots/create/page.tsx +8 -2
- package/src/modules/eudr/backend/eudr/plots/page.meta.ts +4 -1
- package/src/modules/eudr/backend/eudr/plots/page.tsx +0 -4
- package/src/modules/eudr/backend/eudr/product-mappings/[id]/page.meta.ts +2 -0
- package/src/modules/eudr/backend/eudr/product-mappings/create/page.meta.ts +1 -0
- package/src/modules/eudr/backend/eudr/product-mappings/page.meta.ts +4 -1
- package/src/modules/eudr/backend/eudr/product-mappings/page.tsx +0 -4
- package/src/modules/eudr/backend/eudr/risk-assessments/[id]/page.meta.ts +2 -0
- package/src/modules/eudr/backend/eudr/risk-assessments/create/page.meta.ts +1 -0
- package/src/modules/eudr/backend/eudr/risk-assessments/page.meta.ts +4 -1
- package/src/modules/eudr/backend/eudr/risk-assessments/page.tsx +0 -4
- package/src/modules/eudr/backend/eudr/statements/[id]/page.meta.ts +2 -0
- package/src/modules/eudr/backend/eudr/statements/[id]/page.tsx +2 -0
- package/src/modules/eudr/backend/eudr/statements/create/page.meta.ts +1 -0
- package/src/modules/eudr/backend/eudr/statements/page.meta.ts +4 -1
- package/src/modules/eudr/backend/eudr/statements/page.tsx +32 -30
- package/src/modules/eudr/commands/statements.ts +7 -2
- package/src/modules/eudr/components/crudErrorI18n.ts +31 -0
- package/src/modules/eudr/components/formConfig.tsx +9 -1
- package/src/modules/eudr/data/validators.ts +1 -16
- package/src/modules/eudr/i18n/de.json +3 -2
- package/src/modules/eudr/i18n/en.json +3 -2
- package/src/modules/eudr/i18n/es.json +3 -2
- package/src/modules/eudr/i18n/ko.json +3 -2
- package/src/modules/eudr/i18n/pl.json +3 -2
- package/src/modules/eudr/lib/statement-lifecycle.ts +8 -0
- package/src/modules/feature_toggles/components/FeatureTogglesTable.tsx +1 -2
- package/src/modules/feature_toggles/components/OverridesTable.tsx +1 -2
- package/src/modules/feature_toggles/defaults.json +8 -0
- package/src/modules/inbox_ops/backend/inbox-ops/log/page.tsx +0 -4
- package/src/modules/inbox_ops/backend/inbox-ops/page.tsx +0 -4
- package/src/modules/inbox_ops/lib/htmlToPlainText.ts +17 -1
- package/src/modules/integrations/api/[id]/credentials/route.ts +4 -6
- package/src/modules/integrations/backend/integrations/[id]/page.tsx +31 -61
- package/src/modules/integrations/backend/integrations/bundle/[id]/page.tsx +9 -44
- package/src/modules/integrations/data/validators.ts +2 -12
- package/src/modules/integrations/i18n/de.json +0 -1
- package/src/modules/integrations/i18n/en.json +0 -1
- package/src/modules/integrations/i18n/es.json +0 -1
- package/src/modules/integrations/i18n/ko.json +0 -1
- package/src/modules/integrations/i18n/pl.json +0 -1
- package/src/modules/integrations/lib/credentials-masking.ts +6 -10
- package/src/modules/messages/api/[id]/route.ts +1 -55
- package/src/modules/messages/api/openapi.ts +0 -20
- package/src/modules/messages/api/route.ts +2 -31
- package/src/modules/messages/components/MessagesInboxPageClient.tsx +16 -9
- package/src/modules/messages/components/inboxFilters.ts +0 -36
- package/src/modules/messages/components/message-detail/hooks/useMessageDetailsConversation.ts +1 -14
- package/src/modules/messages/components/message-detail/panels/MessageHeader.tsx +1 -3
- package/src/modules/messages/components/message-detail/panels/thread-panel.tsx +1 -2
- package/src/modules/messages/components/message-detail/types.ts +0 -3
- package/src/modules/messages/components/messageListLabels.ts +3 -52
- package/src/modules/messages/data/validators.ts +4 -43
- package/src/modules/payment_gateways/api/webhook/[provider]/route.ts +6 -4
- package/src/modules/payment_gateways/backend/payment-gateways/page.tsx +1 -4
- package/src/modules/payment_gateways/lib/webhook-processor.ts +0 -11
- package/src/modules/planner/backend/planner/availability-rulesets/page.tsx +0 -4
- package/src/modules/push_notifications/backend/push_notifications/page.tsx +1 -4
- package/src/modules/push_notifications/backend/push_notifications/send/page.tsx +4 -4
- package/src/modules/query_index/lib/engine.ts +61 -249
- package/src/modules/query_index/lib/search-tokens.ts +3 -135
- package/src/modules/resources/backend/resources/resource-types/page.tsx +1 -4
- package/src/modules/resources/backend/resources/resources/page.tsx +1 -4
- package/src/modules/sales/backend/sales/channels/offers/page.tsx +0 -4
- package/src/modules/sales/backend/sales/channels/page.tsx +0 -4
- package/src/modules/sales/backend/sales/documents/[id]/page.tsx +8 -14
- package/src/modules/sales/commands/documents.ts +0 -93
- package/src/modules/sales/components/PriceWithCurrency.tsx +5 -17
- package/src/modules/sales/components/channels/SalesChannelOffersPanel.tsx +0 -4
- package/src/modules/sales/components/documents/AdjustmentsSection.tsx +5 -6
- package/src/modules/sales/components/documents/ItemsSection.tsx +18 -56
- package/src/modules/sales/components/documents/LineItemDialog.tsx +21 -138
- package/src/modules/sales/components/documents/PaymentsSection.tsx +9 -20
- package/src/modules/sales/components/documents/ReturnsSection.tsx +5 -6
- package/src/modules/sales/components/documents/SalesDocumentsTable.tsx +14 -106
- package/src/modules/sales/components/documents/SalesOrderDraftLines.tsx +5 -6
- package/src/modules/sales/components/documents/ShipmentDialog.tsx +4 -5
- package/src/modules/sales/components/documents/ShipmentsSection.tsx +5 -6
- package/src/modules/sales/components/documents/lineItemUtils.ts +2 -7
- package/src/modules/sales/data/entities.ts +0 -6
- package/src/modules/sales/extension-points.ts +0 -1
- package/src/modules/sales/i18n/de.json +37 -8
- package/src/modules/sales/i18n/en.json +37 -8
- package/src/modules/sales/i18n/es.json +37 -8
- package/src/modules/sales/i18n/ko.json +37 -8
- package/src/modules/sales/i18n/pl.json +37 -8
- package/src/modules/sales/migrations/.snapshot-open-mercato.json +0 -60
- package/src/modules/sales/setup.ts +0 -2
- package/src/modules/sales/widgets/injection/document-history/widget.client.tsx +42 -2
- package/src/modules/sales/widgets/injection/payment-gateway-status-column/widget.ts +1 -9
- package/src/modules/sales/widgets/injection-table.ts +7 -4
- package/src/modules/staff/backend/staff/leave-requests/page.tsx +0 -4
- package/src/modules/staff/backend/staff/my-leave-requests/page.tsx +0 -4
- package/src/modules/staff/backend/staff/team-members/page.tsx +0 -6
- package/src/modules/staff/backend/staff/team-roles/page.tsx +0 -4
- package/src/modules/staff/backend/staff/teams/[id]/edit/page.tsx +0 -4
- package/src/modules/staff/backend/staff/teams/page.tsx +0 -4
- package/src/modules/staff/backend/staff/timesheets/page.tsx +1 -12
- package/src/modules/staff/backend/staff/timesheets/projects/page.tsx +0 -4
- package/src/modules/sync_excel/lib/adapters/customers.ts +0 -5
- package/src/modules/warranty_claims/api/assignees/route.ts +3 -3
- package/src/modules/warranty_claims/api/portal/attachments/route.ts +2 -2
- package/src/modules/warranty_claims/api/portal/claims/route.ts +9 -12
- package/src/modules/warranty_claims/backend/page.tsx +0 -4
- package/src/modules/warranty_claims/backend/warranty_claims/registrations/page.tsx +0 -4
- package/src/modules/warranty_claims/backend/warranty_claims/troubleshooting-guides/page.tsx +0 -4
- package/src/modules/warranty_claims/backend/warranty_claims/vendor-policies/page.tsx +0 -4
- package/src/modules/warranty_claims/frontend/[orgSlug]/portal/claims/page.tsx +0 -4
- package/src/modules/wms/api/warehouses/route.ts +9 -13
- package/src/modules/wms/api/zones/route.ts +0 -16
- package/src/modules/wms/commands/configuration.ts +10 -159
- package/src/modules/wms/commands/inventory-actions.ts +0 -3
- package/src/modules/wms/commands/shared.ts +0 -17
- package/src/modules/wms/components/backend/WmsConfigurationPage.tsx +141 -95
- package/src/modules/wms/components/backend/WmsInventoryConsolePage.tsx +0 -2
- package/src/modules/wms/components/backend/WmsLocationDetailPage.tsx +30 -26
- package/src/modules/wms/components/backend/WmsLotDetailPage.tsx +21 -17
- package/src/modules/wms/components/backend/WmsLotsListPage.tsx +0 -2
- package/src/modules/wms/components/backend/WmsOperationalDashboardPage.tsx +17 -13
- package/src/modules/wms/components/backend/WmsSkuDetailPage.tsx +16 -12
- package/src/modules/wms/components/backend/inventoryMutationLoaders.ts +20 -36
- package/src/modules/wms/i18n/de.json +0 -2
- package/src/modules/wms/i18n/en.json +0 -2
- package/src/modules/wms/i18n/es.json +0 -2
- package/src/modules/wms/i18n/ko.json +0 -2
- package/src/modules/wms/i18n/pl.json +0 -2
- package/src/modules/workflows/backend/definitions/page.tsx +1 -4
- package/src/modules/workflows/backend/events/page.tsx +1 -4
- package/src/modules/workflows/backend/instances/page.tsx +1 -4
- package/src/modules/workflows/backend/tasks/page.tsx +1 -4
- package/src/modules/workflows/lib/activity-executor.ts +0 -9
- package/dist/modules/api_keys/di.js +0 -9
- package/dist/modules/api_keys/di.js.map +0 -7
- package/dist/modules/api_keys/services/principalService.js +0 -31
- package/dist/modules/api_keys/services/principalService.js.map +0 -7
- package/dist/modules/attachments/lib/attachment-service.js +0 -313
- package/dist/modules/attachments/lib/attachment-service.js.map +0 -7
- package/dist/modules/auth/api/reset/validate.js +0 -55
- package/dist/modules/auth/api/reset/validate.js.map +0 -7
- package/dist/modules/auth/commands/acl.js +0 -254
- package/dist/modules/auth/commands/acl.js.map +0 -7
- package/dist/modules/auth/lib/userIdFilter.js +0 -16
- package/dist/modules/auth/lib/userIdFilter.js.map +0 -7
- package/dist/modules/auth/services/principalService.js +0 -200
- package/dist/modules/auth/services/principalService.js.map +0 -7
- package/dist/modules/auth/services/roleOrganizationScope.js +0 -41
- package/dist/modules/auth/services/roleOrganizationScope.js.map +0 -7
- package/dist/modules/communication_channels/lib/outbound-recipient.js +0 -33
- package/dist/modules/communication_channels/lib/outbound-recipient.js.map +0 -7
- package/dist/modules/communication_channels/lib/resolve-channel-type.js +0 -51
- package/dist/modules/communication_channels/lib/resolve-channel-type.js.map +0 -7
- package/dist/modules/customers/backend/customers/deals/pipeline/components/toneClasses.js +0 -18
- package/dist/modules/customers/backend/customers/deals/pipeline/components/toneClasses.js.map +0 -7
- package/dist/modules/customers/lib/calendar/participantIdentity.js +0 -9
- package/dist/modules/customers/lib/calendar/participantIdentity.js.map +0 -7
- package/dist/modules/customers/lib/closureStage.js +0 -45
- package/dist/modules/customers/lib/closureStage.js.map +0 -7
- package/dist/modules/customers/lib/detailReadAccess.js +0 -12
- package/dist/modules/customers/lib/detailReadAccess.js.map +0 -7
- package/dist/modules/data_sync/lib/abandoned-run.js +0 -19
- package/dist/modules/data_sync/lib/abandoned-run.js.map +0 -7
- package/dist/modules/devices/api/deviceSerialization.js +0 -46
- package/dist/modules/devices/api/deviceSerialization.js.map +0 -7
- package/dist/modules/devices/backend/devices/useDeviceUserLabels.js +0 -34
- package/dist/modules/devices/backend/devices/useDeviceUserLabels.js.map +0 -7
- package/dist/modules/devices/backend/devices/userOptions.js +0 -52
- package/dist/modules/devices/backend/devices/userOptions.js.map +0 -7
- package/dist/modules/directory/services/organizationHierarchyService.js +0 -29
- package/dist/modules/directory/services/organizationHierarchyService.js.map +0 -7
- package/dist/modules/directory/services/organizationScopeService.js +0 -56
- package/dist/modules/directory/services/organizationScopeService.js.map +0 -7
- package/dist/modules/integrations/backend/integrations/credential-secret-fields.js +0 -55
- package/dist/modules/integrations/backend/integrations/credential-secret-fields.js.map +0 -7
- package/dist/modules/messages/lib/channel-sender-identity.js +0 -26
- package/dist/modules/messages/lib/channel-sender-identity.js.map +0 -7
- package/dist/modules/messages/lib/composeSourceChannelType.js +0 -41
- package/dist/modules/messages/lib/composeSourceChannelType.js.map +0 -7
- package/dist/modules/query_index/lib/search-entity-policy.js +0 -14
- package/dist/modules/query_index/lib/search-entity-policy.js.map +0 -7
- package/dist/modules/sales/components/documents/lineItemShipmentLock.js +0 -54
- package/dist/modules/sales/components/documents/lineItemShipmentLock.js.map +0 -7
- package/dist/modules/sales/lib/salesChannelsToggleSeed.js +0 -33
- package/dist/modules/sales/lib/salesChannelsToggleSeed.js.map +0 -7
- package/dist/modules/sales/migrations/Migration20260821120000_sales_notes_addresses_context_idx.js +0 -32
- package/dist/modules/sales/migrations/Migration20260821120000_sales_notes_addresses_context_idx.js.map +0 -7
- package/dist/modules/wms/api/warehouseSearch.js +0 -21
- package/dist/modules/wms/api/warehouseSearch.js.map +0 -7
- package/dist/modules/wms/components/backend/WarehouseEditDialog.js +0 -158
- package/dist/modules/wms/components/backend/WarehouseEditDialog.js.map +0 -7
- package/dist/modules/wms/components/backend/warehouseFormOptions.js +0 -66
- package/dist/modules/wms/components/backend/warehouseFormOptions.js.map +0 -7
- package/src/modules/api_keys/di.ts +0 -7
- package/src/modules/api_keys/services/principalService.ts +0 -33
- package/src/modules/attachments/lib/attachment-service.ts +0 -468
- package/src/modules/auth/api/reset/validate.ts +0 -57
- package/src/modules/auth/commands/acl.ts +0 -495
- package/src/modules/auth/lib/userIdFilter.ts +0 -31
- package/src/modules/auth/services/principalService.ts +0 -266
- package/src/modules/auth/services/roleOrganizationScope.ts +0 -70
- package/src/modules/communication_channels/lib/outbound-recipient.ts +0 -71
- package/src/modules/communication_channels/lib/resolve-channel-type.ts +0 -99
- package/src/modules/customers/backend/customers/deals/pipeline/components/toneClasses.ts +0 -21
- package/src/modules/customers/lib/calendar/participantIdentity.ts +0 -17
- package/src/modules/customers/lib/closureStage.ts +0 -76
- package/src/modules/customers/lib/detailReadAccess.ts +0 -35
- package/src/modules/data_sync/lib/abandoned-run.ts +0 -56
- package/src/modules/devices/api/deviceSerialization.ts +0 -50
- package/src/modules/devices/backend/devices/useDeviceUserLabels.ts +0 -45
- package/src/modules/devices/backend/devices/userOptions.ts +0 -99
- package/src/modules/directory/services/organizationHierarchyService.ts +0 -34
- package/src/modules/directory/services/organizationScopeService.ts +0 -85
- package/src/modules/integrations/backend/integrations/credential-secret-fields.ts +0 -84
- package/src/modules/messages/lib/channel-sender-identity.ts +0 -55
- package/src/modules/messages/lib/composeSourceChannelType.ts +0 -95
- package/src/modules/query_index/lib/search-entity-policy.ts +0 -46
- package/src/modules/sales/components/documents/lineItemShipmentLock.ts +0 -74
- package/src/modules/sales/lib/salesChannelsToggleSeed.ts +0 -42
- package/src/modules/sales/migrations/Migration20260821120000_sales_notes_addresses_context_idx.ts +0 -87
- package/src/modules/wms/api/warehouseSearch.ts +0 -23
- package/src/modules/wms/components/backend/WarehouseEditDialog.tsx +0 -216
- package/src/modules/wms/components/backend/warehouseFormOptions.ts +0 -72
|
@@ -78,17 +78,6 @@ export type CanonicalTodoListResult = {
|
|
|
78
78
|
total: number
|
|
79
79
|
}
|
|
80
80
|
|
|
81
|
-
function emptyCanonicalTodoList(): CanonicalTodoListResult {
|
|
82
|
-
return { items: [], bridgeIds: new Set(), total: 0 }
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
function isCollapsedRestrictedOrganizationScope(
|
|
86
|
-
organizationIds: string[] | null | undefined,
|
|
87
|
-
isUnrestricted: boolean | undefined,
|
|
88
|
-
): boolean {
|
|
89
|
-
return isUnrestricted !== true && (!organizationIds || organizationIds.length === 0)
|
|
90
|
-
}
|
|
91
|
-
|
|
92
81
|
export type ListTodosPagination = { page: number; pageSize: number }
|
|
93
82
|
|
|
94
83
|
function resolveLegacyTodoSource(source: string | null | undefined): string {
|
|
@@ -388,11 +377,8 @@ export async function listLegacyTodoRows(
|
|
|
388
377
|
tenantId: string,
|
|
389
378
|
organizationIds: string[] | null,
|
|
390
379
|
entityId: string | undefined,
|
|
391
|
-
options?: { limit?: number | null
|
|
380
|
+
options?: { limit?: number | null },
|
|
392
381
|
): Promise<CustomerTodoRow[]> {
|
|
393
|
-
if (isCollapsedRestrictedOrganizationScope(organizationIds, options?.isUnrestricted)) {
|
|
394
|
-
return []
|
|
395
|
-
}
|
|
396
382
|
const where: Record<string, unknown> = { tenantId }
|
|
397
383
|
if (organizationIds && organizationIds.length > 0) {
|
|
398
384
|
where.organizationId = { $in: organizationIds }
|
|
@@ -439,12 +425,8 @@ export async function listCanonicalTodoRows(
|
|
|
439
425
|
pagination?: ListTodosPagination | null
|
|
440
426
|
searchText?: string | null
|
|
441
427
|
limit?: number | null
|
|
442
|
-
isUnrestricted?: boolean
|
|
443
428
|
},
|
|
444
429
|
): Promise<CanonicalTodoListResult> {
|
|
445
|
-
if (isCollapsedRestrictedOrganizationScope(organizationIds, options?.isUnrestricted)) {
|
|
446
|
-
return emptyCanonicalTodoList()
|
|
447
|
-
}
|
|
448
430
|
const where: Record<string, unknown> = {
|
|
449
431
|
tenantId: auth.tenantId,
|
|
450
432
|
interactionType: 'task',
|
|
@@ -7,10 +7,10 @@
|
|
|
7
7
|
"dashboards.analytics.comparison.vsLastWeek": "vs semana pasada",
|
|
8
8
|
"dashboards.analytics.comparison.vsLastYear": "vs año pasado",
|
|
9
9
|
"dashboards.analytics.comparison.vsMonthBefore": "vs mes anterior",
|
|
10
|
-
"dashboards.analytics.comparison.vsPrevious30Days": "vs 30
|
|
11
|
-
"dashboards.analytics.comparison.vsPrevious7Days": "vs 7
|
|
12
|
-
"dashboards.analytics.comparison.vsPrevious90Days": "vs 90
|
|
13
|
-
"dashboards.analytics.comparison.vsPreviousPeriod": "vs
|
|
10
|
+
"dashboards.analytics.comparison.vsPrevious30Days": "vs 30 dias anteriores",
|
|
11
|
+
"dashboards.analytics.comparison.vsPrevious7Days": "vs 7 dias anteriores",
|
|
12
|
+
"dashboards.analytics.comparison.vsPrevious90Days": "vs 90 dias anteriores",
|
|
13
|
+
"dashboards.analytics.comparison.vsPreviousPeriod": "vs periodo anterior",
|
|
14
14
|
"dashboards.analytics.comparison.vsQuarterBefore": "vs trimestre anterior",
|
|
15
15
|
"dashboards.analytics.comparison.vsWeekBefore": "vs semana anterior",
|
|
16
16
|
"dashboards.analytics.comparison.vsYearBefore": "vs año anterior",
|
|
@@ -2,18 +2,18 @@
|
|
|
2
2
|
"dashboards.analytics.chartVariant.donut": "Pierścieniowy",
|
|
3
3
|
"dashboards.analytics.chartVariant.pie": "Kołowy",
|
|
4
4
|
"dashboards.analytics.comparison.vsDayBefore": "vs przedwczoraj",
|
|
5
|
-
"dashboards.analytics.comparison.vsLastMonth": "vs poprzedni
|
|
6
|
-
"dashboards.analytics.comparison.vsLastQuarter": "vs poprzedni
|
|
7
|
-
"dashboards.analytics.comparison.vsLastWeek": "vs poprzedni
|
|
5
|
+
"dashboards.analytics.comparison.vsLastMonth": "vs poprzedni miesiac",
|
|
6
|
+
"dashboards.analytics.comparison.vsLastQuarter": "vs poprzedni kwartal",
|
|
7
|
+
"dashboards.analytics.comparison.vsLastWeek": "vs poprzedni tydzien",
|
|
8
8
|
"dashboards.analytics.comparison.vsLastYear": "vs poprzedni rok",
|
|
9
|
-
"dashboards.analytics.comparison.vsMonthBefore": "vs
|
|
9
|
+
"dashboards.analytics.comparison.vsMonthBefore": "vs miesiac wczesniej",
|
|
10
10
|
"dashboards.analytics.comparison.vsPrevious30Days": "vs poprzednie 30 dni",
|
|
11
11
|
"dashboards.analytics.comparison.vsPrevious7Days": "vs poprzednie 7 dni",
|
|
12
12
|
"dashboards.analytics.comparison.vsPrevious90Days": "vs poprzednie 90 dni",
|
|
13
13
|
"dashboards.analytics.comparison.vsPreviousPeriod": "vs poprzedni okres",
|
|
14
|
-
"dashboards.analytics.comparison.vsQuarterBefore": "vs
|
|
15
|
-
"dashboards.analytics.comparison.vsWeekBefore": "vs
|
|
16
|
-
"dashboards.analytics.comparison.vsYearBefore": "vs rok
|
|
14
|
+
"dashboards.analytics.comparison.vsQuarterBefore": "vs kwartal wczesniej",
|
|
15
|
+
"dashboards.analytics.comparison.vsWeekBefore": "vs tydzien wczesniej",
|
|
16
|
+
"dashboards.analytics.comparison.vsYearBefore": "vs rok wczesniej",
|
|
17
17
|
"dashboards.analytics.comparison.vsYesterday": "vs wczoraj",
|
|
18
18
|
"dashboards.analytics.currency.unlabelled": "Kwoty pokazane bez waluty",
|
|
19
19
|
"dashboards.analytics.currency.unlabelledHint": "Nie udało się wiarygodnie ustalić waluty, dlatego kwota jest wyświetlana bez jej oznaczenia.",
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import type { EntityManager } from '@mikro-orm/postgresql'
|
|
2
2
|
import { createRequestContainer, type AppContainer } from '@open-mercato/shared/lib/di/container'
|
|
3
3
|
import { getAuthFromRequest } from '@open-mercato/shared/lib/auth/server'
|
|
4
|
-
import { isUnrestrictedOrganizationScope } from '@open-mercato/shared/lib/auth/organizationAccess'
|
|
5
4
|
import { CrudHttpError } from '@open-mercato/shared/lib/crud/errors'
|
|
6
5
|
import { resolveOrganizationScopeForRequest } from '@open-mercato/core/modules/directory/utils/organizationScope'
|
|
7
6
|
|
|
@@ -10,7 +9,6 @@ export type WidgetScopeContext = {
|
|
|
10
9
|
em: EntityManager
|
|
11
10
|
tenantId: string
|
|
12
11
|
organizationIds: string[] | null
|
|
13
|
-
isUnrestrictedOrganizationScope?: boolean
|
|
14
12
|
}
|
|
15
13
|
|
|
16
14
|
function normalizeScopeId(value: string | null | undefined): string | null {
|
|
@@ -93,9 +91,5 @@ export async function resolveWidgetScope(
|
|
|
93
91
|
em,
|
|
94
92
|
tenantId,
|
|
95
93
|
organizationIds,
|
|
96
|
-
isUnrestrictedOrganizationScope: isUnrestrictedOrganizationScope({
|
|
97
|
-
isSuperAdmin,
|
|
98
|
-
allowedOrganizationIds: scope?.allowedIds,
|
|
99
|
-
}),
|
|
100
94
|
}
|
|
101
95
|
}
|
|
@@ -206,7 +206,7 @@ If the sync provider needs bootstrap credentials, mappings, locales, channels, o
|
|
|
206
206
|
- **Resetting an opt-out**: A reset flow that deletes the shared `SyncCursor` row MUST also call `syncRunService.resetResumePosition(integrationId, entityType, direction, scope)`. An opted-out entity type has no shared row to delete, so deleting only that leaves the resume position on the last interrupted run and the next incremental run re-imports just the tail of the walk it was reset against. The call is a no-op when nothing is interrupted, so make it unconditionally
|
|
207
207
|
- **Resume**: Retry reads the last successful cursor, resumes from there
|
|
208
208
|
- **Progress**: Linked to `ProgressJob` via `progressJobId` for `ProgressTopBar` display
|
|
209
|
-
- **Cancellation**:
|
|
209
|
+
- **Cancellation**: Via `progressService.isCancellationRequested()`
|
|
210
210
|
- **Tracing**: The engine emits one **root** span per batch (`data_sync.import.batch` / `data_sync.export.batch`) linked back to the run, covering the adapter's read *and* the engine's bookkeeping. Adapters MUST NOT hand-roll their own batch span — they cannot root it, so a multi-day run would ride on the single sampling decision taken for the request that triggered it. Inner spans an adapter creates nest under the batch span normally. The final read — the one that finds the stream drained — is traced as `data_sync.import.drain` / `data_sync.export.drain`, so N batches emit exactly N `*.batch` spans plus one `*.drain`.
|
|
211
211
|
- **Stream shape**: The engine drives the adapter's async iterator explicitly (`batch-stream.ts`) so the span wraps `next()`, where a generator does its real work before yielding. Closing follows the language's own `IteratorClose` rules, so `finally` blocks in an adapter generator behave exactly as under `for await`: no `return()` when the stream exhausts or `next()` throws (already closed), `return()` with its failure surfaced on an early stop, and `return()` with its failure swallowed when the engine's own handler threw (that error wins). Keep cleanup in `finally`.
|
|
212
212
|
|
|
@@ -74,7 +74,6 @@ type ResponsePayload = {
|
|
|
74
74
|
total: number
|
|
75
75
|
page: number
|
|
76
76
|
totalPages: number
|
|
77
|
-
totalIsCapped?: boolean
|
|
78
77
|
}
|
|
79
78
|
|
|
80
79
|
type SyncOption = {
|
|
@@ -154,7 +153,6 @@ export default function SyncRunsDashboardPage() {
|
|
|
154
153
|
const [page, setPage] = React.useState(1)
|
|
155
154
|
const [total, setTotal] = React.useState(0)
|
|
156
155
|
const [totalPages, setTotalPages] = React.useState(1)
|
|
157
|
-
const [totalIsCapped, setTotalIsCapped] = React.useState(false)
|
|
158
156
|
const [search, setSearch] = React.useState('')
|
|
159
157
|
const [filterValues, setFilterValues] = React.useState<FilterValues>({})
|
|
160
158
|
const [isLoading, setIsLoading] = React.useState(true)
|
|
@@ -202,7 +200,6 @@ export default function SyncRunsDashboardPage() {
|
|
|
202
200
|
setRows(Array.isArray(payload.items) ? payload.items : [])
|
|
203
201
|
setTotal(payload.total || 0)
|
|
204
202
|
setTotalPages(payload.totalPages || 1)
|
|
205
|
-
setTotalIsCapped(payload?.totalIsCapped === true)
|
|
206
203
|
setIsLoading(false)
|
|
207
204
|
}
|
|
208
205
|
}
|
|
@@ -1068,7 +1065,7 @@ export default function SyncRunsDashboardPage() {
|
|
|
1068
1065
|
}] : []),
|
|
1069
1066
|
]} />
|
|
1070
1067
|
)}
|
|
1071
|
-
pagination={{ page, pageSize: 20, total, totalPages,
|
|
1068
|
+
pagination={{ page, pageSize: 20, total, totalPages, onPageChange: setPage }}
|
|
1072
1069
|
isLoading={isLoading}
|
|
1073
1070
|
/>
|
|
1074
1071
|
</PageBody>
|
|
@@ -45,27 +45,6 @@ export interface StreamImportInput {
|
|
|
45
45
|
* declares no parameters.
|
|
46
46
|
*/
|
|
47
47
|
parameters?: Record<string, RunParameterValue>
|
|
48
|
-
/**
|
|
49
|
-
* Aborted when the run is cancelled, so an adapter can stop INSIDE a batch.
|
|
50
|
-
*
|
|
51
|
-
* The engine only gets to look at cancellation between batches — its check sits in the batch
|
|
52
|
-
* handler, which runs after the adapter has yielded. An adapter whose batch takes minutes (a
|
|
53
|
-
* whole-table walk over a slow link) therefore keeps working, keeps writing, and keeps its
|
|
54
|
-
* advisory lock for that whole time, however long ago the operator pressed Cancel.
|
|
55
|
-
*
|
|
56
|
-
* Honour it wherever the work is divisible — per page, per record, around a long flush — and just
|
|
57
|
-
* return: the generator's own `finally` runs, which is where a lock or a connection is released.
|
|
58
|
-
* Adapters that ignore it behave exactly as they do today.
|
|
59
|
-
*
|
|
60
|
-
* The `return` MUST sit ABOVE the `yield` for the page you abandoned, never below it. The engine
|
|
61
|
-
* commits `batch.cursor` for every batch it receives, so yielding a half-applied page advances the
|
|
62
|
-
* cursor past records that were never applied and no later run ever walks them again.
|
|
63
|
-
*
|
|
64
|
-
* The signal only reaches work running in THIS process. An adapter that hands part of a batch to
|
|
65
|
-
* other workers must give that work its own cancellation check against the same progress job —
|
|
66
|
-
* aborting here stops the generator, not anything already queued elsewhere.
|
|
67
|
-
*/
|
|
68
|
-
signal?: AbortSignal
|
|
69
48
|
}
|
|
70
49
|
|
|
71
50
|
export interface ImportItem {
|
|
@@ -78,18 +57,6 @@ export interface ImportItem {
|
|
|
78
57
|
export interface ImportBatch {
|
|
79
58
|
items: ImportItem[]
|
|
80
59
|
cursor: string
|
|
81
|
-
/**
|
|
82
|
-
* Whether the source has more to give after this batch. The final batch MUST report `false`.
|
|
83
|
-
*
|
|
84
|
-
* This is not advisory. The engine uses the last batch's value to tell a stream that DRAINED from
|
|
85
|
-
* one the adapter STOPPED EARLY on {@link StreamImportInput.signal}, because both end the same way
|
|
86
|
-
* — the generator simply returns. An adapter that reports `true` on its final batch will have a
|
|
87
|
-
* complete run misreported as `cancelled` whenever a cancel lands during the final read: the
|
|
88
|
-
* operator is told a finished sync was partial, and the run stays resumable with nothing left to
|
|
89
|
-
* resume.
|
|
90
|
-
*
|
|
91
|
-
* Derive it from the source rather than hardcoding it — `Boolean(nextPage)`, `offset < total`.
|
|
92
|
-
*/
|
|
93
60
|
hasMore: boolean
|
|
94
61
|
totalEstimate?: number
|
|
95
62
|
processedCount?: number
|
|
@@ -109,8 +76,6 @@ export interface StreamExportInput {
|
|
|
109
76
|
runId?: string
|
|
110
77
|
/** See {@link StreamImportInput.parameters}. */
|
|
111
78
|
parameters?: Record<string, RunParameterValue>
|
|
112
|
-
/** Aborted when the run is cancelled — see {@link StreamImportInput.signal}. */
|
|
113
|
-
signal?: AbortSignal
|
|
114
79
|
}
|
|
115
80
|
|
|
116
81
|
export interface ExportItemResult {
|
|
@@ -123,7 +88,6 @@ export interface ExportItemResult {
|
|
|
123
88
|
export interface ExportBatch {
|
|
124
89
|
results: ExportItemResult[]
|
|
125
90
|
cursor: string
|
|
126
|
-
/** Whether the source has more to give; the final batch MUST report `false`. See {@link ImportBatch.hasMore}. */
|
|
127
91
|
hasMore: boolean
|
|
128
92
|
batchIndex: number
|
|
129
93
|
}
|
|
@@ -94,28 +94,12 @@ function applyExportCounters(batch: ExportBatch): SyncCounterDelta {
|
|
|
94
94
|
}
|
|
95
95
|
|
|
96
96
|
// Adapter batches can legitimately outlast the stale-job sweep window (slow upstream
|
|
97
|
-
// APIs), so the engine must heartbeat while a batch is still being produced.
|
|
98
|
-
// tick also polls cancellation, so a cancel lands within one interval instead of waiting
|
|
99
|
-
// out the batch — sharing this timer rather than adding a second one that would double
|
|
100
|
-
// the per-interval round-trips for the whole life of a run.
|
|
97
|
+
// APIs), so the engine must heartbeat while a batch is still being produced.
|
|
101
98
|
const HEARTBEAT_TICK_MS = (STALE_JOB_TIMEOUT_SECONDS * 1000) / 4
|
|
102
99
|
|
|
103
100
|
// Runs `tick` on an interval only while the source iterator is pending, so heartbeats
|
|
104
101
|
// stop the moment the producer dies and genuinely stale jobs still get swept. The outer
|
|
105
102
|
// finally closes the adapter generator on early exits (cancellation, ownership conflict).
|
|
106
|
-
// Our own abort, as opposed to a failure that merely coincided with one. Adapters are told to
|
|
107
|
-
// return rather than throw, but `signal.throwIfAborted()` and an aborted `fetch` both surface as
|
|
108
|
-
// this, and either is a cancellation rather than a fault.
|
|
109
|
-
//
|
|
110
|
-
// Matched structurally on `name` rather than with `instanceof Error`, because those two throw a
|
|
111
|
-
// `DOMException`, and whether that inherits from `Error` depends on the runtime — it does under
|
|
112
|
-
// bare Node 24 and does NOT under the jest environment this is tested in. An `instanceof` test
|
|
113
|
-
// therefore passes or fails on where the code runs, which is not something cancellation should
|
|
114
|
-
// depend on.
|
|
115
|
-
function isAbortError(error: unknown): boolean {
|
|
116
|
-
return typeof error === 'object' && error !== null && (error as { name?: unknown }).name === 'AbortError'
|
|
117
|
-
}
|
|
118
|
-
|
|
119
103
|
async function* withHeartbeat<T>(source: AsyncIterable<T>, tick: () => void, intervalMs: number): AsyncGenerator<T, void, undefined> {
|
|
120
104
|
const iterator = source[Symbol.asyncIterator]()
|
|
121
105
|
try {
|
|
@@ -203,32 +187,6 @@ export function createSyncEngine(deps: EngineDeps) {
|
|
|
203
187
|
}
|
|
204
188
|
}
|
|
205
189
|
|
|
206
|
-
// Rides the heartbeat timer, which is the only thing that runs while the adapter is still
|
|
207
|
-
// producing a batch — the engine's own cancellation check sits in the batch handler and is
|
|
208
|
-
// reached only after a yield. Swallows its own errors because it runs on a timer, where an
|
|
209
|
-
// unhandled rejection is fatal, and stops polling once it has aborted.
|
|
210
|
-
function makeCancellationTick(progressJobId: string | null | undefined, scope: SyncScope, controller: AbortController): () => void {
|
|
211
|
-
if (!progressJobId) return () => {}
|
|
212
|
-
let inFlight = false
|
|
213
|
-
return () => {
|
|
214
|
-
if (inFlight || controller.signal.aborted) return
|
|
215
|
-
inFlight = true
|
|
216
|
-
progressService.isCancellationRequested(progressJobId, scope.tenantId, scope.organizationId)
|
|
217
|
-
.then((cancelled) => {
|
|
218
|
-
if (cancelled) controller.abort()
|
|
219
|
-
})
|
|
220
|
-
.catch((error) => {
|
|
221
|
-
logger.warn('Cancellation poll failed', {
|
|
222
|
-
progressJobId,
|
|
223
|
-
error: error instanceof Error ? error.message : String(error),
|
|
224
|
-
})
|
|
225
|
-
})
|
|
226
|
-
.finally(() => {
|
|
227
|
-
inFlight = false
|
|
228
|
-
})
|
|
229
|
-
}
|
|
230
|
-
}
|
|
231
|
-
|
|
232
190
|
async function refreshCoverageSnapshots(entityTypes: string[] | undefined, scope: SyncScope): Promise<void> {
|
|
233
191
|
if (!entityTypes || entityTypes.length === 0) return
|
|
234
192
|
|
|
@@ -601,17 +559,10 @@ export function createSyncEngine(deps: EngineDeps) {
|
|
|
601
559
|
let processedCount = await seedProcessedCount(run.progressJobId, scope)
|
|
602
560
|
let totalCount: number | null = null
|
|
603
561
|
let committedBatches = activeRun.batchesCompleted ?? 0
|
|
604
|
-
// Whether the last committed batch said the source was exhausted. Distinguishes a stream that
|
|
605
|
-
// drained from one the adapter stopped early — see the post-stream finalize below.
|
|
606
|
-
let streamReportedDone = false
|
|
607
562
|
// Captured while the triggering job's span is still the active one, so
|
|
608
563
|
// every rooted batch trace can link back to it.
|
|
609
564
|
const runTrace = captureTelemetryTrace()
|
|
610
565
|
const spanAttributes = runSpanAttributes(run, providerKey, scope)
|
|
611
|
-
// Declared outside the try because both the catch and the completion path below read it.
|
|
612
|
-
const cancellation = new AbortController()
|
|
613
|
-
const heartbeat = makeHeartbeatTick(run.progressJobId, scope)
|
|
614
|
-
const pollCancellation = makeCancellationTick(run.progressJobId, scope, cancellation)
|
|
615
566
|
|
|
616
567
|
try {
|
|
617
568
|
const streamResult = await forEachBatch(
|
|
@@ -625,11 +576,8 @@ export function createSyncEngine(deps: EngineDeps) {
|
|
|
625
576
|
scope: { organizationId: scope.organizationId, tenantId: scope.tenantId },
|
|
626
577
|
runId: run.id,
|
|
627
578
|
parameters: (run.parameters ?? {}) as RunParameters,
|
|
628
|
-
signal: cancellation.signal,
|
|
629
579
|
}),
|
|
630
|
-
|
|
631
|
-
// from being observed for the rest of the run.
|
|
632
|
-
() => { try { heartbeat() } finally { pollCancellation() } },
|
|
580
|
+
makeHeartbeatTick(run.progressJobId, scope),
|
|
633
581
|
HEARTBEAT_TICK_MS,
|
|
634
582
|
),
|
|
635
583
|
{
|
|
@@ -644,7 +592,7 @@ export function createSyncEngine(deps: EngineDeps) {
|
|
|
644
592
|
'data_sync.batch_size': batch.items.length,
|
|
645
593
|
})
|
|
646
594
|
|
|
647
|
-
if (
|
|
595
|
+
if (run.progressJobId && await progressService.isCancellationRequested(run.progressJobId, scope.tenantId, scope.organizationId)) {
|
|
648
596
|
await finalizeRun(run.id, 'cancelled', scope, undefined, operationalTelemetry)
|
|
649
597
|
return 'stop'
|
|
650
598
|
}
|
|
@@ -673,7 +621,6 @@ export function createSyncEngine(deps: EngineDeps) {
|
|
|
673
621
|
{ expectedBatchesCompleted: committedBatches, persistSharedCursor },
|
|
674
622
|
)
|
|
675
623
|
committedBatches += 1
|
|
676
|
-
streamReportedDone = batch.hasMore === false
|
|
677
624
|
|
|
678
625
|
await updateProgress(run.progressJobId, processedCount, totalCount, scope)
|
|
679
626
|
await refreshCoverageSnapshots(batch.refreshCoverageEntityTypes, scope)
|
|
@@ -710,15 +657,6 @@ export function createSyncEngine(deps: EngineDeps) {
|
|
|
710
657
|
})
|
|
711
658
|
return
|
|
712
659
|
}
|
|
713
|
-
// An adapter that honours the signal may reject instead of returning, so our own abort is
|
|
714
|
-
// a cancellation rather than a fault — and must not leave an `error` entry in the
|
|
715
|
-
// integration log for a run the operator cancelled on purpose. Anything else that merely
|
|
716
|
-
// coincided with the cancel — a rejecting commit, an upstream 500 — is a genuine failure
|
|
717
|
-
// and keeps its log entry, its message, its `failed` status and its failed event.
|
|
718
|
-
if (cancellation.signal.aborted && isAbortError(error)) {
|
|
719
|
-
await finalizeRun(run.id, 'cancelled', scope, undefined, operationalTelemetry)
|
|
720
|
-
return
|
|
721
|
-
}
|
|
722
660
|
const message = error instanceof Error ? error.message : 'Sync import failed'
|
|
723
661
|
await integrationLogService.write(
|
|
724
662
|
{
|
|
@@ -733,19 +671,6 @@ export function createSyncEngine(deps: EngineDeps) {
|
|
|
733
671
|
return
|
|
734
672
|
}
|
|
735
673
|
|
|
736
|
-
// An adapter that honours the signal stops mid-batch and returns WITHOUT yielding, so the
|
|
737
|
-
// batch handler — which owns the only other `cancelled` transition — never runs and the
|
|
738
|
-
// stream reports `completed`.
|
|
739
|
-
//
|
|
740
|
-
// `streamReportedDone` keeps that from swallowing a run that genuinely finished: an adapter
|
|
741
|
-
// that ignores the signal and drains after reporting `hasMore: false` delivered everything it
|
|
742
|
-
// had, even when the cancel landed during the final read. Calling that cancelled would tell
|
|
743
|
-
// the operator a complete sync was partial and leave a finished run resumable.
|
|
744
|
-
if (cancellation.signal.aborted && !streamReportedDone) {
|
|
745
|
-
await finalizeRun(run.id, 'cancelled', scope, undefined, operationalTelemetry)
|
|
746
|
-
return
|
|
747
|
-
}
|
|
748
|
-
|
|
749
674
|
await finalizeRun(run.id, 'completed', scope, undefined, operationalTelemetry)
|
|
750
675
|
},
|
|
751
676
|
|
|
@@ -828,17 +753,10 @@ export function createSyncEngine(deps: EngineDeps) {
|
|
|
828
753
|
const mapping = await resolveMapping(adapter, run.entityType, scope)
|
|
829
754
|
let processedCount = await seedProcessedCount(run.progressJobId, scope)
|
|
830
755
|
let committedBatches = activeRun.batchesCompleted ?? 0
|
|
831
|
-
// Whether the last committed batch said the source was exhausted. Distinguishes a stream that
|
|
832
|
-
// drained from one the adapter stopped early — see the post-stream finalize below.
|
|
833
|
-
let streamReportedDone = false
|
|
834
756
|
// Captured while the triggering job's span is still the active one, so
|
|
835
757
|
// every rooted batch trace can link back to it.
|
|
836
758
|
const runTrace = captureTelemetryTrace()
|
|
837
759
|
const spanAttributes = runSpanAttributes(run, providerKey, scope)
|
|
838
|
-
// Declared outside the try because both the catch and the completion path below read it.
|
|
839
|
-
const cancellation = new AbortController()
|
|
840
|
-
const heartbeat = makeHeartbeatTick(run.progressJobId, scope)
|
|
841
|
-
const pollCancellation = makeCancellationTick(run.progressJobId, scope, cancellation)
|
|
842
760
|
|
|
843
761
|
try {
|
|
844
762
|
const streamResult = await forEachBatch(
|
|
@@ -852,11 +770,8 @@ export function createSyncEngine(deps: EngineDeps) {
|
|
|
852
770
|
scope: { organizationId: scope.organizationId, tenantId: scope.tenantId },
|
|
853
771
|
runId: run.id,
|
|
854
772
|
parameters: (run.parameters ?? {}) as RunParameters,
|
|
855
|
-
signal: cancellation.signal,
|
|
856
773
|
}),
|
|
857
|
-
|
|
858
|
-
// from being observed for the rest of the run.
|
|
859
|
-
() => { try { heartbeat() } finally { pollCancellation() } },
|
|
774
|
+
makeHeartbeatTick(run.progressJobId, scope),
|
|
860
775
|
HEARTBEAT_TICK_MS,
|
|
861
776
|
),
|
|
862
777
|
{
|
|
@@ -871,7 +786,7 @@ export function createSyncEngine(deps: EngineDeps) {
|
|
|
871
786
|
'data_sync.batch_size': batch.results.length,
|
|
872
787
|
})
|
|
873
788
|
|
|
874
|
-
if (
|
|
789
|
+
if (run.progressJobId && await progressService.isCancellationRequested(run.progressJobId, scope.tenantId, scope.organizationId)) {
|
|
875
790
|
await finalizeRun(run.id, 'cancelled', scope, undefined, operationalTelemetry)
|
|
876
791
|
return 'stop'
|
|
877
792
|
}
|
|
@@ -900,7 +815,6 @@ export function createSyncEngine(deps: EngineDeps) {
|
|
|
900
815
|
{ expectedBatchesCompleted: committedBatches, persistSharedCursor },
|
|
901
816
|
)
|
|
902
817
|
committedBatches += 1
|
|
903
|
-
streamReportedDone = batch.hasMore === false
|
|
904
818
|
await updateProgress(run.progressJobId, processedCount, null, scope)
|
|
905
819
|
await logExportItemFailures(run.id, run.integrationId, batch.results, scope)
|
|
906
820
|
|
|
@@ -932,15 +846,6 @@ export function createSyncEngine(deps: EngineDeps) {
|
|
|
932
846
|
})
|
|
933
847
|
return
|
|
934
848
|
}
|
|
935
|
-
// An adapter that honours the signal may reject instead of returning, so our own abort is
|
|
936
|
-
// a cancellation rather than a fault — and must not leave an `error` entry in the
|
|
937
|
-
// integration log for a run the operator cancelled on purpose. Anything else that merely
|
|
938
|
-
// coincided with the cancel — a rejecting commit, an upstream 500 — is a genuine failure
|
|
939
|
-
// and keeps its log entry, its message, its `failed` status and its failed event.
|
|
940
|
-
if (cancellation.signal.aborted && isAbortError(error)) {
|
|
941
|
-
await finalizeRun(run.id, 'cancelled', scope, undefined, operationalTelemetry)
|
|
942
|
-
return
|
|
943
|
-
}
|
|
944
849
|
const message = error instanceof Error ? error.message : 'Sync export failed'
|
|
945
850
|
await integrationLogService.write(
|
|
946
851
|
{
|
|
@@ -955,19 +860,6 @@ export function createSyncEngine(deps: EngineDeps) {
|
|
|
955
860
|
return
|
|
956
861
|
}
|
|
957
862
|
|
|
958
|
-
// An adapter that honours the signal stops mid-batch and returns WITHOUT yielding, so the
|
|
959
|
-
// batch handler — which owns the only other `cancelled` transition — never runs and the
|
|
960
|
-
// stream reports `completed`.
|
|
961
|
-
//
|
|
962
|
-
// `streamReportedDone` keeps that from swallowing a run that genuinely finished: an adapter
|
|
963
|
-
// that ignores the signal and drains after reporting `hasMore: false` delivered everything it
|
|
964
|
-
// had, even when the cancel landed during the final read. Calling that cancelled would tell
|
|
965
|
-
// the operator a complete sync was partial and leave a finished run resumable.
|
|
966
|
-
if (cancellation.signal.aborted && !streamReportedDone) {
|
|
967
|
-
await finalizeRun(run.id, 'cancelled', scope, undefined, operationalTelemetry)
|
|
968
|
-
return
|
|
969
|
-
}
|
|
970
|
-
|
|
971
863
|
await finalizeRun(run.id, 'completed', scope, undefined, operationalTelemetry)
|
|
972
864
|
},
|
|
973
865
|
}
|
|
@@ -7,7 +7,6 @@ import {
|
|
|
7
7
|
DATA_SYNC_LOCK_DURATION_MS,
|
|
8
8
|
DATA_SYNC_MAX_STALLED_COUNT,
|
|
9
9
|
} from '../lib/queue-policy'
|
|
10
|
-
import { failAbandonedRun } from '../lib/abandoned-run'
|
|
11
10
|
import { createLogger } from '@open-mercato/shared/lib/logger'
|
|
12
11
|
|
|
13
12
|
const logger = createLogger('data_sync').child({ component: 'sync-export' })
|
|
@@ -28,9 +27,6 @@ export const metadata: WorkerMeta = {
|
|
|
28
27
|
concurrency: 5,
|
|
29
28
|
lockDuration: DATA_SYNC_LOCK_DURATION_MS,
|
|
30
29
|
maxStalledCount: DATA_SYNC_MAX_STALLED_COUNT,
|
|
31
|
-
// Declared on the worker, not on the enqueueing queue: the abandonment this reports is a worker
|
|
32
|
-
// restart, and the process that restarts never constructs the producer's queue instance.
|
|
33
|
-
onJobAbandoned: failAbandonedRun,
|
|
34
30
|
}
|
|
35
31
|
|
|
36
32
|
type HandlerContext = JobContext & {
|
|
@@ -7,7 +7,6 @@ import {
|
|
|
7
7
|
DATA_SYNC_LOCK_DURATION_MS,
|
|
8
8
|
DATA_SYNC_MAX_STALLED_COUNT,
|
|
9
9
|
} from '../lib/queue-policy'
|
|
10
|
-
import { failAbandonedRun } from '../lib/abandoned-run'
|
|
11
10
|
import { createLogger } from '@open-mercato/shared/lib/logger'
|
|
12
11
|
|
|
13
12
|
const logger = createLogger('data_sync').child({ component: 'sync-import' })
|
|
@@ -28,9 +27,6 @@ export const metadata: WorkerMeta = {
|
|
|
28
27
|
concurrency: 5,
|
|
29
28
|
lockDuration: DATA_SYNC_LOCK_DURATION_MS,
|
|
30
29
|
maxStalledCount: DATA_SYNC_MAX_STALLED_COUNT,
|
|
31
|
-
// Declared on the worker, not on the enqueueing queue: the abandonment this reports is a worker
|
|
32
|
-
// restart, and the process that restarts never constructs the producer's queue instance.
|
|
33
|
-
onJobAbandoned: failAbandonedRun,
|
|
34
30
|
}
|
|
35
31
|
|
|
36
32
|
type HandlerContext = JobContext & {
|
|
@@ -23,14 +23,6 @@ delivery logic** (sender, providers, delivery rows, workers live in the `push_no
|
|
|
23
23
|
— they carry undo snapshots, query-index side effects, and domain events.
|
|
24
24
|
- Treat `push_token` as a secret: **never** include it in list/response field sets. Only
|
|
25
25
|
`push_provider` and `push_token_updated_at` are exposed.
|
|
26
|
-
- Serialize every GET response in **camelCase**, like every other module. The list routes run
|
|
27
|
-
`transformDeviceListItem` (`api/deviceList.ts`) over the query engine's raw projection and the admin
|
|
28
|
-
detail route uses `serializeDeviceDetail` (`api/deviceSerialization.ts`). Both also emit the legacy
|
|
29
|
-
snake_case keys as **deprecated aliases** via `toDeprecatedSnakeCaseAliases`, kept for one minor
|
|
30
|
-
version per `BACKWARD_COMPATIBILITY.md` § 7 and pinned by `TC-DEV-007`; when the bridge is dropped,
|
|
31
|
-
remove the alias spread from those two functions and the deprecated keys from `deviceListItemSchema`
|
|
32
|
-
/ `deviceDetailItemSchema`. Adding a column means adding it to `deviceListFields`, the transform, and
|
|
33
|
-
the schemas. See `.ai/specs/2026-08-24-devices-api-camelcase-responses.md` (#5513).
|
|
34
26
|
- Honor the `pushToken` tri-state on `PUT`: absent key = leave unchanged; explicit `null` = clear
|
|
35
27
|
(revoked OS permission) and bump `push_token_updated_at`. The command uses own-property presence.
|
|
36
28
|
- Keep the list route's CRUD cache tag aligned with the command's `resourceKind`. The list reads
|
|
@@ -97,20 +89,9 @@ write busts both caches (see cache-tag note above).
|
|
|
97
89
|
## ACL
|
|
98
90
|
|
|
99
91
|
`devices.view`, `devices.manage` (self-serve), `devices.admin` (cross-user). Defaults in `setup.ts`:
|
|
100
|
-
`superadmin`/`admin` get `devices
|
|
92
|
+
`superadmin`/`admin` get `devices.*`; `employee` gets `view` + `manage`. Run
|
|
101
93
|
`yarn mercato auth sync-role-acls` after changing `acl.ts`/`setup.ts` to backfill existing tenants.
|
|
102
94
|
|
|
103
|
-
`devices.admin` declares `dependsOn: ['auth.users.list']`: the admin screens name owners by person,
|
|
104
|
-
and the register form's owner picker rejects values that do not resolve to a directory entry, so a
|
|
105
|
-
role holding `devices.admin` without the dependency cannot complete that form. `dependsOn` only
|
|
106
|
-
surfaces the gap in the ACL editor — it does not grant. Run the sync command above after deploying
|
|
107
|
-
an ACL change here.
|
|
108
|
-
|
|
109
|
-
The picker is `allowCustomValues: false`. That rejects free text and an id belonging to nobody; it
|
|
110
|
-
does **not** reject a raw id that is already a known option, because `ComboboxInput` matches on
|
|
111
|
-
`option.value` and `CrudForm` keeps the unfiltered first page as suggestions for the form's
|
|
112
|
-
lifetime. Either way the submitted value is a real user in the caller's scope.
|
|
113
|
-
|
|
114
95
|
## Validation Commands
|
|
115
96
|
|
|
116
97
|
```bash
|
|
@@ -1,15 +1,7 @@
|
|
|
1
1
|
export const features = [
|
|
2
2
|
{ id: 'devices.view', title: 'View own devices', module: 'devices' },
|
|
3
3
|
{ id: 'devices.manage', title: 'Manage own devices', module: 'devices' },
|
|
4
|
-
{
|
|
5
|
-
id: 'devices.admin',
|
|
6
|
-
title: 'Manage devices across users',
|
|
7
|
-
module: 'devices',
|
|
8
|
-
// Managing devices across users means naming the owner, and the admin screens name them by
|
|
9
|
-
// person rather than by UUID: the register form's owner picker and the owner column on both
|
|
10
|
-
// list and detail resolve through `GET /api/auth/users`, which `auth.users.list` gates.
|
|
11
|
-
dependsOn: ['auth.users.list'],
|
|
12
|
-
},
|
|
4
|
+
{ id: 'devices.admin', title: 'Manage devices across users', module: 'devices' },
|
|
13
5
|
]
|
|
14
6
|
|
|
15
7
|
export default features
|
|
@@ -15,8 +15,6 @@ import { updateDeviceSchema } from '../../../../data/validators'
|
|
|
15
15
|
import { isOrganizationReadAccessAllowed } from '@open-mercato/core/modules/directory/utils/organizationScopeGuard'
|
|
16
16
|
import { resolveDeviceActorUserId } from '../../../auth'
|
|
17
17
|
import { executeUpdate, executeDeactivate, type DeviceMutationContext } from '../../../deviceOps'
|
|
18
|
-
import { serializeDeviceDetail, deviceDetailItemSchema } from '../../../deviceSerialization'
|
|
19
|
-
import { DEPRECATED_SNAKE_CASE_NOTICE } from '../../../openapi'
|
|
20
18
|
|
|
21
19
|
const logger = createLogger('devices')
|
|
22
20
|
|
|
@@ -40,6 +38,23 @@ async function loadDevice(
|
|
|
40
38
|
return findOneWithDecryption(em, UserDevice, { id, tenantId, deletedAt: null }, undefined, { tenantId })
|
|
41
39
|
}
|
|
42
40
|
|
|
41
|
+
// push_token is a secret and is never returned.
|
|
42
|
+
function serializeDevice(device: UserDevice) {
|
|
43
|
+
return {
|
|
44
|
+
id: device.id,
|
|
45
|
+
user_id: device.userId,
|
|
46
|
+
device_id: device.deviceId,
|
|
47
|
+
platform: device.platform,
|
|
48
|
+
client_app_version: device.clientAppVersion ?? null,
|
|
49
|
+
os_version: device.osVersion ?? null,
|
|
50
|
+
push_provider: device.pushProvider ?? null,
|
|
51
|
+
push_token_updated_at: device.pushTokenUpdatedAt ? device.pushTokenUpdatedAt.toISOString() : null,
|
|
52
|
+
last_seen_at: device.lastSeenAt ? device.lastSeenAt.toISOString() : null,
|
|
53
|
+
created_at: device.createdAt ? device.createdAt.toISOString() : null,
|
|
54
|
+
updated_at: device.updatedAt ? device.updatedAt.toISOString() : null,
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
|
|
43
58
|
export async function GET(req: Request, { params }: { params: { id: string } }) {
|
|
44
59
|
const { translate } = await resolveTranslations()
|
|
45
60
|
try {
|
|
@@ -61,7 +76,7 @@ export async function GET(req: Request, { params }: { params: { id: string } })
|
|
|
61
76
|
if (!isOrganizationReadAccessAllowed({ scope, auth, organizationId: device.organizationId ?? null })) {
|
|
62
77
|
return NextResponse.json({ error: translate('devices.errors.forbidden', 'Access denied') }, { status: 403 })
|
|
63
78
|
}
|
|
64
|
-
return NextResponse.json({ item:
|
|
79
|
+
return NextResponse.json({ item: serializeDevice(device) })
|
|
65
80
|
} catch (err) {
|
|
66
81
|
if (isCrudHttpError(err)) {
|
|
67
82
|
return NextResponse.json(err.body, { status: err.status })
|
|
@@ -162,7 +177,21 @@ export async function DELETE(req: Request, { params }: { params: { id: string }
|
|
|
162
177
|
|
|
163
178
|
const okResponseSchema = z.object({ ok: z.literal(true), id: z.string().uuid().optional() })
|
|
164
179
|
const errorResponseSchema = z.object({ error: z.string() })
|
|
165
|
-
const detailResponseSchema = z.object({
|
|
180
|
+
const detailResponseSchema = z.object({
|
|
181
|
+
item: z.object({
|
|
182
|
+
id: z.string().uuid(),
|
|
183
|
+
user_id: z.string().uuid(),
|
|
184
|
+
device_id: z.string(),
|
|
185
|
+
platform: z.enum(['ios', 'android', 'web']),
|
|
186
|
+
client_app_version: z.string().nullable(),
|
|
187
|
+
os_version: z.string().nullable(),
|
|
188
|
+
push_provider: z.string().nullable(),
|
|
189
|
+
push_token_updated_at: z.string().nullable(),
|
|
190
|
+
last_seen_at: z.string().nullable(),
|
|
191
|
+
created_at: z.string().nullable(),
|
|
192
|
+
updated_at: z.string().nullable(),
|
|
193
|
+
}),
|
|
194
|
+
})
|
|
166
195
|
|
|
167
196
|
export const openApi: OpenApiRouteDoc = {
|
|
168
197
|
tag: 'Devices (admin)',
|
|
@@ -170,7 +199,7 @@ export const openApi: OpenApiRouteDoc = {
|
|
|
170
199
|
methods: {
|
|
171
200
|
GET: {
|
|
172
201
|
summary: 'Get any device',
|
|
173
|
-
description:
|
|
202
|
+
description: 'Admin: fetch a single device by id (push_token is never returned).',
|
|
174
203
|
responses: [{ status: 200, description: 'Device', schema: detailResponseSchema }],
|
|
175
204
|
errors: [
|
|
176
205
|
{ status: 400, description: 'Invalid id', schema: errorResponseSchema },
|
|
@@ -2,7 +2,6 @@ import type { EntityManager } from '@mikro-orm/postgresql'
|
|
|
2
2
|
import { NextResponse } from 'next/server'
|
|
3
3
|
import { z } from 'zod'
|
|
4
4
|
import { makeCrudRoute } from '@open-mercato/shared/lib/crud/factory'
|
|
5
|
-
import { toHeaderLabel } from '@open-mercato/shared/lib/crud/exporters'
|
|
6
5
|
import { createRequestContainer } from '@open-mercato/shared/lib/di/container'
|
|
7
6
|
import { getAuthFromRequest } from '@open-mercato/shared/lib/auth/server'
|
|
8
7
|
import { resolveOrganizationScopeForRequest } from '@open-mercato/core/modules/directory/utils/organizationScope'
|
|
@@ -22,14 +21,7 @@ import {
|
|
|
22
21
|
} from '../../../data/validators'
|
|
23
22
|
import { resolveDeviceActorUserId } from '../../auth'
|
|
24
23
|
import { createDevicesCrudOpenApi, createPagedListResponseSchema } from '../../openapi'
|
|
25
|
-
import {
|
|
26
|
-
deviceListSchema,
|
|
27
|
-
deviceListFields,
|
|
28
|
-
deviceListSortFieldMap,
|
|
29
|
-
deviceListItemSchema,
|
|
30
|
-
deviceExportColumnFields,
|
|
31
|
-
transformDeviceListItem,
|
|
32
|
-
} from '../../deviceList'
|
|
24
|
+
import { deviceListSchema, deviceListFields, deviceListSortFieldMap, deviceListItemSchema } from '../../deviceList'
|
|
33
25
|
import { executeRegister, type DeviceMutationContext } from '../../deviceOps'
|
|
34
26
|
|
|
35
27
|
const logger = createLogger('devices')
|
|
@@ -63,11 +55,6 @@ const crud = makeCrudRoute({
|
|
|
63
55
|
entityId: E.devices.user_device,
|
|
64
56
|
fields: deviceListFields,
|
|
65
57
|
sortFieldMap: deviceListSortFieldMap,
|
|
66
|
-
// The query engine projects raw column names; expose them in camelCase like every other module.
|
|
67
|
-
transformItem: transformDeviceListItem,
|
|
68
|
-
// Without an explicit column set the factory's default export spreads each item, so the deprecated
|
|
69
|
-
// snake_case aliases would double every column in the CSV/JSON/XML export.
|
|
70
|
-
export: { columns: deviceExportColumnFields.map((field) => ({ field, header: toHeaderLabel(field) })) },
|
|
71
58
|
// Tenant + org scope is enforced by the factory (orm.tenantField + orm.orgField); only the optional
|
|
72
59
|
// userId/platform narrowing is left to do here.
|
|
73
60
|
buildFilters: async (query) => {
|