@open-mercato/core 0.6.8-develop.7099.1.7ba2771d06 → 0.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.turbo/turbo-build.log +1 -1
- package/dist/helpers/integration/api.js +1 -13
- package/dist/helpers/integration/api.js.map +2 -2
- package/dist/helpers/integration/communicationChannelsFixtures.js +0 -19
- package/dist/helpers/integration/communicationChannelsFixtures.js.map +2 -2
- package/dist/modules/api_keys/api/keys/route.js +1 -1
- package/dist/modules/api_keys/api/keys/route.js.map +2 -2
- package/dist/modules/api_keys/backend/api-keys/page.js +1 -3
- package/dist/modules/api_keys/backend/api-keys/page.js.map +2 -2
- package/dist/modules/attachments/api/route.js +2 -2
- package/dist/modules/attachments/api/route.js.map +2 -2
- package/dist/modules/attachments/components/AttachmentLibrary.js +0 -2
- package/dist/modules/attachments/components/AttachmentLibrary.js.map +2 -2
- package/dist/modules/attachments/di.js +1 -11
- package/dist/modules/attachments/di.js.map +2 -2
- package/dist/modules/attachments/index.js.map +1 -1
- package/dist/modules/attachments/lib/scoped-upload-service.js +2 -15
- package/dist/modules/attachments/lib/scoped-upload-service.js.map +2 -2
- package/dist/modules/attachments/lib/upload-limits.js +2 -6
- package/dist/modules/attachments/lib/upload-limits.js.map +2 -2
- package/dist/modules/audit_logs/backend/audit-logs/page.js +0 -6
- package/dist/modules/audit_logs/backend/audit-logs/page.js.map +2 -2
- package/dist/modules/audit_logs/lib/display-helpers.js +11 -19
- package/dist/modules/audit_logs/lib/display-helpers.js.map +2 -2
- package/dist/modules/audit_logs/services/actionLogService.js +12 -57
- package/dist/modules/audit_logs/services/actionLogService.js.map +3 -3
- package/dist/modules/auth/acl.js +5 -30
- package/dist/modules/auth/acl.js.map +2 -2
- package/dist/modules/auth/api/feature-check.js +2 -8
- package/dist/modules/auth/api/feature-check.js.map +2 -2
- package/dist/modules/auth/api/login.js +20 -4
- package/dist/modules/auth/api/login.js.map +2 -2
- package/dist/modules/auth/api/roles/acl/route.js +33 -28
- package/dist/modules/auth/api/roles/acl/route.js.map +2 -2
- package/dist/modules/auth/api/routeError.js +11 -0
- package/dist/modules/auth/api/routeError.js.map +7 -0
- package/dist/modules/auth/api/session/refresh.js +1 -25
- package/dist/modules/auth/api/session/refresh.js.map +2 -2
- package/dist/modules/auth/api/users/acl/route.js +73 -102
- package/dist/modules/auth/api/users/acl/route.js.map +2 -2
- package/dist/modules/auth/backend/roles/[id]/edit/page.meta.js +1 -5
- package/dist/modules/auth/backend/roles/[id]/edit/page.meta.js.map +2 -2
- package/dist/modules/auth/backend/roles/page.js +1 -3
- package/dist/modules/auth/backend/roles/page.js.map +2 -2
- package/dist/modules/auth/backend/users/[id]/edit/page.meta.js +1 -5
- package/dist/modules/auth/backend/users/[id]/edit/page.meta.js.map +2 -2
- package/dist/modules/auth/backend/users/page.js +1 -2
- package/dist/modules/auth/backend/users/page.js.map +2 -2
- package/dist/modules/auth/components/AclEditor.js +30 -39
- package/dist/modules/auth/components/AclEditor.js.map +2 -2
- package/dist/modules/auth/data/entities.js.map +2 -2
- package/dist/modules/auth/data/validators.js +1 -5
- package/dist/modules/auth/data/validators.js.map +2 -2
- package/dist/modules/auth/di.js +9 -35
- package/dist/modules/auth/di.js.map +2 -2
- package/dist/modules/auth/frontend/reset/[token]/page.js +0 -46
- package/dist/modules/auth/frontend/reset/[token]/page.js.map +2 -2
- package/dist/modules/auth/lib/grantChecks.js.map +2 -2
- package/dist/modules/auth/services/authService.js +2 -16
- package/dist/modules/auth/services/authService.js.map +2 -2
- package/dist/modules/auth/services/rbacService.js +24 -67
- package/dist/modules/auth/services/rbacService.js.map +3 -3
- package/dist/modules/business_rules/backend/logs/page.js +1 -3
- package/dist/modules/business_rules/backend/logs/page.js.map +2 -2
- package/dist/modules/business_rules/backend/rules/[id]/page.meta.js +6 -1
- package/dist/modules/business_rules/backend/rules/[id]/page.meta.js.map +2 -2
- package/dist/modules/business_rules/backend/rules/create/page.meta.js +5 -1
- package/dist/modules/business_rules/backend/rules/create/page.meta.js.map +2 -2
- package/dist/modules/business_rules/backend/rules/page.js +1 -3
- package/dist/modules/business_rules/backend/rules/page.js.map +2 -2
- package/dist/modules/business_rules/backend/sets/[id]/page.meta.js +6 -1
- package/dist/modules/business_rules/backend/sets/[id]/page.meta.js.map +2 -2
- package/dist/modules/business_rules/backend/sets/create/page.meta.js +5 -1
- package/dist/modules/business_rules/backend/sets/create/page.meta.js.map +2 -2
- package/dist/modules/business_rules/backend/sets/page.js +1 -3
- package/dist/modules/business_rules/backend/sets/page.js.map +2 -2
- package/dist/modules/business_rules/lib/expression-evaluator.js +9 -9
- package/dist/modules/business_rules/lib/expression-evaluator.js.map +2 -2
- package/dist/modules/business_rules/lib/rule-evaluator.js +9 -10
- package/dist/modules/business_rules/lib/rule-evaluator.js.map +2 -2
- package/dist/modules/catalog/ai-agents.js +1 -1
- package/dist/modules/catalog/ai-agents.js.map +1 -1
- package/dist/modules/catalog/ai-tools/merchandising-pack.js +2 -2
- package/dist/modules/catalog/ai-tools/merchandising-pack.js.map +2 -2
- package/dist/modules/catalog/backend/catalog/products/MerchandisingAssistantSheet.js +2 -5
- package/dist/modules/catalog/backend/catalog/products/MerchandisingAssistantSheet.js.map +2 -2
- package/dist/modules/catalog/components/categories/CategoriesDataTable.js +0 -2
- package/dist/modules/catalog/components/categories/CategoriesDataTable.js.map +2 -2
- package/dist/modules/catalog/components/products/ProductsDataTable.js +1 -7
- package/dist/modules/catalog/components/products/ProductsDataTable.js.map +2 -2
- package/dist/modules/catalog/widgets/injection/merchandising-assistant-trigger/widget.client.js +0 -2
- package/dist/modules/catalog/widgets/injection/merchandising-assistant-trigger/widget.client.js.map +2 -2
- package/dist/modules/communication_channels/api/post/channels/[id]/test-send/route.js +1 -9
- package/dist/modules/communication_channels/api/post/channels/[id]/test-send/route.js.map +2 -2
- package/dist/modules/communication_channels/api/post/test-seed/route.js +10 -95
- package/dist/modules/communication_channels/api/post/test-seed/route.js.map +2 -2
- package/dist/modules/communication_channels/backend/communication_channels/channels/page.js +0 -3
- package/dist/modules/communication_channels/backend/communication_channels/channels/page.js.map +2 -2
- package/dist/modules/communication_channels/commands/ingest-inbound-message.js +1 -14
- package/dist/modules/communication_channels/commands/ingest-inbound-message.js.map +2 -2
- package/dist/modules/communication_channels/di.js +1 -7
- package/dist/modules/communication_channels/di.js.map +2 -2
- package/dist/modules/communication_channels/lib/email-capabilities.js +1 -4
- package/dist/modules/communication_channels/lib/email-capabilities.js.map +2 -2
- package/dist/modules/communication_channels/lib/test-seed.js +2 -41
- package/dist/modules/communication_channels/lib/test-seed.js.map +2 -2
- package/dist/modules/configs/lib/system-status.js +0 -9
- package/dist/modules/configs/lib/system-status.js.map +2 -2
- package/dist/modules/currencies/backend/currencies/page.js +1 -3
- package/dist/modules/currencies/backend/currencies/page.js.map +2 -2
- package/dist/modules/currencies/backend/exchange-rates/page.js +1 -3
- package/dist/modules/currencies/backend/exchange-rates/page.js.map +2 -2
- package/dist/modules/customer_accounts/api/admin/domain-mappings.js +0 -9
- package/dist/modules/customer_accounts/api/admin/domain-mappings.js.map +2 -2
- package/dist/modules/customer_accounts/backend/customer_accounts/roles/page.js +1 -3
- package/dist/modules/customer_accounts/backend/customer_accounts/roles/page.js.map +2 -2
- package/dist/modules/customer_accounts/backend/customer_accounts/settings/CustomerAccountsSettingsPageClient.js +84 -0
- package/dist/modules/customer_accounts/backend/customer_accounts/settings/CustomerAccountsSettingsPageClient.js.map +7 -0
- package/dist/modules/customer_accounts/backend/customer_accounts/settings/page.js +7 -81
- package/dist/modules/customer_accounts/backend/customer_accounts/settings/page.js.map +2 -2
- package/dist/modules/customer_accounts/backend/customer_accounts/users/PortalUsersPageClient.js +523 -0
- package/dist/modules/customer_accounts/backend/customer_accounts/users/PortalUsersPageClient.js.map +7 -0
- package/dist/modules/customer_accounts/backend/customer_accounts/users/[id]/PortalUserDetailPageClient.js +731 -0
- package/dist/modules/customer_accounts/backend/customer_accounts/users/[id]/PortalUserDetailPageClient.js.map +7 -0
- package/dist/modules/customer_accounts/backend/customer_accounts/users/[id]/page.js +7 -727
- package/dist/modules/customer_accounts/backend/customer_accounts/users/[id]/page.js.map +2 -2
- package/dist/modules/customer_accounts/backend/customer_accounts/users/page.js +7 -521
- package/dist/modules/customer_accounts/backend/customer_accounts/users/page.js.map +2 -2
- package/dist/modules/customer_accounts/extension-points.js +1 -1
- package/dist/modules/customer_accounts/extension-points.js.map +2 -2
- package/dist/modules/customer_accounts/lib/portalUrl.js +69 -0
- package/dist/modules/customer_accounts/lib/portalUrl.js.map +7 -0
- package/dist/modules/customer_accounts/services/domainMappingService.js +0 -10
- package/dist/modules/customer_accounts/services/domainMappingService.js.map +2 -2
- package/dist/modules/customers/ai-tools/companies-pack.js +1 -4
- package/dist/modules/customers/ai-tools/companies-pack.js.map +2 -2
- package/dist/modules/customers/ai-tools/deal-analyzer-pack.js +2 -13
- package/dist/modules/customers/ai-tools/deal-analyzer-pack.js.map +2 -2
- package/dist/modules/customers/ai-tools/deals-pack.js +6 -52
- package/dist/modules/customers/ai-tools/deals-pack.js.map +2 -2
- package/dist/modules/customers/ai-tools/people-pack.js +1 -4
- package/dist/modules/customers/ai-tools/people-pack.js.map +2 -2
- package/dist/modules/customers/api/activities/route.js +6 -48
- package/dist/modules/customers/api/activities/route.js.map +2 -2
- package/dist/modules/customers/api/companies/[id]/people/route.js +64 -20
- package/dist/modules/customers/api/companies/[id]/people/route.js.map +2 -2
- package/dist/modules/customers/api/companies/[id]/route.js +94 -17
- package/dist/modules/customers/api/companies/[id]/route.js.map +2 -2
- package/dist/modules/customers/api/dashboard/widgets/customer-todos/route.js +5 -8
- package/dist/modules/customers/api/dashboard/widgets/customer-todos/route.js.map +2 -2
- package/dist/modules/customers/api/deals/[id]/companies/route.js +1 -1
- package/dist/modules/customers/api/deals/[id]/companies/route.js.map +2 -2
- package/dist/modules/customers/api/deals/[id]/people/route.js +1 -1
- package/dist/modules/customers/api/deals/[id]/people/route.js.map +2 -2
- package/dist/modules/customers/api/deals/[id]/route.js +25 -8
- package/dist/modules/customers/api/deals/[id]/route.js.map +2 -2
- package/dist/modules/customers/api/deals/[id]/stats/route.js +22 -3
- package/dist/modules/customers/api/deals/[id]/stats/route.js.map +2 -2
- package/dist/modules/customers/api/deals/aggregate/route.js +4 -11
- package/dist/modules/customers/api/deals/aggregate/route.js.map +2 -2
- package/dist/modules/customers/api/deals/map/route.js +1 -2
- package/dist/modules/customers/api/deals/map/route.js.map +2 -2
- package/dist/modules/customers/api/deals/route.js +1 -38
- package/dist/modules/customers/api/deals/route.js.map +2 -2
- package/dist/modules/customers/api/entity-roles-factory.js +4 -4
- package/dist/modules/customers/api/entity-roles-factory.js.map +2 -2
- package/dist/modules/customers/api/interactions/route.js +1 -3
- package/dist/modules/customers/api/interactions/route.js.map +2 -2
- package/dist/modules/customers/api/interactions/tasks/route.js +4 -27
- package/dist/modules/customers/api/interactions/tasks/route.js.map +2 -2
- package/dist/modules/customers/api/people/[id]/companies/[linkId]/route.js +3 -4
- package/dist/modules/customers/api/people/[id]/companies/[linkId]/route.js.map +2 -2
- package/dist/modules/customers/api/people/[id]/companies/context.js +1 -1
- package/dist/modules/customers/api/people/[id]/companies/context.js.map +2 -2
- package/dist/modules/customers/api/people/[id]/companies/enriched/route.js +1 -1
- package/dist/modules/customers/api/people/[id]/companies/enriched/route.js.map +2 -2
- package/dist/modules/customers/api/people/[id]/route.js +10 -11
- package/dist/modules/customers/api/people/[id]/route.js.map +2 -2
- package/dist/modules/customers/api/people/check-phone/route.js +9 -51
- package/dist/modules/customers/api/people/check-phone/route.js.map +2 -2
- package/dist/modules/customers/api/todos/route.js +5 -30
- package/dist/modules/customers/api/todos/route.js.map +2 -2
- package/dist/modules/customers/backend/customers/companies/page.js +4 -6
- package/dist/modules/customers/backend/customers/companies/page.js.map +2 -2
- package/dist/modules/customers/backend/customers/deals/[id]/page.js +1 -6
- package/dist/modules/customers/backend/customers/deals/[id]/page.js.map +2 -2
- package/dist/modules/customers/backend/customers/deals/page.js +4 -7
- package/dist/modules/customers/backend/customers/deals/page.js.map +2 -2
- package/dist/modules/customers/backend/customers/deals/pipeline/components/Lane.js +13 -4
- package/dist/modules/customers/backend/customers/deals/pipeline/components/Lane.js.map +2 -2
- package/dist/modules/customers/backend/customers/deals/pipeline/components/StatusFilterPopover.js +14 -85
- package/dist/modules/customers/backend/customers/deals/pipeline/components/StatusFilterPopover.js.map +2 -2
- package/dist/modules/customers/backend/customers/people/page.js +4 -6
- package/dist/modules/customers/backend/customers/people/page.js.map +2 -2
- package/dist/modules/customers/backend/hooks/useEmailDuplicateCheck.js +3 -9
- package/dist/modules/customers/backend/hooks/useEmailDuplicateCheck.js.map +2 -2
- package/dist/modules/customers/commands/deals.js +34 -21
- package/dist/modules/customers/commands/deals.js.map +2 -2
- package/dist/modules/customers/commands/interactions.js.map +1 -1
- package/dist/modules/customers/commands/personCompanyLinks.js +2 -131
- package/dist/modules/customers/commands/personCompanyLinks.js.map +2 -2
- package/dist/modules/customers/components/CustomerTodosTable.js +0 -1
- package/dist/modules/customers/components/CustomerTodosTable.js.map +2 -2
- package/dist/modules/customers/components/DealsKpiStrip.js +6 -7
- package/dist/modules/customers/components/DealsKpiStrip.js.map +2 -2
- package/dist/modules/customers/components/calendar/AgendaList.js +2 -2
- package/dist/modules/customers/components/calendar/AgendaList.js.map +2 -2
- package/dist/modules/customers/components/calendar/CalendarEventEditor.js +1 -1
- package/dist/modules/customers/components/calendar/CalendarEventEditor.js.map +2 -2
- package/dist/modules/customers/components/calendar/CalendarScreen.js +1 -1
- package/dist/modules/customers/components/calendar/CalendarScreen.js.map +2 -2
- package/dist/modules/customers/components/calendar/CalendarSettingsModal.js +1 -1
- package/dist/modules/customers/components/calendar/CalendarSettingsModal.js.map +2 -2
- package/dist/modules/customers/components/calendar/EventBlock.js +1 -1
- package/dist/modules/customers/components/calendar/EventBlock.js.map +2 -2
- package/dist/modules/customers/components/calendar/EventPeekPopover.js +2 -3
- package/dist/modules/customers/components/calendar/EventPeekPopover.js.map +2 -2
- package/dist/modules/customers/components/calendar/editor/PeopleField.js +5 -40
- package/dist/modules/customers/components/calendar/editor/PeopleField.js.map +2 -2
- package/dist/modules/customers/components/calendar/editor/hooks.js +1 -2
- package/dist/modules/customers/components/calendar/editor/hooks.js.map +2 -2
- package/dist/modules/customers/components/calendar/types.js +1 -1
- package/dist/modules/customers/components/calendar/types.js.map +2 -2
- package/dist/modules/customers/components/detail/AssignRoleDialog.js +33 -28
- package/dist/modules/customers/components/detail/AssignRoleDialog.js.map +2 -2
- package/dist/modules/customers/components/detail/CompanyKpiBar.js +4 -5
- package/dist/modules/customers/components/detail/CompanyKpiBar.js.map +2 -2
- package/dist/modules/customers/components/detail/CompanyPeopleSection.js +1 -3
- package/dist/modules/customers/components/detail/CompanyPeopleSection.js.map +2 -2
- package/dist/modules/customers/components/detail/DealForm.js +7 -19
- package/dist/modules/customers/components/detail/DealForm.js.map +2 -2
- package/dist/modules/customers/components/detail/DealsSection.js +5 -6
- package/dist/modules/customers/components/detail/DealsSection.js.map +2 -2
- package/dist/modules/customers/components/detail/EntityTagsDialog.js +11 -35
- package/dist/modules/customers/components/detail/EntityTagsDialog.js.map +2 -2
- package/dist/modules/customers/components/detail/PersonCompaniesSection.js +1 -3
- package/dist/modules/customers/components/detail/PersonCompaniesSection.js.map +2 -2
- package/dist/modules/customers/components/detail/hooks/usePersonTasks.js +13 -19
- package/dist/modules/customers/components/detail/hooks/usePersonTasks.js.map +2 -2
- package/dist/modules/customers/components/detail/schedule/ParticipantsField.js +4 -4
- package/dist/modules/customers/components/detail/schedule/ParticipantsField.js.map +2 -2
- package/dist/modules/customers/components/detail/schedule/useScheduleFormState.js +3 -3
- package/dist/modules/customers/components/detail/schedule/useScheduleFormState.js.map +2 -2
- package/dist/modules/customers/components/detail/utils.js +5 -5
- package/dist/modules/customers/components/detail/utils.js.map +2 -2
- package/dist/modules/customers/data/entities.js.map +1 -1
- package/dist/modules/customers/data/validators.js +3 -32
- package/dist/modules/customers/data/validators.js.map +2 -2
- package/dist/modules/customers/events.js +0 -5
- package/dist/modules/customers/events.js.map +2 -2
- package/dist/modules/customers/lib/calendar/conflicts.js +2 -8
- package/dist/modules/customers/lib/calendar/conflicts.js.map +2 -2
- package/dist/modules/customers/lib/calendar/editorPayload.js +2 -3
- package/dist/modules/customers/lib/calendar/editorPayload.js.map +2 -2
- package/dist/modules/customers/lib/calendar/mapItem.js +3 -8
- package/dist/modules/customers/lib/calendar/mapItem.js.map +2 -2
- package/dist/modules/customers/lib/dealStatus.js +0 -30
- package/dist/modules/customers/lib/dealStatus.js.map +2 -2
- package/dist/modules/customers/lib/findPeopleByAddresses.js +0 -1
- package/dist/modules/customers/lib/findPeopleByAddresses.js.map +2 -2
- package/dist/modules/customers/lib/personCompanies.js +2 -100
- package/dist/modules/customers/lib/personCompanies.js.map +2 -2
- package/dist/modules/customers/lib/todoCompatibility.js +0 -12
- package/dist/modules/customers/lib/todoCompatibility.js.map +2 -2
- package/dist/modules/dashboards/lib/widgetScope.js +1 -6
- package/dist/modules/dashboards/lib/widgetScope.js.map +2 -2
- package/dist/modules/data_sync/backend/data-sync/page.js +1 -3
- package/dist/modules/data_sync/backend/data-sync/page.js.map +2 -2
- package/dist/modules/data_sync/lib/sync-engine.js +6 -72
- package/dist/modules/data_sync/lib/sync-engine.js.map +2 -2
- package/dist/modules/data_sync/workers/sync-export.js +1 -5
- package/dist/modules/data_sync/workers/sync-export.js.map +2 -2
- package/dist/modules/data_sync/workers/sync-import.js +1 -5
- package/dist/modules/data_sync/workers/sync-import.js.map +2 -2
- package/dist/modules/devices/api/admin/devices/[id]/route.js +32 -5
- package/dist/modules/devices/api/admin/devices/[id]/route.js.map +2 -2
- package/dist/modules/devices/api/admin/devices/route.js +1 -14
- package/dist/modules/devices/api/admin/devices/route.js.map +2 -2
- package/dist/modules/devices/api/deviceList.js +12 -99
- package/dist/modules/devices/api/deviceList.js.map +2 -2
- package/dist/modules/devices/api/openapi.js +1 -3
- package/dist/modules/devices/api/openapi.js.map +2 -2
- package/dist/modules/devices/api/route.js +1 -9
- package/dist/modules/devices/api/route.js.map +2 -2
- package/dist/modules/devices/backend/devices/[id]/page.js +8 -8
- package/dist/modules/devices/backend/devices/[id]/page.js.map +2 -2
- package/dist/modules/devices/backend/devices/page.js +13 -15
- package/dist/modules/devices/backend/devices/page.js.map +2 -2
- package/dist/modules/directory/backend/directory/organizations/page.js +1 -2
- package/dist/modules/directory/backend/directory/organizations/page.js.map +2 -2
- package/dist/modules/directory/backend/directory/tenants/page.js +1 -2
- package/dist/modules/directory/backend/directory/tenants/page.js.map +2 -2
- package/dist/modules/directory/di.js +0 -9
- package/dist/modules/directory/di.js.map +2 -2
- package/dist/modules/directory/utils/organizationScope.js.map +2 -2
- package/dist/modules/entities/api/records.js +2 -4
- package/dist/modules/entities/api/records.js.map +2 -2
- package/dist/modules/entities/backend/entities/user/[entityId]/records/page.js +1 -3
- package/dist/modules/entities/backend/entities/user/[entityId]/records/page.js.map +2 -2
- package/dist/modules/eudr/api/plots/route.js +1 -5
- package/dist/modules/eudr/api/plots/route.js.map +2 -2
- package/dist/modules/eudr/backend/eudr/evidence-submissions/[id]/page.meta.js +3 -1
- package/dist/modules/eudr/backend/eudr/evidence-submissions/[id]/page.meta.js.map +2 -2
- package/dist/modules/eudr/backend/eudr/evidence-submissions/create/page.meta.js +1 -0
- package/dist/modules/eudr/backend/eudr/evidence-submissions/create/page.meta.js.map +2 -2
- package/dist/modules/eudr/backend/eudr/evidence-submissions/page.js +0 -3
- package/dist/modules/eudr/backend/eudr/evidence-submissions/page.js.map +2 -2
- package/dist/modules/eudr/backend/eudr/evidence-submissions/page.meta.js +4 -1
- package/dist/modules/eudr/backend/eudr/evidence-submissions/page.meta.js.map +2 -2
- package/dist/modules/eudr/backend/eudr/page.meta.js +2 -2
- package/dist/modules/eudr/backend/eudr/page.meta.js.map +2 -2
- package/dist/modules/eudr/backend/eudr/plots/[id]/page.js +8 -2
- package/dist/modules/eudr/backend/eudr/plots/[id]/page.js.map +2 -2
- package/dist/modules/eudr/backend/eudr/plots/[id]/page.meta.js +3 -1
- package/dist/modules/eudr/backend/eudr/plots/[id]/page.meta.js.map +2 -2
- package/dist/modules/eudr/backend/eudr/plots/create/page.js +8 -2
- package/dist/modules/eudr/backend/eudr/plots/create/page.js.map +2 -2
- package/dist/modules/eudr/backend/eudr/plots/create/page.meta.js +1 -0
- package/dist/modules/eudr/backend/eudr/plots/create/page.meta.js.map +2 -2
- package/dist/modules/eudr/backend/eudr/plots/page.js +0 -3
- package/dist/modules/eudr/backend/eudr/plots/page.js.map +2 -2
- package/dist/modules/eudr/backend/eudr/plots/page.meta.js +4 -1
- package/dist/modules/eudr/backend/eudr/plots/page.meta.js.map +2 -2
- package/dist/modules/eudr/backend/eudr/product-mappings/[id]/page.meta.js +3 -1
- package/dist/modules/eudr/backend/eudr/product-mappings/[id]/page.meta.js.map +2 -2
- package/dist/modules/eudr/backend/eudr/product-mappings/create/page.meta.js +1 -0
- package/dist/modules/eudr/backend/eudr/product-mappings/create/page.meta.js.map +2 -2
- package/dist/modules/eudr/backend/eudr/product-mappings/page.js +0 -3
- package/dist/modules/eudr/backend/eudr/product-mappings/page.js.map +2 -2
- package/dist/modules/eudr/backend/eudr/product-mappings/page.meta.js +4 -1
- package/dist/modules/eudr/backend/eudr/product-mappings/page.meta.js.map +2 -2
- package/dist/modules/eudr/backend/eudr/risk-assessments/[id]/page.meta.js +3 -1
- package/dist/modules/eudr/backend/eudr/risk-assessments/[id]/page.meta.js.map +2 -2
- package/dist/modules/eudr/backend/eudr/risk-assessments/create/page.meta.js +1 -0
- package/dist/modules/eudr/backend/eudr/risk-assessments/create/page.meta.js.map +2 -2
- package/dist/modules/eudr/backend/eudr/risk-assessments/page.js +0 -3
- package/dist/modules/eudr/backend/eudr/risk-assessments/page.js.map +2 -2
- package/dist/modules/eudr/backend/eudr/risk-assessments/page.meta.js +4 -1
- package/dist/modules/eudr/backend/eudr/risk-assessments/page.meta.js.map +2 -2
- package/dist/modules/eudr/backend/eudr/statements/[id]/page.js +2 -0
- package/dist/modules/eudr/backend/eudr/statements/[id]/page.js.map +2 -2
- package/dist/modules/eudr/backend/eudr/statements/[id]/page.meta.js +3 -1
- package/dist/modules/eudr/backend/eudr/statements/[id]/page.meta.js.map +2 -2
- package/dist/modules/eudr/backend/eudr/statements/create/page.meta.js +1 -0
- package/dist/modules/eudr/backend/eudr/statements/create/page.meta.js.map +2 -2
- package/dist/modules/eudr/backend/eudr/statements/page.js +30 -28
- package/dist/modules/eudr/backend/eudr/statements/page.js.map +2 -2
- package/dist/modules/eudr/backend/eudr/statements/page.meta.js +4 -1
- package/dist/modules/eudr/backend/eudr/statements/page.meta.js.map +2 -2
- package/dist/modules/eudr/commands/statements.js +8 -3
- package/dist/modules/eudr/commands/statements.js.map +2 -2
- package/dist/modules/eudr/components/crudErrorI18n.js +21 -1
- package/dist/modules/eudr/components/crudErrorI18n.js.map +2 -2
- package/dist/modules/eudr/components/formConfig.js +6 -2
- package/dist/modules/eudr/components/formConfig.js.map +2 -2
- package/dist/modules/eudr/data/validators.js +1 -4
- package/dist/modules/eudr/data/validators.js.map +2 -2
- package/dist/modules/eudr/lib/statement-lifecycle.js +9 -1
- package/dist/modules/eudr/lib/statement-lifecycle.js.map +2 -2
- package/dist/modules/feature_toggles/components/FeatureTogglesTable.js +0 -1
- package/dist/modules/feature_toggles/components/FeatureTogglesTable.js.map +2 -2
- package/dist/modules/feature_toggles/components/OverridesTable.js +0 -1
- package/dist/modules/feature_toggles/components/OverridesTable.js.map +2 -2
- package/dist/modules/feature_toggles/defaults.json +8 -0
- package/dist/modules/inbox_ops/backend/inbox-ops/log/page.js +0 -3
- package/dist/modules/inbox_ops/backend/inbox-ops/log/page.js.map +2 -2
- package/dist/modules/inbox_ops/backend/inbox-ops/page.js +0 -3
- package/dist/modules/inbox_ops/backend/inbox-ops/page.js.map +2 -2
- package/dist/modules/inbox_ops/lib/htmlToPlainText.js +12 -1
- package/dist/modules/inbox_ops/lib/htmlToPlainText.js.map +2 -2
- package/dist/modules/integrations/api/[id]/credentials/route.js +1 -6
- package/dist/modules/integrations/api/[id]/credentials/route.js.map +2 -2
- package/dist/modules/integrations/backend/integrations/[id]/page.js +29 -38
- package/dist/modules/integrations/backend/integrations/[id]/page.js.map +2 -2
- package/dist/modules/integrations/backend/integrations/bundle/[id]/page.js +9 -36
- package/dist/modules/integrations/backend/integrations/bundle/[id]/page.js.map +2 -2
- package/dist/modules/integrations/data/validators.js +3 -11
- package/dist/modules/integrations/data/validators.js.map +2 -2
- package/dist/modules/integrations/lib/credentials-masking.js +2 -6
- package/dist/modules/integrations/lib/credentials-masking.js.map +2 -2
- package/dist/modules/messages/api/[id]/route.js +1 -29
- package/dist/modules/messages/api/[id]/route.js.map +2 -2
- package/dist/modules/messages/api/openapi.js +2 -17
- package/dist/modules/messages/api/openapi.js.map +2 -2
- package/dist/modules/messages/api/route.js +2 -17
- package/dist/modules/messages/api/route.js.map +2 -2
- package/dist/modules/messages/components/MessagesInboxPageClient.js +14 -7
- package/dist/modules/messages/components/MessagesInboxPageClient.js.map +2 -2
- package/dist/modules/messages/components/inboxFilters.js +0 -15
- package/dist/modules/messages/components/inboxFilters.js.map +2 -2
- package/dist/modules/messages/components/message-detail/hooks/useMessageDetailsConversation.js +1 -11
- package/dist/modules/messages/components/message-detail/hooks/useMessageDetailsConversation.js.map +2 -2
- package/dist/modules/messages/components/message-detail/panels/MessageHeader.js +1 -3
- package/dist/modules/messages/components/message-detail/panels/MessageHeader.js.map +2 -2
- package/dist/modules/messages/components/message-detail/panels/thread-panel.js +1 -2
- package/dist/modules/messages/components/message-detail/panels/thread-panel.js.map +2 -2
- package/dist/modules/messages/components/messageListLabels.js +2 -14
- package/dist/modules/messages/components/messageListLabels.js.map +2 -2
- package/dist/modules/messages/data/validators.js +4 -18
- package/dist/modules/messages/data/validators.js.map +2 -2
- package/dist/modules/payment_gateways/api/webhook/[provider]/route.js +6 -4
- package/dist/modules/payment_gateways/api/webhook/[provider]/route.js.map +2 -2
- package/dist/modules/payment_gateways/backend/payment-gateways/page.js +1 -3
- package/dist/modules/payment_gateways/backend/payment-gateways/page.js.map +2 -2
- package/dist/modules/payment_gateways/lib/webhook-processor.js +0 -7
- package/dist/modules/payment_gateways/lib/webhook-processor.js.map +2 -2
- package/dist/modules/planner/backend/planner/availability-rulesets/page.js +0 -3
- package/dist/modules/planner/backend/planner/availability-rulesets/page.js.map +2 -2
- package/dist/modules/push_notifications/backend/push_notifications/page.js +1 -3
- package/dist/modules/push_notifications/backend/push_notifications/page.js.map +2 -2
- package/dist/modules/push_notifications/backend/push_notifications/send/page.js +1 -1
- package/dist/modules/push_notifications/backend/push_notifications/send/page.js.map +2 -2
- package/dist/modules/query_index/lib/engine.js +51 -150
- package/dist/modules/query_index/lib/engine.js.map +2 -2
- package/dist/modules/query_index/lib/search-tokens.js +3 -79
- package/dist/modules/query_index/lib/search-tokens.js.map +2 -2
- package/dist/modules/resources/backend/resources/resource-types/page.js +1 -3
- package/dist/modules/resources/backend/resources/resource-types/page.js.map +2 -2
- package/dist/modules/resources/backend/resources/resources/page.js +1 -3
- package/dist/modules/resources/backend/resources/resources/page.js.map +2 -2
- package/dist/modules/sales/backend/sales/channels/offers/page.js +0 -3
- package/dist/modules/sales/backend/sales/channels/offers/page.js.map +2 -2
- package/dist/modules/sales/backend/sales/channels/page.js +0 -3
- package/dist/modules/sales/backend/sales/channels/page.js.map +2 -2
- package/dist/modules/sales/backend/sales/documents/[id]/page.js +8 -10
- package/dist/modules/sales/backend/sales/documents/[id]/page.js.map +2 -2
- package/dist/modules/sales/commands/documents.js +1 -79
- package/dist/modules/sales/commands/documents.js.map +2 -2
- package/dist/modules/sales/components/PriceWithCurrency.js +5 -7
- package/dist/modules/sales/components/PriceWithCurrency.js.map +2 -2
- package/dist/modules/sales/components/channels/SalesChannelOffersPanel.js +0 -3
- package/dist/modules/sales/components/channels/SalesChannelOffersPanel.js.map +2 -2
- package/dist/modules/sales/components/documents/AdjustmentsSection.js +6 -8
- package/dist/modules/sales/components/documents/AdjustmentsSection.js.map +2 -2
- package/dist/modules/sales/components/documents/ItemsSection.js +22 -51
- package/dist/modules/sales/components/documents/ItemsSection.js.map +2 -2
- package/dist/modules/sales/components/documents/LineItemDialog.js +19 -84
- package/dist/modules/sales/components/documents/LineItemDialog.js.map +2 -2
- package/dist/modules/sales/components/documents/PaymentsSection.js +9 -23
- package/dist/modules/sales/components/documents/PaymentsSection.js.map +2 -2
- package/dist/modules/sales/components/documents/ReturnsSection.js +6 -8
- package/dist/modules/sales/components/documents/ReturnsSection.js.map +2 -2
- package/dist/modules/sales/components/documents/SalesDocumentsTable.js +14 -68
- package/dist/modules/sales/components/documents/SalesDocumentsTable.js.map +2 -2
- package/dist/modules/sales/components/documents/SalesOrderDraftLines.js +5 -6
- package/dist/modules/sales/components/documents/SalesOrderDraftLines.js.map +2 -2
- package/dist/modules/sales/components/documents/ShipmentDialog.js +4 -5
- package/dist/modules/sales/components/documents/ShipmentDialog.js.map +2 -2
- package/dist/modules/sales/components/documents/ShipmentsSection.js +6 -8
- package/dist/modules/sales/components/documents/ShipmentsSection.js.map +2 -2
- package/dist/modules/sales/components/documents/lineItemUtils.js +2 -2
- package/dist/modules/sales/components/documents/lineItemUtils.js.map +2 -2
- package/dist/modules/sales/data/entities.js +2 -8
- package/dist/modules/sales/data/entities.js.map +2 -2
- package/dist/modules/sales/extension-points.js +0 -1
- package/dist/modules/sales/extension-points.js.map +2 -2
- package/dist/modules/sales/setup.js +0 -2
- package/dist/modules/sales/setup.js.map +2 -2
- package/dist/modules/sales/widgets/injection/document-history/widget.client.js +44 -2
- package/dist/modules/sales/widgets/injection/document-history/widget.client.js.map +2 -2
- package/dist/modules/sales/widgets/injection/payment-gateway-status-column/widget.js +2 -10
- package/dist/modules/sales/widgets/injection/payment-gateway-status-column/widget.js.map +2 -2
- package/dist/modules/sales/widgets/injection-table.js +7 -4
- package/dist/modules/sales/widgets/injection-table.js.map +2 -2
- package/dist/modules/staff/backend/staff/leave-requests/page.js +0 -3
- package/dist/modules/staff/backend/staff/leave-requests/page.js.map +2 -2
- package/dist/modules/staff/backend/staff/my-leave-requests/page.js +0 -3
- package/dist/modules/staff/backend/staff/my-leave-requests/page.js.map +2 -2
- package/dist/modules/staff/backend/staff/team-members/page.js +0 -3
- package/dist/modules/staff/backend/staff/team-members/page.js.map +2 -2
- package/dist/modules/staff/backend/staff/team-roles/page.js +0 -3
- package/dist/modules/staff/backend/staff/team-roles/page.js.map +2 -2
- package/dist/modules/staff/backend/staff/teams/[id]/edit/page.js +0 -3
- package/dist/modules/staff/backend/staff/teams/[id]/edit/page.js.map +2 -2
- package/dist/modules/staff/backend/staff/teams/page.js +0 -3
- package/dist/modules/staff/backend/staff/teams/page.js.map +2 -2
- package/dist/modules/staff/backend/staff/timesheets/page.js +18 -29
- package/dist/modules/staff/backend/staff/timesheets/page.js.map +2 -2
- package/dist/modules/staff/backend/staff/timesheets/projects/page.js +0 -3
- package/dist/modules/staff/backend/staff/timesheets/projects/page.js.map +2 -2
- package/dist/modules/sync_excel/lib/adapters/customers.js +0 -1
- package/dist/modules/sync_excel/lib/adapters/customers.js.map +2 -2
- package/dist/modules/warranty_claims/api/assignees/route.js +3 -3
- package/dist/modules/warranty_claims/api/assignees/route.js.map +2 -2
- package/dist/modules/warranty_claims/api/portal/attachments/route.js +2 -2
- package/dist/modules/warranty_claims/api/portal/attachments/route.js.map +2 -2
- package/dist/modules/warranty_claims/api/portal/claims/route.js +9 -12
- package/dist/modules/warranty_claims/api/portal/claims/route.js.map +2 -2
- package/dist/modules/warranty_claims/backend/page.js +0 -3
- package/dist/modules/warranty_claims/backend/page.js.map +2 -2
- package/dist/modules/warranty_claims/backend/warranty_claims/registrations/page.js +0 -3
- package/dist/modules/warranty_claims/backend/warranty_claims/registrations/page.js.map +2 -2
- package/dist/modules/warranty_claims/backend/warranty_claims/troubleshooting-guides/page.js +0 -3
- package/dist/modules/warranty_claims/backend/warranty_claims/troubleshooting-guides/page.js.map +2 -2
- package/dist/modules/warranty_claims/backend/warranty_claims/vendor-policies/page.js +0 -3
- package/dist/modules/warranty_claims/backend/warranty_claims/vendor-policies/page.js.map +2 -2
- package/dist/modules/warranty_claims/frontend/[orgSlug]/portal/claims/page.js +0 -3
- package/dist/modules/warranty_claims/frontend/[orgSlug]/portal/claims/page.js.map +2 -2
- package/dist/modules/wms/api/warehouses/route.js +9 -13
- package/dist/modules/wms/api/warehouses/route.js.map +2 -2
- package/dist/modules/wms/api/zones/route.js +2 -15
- package/dist/modules/wms/api/zones/route.js.map +2 -2
- package/dist/modules/wms/commands/configuration.js +9 -121
- package/dist/modules/wms/commands/configuration.js.map +2 -2
- package/dist/modules/wms/commands/inventory-actions.js +0 -3
- package/dist/modules/wms/commands/inventory-actions.js.map +2 -2
- package/dist/modules/wms/commands/shared.js +1 -9
- package/dist/modules/wms/commands/shared.js.map +2 -2
- package/dist/modules/wms/components/backend/WmsConfigurationPage.js +111 -76
- package/dist/modules/wms/components/backend/WmsConfigurationPage.js.map +3 -3
- package/dist/modules/wms/components/backend/WmsInventoryConsolePage.js +0 -1
- package/dist/modules/wms/components/backend/WmsInventoryConsolePage.js.map +2 -2
- package/dist/modules/wms/components/backend/WmsLocationDetailPage.js +20 -16
- package/dist/modules/wms/components/backend/WmsLocationDetailPage.js.map +2 -2
- package/dist/modules/wms/components/backend/WmsLotDetailPage.js +10 -6
- package/dist/modules/wms/components/backend/WmsLotDetailPage.js.map +2 -2
- package/dist/modules/wms/components/backend/WmsLotsListPage.js +0 -1
- package/dist/modules/wms/components/backend/WmsLotsListPage.js.map +2 -2
- package/dist/modules/wms/components/backend/WmsOperationalDashboardPage.js +11 -7
- package/dist/modules/wms/components/backend/WmsOperationalDashboardPage.js.map +2 -2
- package/dist/modules/wms/components/backend/WmsSkuDetailPage.js +10 -6
- package/dist/modules/wms/components/backend/WmsSkuDetailPage.js.map +2 -2
- package/dist/modules/wms/components/backend/inventoryMutationLoaders.js +20 -27
- package/dist/modules/wms/components/backend/inventoryMutationLoaders.js.map +2 -2
- package/dist/modules/workflows/backend/definitions/page.js +1 -3
- package/dist/modules/workflows/backend/definitions/page.js.map +2 -2
- package/dist/modules/workflows/backend/events/page.js +1 -3
- package/dist/modules/workflows/backend/events/page.js.map +2 -2
- package/dist/modules/workflows/backend/instances/page.js +1 -3
- package/dist/modules/workflows/backend/instances/page.js.map +2 -2
- package/dist/modules/workflows/backend/tasks/page.js +1 -3
- package/dist/modules/workflows/backend/tasks/page.js.map +2 -2
- package/dist/modules/workflows/lib/activity-executor.js +0 -4
- package/dist/modules/workflows/lib/activity-executor.js.map +2 -2
- package/package.json +10 -9
- package/src/helpers/integration/api.ts +1 -33
- package/src/helpers/integration/communicationChannelsFixtures.ts +1 -69
- package/src/modules/api_keys/api/keys/route.ts +1 -3
- package/src/modules/api_keys/backend/api-keys/page.tsx +1 -4
- package/src/modules/attachments/AGENTS.md +0 -15
- package/src/modules/attachments/api/route.ts +2 -2
- package/src/modules/attachments/components/AttachmentLibrary.tsx +0 -3
- package/src/modules/attachments/di.ts +0 -16
- package/src/modules/attachments/i18n/de.json +0 -5
- package/src/modules/attachments/i18n/en.json +0 -5
- package/src/modules/attachments/i18n/es.json +0 -5
- package/src/modules/attachments/i18n/ko.json +0 -5
- package/src/modules/attachments/i18n/pl.json +0 -5
- package/src/modules/attachments/index.ts +0 -10
- package/src/modules/attachments/lib/scoped-upload-service.ts +0 -46
- package/src/modules/attachments/lib/upload-limits.ts +2 -6
- package/src/modules/audit_logs/backend/audit-logs/page.tsx +0 -8
- package/src/modules/audit_logs/lib/display-helpers.tsx +32 -42
- package/src/modules/audit_logs/services/actionLogService.ts +11 -74
- package/src/modules/auth/acl.ts +6 -30
- package/src/modules/auth/api/feature-check.ts +3 -10
- package/src/modules/auth/api/login.ts +24 -9
- package/src/modules/auth/api/roles/acl/route.ts +39 -42
- package/src/modules/auth/api/routeError.ts +30 -0
- package/src/modules/auth/api/session/refresh.ts +1 -32
- package/src/modules/auth/api/users/acl/route.ts +101 -185
- package/src/modules/auth/backend/roles/[id]/edit/page.meta.ts +2 -5
- package/src/modules/auth/backend/roles/page.tsx +2 -4
- package/src/modules/auth/backend/users/[id]/edit/page.meta.ts +2 -5
- package/src/modules/auth/backend/users/page.tsx +2 -3
- package/src/modules/auth/components/AclEditor.tsx +33 -63
- package/src/modules/auth/data/entities.ts +1 -4
- package/src/modules/auth/data/validators.ts +0 -5
- package/src/modules/auth/di.ts +16 -46
- package/src/modules/auth/frontend/reset/[token]/page.tsx +0 -74
- package/src/modules/auth/i18n/de.json +0 -389
- package/src/modules/auth/i18n/en.json +0 -389
- package/src/modules/auth/i18n/es.json +0 -389
- package/src/modules/auth/i18n/ko.json +0 -389
- package/src/modules/auth/i18n/pl.json +2 -391
- package/src/modules/auth/lib/grantChecks.ts +0 -6
- package/src/modules/auth/services/authService.ts +2 -18
- package/src/modules/auth/services/rbacService.ts +24 -110
- package/src/modules/business_rules/backend/logs/page.tsx +1 -4
- package/src/modules/business_rules/backend/rules/[id]/page.meta.ts +5 -0
- package/src/modules/business_rules/backend/rules/create/page.meta.ts +5 -1
- package/src/modules/business_rules/backend/rules/page.tsx +1 -4
- package/src/modules/business_rules/backend/sets/[id]/page.meta.ts +5 -0
- package/src/modules/business_rules/backend/sets/create/page.meta.ts +5 -1
- package/src/modules/business_rules/backend/sets/page.tsx +1 -4
- package/src/modules/business_rules/lib/expression-evaluator.ts +9 -9
- package/src/modules/business_rules/lib/rule-evaluator.ts +9 -10
- package/src/modules/catalog/ai-agents.ts +1 -1
- package/src/modules/catalog/ai-tools/merchandising-pack.ts +2 -2
- package/src/modules/catalog/backend/catalog/products/MerchandisingAssistantSheet.tsx +5 -12
- package/src/modules/catalog/components/categories/CategoriesDataTable.tsx +0 -3
- package/src/modules/catalog/components/products/ProductsDataTable.tsx +0 -7
- package/src/modules/catalog/i18n/de.json +0 -1
- package/src/modules/catalog/i18n/en.json +0 -1
- package/src/modules/catalog/i18n/es.json +0 -1
- package/src/modules/catalog/i18n/ko.json +0 -1
- package/src/modules/catalog/i18n/pl.json +0 -1
- package/src/modules/catalog/widgets/injection/merchandising-assistant-trigger/widget.client.tsx +0 -4
- package/src/modules/communication_channels/api/post/channels/[id]/test-send/route.ts +1 -17
- package/src/modules/communication_channels/api/post/test-seed/route.ts +16 -155
- package/src/modules/communication_channels/backend/communication_channels/channels/page.tsx +0 -4
- package/src/modules/communication_channels/commands/ingest-inbound-message.ts +1 -38
- package/src/modules/communication_channels/di.ts +0 -7
- package/src/modules/communication_channels/lib/adapter.ts +0 -14
- package/src/modules/communication_channels/lib/email-capabilities.ts +0 -4
- package/src/modules/communication_channels/lib/test-seed.ts +4 -64
- package/src/modules/configs/i18n/de.json +0 -2
- package/src/modules/configs/i18n/en.json +0 -2
- package/src/modules/configs/i18n/es.json +0 -2
- package/src/modules/configs/i18n/ko.json +0 -2
- package/src/modules/configs/i18n/pl.json +0 -2
- package/src/modules/configs/lib/system-status.ts +0 -9
- package/src/modules/currencies/backend/currencies/page.tsx +1 -4
- package/src/modules/currencies/backend/exchange-rates/page.tsx +1 -4
- package/src/modules/customer_accounts/api/admin/domain-mappings.ts +0 -7
- package/src/modules/customer_accounts/backend/customer_accounts/roles/page.tsx +1 -4
- package/src/modules/customer_accounts/backend/customer_accounts/settings/CustomerAccountsSettingsPageClient.tsx +138 -0
- package/src/modules/customer_accounts/backend/customer_accounts/settings/page.tsx +8 -132
- package/src/modules/customer_accounts/backend/customer_accounts/users/PortalUsersPageClient.tsx +598 -0
- package/src/modules/customer_accounts/backend/customer_accounts/users/[id]/PortalUserDetailPageClient.tsx +838 -0
- package/src/modules/customer_accounts/backend/customer_accounts/users/[id]/page.tsx +6 -838
- package/src/modules/customer_accounts/backend/customer_accounts/users/page.tsx +6 -590
- package/src/modules/customer_accounts/extension-points.ts +1 -1
- package/src/modules/customer_accounts/lib/portalUrl.ts +112 -0
- package/src/modules/customer_accounts/services/domainMappingService.ts +0 -10
- package/src/modules/customers/ai-tools/companies-pack.ts +1 -4
- package/src/modules/customers/ai-tools/deal-analyzer-pack.ts +2 -17
- package/src/modules/customers/ai-tools/deals-pack.ts +1 -66
- package/src/modules/customers/ai-tools/people-pack.ts +1 -4
- package/src/modules/customers/api/activities/route.ts +0 -45
- package/src/modules/customers/api/companies/[id]/people/route.ts +73 -24
- package/src/modules/customers/api/companies/[id]/route.ts +107 -24
- package/src/modules/customers/api/dashboard/widgets/customer-todos/route.ts +8 -16
- package/src/modules/customers/api/deals/[id]/companies/route.ts +1 -4
- package/src/modules/customers/api/deals/[id]/people/route.ts +1 -4
- package/src/modules/customers/api/deals/[id]/route.ts +28 -17
- package/src/modules/customers/api/deals/[id]/stats/route.ts +25 -10
- package/src/modules/customers/api/deals/aggregate/route.ts +4 -14
- package/src/modules/customers/api/deals/map/route.ts +0 -1
- package/src/modules/customers/api/deals/route.ts +1 -50
- package/src/modules/customers/api/entity-roles-factory.ts +4 -8
- package/src/modules/customers/api/interactions/route.ts +2 -8
- package/src/modules/customers/api/interactions/tasks/route.ts +1 -24
- package/src/modules/customers/api/people/[id]/companies/[linkId]/route.ts +4 -12
- package/src/modules/customers/api/people/[id]/companies/context.ts +1 -4
- package/src/modules/customers/api/people/[id]/companies/enriched/route.ts +1 -4
- package/src/modules/customers/api/people/[id]/route.ts +11 -16
- package/src/modules/customers/api/people/check-phone/route.ts +10 -75
- package/src/modules/customers/api/todos/route.ts +2 -27
- package/src/modules/customers/backend/customers/companies/page.tsx +4 -7
- package/src/modules/customers/backend/customers/deals/[id]/page.tsx +2 -7
- package/src/modules/customers/backend/customers/deals/page.tsx +4 -10
- package/src/modules/customers/backend/customers/deals/pipeline/components/Lane.tsx +14 -5
- package/src/modules/customers/backend/customers/deals/pipeline/components/StatusFilterPopover.tsx +27 -109
- package/src/modules/customers/backend/customers/people/page.tsx +4 -7
- package/src/modules/customers/backend/hooks/useEmailDuplicateCheck.ts +4 -12
- package/src/modules/customers/commands/deals.ts +59 -34
- package/src/modules/customers/commands/interactions.ts +1 -1
- package/src/modules/customers/commands/personCompanyLinks.ts +8 -224
- package/src/modules/customers/components/CustomerTodosTable.tsx +0 -2
- package/src/modules/customers/components/DealsKpiStrip.tsx +7 -7
- package/src/modules/customers/components/calendar/AgendaList.tsx +3 -3
- package/src/modules/customers/components/calendar/CalendarEventEditor.tsx +1 -1
- package/src/modules/customers/components/calendar/CalendarScreen.tsx +1 -1
- package/src/modules/customers/components/calendar/CalendarSettingsModal.tsx +1 -1
- package/src/modules/customers/components/calendar/EventBlock.tsx +2 -2
- package/src/modules/customers/components/calendar/EventPeekPopover.tsx +2 -4
- package/src/modules/customers/components/calendar/editor/PeopleField.tsx +5 -61
- package/src/modules/customers/components/calendar/editor/hooks.ts +1 -7
- package/src/modules/customers/components/calendar/types.ts +2 -2
- package/src/modules/customers/components/detail/AssignRoleDialog.tsx +12 -7
- package/src/modules/customers/components/detail/CompanyKpiBar.tsx +4 -5
- package/src/modules/customers/components/detail/CompanyPeopleSection.tsx +1 -8
- package/src/modules/customers/components/detail/DealForm.tsx +2 -22
- package/src/modules/customers/components/detail/DealsSection.tsx +5 -11
- package/src/modules/customers/components/detail/EntityTagsDialog.tsx +12 -58
- package/src/modules/customers/components/detail/PersonCompaniesSection.tsx +1 -8
- package/src/modules/customers/components/detail/hooks/usePersonTasks.ts +14 -23
- package/src/modules/customers/components/detail/schedule/ParticipantsField.tsx +5 -5
- package/src/modules/customers/components/detail/schedule/useScheduleFormState.ts +5 -5
- package/src/modules/customers/components/detail/types.ts +1 -1
- package/src/modules/customers/components/detail/utils.ts +5 -15
- package/src/modules/customers/data/entities.ts +1 -1
- package/src/modules/customers/data/validators.ts +9 -50
- package/src/modules/customers/events.ts +0 -5
- package/src/modules/customers/i18n/de.json +1 -9
- package/src/modules/customers/i18n/en.json +1 -9
- package/src/modules/customers/i18n/es.json +1 -9
- package/src/modules/customers/i18n/ko.json +1 -9
- package/src/modules/customers/i18n/pl.json +1 -9
- package/src/modules/customers/lib/calendar/conflicts.ts +2 -10
- package/src/modules/customers/lib/calendar/editorPayload.ts +3 -4
- package/src/modules/customers/lib/calendar/mapItem.ts +3 -8
- package/src/modules/customers/lib/dealStatus.ts +0 -42
- package/src/modules/customers/lib/findPeopleByAddresses.ts +6 -8
- package/src/modules/customers/lib/personCompanies.ts +1 -136
- package/src/modules/customers/lib/todoCompatibility.ts +1 -19
- package/src/modules/dashboards/i18n/es.json +4 -4
- package/src/modules/dashboards/i18n/pl.json +7 -7
- package/src/modules/dashboards/lib/widgetScope.ts +0 -6
- package/src/modules/data_sync/AGENTS.md +1 -1
- package/src/modules/data_sync/backend/data-sync/page.tsx +1 -4
- package/src/modules/data_sync/lib/adapter.ts +0 -36
- package/src/modules/data_sync/lib/sync-engine.ts +5 -113
- package/src/modules/data_sync/workers/sync-export.ts +0 -4
- package/src/modules/data_sync/workers/sync-import.ts +0 -4
- package/src/modules/devices/AGENTS.md +0 -8
- package/src/modules/devices/api/admin/devices/[id]/route.ts +34 -5
- package/src/modules/devices/api/admin/devices/route.ts +1 -14
- package/src/modules/devices/api/deviceList.ts +11 -135
- package/src/modules/devices/api/openapi.ts +1 -9
- package/src/modules/devices/api/route.ts +1 -9
- package/src/modules/devices/backend/devices/[id]/page.tsx +15 -15
- package/src/modules/devices/backend/devices/page.tsx +21 -24
- package/src/modules/directory/backend/directory/organizations/page.tsx +1 -3
- package/src/modules/directory/backend/directory/tenants/page.tsx +1 -3
- package/src/modules/directory/di.ts +2 -14
- package/src/modules/directory/utils/organizationScope.ts +15 -4
- package/src/modules/entities/api/records.ts +0 -2
- package/src/modules/entities/backend/entities/user/[entityId]/records/page.tsx +1 -4
- package/src/modules/eudr/api/plots/route.ts +0 -4
- package/src/modules/eudr/backend/eudr/evidence-submissions/[id]/page.meta.ts +2 -0
- package/src/modules/eudr/backend/eudr/evidence-submissions/create/page.meta.ts +1 -0
- package/src/modules/eudr/backend/eudr/evidence-submissions/page.meta.ts +4 -1
- package/src/modules/eudr/backend/eudr/evidence-submissions/page.tsx +0 -4
- package/src/modules/eudr/backend/eudr/page.meta.ts +2 -2
- package/src/modules/eudr/backend/eudr/plots/[id]/page.meta.ts +2 -0
- package/src/modules/eudr/backend/eudr/plots/[id]/page.tsx +8 -2
- package/src/modules/eudr/backend/eudr/plots/create/page.meta.ts +1 -0
- package/src/modules/eudr/backend/eudr/plots/create/page.tsx +8 -2
- package/src/modules/eudr/backend/eudr/plots/page.meta.ts +4 -1
- package/src/modules/eudr/backend/eudr/plots/page.tsx +0 -4
- package/src/modules/eudr/backend/eudr/product-mappings/[id]/page.meta.ts +2 -0
- package/src/modules/eudr/backend/eudr/product-mappings/create/page.meta.ts +1 -0
- package/src/modules/eudr/backend/eudr/product-mappings/page.meta.ts +4 -1
- package/src/modules/eudr/backend/eudr/product-mappings/page.tsx +0 -4
- package/src/modules/eudr/backend/eudr/risk-assessments/[id]/page.meta.ts +2 -0
- package/src/modules/eudr/backend/eudr/risk-assessments/create/page.meta.ts +1 -0
- package/src/modules/eudr/backend/eudr/risk-assessments/page.meta.ts +4 -1
- package/src/modules/eudr/backend/eudr/risk-assessments/page.tsx +0 -4
- package/src/modules/eudr/backend/eudr/statements/[id]/page.meta.ts +2 -0
- package/src/modules/eudr/backend/eudr/statements/[id]/page.tsx +2 -0
- package/src/modules/eudr/backend/eudr/statements/create/page.meta.ts +1 -0
- package/src/modules/eudr/backend/eudr/statements/page.meta.ts +4 -1
- package/src/modules/eudr/backend/eudr/statements/page.tsx +32 -30
- package/src/modules/eudr/commands/statements.ts +7 -2
- package/src/modules/eudr/components/crudErrorI18n.ts +31 -0
- package/src/modules/eudr/components/formConfig.tsx +9 -1
- package/src/modules/eudr/data/validators.ts +1 -16
- package/src/modules/eudr/i18n/de.json +3 -2
- package/src/modules/eudr/i18n/en.json +3 -2
- package/src/modules/eudr/i18n/es.json +3 -2
- package/src/modules/eudr/i18n/ko.json +3 -2
- package/src/modules/eudr/i18n/pl.json +3 -2
- package/src/modules/eudr/lib/statement-lifecycle.ts +8 -0
- package/src/modules/feature_toggles/components/FeatureTogglesTable.tsx +1 -2
- package/src/modules/feature_toggles/components/OverridesTable.tsx +1 -2
- package/src/modules/feature_toggles/defaults.json +8 -0
- package/src/modules/inbox_ops/backend/inbox-ops/log/page.tsx +0 -4
- package/src/modules/inbox_ops/backend/inbox-ops/page.tsx +0 -4
- package/src/modules/inbox_ops/lib/htmlToPlainText.ts +17 -1
- package/src/modules/integrations/api/[id]/credentials/route.ts +4 -6
- package/src/modules/integrations/backend/integrations/[id]/page.tsx +31 -61
- package/src/modules/integrations/backend/integrations/bundle/[id]/page.tsx +9 -44
- package/src/modules/integrations/data/validators.ts +2 -12
- package/src/modules/integrations/i18n/de.json +0 -1
- package/src/modules/integrations/i18n/en.json +0 -1
- package/src/modules/integrations/i18n/es.json +0 -1
- package/src/modules/integrations/i18n/ko.json +0 -1
- package/src/modules/integrations/i18n/pl.json +0 -1
- package/src/modules/integrations/lib/credentials-masking.ts +6 -10
- package/src/modules/messages/api/[id]/route.ts +1 -55
- package/src/modules/messages/api/openapi.ts +0 -20
- package/src/modules/messages/api/route.ts +2 -31
- package/src/modules/messages/components/MessagesInboxPageClient.tsx +16 -9
- package/src/modules/messages/components/inboxFilters.ts +0 -36
- package/src/modules/messages/components/message-detail/hooks/useMessageDetailsConversation.ts +1 -14
- package/src/modules/messages/components/message-detail/panels/MessageHeader.tsx +1 -3
- package/src/modules/messages/components/message-detail/panels/thread-panel.tsx +1 -2
- package/src/modules/messages/components/message-detail/types.ts +0 -3
- package/src/modules/messages/components/messageListLabels.ts +3 -52
- package/src/modules/messages/data/validators.ts +4 -43
- package/src/modules/payment_gateways/api/webhook/[provider]/route.ts +6 -4
- package/src/modules/payment_gateways/backend/payment-gateways/page.tsx +1 -4
- package/src/modules/payment_gateways/lib/webhook-processor.ts +0 -11
- package/src/modules/planner/backend/planner/availability-rulesets/page.tsx +0 -4
- package/src/modules/push_notifications/backend/push_notifications/page.tsx +1 -4
- package/src/modules/push_notifications/backend/push_notifications/send/page.tsx +4 -4
- package/src/modules/query_index/lib/engine.ts +61 -249
- package/src/modules/query_index/lib/search-tokens.ts +3 -135
- package/src/modules/resources/backend/resources/resource-types/page.tsx +1 -4
- package/src/modules/resources/backend/resources/resources/page.tsx +1 -4
- package/src/modules/sales/backend/sales/channels/offers/page.tsx +0 -4
- package/src/modules/sales/backend/sales/channels/page.tsx +0 -4
- package/src/modules/sales/backend/sales/documents/[id]/page.tsx +8 -14
- package/src/modules/sales/commands/documents.ts +0 -93
- package/src/modules/sales/components/PriceWithCurrency.tsx +5 -17
- package/src/modules/sales/components/channels/SalesChannelOffersPanel.tsx +0 -4
- package/src/modules/sales/components/documents/AdjustmentsSection.tsx +5 -6
- package/src/modules/sales/components/documents/ItemsSection.tsx +18 -56
- package/src/modules/sales/components/documents/LineItemDialog.tsx +21 -138
- package/src/modules/sales/components/documents/PaymentsSection.tsx +9 -20
- package/src/modules/sales/components/documents/ReturnsSection.tsx +5 -6
- package/src/modules/sales/components/documents/SalesDocumentsTable.tsx +14 -106
- package/src/modules/sales/components/documents/SalesOrderDraftLines.tsx +5 -6
- package/src/modules/sales/components/documents/ShipmentDialog.tsx +4 -5
- package/src/modules/sales/components/documents/ShipmentsSection.tsx +5 -6
- package/src/modules/sales/components/documents/lineItemUtils.ts +2 -7
- package/src/modules/sales/data/entities.ts +0 -6
- package/src/modules/sales/extension-points.ts +0 -1
- package/src/modules/sales/i18n/de.json +37 -8
- package/src/modules/sales/i18n/en.json +37 -8
- package/src/modules/sales/i18n/es.json +37 -8
- package/src/modules/sales/i18n/ko.json +37 -8
- package/src/modules/sales/i18n/pl.json +37 -8
- package/src/modules/sales/migrations/.snapshot-open-mercato.json +0 -60
- package/src/modules/sales/setup.ts +0 -2
- package/src/modules/sales/widgets/injection/document-history/widget.client.tsx +42 -2
- package/src/modules/sales/widgets/injection/payment-gateway-status-column/widget.ts +1 -9
- package/src/modules/sales/widgets/injection-table.ts +7 -4
- package/src/modules/staff/backend/staff/leave-requests/page.tsx +0 -4
- package/src/modules/staff/backend/staff/my-leave-requests/page.tsx +0 -4
- package/src/modules/staff/backend/staff/team-members/page.tsx +0 -6
- package/src/modules/staff/backend/staff/team-roles/page.tsx +0 -4
- package/src/modules/staff/backend/staff/teams/[id]/edit/page.tsx +0 -4
- package/src/modules/staff/backend/staff/teams/page.tsx +0 -4
- package/src/modules/staff/backend/staff/timesheets/page.tsx +1 -12
- package/src/modules/staff/backend/staff/timesheets/projects/page.tsx +0 -4
- package/src/modules/sync_excel/lib/adapters/customers.ts +0 -5
- package/src/modules/warranty_claims/api/assignees/route.ts +3 -3
- package/src/modules/warranty_claims/api/portal/attachments/route.ts +2 -2
- package/src/modules/warranty_claims/api/portal/claims/route.ts +9 -12
- package/src/modules/warranty_claims/backend/page.tsx +0 -4
- package/src/modules/warranty_claims/backend/warranty_claims/registrations/page.tsx +0 -4
- package/src/modules/warranty_claims/backend/warranty_claims/troubleshooting-guides/page.tsx +0 -4
- package/src/modules/warranty_claims/backend/warranty_claims/vendor-policies/page.tsx +0 -4
- package/src/modules/warranty_claims/frontend/[orgSlug]/portal/claims/page.tsx +0 -4
- package/src/modules/wms/api/warehouses/route.ts +9 -13
- package/src/modules/wms/api/zones/route.ts +0 -16
- package/src/modules/wms/commands/configuration.ts +10 -159
- package/src/modules/wms/commands/inventory-actions.ts +0 -3
- package/src/modules/wms/commands/shared.ts +0 -17
- package/src/modules/wms/components/backend/WmsConfigurationPage.tsx +141 -95
- package/src/modules/wms/components/backend/WmsInventoryConsolePage.tsx +0 -2
- package/src/modules/wms/components/backend/WmsLocationDetailPage.tsx +30 -26
- package/src/modules/wms/components/backend/WmsLotDetailPage.tsx +21 -17
- package/src/modules/wms/components/backend/WmsLotsListPage.tsx +0 -2
- package/src/modules/wms/components/backend/WmsOperationalDashboardPage.tsx +17 -13
- package/src/modules/wms/components/backend/WmsSkuDetailPage.tsx +16 -12
- package/src/modules/wms/components/backend/inventoryMutationLoaders.ts +20 -36
- package/src/modules/wms/i18n/de.json +0 -2
- package/src/modules/wms/i18n/en.json +0 -2
- package/src/modules/wms/i18n/es.json +0 -2
- package/src/modules/wms/i18n/ko.json +0 -2
- package/src/modules/wms/i18n/pl.json +0 -2
- package/src/modules/workflows/backend/definitions/page.tsx +1 -4
- package/src/modules/workflows/backend/events/page.tsx +1 -4
- package/src/modules/workflows/backend/instances/page.tsx +1 -4
- package/src/modules/workflows/backend/tasks/page.tsx +1 -4
- package/src/modules/workflows/lib/activity-executor.ts +0 -9
- package/dist/modules/api_keys/di.js +0 -9
- package/dist/modules/api_keys/di.js.map +0 -7
- package/dist/modules/api_keys/services/principalService.js +0 -31
- package/dist/modules/api_keys/services/principalService.js.map +0 -7
- package/dist/modules/attachments/lib/attachment-service.js +0 -313
- package/dist/modules/attachments/lib/attachment-service.js.map +0 -7
- package/dist/modules/auth/api/reset/validate.js +0 -55
- package/dist/modules/auth/api/reset/validate.js.map +0 -7
- package/dist/modules/auth/commands/acl.js +0 -254
- package/dist/modules/auth/commands/acl.js.map +0 -7
- package/dist/modules/auth/services/principalService.js +0 -200
- package/dist/modules/auth/services/principalService.js.map +0 -7
- package/dist/modules/auth/services/roleOrganizationScope.js +0 -41
- package/dist/modules/auth/services/roleOrganizationScope.js.map +0 -7
- package/dist/modules/communication_channels/lib/outbound-recipient.js +0 -33
- package/dist/modules/communication_channels/lib/outbound-recipient.js.map +0 -7
- package/dist/modules/communication_channels/lib/resolve-channel-type.js +0 -51
- package/dist/modules/communication_channels/lib/resolve-channel-type.js.map +0 -7
- package/dist/modules/customers/backend/customers/deals/pipeline/components/toneClasses.js +0 -18
- package/dist/modules/customers/backend/customers/deals/pipeline/components/toneClasses.js.map +0 -7
- package/dist/modules/customers/lib/calendar/participantIdentity.js +0 -9
- package/dist/modules/customers/lib/calendar/participantIdentity.js.map +0 -7
- package/dist/modules/customers/lib/closureStage.js +0 -45
- package/dist/modules/customers/lib/closureStage.js.map +0 -7
- package/dist/modules/customers/lib/detailReadAccess.js +0 -12
- package/dist/modules/customers/lib/detailReadAccess.js.map +0 -7
- package/dist/modules/data_sync/lib/abandoned-run.js +0 -19
- package/dist/modules/data_sync/lib/abandoned-run.js.map +0 -7
- package/dist/modules/devices/api/deviceSerialization.js +0 -46
- package/dist/modules/devices/api/deviceSerialization.js.map +0 -7
- package/dist/modules/directory/services/organizationHierarchyService.js +0 -29
- package/dist/modules/directory/services/organizationHierarchyService.js.map +0 -7
- package/dist/modules/directory/services/organizationScopeService.js +0 -56
- package/dist/modules/directory/services/organizationScopeService.js.map +0 -7
- package/dist/modules/integrations/backend/integrations/credential-secret-fields.js +0 -55
- package/dist/modules/integrations/backend/integrations/credential-secret-fields.js.map +0 -7
- package/dist/modules/messages/lib/channel-sender-identity.js +0 -26
- package/dist/modules/messages/lib/channel-sender-identity.js.map +0 -7
- package/dist/modules/messages/lib/composeSourceChannelType.js +0 -41
- package/dist/modules/messages/lib/composeSourceChannelType.js.map +0 -7
- package/dist/modules/query_index/lib/search-entity-policy.js +0 -14
- package/dist/modules/query_index/lib/search-entity-policy.js.map +0 -7
- package/dist/modules/sales/components/documents/lineItemShipmentLock.js +0 -54
- package/dist/modules/sales/components/documents/lineItemShipmentLock.js.map +0 -7
- package/dist/modules/sales/lib/salesChannelsToggleSeed.js +0 -33
- package/dist/modules/sales/lib/salesChannelsToggleSeed.js.map +0 -7
- package/dist/modules/sales/migrations/Migration20260821120000_sales_notes_addresses_context_idx.js +0 -32
- package/dist/modules/sales/migrations/Migration20260821120000_sales_notes_addresses_context_idx.js.map +0 -7
- package/dist/modules/wms/api/warehouseSearch.js +0 -21
- package/dist/modules/wms/api/warehouseSearch.js.map +0 -7
- package/dist/modules/wms/components/backend/WarehouseEditDialog.js +0 -158
- package/dist/modules/wms/components/backend/WarehouseEditDialog.js.map +0 -7
- package/dist/modules/wms/components/backend/warehouseFormOptions.js +0 -66
- package/dist/modules/wms/components/backend/warehouseFormOptions.js.map +0 -7
- package/src/modules/api_keys/di.ts +0 -7
- package/src/modules/api_keys/services/principalService.ts +0 -33
- package/src/modules/attachments/lib/attachment-service.ts +0 -468
- package/src/modules/auth/api/reset/validate.ts +0 -57
- package/src/modules/auth/commands/acl.ts +0 -495
- package/src/modules/auth/services/principalService.ts +0 -266
- package/src/modules/auth/services/roleOrganizationScope.ts +0 -70
- package/src/modules/communication_channels/lib/outbound-recipient.ts +0 -71
- package/src/modules/communication_channels/lib/resolve-channel-type.ts +0 -99
- package/src/modules/customers/backend/customers/deals/pipeline/components/toneClasses.ts +0 -21
- package/src/modules/customers/lib/calendar/participantIdentity.ts +0 -17
- package/src/modules/customers/lib/closureStage.ts +0 -76
- package/src/modules/customers/lib/detailReadAccess.ts +0 -35
- package/src/modules/data_sync/lib/abandoned-run.ts +0 -56
- package/src/modules/devices/api/deviceSerialization.ts +0 -50
- package/src/modules/directory/services/organizationHierarchyService.ts +0 -34
- package/src/modules/directory/services/organizationScopeService.ts +0 -85
- package/src/modules/integrations/backend/integrations/credential-secret-fields.ts +0 -84
- package/src/modules/messages/lib/channel-sender-identity.ts +0 -55
- package/src/modules/messages/lib/composeSourceChannelType.ts +0 -95
- package/src/modules/query_index/lib/search-entity-policy.ts +0 -46
- package/src/modules/sales/components/documents/lineItemShipmentLock.ts +0 -74
- package/src/modules/sales/lib/salesChannelsToggleSeed.ts +0 -42
- package/src/modules/sales/migrations/Migration20260821120000_sales_notes_addresses_context_idx.ts +0 -87
- package/src/modules/wms/api/warehouseSearch.ts +0 -23
- package/src/modules/wms/components/backend/WarehouseEditDialog.tsx +0 -216
- package/src/modules/wms/components/backend/warehouseFormOptions.ts +0 -72
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@open-mercato/core",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.7.0",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -231,6 +231,7 @@
|
|
|
231
231
|
"@mikro-orm/core": "^7.1.8",
|
|
232
232
|
"@mikro-orm/decorators": "^7.1.8",
|
|
233
233
|
"@mikro-orm/postgresql": "^7.1.8",
|
|
234
|
+
"@types/html-to-text": "^9.0.4",
|
|
234
235
|
"@types/leaflet": "^1.9.12",
|
|
235
236
|
"@types/leaflet.markercluster": "^1.5.5",
|
|
236
237
|
"@types/sanitize-html": "^2.13.0",
|
|
@@ -239,6 +240,7 @@
|
|
|
239
240
|
"ai": "^7.0.4",
|
|
240
241
|
"date-fns": "4.4.0",
|
|
241
242
|
"date-fns-tz": "^3.2.0",
|
|
243
|
+
"html-to-text": "^10.0.0",
|
|
242
244
|
"leaflet": "^1.9.4",
|
|
243
245
|
"leaflet.markercluster": "^1.5.3",
|
|
244
246
|
"mammoth": "^1.9.0",
|
|
@@ -252,16 +254,16 @@
|
|
|
252
254
|
"zod": "^4.4.3"
|
|
253
255
|
},
|
|
254
256
|
"peerDependencies": {
|
|
255
|
-
"@open-mercato/ai-assistant": "0.
|
|
256
|
-
"@open-mercato/shared": "0.
|
|
257
|
-
"@open-mercato/ui": "0.
|
|
257
|
+
"@open-mercato/ai-assistant": "0.7.0",
|
|
258
|
+
"@open-mercato/shared": "0.7.0",
|
|
259
|
+
"@open-mercato/ui": "0.7.0",
|
|
258
260
|
"react": "^19.0.0",
|
|
259
261
|
"react-dom": "^19.0.0"
|
|
260
262
|
},
|
|
261
263
|
"devDependencies": {
|
|
262
|
-
"@open-mercato/ai-assistant": "0.
|
|
263
|
-
"@open-mercato/shared": "0.
|
|
264
|
-
"@open-mercato/ui": "0.
|
|
264
|
+
"@open-mercato/ai-assistant": "0.7.0",
|
|
265
|
+
"@open-mercato/shared": "0.7.0",
|
|
266
|
+
"@open-mercato/ui": "0.7.0",
|
|
265
267
|
"@testing-library/dom": "^10.4.1",
|
|
266
268
|
"@testing-library/jest-dom": "^7.0.0",
|
|
267
269
|
"@testing-library/react": "^16.3.1",
|
|
@@ -284,6 +286,5 @@
|
|
|
284
286
|
"type": "git",
|
|
285
287
|
"url": "https://github.com/open-mercato/open-mercato",
|
|
286
288
|
"directory": "packages/core"
|
|
287
|
-
}
|
|
288
|
-
"stableVersion": "0.6.7"
|
|
289
|
+
}
|
|
289
290
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { type APIRequestContext } from '@playwright/test';
|
|
2
2
|
import { DEFAULT_CREDENTIALS, type Role } from './auth';
|
|
3
3
|
|
|
4
4
|
const BASE_URL = process.env.BASE_URL?.trim() || null;
|
|
@@ -141,35 +141,3 @@ export async function postForm(
|
|
|
141
141
|
data: form.toString(),
|
|
142
142
|
});
|
|
143
143
|
}
|
|
144
|
-
|
|
145
|
-
/**
|
|
146
|
-
* Runs `use` against a request context that shares no cookies with the caller's.
|
|
147
|
-
*
|
|
148
|
-
* The `request` fixture keeps a cookie jar, and `/api/auth/login` sets `auth_token`
|
|
149
|
-
* on it. Every later call through that fixture therefore carries the LAST logged-in
|
|
150
|
-
* user's session, even one that deliberately sends no Authorization header or an
|
|
151
|
-
* `ApiKey` one.
|
|
152
|
-
*
|
|
153
|
-
* A spec asserting "no credentials are rejected" or "this API key alone decides
|
|
154
|
-
* access" must therefore issue the request from a jar that never saw a login,
|
|
155
|
-
* rather than assuming the fixture's jar is empty. TC-DOCUMENTS-009 and
|
|
156
|
-
* TC-DOCUMENTS-018 both observably failed in the standalone lane — with the
|
|
157
|
-
* replayed cookie visible in the trace — while passing in the ephemeral one, and
|
|
158
|
-
* routing them through this helper fixed both.
|
|
159
|
-
*/
|
|
160
|
-
export async function withCredentialIsolatedRequest<T>(
|
|
161
|
-
use: (request: APIRequestContext) => Promise<T>,
|
|
162
|
-
): Promise<T> {
|
|
163
|
-
// A hand-built context does not inherit the project's `use.baseURL` the way the
|
|
164
|
-
// `request` fixture does, so it has to repeat the config's own resolution — otherwise
|
|
165
|
-
// a relative path throws here on any run that leaves BASE_URL unset, while the same
|
|
166
|
-
// path works through the fixture.
|
|
167
|
-
const context = await playwrightRequest.newContext({
|
|
168
|
-
baseURL: BASE_URL ?? 'http://localhost:3000',
|
|
169
|
-
});
|
|
170
|
-
try {
|
|
171
|
-
return await use(context);
|
|
172
|
-
} finally {
|
|
173
|
-
await context.dispose();
|
|
174
|
-
}
|
|
175
|
-
}
|
|
@@ -42,18 +42,7 @@ export async function isChannelSeedingAvailable(
|
|
|
42
42
|
export async function seedConnectedChannel(
|
|
43
43
|
request: APIRequestContext,
|
|
44
44
|
token: string,
|
|
45
|
-
input: {
|
|
46
|
-
displayName?: string;
|
|
47
|
-
externalIdentifier?: string;
|
|
48
|
-
/**
|
|
49
|
-
* `chat` connects the non-email stub instead: a channel whose senders carry
|
|
50
|
-
* an opaque handle and no address, and whose `externalIdentifier` is NULL —
|
|
51
|
-
* the shape a real Discord/Slack channel has. Use it for anything asserting
|
|
52
|
-
* the hub's sender-identity contract (#4975); the default `email` flavor
|
|
53
|
-
* cannot prove it, because it can only ever supply email-shaped data.
|
|
54
|
-
*/
|
|
55
|
-
providerFlavor?: 'email' | 'chat';
|
|
56
|
-
} = {},
|
|
45
|
+
input: { displayName?: string; externalIdentifier?: string } = {},
|
|
57
46
|
): Promise<string> {
|
|
58
47
|
const response = await apiRequest(request, 'POST', TEST_SEED_PATH, {
|
|
59
48
|
token,
|
|
@@ -126,63 +115,6 @@ export async function seedInboundMessage(
|
|
|
126
115
|
* Best-effort delete of a seeded channel via the owner-scoped DELETE route.
|
|
127
116
|
* Safe to call with a null id in `finally`.
|
|
128
117
|
*/
|
|
129
|
-
/**
|
|
130
|
-
* Ingest an inbound chat message through the REAL `ingest_inbound_message`
|
|
131
|
-
* command: the stub adapter normalizes the frame and the hub composes the
|
|
132
|
-
* platform message via `messages.messages.compose`.
|
|
133
|
-
*
|
|
134
|
-
* Unlike {@link seedInboundMessage}, nothing here is short-circuited — no row is
|
|
135
|
-
* inserted behind the compose path — so a hub contract the provider cannot
|
|
136
|
-
* satisfy fails the test instead of hiding behind seeded data. That bypass is
|
|
137
|
-
* exactly why CI was green while every real inbound Discord message was rejected
|
|
138
|
-
* (#4975).
|
|
139
|
-
*
|
|
140
|
-
* The sender is identified only by `senderIdentifier` (a Discord snowflake, a
|
|
141
|
-
* Slack member id, …). There is deliberately no way to pass an address.
|
|
142
|
-
*/
|
|
143
|
-
export async function ingestInboundChatMessage(
|
|
144
|
-
request: APIRequestContext,
|
|
145
|
-
token: string,
|
|
146
|
-
input: {
|
|
147
|
-
channelId: string;
|
|
148
|
-
senderIdentifier: string;
|
|
149
|
-
senderDisplayName?: string;
|
|
150
|
-
body?: string;
|
|
151
|
-
externalMessageId: string;
|
|
152
|
-
externalConversationId: string;
|
|
153
|
-
},
|
|
154
|
-
): Promise<{
|
|
155
|
-
status: string;
|
|
156
|
-
messageId: string | null;
|
|
157
|
-
conversationId: string | null;
|
|
158
|
-
channelLinkId: string | null;
|
|
159
|
-
channelType: string | null;
|
|
160
|
-
}> {
|
|
161
|
-
const response = await apiRequest(request, 'POST', TEST_SEED_PATH, {
|
|
162
|
-
token,
|
|
163
|
-
data: { action: 'ingest-inbound', ...input },
|
|
164
|
-
});
|
|
165
|
-
expect(
|
|
166
|
-
response.status(),
|
|
167
|
-
'POST /api/communication_channels/test-seed (ingest-inbound) should return 201 — ' +
|
|
168
|
-
'a non-201 here means the hub rejected a sender with no email address',
|
|
169
|
-
).toBe(201);
|
|
170
|
-
const body = await readJsonSafe<{
|
|
171
|
-
status?: string;
|
|
172
|
-
messageId?: string | null;
|
|
173
|
-
conversationId?: string | null;
|
|
174
|
-
channelLinkId?: string | null;
|
|
175
|
-
channelType?: string | null;
|
|
176
|
-
}>(response);
|
|
177
|
-
return {
|
|
178
|
-
status: body?.status ?? 'unknown',
|
|
179
|
-
messageId: body?.messageId ?? null,
|
|
180
|
-
conversationId: body?.conversationId ?? null,
|
|
181
|
-
channelLinkId: body?.channelLinkId ?? null,
|
|
182
|
-
channelType: body?.channelType ?? null,
|
|
183
|
-
};
|
|
184
|
-
}
|
|
185
|
-
|
|
186
118
|
export async function deleteChannelIfExists(
|
|
187
119
|
request: APIRequestContext,
|
|
188
120
|
token: string | null,
|
|
@@ -298,9 +298,7 @@ const crud = makeCrudRoute<
|
|
|
298
298
|
scopedCtx.__apiKeyRoleIds = roleIds
|
|
299
299
|
|
|
300
300
|
const allowedIds = ctx.organizationScope?.allowedIds ?? null
|
|
301
|
-
const organizationId =
|
|
302
|
-
? input.organizationId ?? null
|
|
303
|
-
: ctx.selectedOrganizationId ?? auth.orgId ?? null
|
|
301
|
+
const organizationId = input.organizationId ?? ctx.selectedOrganizationId ?? auth.orgId ?? null
|
|
304
302
|
const isSuperAdmin = await resolveIsSuperAdmin(scopedCtx)
|
|
305
303
|
if (
|
|
306
304
|
!isOrganizationAccessAllowed({
|
|
@@ -36,7 +36,6 @@ type ResponsePayload = {
|
|
|
36
36
|
total: number
|
|
37
37
|
page: number
|
|
38
38
|
totalPages: number
|
|
39
|
-
totalIsCapped?: boolean
|
|
40
39
|
}
|
|
41
40
|
|
|
42
41
|
function formatDate(value: string | null, t: (key: string, params?: Record<string, string | number>) => string) {
|
|
@@ -55,7 +54,6 @@ export default function ApiKeysListPage() {
|
|
|
55
54
|
const [page, setPage] = React.useState(1)
|
|
56
55
|
const [total, setTotal] = React.useState(0)
|
|
57
56
|
const [totalPages, setTotalPages] = React.useState(1)
|
|
58
|
-
const [totalIsCapped, setTotalIsCapped] = React.useState(false)
|
|
59
57
|
const [search, setSearch] = React.useState('')
|
|
60
58
|
const [isLoading, setIsLoading] = React.useState(true)
|
|
61
59
|
const [reloadToken, setReloadToken] = React.useState(0)
|
|
@@ -89,7 +87,6 @@ export default function ApiKeysListPage() {
|
|
|
89
87
|
setRows(Array.isArray(payload.items) ? payload.items : [])
|
|
90
88
|
setTotal(payload.total || 0)
|
|
91
89
|
setTotalPages(payload.totalPages || 1)
|
|
92
|
-
setTotalIsCapped(payload?.totalIsCapped === true)
|
|
93
90
|
}
|
|
94
91
|
} catch (error) {
|
|
95
92
|
if (!cancelled) {
|
|
@@ -201,7 +198,7 @@ export default function ApiKeysListPage() {
|
|
|
201
198
|
createLabel={t('api_keys.list.actions.create')}
|
|
202
199
|
/>
|
|
203
200
|
)}
|
|
204
|
-
pagination={{ page, pageSize: 20, total, totalPages,
|
|
201
|
+
pagination={{ page, pageSize: 20, total, totalPages, onPageChange: setPage }}
|
|
205
202
|
isLoading={isLoading}
|
|
206
203
|
/>
|
|
207
204
|
</PageBody>
|
|
@@ -34,18 +34,6 @@ write time.
|
|
|
34
34
|
|
|
35
35
|
## Always
|
|
36
36
|
|
|
37
|
-
- Cross-module consumers MUST resolve the public `attachmentService` DI contract
|
|
38
|
-
and import its type from `@open-mercato/core/modules/attachments`. Keep
|
|
39
|
-
attachment entities, partitions, storage drivers, quota accounting, file
|
|
40
|
-
security, and `checkAttachmentAccess` behind that boundary.
|
|
41
|
-
- Cross-module multipart uploads MUST use `attachmentService.readUploadForm()` so
|
|
42
|
-
the raw request stream is bounded before `FormData` decoding, including when
|
|
43
|
-
`Content-Length` is missing or the request is chunked.
|
|
44
|
-
- Cross-module permanent deletion MUST use `attachmentService.releaseScoped()`
|
|
45
|
-
with the exact owner, assignment, partition, and tenant/organization scope. In
|
|
46
|
-
an ambient transaction pass `{ flush: false }`, commit the returned database
|
|
47
|
-
removal first, and invoke the returned provider cleanup only after commit;
|
|
48
|
-
never delete provider bytes before a transaction can still roll back.
|
|
49
37
|
- **MUST call `assertAttachmentScopeInvariant({ tenantId, organizationId })` from
|
|
50
38
|
`lib/access.ts` before persisting any new `Attachment` row.** It throws on a
|
|
51
39
|
partial-null scope and accepts both fully-scoped and fully-global rows. The
|
|
@@ -58,9 +46,6 @@ write time.
|
|
|
58
46
|
|
|
59
47
|
## Never
|
|
60
48
|
|
|
61
|
-
- Never make a peer module construct `StorageDriverFactory` or read Attachment /
|
|
62
|
-
AttachmentPartition entities directly as a fallback. Missing service wiring
|
|
63
|
-
must fail closed.
|
|
64
49
|
- **Never create a partial-null attachment** (one scope column set, the other null).
|
|
65
50
|
- **Never read or expose attachment rows without `checkAttachmentAccess`** — bypassing
|
|
66
51
|
it reintroduces the cross-tenant fail-open class.
|
|
@@ -213,7 +213,7 @@ export async function GET(req: Request) {
|
|
|
213
213
|
const currentPage = usePaging ? Math.max(1, page) : null
|
|
214
214
|
const currentPageSize = usePaging ? pageSize : null
|
|
215
215
|
const totalPages = usePaging && total !== null ? Math.max(1, Math.ceil(total / currentPageSize!)) : null
|
|
216
|
-
const pageOffset = usePaging ? (currentPage! - 1) * currentPageSize! : undefined
|
|
216
|
+
const pageOffset = usePaging ? (Math.min(currentPage!, totalPages!) - 1) * currentPageSize! : undefined
|
|
217
217
|
const items = await findWithDecryption(
|
|
218
218
|
em,
|
|
219
219
|
Attachment,
|
|
@@ -256,7 +256,7 @@ export async function GET(req: Request) {
|
|
|
256
256
|
...(usePaging
|
|
257
257
|
? {
|
|
258
258
|
total,
|
|
259
|
-
page: currentPage,
|
|
259
|
+
page: Math.min(currentPage!, totalPages!),
|
|
260
260
|
pageSize: currentPageSize,
|
|
261
261
|
totalPages,
|
|
262
262
|
}
|
|
@@ -42,7 +42,6 @@ type AttachmentLibraryResponse = {
|
|
|
42
42
|
pageSize: number
|
|
43
43
|
total: number
|
|
44
44
|
totalPages: number
|
|
45
|
-
totalIsCapped?: boolean
|
|
46
45
|
availableTags: string[]
|
|
47
46
|
partitions: Array<{ code: string; title: string; description?: string | null; isPublic?: boolean }>
|
|
48
47
|
error?: string
|
|
@@ -1055,7 +1054,6 @@ export function AttachmentLibrary() {
|
|
|
1055
1054
|
|
|
1056
1055
|
const total = data?.total ?? 0
|
|
1057
1056
|
const totalPages = data?.totalPages ?? 0
|
|
1058
|
-
const totalIsCapped = data?.totalIsCapped === true
|
|
1059
1057
|
return (
|
|
1060
1058
|
<>
|
|
1061
1059
|
<DataTable<AttachmentRow>
|
|
@@ -1156,7 +1154,6 @@ export function AttachmentLibrary() {
|
|
|
1156
1154
|
pageSize: PAGE_SIZE,
|
|
1157
1155
|
total,
|
|
1158
1156
|
totalPages,
|
|
1159
|
-
totalIsCapped,
|
|
1160
1157
|
onPageChange: (next) => setPage(next),
|
|
1161
1158
|
}}
|
|
1162
1159
|
/>
|
|
@@ -2,7 +2,6 @@ import { asFunction, asValue } from 'awilix'
|
|
|
2
2
|
import type { AppContainer } from '@open-mercato/shared/lib/di/container'
|
|
3
3
|
import type { DataEngine } from '@open-mercato/shared/lib/data/engine'
|
|
4
4
|
import { StorageDriverFactory } from './lib/drivers/driverFactory'
|
|
5
|
-
import { DefaultAttachmentService } from './lib/attachment-service'
|
|
6
5
|
import { createAttachmentQuotaService, type AttachmentQuotaService } from './lib/quota-service'
|
|
7
6
|
import { scheduleAttachmentQuotaRecovery } from './lib/quota-recovery-queue'
|
|
8
7
|
import { AttachmentTargetAccessService } from './lib/target-access-service'
|
|
@@ -47,20 +46,5 @@ export function register(container: AppContainer) {
|
|
|
47
46
|
)
|
|
48
47
|
.singleton()
|
|
49
48
|
.proxy(),
|
|
50
|
-
// The scoped upload service is handed over as a lazy resolver so module
|
|
51
|
-
// uploads share the public attachment route's single fenced reservation
|
|
52
|
-
// ledger, without dragging that service's own dependencies into every
|
|
53
|
-
// container that merely constructs an `attachmentService`.
|
|
54
|
-
attachmentService: asFunction((cradle: {
|
|
55
|
-
em: ConstructorParameters<typeof DefaultAttachmentService>[0]
|
|
56
|
-
storageDriverFactory: ConstructorParameters<typeof DefaultAttachmentService>[1]
|
|
57
|
-
attachmentScopedUploadService: ScopedAttachmentUploadService
|
|
58
|
-
}) => new DefaultAttachmentService(
|
|
59
|
-
cradle.em,
|
|
60
|
-
cradle.storageDriverFactory,
|
|
61
|
-
() => cradle.attachmentScopedUploadService ?? null,
|
|
62
|
-
))
|
|
63
|
-
.scoped()
|
|
64
|
-
.proxy(),
|
|
65
49
|
})
|
|
66
50
|
}
|
|
@@ -2,17 +2,12 @@
|
|
|
2
2
|
"attachments.errors.activeContentBlocked": "Das Hochladen aktiver Inhalte ist nicht erlaubt.",
|
|
3
3
|
"attachments.errors.dangerousExecutable": "Ausführbare Dateitypen sind als Anhänge nicht erlaubt.",
|
|
4
4
|
"attachments.errors.maxUploadSize": "Der Anhang überschreitet die maximal zulässige Upload-Größe.",
|
|
5
|
-
"attachments.errors.partitionUnavailable": "Die Anhang-Partition ist für diesen Bereich nicht verfügbar.",
|
|
6
|
-
"attachments.errors.persistenceFailed": "Der Anhang konnte nicht gespeichert werden.",
|
|
7
5
|
"attachments.errors.publicPartitionBlocked": "Öffentliche Speicherpartitionen können für diesen Upload nicht explizit ausgewählt werden.",
|
|
8
6
|
"attachments.errors.quotaExceeded": "Das Speicherlimit für Anhänge dieses Tenants wurde überschritten.",
|
|
9
7
|
"attachments.errors.quotaRecoveryUnsupported": "Der Speichertreiber kann nicht an der Kontingent-Wiederherstellung teilnehmen.",
|
|
10
8
|
"attachments.errors.quotaUnavailable": "Die Speicherkontingent-Abrechnung ist nicht verfügbar.",
|
|
11
9
|
"attachments.errors.selectOrganization": "Wählen Sie eine bestimmte Organisation aus, bevor Sie einen Anhang hochladen.",
|
|
12
|
-
"attachments.errors.storageFailed": "Die Anhangsdatei konnte nicht im Speicher abgelegt werden.",
|
|
13
10
|
"attachments.errors.storagePathExists": "Der Zielspeicherpfad existiert bereits.",
|
|
14
|
-
"attachments.errors.uploadFailed": "Das Hochladen des Anhangs ist fehlgeschlagen.",
|
|
15
|
-
"attachments.errors.uploadServiceUnavailable": "Der Anhang-Upload-Dienst ist nicht verfügbar.",
|
|
16
11
|
"attachments.library.actions.chooseReplacement": "Ersatzdatei auswählen",
|
|
17
12
|
"attachments.library.actions.copied": "Link kopiert.",
|
|
18
13
|
"attachments.library.actions.copyError": "Link konnte nicht kopiert werden.",
|
|
@@ -2,17 +2,12 @@
|
|
|
2
2
|
"attachments.errors.activeContentBlocked": "Active content uploads are not allowed.",
|
|
3
3
|
"attachments.errors.dangerousExecutable": "Executable file types are not allowed as attachments.",
|
|
4
4
|
"attachments.errors.maxUploadSize": "Attachment exceeds the maximum upload size.",
|
|
5
|
-
"attachments.errors.partitionUnavailable": "Attachment partition is not available for this scope.",
|
|
6
|
-
"attachments.errors.persistenceFailed": "Failed to persist attachment.",
|
|
7
5
|
"attachments.errors.publicPartitionBlocked": "Public storage partitions cannot be selected explicitly for this upload.",
|
|
8
6
|
"attachments.errors.quotaExceeded": "Attachment storage quota exceeded for this tenant.",
|
|
9
7
|
"attachments.errors.quotaRecoveryUnsupported": "Storage driver cannot participate in quota recovery.",
|
|
10
8
|
"attachments.errors.quotaUnavailable": "Storage quota accounting is unavailable.",
|
|
11
9
|
"attachments.errors.selectOrganization": "Select a specific organization before uploading an attachment.",
|
|
12
|
-
"attachments.errors.storageFailed": "Failed to store the attachment file.",
|
|
13
10
|
"attachments.errors.storagePathExists": "The target storage path already exists.",
|
|
14
|
-
"attachments.errors.uploadFailed": "Attachment upload failed.",
|
|
15
|
-
"attachments.errors.uploadServiceUnavailable": "The attachment upload service is not available.",
|
|
16
11
|
"attachments.library.actions.chooseReplacement": "Choose replacement file",
|
|
17
12
|
"attachments.library.actions.copied": "Link copied.",
|
|
18
13
|
"attachments.library.actions.copyError": "Unable to copy link.",
|
|
@@ -2,17 +2,12 @@
|
|
|
2
2
|
"attachments.errors.activeContentBlocked": "No se permite la carga de contenido activo.",
|
|
3
3
|
"attachments.errors.dangerousExecutable": "No se permiten archivos ejecutables como adjuntos.",
|
|
4
4
|
"attachments.errors.maxUploadSize": "El archivo adjunto supera el tamaño máximo de carga permitido.",
|
|
5
|
-
"attachments.errors.partitionUnavailable": "La partición de adjuntos no está disponible para este ámbito.",
|
|
6
|
-
"attachments.errors.persistenceFailed": "No se pudo guardar el archivo adjunto.",
|
|
7
5
|
"attachments.errors.publicPartitionBlocked": "No se pueden seleccionar explícitamente particiones de almacenamiento públicas para esta carga.",
|
|
8
6
|
"attachments.errors.quotaExceeded": "Se superó la cuota de almacenamiento de adjuntos para este tenant.",
|
|
9
7
|
"attachments.errors.quotaRecoveryUnsupported": "El controlador de almacenamiento no puede participar en la recuperación de cuota.",
|
|
10
8
|
"attachments.errors.quotaUnavailable": "La contabilidad de la cuota de almacenamiento no está disponible.",
|
|
11
9
|
"attachments.errors.selectOrganization": "Selecciona una organización específica antes de subir un adjunto.",
|
|
12
|
-
"attachments.errors.storageFailed": "No se pudo almacenar el archivo adjunto.",
|
|
13
10
|
"attachments.errors.storagePathExists": "La ruta de almacenamiento de destino ya existe.",
|
|
14
|
-
"attachments.errors.uploadFailed": "Error al subir el archivo adjunto.",
|
|
15
|
-
"attachments.errors.uploadServiceUnavailable": "El servicio de carga de adjuntos no está disponible.",
|
|
16
11
|
"attachments.library.actions.chooseReplacement": "Elegir archivo de reemplazo",
|
|
17
12
|
"attachments.library.actions.copied": "Enlace copiado.",
|
|
18
13
|
"attachments.library.actions.copyError": "No se pudo copiar el enlace.",
|
|
@@ -2,17 +2,12 @@
|
|
|
2
2
|
"attachments.errors.activeContentBlocked": "활성 콘텐츠 업로드는 허용되지 않습니다.",
|
|
3
3
|
"attachments.errors.dangerousExecutable": "실행 파일 형식은 첨부 파일로 허용되지 않습니다.",
|
|
4
4
|
"attachments.errors.maxUploadSize": "첨부 파일이 최대 업로드 크기를 초과합니다.",
|
|
5
|
-
"attachments.errors.partitionUnavailable": "이 범위에서는 첨부 파일 파티션을 사용할 수 없습니다.",
|
|
6
|
-
"attachments.errors.persistenceFailed": "첨부 파일을 저장하지 못했습니다.",
|
|
7
5
|
"attachments.errors.publicPartitionBlocked": "이 업로드에는 공개 저장소 파티션을 명시적으로 선택할 수 없습니다.",
|
|
8
6
|
"attachments.errors.quotaExceeded": "이 테넌트의 첨부 파일 저장소 할당량을 초과했습니다.",
|
|
9
7
|
"attachments.errors.quotaRecoveryUnsupported": "저장 용량 복구가 지원되지 않습니다.",
|
|
10
8
|
"attachments.errors.quotaUnavailable": "첨부파일 저장 용량 정보를 확인할 수 없습니다.",
|
|
11
9
|
"attachments.errors.selectOrganization": "첨부파일을 업로드하기 전에 특정 조직을 선택하세요.",
|
|
12
|
-
"attachments.errors.storageFailed": "첨부 파일을 저장소에 기록하지 못했습니다.",
|
|
13
10
|
"attachments.errors.storagePathExists": "대상 저장 경로가 이미 존재합니다.",
|
|
14
|
-
"attachments.errors.uploadFailed": "첨부 파일 업로드에 실패했습니다.",
|
|
15
|
-
"attachments.errors.uploadServiceUnavailable": "첨부 파일 업로드 서비스를 사용할 수 없습니다.",
|
|
16
11
|
"attachments.library.actions.chooseReplacement": "교체 파일 선택",
|
|
17
12
|
"attachments.library.actions.copied": "링크가 복사되었습니다.",
|
|
18
13
|
"attachments.library.actions.copyError": "링크를 복사할 수 없습니다.",
|
|
@@ -2,17 +2,12 @@
|
|
|
2
2
|
"attachments.errors.activeContentBlocked": "Przesyłanie treści aktywnych nie jest dozwolone.",
|
|
3
3
|
"attachments.errors.dangerousExecutable": "Pliki wykonywalne nie są dozwolone jako załączniki.",
|
|
4
4
|
"attachments.errors.maxUploadSize": "Załącznik przekracza maksymalny dopuszczalny rozmiar przesyłania.",
|
|
5
|
-
"attachments.errors.partitionUnavailable": "Partycja załączników nie jest dostępna w tym zakresie.",
|
|
6
|
-
"attachments.errors.persistenceFailed": "Nie udało się zapisać załącznika.",
|
|
7
5
|
"attachments.errors.publicPartitionBlocked": "Nie można jawnie wybrać publicznej partycji do tego przesyłania.",
|
|
8
6
|
"attachments.errors.quotaExceeded": "Przekroczono limit miejsca na załączniki dla tego tenantu.",
|
|
9
7
|
"attachments.errors.quotaRecoveryUnsupported": "Sterownik przechowywania nie może uczestniczyć w odzyskiwaniu limitu.",
|
|
10
8
|
"attachments.errors.quotaUnavailable": "Rozliczanie limitu przestrzeni dyskowej jest niedostępne.",
|
|
11
9
|
"attachments.errors.selectOrganization": "Wybierz konkretną organizację przed przesłaniem załącznika.",
|
|
12
|
-
"attachments.errors.storageFailed": "Nie udało się zapisać pliku załącznika w magazynie.",
|
|
13
10
|
"attachments.errors.storagePathExists": "Docelowa ścieżka przechowywania już istnieje.",
|
|
14
|
-
"attachments.errors.uploadFailed": "Przesyłanie załącznika nie powiodło się.",
|
|
15
|
-
"attachments.errors.uploadServiceUnavailable": "Usługa przesyłania załączników jest niedostępna.",
|
|
16
11
|
"attachments.library.actions.chooseReplacement": "Wybierz plik zastępczy",
|
|
17
12
|
"attachments.library.actions.copied": "Link skopiowany.",
|
|
18
13
|
"attachments.library.actions.copyError": "Nie można skopiować linku.",
|
|
@@ -9,13 +9,3 @@ export const metadata: ModuleInfo = {
|
|
|
9
9
|
license: 'MIT',
|
|
10
10
|
}
|
|
11
11
|
|
|
12
|
-
export {
|
|
13
|
-
type AttachmentOwner,
|
|
14
|
-
type AttachmentProviderCleanup,
|
|
15
|
-
type AttachmentService,
|
|
16
|
-
type CreatedScopedAttachment,
|
|
17
|
-
type CreateScopedAttachmentInput,
|
|
18
|
-
type ReadScopedAttachmentInput,
|
|
19
|
-
type ReadScopedAttachmentResult,
|
|
20
|
-
type ReleaseScopedAttachmentInput,
|
|
21
|
-
} from './lib/attachment-service'
|
|
@@ -2,7 +2,6 @@ import { randomUUID } from 'node:crypto'
|
|
|
2
2
|
import type { EntityManager } from '@mikro-orm/postgresql'
|
|
3
3
|
import type { DataEngine } from '@open-mercato/shared/lib/data/engine'
|
|
4
4
|
import { emitCrudSideEffects } from '@open-mercato/shared/lib/commands/helpers'
|
|
5
|
-
import { isCrudHttpError } from '@open-mercato/shared/lib/crud/errors'
|
|
6
5
|
import { createLogger } from '@open-mercato/shared/lib/logger'
|
|
7
6
|
import { Attachment, AttachmentPartition } from '../data/entities'
|
|
8
7
|
import { attachmentCrudEvents, attachmentCrudIndexer } from './crud'
|
|
@@ -41,16 +40,7 @@ export type ScopedAttachmentUploadErrorCode =
|
|
|
41
40
|
| 'storage_failed'
|
|
42
41
|
| 'persistence_failed'
|
|
43
42
|
|
|
44
|
-
// Use Symbol.for so the marker survives module duplication across bundle
|
|
45
|
-
// boundaries. The production build emits this module into several server
|
|
46
|
-
// chunks, so a consumer's `instanceof` compares against a different copy of the
|
|
47
|
-
// class than the DI-resolved service threw from: the check silently fails, the
|
|
48
|
-
// error escapes the caller's catch, and a deliberate 400/413 surfaces as a 500.
|
|
49
|
-
const SCOPED_ATTACHMENT_UPLOAD_ERROR_MARKER = Symbol.for('@open-mercato/ScopedAttachmentUploadError')
|
|
50
|
-
|
|
51
43
|
export class ScopedAttachmentUploadError extends Error {
|
|
52
|
-
readonly [SCOPED_ATTACHMENT_UPLOAD_ERROR_MARKER] = true
|
|
53
|
-
|
|
54
44
|
constructor(
|
|
55
45
|
public readonly code: ScopedAttachmentUploadErrorCode,
|
|
56
46
|
public readonly status: number,
|
|
@@ -60,17 +50,6 @@ export class ScopedAttachmentUploadError extends Error {
|
|
|
60
50
|
}
|
|
61
51
|
}
|
|
62
52
|
|
|
63
|
-
/**
|
|
64
|
-
* Bundle-safe check for `ScopedAttachmentUploadError`. Prefer this over
|
|
65
|
-
* `instanceof` at every call site — the class is duplicated across server
|
|
66
|
-
* chunks, so `instanceof` is only reliable inside this module.
|
|
67
|
-
*/
|
|
68
|
-
export function isScopedAttachmentUploadError(error: unknown): error is ScopedAttachmentUploadError {
|
|
69
|
-
return Boolean(error)
|
|
70
|
-
&& typeof error === 'object'
|
|
71
|
-
&& (error as Record<symbol, unknown>)[SCOPED_ATTACHMENT_UPLOAD_ERROR_MARKER] === true
|
|
72
|
-
}
|
|
73
|
-
|
|
74
53
|
export type ScopedAttachmentUploadInput = {
|
|
75
54
|
tenantId: string
|
|
76
55
|
organizationId: string
|
|
@@ -83,21 +62,6 @@ export type ScopedAttachmentUploadInput = {
|
|
|
83
62
|
assignments?: AttachmentAssignment[]
|
|
84
63
|
partitionCode?: string | null
|
|
85
64
|
maxBytes?: number
|
|
86
|
-
/**
|
|
87
|
-
* Reject a partition flagged public, so a module-owned upload (documents,
|
|
88
|
-
* warranty claims) never lands where an anonymous reader can reach it. The
|
|
89
|
-
* tenant/organization half of that guarantee is not this flag's job: the
|
|
90
|
-
* partition lookup below already matches only a global partition or one owned
|
|
91
|
-
* by this tenant and organization, whether or not the flag is set.
|
|
92
|
-
*/
|
|
93
|
-
requirePrivatePartition?: boolean
|
|
94
|
-
/**
|
|
95
|
-
* Persists a module-owned link row inside the same transaction as the
|
|
96
|
-
* Attachment, so a link failure cannot leave a committed orphan attachment.
|
|
97
|
-
* The callback receives only the generated id, never the entity or the
|
|
98
|
-
* storage implementation.
|
|
99
|
-
*/
|
|
100
|
-
persistLink?: (tx: EntityManager, attachmentId: string) => Promise<void> | void
|
|
101
65
|
}
|
|
102
66
|
|
|
103
67
|
type QuotaRecoveryScheduler = (
|
|
@@ -138,9 +102,6 @@ export class ScopedAttachmentUploadService {
|
|
|
138
102
|
],
|
|
139
103
|
})
|
|
140
104
|
if (!partition) throw new ScopedAttachmentUploadError('partition_unavailable', 400)
|
|
141
|
-
if (input.requirePrivatePartition && partition.isPublic) {
|
|
142
|
-
throw new ScopedAttachmentUploadError('partition_unavailable', 403)
|
|
143
|
-
}
|
|
144
105
|
|
|
145
106
|
const driver = await storageDriverFactory.resolveForPartition(partition.code, {
|
|
146
107
|
tenantId: input.tenantId,
|
|
@@ -249,18 +210,11 @@ export class ScopedAttachmentUploadService {
|
|
|
249
210
|
})
|
|
250
211
|
assertAttachmentScopeInvariant({ tenantId: attachment.tenantId, organizationId: attachment.organizationId })
|
|
251
212
|
await tx.persist(attachment).flush()
|
|
252
|
-
await input.persistLink?.(tx, attachmentId)
|
|
253
213
|
await attachmentQuotaService.completeAttachment(reservation.id, reservation.leaseToken, tx)
|
|
254
214
|
})
|
|
255
215
|
} catch (error) {
|
|
256
216
|
await this.compensateStorage(driver, partition.code, storedPath, reservation)
|
|
257
217
|
logger.error('Scoped attachment persistence failed', { err: error })
|
|
258
|
-
// `persistLink` is where callers run their own authorization (the
|
|
259
|
-
// documents module re-checks the edit capability inside this
|
|
260
|
-
// transaction), so a deliberate HTTP error from it must reach the route
|
|
261
|
-
// with its own status. Flattening it to 500 turns a documented 403 into
|
|
262
|
-
// an apparent server fault.
|
|
263
|
-
if (isCrudHttpError(error)) throw error
|
|
264
218
|
throw new ScopedAttachmentUploadError('persistence_failed', 500)
|
|
265
219
|
}
|
|
266
220
|
|
|
@@ -39,15 +39,11 @@ export function resolveAttachmentMaxBytes(fieldMaxAttachmentSizeMb?: number | nu
|
|
|
39
39
|
return Math.min(defaultMaxBytes, Math.floor(fieldMaxAttachmentSizeMb * 1024 * 1024))
|
|
40
40
|
}
|
|
41
41
|
|
|
42
|
-
export function resolveAttachmentMultipartMaxBytes(): number {
|
|
43
|
-
return resolveDefaultAttachmentMaxUploadBytes() + MULTIPART_CONTENT_LENGTH_OVERHEAD_BYTES
|
|
44
|
-
}
|
|
45
|
-
|
|
46
42
|
export function isMultipartRequestWithinUploadLimit(contentLengthHeader: string | null): boolean {
|
|
47
43
|
if (!contentLengthHeader) return true
|
|
48
44
|
const contentLength = Number(contentLengthHeader)
|
|
49
|
-
if (!Number.
|
|
50
|
-
return contentLength <=
|
|
45
|
+
if (!Number.isFinite(contentLength) || contentLength <= 0) return true
|
|
46
|
+
return contentLength <= (resolveDefaultAttachmentMaxUploadBytes() + MULTIPART_CONTENT_LENGTH_OVERHEAD_BYTES)
|
|
51
47
|
}
|
|
52
48
|
|
|
53
49
|
export class MultipartUploadLimitError extends Error {
|
|
@@ -21,7 +21,6 @@ type ActionLogResponse = {
|
|
|
21
21
|
pageSize: number
|
|
22
22
|
total: number
|
|
23
23
|
totalPages: number
|
|
24
|
-
totalIsCapped?: boolean
|
|
25
24
|
}
|
|
26
25
|
|
|
27
26
|
type AccessLogResponse = {
|
|
@@ -31,7 +30,6 @@ type AccessLogResponse = {
|
|
|
31
30
|
pageSize: number
|
|
32
31
|
total: number
|
|
33
32
|
totalPages: number
|
|
34
|
-
totalIsCapped?: boolean
|
|
35
33
|
}
|
|
36
34
|
|
|
37
35
|
type TabOption = 'actions' | 'access'
|
|
@@ -50,13 +48,11 @@ export default function AuditLogsPage() {
|
|
|
50
48
|
const [actionsPageSize, setActionsPageSize] = React.useState(DEFAULT_PAGE_SIZE)
|
|
51
49
|
const [actionsTotal, setActionsTotal] = React.useState(0)
|
|
52
50
|
const [actionsTotalPages, setActionsTotalPages] = React.useState(1)
|
|
53
|
-
const [actionsTotalIsCapped, setActionsTotalIsCapped] = React.useState(false)
|
|
54
51
|
const actionsPageSizeRef = React.useRef(DEFAULT_PAGE_SIZE)
|
|
55
52
|
const [accessPage, setAccessPage] = React.useState(1)
|
|
56
53
|
const [accessPageSize, setAccessPageSize] = React.useState(DEFAULT_PAGE_SIZE)
|
|
57
54
|
const [accessTotal, setAccessTotal] = React.useState(0)
|
|
58
55
|
const [accessTotalPages, setAccessTotalPages] = React.useState(1)
|
|
59
|
-
const [accessTotalIsCapped, setAccessTotalIsCapped] = React.useState(false)
|
|
60
56
|
const accessPageSizeRef = React.useRef(DEFAULT_PAGE_SIZE)
|
|
61
57
|
|
|
62
58
|
const fetchActions = React.useCallback(async (page: number, pageSize: number) => {
|
|
@@ -99,7 +95,6 @@ export default function AuditLogsPage() {
|
|
|
99
95
|
})
|
|
100
96
|
setActionsTotal(actionsRes.total ?? (actionsRes.items?.length ?? 0))
|
|
101
97
|
setActionsTotalPages(actionsRes.totalPages ?? 1)
|
|
102
|
-
setActionsTotalIsCapped(actionsRes.totalIsCapped === true)
|
|
103
98
|
setAccessLogs(accessRes.items ?? [])
|
|
104
99
|
const resolvedPage = accessRes.page ?? accessPageNum
|
|
105
100
|
const resolvedPageSize = accessRes.pageSize ?? accessPageSizeNum
|
|
@@ -116,7 +111,6 @@ export default function AuditLogsPage() {
|
|
|
116
111
|
})
|
|
117
112
|
setAccessTotal(resolvedTotal)
|
|
118
113
|
setAccessTotalPages(resolvedTotalPages)
|
|
119
|
-
setAccessTotalIsCapped(accessRes.totalIsCapped === true)
|
|
120
114
|
}, [fetchActions, fetchAccess])
|
|
121
115
|
|
|
122
116
|
const loadWithState = React.useCallback(async (
|
|
@@ -216,7 +210,6 @@ export default function AuditLogsPage() {
|
|
|
216
210
|
pageSize: actionsPageSize,
|
|
217
211
|
total: actionsTotal,
|
|
218
212
|
totalPages: actionsTotalPages,
|
|
219
|
-
totalIsCapped: actionsTotalIsCapped,
|
|
220
213
|
onPageChange: handleActionsPageChange,
|
|
221
214
|
}}
|
|
222
215
|
/>
|
|
@@ -232,7 +225,6 @@ export default function AuditLogsPage() {
|
|
|
232
225
|
pageSize: accessPageSize,
|
|
233
226
|
total: accessTotal,
|
|
234
227
|
totalPages: accessTotalPages,
|
|
235
|
-
totalIsCapped: accessTotalIsCapped,
|
|
236
228
|
onPageChange: handleAccessPageChange,
|
|
237
229
|
}}
|
|
238
230
|
/>
|