@open-mercato/core 0.6.7-develop.6863.1.61001cf9a8 → 0.6.7
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 +2 -2
- package/AGENTS.md +3 -3
- package/agentic/standalone-guide.md +0 -13
- package/dist/bootstrap.js +1 -16
- package/dist/bootstrap.js.map +2 -2
- package/dist/generated/entities/customer_deal_person_link/index.js +0 -2
- package/dist/generated/entities/customer_deal_person_link/index.js.map +2 -2
- package/dist/generated/entities/customer_user_invitation/index.js +0 -2
- package/dist/generated/entities/customer_user_invitation/index.js.map +2 -2
- package/dist/generated/entities/gateway_payment_operation/index.js +0 -2
- package/dist/generated/entities/gateway_payment_operation/index.js.map +2 -2
- package/dist/generated/entities/gateway_transaction/index.js +0 -2
- package/dist/generated/entities/gateway_transaction/index.js.map +2 -2
- package/dist/generated/entities/organization/index.js +0 -2
- package/dist/generated/entities/organization/index.js.map +2 -2
- package/dist/generated/entities/resources_resource/index.js +0 -2
- package/dist/generated/entities/resources_resource/index.js.map +2 -2
- package/dist/generated/entities.ids.generated.js +1 -3
- package/dist/generated/entities.ids.generated.js.map +2 -2
- package/dist/generated/entity-fields-registry.js +0 -23
- package/dist/generated/entity-fields-registry.js.map +2 -2
- package/dist/helpers/integration/salesFixtures.js +2 -31
- package/dist/helpers/integration/salesFixtures.js.map +2 -2
- package/dist/helpers/integration/salesUi.js +0 -5
- package/dist/helpers/integration/salesUi.js.map +2 -2
- package/dist/modules/api_keys/backend/api-keys/page.js +1 -2
- package/dist/modules/api_keys/backend/api-keys/page.js.map +2 -2
- package/dist/modules/attachments/api/route.js +10 -120
- package/dist/modules/attachments/api/route.js.map +2 -2
- package/dist/modules/attachments/data/entities.js +1 -67
- package/dist/modules/attachments/data/entities.js.map +2 -2
- package/dist/modules/attachments/di.js +1 -7
- package/dist/modules/attachments/di.js.map +2 -2
- package/dist/modules/attachments/fields/attachment.js +1 -1
- package/dist/modules/attachments/fields/attachment.js.map +2 -2
- package/dist/modules/attachments/lib/drivers/index.js.map +1 -1
- package/dist/modules/attachments/lib/drivers/localDriver.js +6 -19
- package/dist/modules/attachments/lib/drivers/localDriver.js.map +2 -2
- package/dist/modules/attachments/lib/upload-limits.js +0 -33
- package/dist/modules/attachments/lib/upload-limits.js.map +2 -2
- package/dist/modules/audit_logs/api/audit-logs/access/route.js +1 -5
- package/dist/modules/audit_logs/api/audit-logs/access/route.js.map +2 -2
- package/dist/modules/audit_logs/api/audit-logs/actions/export/route.js +1 -5
- package/dist/modules/audit_logs/api/audit-logs/actions/export/route.js.map +2 -2
- package/dist/modules/audit_logs/api/audit-logs/actions/route.js +1 -5
- package/dist/modules/audit_logs/api/audit-logs/actions/route.js.map +2 -2
- package/dist/modules/audit_logs/components/AccessLogsTable.js +1 -2
- package/dist/modules/audit_logs/components/AccessLogsTable.js.map +2 -2
- package/dist/modules/audit_logs/components/AuditLogsActions.js +1 -2
- package/dist/modules/audit_logs/components/AuditLogsActions.js.map +2 -2
- package/dist/modules/auth/api/admin/nav.js +4 -17
- package/dist/modules/auth/api/admin/nav.js.map +2 -2
- package/dist/modules/auth/api/profile/route.js +2 -8
- package/dist/modules/auth/api/profile/route.js.map +2 -2
- package/dist/modules/auth/api/users/route.js +19 -8
- package/dist/modules/auth/api/users/route.js.map +2 -2
- package/dist/modules/auth/backend/auth/profile/page.js.map +2 -2
- package/dist/modules/auth/backend/profile/change-password/page.js.map +2 -2
- package/dist/modules/auth/backend/roles/page.js +1 -2
- package/dist/modules/auth/backend/roles/page.js.map +2 -2
- package/dist/modules/auth/backend/settings/page.js +9 -14
- package/dist/modules/auth/backend/settings/page.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/cli.js +1 -1
- package/dist/modules/auth/cli.js.map +2 -2
- package/dist/modules/auth/components/UserConsentsPanel.js +9 -9
- package/dist/modules/auth/components/UserConsentsPanel.js.map +2 -2
- package/dist/modules/auth/frontend/login.js +5 -6
- package/dist/modules/auth/frontend/login.js.map +2 -2
- package/dist/modules/auth/frontend/reset.js +2 -2
- package/dist/modules/auth/frontend/reset.js.map +2 -2
- package/dist/modules/auth/lib/backendChrome.js +29 -45
- package/dist/modules/auth/lib/backendChrome.js.map +2 -2
- package/dist/modules/auth/lib/setup-app.js +2 -17
- package/dist/modules/auth/lib/setup-app.js.map +2 -2
- package/dist/modules/auth/lib/tenantAccess.js +0 -7
- package/dist/modules/auth/lib/tenantAccess.js.map +2 -2
- package/dist/modules/auth/services/rbacService.js +44 -29
- package/dist/modules/auth/services/rbacService.js.map +2 -2
- package/dist/modules/business_rules/api/rules/route.js +4 -71
- package/dist/modules/business_rules/api/rules/route.js.map +2 -2
- package/dist/modules/business_rules/backend/rules/page.js +1 -2
- package/dist/modules/business_rules/backend/rules/page.js.map +2 -2
- package/dist/modules/business_rules/components/ActionBuilder.js +4 -47
- package/dist/modules/business_rules/components/ActionBuilder.js.map +3 -3
- package/dist/modules/business_rules/components/ActionRow.js +16 -106
- package/dist/modules/business_rules/components/ActionRow.js.map +2 -2
- package/dist/modules/business_rules/components/ConditionRow.js +4 -8
- package/dist/modules/business_rules/components/ConditionRow.js.map +2 -2
- package/dist/modules/business_rules/components/utils/actionValidation.js +0 -6
- package/dist/modules/business_rules/components/utils/actionValidation.js.map +2 -2
- package/dist/modules/business_rules/lib/action-executor.js +0 -148
- package/dist/modules/business_rules/lib/action-executor.js.map +2 -2
- package/dist/modules/business_rules/lib/rule-engine.js +1 -5
- package/dist/modules/business_rules/lib/rule-engine.js.map +2 -2
- package/dist/modules/catalog/backend/catalog/products/[id]/page.js +5 -6
- package/dist/modules/catalog/backend/catalog/products/[id]/page.js.map +2 -2
- package/dist/modules/catalog/backend/catalog/products/create/page.js +6 -7
- package/dist/modules/catalog/backend/catalog/products/create/page.js.map +2 -2
- package/dist/modules/catalog/components/PriceKindSettings.js +3 -3
- package/dist/modules/catalog/components/PriceKindSettings.js.map +2 -2
- package/dist/modules/catalog/components/categories/CategoriesDataTable.js +1 -2
- package/dist/modules/catalog/components/categories/CategoriesDataTable.js.map +2 -2
- package/dist/modules/catalog/components/products/ProductCategorizeSection.js +3 -3
- package/dist/modules/catalog/components/products/ProductCategorizeSection.js.map +2 -2
- package/dist/modules/catalog/components/products/ProductMediaManager.js +1 -1
- package/dist/modules/catalog/components/products/ProductMediaManager.js.map +2 -2
- package/dist/modules/catalog/components/products/ProductsDataTable.js +2 -3
- package/dist/modules/catalog/components/products/ProductsDataTable.js.map +2 -2
- package/dist/modules/catalog/components/products/VariantBuilder.js +5 -5
- package/dist/modules/catalog/components/products/VariantBuilder.js.map +2 -2
- package/dist/modules/catalog/events.js +0 -1
- package/dist/modules/catalog/events.js.map +2 -2
- package/dist/modules/catalog/widgets/injection/product-seo/widget.js +1 -1
- package/dist/modules/catalog/widgets/injection/product-seo/widget.js.map +2 -2
- package/dist/modules/communication_channels/api/post/test-seed/route.js +2 -52
- package/dist/modules/communication_channels/api/post/test-seed/route.js.map +2 -2
- package/dist/modules/communication_channels/api/post/webhook/[provider]/route.js +1 -11
- package/dist/modules/communication_channels/api/post/webhook/[provider]/route.js.map +2 -2
- package/dist/modules/communication_channels/api/post/webhooks/gmail/route.js +6 -11
- package/dist/modules/communication_channels/api/post/webhooks/gmail/route.js.map +2 -2
- package/dist/modules/communication_channels/backend/communication_channels/channels/page.js +1 -2
- package/dist/modules/communication_channels/backend/communication_channels/channels/page.js.map +2 -2
- package/dist/modules/communication_channels/backend/profile/communication-channels/page.js +3 -4
- package/dist/modules/communication_channels/backend/profile/communication-channels/page.js.map +2 -2
- package/dist/modules/communication_channels/data/enrichers.js +4 -4
- package/dist/modules/communication_channels/data/enrichers.js.map +2 -2
- package/dist/modules/communication_channels/lib/access-control.js +2 -2
- package/dist/modules/communication_channels/lib/access-control.js.map +2 -2
- package/dist/modules/configs/backend/config/system-status/page.js +1 -2
- package/dist/modules/configs/backend/config/system-status/page.js.map +2 -2
- package/dist/modules/configs/lib/upgrade-actions.js +0 -12
- package/dist/modules/configs/lib/upgrade-actions.js.map +2 -2
- package/dist/modules/currencies/backend/currencies/page.js +1 -2
- package/dist/modules/currencies/backend/currencies/page.js.map +2 -2
- package/dist/modules/currencies/backend/exchange-rates/page.js +1 -2
- package/dist/modules/currencies/backend/exchange-rates/page.js.map +2 -2
- package/dist/modules/currencies/di.js +0 -4
- package/dist/modules/currencies/di.js.map +2 -2
- package/dist/modules/customer_accounts/api/admin/users/[id].js +1 -10
- package/dist/modules/customer_accounts/api/admin/users/[id].js.map +2 -2
- package/dist/modules/customer_accounts/api/admin/users-invite.js +4 -63
- package/dist/modules/customer_accounts/api/admin/users-invite.js.map +2 -2
- package/dist/modules/customer_accounts/api/invitations/accept.js +2 -1
- package/dist/modules/customer_accounts/api/invitations/accept.js.map +2 -2
- package/dist/modules/customer_accounts/api/login.js +2 -4
- package/dist/modules/customer_accounts/api/login.js.map +2 -2
- package/dist/modules/customer_accounts/api/magic-link/verify.js +2 -4
- package/dist/modules/customer_accounts/api/magic-link/verify.js.map +2 -2
- package/dist/modules/customer_accounts/api/portal/feature-check.js +4 -5
- package/dist/modules/customer_accounts/api/portal/feature-check.js.map +2 -2
- package/dist/modules/customer_accounts/api/portal/nav.js +4 -6
- package/dist/modules/customer_accounts/api/portal/nav.js.map +2 -2
- package/dist/modules/customer_accounts/api/portal/profile.js +1 -5
- package/dist/modules/customer_accounts/api/portal/profile.js.map +2 -2
- package/dist/modules/customer_accounts/api/portal/sessions-refresh.js +3 -3
- package/dist/modules/customer_accounts/api/portal/sessions-refresh.js.map +2 -2
- package/dist/modules/customer_accounts/api/portal/users-invite.js +2 -22
- package/dist/modules/customer_accounts/api/portal/users-invite.js.map +2 -2
- package/dist/modules/customer_accounts/backend/customer_accounts/roles/page.js +1 -2
- package/dist/modules/customer_accounts/backend/customer_accounts/roles/page.js.map +2 -2
- package/dist/modules/customer_accounts/backend/customer_accounts/users/page.js +1 -2
- package/dist/modules/customer_accounts/backend/customer_accounts/users/page.js.map +2 -2
- package/dist/modules/customer_accounts/data/entities.js +0 -3
- package/dist/modules/customer_accounts/data/entities.js.map +2 -2
- package/dist/modules/customer_accounts/data/validators.js +0 -1
- package/dist/modules/customer_accounts/data/validators.js.map +2 -2
- package/dist/modules/customer_accounts/lib/customerAuth.js +2 -7
- package/dist/modules/customer_accounts/lib/customerAuth.js.map +2 -2
- package/dist/modules/customer_accounts/lib/customerAuthServer.js +1 -2
- package/dist/modules/customer_accounts/lib/customerAuthServer.js.map +2 -2
- package/dist/modules/customer_accounts/lib/customerEntityOwnership.js +3 -29
- package/dist/modules/customer_accounts/lib/customerEntityOwnership.js.map +2 -2
- package/dist/modules/customer_accounts/lib/customerUrl.js +10 -19
- package/dist/modules/customer_accounts/lib/customerUrl.js.map +2 -2
- package/dist/modules/customer_accounts/services/customerInvitationService.js +2 -32
- package/dist/modules/customer_accounts/services/customerInvitationService.js.map +2 -2
- package/dist/modules/customer_accounts/services/customerRbacService.js +3 -12
- package/dist/modules/customer_accounts/services/customerRbacService.js.map +2 -2
- package/dist/modules/customer_accounts/setup.js +0 -6
- package/dist/modules/customer_accounts/setup.js.map +2 -2
- package/dist/modules/customer_accounts/subscribers/autoLinkCrm.js +7 -47
- package/dist/modules/customer_accounts/subscribers/autoLinkCrm.js.map +2 -2
- package/dist/modules/customer_accounts/widgets/injection/account-status/widget.client.js +2 -2
- package/dist/modules/customer_accounts/widgets/injection/account-status/widget.client.js.map +2 -2
- package/dist/modules/customer_accounts/widgets/injection/portal-ai-assistant-trigger/widget.client.js +1 -1
- package/dist/modules/customer_accounts/widgets/injection/portal-ai-assistant-trigger/widget.client.js.map +2 -2
- package/dist/modules/customer_accounts/widgets/injection-table.js +1 -1
- package/dist/modules/customer_accounts/widgets/injection-table.js.map +2 -2
- package/dist/modules/customers/analytics.js +1 -4
- package/dist/modules/customers/analytics.js.map +2 -2
- package/dist/modules/customers/api/companies/[id]/route.js +4 -3
- package/dist/modules/customers/api/companies/[id]/route.js.map +2 -2
- package/dist/modules/customers/api/deals/[id]/people/route.js +2 -4
- package/dist/modules/customers/api/deals/[id]/people/route.js.map +2 -2
- package/dist/modules/customers/api/deals/[id]/route.js +3 -7
- package/dist/modules/customers/api/deals/[id]/route.js.map +2 -2
- package/dist/modules/customers/api/deals/aggregate/route.js +4 -5
- package/dist/modules/customers/api/deals/aggregate/route.js.map +2 -2
- package/dist/modules/customers/api/deals/summary/route.js +119 -14
- package/dist/modules/customers/api/deals/summary/route.js.map +2 -2
- package/dist/modules/customers/api/people/[id]/companies/enriched/route.js +2 -3
- package/dist/modules/customers/api/people/[id]/companies/enriched/route.js.map +2 -2
- package/dist/modules/customers/api/utils.js +18 -12
- package/dist/modules/customers/api/utils.js.map +2 -2
- package/dist/modules/customers/backend/customers/companies/[id]/page.js +1 -2
- package/dist/modules/customers/backend/customers/companies/[id]/page.js.map +2 -2
- package/dist/modules/customers/backend/customers/companies/page.js +1 -2
- package/dist/modules/customers/backend/customers/companies/page.js.map +2 -2
- package/dist/modules/customers/backend/customers/companies-v2/[id]/page.js +5 -16
- package/dist/modules/customers/backend/customers/companies-v2/[id]/page.js.map +2 -2
- package/dist/modules/customers/backend/customers/deals/[id]/page.js +11 -18
- package/dist/modules/customers/backend/customers/deals/[id]/page.js.map +2 -2
- package/dist/modules/customers/backend/customers/deals/page.js +1 -2
- package/dist/modules/customers/backend/customers/deals/page.js.map +2 -2
- package/dist/modules/customers/backend/customers/deals/pipeline/components/QuickDealDialog.js +3 -17
- package/dist/modules/customers/backend/customers/deals/pipeline/components/QuickDealDialog.js.map +2 -2
- package/dist/modules/customers/backend/customers/deals/pipeline/page.js +1 -7
- package/dist/modules/customers/backend/customers/deals/pipeline/page.js.map +2 -2
- package/dist/modules/customers/backend/customers/people/[id]/page.js +1 -2
- package/dist/modules/customers/backend/customers/people/[id]/page.js.map +2 -2
- package/dist/modules/customers/backend/customers/people/page.js +1 -2
- package/dist/modules/customers/backend/customers/people/page.js.map +2 -2
- package/dist/modules/customers/backend/customers/people-v2/[id]/page.js +10 -26
- package/dist/modules/customers/backend/customers/people-v2/[id]/page.js.map +2 -2
- package/dist/modules/customers/cli.js +11 -28
- package/dist/modules/customers/cli.js.map +2 -2
- package/dist/modules/customers/commands/deals.js +10 -48
- package/dist/modules/customers/commands/deals.js.map +2 -2
- package/dist/modules/customers/commands/people.js +0 -2
- package/dist/modules/customers/commands/people.js.map +2 -2
- package/dist/modules/customers/components/CustomerTodosTable.js +1 -2
- package/dist/modules/customers/components/CustomerTodosTable.js.map +2 -2
- package/dist/modules/customers/components/detail/ActiveDealCard.js +1 -2
- package/dist/modules/customers/components/detail/ActiveDealCard.js.map +2 -2
- package/dist/modules/customers/components/detail/ActivitiesDayStrip.js +3 -2
- package/dist/modules/customers/components/detail/ActivitiesDayStrip.js.map +2 -2
- package/dist/modules/customers/components/detail/CompanyDetailTabs.js +6 -26
- package/dist/modules/customers/components/detail/CompanyDetailTabs.js.map +2 -2
- package/dist/modules/customers/components/detail/CompanyKpiBar.js +5 -6
- package/dist/modules/customers/components/detail/CompanyKpiBar.js.map +2 -2
- package/dist/modules/customers/components/detail/ConfirmDealLostDialog.js +1 -1
- package/dist/modules/customers/components/detail/ConfirmDealLostDialog.js.map +1 -1
- package/dist/modules/customers/components/detail/DealDetailTabs.js +8 -30
- package/dist/modules/customers/components/detail/DealDetailTabs.js.map +2 -2
- package/dist/modules/customers/components/detail/DealForm.js +1 -2
- package/dist/modules/customers/components/detail/DealForm.js.map +2 -2
- package/dist/modules/customers/components/detail/DealsSection.js +1 -1
- package/dist/modules/customers/components/detail/DealsSection.js.map +2 -2
- package/dist/modules/customers/components/detail/PersonDetailTabs.js +8 -30
- package/dist/modules/customers/components/detail/PersonDetailTabs.js.map +2 -2
- package/dist/modules/customers/components/detail/ScheduleActivityDialog.js +216 -231
- package/dist/modules/customers/components/detail/ScheduleActivityDialog.js.map +2 -2
- package/dist/modules/customers/components/detail/dashboard/helpers.js +3 -4
- package/dist/modules/customers/components/detail/dashboard/helpers.js.map +2 -2
- package/dist/modules/customers/components/formConfig.js +10 -14
- package/dist/modules/customers/components/formConfig.js.map +2 -2
- package/dist/modules/customers/data/entities.js +0 -8
- package/dist/modules/customers/data/entities.js.map +2 -2
- package/dist/modules/customers/data/validators.js +2 -5
- package/dist/modules/customers/data/validators.js.map +2 -2
- package/dist/modules/customers/lib/calendar/format.js +4 -8
- package/dist/modules/customers/lib/calendar/format.js.map +2 -2
- package/dist/modules/customers/lib/visibilityFilter.js +4 -6
- package/dist/modules/customers/lib/visibilityFilter.js.map +2 -2
- package/dist/modules/customers/search.js +29 -50
- package/dist/modules/customers/search.js.map +2 -2
- package/dist/modules/dashboards/api/layout/[itemId]/route.js +3 -6
- package/dist/modules/dashboards/api/layout/[itemId]/route.js.map +2 -2
- package/dist/modules/dashboards/api/layout/route.js +9 -22
- package/dist/modules/dashboards/api/layout/route.js.map +2 -2
- package/dist/modules/dashboards/api/roles/widgets/route.js +3 -9
- package/dist/modules/dashboards/api/roles/widgets/route.js.map +2 -2
- package/dist/modules/dashboards/api/users/widgets/route.js +3 -9
- package/dist/modules/dashboards/api/users/widgets/route.js.map +2 -2
- package/dist/modules/dashboards/api/widgets/catalog.js +3 -6
- package/dist/modules/dashboards/api/widgets/catalog.js.map +2 -2
- package/dist/modules/dashboards/api/widgets/data/batch/route.js +3 -12
- package/dist/modules/dashboards/api/widgets/data/batch/route.js.map +2 -2
- package/dist/modules/dashboards/api/widgets/data/route.js +3 -28
- package/dist/modules/dashboards/api/widgets/data/route.js.map +2 -2
- package/dist/modules/dashboards/api/widgets/data/schema.js +18 -28
- package/dist/modules/dashboards/api/widgets/data/schema.js.map +2 -2
- package/dist/modules/dashboards/lib/access.js +3 -5
- package/dist/modules/dashboards/lib/access.js.map +2 -2
- package/dist/modules/dashboards/lib/aggregations.js +46 -113
- package/dist/modules/dashboards/lib/aggregations.js.map +2 -2
- package/dist/modules/dashboards/lib/formatters.js +11 -84
- package/dist/modules/dashboards/lib/formatters.js.map +2 -2
- package/dist/modules/dashboards/services/widgetDataService.js +14 -316
- package/dist/modules/dashboards/services/widgetDataService.js.map +2 -2
- package/dist/modules/dashboards/widgets/dashboard/aov-kpi/widget.client.js +3 -9
- package/dist/modules/dashboards/widgets/dashboard/aov-kpi/widget.client.js.map +2 -2
- package/dist/modules/dashboards/widgets/dashboard/pipeline-summary/config.js +2 -52
- package/dist/modules/dashboards/widgets/dashboard/pipeline-summary/config.js.map +2 -2
- package/dist/modules/dashboards/widgets/dashboard/pipeline-summary/widget.client.js +30 -52
- package/dist/modules/dashboards/widgets/dashboard/pipeline-summary/widget.client.js.map +2 -2
- package/dist/modules/dashboards/widgets/dashboard/pipeline-summary/widget.js +2 -2
- package/dist/modules/dashboards/widgets/dashboard/pipeline-summary/widget.js.map +2 -2
- package/dist/modules/dashboards/widgets/dashboard/revenue-kpi/widget.client.js +3 -9
- package/dist/modules/dashboards/widgets/dashboard/revenue-kpi/widget.client.js.map +2 -2
- package/dist/modules/dashboards/widgets/dashboard/revenue-trend/widget.client.js +3 -8
- package/dist/modules/dashboards/widgets/dashboard/revenue-trend/widget.client.js.map +2 -2
- package/dist/modules/dashboards/widgets/dashboard/sales-by-region/widget.client.js +18 -26
- package/dist/modules/dashboards/widgets/dashboard/sales-by-region/widget.client.js.map +2 -2
- package/dist/modules/dashboards/widgets/dashboard/top-customers/widget.client.js +14 -22
- package/dist/modules/dashboards/widgets/dashboard/top-customers/widget.client.js.map +2 -2
- package/dist/modules/dashboards/widgets/dashboard/top-products/widget.client.js +4 -10
- package/dist/modules/dashboards/widgets/dashboard/top-products/widget.client.js.map +2 -2
- package/dist/modules/data_sync/api/mappings/[id]/route.js +9 -22
- package/dist/modules/data_sync/api/mappings/[id]/route.js.map +2 -2
- package/dist/modules/data_sync/api/mappings/route.js +4 -13
- package/dist/modules/data_sync/api/mappings/route.js.map +2 -2
- package/dist/modules/data_sync/api/options.js +2 -7
- package/dist/modules/data_sync/api/options.js.map +2 -2
- package/dist/modules/data_sync/api/run.js +2 -7
- package/dist/modules/data_sync/api/run.js.map +2 -2
- package/dist/modules/data_sync/api/runs/[id]/cancel.js +3 -8
- package/dist/modules/data_sync/api/runs/[id]/cancel.js.map +2 -2
- package/dist/modules/data_sync/api/runs/[id]/retry.js +2 -7
- package/dist/modules/data_sync/api/runs/[id]/retry.js.map +2 -2
- package/dist/modules/data_sync/api/runs/[id]/route.js +3 -8
- package/dist/modules/data_sync/api/runs/[id]/route.js.map +2 -2
- package/dist/modules/data_sync/api/runs.js +2 -7
- package/dist/modules/data_sync/api/runs.js.map +2 -2
- package/dist/modules/data_sync/api/schedules/[id]/route.js +6 -19
- package/dist/modules/data_sync/api/schedules/[id]/route.js.map +2 -2
- package/dist/modules/data_sync/api/schedules/route.js +4 -13
- package/dist/modules/data_sync/api/schedules/route.js.map +2 -2
- package/dist/modules/data_sync/api/validate.js +4 -9
- package/dist/modules/data_sync/api/validate.js.map +2 -2
- package/dist/modules/data_sync/backend/data-sync/page.js +1 -2
- package/dist/modules/data_sync/backend/data-sync/page.js.map +2 -2
- package/dist/modules/data_sync/lib/queue.js +1 -16
- package/dist/modules/data_sync/lib/queue.js.map +2 -2
- package/dist/modules/data_sync/lib/start-run.js +1 -2
- package/dist/modules/data_sync/lib/start-run.js.map +2 -2
- package/dist/modules/data_sync/lib/sync-engine.js +2 -35
- package/dist/modules/data_sync/lib/sync-engine.js.map +2 -2
- package/dist/modules/data_sync/lib/sync-run-service.js +2 -70
- package/dist/modules/data_sync/lib/sync-run-service.js.map +2 -2
- package/dist/modules/data_sync/workers/sync-export.js +2 -9
- package/dist/modules/data_sync/workers/sync-export.js.map +2 -2
- package/dist/modules/data_sync/workers/sync-import.js +2 -9
- package/dist/modules/data_sync/workers/sync-import.js.map +2 -2
- package/dist/modules/dictionaries/api/[dictionaryId]/entries/route.js +12 -34
- package/dist/modules/dictionaries/api/[dictionaryId]/entries/route.js.map +2 -2
- package/dist/modules/dictionaries/api/openapi.js +2 -15
- package/dist/modules/dictionaries/api/openapi.js.map +2 -2
- package/dist/modules/dictionaries/components/DictionaryEntrySelect.js +1 -1
- package/dist/modules/dictionaries/components/DictionaryEntrySelect.js.map +2 -2
- package/dist/modules/dictionaries/components/hooks/useDictionaryEntries.js +29 -30
- package/dist/modules/dictionaries/components/hooks/useDictionaryEntries.js.map +2 -2
- package/dist/modules/dictionaries/data/validators.js +0 -7
- package/dist/modules/dictionaries/data/validators.js.map +2 -2
- package/dist/modules/dictionaries/lib/clientEntries.js +3 -4
- package/dist/modules/dictionaries/lib/clientEntries.js.map +2 -2
- package/dist/modules/directory/api/organization-branding/route.js +3 -10
- package/dist/modules/directory/api/organization-branding/route.js.map +2 -2
- package/dist/modules/directory/api/organization-switcher/route.js +20 -84
- package/dist/modules/directory/api/organization-switcher/route.js.map +2 -2
- package/dist/modules/directory/api/organizations/route.js +0 -7
- package/dist/modules/directory/api/organizations/route.js.map +3 -3
- package/dist/modules/directory/api/tenants/route.js +2 -8
- package/dist/modules/directory/api/tenants/route.js.map +2 -2
- package/dist/modules/directory/backend/directory/branding/page.js +8 -31
- package/dist/modules/directory/backend/directory/branding/page.js.map +2 -2
- package/dist/modules/directory/backend/directory/organizations/[id]/edit/page.js +16 -7
- package/dist/modules/directory/backend/directory/organizations/[id]/edit/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/commands/organizations.js +1 -8
- package/dist/modules/directory/commands/organizations.js.map +2 -2
- package/dist/modules/directory/commands/tenants.js +0 -6
- package/dist/modules/directory/commands/tenants.js.map +2 -2
- package/dist/modules/directory/data/entities.js +0 -4
- package/dist/modules/directory/data/entities.js.map +2 -2
- package/dist/modules/directory/data/validators.js +0 -2
- package/dist/modules/directory/data/validators.js.map +2 -2
- package/dist/modules/directory/subscribers/invalidateOrgScopeCache.js +1 -5
- package/dist/modules/directory/subscribers/invalidateOrgScopeCache.js.map +2 -2
- package/dist/modules/directory/utils/organizationScope.js +3 -11
- package/dist/modules/directory/utils/organizationScope.js.map +2 -2
- package/dist/modules/entities/api/definitions.js +3 -53
- package/dist/modules/entities/api/definitions.js.map +2 -2
- package/dist/modules/entities/api/entities.js +2 -21
- package/dist/modules/entities/api/entities.js.map +2 -2
- package/dist/modules/entities/api/entity-settings.js +9 -59
- package/dist/modules/entities/api/entity-settings.js.map +2 -2
- package/dist/modules/entities/api/records.js +24 -3
- package/dist/modules/entities/api/records.js.map +2 -2
- package/dist/modules/entities/api/relations/options.js +16 -11
- package/dist/modules/entities/api/relations/options.js.map +2 -2
- package/dist/modules/entities/api/sidebar-entities.js +12 -34
- package/dist/modules/entities/api/sidebar-entities.js.map +2 -2
- package/dist/modules/entities/backend/entities/user/[entityId]/records/page.js +4 -23
- package/dist/modules/entities/backend/entities/user/[entityId]/records/page.js.map +2 -2
- package/dist/modules/entities/backend/entities/user/create/page.js +7 -16
- package/dist/modules/entities/backend/entities/user/create/page.js.map +2 -2
- package/dist/modules/entities/cli.js +19 -193
- package/dist/modules/entities/cli.js.map +2 -2
- package/dist/modules/entities/components/SystemEntitiesTable.js +1 -2
- package/dist/modules/entities/components/SystemEntitiesTable.js.map +2 -2
- package/dist/modules/entities/components/UserEntitiesTable.js +1 -2
- package/dist/modules/entities/components/UserEntitiesTable.js.map +2 -2
- package/dist/modules/entities/lib/entityAcl.js +9 -87
- package/dist/modules/entities/lib/entityAcl.js.map +3 -3
- package/dist/modules/feature_toggles/components/FeatureGuard.js +2 -3
- package/dist/modules/feature_toggles/components/FeatureGuard.js.map +2 -2
- package/dist/modules/feature_toggles/components/hooks/useFeatureFlagBoolean.js +2 -5
- package/dist/modules/feature_toggles/components/hooks/useFeatureFlagBoolean.js.map +2 -2
- package/dist/modules/feature_toggles/components/hooks/useFeatureFlagJson.js +2 -5
- package/dist/modules/feature_toggles/components/hooks/useFeatureFlagJson.js.map +2 -2
- package/dist/modules/feature_toggles/components/hooks/useFeatureFlagNumber.js +2 -5
- package/dist/modules/feature_toggles/components/hooks/useFeatureFlagNumber.js.map +2 -2
- package/dist/modules/feature_toggles/components/hooks/useFeatureFlagString.js +2 -5
- package/dist/modules/feature_toggles/components/hooks/useFeatureFlagString.js.map +2 -2
- package/dist/modules/inbox_ops/ai-tools.js +2 -5
- package/dist/modules/inbox_ops/ai-tools.js.map +2 -2
- package/dist/modules/inbox_ops/api/proposals/[id]/actions/[actionId]/route.js +1 -14
- package/dist/modules/inbox_ops/api/proposals/[id]/actions/[actionId]/route.js.map +2 -2
- package/dist/modules/inbox_ops/api/proposals/route.js +1 -16
- package/dist/modules/inbox_ops/api/proposals/route.js.map +2 -2
- package/dist/modules/inbox_ops/api/webhook/inbound.js +10 -14
- package/dist/modules/inbox_ops/api/webhook/inbound.js.map +2 -2
- package/dist/modules/inbox_ops/backend/inbox-ops/log/page.js +6 -6
- package/dist/modules/inbox_ops/backend/inbox-ops/log/page.js.map +2 -2
- package/dist/modules/inbox_ops/components/proposals/EditActionDialog.js +20 -25
- package/dist/modules/inbox_ops/components/proposals/EditActionDialog.js.map +2 -2
- package/dist/modules/inbox_ops/search.js +4 -15
- package/dist/modules/inbox_ops/search.js.map +2 -2
- package/dist/modules/integrations/api/[id]/credentials/route.js +5 -11
- package/dist/modules/integrations/api/[id]/credentials/route.js.map +2 -2
- package/dist/modules/integrations/api/[id]/health/route.js +3 -6
- package/dist/modules/integrations/api/[id]/health/route.js.map +2 -2
- package/dist/modules/integrations/api/[id]/route.js +3 -6
- package/dist/modules/integrations/api/[id]/route.js.map +2 -2
- package/dist/modules/integrations/api/[id]/state/route.js +3 -6
- package/dist/modules/integrations/api/[id]/state/route.js.map +2 -2
- package/dist/modules/integrations/api/[id]/version/route.js +3 -6
- package/dist/modules/integrations/api/[id]/version/route.js.map +2 -2
- package/dist/modules/integrations/api/logs/route.js +3 -6
- package/dist/modules/integrations/api/logs/route.js.map +2 -2
- package/dist/modules/integrations/api/route.js +3 -6
- package/dist/modules/integrations/api/route.js.map +2 -2
- package/dist/modules/integrations/api/umes-read.js +2 -2
- package/dist/modules/integrations/api/umes-read.js.map +2 -2
- package/dist/modules/integrations/backend/integrations/[id]/page.js +4 -2
- package/dist/modules/integrations/backend/integrations/[id]/page.js.map +2 -2
- package/dist/modules/integrations/lib/organization-scope.js +9 -2
- package/dist/modules/integrations/lib/organization-scope.js.map +2 -2
- package/dist/modules/integrations/widgets/injection/external-ids/widget.client.js +5 -0
- package/dist/modules/integrations/widgets/injection/external-ids/widget.client.js.map +2 -2
- package/dist/modules/messages/api/[id]/route.js +0 -15
- package/dist/modules/messages/api/[id]/route.js.map +2 -2
- package/dist/modules/messages/api/route.js +8 -77
- package/dist/modules/messages/api/route.js.map +2 -2
- package/dist/modules/messages/components/ComposeMessagePageClient.js +1 -2
- package/dist/modules/messages/components/ComposeMessagePageClient.js.map +2 -2
- package/dist/modules/messages/components/MessageDetailPageClient.js +2 -3
- package/dist/modules/messages/components/MessageDetailPageClient.js.map +2 -2
- package/dist/modules/messages/components/MessagesInboxPageClient.js +1 -2
- package/dist/modules/messages/components/MessagesInboxPageClient.js.map +2 -2
- package/dist/modules/messages/components/message-detail/panels/dialogs.js +1 -1
- package/dist/modules/messages/components/message-detail/panels/dialogs.js.map +1 -1
- package/dist/modules/messages/lib/routeHelpers.js +3 -1
- package/dist/modules/messages/lib/routeHelpers.js.map +2 -2
- package/dist/modules/messages/lib/searchLookup.js +16 -8
- package/dist/modules/messages/lib/searchLookup.js.map +2 -2
- package/dist/modules/messages/search.js +5 -10
- package/dist/modules/messages/search.js.map +2 -2
- package/dist/modules/notifications/api/route.js +4 -83
- package/dist/modules/notifications/api/route.js.map +2 -2
- package/dist/modules/notifications/api/unread-count/route.js +6 -25
- package/dist/modules/notifications/api/unread-count/route.js.map +2 -2
- package/dist/modules/notifications/di.js +1 -1
- package/dist/modules/notifications/di.js.map +2 -2
- package/dist/modules/notifications/events.js +2 -4
- package/dist/modules/notifications/events.js.map +2 -2
- package/dist/modules/notifications/lib/notificationRecipients.js +7 -6
- package/dist/modules/notifications/lib/notificationRecipients.js.map +2 -2
- package/dist/modules/notifications/lib/notificationService.js +4 -48
- package/dist/modules/notifications/lib/notificationService.js.map +2 -2
- package/dist/modules/notifications/lib/routeHelpers.js +2 -16
- package/dist/modules/notifications/lib/routeHelpers.js.map +2 -2
- package/dist/modules/payment_gateways/api/capture/route.js +1 -1
- package/dist/modules/payment_gateways/api/capture/route.js.map +2 -2
- package/dist/modules/payment_gateways/api/sessions/route.js +3 -6
- package/dist/modules/payment_gateways/api/sessions/route.js.map +2 -2
- package/dist/modules/payment_gateways/api/webhook/[provider]/route.js +1 -11
- package/dist/modules/payment_gateways/api/webhook/[provider]/route.js.map +2 -2
- package/dist/modules/payment_gateways/backend/payment-gateways/page.js +2 -3
- package/dist/modules/payment_gateways/backend/payment-gateways/page.js.map +2 -2
- package/dist/modules/payment_gateways/data/entities.js +0 -11
- package/dist/modules/payment_gateways/data/entities.js.map +2 -2
- package/dist/modules/payment_gateways/di.js +1 -17
- package/dist/modules/payment_gateways/di.js.map +2 -2
- package/dist/modules/payment_gateways/lib/gateway-service.js +14 -93
- package/dist/modules/payment_gateways/lib/gateway-service.js.map +2 -2
- package/dist/modules/payment_gateways/lib/payment-operation-idempotency.js +0 -1
- package/dist/modules/payment_gateways/lib/payment-operation-idempotency.js.map +2 -2
- package/dist/modules/payment_gateways/lib/session-idempotency.js +0 -33
- package/dist/modules/payment_gateways/lib/session-idempotency.js.map +2 -2
- package/dist/modules/payment_gateways/setup.js +0 -47
- package/dist/modules/payment_gateways/setup.js.map +2 -2
- package/dist/modules/planner/components/AvailabilityRulesEditor.js +4 -4
- package/dist/modules/planner/components/AvailabilityRulesEditor.js.map +2 -2
- package/dist/modules/planner/components/unavailabilityReasons.js +3 -3
- package/dist/modules/planner/components/unavailabilityReasons.js.map +2 -2
- package/dist/modules/portal/frontend/[orgSlug]/portal/dashboard/page.js +3 -3
- package/dist/modules/portal/frontend/[orgSlug]/portal/dashboard/page.js.map +2 -2
- package/dist/modules/portal/frontend/[orgSlug]/portal/login/page.js +3 -3
- package/dist/modules/portal/frontend/[orgSlug]/portal/login/page.js.map +2 -2
- package/dist/modules/portal/frontend/[orgSlug]/portal/page.js +3 -3
- package/dist/modules/portal/frontend/[orgSlug]/portal/page.js.map +2 -2
- package/dist/modules/portal/frontend/[orgSlug]/portal/profile/page.js +3 -3
- package/dist/modules/portal/frontend/[orgSlug]/portal/profile/page.js.map +2 -2
- package/dist/modules/portal/frontend/[orgSlug]/portal/reset-password/page.js +3 -3
- package/dist/modules/portal/frontend/[orgSlug]/portal/reset-password/page.js.map +2 -2
- package/dist/modules/portal/frontend/[orgSlug]/portal/signup/page.js +3 -3
- package/dist/modules/portal/frontend/[orgSlug]/portal/signup/page.js.map +2 -2
- package/dist/modules/progress/lib/progressService.js +0 -2
- package/dist/modules/progress/lib/progressService.js.map +2 -2
- package/dist/modules/progress/lib/progressServiceImpl.js +104 -322
- package/dist/modules/progress/lib/progressServiceImpl.js.map +2 -2
- package/dist/modules/query_index/api/openapi.js +1 -13
- package/dist/modules/query_index/api/openapi.js.map +2 -2
- package/dist/modules/query_index/api/reindex.js +0 -10
- package/dist/modules/query_index/api/reindex.js.map +2 -2
- package/dist/modules/query_index/api/status.js +105 -165
- package/dist/modules/query_index/api/status.js.map +2 -2
- package/dist/modules/query_index/cli.js +1 -125
- package/dist/modules/query_index/cli.js.map +2 -2
- package/dist/modules/query_index/components/QueryIndexesTable.js +42 -130
- package/dist/modules/query_index/components/QueryIndexesTable.js.map +2 -2
- package/dist/modules/query_index/data/entities.js +1 -2
- package/dist/modules/query_index/data/entities.js.map +2 -2
- package/dist/modules/query_index/di.js +0 -3
- package/dist/modules/query_index/di.js.map +2 -2
- package/dist/modules/query_index/lib/batch.js +4 -11
- package/dist/modules/query_index/lib/batch.js.map +2 -2
- package/dist/modules/query_index/lib/coverage.js +9 -21
- package/dist/modules/query_index/lib/coverage.js.map +2 -2
- package/dist/modules/query_index/lib/document.js +5 -12
- package/dist/modules/query_index/lib/document.js.map +2 -2
- package/dist/modules/query_index/lib/engine.js +48 -105
- package/dist/modules/query_index/lib/engine.js.map +2 -2
- package/dist/modules/query_index/lib/indexer.js +19 -95
- package/dist/modules/query_index/lib/indexer.js.map +2 -2
- package/dist/modules/query_index/lib/reindexer.js +37 -43
- package/dist/modules/query_index/lib/reindexer.js.map +2 -2
- package/dist/modules/query_index/lib/search-tokens.js +15 -34
- package/dist/modules/query_index/lib/search-tokens.js.map +2 -2
- package/dist/modules/query_index/lib/subscriber-scope.js +3 -2
- package/dist/modules/query_index/lib/subscriber-scope.js.map +2 -2
- package/dist/modules/query_index/subscribers/coverage_refresh.js +0 -4
- package/dist/modules/query_index/subscribers/coverage_refresh.js.map +2 -2
- package/dist/modules/query_index/subscribers/delete_one.js +1 -53
- package/dist/modules/query_index/subscribers/delete_one.js.map +3 -3
- package/dist/modules/query_index/subscribers/upsert_one.js +0 -60
- package/dist/modules/query_index/subscribers/upsert_one.js.map +3 -3
- package/dist/modules/resources/api/resources.js +0 -2
- package/dist/modules/resources/api/resources.js.map +2 -2
- package/dist/modules/resources/backend/resources/resource-types/page.js +1 -2
- package/dist/modules/resources/backend/resources/resource-types/page.js.map +2 -2
- package/dist/modules/resources/backend/resources/resources/[id]/page.js +2 -3
- package/dist/modules/resources/backend/resources/resources/[id]/page.js.map +2 -2
- package/dist/modules/resources/backend/resources/resources/page.js +1 -2
- package/dist/modules/resources/backend/resources/resources/page.js.map +2 -2
- package/dist/modules/resources/commands/resources.js +0 -9
- package/dist/modules/resources/commands/resources.js.map +2 -2
- package/dist/modules/resources/components/detail/dictionaries.js +3 -3
- package/dist/modules/resources/components/detail/dictionaries.js.map +2 -2
- package/dist/modules/resources/data/entities.js +0 -3
- package/dist/modules/resources/data/entities.js.map +2 -2
- package/dist/modules/resources/data/validators.js +2 -6
- package/dist/modules/resources/data/validators.js.map +2 -2
- package/dist/modules/resources/lib/seeds.js +9 -16
- package/dist/modules/resources/lib/seeds.js.map +2 -2
- package/dist/modules/sales/analytics.js +3 -7
- package/dist/modules/sales/analytics.js.map +2 -2
- package/dist/modules/sales/api/document-history/route.js +1 -2
- package/dist/modules/sales/api/document-history/route.js.map +2 -2
- package/dist/modules/sales/api/documents/factory.js +3 -14
- package/dist/modules/sales/api/documents/factory.js.map +2 -2
- package/dist/modules/sales/backend/sales/documents/[id]/page.js +3 -11
- package/dist/modules/sales/backend/sales/documents/[id]/page.js.map +2 -2
- package/dist/modules/sales/backend/sales/documents/create/page.js +14 -11
- package/dist/modules/sales/backend/sales/documents/create/page.js.map +2 -2
- package/dist/modules/sales/commands/documents.js +23 -184
- package/dist/modules/sales/commands/documents.js.map +2 -2
- package/dist/modules/sales/components/documents/ItemsSection.js +10 -20
- package/dist/modules/sales/components/documents/ItemsSection.js.map +2 -2
- package/dist/modules/sales/components/documents/LineItemDialog.js +5 -12
- package/dist/modules/sales/components/documents/LineItemDialog.js.map +2 -2
- package/dist/modules/sales/components/documents/SalesDocumentForm.js +2 -48
- package/dist/modules/sales/components/documents/SalesDocumentForm.js.map +2 -2
- package/dist/modules/sales/components/documents/SalesDocumentsTable.js +1 -4
- package/dist/modules/sales/components/documents/SalesDocumentsTable.js.map +2 -2
- package/dist/modules/sales/components/useSalesChannelsEnabled.js +35 -2
- package/dist/modules/sales/components/useSalesChannelsEnabled.js.map +2 -2
- package/dist/modules/sales/data/validators.js +5 -32
- package/dist/modules/sales/data/validators.js.map +2 -2
- package/dist/modules/sales/di.js +0 -7
- package/dist/modules/sales/di.js.map +2 -2
- package/dist/modules/sales/events.js +0 -1
- package/dist/modules/sales/events.js.map +2 -2
- package/dist/modules/sales/lib/historyHelpers.js +1 -69
- package/dist/modules/sales/lib/historyHelpers.js.map +2 -2
- package/dist/modules/sales/widgets/injection/document-history/widget.client.js +2 -51
- package/dist/modules/sales/widgets/injection/document-history/widget.client.js.map +2 -2
- package/dist/modules/sales/workflows.js +7 -10
- package/dist/modules/sales/workflows.js.map +2 -2
- package/dist/modules/shipping_carriers/api/webhook/[provider]/route.js +1 -11
- package/dist/modules/shipping_carriers/api/webhook/[provider]/route.js.map +2 -2
- package/dist/modules/shipping_carriers/lib/shipment-wizard/components/PackageEditor.js +1 -1
- package/dist/modules/shipping_carriers/lib/shipment-wizard/components/PackageEditor.js.map +1 -1
- package/dist/modules/staff/api/interceptors.js +3 -5
- package/dist/modules/staff/api/interceptors.js.map +2 -2
- package/dist/modules/staff/api/leave-requests.js +42 -45
- package/dist/modules/staff/api/leave-requests.js.map +2 -2
- package/dist/modules/staff/components/detail/dictionaries.js +3 -3
- package/dist/modules/staff/components/detail/dictionaries.js.map +2 -2
- package/dist/modules/sync_excel/api/upload/route.js +2 -15
- package/dist/modules/sync_excel/api/upload/route.js.map +2 -2
- package/dist/modules/wms/components/backend/ReleaseReservationDialog.js +1 -1
- package/dist/modules/wms/components/backend/ReleaseReservationDialog.js.map +1 -1
- package/dist/modules/wms/components/backend/WmsConfigurationPage.js +4 -5
- package/dist/modules/wms/components/backend/WmsConfigurationPage.js.map +2 -2
- package/dist/modules/wms/components/backend/WmsInventoryConsolePage.js +3 -4
- package/dist/modules/wms/components/backend/WmsInventoryConsolePage.js.map +2 -2
- package/dist/modules/wms/components/backend/WmsLocationDetailPage.js +2 -3
- package/dist/modules/wms/components/backend/WmsLocationDetailPage.js.map +2 -2
- package/dist/modules/wms/components/backend/WmsLotDetailPage.js +2 -3
- package/dist/modules/wms/components/backend/WmsLotDetailPage.js.map +2 -2
- package/dist/modules/wms/components/backend/WmsLotsListPage.js +1 -2
- package/dist/modules/wms/components/backend/WmsLotsListPage.js.map +2 -2
- package/dist/modules/wms/components/backend/WmsSkuDetailPage.js +2 -3
- package/dist/modules/wms/components/backend/WmsSkuDetailPage.js.map +2 -2
- package/dist/modules/workflows/backend/definitions/page.js +2 -3
- package/dist/modules/workflows/backend/definitions/page.js.map +2 -2
- package/dist/modules/workflows/backend/definitions/visual-editor/page.js +3 -6
- package/dist/modules/workflows/backend/definitions/visual-editor/page.js.map +2 -2
- package/dist/modules/workflows/backend/instances/page.js +9 -10
- package/dist/modules/workflows/backend/instances/page.js.map +2 -2
- package/dist/modules/workflows/backend/tasks/page.js +7 -8
- package/dist/modules/workflows/backend/tasks/page.js.map +2 -2
- package/dist/modules/workflows/components/ActivitiesEditor.js +13 -69
- package/dist/modules/workflows/components/ActivitiesEditor.js.map +2 -2
- package/dist/modules/workflows/components/BusinessRulesSelector.js +1 -1
- package/dist/modules/workflows/components/BusinessRulesSelector.js.map +2 -2
- package/dist/modules/workflows/components/DefinitionTriggersEditor.js +2 -2
- package/dist/modules/workflows/components/DefinitionTriggersEditor.js.map +2 -2
- package/dist/modules/workflows/components/EdgeEditDialogCrudForm.js +2 -1
- package/dist/modules/workflows/components/EdgeEditDialogCrudForm.js.map +2 -2
- package/dist/modules/workflows/components/NodeEditDialogCrudForm.js +2 -1
- package/dist/modules/workflows/components/NodeEditDialogCrudForm.js.map +2 -2
- package/dist/modules/workflows/components/StepsEditor.js +2 -2
- package/dist/modules/workflows/components/StepsEditor.js.map +2 -2
- package/dist/modules/workflows/components/TransitionsEditor.js +165 -207
- package/dist/modules/workflows/components/TransitionsEditor.js.map +2 -2
- package/dist/modules/workflows/components/WorkflowLegend.js +1 -1
- package/dist/modules/workflows/components/WorkflowLegend.js.map +2 -2
- package/dist/modules/workflows/components/WorkflowSelector.js +1 -1
- package/dist/modules/workflows/components/WorkflowSelector.js.map +2 -2
- package/dist/modules/workflows/components/fields/BusinessRuleConditionsEditor.js +1 -1
- package/dist/modules/workflows/components/fields/BusinessRuleConditionsEditor.js.map +2 -2
- package/dist/modules/workflows/components/fields/FormFieldArrayEditor.js +1 -1
- package/dist/modules/workflows/components/fields/FormFieldArrayEditor.js.map +2 -2
- package/dist/modules/workflows/components/fields/MappingArrayEditor.js +1 -1
- package/dist/modules/workflows/components/fields/MappingArrayEditor.js.map +2 -2
- package/dist/modules/workflows/components/fields/StartPreConditionsEditor.js +1 -1
- package/dist/modules/workflows/components/fields/StartPreConditionsEditor.js.map +2 -2
- package/dist/modules/workflows/components/fields/WorkflowSelectorField.js +4 -4
- package/dist/modules/workflows/components/fields/WorkflowSelectorField.js.map +2 -2
- package/dist/modules/workflows/data/validators.js +1 -34
- package/dist/modules/workflows/data/validators.js.map +3 -3
- package/dist/modules/workflows/events.js +0 -1
- package/dist/modules/workflows/events.js.map +2 -2
- package/dist/modules/workflows/lib/activity-executor.js +14 -59
- package/dist/modules/workflows/lib/activity-executor.js.map +2 -2
- package/dist/modules/workflows/lib/format-validation-error.js +1 -46
- package/dist/modules/workflows/lib/format-validation-error.js.map +2 -2
- package/dist/modules/workflows/widgets/injection/order-approval/widget.client.js +10 -21
- package/dist/modules/workflows/widgets/injection/order-approval/widget.client.js.map +2 -2
- package/generated/entities/customer_deal_person_link/index.ts +0 -1
- package/generated/entities/customer_user_invitation/index.ts +0 -1
- package/generated/entities/gateway_payment_operation/index.ts +0 -1
- package/generated/entities/gateway_transaction/index.ts +0 -1
- package/generated/entities/organization/index.ts +0 -1
- package/generated/entities/resources_resource/index.ts +0 -1
- package/generated/entities.ids.generated.ts +1 -3
- package/generated/entity-fields-registry.ts +0 -23
- package/package.json +18 -19
- package/src/bootstrap.ts +2 -17
- package/src/helpers/integration/salesFixtures.ts +2 -34
- package/src/helpers/integration/salesUi.ts +0 -8
- package/src/modules/api_keys/backend/api-keys/page.tsx +1 -2
- package/src/modules/attachments/api/route.ts +9 -130
- package/src/modules/attachments/data/entities.ts +0 -59
- package/src/modules/attachments/di.ts +1 -9
- package/src/modules/attachments/fields/attachment.tsx +1 -1
- package/src/modules/attachments/i18n/de.json +0 -15
- package/src/modules/attachments/i18n/en.json +0 -15
- package/src/modules/attachments/i18n/es.json +0 -15
- package/src/modules/attachments/i18n/pl.json +0 -15
- package/src/modules/attachments/lib/drivers/index.ts +1 -1
- package/src/modules/attachments/lib/drivers/localDriver.ts +8 -23
- package/src/modules/attachments/lib/drivers/types.ts +0 -5
- package/src/modules/attachments/lib/upload-limits.ts +0 -35
- package/src/modules/attachments/migrations/.snapshot-open-mercato.json +120 -648
- package/src/modules/audit_logs/api/audit-logs/access/route.ts +0 -5
- package/src/modules/audit_logs/api/audit-logs/actions/export/route.ts +0 -5
- package/src/modules/audit_logs/api/audit-logs/actions/route.ts +0 -5
- package/src/modules/audit_logs/components/AccessLogsTable.tsx +1 -2
- package/src/modules/audit_logs/components/AuditLogsActions.tsx +1 -2
- package/src/modules/auth/AGENTS.md +8 -12
- package/src/modules/auth/api/admin/nav.ts +4 -28
- package/src/modules/auth/api/profile/route.ts +2 -8
- package/src/modules/auth/api/users/route.ts +28 -8
- package/src/modules/auth/backend/auth/profile/page.tsx +0 -1
- package/src/modules/auth/backend/profile/change-password/page.tsx +0 -1
- package/src/modules/auth/backend/roles/page.tsx +1 -2
- package/src/modules/auth/backend/settings/page.tsx +8 -17
- package/src/modules/auth/backend/users/page.tsx +1 -2
- package/src/modules/auth/cli.ts +1 -1
- package/src/modules/auth/components/UserConsentsPanel.tsx +9 -9
- package/src/modules/auth/frontend/login.tsx +4 -5
- package/src/modules/auth/frontend/reset.tsx +2 -2
- package/src/modules/auth/i18n/de.json +0 -1
- package/src/modules/auth/i18n/en.json +0 -1
- package/src/modules/auth/i18n/es.json +0 -1
- package/src/modules/auth/i18n/pl.json +0 -1
- package/src/modules/auth/lib/backendChrome.tsx +33 -71
- package/src/modules/auth/lib/setup-app.ts +2 -21
- package/src/modules/auth/lib/tenantAccess.ts +0 -8
- package/src/modules/auth/services/rbacService.ts +46 -41
- package/src/modules/business_rules/api/rules/route.ts +4 -92
- package/src/modules/business_rules/backend/rules/page.tsx +1 -2
- package/src/modules/business_rules/components/ActionBuilder.tsx +5 -54
- package/src/modules/business_rules/components/ActionRow.tsx +18 -156
- package/src/modules/business_rules/components/ConditionRow.tsx +6 -9
- package/src/modules/business_rules/components/utils/actionValidation.ts +0 -6
- package/src/modules/business_rules/i18n/de.json +0 -12
- package/src/modules/business_rules/i18n/en.json +0 -12
- package/src/modules/business_rules/i18n/es.json +0 -12
- package/src/modules/business_rules/i18n/pl.json +0 -12
- package/src/modules/business_rules/lib/action-executor.ts +0 -198
- package/src/modules/business_rules/lib/rule-engine.ts +0 -4
- package/src/modules/catalog/backend/catalog/products/[id]/page.tsx +5 -6
- package/src/modules/catalog/backend/catalog/products/create/page.tsx +6 -7
- package/src/modules/catalog/components/PriceKindSettings.tsx +3 -3
- package/src/modules/catalog/components/categories/CategoriesDataTable.tsx +1 -2
- package/src/modules/catalog/components/products/ProductCategorizeSection.tsx +3 -3
- package/src/modules/catalog/components/products/ProductMediaManager.tsx +1 -1
- package/src/modules/catalog/components/products/ProductsDataTable.tsx +2 -3
- package/src/modules/catalog/components/products/VariantBuilder.tsx +5 -5
- package/src/modules/catalog/events.ts +0 -1
- package/src/modules/catalog/i18n/de.json +0 -18
- package/src/modules/catalog/i18n/en.json +0 -18
- package/src/modules/catalog/i18n/es.json +0 -18
- package/src/modules/catalog/i18n/pl.json +0 -18
- package/src/modules/catalog/widgets/injection/product-seo/widget.ts +1 -1
- package/src/modules/communication_channels/api/post/test-seed/route.ts +2 -69
- package/src/modules/communication_channels/api/post/webhook/[provider]/route.ts +1 -11
- package/src/modules/communication_channels/api/post/webhooks/gmail/route.ts +11 -17
- package/src/modules/communication_channels/backend/communication_channels/channels/page.tsx +1 -2
- package/src/modules/communication_channels/backend/profile/communication-channels/page.tsx +3 -4
- package/src/modules/communication_channels/data/enrichers.ts +26 -6
- package/src/modules/communication_channels/lib/access-control.ts +3 -3
- package/src/modules/configs/backend/config/system-status/page.tsx +1 -2
- package/src/modules/configs/lib/upgrade-actions.ts +0 -14
- package/src/modules/currencies/backend/currencies/page.tsx +1 -2
- package/src/modules/currencies/backend/exchange-rates/page.tsx +1 -2
- package/src/modules/currencies/di.ts +1 -4
- package/src/modules/currencies/i18n/de.json +0 -1
- package/src/modules/currencies/i18n/en.json +0 -1
- package/src/modules/currencies/i18n/es.json +0 -1
- package/src/modules/currencies/i18n/pl.json +0 -1
- package/src/modules/customer_accounts/AGENTS.md +3 -3
- package/src/modules/customer_accounts/api/admin/users/[id].ts +1 -16
- package/src/modules/customer_accounts/api/admin/users-invite.ts +3 -81
- package/src/modules/customer_accounts/api/invitations/accept.ts +2 -1
- package/src/modules/customer_accounts/api/login.ts +2 -4
- package/src/modules/customer_accounts/api/magic-link/verify.ts +2 -4
- package/src/modules/customer_accounts/api/portal/feature-check.ts +7 -5
- package/src/modules/customer_accounts/api/portal/nav.ts +3 -5
- package/src/modules/customer_accounts/api/portal/profile.ts +1 -5
- package/src/modules/customer_accounts/api/portal/sessions-refresh.ts +3 -3
- package/src/modules/customer_accounts/api/portal/users-invite.ts +1 -25
- package/src/modules/customer_accounts/backend/customer_accounts/roles/page.tsx +1 -2
- package/src/modules/customer_accounts/backend/customer_accounts/users/page.tsx +1 -2
- package/src/modules/customer_accounts/data/entities.ts +0 -3
- package/src/modules/customer_accounts/data/validators.ts +0 -1
- package/src/modules/customer_accounts/i18n/de.json +0 -6
- package/src/modules/customer_accounts/i18n/en.json +0 -6
- package/src/modules/customer_accounts/i18n/es.json +0 -6
- package/src/modules/customer_accounts/i18n/pl.json +0 -6
- package/src/modules/customer_accounts/lib/customerAuth.ts +2 -8
- package/src/modules/customer_accounts/lib/customerAuthServer.ts +0 -1
- package/src/modules/customer_accounts/lib/customerEntityOwnership.ts +2 -68
- package/src/modules/customer_accounts/lib/customerUrl.ts +11 -27
- package/src/modules/customer_accounts/migrations/.snapshot-open-mercato.json +0 -16
- package/src/modules/customer_accounts/services/customerInvitationService.ts +3 -56
- package/src/modules/customer_accounts/services/customerRbacService.ts +3 -16
- package/src/modules/customer_accounts/setup.ts +0 -7
- package/src/modules/customer_accounts/subscribers/autoLinkCrm.ts +8 -75
- package/src/modules/customer_accounts/widgets/injection/account-status/widget.client.tsx +2 -2
- package/src/modules/customer_accounts/widgets/injection/portal-ai-assistant-trigger/widget.client.tsx +3 -1
- package/src/modules/customer_accounts/widgets/injection-table.ts +1 -4
- package/src/modules/customers/analytics.ts +0 -3
- package/src/modules/customers/api/companies/[id]/route.ts +4 -3
- package/src/modules/customers/api/deals/[id]/people/route.ts +0 -3
- package/src/modules/customers/api/deals/[id]/route.ts +2 -10
- package/src/modules/customers/api/deals/aggregate/route.ts +4 -5
- package/src/modules/customers/api/deals/summary/route.ts +162 -15
- package/src/modules/customers/api/people/[id]/companies/enriched/route.ts +2 -3
- package/src/modules/customers/api/utils.ts +31 -12
- package/src/modules/customers/backend/customers/companies/[id]/page.tsx +1 -2
- package/src/modules/customers/backend/customers/companies/page.tsx +1 -2
- package/src/modules/customers/backend/customers/companies-v2/[id]/page.tsx +5 -17
- package/src/modules/customers/backend/customers/deals/[id]/hooks/types.ts +0 -1
- package/src/modules/customers/backend/customers/deals/[id]/page.tsx +12 -19
- package/src/modules/customers/backend/customers/deals/page.tsx +1 -2
- package/src/modules/customers/backend/customers/deals/pipeline/components/QuickDealDialog.tsx +3 -35
- package/src/modules/customers/backend/customers/deals/pipeline/page.tsx +1 -10
- package/src/modules/customers/backend/customers/people/[id]/page.tsx +1 -2
- package/src/modules/customers/backend/customers/people/page.tsx +1 -2
- package/src/modules/customers/backend/customers/people-v2/[id]/page.tsx +10 -29
- package/src/modules/customers/cli.ts +11 -28
- package/src/modules/customers/commands/deals.ts +9 -50
- package/src/modules/customers/commands/people.ts +0 -3
- package/src/modules/customers/components/CustomerTodosTable.tsx +1 -2
- package/src/modules/customers/components/detail/ActiveDealCard.tsx +1 -2
- package/src/modules/customers/components/detail/ActivitiesDayStrip.tsx +3 -2
- package/src/modules/customers/components/detail/CompanyDetailTabs.tsx +7 -30
- package/src/modules/customers/components/detail/CompanyKpiBar.tsx +5 -6
- package/src/modules/customers/components/detail/ConfirmDealLostDialog.tsx +1 -1
- package/src/modules/customers/components/detail/DealDetailTabs.tsx +9 -34
- package/src/modules/customers/components/detail/DealForm.tsx +1 -5
- package/src/modules/customers/components/detail/DealsSection.tsx +1 -1
- package/src/modules/customers/components/detail/PersonDetailTabs.tsx +9 -34
- package/src/modules/customers/components/detail/ScheduleActivityDialog.tsx +13 -28
- package/src/modules/customers/components/detail/dashboard/helpers.ts +3 -4
- package/src/modules/customers/components/formConfig.tsx +8 -12
- package/src/modules/customers/data/entities.ts +1 -9
- package/src/modules/customers/data/validators.ts +1 -6
- package/src/modules/customers/i18n/de.json +0 -72
- package/src/modules/customers/i18n/en.json +0 -72
- package/src/modules/customers/i18n/es.json +0 -72
- package/src/modules/customers/i18n/pl.json +0 -72
- package/src/modules/customers/lib/calendar/format.ts +4 -10
- package/src/modules/customers/lib/visibilityFilter.ts +5 -7
- package/src/modules/customers/migrations/.snapshot-open-mercato.json +1 -27
- package/src/modules/customers/search.ts +27 -59
- package/src/modules/dashboards/api/layout/[itemId]/route.ts +3 -6
- package/src/modules/dashboards/api/layout/route.ts +9 -22
- package/src/modules/dashboards/api/roles/widgets/route.ts +3 -9
- package/src/modules/dashboards/api/users/widgets/route.ts +3 -9
- package/src/modules/dashboards/api/widgets/catalog.ts +3 -6
- package/src/modules/dashboards/api/widgets/data/batch/route.ts +1 -12
- package/src/modules/dashboards/api/widgets/data/route.ts +1 -29
- package/src/modules/dashboards/api/widgets/data/schema.ts +19 -49
- package/src/modules/dashboards/i18n/de.json +0 -5
- package/src/modules/dashboards/i18n/en.json +0 -5
- package/src/modules/dashboards/i18n/es.json +0 -5
- package/src/modules/dashboards/i18n/pl.json +0 -5
- package/src/modules/dashboards/lib/access.ts +3 -5
- package/src/modules/dashboards/lib/aggregations.ts +48 -198
- package/src/modules/dashboards/lib/formatters.ts +12 -137
- package/src/modules/dashboards/services/widgetDataService.ts +12 -453
- package/src/modules/dashboards/widgets/dashboard/aov-kpi/widget.client.tsx +3 -9
- package/src/modules/dashboards/widgets/dashboard/pipeline-summary/config.ts +0 -86
- package/src/modules/dashboards/widgets/dashboard/pipeline-summary/widget.client.tsx +21 -42
- package/src/modules/dashboards/widgets/dashboard/pipeline-summary/widget.ts +2 -2
- package/src/modules/dashboards/widgets/dashboard/revenue-kpi/widget.client.tsx +3 -9
- package/src/modules/dashboards/widgets/dashboard/revenue-trend/widget.client.tsx +2 -7
- package/src/modules/dashboards/widgets/dashboard/sales-by-region/widget.client.tsx +15 -25
- package/src/modules/dashboards/widgets/dashboard/top-customers/widget.client.tsx +11 -21
- package/src/modules/dashboards/widgets/dashboard/top-products/widget.client.tsx +3 -9
- package/src/modules/data_sync/AGENTS.md +0 -1
- package/src/modules/data_sync/api/mappings/[id]/route.ts +9 -22
- package/src/modules/data_sync/api/mappings/route.ts +4 -13
- package/src/modules/data_sync/api/options.ts +2 -7
- package/src/modules/data_sync/api/run.ts +2 -7
- package/src/modules/data_sync/api/runs/[id]/cancel.ts +3 -8
- package/src/modules/data_sync/api/runs/[id]/retry.ts +2 -7
- package/src/modules/data_sync/api/runs/[id]/route.ts +3 -8
- package/src/modules/data_sync/api/runs.ts +2 -7
- package/src/modules/data_sync/api/schedules/[id]/route.ts +6 -19
- package/src/modules/data_sync/api/schedules/route.ts +4 -13
- package/src/modules/data_sync/api/validate.ts +4 -9
- package/src/modules/data_sync/backend/data-sync/page.tsx +1 -2
- package/src/modules/data_sync/lib/adapter.ts +0 -18
- package/src/modules/data_sync/lib/queue.ts +1 -19
- package/src/modules/data_sync/lib/start-run.ts +1 -2
- package/src/modules/data_sync/lib/sync-engine.ts +0 -46
- package/src/modules/data_sync/lib/sync-run-service.ts +1 -82
- package/src/modules/data_sync/workers/sync-export.ts +1 -8
- package/src/modules/data_sync/workers/sync-import.ts +1 -8
- package/src/modules/dictionaries/api/[dictionaryId]/entries/route.ts +11 -39
- package/src/modules/dictionaries/api/openapi.ts +0 -19
- package/src/modules/dictionaries/components/DictionaryEntrySelect.tsx +1 -1
- package/src/modules/dictionaries/components/hooks/useDictionaryEntries.ts +36 -35
- package/src/modules/dictionaries/data/validators.ts +0 -14
- package/src/modules/dictionaries/lib/clientEntries.ts +3 -4
- package/src/modules/directory/api/organization-branding/route.ts +1 -12
- package/src/modules/directory/api/organization-switcher/route.ts +26 -97
- package/src/modules/directory/api/organizations/route.ts +0 -7
- package/src/modules/directory/api/tenants/route.ts +1 -9
- package/src/modules/directory/backend/directory/branding/page.tsx +9 -34
- package/src/modules/directory/backend/directory/organizations/[id]/edit/page.tsx +14 -10
- package/src/modules/directory/backend/directory/organizations/page.tsx +1 -2
- package/src/modules/directory/backend/directory/tenants/page.tsx +1 -2
- package/src/modules/directory/commands/organizations.ts +1 -9
- package/src/modules/directory/commands/tenants.ts +0 -6
- package/src/modules/directory/data/entities.ts +0 -3
- package/src/modules/directory/data/validators.ts +0 -2
- package/src/modules/directory/i18n/de.json +1 -4
- package/src/modules/directory/i18n/en.json +1 -4
- package/src/modules/directory/i18n/es.json +1 -4
- package/src/modules/directory/i18n/pl.json +1 -4
- package/src/modules/directory/migrations/.snapshot-open-mercato.json +1 -18
- package/src/modules/directory/subscribers/invalidateOrgScopeCache.ts +1 -4
- package/src/modules/directory/utils/organizationScope.ts +3 -9
- package/src/modules/entities/api/definitions.ts +3 -55
- package/src/modules/entities/api/entities.ts +2 -30
- package/src/modules/entities/api/entity-settings.ts +22 -66
- package/src/modules/entities/api/records.ts +27 -3
- package/src/modules/entities/api/relations/options.ts +25 -11
- package/src/modules/entities/api/sidebar-entities.ts +14 -43
- package/src/modules/entities/backend/entities/user/[entityId]/records/page.tsx +75 -96
- package/src/modules/entities/backend/entities/user/create/page.tsx +7 -16
- package/src/modules/entities/cli.ts +21 -238
- package/src/modules/entities/components/SystemEntitiesTable.tsx +1 -2
- package/src/modules/entities/components/UserEntitiesTable.tsx +1 -2
- package/src/modules/entities/i18n/de.json +0 -9
- package/src/modules/entities/i18n/en.json +0 -9
- package/src/modules/entities/i18n/es.json +0 -9
- package/src/modules/entities/i18n/pl.json +0 -9
- package/src/modules/entities/lib/entityAcl.ts +11 -98
- package/src/modules/feature_toggles/components/FeatureGuard.tsx +2 -9
- package/src/modules/feature_toggles/components/hooks/useFeatureFlagBoolean.ts +1 -13
- package/src/modules/feature_toggles/components/hooks/useFeatureFlagJson.ts +3 -12
- package/src/modules/feature_toggles/components/hooks/useFeatureFlagNumber.ts +1 -10
- package/src/modules/feature_toggles/components/hooks/useFeatureFlagString.ts +1 -10
- package/src/modules/inbox_ops/ai-tools.ts +3 -5
- package/src/modules/inbox_ops/api/proposals/[id]/actions/[actionId]/route.ts +1 -17
- package/src/modules/inbox_ops/api/proposals/route.ts +1 -20
- package/src/modules/inbox_ops/api/webhook/inbound.ts +12 -14
- package/src/modules/inbox_ops/backend/inbox-ops/log/page.tsx +6 -6
- package/src/modules/inbox_ops/components/proposals/EditActionDialog.tsx +19 -24
- package/src/modules/inbox_ops/components/proposals/types.ts +0 -1
- package/src/modules/inbox_ops/i18n/de.json +0 -3
- package/src/modules/inbox_ops/i18n/en.json +0 -3
- package/src/modules/inbox_ops/i18n/es.json +0 -3
- package/src/modules/inbox_ops/i18n/pl.json +0 -3
- package/src/modules/inbox_ops/search.ts +4 -20
- package/src/modules/integrations/api/[id]/credentials/route.ts +5 -11
- package/src/modules/integrations/api/[id]/health/route.ts +3 -6
- package/src/modules/integrations/api/[id]/route.ts +3 -6
- package/src/modules/integrations/api/[id]/state/route.ts +3 -6
- package/src/modules/integrations/api/[id]/version/route.ts +3 -6
- package/src/modules/integrations/api/logs/route.ts +3 -6
- package/src/modules/integrations/api/route.ts +3 -6
- package/src/modules/integrations/api/umes-read.ts +2 -2
- package/src/modules/integrations/backend/integrations/[id]/page.tsx +2 -2
- package/src/modules/integrations/lib/organization-scope.ts +25 -5
- package/src/modules/integrations/widgets/injection/external-ids/widget.client.tsx +5 -0
- package/src/modules/messages/api/[id]/route.ts +0 -21
- package/src/modules/messages/api/route.ts +9 -109
- package/src/modules/messages/components/ComposeMessagePageClient.tsx +1 -2
- package/src/modules/messages/components/MessageDetailPageClient.tsx +2 -3
- package/src/modules/messages/components/MessagesInboxPageClient.tsx +1 -2
- package/src/modules/messages/components/message-detail/panels/dialogs.tsx +1 -1
- package/src/modules/messages/i18n/de.json +0 -2
- package/src/modules/messages/i18n/en.json +0 -2
- package/src/modules/messages/i18n/es.json +0 -2
- package/src/modules/messages/i18n/pl.json +0 -2
- package/src/modules/messages/lib/routeHelpers.ts +6 -4
- package/src/modules/messages/lib/searchLookup.ts +34 -11
- package/src/modules/messages/search.ts +5 -11
- package/src/modules/notifications/api/route.ts +3 -123
- package/src/modules/notifications/api/unread-count/route.ts +5 -42
- package/src/modules/notifications/di.ts +1 -1
- package/src/modules/notifications/events.ts +0 -2
- package/src/modules/notifications/lib/notificationRecipients.ts +8 -6
- package/src/modules/notifications/lib/notificationService.ts +1 -63
- package/src/modules/notifications/lib/routeHelpers.ts +2 -19
- package/src/modules/payment_gateways/api/capture/route.ts +1 -1
- package/src/modules/payment_gateways/api/sessions/route.ts +3 -6
- package/src/modules/payment_gateways/api/webhook/[provider]/route.ts +1 -13
- package/src/modules/payment_gateways/backend/payment-gateways/page.tsx +2 -3
- package/src/modules/payment_gateways/data/entities.ts +2 -13
- package/src/modules/payment_gateways/di.ts +2 -28
- package/src/modules/payment_gateways/i18n/de.json +1 -8
- package/src/modules/payment_gateways/i18n/en.json +1 -8
- package/src/modules/payment_gateways/i18n/es.json +1 -8
- package/src/modules/payment_gateways/i18n/pl.json +1 -8
- package/src/modules/payment_gateways/lib/gateway-service.ts +18 -114
- package/src/modules/payment_gateways/lib/payment-operation-idempotency.ts +0 -1
- package/src/modules/payment_gateways/lib/session-idempotency.ts +0 -36
- package/src/modules/payment_gateways/migrations/.snapshot-open-mercato.json +1 -44
- package/src/modules/payment_gateways/setup.ts +0 -62
- package/src/modules/planner/components/AvailabilityRulesEditor.tsx +4 -4
- package/src/modules/planner/components/unavailabilityReasons.ts +3 -3
- package/src/modules/portal/frontend/[orgSlug]/portal/dashboard/page.tsx +3 -3
- package/src/modules/portal/frontend/[orgSlug]/portal/login/page.tsx +3 -3
- package/src/modules/portal/frontend/[orgSlug]/portal/page.tsx +3 -3
- package/src/modules/portal/frontend/[orgSlug]/portal/profile/page.tsx +3 -3
- package/src/modules/portal/frontend/[orgSlug]/portal/reset-password/page.tsx +4 -4
- package/src/modules/portal/frontend/[orgSlug]/portal/signup/page.tsx +3 -3
- package/src/modules/portal/i18n/de.json +0 -18
- package/src/modules/portal/i18n/en.json +0 -18
- package/src/modules/portal/i18n/es.json +0 -18
- package/src/modules/portal/i18n/pl.json +0 -18
- package/src/modules/progress/AGENTS.md +1 -11
- package/src/modules/progress/lib/progressService.ts +0 -1
- package/src/modules/progress/lib/progressServiceImpl.ts +117 -385
- package/src/modules/query_index/api/openapi.ts +0 -12
- package/src/modules/query_index/api/reindex.ts +0 -15
- package/src/modules/query_index/api/status.ts +136 -238
- package/src/modules/query_index/cli.ts +1 -180
- package/src/modules/query_index/components/QueryIndexesTable.tsx +47 -194
- package/src/modules/query_index/data/entities.ts +0 -7
- package/src/modules/query_index/di.ts +0 -6
- package/src/modules/query_index/i18n/de.json +3 -5
- package/src/modules/query_index/i18n/en.json +3 -5
- package/src/modules/query_index/i18n/es.json +3 -5
- package/src/modules/query_index/i18n/pl.json +3 -5
- package/src/modules/query_index/lib/batch.ts +4 -11
- package/src/modules/query_index/lib/coverage.ts +14 -47
- package/src/modules/query_index/lib/document.ts +4 -35
- package/src/modules/query_index/lib/engine.ts +59 -136
- package/src/modules/query_index/lib/indexer.ts +21 -130
- package/src/modules/query_index/lib/reindexer.ts +40 -62
- package/src/modules/query_index/lib/search-tokens.ts +16 -48
- package/src/modules/query_index/lib/subscriber-scope.ts +7 -2
- package/src/modules/query_index/migrations/.snapshot-open-mercato.json +0 -12
- package/src/modules/query_index/subscribers/coverage_refresh.ts +0 -4
- package/src/modules/query_index/subscribers/delete_one.ts +1 -65
- package/src/modules/query_index/subscribers/upsert_one.ts +1 -68
- package/src/modules/resources/api/resources.ts +0 -2
- package/src/modules/resources/backend/resources/resource-types/page.tsx +1 -2
- package/src/modules/resources/backend/resources/resources/[id]/page.tsx +3 -9
- package/src/modules/resources/backend/resources/resources/page.tsx +1 -2
- package/src/modules/resources/commands/resources.ts +0 -10
- package/src/modules/resources/components/detail/dictionaries.ts +3 -3
- package/src/modules/resources/data/entities.ts +0 -3
- package/src/modules/resources/data/validators.ts +0 -5
- package/src/modules/resources/lib/seeds.ts +9 -16
- package/src/modules/resources/migrations/.snapshot-open-mercato.json +1 -17
- package/src/modules/sales/analytics.ts +0 -4
- package/src/modules/sales/api/document-history/route.ts +0 -1
- package/src/modules/sales/api/documents/factory.ts +3 -28
- package/src/modules/sales/backend/sales/documents/[id]/page.tsx +3 -11
- package/src/modules/sales/backend/sales/documents/create/page.tsx +4 -2
- package/src/modules/sales/commands/documents.ts +31 -298
- package/src/modules/sales/components/documents/ItemsSection.tsx +11 -21
- package/src/modules/sales/components/documents/LineItemDialog.tsx +5 -13
- package/src/modules/sales/components/documents/SalesDocumentForm.tsx +6 -48
- package/src/modules/sales/components/documents/SalesDocumentsTable.tsx +1 -6
- package/src/modules/sales/components/useSalesChannelsEnabled.ts +48 -2
- package/src/modules/sales/data/validators.ts +6 -59
- package/src/modules/sales/di.ts +0 -9
- package/src/modules/sales/events.ts +0 -1
- package/src/modules/sales/i18n/de.json +0 -22
- package/src/modules/sales/i18n/en.json +0 -22
- package/src/modules/sales/i18n/es.json +0 -22
- package/src/modules/sales/i18n/pl.json +0 -22
- package/src/modules/sales/lib/historyHelpers.ts +1 -88
- package/src/modules/sales/widgets/injection/document-history/widget.client.tsx +3 -64
- package/src/modules/sales/workflows.ts +7 -10
- package/src/modules/shipping_carriers/api/webhook/[provider]/route.ts +1 -11
- package/src/modules/shipping_carriers/lib/shipment-wizard/components/PackageEditor.tsx +1 -1
- package/src/modules/staff/api/interceptors.ts +4 -6
- package/src/modules/staff/api/leave-requests.ts +47 -54
- package/src/modules/staff/components/detail/dictionaries.ts +3 -3
- package/src/modules/sync_excel/api/upload/route.ts +2 -15
- package/src/modules/wms/components/backend/ReleaseReservationDialog.tsx +1 -1
- package/src/modules/wms/components/backend/WmsConfigurationPage.tsx +4 -5
- package/src/modules/wms/components/backend/WmsInventoryConsolePage.tsx +3 -4
- package/src/modules/wms/components/backend/WmsLocationDetailPage.tsx +2 -3
- package/src/modules/wms/components/backend/WmsLotDetailPage.tsx +2 -3
- package/src/modules/wms/components/backend/WmsLotsListPage.tsx +1 -2
- package/src/modules/wms/components/backend/WmsSkuDetailPage.tsx +2 -3
- 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/pl.json +0 -2
- package/src/modules/workflows/backend/definitions/page.tsx +2 -3
- package/src/modules/workflows/backend/definitions/visual-editor/page.tsx +4 -13
- package/src/modules/workflows/backend/instances/page.tsx +9 -10
- package/src/modules/workflows/backend/tasks/page.tsx +7 -8
- package/src/modules/workflows/components/ActivitiesEditor.tsx +14 -98
- package/src/modules/workflows/components/BusinessRulesSelector.tsx +1 -1
- package/src/modules/workflows/components/DefinitionTriggersEditor.tsx +2 -2
- package/src/modules/workflows/components/EdgeEditDialogCrudForm.tsx +2 -1
- package/src/modules/workflows/components/NodeEditDialogCrudForm.tsx +2 -1
- package/src/modules/workflows/components/StepsEditor.tsx +2 -2
- package/src/modules/workflows/components/TransitionsEditor.tsx +20 -78
- package/src/modules/workflows/components/WorkflowLegend.tsx +1 -1
- package/src/modules/workflows/components/WorkflowSelector.tsx +1 -1
- package/src/modules/workflows/components/fields/BusinessRuleConditionsEditor.tsx +1 -1
- package/src/modules/workflows/components/fields/FormFieldArrayEditor.tsx +1 -1
- package/src/modules/workflows/components/fields/MappingArrayEditor.tsx +1 -1
- package/src/modules/workflows/components/fields/StartPreConditionsEditor.tsx +1 -1
- package/src/modules/workflows/components/fields/WorkflowSelectorField.tsx +4 -4
- package/src/modules/workflows/data/validators.ts +1 -52
- package/src/modules/workflows/events.ts +0 -1
- package/src/modules/workflows/i18n/de.json +0 -3
- package/src/modules/workflows/i18n/en.json +0 -3
- package/src/modules/workflows/i18n/es.json +0 -3
- package/src/modules/workflows/i18n/pl.json +0 -3
- package/src/modules/workflows/lib/activity-executor.ts +20 -99
- package/src/modules/workflows/lib/format-validation-error.ts +0 -60
- package/src/modules/workflows/widgets/injection/order-approval/widget.client.tsx +11 -27
- package/dist/generated/entities/attachment_quota_reservation/index.js +0 -33
- package/dist/generated/entities/attachment_quota_reservation/index.js.map +0 -7
- package/dist/modules/api_keys/extension-points.js +0 -16
- package/dist/modules/api_keys/extension-points.js.map +0 -7
- package/dist/modules/attachments/lib/quota-recovery-queue.js +0 -9
- package/dist/modules/attachments/lib/quota-recovery-queue.js.map +0 -7
- package/dist/modules/attachments/lib/quota-service.js +0 -224
- package/dist/modules/attachments/lib/quota-service.js.map +0 -7
- package/dist/modules/attachments/migrations/Migration20260709234741_attachments.js +0 -13
- package/dist/modules/attachments/migrations/Migration20260709234741_attachments.js.map +0 -7
- package/dist/modules/attachments/workers/quota-recovery.js +0 -45
- package/dist/modules/attachments/workers/quota-recovery.js.map +0 -7
- package/dist/modules/audit_logs/api/audit-logs/readScope.js +0 -12
- package/dist/modules/audit_logs/api/audit-logs/readScope.js.map +0 -7
- package/dist/modules/audit_logs/extension-points.js +0 -14
- package/dist/modules/audit_logs/extension-points.js.map +0 -7
- package/dist/modules/auth/extension-points.js +0 -21
- package/dist/modules/auth/extension-points.js.map +0 -7
- package/dist/modules/business_rules/api/openmercato-call-options/route.js +0 -85
- package/dist/modules/business_rules/api/openmercato-call-options/route.js.map +0 -7
- package/dist/modules/business_rules/events.js +0 -13
- package/dist/modules/business_rules/events.js.map +0 -7
- package/dist/modules/business_rules/extension-points.js +0 -13
- package/dist/modules/business_rules/extension-points.js.map +0 -7
- package/dist/modules/business_rules/lib/openmercato-call-options-types.js +0 -5
- package/dist/modules/business_rules/lib/openmercato-call-options-types.js.map +0 -7
- package/dist/modules/business_rules/lib/openmercato-call-options.js +0 -231
- package/dist/modules/business_rules/lib/openmercato-call-options.js.map +0 -7
- package/dist/modules/catalog/extension-points.js +0 -27
- package/dist/modules/catalog/extension-points.js.map +0 -7
- package/dist/modules/communication_channels/extension-points.js +0 -20
- package/dist/modules/communication_channels/extension-points.js.map +0 -7
- package/dist/modules/configs/extension-points.js +0 -18
- package/dist/modules/configs/extension-points.js.map +0 -7
- package/dist/modules/currencies/extension-points.js +0 -14
- package/dist/modules/currencies/extension-points.js.map +0 -7
- package/dist/modules/currencies/services/baseCurrencyService.js +0 -42
- package/dist/modules/currencies/services/baseCurrencyService.js.map +0 -7
- package/dist/modules/customer_accounts/emails/CustomerInvitationEmail.js +0 -26
- package/dist/modules/customer_accounts/emails/CustomerInvitationEmail.js.map +0 -7
- package/dist/modules/customer_accounts/extension-points.js +0 -14
- package/dist/modules/customer_accounts/extension-points.js.map +0 -7
- package/dist/modules/customer_accounts/lib/invitationEmail.js +0 -35
- package/dist/modules/customer_accounts/lib/invitationEmail.js.map +0 -7
- package/dist/modules/customer_accounts/migrations/Migration20260723120000_customer_accounts.js +0 -13
- package/dist/modules/customer_accounts/migrations/Migration20260723120000_customer_accounts.js.map +0 -7
- package/dist/modules/customers/extension-points.js +0 -42
- package/dist/modules/customers/extension-points.js.map +0 -7
- package/dist/modules/customers/lib/dealStatus.js +0 -38
- package/dist/modules/customers/lib/dealStatus.js.map +0 -7
- package/dist/modules/customers/lib/dealsSummaryQueries.js +0 -144
- package/dist/modules/customers/lib/dealsSummaryQueries.js.map +0 -7
- package/dist/modules/customers/lib/optionalBaseCurrency.js +0 -19
- package/dist/modules/customers/lib/optionalBaseCurrency.js.map +0 -7
- package/dist/modules/customers/migrations/Migration20260723210000_customers.js +0 -15
- package/dist/modules/customers/migrations/Migration20260723210000_customers.js.map +0 -7
- package/dist/modules/dashboards/components/UnlabelledAmountNotice.js +0 -33
- package/dist/modules/dashboards/components/UnlabelledAmountNotice.js.map +0 -7
- package/dist/modules/dashboards/lib/exactDecimal.js +0 -69
- package/dist/modules/dashboards/lib/exactDecimal.js.map +0 -7
- package/dist/modules/dashboards/lib/optionalBaseCurrency.js +0 -11
- package/dist/modules/dashboards/lib/optionalBaseCurrency.js.map +0 -7
- package/dist/modules/dashboards/subscribers/invalidateWidgetDataCache.js +0 -26
- package/dist/modules/dashboards/subscribers/invalidateWidgetDataCache.js.map +0 -7
- package/dist/modules/data_sync/extension-points.js +0 -13
- package/dist/modules/data_sync/extension-points.js.map +0 -7
- package/dist/modules/data_sync/lib/queue-policy.js +0 -15
- package/dist/modules/data_sync/lib/queue-policy.js.map +0 -7
- package/dist/modules/design_system/acl.js +0 -9
- package/dist/modules/design_system/acl.js.map +0 -7
- package/dist/modules/design_system/backend/design-system/page.js +0 -11
- package/dist/modules/design_system/backend/design-system/page.js.map +0 -7
- package/dist/modules/design_system/backend/design-system/page.meta.js +0 -15
- package/dist/modules/design_system/backend/design-system/page.meta.js.map +0 -7
- package/dist/modules/design_system/gallery/components/CodeSnippet.js +0 -52
- package/dist/modules/design_system/gallery/components/CodeSnippet.js.map +0 -7
- package/dist/modules/design_system/gallery/components/EntryCard.js +0 -63
- package/dist/modules/design_system/gallery/components/EntryCard.js.map +0 -7
- package/dist/modules/design_system/gallery/components/GalleryShell.js +0 -163
- package/dist/modules/design_system/gallery/components/GalleryShell.js.map +0 -7
- package/dist/modules/design_system/gallery/components/VariantPreview.js +0 -9
- package/dist/modules/design_system/gallery/components/VariantPreview.js.map +0 -7
- package/dist/modules/design_system/gallery/entries/banners.js +0 -186
- package/dist/modules/design_system/gallery/entries/banners.js.map +0 -7
- package/dist/modules/design_system/gallery/entries/buttons.js +0 -361
- package/dist/modules/design_system/gallery/entries/buttons.js.map +0 -7
- package/dist/modules/design_system/gallery/entries/charts.js +0 -457
- package/dist/modules/design_system/gallery/entries/charts.js.map +0 -7
- package/dist/modules/design_system/gallery/entries/dates.js +0 -306
- package/dist/modules/design_system/gallery/entries/dates.js.map +0 -7
- package/dist/modules/design_system/gallery/entries/detail.js +0 -358
- package/dist/modules/design_system/gallery/entries/detail.js.map +0 -7
- package/dist/modules/design_system/gallery/entries/display.js +0 -785
- package/dist/modules/design_system/gallery/entries/display.js.map +0 -7
- package/dist/modules/design_system/gallery/entries/feedback.js +0 -658
- package/dist/modules/design_system/gallery/entries/feedback.js.map +0 -7
- package/dist/modules/design_system/gallery/entries/filters.js +0 -505
- package/dist/modules/design_system/gallery/entries/filters.js.map +0 -7
- package/dist/modules/design_system/gallery/entries/foundations.js +0 -453
- package/dist/modules/design_system/gallery/entries/foundations.js.map +0 -7
- package/dist/modules/design_system/gallery/entries/icons.js +0 -140
- package/dist/modules/design_system/gallery/entries/icons.js.map +0 -7
- package/dist/modules/design_system/gallery/entries/inputs.js +0 -1217
- package/dist/modules/design_system/gallery/entries/inputs.js.map +0 -7
- package/dist/modules/design_system/gallery/entries/messages.js +0 -334
- package/dist/modules/design_system/gallery/entries/messages.js.map +0 -7
- package/dist/modules/design_system/gallery/entries/navigation.js +0 -475
- package/dist/modules/design_system/gallery/entries/navigation.js.map +0 -7
- package/dist/modules/design_system/gallery/entries/notifications.js +0 -257
- package/dist/modules/design_system/gallery/entries/notifications.js.map +0 -7
- package/dist/modules/design_system/gallery/entries/overlays.js +0 -576
- package/dist/modules/design_system/gallery/entries/overlays.js.map +0 -7
- package/dist/modules/design_system/gallery/entries/scaffolding.js +0 -378
- package/dist/modules/design_system/gallery/entries/scaffolding.js.map +0 -7
- package/dist/modules/design_system/gallery/entries/schedule.js +0 -297
- package/dist/modules/design_system/gallery/entries/schedule.js.map +0 -7
- package/dist/modules/design_system/gallery/registry.js +0 -139
- package/dist/modules/design_system/gallery/registry.js.map +0 -7
- package/dist/modules/design_system/gallery/types.js +0 -1
- package/dist/modules/design_system/gallery/types.js.map +0 -7
- package/dist/modules/design_system/index.js +0 -9
- package/dist/modules/design_system/index.js.map +0 -7
- package/dist/modules/design_system/setup.js +0 -14
- package/dist/modules/design_system/setup.js.map +0 -7
- package/dist/modules/dictionaries/lib/fetchAllEntries.js +0 -43
- package/dist/modules/dictionaries/lib/fetchAllEntries.js.map +0 -7
- package/dist/modules/directory/extension-points.js +0 -14
- package/dist/modules/directory/extension-points.js.map +0 -7
- package/dist/modules/directory/migrations/Migration20260626145500_directory_logo_preserve_aspect_ratio.js +0 -13
- package/dist/modules/directory/migrations/Migration20260626145500_directory_logo_preserve_aspect_ratio.js.map +0 -7
- package/dist/modules/entities/backend/config/settings/page.js +0 -10
- package/dist/modules/entities/backend/config/settings/page.js.map +0 -7
- package/dist/modules/entities/backend/config/settings/page.meta.js +0 -36
- package/dist/modules/entities/backend/config/settings/page.meta.js.map +0 -7
- package/dist/modules/entities/components/EntitySettingsManager.js +0 -136
- package/dist/modules/entities/components/EntitySettingsManager.js.map +0 -7
- package/dist/modules/entities/components/RecordListRelationCell.js +0 -63
- package/dist/modules/entities/components/RecordListRelationCell.js.map +0 -7
- package/dist/modules/entities/components/recordListRelationDisplays.js +0 -80
- package/dist/modules/entities/components/recordListRelationDisplays.js.map +0 -7
- package/dist/modules/entities/extension-points.js +0 -21
- package/dist/modules/entities/extension-points.js.map +0 -7
- package/dist/modules/feature_toggles/components/hooks/staleTime.js +0 -5
- package/dist/modules/feature_toggles/components/hooks/staleTime.js.map +0 -7
- package/dist/modules/inbox_ops/subscribers/search-reindex-proposal-created.js +0 -32
- package/dist/modules/inbox_ops/subscribers/search-reindex-proposal-created.js.map +0 -7
- package/dist/modules/integrations/extension-points.js +0 -30
- package/dist/modules/integrations/extension-points.js.map +0 -7
- package/dist/modules/integrations/widgets/injection/external-ids/widget.js +0 -14
- package/dist/modules/integrations/widgets/injection/external-ids/widget.js.map +0 -7
- package/dist/modules/messages/extension-points.js +0 -16
- package/dist/modules/messages/extension-points.js.map +0 -7
- package/dist/modules/messages/lib/participantScope.js +0 -15
- package/dist/modules/messages/lib/participantScope.js.map +0 -7
- package/dist/modules/notifications/lib/notificationScope.js +0 -26
- package/dist/modules/notifications/lib/notificationScope.js.map +0 -7
- package/dist/modules/payment_gateways/extension-points.js +0 -19
- package/dist/modules/payment_gateways/extension-points.js.map +0 -7
- package/dist/modules/payment_gateways/lib/capture-ledger.js +0 -183
- package/dist/modules/payment_gateways/lib/capture-ledger.js.map +0 -7
- package/dist/modules/payment_gateways/lib/order-amount-reconciliation.js +0 -58
- package/dist/modules/payment_gateways/lib/order-amount-reconciliation.js.map +0 -7
- package/dist/modules/payment_gateways/migrations/Migration20260725101500_payment_gateways.js +0 -16
- package/dist/modules/payment_gateways/migrations/Migration20260725101500_payment_gateways.js.map +0 -7
- package/dist/modules/payment_gateways/migrations/Migration20260803103035_payment_gateways.js +0 -18
- package/dist/modules/payment_gateways/migrations/Migration20260803103035_payment_gateways.js.map +0 -7
- package/dist/modules/payment_gateways/workers/session-initialization-prune.js +0 -50
- package/dist/modules/payment_gateways/workers/session-initialization-prune.js.map +0 -7
- package/dist/modules/portal/extension-points.js +0 -32
- package/dist/modules/portal/extension-points.js.map +0 -7
- package/dist/modules/portal/frontend/[orgSlug]/portal/invite/page.js +0 -134
- package/dist/modules/portal/frontend/[orgSlug]/portal/invite/page.js.map +0 -7
- package/dist/modules/portal/frontend/[orgSlug]/portal/invite/page.meta.js +0 -11
- package/dist/modules/portal/frontend/[orgSlug]/portal/invite/page.meta.js.map +0 -7
- package/dist/modules/portal/lib/navigation.js +0 -7
- package/dist/modules/portal/lib/navigation.js.map +0 -7
- package/dist/modules/query_index/events.js +0 -20
- package/dist/modules/query_index/events.js.map +0 -7
- package/dist/modules/query_index/extension-points.js +0 -13
- package/dist/modules/query_index/extension-points.js.map +0 -7
- package/dist/modules/query_index/migrations/Migration20260731105052_query_index.js +0 -17
- package/dist/modules/query_index/migrations/Migration20260731105052_query_index.js.map +0 -7
- package/dist/modules/resources/extension-points.js +0 -14
- package/dist/modules/resources/extension-points.js.map +0 -7
- package/dist/modules/resources/migrations/Migration20260608231000.js +0 -13
- package/dist/modules/resources/migrations/Migration20260608231000.js.map +0 -7
- package/dist/modules/sales/components/documents/SalesOrderDraftLines.js +0 -167
- package/dist/modules/sales/components/documents/SalesOrderDraftLines.js.map +0 -7
- package/dist/modules/sales/extension-points.js +0 -36
- package/dist/modules/sales/extension-points.js.map +0 -7
- package/dist/modules/sales/services/paymentOrderTotalResolver.js +0 -52
- package/dist/modules/sales/services/paymentOrderTotalResolver.js.map +0 -7
- package/dist/modules/wms/extension-points.js +0 -26
- package/dist/modules/wms/extension-points.js.map +0 -7
- package/dist/modules/workflows/extension-points.js +0 -15
- package/dist/modules/workflows/extension-points.js.map +0 -7
- package/dist/modules/workflows/widgets/injection/order-approval/context-keys.js +0 -10
- package/dist/modules/workflows/widgets/injection/order-approval/context-keys.js.map +0 -7
- package/generated/entities/attachment_quota_reservation/index.ts +0 -15
- package/src/modules/api_keys/extension-points.ts +0 -13
- package/src/modules/api_keys/i18n/ko.json +0 -42
- package/src/modules/attachments/i18n/ko.json +0 -175
- package/src/modules/attachments/lib/quota-recovery-queue.ts +0 -16
- package/src/modules/attachments/lib/quota-service.ts +0 -442
- package/src/modules/attachments/migrations/Migration20260709234741_attachments.ts +0 -12
- package/src/modules/attachments/workers/quota-recovery.ts +0 -68
- package/src/modules/audit_logs/api/audit-logs/readScope.ts +0 -28
- package/src/modules/audit_logs/extension-points.ts +0 -11
- package/src/modules/audit_logs/i18n/ko.json +0 -66
- package/src/modules/auth/extension-points.ts +0 -18
- package/src/modules/auth/i18n/ko.json +0 -255
- package/src/modules/business_rules/api/openmercato-call-options/route.ts +0 -94
- package/src/modules/business_rules/events.ts +0 -10
- package/src/modules/business_rules/extension-points.ts +0 -10
- package/src/modules/business_rules/i18n/ko.json +0 -396
- package/src/modules/business_rules/lib/openmercato-call-options-types.ts +0 -31
- package/src/modules/business_rules/lib/openmercato-call-options.ts +0 -297
- package/src/modules/catalog/extension-points.ts +0 -24
- package/src/modules/catalog/i18n/ko.json +0 -723
- package/src/modules/communication_channels/extension-points.ts +0 -17
- package/src/modules/communication_channels/i18n/ko.json +0 -138
- package/src/modules/configs/extension-points.ts +0 -15
- package/src/modules/configs/i18n/ko.json +0 -197
- package/src/modules/currencies/extension-points.ts +0 -11
- package/src/modules/currencies/i18n/ko.json +0 -160
- package/src/modules/currencies/services/baseCurrencyService.ts +0 -59
- package/src/modules/customer_accounts/emails/CustomerInvitationEmail.tsx +0 -45
- package/src/modules/customer_accounts/extension-points.ts +0 -11
- package/src/modules/customer_accounts/i18n/ko.json +0 -354
- package/src/modules/customer_accounts/lib/invitationEmail.ts +0 -42
- package/src/modules/customer_accounts/migrations/Migration20260723120000_customer_accounts.ts +0 -13
- package/src/modules/customers/extension-points.ts +0 -40
- package/src/modules/customers/i18n/ko.json +0 -2855
- package/src/modules/customers/lib/dealStatus.ts +0 -48
- package/src/modules/customers/lib/dealsSummaryQueries.ts +0 -211
- package/src/modules/customers/lib/optionalBaseCurrency.ts +0 -34
- package/src/modules/customers/migrations/Migration20260723210000_customers.ts +0 -15
- package/src/modules/dashboards/components/UnlabelledAmountNotice.tsx +0 -43
- package/src/modules/dashboards/i18n/ko.json +0 -118
- package/src/modules/dashboards/lib/exactDecimal.ts +0 -96
- package/src/modules/dashboards/lib/optionalBaseCurrency.ts +0 -22
- package/src/modules/dashboards/subscribers/invalidateWidgetDataCache.ts +0 -32
- package/src/modules/data_sync/extension-points.ts +0 -10
- package/src/modules/data_sync/i18n/ko.json +0 -125
- package/src/modules/data_sync/lib/queue-policy.ts +0 -30
- package/src/modules/design_system/AGENTS.md +0 -34
- package/src/modules/design_system/acl.ts +0 -5
- package/src/modules/design_system/backend/design-system/page.meta.ts +0 -11
- package/src/modules/design_system/backend/design-system/page.tsx +0 -14
- package/src/modules/design_system/gallery/components/CodeSnippet.tsx +0 -55
- package/src/modules/design_system/gallery/components/EntryCard.tsx +0 -95
- package/src/modules/design_system/gallery/components/GalleryShell.tsx +0 -206
- package/src/modules/design_system/gallery/components/VariantPreview.tsx +0 -15
- package/src/modules/design_system/gallery/entries/banners.tsx +0 -226
- package/src/modules/design_system/gallery/entries/buttons.tsx +0 -422
- package/src/modules/design_system/gallery/entries/charts.tsx +0 -518
- package/src/modules/design_system/gallery/entries/dates.tsx +0 -325
- package/src/modules/design_system/gallery/entries/detail.tsx +0 -403
- package/src/modules/design_system/gallery/entries/display.tsx +0 -893
- package/src/modules/design_system/gallery/entries/feedback.tsx +0 -746
- package/src/modules/design_system/gallery/entries/filters.tsx +0 -570
- package/src/modules/design_system/gallery/entries/foundations.tsx +0 -529
- package/src/modules/design_system/gallery/entries/icons.tsx +0 -168
- package/src/modules/design_system/gallery/entries/inputs.tsx +0 -1516
- package/src/modules/design_system/gallery/entries/messages.tsx +0 -339
- package/src/modules/design_system/gallery/entries/navigation.tsx +0 -573
- package/src/modules/design_system/gallery/entries/notifications.tsx +0 -285
- package/src/modules/design_system/gallery/entries/overlays.tsx +0 -677
- package/src/modules/design_system/gallery/entries/scaffolding.tsx +0 -430
- package/src/modules/design_system/gallery/entries/schedule.tsx +0 -307
- package/src/modules/design_system/gallery/registry.ts +0 -152
- package/src/modules/design_system/gallery/types.ts +0 -32
- package/src/modules/design_system/i18n/.hardcoded-allowlist.json +0 -71
- package/src/modules/design_system/i18n/de.json +0 -58
- package/src/modules/design_system/i18n/en.json +0 -58
- package/src/modules/design_system/i18n/es.json +0 -58
- package/src/modules/design_system/i18n/ko.json +0 -58
- package/src/modules/design_system/i18n/pl.json +0 -58
- package/src/modules/design_system/index.ts +0 -7
- package/src/modules/design_system/setup.ts +0 -12
- package/src/modules/dictionaries/i18n/ko.json +0 -130
- package/src/modules/dictionaries/lib/fetchAllEntries.ts +0 -72
- package/src/modules/directory/extension-points.ts +0 -11
- package/src/modules/directory/i18n/ko.json +0 -105
- package/src/modules/directory/migrations/Migration20260626145500_directory_logo_preserve_aspect_ratio.ts +0 -13
- package/src/modules/entities/backend/config/settings/page.meta.ts +0 -34
- package/src/modules/entities/backend/config/settings/page.tsx +0 -12
- package/src/modules/entities/components/EntitySettingsManager.tsx +0 -160
- package/src/modules/entities/components/RecordListRelationCell.tsx +0 -90
- package/src/modules/entities/components/recordListRelationDisplays.ts +0 -109
- package/src/modules/entities/extension-points.ts +0 -18
- package/src/modules/entities/i18n/ko.json +0 -260
- package/src/modules/feature_toggles/components/hooks/staleTime.ts +0 -5
- package/src/modules/feature_toggles/i18n/ko.json +0 -96
- package/src/modules/inbox_ops/i18n/ko.json +0 -196
- package/src/modules/inbox_ops/subscribers/search-reindex-proposal-created.ts +0 -39
- package/src/modules/integrations/extension-points.ts +0 -27
- package/src/modules/integrations/i18n/ko.json +0 -129
- package/src/modules/integrations/widgets/injection/external-ids/widget.ts +0 -13
- package/src/modules/messages/extension-points.ts +0 -13
- package/src/modules/messages/i18n/ko.json +0 -263
- package/src/modules/messages/lib/participantScope.ts +0 -64
- package/src/modules/notifications/i18n/ko.json +0 -55
- package/src/modules/notifications/lib/notificationScope.ts +0 -40
- package/src/modules/payment_gateways/extension-points.ts +0 -16
- package/src/modules/payment_gateways/i18n/ko.json +0 -87
- package/src/modules/payment_gateways/lib/capture-ledger.ts +0 -260
- package/src/modules/payment_gateways/lib/order-amount-reconciliation.ts +0 -93
- package/src/modules/payment_gateways/migrations/Migration20260725101500_payment_gateways.ts +0 -21
- package/src/modules/payment_gateways/migrations/Migration20260803103035_payment_gateways.ts +0 -17
- package/src/modules/payment_gateways/workers/session-initialization-prune.ts +0 -63
- package/src/modules/planner/i18n/ko.json +0 -565
- package/src/modules/portal/extension-points.ts +0 -30
- package/src/modules/portal/frontend/[orgSlug]/portal/invite/page.meta.ts +0 -9
- package/src/modules/portal/frontend/[orgSlug]/portal/invite/page.tsx +0 -164
- package/src/modules/portal/i18n/ko.json +0 -143
- package/src/modules/portal/lib/navigation.ts +0 -3
- package/src/modules/progress/i18n/ko.json +0 -20
- package/src/modules/query_index/events.ts +0 -17
- package/src/modules/query_index/extension-points.ts +0 -10
- package/src/modules/query_index/i18n/ko.json +0 -69
- package/src/modules/query_index/migrations/Migration20260731105052_query_index.ts +0 -35
- package/src/modules/resources/extension-points.ts +0 -11
- package/src/modules/resources/i18n/ko.json +0 -770
- package/src/modules/resources/migrations/Migration20260608231000.ts +0 -13
- package/src/modules/sales/components/documents/SalesOrderDraftLines.tsx +0 -198
- package/src/modules/sales/extension-points.ts +0 -33
- package/src/modules/sales/i18n/ko.json +0 -1442
- package/src/modules/sales/services/paymentOrderTotalResolver.ts +0 -67
- package/src/modules/shipping_carriers/i18n/ko.json +0 -85
- package/src/modules/staff/i18n/ko.json +0 -1162
- package/src/modules/sync_excel/i18n/ko.json +0 -107
- package/src/modules/translations/i18n/ko.json +0 -45
- package/src/modules/wms/extension-points.ts +0 -23
- package/src/modules/wms/i18n/ko.json +0 -1053
- package/src/modules/workflows/extension-points.ts +0 -12
- package/src/modules/workflows/i18n/ko.json +0 -1204
- package/src/modules/workflows/widgets/injection/order-approval/context-keys.ts +0 -18
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/modules/entities/lib/entityAcl.ts"],
|
|
4
|
-
"sourcesContent": ["import { CrudHttpError } from '@open-mercato/shared/lib/crud/errors'\nimport
|
|
5
|
-
"mappings": "AAAA,SAAS,qBAAqB;
|
|
6
|
-
"names": ["
|
|
4
|
+
"sourcesContent": ["import { CrudHttpError } from '@open-mercato/shared/lib/crud/errors'\nimport { hasAllFeatures } from '@open-mercato/shared/security/features'\nimport type { RbacService } from '@open-mercato/core/modules/auth/services/rbacService'\nimport { deriveCustomEntityRecordFeature } from './recordFeatures'\n\nexport type EntityAclRequirement = {\n view: string[]\n manage: string[]\n platformOnly?: boolean\n}\n\nconst ENTITY_ACL_REQUIREMENTS: Record<string, EntityAclRequirement> = {\n 'directory:tenant': {\n view: ['directory.tenants.view'],\n manage: ['directory.tenants.manage'],\n platformOnly: true,\n },\n 'directory:organization': {\n view: ['directory.organizations.view'],\n manage: ['directory.organizations.manage'],\n },\n 'customers:customer_person_profile': {\n view: ['customers.people.view'],\n manage: ['customers.people.manage'],\n },\n 'customers:customer_company_profile': {\n view: ['customers.companies.view'],\n manage: ['customers.companies.manage'],\n },\n 'customers:customer_deal': {\n view: ['customers.deals.view'],\n manage: ['customers.deals.manage'],\n },\n 'customers:customer_activity': {\n view: ['customers.activities.view'],\n manage: ['customers.activities.manage'],\n },\n 'customers:customer_interaction': {\n view: ['customers.interactions.view'],\n manage: ['customers.interactions.manage'],\n },\n 'catalog:catalog_product': {\n view: ['catalog.products.view'],\n manage: ['catalog.products.manage'],\n },\n 'catalog:catalog_product_category': {\n view: ['catalog.categories.view'],\n manage: ['catalog.categories.manage'],\n },\n 'sales:sales_order': {\n view: ['sales.orders.view'],\n manage: ['sales.orders.manage'],\n },\n 'sales:sales_quote': {\n view: ['sales.quotes.view'],\n manage: ['sales.quotes.manage'],\n },\n 'auth:user': {\n view: ['auth.users.list'],\n manage: ['auth.users.edit'],\n },\n 'auth:role': {\n view: ['auth.roles.list'],\n manage: ['auth.roles.manage'],\n },\n}\n\nexport function resolveEntityAclRequirement(entityId: string): EntityAclRequirement | null {\n return ENTITY_ACL_REQUIREMENTS[entityId] ?? null\n}\n\ntype EntityAclActor = {\n sub?: string | null\n tenantId?: string | null\n orgId?: string | null\n isSuperAdmin?: boolean\n}\n\ntype AssertEntityAclArgs = {\n auth: EntityAclActor\n entityId: string\n action: 'view' | 'manage'\n isCustomEntity: boolean\n // Set for a custom entity flagged `access_restricted`. When true, the coarse\n // route-level entities.records.* feature is no longer sufficient \u2014 the caller\n // must additionally hold the synthesized per-entity feature.\n isRestricted?: boolean\n rbac: RbacService\n}\n\nfunction forbiddenEntityAccess(): CrudHttpError {\n return new CrudHttpError(403, { error: 'Forbidden' })\n}\n\nasync function loadActorAcl(args: AssertEntityAclArgs) {\n return args.rbac.loadAcl(args.auth.sub ?? '', {\n tenantId: args.auth.tenantId ?? null,\n organizationId: args.auth.orgId ?? null,\n })\n}\n\nexport async function assertEntityAclForRequest(args: AssertEntityAclArgs): Promise<void> {\n if (args.isCustomEntity) {\n // Unrestricted custom entities keep the historical behavior: the coarse\n // entities.records.view/.manage route guard is the whole authorization.\n if (!args.isRestricted) return\n\n const acl = await loadActorAcl(args)\n if (acl?.isSuperAdmin) return\n\n const required = deriveCustomEntityRecordFeature(args.entityId, args.action)\n if (!hasAllFeatures(acl?.features, [required])) {\n throw forbiddenEntityAccess()\n }\n return\n }\n\n const requirement = resolveEntityAclRequirement(args.entityId)\n\n const acl = await loadActorAcl(args)\n\n if (acl?.isSuperAdmin) return\n\n if (!requirement) throw forbiddenEntityAccess()\n if (requirement.platformOnly) throw forbiddenEntityAccess()\n\n if (!hasAllFeatures(acl?.features, requirement[args.action])) {\n throw forbiddenEntityAccess()\n }\n}\n"],
|
|
5
|
+
"mappings": "AAAA,SAAS,qBAAqB;AAC9B,SAAS,sBAAsB;AAE/B,SAAS,uCAAuC;AAQhD,MAAM,0BAAgE;AAAA,EACpE,oBAAoB;AAAA,IAClB,MAAM,CAAC,wBAAwB;AAAA,IAC/B,QAAQ,CAAC,0BAA0B;AAAA,IACnC,cAAc;AAAA,EAChB;AAAA,EACA,0BAA0B;AAAA,IACxB,MAAM,CAAC,8BAA8B;AAAA,IACrC,QAAQ,CAAC,gCAAgC;AAAA,EAC3C;AAAA,EACA,qCAAqC;AAAA,IACnC,MAAM,CAAC,uBAAuB;AAAA,IAC9B,QAAQ,CAAC,yBAAyB;AAAA,EACpC;AAAA,EACA,sCAAsC;AAAA,IACpC,MAAM,CAAC,0BAA0B;AAAA,IACjC,QAAQ,CAAC,4BAA4B;AAAA,EACvC;AAAA,EACA,2BAA2B;AAAA,IACzB,MAAM,CAAC,sBAAsB;AAAA,IAC7B,QAAQ,CAAC,wBAAwB;AAAA,EACnC;AAAA,EACA,+BAA+B;AAAA,IAC7B,MAAM,CAAC,2BAA2B;AAAA,IAClC,QAAQ,CAAC,6BAA6B;AAAA,EACxC;AAAA,EACA,kCAAkC;AAAA,IAChC,MAAM,CAAC,6BAA6B;AAAA,IACpC,QAAQ,CAAC,+BAA+B;AAAA,EAC1C;AAAA,EACA,2BAA2B;AAAA,IACzB,MAAM,CAAC,uBAAuB;AAAA,IAC9B,QAAQ,CAAC,yBAAyB;AAAA,EACpC;AAAA,EACA,oCAAoC;AAAA,IAClC,MAAM,CAAC,yBAAyB;AAAA,IAChC,QAAQ,CAAC,2BAA2B;AAAA,EACtC;AAAA,EACA,qBAAqB;AAAA,IACnB,MAAM,CAAC,mBAAmB;AAAA,IAC1B,QAAQ,CAAC,qBAAqB;AAAA,EAChC;AAAA,EACA,qBAAqB;AAAA,IACnB,MAAM,CAAC,mBAAmB;AAAA,IAC1B,QAAQ,CAAC,qBAAqB;AAAA,EAChC;AAAA,EACA,aAAa;AAAA,IACX,MAAM,CAAC,iBAAiB;AAAA,IACxB,QAAQ,CAAC,iBAAiB;AAAA,EAC5B;AAAA,EACA,aAAa;AAAA,IACX,MAAM,CAAC,iBAAiB;AAAA,IACxB,QAAQ,CAAC,mBAAmB;AAAA,EAC9B;AACF;AAEO,SAAS,4BAA4B,UAA+C;AACzF,SAAO,wBAAwB,QAAQ,KAAK;AAC9C;AAqBA,SAAS,wBAAuC;AAC9C,SAAO,IAAI,cAAc,KAAK,EAAE,OAAO,YAAY,CAAC;AACtD;AAEA,eAAe,aAAa,MAA2B;AACrD,SAAO,KAAK,KAAK,QAAQ,KAAK,KAAK,OAAO,IAAI;AAAA,IAC5C,UAAU,KAAK,KAAK,YAAY;AAAA,IAChC,gBAAgB,KAAK,KAAK,SAAS;AAAA,EACrC,CAAC;AACH;AAEA,eAAsB,0BAA0B,MAA0C;AACxF,MAAI,KAAK,gBAAgB;AAGvB,QAAI,CAAC,KAAK,aAAc;AAExB,UAAMA,OAAM,MAAM,aAAa,IAAI;AACnC,QAAIA,MAAK,aAAc;AAEvB,UAAM,WAAW,gCAAgC,KAAK,UAAU,KAAK,MAAM;AAC3E,QAAI,CAAC,eAAeA,MAAK,UAAU,CAAC,QAAQ,CAAC,GAAG;AAC9C,YAAM,sBAAsB;AAAA,IAC9B;AACA;AAAA,EACF;AAEA,QAAM,cAAc,4BAA4B,KAAK,QAAQ;AAE7D,QAAM,MAAM,MAAM,aAAa,IAAI;AAEnC,MAAI,KAAK,aAAc;AAEvB,MAAI,CAAC,YAAa,OAAM,sBAAsB;AAC9C,MAAI,YAAY,aAAc,OAAM,sBAAsB;AAE1D,MAAI,CAAC,eAAe,KAAK,UAAU,YAAY,KAAK,MAAM,CAAC,GAAG;AAC5D,UAAM,sBAAsB;AAAA,EAC9B;AACF;",
|
|
6
|
+
"names": ["acl"]
|
|
7
7
|
}
|
|
@@ -5,10 +5,9 @@ function FeatureGuard({
|
|
|
5
5
|
id,
|
|
6
6
|
children,
|
|
7
7
|
fallback = null,
|
|
8
|
-
loadingFallback = null
|
|
9
|
-
defaultValue = false
|
|
8
|
+
loadingFallback = null
|
|
10
9
|
}) {
|
|
11
|
-
const { enabled, isLoading } = useFeatureFlagBoolean({ id
|
|
10
|
+
const { enabled, isLoading } = useFeatureFlagBoolean({ id });
|
|
12
11
|
if (isLoading) {
|
|
13
12
|
return /* @__PURE__ */ jsx(Fragment, { children: loadingFallback });
|
|
14
13
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/modules/feature_toggles/components/FeatureGuard.tsx"],
|
|
4
|
-
"sourcesContent": ["\"use client\"\n\nimport * as React from 'react'\nimport { useFeatureFlagBoolean } from './hooks/useFeatureFlagBoolean'\n\nexport type FeatureGuardProps = {\n id: string\n children: React.ReactNode\n fallback?: React.ReactNode\n loadingFallback?: React.ReactNode\n
|
|
5
|
-
"mappings": ";
|
|
4
|
+
"sourcesContent": ["\"use client\"\n\nimport * as React from 'react'\nimport { useFeatureFlagBoolean } from './hooks/useFeatureFlagBoolean'\n\nexport type FeatureGuardProps = {\n id: string\n children: React.ReactNode\n fallback?: React.ReactNode\n loadingFallback?: React.ReactNode\n}\n\n/**\n * FeatureGuard component that conditionally renders children based on feature toggle state.\n * \n * @param id - The feature toggle identifier\n * @param children - Content to render when the feature is enabled\n * @param fallback - Optional content to render when the feature is disabled\n * @param loadingFallback - Optional content to render while loading the feature state\n */\nexport function FeatureGuard({\n id,\n children,\n fallback = null,\n loadingFallback = null,\n}: FeatureGuardProps) {\n const { enabled, isLoading } = useFeatureFlagBoolean({ id })\n\n if (isLoading) {\n return <>{loadingFallback}</>\n }\n\n if (!enabled) {\n return <>{fallback}</>\n }\n\n return <>{children}</>\n}\n"],
|
|
5
|
+
"mappings": ";AA6BW;AA1BX,SAAS,6BAA6B;AAiB/B,SAAS,aAAa;AAAA,EAC3B;AAAA,EACA;AAAA,EACA,WAAW;AAAA,EACX,kBAAkB;AACpB,GAAsB;AACpB,QAAM,EAAE,SAAS,UAAU,IAAI,sBAAsB,EAAE,GAAG,CAAC;AAE3D,MAAI,WAAW;AACb,WAAO,gCAAG,2BAAgB;AAAA,EAC5B;AAEA,MAAI,CAAC,SAAS;AACZ,WAAO,gCAAG,oBAAS;AAAA,EACrB;AAEA,SAAO,gCAAG,UAAS;AACrB;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -1,9 +1,7 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { useQuery } from "@tanstack/react-query";
|
|
3
3
|
import { readApiResultOrThrow } from "@open-mercato/ui/backend/utils/apiCall";
|
|
4
|
-
import { FEATURE_FLAG_STALE_TIME_MS } from "./staleTime.js";
|
|
5
4
|
function useFeatureFlagBoolean(options) {
|
|
6
|
-
const defaultValue = options.defaultValue ?? false;
|
|
7
5
|
const query = useQuery({
|
|
8
6
|
queryKey: ["featureToggles", "check", options?.id],
|
|
9
7
|
queryFn: async () => {
|
|
@@ -17,10 +15,9 @@ function useFeatureFlagBoolean(options) {
|
|
|
17
15
|
);
|
|
18
16
|
return result;
|
|
19
17
|
},
|
|
20
|
-
enabled: !!options.id
|
|
21
|
-
staleTime: FEATURE_FLAG_STALE_TIME_MS
|
|
18
|
+
enabled: !!options.id
|
|
22
19
|
});
|
|
23
|
-
const enabled = query.data?.ok ? query.data.value :
|
|
20
|
+
const enabled = query.data?.ok ? query.data.value : false;
|
|
24
21
|
const isLoading = query.isLoading;
|
|
25
22
|
return {
|
|
26
23
|
enabled,
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../src/modules/feature_toggles/components/hooks/useFeatureFlagBoolean.ts"],
|
|
4
|
-
"sourcesContent": ["\"use client\"\n\nimport { useQuery } from '@tanstack/react-query'\nimport { readApiResultOrThrow } from '@open-mercato/ui/backend/utils/apiCall'\
|
|
5
|
-
"mappings": ";AAEA,SAAS,gBAAgB;AACzB,SAAS,4BAA4B;
|
|
4
|
+
"sourcesContent": ["\"use client\"\n\nimport { useQuery } from '@tanstack/react-query'\nimport { readApiResultOrThrow } from '@open-mercato/ui/backend/utils/apiCall'\n\nexport type UseFeatureFlagOptions = {\n id: string\n}\n\nexport type UseFeatureFlagResult = {\n enabled: boolean\n isLoading: boolean\n}\n\ntype Result<T> = {\n ok: true\n value: T\n} | {\n ok: false\n error: unknown\n}\n\nexport function useFeatureFlagBoolean(options: UseFeatureFlagOptions): UseFeatureFlagResult {\n const query = useQuery({\n queryKey: ['featureToggles', 'check', options?.id],\n queryFn: async () => {\n const params = new URLSearchParams({\n identifier: options.id,\n })\n\n const result = await readApiResultOrThrow<Result<boolean>>(\n `/api/feature_toggles/check/boolean?${params.toString()}`,\n undefined,\n { errorMessage: 'Failed to check feature flag.' },\n )\n\n return result\n },\n enabled: !!options.id,\n })\n\n const enabled = query.data?.ok ? query.data.value : false\n const isLoading = query.isLoading\n\n return {\n enabled,\n isLoading,\n }\n}\n"],
|
|
5
|
+
"mappings": ";AAEA,SAAS,gBAAgB;AACzB,SAAS,4BAA4B;AAmB9B,SAAS,sBAAsB,SAAsD;AAC1F,QAAM,QAAQ,SAAS;AAAA,IACrB,UAAU,CAAC,kBAAkB,SAAS,SAAS,EAAE;AAAA,IACjD,SAAS,YAAY;AACnB,YAAM,SAAS,IAAI,gBAAgB;AAAA,QACjC,YAAY,QAAQ;AAAA,MACtB,CAAC;AAED,YAAM,SAAS,MAAM;AAAA,QACnB,sCAAsC,OAAO,SAAS,CAAC;AAAA,QACvD;AAAA,QACA,EAAE,cAAc,gCAAgC;AAAA,MAClD;AAEA,aAAO;AAAA,IACT;AAAA,IACA,SAAS,CAAC,CAAC,QAAQ;AAAA,EACrB,CAAC;AAED,QAAM,UAAU,MAAM,MAAM,KAAK,MAAM,KAAK,QAAQ;AACpD,QAAM,YAAY,MAAM;AAExB,SAAO;AAAA,IACL;AAAA,IACA;AAAA,EACF;AACF;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -1,9 +1,7 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { useQuery } from "@tanstack/react-query";
|
|
3
3
|
import { readApiResultOrThrow } from "@open-mercato/ui/backend/utils/apiCall";
|
|
4
|
-
import { FEATURE_FLAG_STALE_TIME_MS } from "./staleTime.js";
|
|
5
4
|
function useFeatureFlagJson(options) {
|
|
6
|
-
const defaultValue = options.defaultValue ?? null;
|
|
7
5
|
const query = useQuery({
|
|
8
6
|
queryKey: ["featureToggles", "check", "json", options?.id],
|
|
9
7
|
queryFn: async () => {
|
|
@@ -17,10 +15,9 @@ function useFeatureFlagJson(options) {
|
|
|
17
15
|
);
|
|
18
16
|
return result;
|
|
19
17
|
},
|
|
20
|
-
enabled: !!options.id
|
|
21
|
-
staleTime: FEATURE_FLAG_STALE_TIME_MS
|
|
18
|
+
enabled: !!options.id
|
|
22
19
|
});
|
|
23
|
-
const value = query.data?.ok ? query.data.value :
|
|
20
|
+
const value = query.data?.ok ? query.data.value : null;
|
|
24
21
|
const isLoading = query.isLoading;
|
|
25
22
|
return {
|
|
26
23
|
value,
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../src/modules/feature_toggles/components/hooks/useFeatureFlagJson.ts"],
|
|
4
|
-
"sourcesContent": ["\"use client\"\n\nimport { useQuery } from '@tanstack/react-query'\nimport { readApiResultOrThrow } from '@open-mercato/ui/backend/utils/apiCall'\
|
|
5
|
-
"mappings": ";AAEA,SAAS,gBAAgB;AACzB,SAAS,4BAA4B;
|
|
4
|
+
"sourcesContent": ["\"use client\"\n\nimport { useQuery } from '@tanstack/react-query'\nimport { readApiResultOrThrow } from '@open-mercato/ui/backend/utils/apiCall'\n\nexport type UseFeatureFlagJsonOptions = {\n id: string\n}\n\nexport type UseFeatureFlagJsonResult<T = unknown> = {\n value: T | null\n isLoading: boolean\n}\n\ntype Result<T> = {\n ok: true\n value: T\n} | {\n ok: false\n error: unknown\n}\n\nexport function useFeatureFlagJson<T = unknown>(options: UseFeatureFlagJsonOptions): UseFeatureFlagJsonResult<T> {\n const query = useQuery({\n queryKey: ['featureToggles', 'check', 'json', options?.id],\n queryFn: async () => {\n const params = new URLSearchParams({\n identifier: options.id,\n })\n\n const result = await readApiResultOrThrow<Result<T>>(\n `/api/feature_toggles/check/json?${params.toString()}`,\n undefined,\n { errorMessage: 'Failed to check feature flag.' },\n )\n\n return result\n },\n enabled: !!options.id,\n })\n\n const value = query.data?.ok ? query.data.value : null\n const isLoading = query.isLoading\n\n return {\n value,\n isLoading,\n }\n}\n"],
|
|
5
|
+
"mappings": ";AAEA,SAAS,gBAAgB;AACzB,SAAS,4BAA4B;AAmB9B,SAAS,mBAAgC,SAAiE;AAC7G,QAAM,QAAQ,SAAS;AAAA,IACnB,UAAU,CAAC,kBAAkB,SAAS,QAAQ,SAAS,EAAE;AAAA,IACzD,SAAS,YAAY;AACjB,YAAM,SAAS,IAAI,gBAAgB;AAAA,QAC/B,YAAY,QAAQ;AAAA,MACxB,CAAC;AAED,YAAM,SAAS,MAAM;AAAA,QACjB,mCAAmC,OAAO,SAAS,CAAC;AAAA,QACpD;AAAA,QACA,EAAE,cAAc,gCAAgC;AAAA,MACpD;AAEA,aAAO;AAAA,IACX;AAAA,IACA,SAAS,CAAC,CAAC,QAAQ;AAAA,EACvB,CAAC;AAED,QAAM,QAAQ,MAAM,MAAM,KAAK,MAAM,KAAK,QAAQ;AAClD,QAAM,YAAY,MAAM;AAExB,SAAO;AAAA,IACH;AAAA,IACA;AAAA,EACJ;AACJ;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -1,9 +1,7 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { useQuery } from "@tanstack/react-query";
|
|
3
3
|
import { readApiResultOrThrow } from "@open-mercato/ui/backend/utils/apiCall";
|
|
4
|
-
import { FEATURE_FLAG_STALE_TIME_MS } from "./staleTime.js";
|
|
5
4
|
function useFeatureFlagNumber(options) {
|
|
6
|
-
const defaultValue = options.defaultValue ?? null;
|
|
7
5
|
const query = useQuery({
|
|
8
6
|
queryKey: ["featureToggles", "check", "number", options?.id],
|
|
9
7
|
queryFn: async () => {
|
|
@@ -17,10 +15,9 @@ function useFeatureFlagNumber(options) {
|
|
|
17
15
|
);
|
|
18
16
|
return result;
|
|
19
17
|
},
|
|
20
|
-
enabled: !!options.id
|
|
21
|
-
staleTime: FEATURE_FLAG_STALE_TIME_MS
|
|
18
|
+
enabled: !!options.id
|
|
22
19
|
});
|
|
23
|
-
const value = query.data?.ok ? query.data.value :
|
|
20
|
+
const value = query.data?.ok ? query.data.value : null;
|
|
24
21
|
const isLoading = query.isLoading;
|
|
25
22
|
return {
|
|
26
23
|
value,
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../src/modules/feature_toggles/components/hooks/useFeatureFlagNumber.ts"],
|
|
4
|
-
"sourcesContent": ["\"use client\"\n\nimport { useQuery } from '@tanstack/react-query'\nimport { readApiResultOrThrow } from '@open-mercato/ui/backend/utils/apiCall'\
|
|
5
|
-
"mappings": ";AAEA,SAAS,gBAAgB;AACzB,SAAS,4BAA4B;
|
|
4
|
+
"sourcesContent": ["\"use client\"\n\nimport { useQuery } from '@tanstack/react-query'\nimport { readApiResultOrThrow } from '@open-mercato/ui/backend/utils/apiCall'\n\nexport type UseFeatureFlagNumberOptions = {\n id: string\n}\n\nexport type UseFeatureFlagNumberResult = {\n value: number | null\n isLoading: boolean\n}\n\ntype Result<T> = {\n ok: true\n value: T\n} | {\n ok: false\n error: unknown\n}\n\nexport function useFeatureFlagNumber(options: UseFeatureFlagNumberOptions): UseFeatureFlagNumberResult {\n const query = useQuery({\n queryKey: ['featureToggles', 'check', 'number', options?.id],\n queryFn: async () => {\n const params = new URLSearchParams({\n identifier: options.id,\n })\n\n const result = await readApiResultOrThrow<Result<number>>(\n `/api/feature_toggles/check/number?${params.toString()}`,\n undefined,\n { errorMessage: 'Failed to check feature flag.' },\n )\n\n return result\n },\n enabled: !!options.id,\n })\n\n const value = query.data?.ok ? query.data.value : null\n const isLoading = query.isLoading\n\n return {\n value,\n isLoading,\n }\n}\n"],
|
|
5
|
+
"mappings": ";AAEA,SAAS,gBAAgB;AACzB,SAAS,4BAA4B;AAmB9B,SAAS,qBAAqB,SAAkE;AACnG,QAAM,QAAQ,SAAS;AAAA,IACnB,UAAU,CAAC,kBAAkB,SAAS,UAAU,SAAS,EAAE;AAAA,IAC3D,SAAS,YAAY;AACjB,YAAM,SAAS,IAAI,gBAAgB;AAAA,QAC/B,YAAY,QAAQ;AAAA,MACxB,CAAC;AAED,YAAM,SAAS,MAAM;AAAA,QACjB,qCAAqC,OAAO,SAAS,CAAC;AAAA,QACtD;AAAA,QACA,EAAE,cAAc,gCAAgC;AAAA,MACpD;AAEA,aAAO;AAAA,IACX;AAAA,IACA,SAAS,CAAC,CAAC,QAAQ;AAAA,EACvB,CAAC;AAED,QAAM,QAAQ,MAAM,MAAM,KAAK,MAAM,KAAK,QAAQ;AAClD,QAAM,YAAY,MAAM;AAExB,SAAO;AAAA,IACH;AAAA,IACA;AAAA,EACJ;AACJ;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -1,9 +1,7 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { useQuery } from "@tanstack/react-query";
|
|
3
3
|
import { readApiResultOrThrow } from "@open-mercato/ui/backend/utils/apiCall";
|
|
4
|
-
import { FEATURE_FLAG_STALE_TIME_MS } from "./staleTime.js";
|
|
5
4
|
function useFeatureFlagString(options) {
|
|
6
|
-
const defaultValue = options.defaultValue ?? null;
|
|
7
5
|
const query = useQuery({
|
|
8
6
|
queryKey: ["featureToggles", "check", "string", options?.id],
|
|
9
7
|
queryFn: async () => {
|
|
@@ -17,10 +15,9 @@ function useFeatureFlagString(options) {
|
|
|
17
15
|
);
|
|
18
16
|
return result;
|
|
19
17
|
},
|
|
20
|
-
enabled: !!options.id
|
|
21
|
-
staleTime: FEATURE_FLAG_STALE_TIME_MS
|
|
18
|
+
enabled: !!options.id
|
|
22
19
|
});
|
|
23
|
-
const value = query.data?.ok ? query.data.value :
|
|
20
|
+
const value = query.data?.ok ? query.data.value : null;
|
|
24
21
|
const isLoading = query.isLoading;
|
|
25
22
|
return {
|
|
26
23
|
value,
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../src/modules/feature_toggles/components/hooks/useFeatureFlagString.ts"],
|
|
4
|
-
"sourcesContent": ["\"use client\"\n\nimport { useQuery } from '@tanstack/react-query'\nimport { readApiResultOrThrow } from '@open-mercato/ui/backend/utils/apiCall'\
|
|
5
|
-
"mappings": ";AAEA,SAAS,gBAAgB;AACzB,SAAS,4BAA4B;
|
|
4
|
+
"sourcesContent": ["\"use client\"\n\nimport { useQuery } from '@tanstack/react-query'\nimport { readApiResultOrThrow } from '@open-mercato/ui/backend/utils/apiCall'\n\nexport type UseFeatureFlagStringOptions = {\n id: string\n}\n\nexport type UseFeatureFlagStringResult = {\n value: string | null\n isLoading: boolean\n}\n\ntype Result<T> = {\n ok: true\n value: T\n} | {\n ok: false\n error: unknown\n}\n\nexport function useFeatureFlagString(options: UseFeatureFlagStringOptions): UseFeatureFlagStringResult {\n const query = useQuery({\n queryKey: ['featureToggles', 'check', 'string', options?.id],\n queryFn: async () => {\n const params = new URLSearchParams({\n identifier: options.id,\n })\n\n const result = await readApiResultOrThrow<Result<string>>(\n `/api/feature_toggles/check/string?${params.toString()}`,\n undefined,\n { errorMessage: 'Failed to check feature flag.' },\n )\n\n return result\n },\n enabled: !!options.id,\n })\n\n const value = query.data?.ok ? query.data.value : null\n const isLoading = query.isLoading\n\n return {\n value,\n isLoading,\n }\n}\n"],
|
|
5
|
+
"mappings": ";AAEA,SAAS,gBAAgB;AACzB,SAAS,4BAA4B;AAmB9B,SAAS,qBAAqB,SAAkE;AACnG,QAAM,QAAQ,SAAS;AAAA,IACnB,UAAU,CAAC,kBAAkB,SAAS,UAAU,SAAS,EAAE;AAAA,IAC3D,SAAS,YAAY;AACjB,YAAM,SAAS,IAAI,gBAAgB;AAAA,QAC/B,YAAY,QAAQ;AAAA,MACxB,CAAC;AAED,YAAM,SAAS,MAAM;AAAA,QACjB,qCAAqC,OAAO,SAAS,CAAC;AAAA,QACtD;AAAA,QACA,EAAE,cAAc,gCAAgC;AAAA,MACpD;AAEA,aAAO;AAAA,IACX;AAAA,IACA,SAAS,CAAC,CAAC,QAAQ;AAAA,EACvB,CAAC;AAED,QAAM,QAAQ,MAAM,MAAM,KAAK,MAAM,KAAK,QAAQ;AAClD,QAAM,YAAY,MAAM;AAExB,SAAO;AAAA,IACH;AAAA,IACA;AAAA,EACJ;AACJ;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
2
|
import { runWithCacheTenant } from "@open-mercato/cache";
|
|
3
3
|
import { findOneWithDecryption, findWithDecryption } from "@open-mercato/shared/lib/encryption/find";
|
|
4
|
-
import {
|
|
4
|
+
import { hasFeature } from "@open-mercato/shared/security/features";
|
|
5
5
|
import { InboxProposal, InboxProposalAction, InboxDiscrepancy } from "./data/entities.js";
|
|
6
6
|
import { inboxProposalCategoryEnum } from "./data/validators.js";
|
|
7
7
|
import { executeAction } from "./lib/executionEngine.js";
|
|
@@ -231,10 +231,7 @@ Returns on error: error message with appropriate detail.`,
|
|
|
231
231
|
return { error: "Action already processed", status: action.status };
|
|
232
232
|
}
|
|
233
233
|
if (action.requiredFeature) {
|
|
234
|
-
const featureGranted =
|
|
235
|
-
grantedFeatures: ctx.userFeatures,
|
|
236
|
-
unrestricted: ctx.isSuperAdmin
|
|
237
|
-
});
|
|
234
|
+
const featureGranted = ctx.isSuperAdmin || hasFeature(ctx.userFeatures, action.requiredFeature);
|
|
238
235
|
if (!featureGranted) {
|
|
239
236
|
return {
|
|
240
237
|
error: "Insufficient permissions",
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/modules/inbox_ops/ai-tools.ts"],
|
|
4
|
-
"sourcesContent": ["import { z } from 'zod'\nimport type { EntityManager } from '@mikro-orm/postgresql'\nimport type { AwilixContainer } from 'awilix'\nimport { runWithCacheTenant } from '@open-mercato/cache'\nimport { findOneWithDecryption, findWithDecryption } from '@open-mercato/shared/lib/encryption/find'\nimport { authorizeFeatures } from '@open-mercato/shared/security/featurePolicy'\nimport { InboxProposal, InboxProposalAction, InboxDiscrepancy } from './data/entities'\nimport { inboxProposalCategoryEnum } from './data/validators'\nimport { executeAction } from './lib/executionEngine'\nimport { resolveConfiguredStructuredModel, withTimeout } from './lib/llmProvider'\nimport { resolveOptionalEventBus } from './lib/eventBus'\n\ntype ToolContext = {\n tenantId: string | null\n organizationId: string | null\n userId: string | null\n container: AwilixContainer\n userFeatures: string[]\n isSuperAdmin: boolean\n}\n\ninterface AiToolDefinition {\n name: string\n description: string\n inputSchema: z.ZodType\n requiredFeatures?: string[]\n handler: (input: never, ctx: ToolContext) => Promise<unknown>\n}\n\n// =============================================================================\n// Helpers\n// =============================================================================\n\nfunction requireTenantContext(ctx: ToolContext): { tenantId: string; organizationId: string } {\n if (!ctx.tenantId || !ctx.organizationId) {\n throw new Error('Tenant context is required')\n }\n return { tenantId: ctx.tenantId, organizationId: ctx.organizationId }\n}\n\nfunction resolveCrossModuleEntities(container: ToolContext['container']) {\n const entities: Record<string, unknown> = {}\n const keys = [\n 'CustomerEntity',\n 'SalesOrder',\n 'SalesShipment',\n 'SalesChannel',\n 'Dictionary',\n 'DictionaryEntry',\n ]\n for (const key of keys) {\n try {\n entities[key] = container.resolve(key)\n } catch {\n /* module not available */\n }\n }\n return entities\n}\n\n// =============================================================================\n// inbox_ops_list_proposals \u2014 Query proposals by status, category, date range\n// =============================================================================\n\nconst listProposalsTool = {\n name: 'inbox_ops_list_proposals',\n description: `List inbox proposals with optional filters by status, category, and date range.\n\nReturns: total count and an array of proposals with id, summary, status, category, confidence, actionCount, and createdAt.`,\n inputSchema: z.object({\n status: z\n .enum(['pending', 'partial', 'accepted', 'rejected'])\n .optional()\n .describe('Filter by proposal status'),\n category: inboxProposalCategoryEnum\n .optional()\n .describe('Filter by email category'),\n limit: z\n .number()\n .int()\n .min(1)\n .max(50)\n .optional()\n .default(10)\n .describe('Maximum number of proposals to return (default: 10)'),\n dateFrom: z\n .string()\n .optional()\n .describe('Filter proposals created on or after this date (ISO 8601)'),\n dateTo: z\n .string()\n .optional()\n .describe('Filter proposals created on or before this date (ISO 8601)'),\n }),\n requiredFeatures: ['inbox_ops.proposals.view'],\n handler: async (input: { status?: string; category?: string; limit?: number; dateFrom?: string; dateTo?: string }, ctx: ToolContext) => {\n const scope = requireTenantContext(ctx)\n const em = ctx.container.resolve<EntityManager>('em').fork()\n\n const where: Record<string, unknown> = {\n organizationId: scope.organizationId,\n tenantId: scope.tenantId,\n isActive: true,\n deletedAt: null,\n }\n\n if (input.status) {\n where.status = input.status\n }\n if (input.category) {\n where.category = input.category\n }\n if (input.dateFrom || input.dateTo) {\n const createdAt: Record<string, unknown> = {}\n if (input.dateFrom) {\n createdAt.$gte = new Date(input.dateFrom)\n }\n if (input.dateTo) {\n createdAt.$lte = new Date(input.dateTo)\n }\n where.createdAt = createdAt\n }\n\n const proposals = await findWithDecryption(\n em,\n InboxProposal,\n where,\n { orderBy: { createdAt: 'DESC' }, limit: input.limit },\n scope,\n )\n\n // Count actions per proposal in a single query\n const proposalIds = proposals.map((p) => p.id)\n const actionCountMap = new Map<string, number>()\n\n if (proposalIds.length > 0) {\n const actions = await findWithDecryption(\n em,\n InboxProposalAction,\n {\n proposalId: { $in: proposalIds },\n deletedAt: null,\n },\n undefined,\n scope,\n )\n for (const action of actions) {\n actionCountMap.set(action.proposalId, (actionCountMap.get(action.proposalId) ?? 0) + 1)\n }\n }\n\n // Get total count for the filter\n const total = await em.count(InboxProposal, where)\n\n return {\n total,\n proposals: proposals.map((p) => ({\n id: p.id,\n summary: p.summary,\n status: p.status,\n category: p.category ?? null,\n confidence: Number(p.confidence),\n actionCount: actionCountMap.get(p.id) ?? 0,\n createdAt: p.createdAt.toISOString(),\n })),\n }\n },\n}\n\n// =============================================================================\n// inbox_ops_get_proposal \u2014 Fetch proposal detail with actions and discrepancies\n// =============================================================================\n\nconst getProposalTool = {\n name: 'inbox_ops_get_proposal',\n description: `Get full details of an inbox proposal including its actions and discrepancies.\n\nReturns: proposal with id, summary, status, category, confidence, actions array, and discrepancies array.`,\n inputSchema: z.object({\n proposalId: z.string().uuid().describe('The UUID of the proposal to retrieve'),\n }),\n requiredFeatures: ['inbox_ops.proposals.view'],\n handler: async (input: { proposalId: string }, ctx: ToolContext) => {\n const scope = requireTenantContext(ctx)\n const em = ctx.container.resolve<EntityManager>('em').fork()\n\n const proposal = await findOneWithDecryption(\n em,\n InboxProposal,\n {\n id: input.proposalId,\n organizationId: scope.organizationId,\n tenantId: scope.tenantId,\n isActive: true,\n deletedAt: null,\n },\n undefined,\n scope,\n )\n\n if (!proposal) {\n return { error: 'Proposal not found' }\n }\n\n const actions = await findWithDecryption(\n em,\n InboxProposalAction,\n {\n proposalId: proposal.id,\n organizationId: scope.organizationId,\n tenantId: scope.tenantId,\n deletedAt: null,\n },\n { orderBy: { sortOrder: 'ASC' } },\n scope,\n )\n\n const discrepancies = await findWithDecryption(\n em,\n InboxDiscrepancy,\n {\n proposalId: proposal.id,\n organizationId: scope.organizationId,\n tenantId: scope.tenantId,\n },\n undefined,\n scope,\n )\n\n return {\n proposal: {\n id: proposal.id,\n summary: proposal.summary,\n status: proposal.status,\n category: proposal.category ?? null,\n confidence: Number(proposal.confidence),\n actions: actions.map((a) => ({\n id: a.id,\n actionType: a.actionType,\n description: a.description,\n status: a.status,\n confidence: Number(a.confidence),\n requiredFeature: a.requiredFeature ?? null,\n sortOrder: a.sortOrder,\n createdEntityId: a.createdEntityId ?? null,\n createdEntityType: a.createdEntityType ?? null,\n })),\n discrepancies: discrepancies.map((d) => ({\n id: d.id,\n type: d.type,\n severity: d.severity,\n description: d.description,\n expectedValue: d.expectedValue ?? null,\n foundValue: d.foundValue ?? null,\n resolved: d.resolved,\n })),\n },\n }\n },\n}\n\n// =============================================================================\n// inbox_ops_accept_action \u2014 Accept and execute a specific action\n// =============================================================================\n\nconst acceptActionTool = {\n name: 'inbox_ops_accept_action',\n description: `Accept and execute a specific action from an inbox proposal. Creates the entity in the target module (e.g., order, contact).\n\nReturns on success: { ok: true, createdEntityId, createdEntityType }\nReturns on error: error message with appropriate detail.`,\n inputSchema: z.object({\n proposalId: z.string().uuid().describe('The UUID of the proposal'),\n actionId: z.string().uuid().describe('The UUID of the action to accept'),\n }),\n requiredFeatures: ['inbox_ops.proposals.manage'],\n // Accepting an inbox action creates downstream entities (orders, contacts,\n // etc.) in target modules \u2014 must surface as a write so any agent that\n // whitelists it routes through the approval card.\n isMutation: true,\n handler: async (input: { proposalId: string; actionId: string }, ctx: ToolContext) => {\n const scope = requireTenantContext(ctx)\n if (!ctx.userId) {\n throw new Error('User context is required')\n }\n\n const em = ctx.container.resolve<EntityManager>('em').fork()\n\n const action = await findOneWithDecryption(\n em,\n InboxProposalAction,\n {\n id: input.actionId,\n proposalId: input.proposalId,\n organizationId: scope.organizationId,\n tenantId: scope.tenantId,\n deletedAt: null,\n },\n undefined,\n scope,\n )\n\n if (!action) {\n return { error: 'Action not found' }\n }\n\n // Check if action was already processed\n if (action.status !== 'pending' && action.status !== 'failed') {\n return { error: 'Action already processed', status: action.status }\n }\n\n // Check target module permission\n if (action.requiredFeature) {\n const featureGranted = authorizeFeatures([action.requiredFeature], {\n grantedFeatures: ctx.userFeatures,\n unrestricted: ctx.isSuperAdmin,\n })\n if (!featureGranted) {\n return {\n error: 'Insufficient permissions',\n requiredFeature: action.requiredFeature,\n }\n }\n }\n\n const entities = resolveCrossModuleEntities(ctx.container)\n const eventBus = resolveOptionalEventBus(ctx.container)\n\n const result = await executeAction(action, {\n em,\n userId: ctx.userId,\n tenantId: scope.tenantId,\n organizationId: scope.organizationId,\n eventBus,\n container: ctx.container,\n entities: entities as unknown as import('./lib/executionEngine').CrossModuleEntities,\n })\n\n if (!result.success) {\n if (result.statusCode === 409) {\n return { error: 'Action already processed', status: 'accepted' }\n }\n if (result.statusCode === 403) {\n return {\n error: 'Insufficient permissions',\n requiredFeature: action.requiredFeature ?? 'unknown',\n }\n }\n return { error: 'Execution failed', detail: result.error ?? 'Unknown error' }\n }\n\n try {\n const { resolveCache, invalidateCountsCache } = await import('./lib/cache')\n const cache = resolveCache(ctx.container)\n if (cache && scope.tenantId) {\n await runWithCacheTenant(scope.tenantId, () => invalidateCountsCache(cache, scope.tenantId))\n }\n } catch { /* cache invalidation is non-critical */ }\n\n return {\n ok: true,\n createdEntityId: result.createdEntityId ?? null,\n createdEntityType: result.createdEntityType ?? null,\n }\n },\n}\n\n// =============================================================================\n// inbox_ops_categorize_email \u2014 Standalone LLM-based text categorization\n// =============================================================================\n\nconst categorizeEmailSchema = z.object({\n category: inboxProposalCategoryEnum,\n confidence: z.number(),\n reasoning: z.string(),\n})\n\nconst categorizeEmailTool = {\n name: 'inbox_ops_categorize_email',\n description: `Categorize email or text content using AI. Classifies text into one of: rfq, order, order_update, complaint, shipping_update, inquiry, payment, other.\n\nReturns: { category, confidence (0-1), reasoning }\nInput text is limited to 10,000 characters for cost control.`,\n inputSchema: z.object({\n text: z\n .string()\n .min(1)\n .max(10000)\n .describe('Email or text content to categorize (max 10K chars)'),\n }),\n requiredFeatures: ['inbox_ops.proposals.view'],\n handler: async (input: { text: string }, ctx: ToolContext) => {\n requireTenantContext(ctx)\n\n const { model } = await resolveConfiguredStructuredModel({ moduleId: 'inbox_ops' })\n\n const { generateObject } = await import('ai')\n\n const result = await withTimeout(\n generateObject({\n model,\n schema: categorizeEmailSchema,\n system: `You are an email classification agent. Classify the given text into exactly one category:\n- rfq: Request for quotation or pricing inquiry\n- order: New purchase order or order placement\n- order_update: Change or update to an existing order\n- complaint: Customer complaint, dispute, or dissatisfaction\n- shipping_update: Shipment status, tracking, or delivery information\n- inquiry: General question or information request\n- payment: Payment-related (invoice, receipt, payment terms)\n- other: Does not fit any category above\n\nReturn a JSON object with:\n- category: one of the categories above\n- confidence: a number between 0 and 1 indicating how confident you are\n- reasoning: a brief explanation (1-2 sentences) of why this category was chosen`,\n prompt: input.text,\n temperature: 0,\n }),\n 15000,\n 'Email categorization timed out after 15s',\n )\n\n return {\n category: result.object.category,\n confidence: Math.round(result.object.confidence * 100) / 100,\n reasoning: result.object.reasoning,\n }\n },\n}\n\n// =============================================================================\n// Export\n// =============================================================================\n\n/**\n * All AI tools exported by the inbox_ops module.\n * Discovered by ai-assistant module's generator.\n */\nexport const aiTools: AiToolDefinition[] = [\n listProposalsTool,\n getProposalTool,\n acceptActionTool,\n categorizeEmailTool,\n]\n\nexport default aiTools\n"],
|
|
5
|
-
"mappings": "AAAA,SAAS,SAAS;AAGlB,SAAS,0BAA0B;AACnC,SAAS,uBAAuB,0BAA0B;AAC1D,SAAS,
|
|
4
|
+
"sourcesContent": ["import { z } from 'zod'\nimport type { EntityManager } from '@mikro-orm/postgresql'\nimport type { AwilixContainer } from 'awilix'\nimport { runWithCacheTenant } from '@open-mercato/cache'\nimport { findOneWithDecryption, findWithDecryption } from '@open-mercato/shared/lib/encryption/find'\nimport { hasFeature } from '@open-mercato/shared/security/features'\nimport { InboxProposal, InboxProposalAction, InboxDiscrepancy } from './data/entities'\nimport { inboxProposalCategoryEnum } from './data/validators'\nimport { executeAction } from './lib/executionEngine'\nimport { resolveConfiguredStructuredModel, withTimeout } from './lib/llmProvider'\nimport { resolveOptionalEventBus } from './lib/eventBus'\n\ntype ToolContext = {\n tenantId: string | null\n organizationId: string | null\n userId: string | null\n container: AwilixContainer\n userFeatures: string[]\n isSuperAdmin: boolean\n}\n\ninterface AiToolDefinition {\n name: string\n description: string\n inputSchema: z.ZodType\n requiredFeatures?: string[]\n handler: (input: never, ctx: ToolContext) => Promise<unknown>\n}\n\n// =============================================================================\n// Helpers\n// =============================================================================\n\nfunction requireTenantContext(ctx: ToolContext): { tenantId: string; organizationId: string } {\n if (!ctx.tenantId || !ctx.organizationId) {\n throw new Error('Tenant context is required')\n }\n return { tenantId: ctx.tenantId, organizationId: ctx.organizationId }\n}\n\nfunction resolveCrossModuleEntities(container: ToolContext['container']) {\n const entities: Record<string, unknown> = {}\n const keys = [\n 'CustomerEntity',\n 'SalesOrder',\n 'SalesShipment',\n 'SalesChannel',\n 'Dictionary',\n 'DictionaryEntry',\n ]\n for (const key of keys) {\n try {\n entities[key] = container.resolve(key)\n } catch {\n /* module not available */\n }\n }\n return entities\n}\n\n// =============================================================================\n// inbox_ops_list_proposals \u2014 Query proposals by status, category, date range\n// =============================================================================\n\nconst listProposalsTool = {\n name: 'inbox_ops_list_proposals',\n description: `List inbox proposals with optional filters by status, category, and date range.\n\nReturns: total count and an array of proposals with id, summary, status, category, confidence, actionCount, and createdAt.`,\n inputSchema: z.object({\n status: z\n .enum(['pending', 'partial', 'accepted', 'rejected'])\n .optional()\n .describe('Filter by proposal status'),\n category: inboxProposalCategoryEnum\n .optional()\n .describe('Filter by email category'),\n limit: z\n .number()\n .int()\n .min(1)\n .max(50)\n .optional()\n .default(10)\n .describe('Maximum number of proposals to return (default: 10)'),\n dateFrom: z\n .string()\n .optional()\n .describe('Filter proposals created on or after this date (ISO 8601)'),\n dateTo: z\n .string()\n .optional()\n .describe('Filter proposals created on or before this date (ISO 8601)'),\n }),\n requiredFeatures: ['inbox_ops.proposals.view'],\n handler: async (input: { status?: string; category?: string; limit?: number; dateFrom?: string; dateTo?: string }, ctx: ToolContext) => {\n const scope = requireTenantContext(ctx)\n const em = ctx.container.resolve<EntityManager>('em').fork()\n\n const where: Record<string, unknown> = {\n organizationId: scope.organizationId,\n tenantId: scope.tenantId,\n isActive: true,\n deletedAt: null,\n }\n\n if (input.status) {\n where.status = input.status\n }\n if (input.category) {\n where.category = input.category\n }\n if (input.dateFrom || input.dateTo) {\n const createdAt: Record<string, unknown> = {}\n if (input.dateFrom) {\n createdAt.$gte = new Date(input.dateFrom)\n }\n if (input.dateTo) {\n createdAt.$lte = new Date(input.dateTo)\n }\n where.createdAt = createdAt\n }\n\n const proposals = await findWithDecryption(\n em,\n InboxProposal,\n where,\n { orderBy: { createdAt: 'DESC' }, limit: input.limit },\n scope,\n )\n\n // Count actions per proposal in a single query\n const proposalIds = proposals.map((p) => p.id)\n const actionCountMap = new Map<string, number>()\n\n if (proposalIds.length > 0) {\n const actions = await findWithDecryption(\n em,\n InboxProposalAction,\n {\n proposalId: { $in: proposalIds },\n deletedAt: null,\n },\n undefined,\n scope,\n )\n for (const action of actions) {\n actionCountMap.set(action.proposalId, (actionCountMap.get(action.proposalId) ?? 0) + 1)\n }\n }\n\n // Get total count for the filter\n const total = await em.count(InboxProposal, where)\n\n return {\n total,\n proposals: proposals.map((p) => ({\n id: p.id,\n summary: p.summary,\n status: p.status,\n category: p.category ?? null,\n confidence: Number(p.confidence),\n actionCount: actionCountMap.get(p.id) ?? 0,\n createdAt: p.createdAt.toISOString(),\n })),\n }\n },\n}\n\n// =============================================================================\n// inbox_ops_get_proposal \u2014 Fetch proposal detail with actions and discrepancies\n// =============================================================================\n\nconst getProposalTool = {\n name: 'inbox_ops_get_proposal',\n description: `Get full details of an inbox proposal including its actions and discrepancies.\n\nReturns: proposal with id, summary, status, category, confidence, actions array, and discrepancies array.`,\n inputSchema: z.object({\n proposalId: z.string().uuid().describe('The UUID of the proposal to retrieve'),\n }),\n requiredFeatures: ['inbox_ops.proposals.view'],\n handler: async (input: { proposalId: string }, ctx: ToolContext) => {\n const scope = requireTenantContext(ctx)\n const em = ctx.container.resolve<EntityManager>('em').fork()\n\n const proposal = await findOneWithDecryption(\n em,\n InboxProposal,\n {\n id: input.proposalId,\n organizationId: scope.organizationId,\n tenantId: scope.tenantId,\n isActive: true,\n deletedAt: null,\n },\n undefined,\n scope,\n )\n\n if (!proposal) {\n return { error: 'Proposal not found' }\n }\n\n const actions = await findWithDecryption(\n em,\n InboxProposalAction,\n {\n proposalId: proposal.id,\n organizationId: scope.organizationId,\n tenantId: scope.tenantId,\n deletedAt: null,\n },\n { orderBy: { sortOrder: 'ASC' } },\n scope,\n )\n\n const discrepancies = await findWithDecryption(\n em,\n InboxDiscrepancy,\n {\n proposalId: proposal.id,\n organizationId: scope.organizationId,\n tenantId: scope.tenantId,\n },\n undefined,\n scope,\n )\n\n return {\n proposal: {\n id: proposal.id,\n summary: proposal.summary,\n status: proposal.status,\n category: proposal.category ?? null,\n confidence: Number(proposal.confidence),\n actions: actions.map((a) => ({\n id: a.id,\n actionType: a.actionType,\n description: a.description,\n status: a.status,\n confidence: Number(a.confidence),\n requiredFeature: a.requiredFeature ?? null,\n sortOrder: a.sortOrder,\n createdEntityId: a.createdEntityId ?? null,\n createdEntityType: a.createdEntityType ?? null,\n })),\n discrepancies: discrepancies.map((d) => ({\n id: d.id,\n type: d.type,\n severity: d.severity,\n description: d.description,\n expectedValue: d.expectedValue ?? null,\n foundValue: d.foundValue ?? null,\n resolved: d.resolved,\n })),\n },\n }\n },\n}\n\n// =============================================================================\n// inbox_ops_accept_action \u2014 Accept and execute a specific action\n// =============================================================================\n\nconst acceptActionTool = {\n name: 'inbox_ops_accept_action',\n description: `Accept and execute a specific action from an inbox proposal. Creates the entity in the target module (e.g., order, contact).\n\nReturns on success: { ok: true, createdEntityId, createdEntityType }\nReturns on error: error message with appropriate detail.`,\n inputSchema: z.object({\n proposalId: z.string().uuid().describe('The UUID of the proposal'),\n actionId: z.string().uuid().describe('The UUID of the action to accept'),\n }),\n requiredFeatures: ['inbox_ops.proposals.manage'],\n // Accepting an inbox action creates downstream entities (orders, contacts,\n // etc.) in target modules \u2014 must surface as a write so any agent that\n // whitelists it routes through the approval card.\n isMutation: true,\n handler: async (input: { proposalId: string; actionId: string }, ctx: ToolContext) => {\n const scope = requireTenantContext(ctx)\n if (!ctx.userId) {\n throw new Error('User context is required')\n }\n\n const em = ctx.container.resolve<EntityManager>('em').fork()\n\n const action = await findOneWithDecryption(\n em,\n InboxProposalAction,\n {\n id: input.actionId,\n proposalId: input.proposalId,\n organizationId: scope.organizationId,\n tenantId: scope.tenantId,\n deletedAt: null,\n },\n undefined,\n scope,\n )\n\n if (!action) {\n return { error: 'Action not found' }\n }\n\n // Check if action was already processed\n if (action.status !== 'pending' && action.status !== 'failed') {\n return { error: 'Action already processed', status: action.status }\n }\n\n // Check target module permission\n if (action.requiredFeature) {\n const featureGranted =\n ctx.isSuperAdmin || hasFeature(ctx.userFeatures, action.requiredFeature)\n if (!featureGranted) {\n return {\n error: 'Insufficient permissions',\n requiredFeature: action.requiredFeature,\n }\n }\n }\n\n const entities = resolveCrossModuleEntities(ctx.container)\n const eventBus = resolveOptionalEventBus(ctx.container)\n\n const result = await executeAction(action, {\n em,\n userId: ctx.userId,\n tenantId: scope.tenantId,\n organizationId: scope.organizationId,\n eventBus,\n container: ctx.container,\n entities: entities as unknown as import('./lib/executionEngine').CrossModuleEntities,\n })\n\n if (!result.success) {\n if (result.statusCode === 409) {\n return { error: 'Action already processed', status: 'accepted' }\n }\n if (result.statusCode === 403) {\n return {\n error: 'Insufficient permissions',\n requiredFeature: action.requiredFeature ?? 'unknown',\n }\n }\n return { error: 'Execution failed', detail: result.error ?? 'Unknown error' }\n }\n\n try {\n const { resolveCache, invalidateCountsCache } = await import('./lib/cache')\n const cache = resolveCache(ctx.container)\n if (cache && scope.tenantId) {\n await runWithCacheTenant(scope.tenantId, () => invalidateCountsCache(cache, scope.tenantId))\n }\n } catch { /* cache invalidation is non-critical */ }\n\n return {\n ok: true,\n createdEntityId: result.createdEntityId ?? null,\n createdEntityType: result.createdEntityType ?? null,\n }\n },\n}\n\n// =============================================================================\n// inbox_ops_categorize_email \u2014 Standalone LLM-based text categorization\n// =============================================================================\n\nconst categorizeEmailSchema = z.object({\n category: inboxProposalCategoryEnum,\n confidence: z.number(),\n reasoning: z.string(),\n})\n\nconst categorizeEmailTool = {\n name: 'inbox_ops_categorize_email',\n description: `Categorize email or text content using AI. Classifies text into one of: rfq, order, order_update, complaint, shipping_update, inquiry, payment, other.\n\nReturns: { category, confidence (0-1), reasoning }\nInput text is limited to 10,000 characters for cost control.`,\n inputSchema: z.object({\n text: z\n .string()\n .min(1)\n .max(10000)\n .describe('Email or text content to categorize (max 10K chars)'),\n }),\n requiredFeatures: ['inbox_ops.proposals.view'],\n handler: async (input: { text: string }, ctx: ToolContext) => {\n requireTenantContext(ctx)\n\n const { model } = await resolveConfiguredStructuredModel({ moduleId: 'inbox_ops' })\n\n const { generateObject } = await import('ai')\n\n const result = await withTimeout(\n generateObject({\n model,\n schema: categorizeEmailSchema,\n system: `You are an email classification agent. Classify the given text into exactly one category:\n- rfq: Request for quotation or pricing inquiry\n- order: New purchase order or order placement\n- order_update: Change or update to an existing order\n- complaint: Customer complaint, dispute, or dissatisfaction\n- shipping_update: Shipment status, tracking, or delivery information\n- inquiry: General question or information request\n- payment: Payment-related (invoice, receipt, payment terms)\n- other: Does not fit any category above\n\nReturn a JSON object with:\n- category: one of the categories above\n- confidence: a number between 0 and 1 indicating how confident you are\n- reasoning: a brief explanation (1-2 sentences) of why this category was chosen`,\n prompt: input.text,\n temperature: 0,\n }),\n 15000,\n 'Email categorization timed out after 15s',\n )\n\n return {\n category: result.object.category,\n confidence: Math.round(result.object.confidence * 100) / 100,\n reasoning: result.object.reasoning,\n }\n },\n}\n\n// =============================================================================\n// Export\n// =============================================================================\n\n/**\n * All AI tools exported by the inbox_ops module.\n * Discovered by ai-assistant module's generator.\n */\nexport const aiTools: AiToolDefinition[] = [\n listProposalsTool,\n getProposalTool,\n acceptActionTool,\n categorizeEmailTool,\n]\n\nexport default aiTools\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -1,7 +1,5 @@
|
|
|
1
1
|
import { NextResponse } from "next/server";
|
|
2
2
|
import { runWithCacheTenant } from "@open-mercato/cache";
|
|
3
|
-
import { enforceCommandOptimisticLockWithGuards } from "@open-mercato/shared/lib/crud/optimistic-lock-command";
|
|
4
|
-
import { isCrudHttpError } from "@open-mercato/shared/lib/crud/errors";
|
|
5
3
|
import {
|
|
6
4
|
runCrudMutationGuardAfterSuccess,
|
|
7
5
|
validateCrudMutationGuard
|
|
@@ -34,17 +32,6 @@ async function PATCH(req) {
|
|
|
34
32
|
if (action.status !== "pending" && action.status !== "failed") {
|
|
35
33
|
return NextResponse.json({ error: "Action already processed" }, { status: 409 });
|
|
36
34
|
}
|
|
37
|
-
try {
|
|
38
|
-
await enforceCommandOptimisticLockWithGuards(ctx.container, {
|
|
39
|
-
resourceKind: "inbox_ops.action",
|
|
40
|
-
resourceId: action.id,
|
|
41
|
-
current: action.updatedAt ?? null,
|
|
42
|
-
request: req
|
|
43
|
-
});
|
|
44
|
-
} catch (err) {
|
|
45
|
-
if (isCrudHttpError(err)) return NextResponse.json(err.body, { status: err.status });
|
|
46
|
-
throw err;
|
|
47
|
-
}
|
|
48
35
|
const mergedPayload = { ...action.payload, ...parsed.data.payload };
|
|
49
36
|
const payloadValidation = validateActionPayloadForType(action.actionType, mergedPayload);
|
|
50
37
|
if (!payloadValidation.success) {
|
|
@@ -106,7 +93,7 @@ const openApi = {
|
|
|
106
93
|
responses: [
|
|
107
94
|
{ status: 200, description: "Action updated" },
|
|
108
95
|
{ status: 404, description: "Action not found" },
|
|
109
|
-
{ status: 409, description: "Action already processed
|
|
96
|
+
{ status: 409, description: "Action already processed" }
|
|
110
97
|
]
|
|
111
98
|
}
|
|
112
99
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../../../../src/modules/inbox_ops/api/proposals/%5Bid%5D/actions/%5BactionId%5D/route.ts"],
|
|
4
|
-
"sourcesContent": ["import { NextResponse } from 'next/server'\nimport type { OpenApiRouteDoc } from '@open-mercato/shared/lib/openapi'\nimport { runWithCacheTenant } from '@open-mercato/cache'\nimport {
|
|
5
|
-
"mappings": "AAAA,SAAS,oBAAoB;AAE7B,SAAS,0BAA0B;AACnC
|
|
4
|
+
"sourcesContent": ["import { NextResponse } from 'next/server'\nimport type { OpenApiRouteDoc } from '@open-mercato/shared/lib/openapi'\nimport { runWithCacheTenant } from '@open-mercato/cache'\nimport {\n runCrudMutationGuardAfterSuccess,\n validateCrudMutationGuard,\n} from '@open-mercato/shared/lib/crud/mutation-guard'\nimport { actionEditSchema, validateActionPayloadForType } from '../../../../../data/validators'\nimport { emitInboxOpsEvent } from '../../../../../events'\nimport { resolveCache, invalidateCountsCache } from '../../../../../lib/cache'\nimport {\n resolveRequestContext,\n resolveActionAndProposal,\n handleRouteError,\n isErrorResponse,\n} from '../../../../routeHelpers'\nimport { createLogger } from '@open-mercato/shared/lib/logger'\n\nconst logger = createLogger('inbox_ops').child({ component: 'action-edit' })\n\nexport const metadata = {\n PATCH: { requireAuth: true, requireFeatures: ['inbox_ops.proposals.manage'] },\n}\n\nexport async function PATCH(req: Request) {\n try {\n const body = await req.json()\n const parsed = actionEditSchema.safeParse(body)\n if (!parsed.success) {\n return NextResponse.json({ error: 'Invalid payload', details: parsed.error.issues }, { status: 400 })\n }\n\n const ctx = await resolveRequestContext(req)\n const resolved = await resolveActionAndProposal(new URL(req.url), ctx)\n if (isErrorResponse(resolved)) return resolved\n\n const { action } = resolved\n\n if (action.status !== 'pending' && action.status !== 'failed') {\n return NextResponse.json({ error: 'Action already processed' }, { status: 409 })\n }\n\n const mergedPayload = { ...action.payload as Record<string, unknown>, ...parsed.data.payload }\n const payloadValidation = validateActionPayloadForType(action.actionType, mergedPayload)\n if (!payloadValidation.success) {\n return NextResponse.json({ error: payloadValidation.error }, { status: 400 })\n }\n\n const guardResult = await validateCrudMutationGuard(ctx.container, {\n tenantId: ctx.tenantId,\n organizationId: ctx.organizationId,\n userId: ctx.userId,\n resourceKind: 'inbox_ops:inbox_proposal_action',\n resourceId: action.id,\n operation: 'update',\n requestMethod: req.method,\n requestHeaders: req.headers,\n mutationPayload: parsed.data,\n })\n if (guardResult && !guardResult.ok) {\n return NextResponse.json(guardResult.body, { status: guardResult.status })\n }\n\n action.payload = mergedPayload\n await ctx.em.flush()\n\n if (guardResult?.ok && guardResult.shouldRunAfterSuccess) {\n await runCrudMutationGuardAfterSuccess(ctx.container, {\n tenantId: ctx.tenantId,\n organizationId: ctx.organizationId,\n userId: ctx.userId,\n resourceKind: 'inbox_ops:inbox_proposal_action',\n resourceId: action.id,\n operation: 'update',\n requestMethod: req.method,\n requestHeaders: req.headers,\n metadata: guardResult.metadata ?? null,\n })\n }\n\n const cache = resolveCache(ctx.container)\n await runWithCacheTenant(ctx.tenantId, () => invalidateCountsCache(cache, ctx.tenantId))\n\n try {\n await emitInboxOpsEvent('inbox_ops.action.edited', {\n actionId: action.id,\n proposalId: action.proposalId,\n actionType: action.actionType,\n tenantId: ctx.tenantId,\n organizationId: ctx.organizationId,\n })\n } catch (eventError) {\n logger.error('Failed to emit event', { err: eventError })\n }\n\n return NextResponse.json({ ok: true, action })\n } catch (err) {\n return handleRouteError(err, 'edit action')\n }\n}\n\nexport const openApi: OpenApiRouteDoc = {\n tag: 'InboxOps',\n summary: 'Edit action',\n methods: {\n PATCH: {\n summary: 'Edit action payload before accepting',\n responses: [\n { status: 200, description: 'Action updated' },\n { status: 404, description: 'Action not found' },\n { status: 409, description: 'Action already processed' },\n ],\n },\n },\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -2,8 +2,6 @@ import { NextResponse } from "next/server";
|
|
|
2
2
|
import { ZodError } from "zod";
|
|
3
3
|
import { findAndCountWithDecryption, findWithDecryption } from "@open-mercato/shared/lib/encryption/find";
|
|
4
4
|
import { escapeLikePattern } from "@open-mercato/shared/lib/db/escapeLikePattern";
|
|
5
|
-
import { findEntityIdsBySearchTokens } from "@open-mercato/shared/lib/search/tokenLookup";
|
|
6
|
-
import { E } from "../../../../generated/entities.ids.generated.js";
|
|
7
5
|
import { InboxProposal, InboxEmail, InboxProposalAction, InboxDiscrepancy } from "../../data/entities.js";
|
|
8
6
|
import { proposalListQuerySchema } from "../../data/validators.js";
|
|
9
7
|
import { resolveRequestContext, UnauthorizedError } from "../routeHelpers.js";
|
|
@@ -41,20 +39,7 @@ async function GET(req) {
|
|
|
41
39
|
}
|
|
42
40
|
}
|
|
43
41
|
if (query.search) {
|
|
44
|
-
|
|
45
|
-
{ summary: { $ilike: `%${escapeLikePattern(query.search)}%` } }
|
|
46
|
-
];
|
|
47
|
-
const tokenMatch = await findEntityIdsBySearchTokens({
|
|
48
|
-
db: ctx.em.getKysely(),
|
|
49
|
-
entityType: E.inbox_ops.inbox_proposal,
|
|
50
|
-
query: query.search,
|
|
51
|
-
fields: ["summary"],
|
|
52
|
-
scope: { tenantId: ctx.tenantId, organizationId: ctx.organizationId }
|
|
53
|
-
});
|
|
54
|
-
if (tokenMatch.matched && tokenMatch.ids.length) {
|
|
55
|
-
searchOr.push({ id: { $in: tokenMatch.ids } });
|
|
56
|
-
}
|
|
57
|
-
where.$or = searchOr;
|
|
42
|
+
where.summary = { $ilike: `%${escapeLikePattern(query.search)}%` };
|
|
58
43
|
}
|
|
59
44
|
const offset = (query.page - 1) * query.pageSize;
|
|
60
45
|
const [items, total] = await findAndCountWithDecryption(
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../src/modules/inbox_ops/api/proposals/route.ts"],
|
|
4
|
-
"sourcesContent": ["import { NextResponse } from 'next/server'\nimport { ZodError } from 'zod'\nimport type { OpenApiRouteDoc } from '@open-mercato/shared/lib/openapi'\nimport type { FilterQuery } from '@mikro-orm/postgresql'\nimport { findAndCountWithDecryption, findWithDecryption } from '@open-mercato/shared/lib/encryption/find'\nimport { escapeLikePattern } from '@open-mercato/shared/lib/db/escapeLikePattern'\nimport {
|
|
5
|
-
"mappings": "AAAA,SAAS,oBAAoB;AAC7B,SAAS,gBAAgB;AAGzB,SAAS,4BAA4B,0BAA0B;AAC/D,SAAS,yBAAyB;AAClC,SAAS,
|
|
4
|
+
"sourcesContent": ["import { NextResponse } from 'next/server'\nimport { ZodError } from 'zod'\nimport type { OpenApiRouteDoc } from '@open-mercato/shared/lib/openapi'\nimport type { FilterQuery } from '@mikro-orm/postgresql'\nimport { findAndCountWithDecryption, findWithDecryption } from '@open-mercato/shared/lib/encryption/find'\nimport { escapeLikePattern } from '@open-mercato/shared/lib/db/escapeLikePattern'\nimport { InboxProposal, InboxEmail, InboxProposalAction, InboxDiscrepancy, type InboxProposalCategory } from '../../data/entities'\nimport { proposalListQuerySchema } from '../../data/validators'\nimport { resolveRequestContext, UnauthorizedError } from '../routeHelpers'\nimport { createLogger } from '@open-mercato/shared/lib/logger'\n\nconst logger = createLogger('inbox_ops').child({ component: 'proposals' })\n\nexport const metadata = {\n GET: { requireAuth: true, requireFeatures: ['inbox_ops.proposals.view'] },\n}\n\nexport async function GET(req: Request) {\n try {\n const url = new URL(req.url)\n const query = proposalListQuerySchema.parse({\n status: url.searchParams.get('status') || undefined,\n category: url.searchParams.get('category') || undefined,\n search: url.searchParams.get('search') || undefined,\n page: url.searchParams.get('page') || undefined,\n pageSize: url.searchParams.get('pageSize') || undefined,\n })\n\n const ctx = await resolveRequestContext(req)\n\n const where: FilterQuery<InboxProposal> = {\n organizationId: ctx.organizationId,\n tenantId: ctx.tenantId,\n deletedAt: null,\n isActive: true,\n }\n\n if (query.status) {\n where.status = query.status\n }\n if (query.category) {\n const categories = query.category.split(',').map((c) => c.trim()).filter(Boolean) as InboxProposalCategory[]\n if (categories.length === 1) {\n where.category = categories[0]\n } else if (categories.length > 1) {\n where.category = { $in: categories }\n }\n }\n if (query.search) {\n where.summary = { $ilike: `%${escapeLikePattern(query.search)}%` }\n }\n\n const offset = (query.page - 1) * query.pageSize\n\n const [items, total] = await findAndCountWithDecryption(\n ctx.em,\n InboxProposal,\n where,\n {\n limit: query.pageSize,\n offset,\n orderBy: { createdAt: 'DESC' },\n },\n ctx.scope,\n )\n\n // Enrich proposals with email, action, and discrepancy data\n const proposalIds = items.map((p) => p.id)\n const emailIds = [...new Set(items.map((p) => p.inboxEmailId).filter(Boolean))]\n\n const [emails, allActions, allDiscrepancies] = await Promise.all([\n emailIds.length > 0\n ? findWithDecryption(ctx.em, InboxEmail, { id: { $in: emailIds }, organizationId: ctx.organizationId, tenantId: ctx.tenantId }, {}, ctx.scope)\n : Promise.resolve([] as InboxEmail[]),\n proposalIds.length > 0\n ? findWithDecryption(ctx.em, InboxProposalAction, { proposalId: { $in: proposalIds }, organizationId: ctx.organizationId, tenantId: ctx.tenantId, deletedAt: null }, {}, ctx.scope)\n : Promise.resolve([] as InboxProposalAction[]),\n proposalIds.length > 0\n ? findWithDecryption(ctx.em, InboxDiscrepancy, { proposalId: { $in: proposalIds }, organizationId: ctx.organizationId, tenantId: ctx.tenantId, resolved: false }, {}, ctx.scope)\n : Promise.resolve([] as InboxDiscrepancy[]),\n ])\n\n const emailMap = new Map(emails.map((e) => [e.id, e]))\n\n const enrichedItems = items.map((proposal) => {\n const email = emailMap.get(proposal.inboxEmailId)\n const proposalActions = allActions.filter((a) => a.proposalId === proposal.id)\n const proposalDiscrepancies = allDiscrepancies.filter((d) => d.proposalId === proposal.id)\n\n return {\n ...proposal,\n actionCount: proposalActions.length,\n pendingActionCount: proposalActions.filter((a) => a.status === 'pending').length,\n discrepancyCount: proposalDiscrepancies.length,\n emailSubject: email?.subject || null,\n emailFrom: email?.forwardedByName || email?.forwardedByAddress || null,\n receivedAt: email?.receivedAt || proposal.createdAt,\n }\n })\n\n return NextResponse.json({\n items: enrichedItems,\n total,\n page: query.page,\n pageSize: query.pageSize,\n totalPages: Math.ceil(total / query.pageSize),\n })\n } catch (err) {\n if (err instanceof ZodError) {\n return NextResponse.json({ error: 'Invalid query parameters' }, { status: 400 })\n }\n if (err instanceof UnauthorizedError) {\n return NextResponse.json({ error: 'Unauthorized' }, { status: 401 })\n }\n logger.error('Failed to list proposals', { err })\n return NextResponse.json({ error: 'Failed to list proposals' }, { status: 500 })\n }\n}\n\nexport const openApi: OpenApiRouteDoc = {\n tag: 'InboxOps',\n summary: 'Proposals',\n methods: {\n GET: {\n summary: 'List proposals',\n description: 'List inbox proposals with optional status filter and pagination',\n responses: [\n { status: 200, description: 'Paginated list of proposals' },\n { status: 401, description: 'Unauthorized' },\n ],\n },\n },\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -10,19 +10,11 @@ import { parseInboundEmail } from "../../lib/emailParser.js";
|
|
|
10
10
|
import { checkRateLimit } from "../../lib/rateLimiter.js";
|
|
11
11
|
import { emitInboxOpsEvent } from "../../events.js";
|
|
12
12
|
import { createLogger } from "@open-mercato/shared/lib/logger";
|
|
13
|
-
import {
|
|
14
|
-
readBoundedRequestBody,
|
|
15
|
-
resolveWebhookBodyLimitBytes,
|
|
16
|
-
WebhookBodyTooLargeError
|
|
17
|
-
} from "@open-mercato/shared/lib/webhooks";
|
|
18
13
|
const logger = createLogger("inbox_ops").child({ component: "webhook" });
|
|
19
14
|
const metadata = {
|
|
20
15
|
POST: { requireAuth: false }
|
|
21
16
|
};
|
|
22
|
-
const MAX_PAYLOAD_SIZE =
|
|
23
|
-
process.env.INBOX_OPS_WEBHOOK_MAX_BODY_BYTES ?? process.env.OM_WEBHOOK_MAX_BODY_BYTES,
|
|
24
|
-
2 * 1024 * 1024
|
|
25
|
-
);
|
|
17
|
+
const MAX_PAYLOAD_SIZE = 2 * 1024 * 1024;
|
|
26
18
|
const REPLAY_WINDOW_MS = 5 * 60 * 1e3;
|
|
27
19
|
function isTimestampFresh(timestamp) {
|
|
28
20
|
if (!timestamp) return false;
|
|
@@ -148,15 +140,19 @@ async function POST(req) {
|
|
|
148
140
|
logger.error("Neither INBOX_OPS_WEBHOOK_SECRET nor RESEND_WEBHOOK_SIGNING_SECRET is configured");
|
|
149
141
|
return NextResponse.json({ error: "Service unavailable" }, { status: 503 });
|
|
150
142
|
}
|
|
143
|
+
const contentLength = parseInt(req.headers.get("content-length") || "0", 10);
|
|
144
|
+
if (contentLength > MAX_PAYLOAD_SIZE) {
|
|
145
|
+
return NextResponse.json({ error: "Payload too large" }, { status: 413 });
|
|
146
|
+
}
|
|
151
147
|
let rawBody;
|
|
152
148
|
try {
|
|
153
|
-
rawBody = await
|
|
154
|
-
} catch
|
|
155
|
-
if (error instanceof WebhookBodyTooLargeError) {
|
|
156
|
-
return NextResponse.json({ error: "Payload too large" }, { status: 413 });
|
|
157
|
-
}
|
|
149
|
+
rawBody = await req.text();
|
|
150
|
+
} catch {
|
|
158
151
|
return NextResponse.json({ error: "Bad request" }, { status: 400 });
|
|
159
152
|
}
|
|
153
|
+
if (rawBody.length > MAX_PAYLOAD_SIZE) {
|
|
154
|
+
return NextResponse.json({ error: "Payload too large" }, { status: 413 });
|
|
155
|
+
}
|
|
160
156
|
const verified = await verifyAndParse(req, rawBody);
|
|
161
157
|
if (!verified.ok) {
|
|
162
158
|
return verified.response;
|