@open-mercato/core 0.6.8-develop.6993.1.3fc50f3409 → 0.6.8-develop.7000.1.0ae682bad1
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/dist/generated/entities/sync_run/index.js +2 -0
- package/dist/generated/entities/sync_run/index.js.map +2 -2
- package/dist/generated/entities/warranty_claim/index.js +105 -0
- package/dist/generated/entities/warranty_claim/index.js.map +7 -0
- package/dist/generated/entities/warranty_claim_event/index.js +25 -0
- package/dist/generated/entities/warranty_claim_event/index.js.map +7 -0
- package/dist/generated/entities/warranty_claim_line/index.js +77 -0
- package/dist/generated/entities/warranty_claim_line/index.js.map +7 -0
- package/dist/generated/entities/warranty_claim_registration/index.js +43 -0
- package/dist/generated/entities/warranty_claim_registration/index.js.map +7 -0
- package/dist/generated/entities/warranty_claim_sequence/index.js +17 -0
- package/dist/generated/entities/warranty_claim_sequence/index.js.map +7 -0
- package/dist/generated/entities/warranty_claim_settings/index.js +43 -0
- package/dist/generated/entities/warranty_claim_settings/index.js.map +7 -0
- package/dist/generated/entities/warranty_claim_sla_signal/index.js +25 -0
- package/dist/generated/entities/warranty_claim_sla_signal/index.js.map +7 -0
- package/dist/generated/entities/warranty_troubleshooting_guide/index.js +25 -0
- package/dist/generated/entities/warranty_troubleshooting_guide/index.js.map +7 -0
- package/dist/generated/entities/warranty_vendor_policy/index.js +31 -0
- package/dist/generated/entities/warranty_vendor_policy/index.js.map +7 -0
- package/dist/generated/entities.ids.generated.js +12 -0
- package/dist/generated/entities.ids.generated.js.map +2 -2
- package/dist/generated/entity-fields-registry.js +201 -0
- package/dist/generated/entity-fields-registry.js.map +2 -2
- package/dist/helpers/integration/api.js +3 -2
- package/dist/helpers/integration/api.js.map +2 -2
- package/dist/helpers/integration/salesFixtures.js +13 -6
- package/dist/helpers/integration/salesFixtures.js.map +2 -2
- package/dist/modules/attachments/di.js +18 -0
- package/dist/modules/attachments/di.js.map +2 -2
- package/dist/modules/attachments/fields/attachment.js +186 -26
- package/dist/modules/attachments/fields/attachment.js.map +2 -2
- package/dist/modules/attachments/lib/scoped-upload-service.js +202 -0
- package/dist/modules/attachments/lib/scoped-upload-service.js.map +7 -0
- package/dist/modules/attachments/lib/target-access-service.js +39 -0
- package/dist/modules/attachments/lib/target-access-service.js.map +7 -0
- package/dist/modules/auth/api/sidebar/preferences/route.js +2 -2
- package/dist/modules/auth/api/sidebar/preferences/route.js.map +1 -1
- package/dist/modules/auth/lib/backendChrome.js +3 -3
- package/dist/modules/auth/lib/backendChrome.js.map +1 -1
- package/dist/modules/auth/services/sidebarPreferencesService.js +7 -2
- package/dist/modules/auth/services/sidebarPreferencesService.js.map +2 -2
- package/dist/modules/customers/api/companies/route.js +1 -0
- package/dist/modules/customers/api/companies/route.js.map +2 -2
- package/dist/modules/customers/backend/customers/companies-v2/[id]/page.js +2 -2
- package/dist/modules/customers/backend/customers/companies-v2/[id]/page.js.map +2 -2
- package/dist/modules/customers/backend/customers/people-v2/[id]/page.js +2 -2
- package/dist/modules/customers/backend/customers/people-v2/[id]/page.js.map +2 -2
- package/dist/modules/customers/components/detail/assignableStaff.js +6 -69
- package/dist/modules/customers/components/detail/assignableStaff.js.map +2 -2
- package/dist/modules/customers/lib/assignableStaff.js +76 -0
- package/dist/modules/customers/lib/assignableStaff.js.map +7 -0
- package/dist/modules/data_sync/api/options.js +1 -0
- package/dist/modules/data_sync/api/options.js.map +2 -2
- package/dist/modules/data_sync/api/run.js +15 -1
- package/dist/modules/data_sync/api/run.js.map +2 -2
- package/dist/modules/data_sync/api/runs/[id]/retry.js +23 -1
- package/dist/modules/data_sync/api/runs/[id]/retry.js.map +2 -2
- package/dist/modules/data_sync/api/runs/[id]/route.js +1 -0
- package/dist/modules/data_sync/api/runs/[id]/route.js.map +2 -2
- package/dist/modules/data_sync/backend/data-sync/page.js +60 -17
- package/dist/modules/data_sync/backend/data-sync/page.js.map +2 -2
- package/dist/modules/data_sync/backend/data-sync/runs/[id]/page.js +34 -2
- package/dist/modules/data_sync/backend/data-sync/runs/[id]/page.js.map +2 -2
- package/dist/modules/data_sync/components/IntegrationScheduleTab.js +21 -15
- package/dist/modules/data_sync/components/IntegrationScheduleTab.js.map +2 -2
- package/dist/modules/data_sync/components/RunParameterFields.js +135 -0
- package/dist/modules/data_sync/components/RunParameterFields.js.map +7 -0
- package/dist/modules/data_sync/data/entities.js +3 -0
- package/dist/modules/data_sync/data/entities.js.map +2 -2
- package/dist/modules/data_sync/data/validators.js +4 -1
- package/dist/modules/data_sync/data/validators.js.map +2 -2
- package/dist/modules/data_sync/lib/batch-stream.js +56 -0
- package/dist/modules/data_sync/lib/batch-stream.js.map +7 -0
- package/dist/modules/data_sync/lib/run-parameters.js +108 -0
- package/dist/modules/data_sync/lib/run-parameters.js.map +7 -0
- package/dist/modules/data_sync/lib/start-run.js +1 -0
- package/dist/modules/data_sync/lib/start-run.js.map +2 -2
- package/dist/modules/data_sync/lib/sync-engine.js +165 -101
- package/dist/modules/data_sync/lib/sync-engine.js.map +2 -2
- package/dist/modules/data_sync/lib/sync-run-service.js +1 -0
- package/dist/modules/data_sync/lib/sync-run-service.js.map +2 -2
- package/dist/modules/data_sync/migrations/Migration20260810120000.js +13 -0
- package/dist/modules/data_sync/migrations/Migration20260810120000.js.map +7 -0
- package/dist/modules/data_sync/workers/sync-scheduled.js +23 -2
- package/dist/modules/data_sync/workers/sync-scheduled.js.map +2 -2
- package/dist/modules/inbox_ops/api/emails/[id]/reprocess/route.js +4 -0
- package/dist/modules/inbox_ops/api/emails/[id]/reprocess/route.js.map +2 -2
- package/dist/modules/inbox_ops/api/extract/route.js +4 -0
- package/dist/modules/inbox_ops/api/extract/route.js.map +2 -2
- package/dist/modules/inbox_ops/api/webhook/inbound.js +4 -0
- package/dist/modules/inbox_ops/api/webhook/inbound.js.map +2 -2
- package/dist/modules/query_index/di.js +125 -48
- package/dist/modules/query_index/di.js.map +2 -2
- package/dist/modules/sales/commands/documents.js +34 -13
- package/dist/modules/sales/commands/documents.js.map +2 -2
- package/dist/modules/warranty_claims/acl.js +75 -0
- package/dist/modules/warranty_claims/acl.js.map +7 -0
- package/dist/modules/warranty_claims/ai-agents.js +161 -0
- package/dist/modules/warranty_claims/ai-agents.js.map +7 -0
- package/dist/modules/warranty_claims/ai-tools.js +591 -0
- package/dist/modules/warranty_claims/ai-tools.js.map +7 -0
- package/dist/modules/warranty_claims/api/ai/assess/route.js +304 -0
- package/dist/modules/warranty_claims/api/ai/assess/route.js.map +7 -0
- package/dist/modules/warranty_claims/api/ai/draft-reply/route.js +127 -0
- package/dist/modules/warranty_claims/api/ai/draft-reply/route.js.map +7 -0
- package/dist/modules/warranty_claims/api/ai/suggest/route.js +177 -0
- package/dist/modules/warranty_claims/api/ai/suggest/route.js.map +7 -0
- package/dist/modules/warranty_claims/api/assign/route.js +124 -0
- package/dist/modules/warranty_claims/api/assign/route.js.map +7 -0
- package/dist/modules/warranty_claims/api/assignees/route.js +97 -0
- package/dist/modules/warranty_claims/api/assignees/route.js.map +7 -0
- package/dist/modules/warranty_claims/api/credit-memo/route.js +152 -0
- package/dist/modules/warranty_claims/api/credit-memo/route.js.map +7 -0
- package/dist/modules/warranty_claims/api/entitlement/route.js +145 -0
- package/dist/modules/warranty_claims/api/entitlement/route.js.map +7 -0
- package/dist/modules/warranty_claims/api/events/route.js +199 -0
- package/dist/modules/warranty_claims/api/events/route.js.map +7 -0
- package/dist/modules/warranty_claims/api/external/claims/route.js +446 -0
- package/dist/modules/warranty_claims/api/external/claims/route.js.map +7 -0
- package/dist/modules/warranty_claims/api/lines/route.js +258 -0
- package/dist/modules/warranty_claims/api/lines/route.js.map +7 -0
- package/dist/modules/warranty_claims/api/openapi.js +27 -0
- package/dist/modules/warranty_claims/api/openapi.js.map +7 -0
- package/dist/modules/warranty_claims/api/portal/attachments/route.js +490 -0
- package/dist/modules/warranty_claims/api/portal/attachments/route.js.map +7 -0
- package/dist/modules/warranty_claims/api/portal/claims/[id]/route.js +178 -0
- package/dist/modules/warranty_claims/api/portal/claims/[id]/route.js.map +7 -0
- package/dist/modules/warranty_claims/api/portal/claims/[id]/shared.js +101 -0
- package/dist/modules/warranty_claims/api/portal/claims/[id]/shared.js.map +7 -0
- package/dist/modules/warranty_claims/api/portal/claims/[id]/submit/route.js +78 -0
- package/dist/modules/warranty_claims/api/portal/claims/[id]/submit/route.js.map +7 -0
- package/dist/modules/warranty_claims/api/portal/claims/[id]/withdraw/route.js +81 -0
- package/dist/modules/warranty_claims/api/portal/claims/[id]/withdraw/route.js.map +7 -0
- package/dist/modules/warranty_claims/api/portal/claims/route.js +462 -0
- package/dist/modules/warranty_claims/api/portal/claims/route.js.map +7 -0
- package/dist/modules/warranty_claims/api/portal/events/route.js +228 -0
- package/dist/modules/warranty_claims/api/portal/events/route.js.map +7 -0
- package/dist/modules/warranty_claims/api/portal/options/route.js +91 -0
- package/dist/modules/warranty_claims/api/portal/options/route.js.map +7 -0
- package/dist/modules/warranty_claims/api/portal/orders/lines/route.js +172 -0
- package/dist/modules/warranty_claims/api/portal/orders/lines/route.js.map +7 -0
- package/dist/modules/warranty_claims/api/portal/orders/route.js +151 -0
- package/dist/modules/warranty_claims/api/portal/orders/route.js.map +7 -0
- package/dist/modules/warranty_claims/api/portal/troubleshooting/route.js +121 -0
- package/dist/modules/warranty_claims/api/portal/troubleshooting/route.js.map +7 -0
- package/dist/modules/warranty_claims/api/receiving/route.js +176 -0
- package/dist/modules/warranty_claims/api/receiving/route.js.map +7 -0
- package/dist/modules/warranty_claims/api/registrations/route.js +382 -0
- package/dist/modules/warranty_claims/api/registrations/route.js.map +7 -0
- package/dist/modules/warranty_claims/api/replacement-order/route.js +150 -0
- package/dist/modules/warranty_claims/api/replacement-order/route.js.map +7 -0
- package/dist/modules/warranty_claims/api/return-label/route.js +235 -0
- package/dist/modules/warranty_claims/api/return-label/route.js.map +7 -0
- package/dist/modules/warranty_claims/api/risk/route.js +101 -0
- package/dist/modules/warranty_claims/api/risk/route.js.map +7 -0
- package/dist/modules/warranty_claims/api/route.js +482 -0
- package/dist/modules/warranty_claims/api/route.js.map +7 -0
- package/dist/modules/warranty_claims/api/sales-return/route.js +151 -0
- package/dist/modules/warranty_claims/api/sales-return/route.js.map +7 -0
- package/dist/modules/warranty_claims/api/settings-general/route.js +195 -0
- package/dist/modules/warranty_claims/api/settings-general/route.js.map +7 -0
- package/dist/modules/warranty_claims/api/stats/route.js +199 -0
- package/dist/modules/warranty_claims/api/stats/route.js.map +7 -0
- package/dist/modules/warranty_claims/api/submit/route.js +120 -0
- package/dist/modules/warranty_claims/api/submit/route.js.map +7 -0
- package/dist/modules/warranty_claims/api/transition/route.js +126 -0
- package/dist/modules/warranty_claims/api/transition/route.js.map +7 -0
- package/dist/modules/warranty_claims/api/troubleshooting-guides/route.js +261 -0
- package/dist/modules/warranty_claims/api/troubleshooting-guides/route.js.map +7 -0
- package/dist/modules/warranty_claims/api/vendor-policies/route.js +311 -0
- package/dist/modules/warranty_claims/api/vendor-policies/route.js.map +7 -0
- package/dist/modules/warranty_claims/api/vendor-recovery/route.js +130 -0
- package/dist/modules/warranty_claims/api/vendor-recovery/route.js.map +7 -0
- package/dist/modules/warranty_claims/api/vendor-recovery-suggestions/route.js +153 -0
- package/dist/modules/warranty_claims/api/vendor-recovery-suggestions/route.js.map +7 -0
- package/dist/modules/warranty_claims/backend/components/AiAssessButtons.js +268 -0
- package/dist/modules/warranty_claims/backend/components/AiAssessButtons.js.map +7 -0
- package/dist/modules/warranty_claims/backend/components/ClaimStageProgress.js +54 -0
- package/dist/modules/warranty_claims/backend/components/ClaimStageProgress.js.map +7 -0
- package/dist/modules/warranty_claims/backend/components/ClaimStatusBadge.js +87 -0
- package/dist/modules/warranty_claims/backend/components/ClaimStatusBadge.js.map +7 -0
- package/dist/modules/warranty_claims/backend/components/ClaimsKpiStrip.js +120 -0
- package/dist/modules/warranty_claims/backend/components/ClaimsKpiStrip.js.map +7 -0
- package/dist/modules/warranty_claims/backend/components/EntitlementLookupBadge.js +135 -0
- package/dist/modules/warranty_claims/backend/components/EntitlementLookupBadge.js.map +7 -0
- package/dist/modules/warranty_claims/backend/components/ReceivingPanel.js +218 -0
- package/dist/modules/warranty_claims/backend/components/ReceivingPanel.js.map +7 -0
- package/dist/modules/warranty_claims/backend/components/ReturnLabelPanel.js +231 -0
- package/dist/modules/warranty_claims/backend/components/ReturnLabelPanel.js.map +7 -0
- package/dist/modules/warranty_claims/backend/components/TroubleshootingWalker.js +82 -0
- package/dist/modules/warranty_claims/backend/components/TroubleshootingWalker.js.map +7 -0
- package/dist/modules/warranty_claims/backend/components/VendorRecoverySuggestionsPanel.js +136 -0
- package/dist/modules/warranty_claims/backend/components/VendorRecoverySuggestionsPanel.js.map +7 -0
- package/dist/modules/warranty_claims/backend/components/WarrantyWorkspace.js +41 -0
- package/dist/modules/warranty_claims/backend/components/WarrantyWorkspace.js.map +7 -0
- package/dist/modules/warranty_claims/backend/components/claimReasonOptions.js +45 -0
- package/dist/modules/warranty_claims/backend/components/claimReasonOptions.js.map +7 -0
- package/dist/modules/warranty_claims/backend/components/claimSla.js +92 -0
- package/dist/modules/warranty_claims/backend/components/claimSla.js.map +7 -0
- package/dist/modules/warranty_claims/backend/components/orderLookup.js +81 -0
- package/dist/modules/warranty_claims/backend/components/orderLookup.js.map +7 -0
- package/dist/modules/warranty_claims/backend/components/productLookup.js +317 -0
- package/dist/modules/warranty_claims/backend/components/productLookup.js.map +7 -0
- package/dist/modules/warranty_claims/backend/components/useUserDisplayNames.js +61 -0
- package/dist/modules/warranty_claims/backend/components/useUserDisplayNames.js.map +7 -0
- package/dist/modules/warranty_claims/backend/page.js +1088 -0
- package/dist/modules/warranty_claims/backend/page.js.map +7 -0
- package/dist/modules/warranty_claims/backend/page.meta.js +16 -0
- package/dist/modules/warranty_claims/backend/page.meta.js.map +7 -0
- package/dist/modules/warranty_claims/backend/warranty_claims/[id]/edit/page.js +427 -0
- package/dist/modules/warranty_claims/backend/warranty_claims/[id]/edit/page.js.map +7 -0
- package/dist/modules/warranty_claims/backend/warranty_claims/[id]/edit/page.meta.js +16 -0
- package/dist/modules/warranty_claims/backend/warranty_claims/[id]/edit/page.meta.js.map +7 -0
- package/dist/modules/warranty_claims/backend/warranty_claims/[id]/page.js +2101 -0
- package/dist/modules/warranty_claims/backend/warranty_claims/[id]/page.js.map +7 -0
- package/dist/modules/warranty_claims/backend/warranty_claims/[id]/page.meta.js +16 -0
- package/dist/modules/warranty_claims/backend/warranty_claims/[id]/page.meta.js.map +7 -0
- package/dist/modules/warranty_claims/backend/warranty_claims/create/page.js +1249 -0
- package/dist/modules/warranty_claims/backend/warranty_claims/create/page.js.map +7 -0
- package/dist/modules/warranty_claims/backend/warranty_claims/create/page.meta.js +16 -0
- package/dist/modules/warranty_claims/backend/warranty_claims/create/page.meta.js.map +7 -0
- package/dist/modules/warranty_claims/backend/warranty_claims/registrations/[id]/edit/page.js +110 -0
- package/dist/modules/warranty_claims/backend/warranty_claims/registrations/[id]/edit/page.js.map +7 -0
- package/dist/modules/warranty_claims/backend/warranty_claims/registrations/[id]/edit/page.meta.js +17 -0
- package/dist/modules/warranty_claims/backend/warranty_claims/registrations/[id]/edit/page.meta.js.map +7 -0
- package/dist/modules/warranty_claims/backend/warranty_claims/registrations/create/page.js +49 -0
- package/dist/modules/warranty_claims/backend/warranty_claims/registrations/create/page.js.map +7 -0
- package/dist/modules/warranty_claims/backend/warranty_claims/registrations/create/page.meta.js +17 -0
- package/dist/modules/warranty_claims/backend/warranty_claims/registrations/create/page.meta.js.map +7 -0
- package/dist/modules/warranty_claims/backend/warranty_claims/registrations/page.js +485 -0
- package/dist/modules/warranty_claims/backend/warranty_claims/registrations/page.js.map +7 -0
- package/dist/modules/warranty_claims/backend/warranty_claims/registrations/page.meta.js +19 -0
- package/dist/modules/warranty_claims/backend/warranty_claims/registrations/page.meta.js.map +7 -0
- package/dist/modules/warranty_claims/backend/warranty_claims/registrations/registrationForm.js +253 -0
- package/dist/modules/warranty_claims/backend/warranty_claims/registrations/registrationForm.js.map +7 -0
- package/dist/modules/warranty_claims/backend/warranty_claims/settings/page.js +1565 -0
- package/dist/modules/warranty_claims/backend/warranty_claims/settings/page.js.map +7 -0
- package/dist/modules/warranty_claims/backend/warranty_claims/settings/page.meta.js +19 -0
- package/dist/modules/warranty_claims/backend/warranty_claims/settings/page.meta.js.map +7 -0
- package/dist/modules/warranty_claims/backend/warranty_claims/troubleshooting-guides/TroubleshootingTreeBuilder.js +472 -0
- package/dist/modules/warranty_claims/backend/warranty_claims/troubleshooting-guides/TroubleshootingTreeBuilder.js.map +7 -0
- package/dist/modules/warranty_claims/backend/warranty_claims/troubleshooting-guides/[id]/edit/page.js +115 -0
- package/dist/modules/warranty_claims/backend/warranty_claims/troubleshooting-guides/[id]/edit/page.js.map +7 -0
- package/dist/modules/warranty_claims/backend/warranty_claims/troubleshooting-guides/[id]/edit/page.meta.js +19 -0
- package/dist/modules/warranty_claims/backend/warranty_claims/troubleshooting-guides/[id]/edit/page.meta.js.map +7 -0
- package/dist/modules/warranty_claims/backend/warranty_claims/troubleshooting-guides/create/page.js +54 -0
- package/dist/modules/warranty_claims/backend/warranty_claims/troubleshooting-guides/create/page.js.map +7 -0
- package/dist/modules/warranty_claims/backend/warranty_claims/troubleshooting-guides/create/page.meta.js +19 -0
- package/dist/modules/warranty_claims/backend/warranty_claims/troubleshooting-guides/create/page.meta.js.map +7 -0
- package/dist/modules/warranty_claims/backend/warranty_claims/troubleshooting-guides/page.js +414 -0
- package/dist/modules/warranty_claims/backend/warranty_claims/troubleshooting-guides/page.js.map +7 -0
- package/dist/modules/warranty_claims/backend/warranty_claims/troubleshooting-guides/page.meta.js +21 -0
- package/dist/modules/warranty_claims/backend/warranty_claims/troubleshooting-guides/page.meta.js.map +7 -0
- package/dist/modules/warranty_claims/backend/warranty_claims/troubleshooting-guides/troubleshootingGuideForm.js +171 -0
- package/dist/modules/warranty_claims/backend/warranty_claims/troubleshooting-guides/troubleshootingGuideForm.js.map +7 -0
- package/dist/modules/warranty_claims/backend/warranty_claims/vendor-policies/[id]/edit/page.js +111 -0
- package/dist/modules/warranty_claims/backend/warranty_claims/vendor-policies/[id]/edit/page.js.map +7 -0
- package/dist/modules/warranty_claims/backend/warranty_claims/vendor-policies/[id]/edit/page.meta.js +19 -0
- package/dist/modules/warranty_claims/backend/warranty_claims/vendor-policies/[id]/edit/page.meta.js.map +7 -0
- package/dist/modules/warranty_claims/backend/warranty_claims/vendor-policies/create/page.js +48 -0
- package/dist/modules/warranty_claims/backend/warranty_claims/vendor-policies/create/page.js.map +7 -0
- package/dist/modules/warranty_claims/backend/warranty_claims/vendor-policies/create/page.meta.js +19 -0
- package/dist/modules/warranty_claims/backend/warranty_claims/vendor-policies/create/page.meta.js.map +7 -0
- package/dist/modules/warranty_claims/backend/warranty_claims/vendor-policies/page.js +429 -0
- package/dist/modules/warranty_claims/backend/warranty_claims/vendor-policies/page.js.map +7 -0
- package/dist/modules/warranty_claims/backend/warranty_claims/vendor-policies/page.meta.js +21 -0
- package/dist/modules/warranty_claims/backend/warranty_claims/vendor-policies/page.meta.js.map +7 -0
- package/dist/modules/warranty_claims/backend/warranty_claims/vendor-policies/vendorPolicyForm.js +182 -0
- package/dist/modules/warranty_claims/backend/warranty_claims/vendor-policies/vendorPolicyForm.js.map +7 -0
- package/dist/modules/warranty_claims/ce.js +48 -0
- package/dist/modules/warranty_claims/ce.js.map +7 -0
- package/dist/modules/warranty_claims/commands/claim-lines.js +911 -0
- package/dist/modules/warranty_claims/commands/claim-lines.js.map +7 -0
- package/dist/modules/warranty_claims/commands/claims.js +2577 -0
- package/dist/modules/warranty_claims/commands/claims.js.map +7 -0
- package/dist/modules/warranty_claims/commands/index.js +4 -0
- package/dist/modules/warranty_claims/commands/index.js.map +7 -0
- package/dist/modules/warranty_claims/commands/settings.js +169 -0
- package/dist/modules/warranty_claims/commands/settings.js.map +7 -0
- package/dist/modules/warranty_claims/commands/shared.js +162 -0
- package/dist/modules/warranty_claims/commands/shared.js.map +7 -0
- package/dist/modules/warranty_claims/data/constants.js +35 -0
- package/dist/modules/warranty_claims/data/constants.js.map +7 -0
- package/dist/modules/warranty_claims/data/enrichers.js +97 -0
- package/dist/modules/warranty_claims/data/enrichers.js.map +7 -0
- package/dist/modules/warranty_claims/data/entities.js +731 -0
- package/dist/modules/warranty_claims/data/entities.js.map +7 -0
- package/dist/modules/warranty_claims/data/validators.js +488 -0
- package/dist/modules/warranty_claims/data/validators.js.map +7 -0
- package/dist/modules/warranty_claims/di.js +29 -0
- package/dist/modules/warranty_claims/di.js.map +7 -0
- package/dist/modules/warranty_claims/encryption.js +28 -0
- package/dist/modules/warranty_claims/encryption.js.map +7 -0
- package/dist/modules/warranty_claims/events.js +81 -0
- package/dist/modules/warranty_claims/events.js.map +7 -0
- package/dist/modules/warranty_claims/extension-points.js +19 -0
- package/dist/modules/warranty_claims/extension-points.js.map +7 -0
- package/dist/modules/warranty_claims/frontend/[orgSlug]/portal/claims/[id]/page.js +825 -0
- package/dist/modules/warranty_claims/frontend/[orgSlug]/portal/claims/[id]/page.js.map +7 -0
- package/dist/modules/warranty_claims/frontend/[orgSlug]/portal/claims/[id]/page.meta.js +11 -0
- package/dist/modules/warranty_claims/frontend/[orgSlug]/portal/claims/[id]/page.meta.js.map +7 -0
- package/dist/modules/warranty_claims/frontend/[orgSlug]/portal/claims/new/page.js +1139 -0
- package/dist/modules/warranty_claims/frontend/[orgSlug]/portal/claims/new/page.js.map +7 -0
- package/dist/modules/warranty_claims/frontend/[orgSlug]/portal/claims/new/page.meta.js +11 -0
- package/dist/modules/warranty_claims/frontend/[orgSlug]/portal/claims/new/page.meta.js.map +7 -0
- package/dist/modules/warranty_claims/frontend/[orgSlug]/portal/claims/page.js +253 -0
- package/dist/modules/warranty_claims/frontend/[orgSlug]/portal/claims/page.js.map +7 -0
- package/dist/modules/warranty_claims/frontend/[orgSlug]/portal/claims/page.meta.js +18 -0
- package/dist/modules/warranty_claims/frontend/[orgSlug]/portal/claims/page.meta.js.map +7 -0
- package/dist/modules/warranty_claims/index.js +15 -0
- package/dist/modules/warranty_claims/index.js.map +7 -0
- package/dist/modules/warranty_claims/lib/aiAssist.js +496 -0
- package/dist/modules/warranty_claims/lib/aiAssist.js.map +7 -0
- package/dist/modules/warranty_claims/lib/apiIdsFilter.js +11 -0
- package/dist/modules/warranty_claims/lib/apiIdsFilter.js.map +7 -0
- package/dist/modules/warranty_claims/lib/assigneeNames.js +153 -0
- package/dist/modules/warranty_claims/lib/assigneeNames.js.map +7 -0
- package/dist/modules/warranty_claims/lib/attachmentVisibility.js +9 -0
- package/dist/modules/warranty_claims/lib/attachmentVisibility.js.map +7 -0
- package/dist/modules/warranty_claims/lib/bulkFeedback.js +8 -0
- package/dist/modules/warranty_claims/lib/bulkFeedback.js.map +7 -0
- package/dist/modules/warranty_claims/lib/businessHours.js +250 -0
- package/dist/modules/warranty_claims/lib/businessHours.js.map +7 -0
- package/dist/modules/warranty_claims/lib/businessHoursForm.js +146 -0
- package/dist/modules/warranty_claims/lib/businessHoursForm.js.map +7 -0
- package/dist/modules/warranty_claims/lib/claimTypeConfig.js +39 -0
- package/dist/modules/warranty_claims/lib/claimTypeConfig.js.map +7 -0
- package/dist/modules/warranty_claims/lib/decryptionSafety.js +17 -0
- package/dist/modules/warranty_claims/lib/decryptionSafety.js.map +7 -0
- package/dist/modules/warranty_claims/lib/deskFilters.js +88 -0
- package/dist/modules/warranty_claims/lib/deskFilters.js.map +7 -0
- package/dist/modules/warranty_claims/lib/dictionaries.js +157 -0
- package/dist/modules/warranty_claims/lib/dictionaries.js.map +7 -0
- package/dist/modules/warranty_claims/lib/dictionaryLabels.js +12 -0
- package/dist/modules/warranty_claims/lib/dictionaryLabels.js.map +7 -0
- package/dist/modules/warranty_claims/lib/emailIntake.js +87 -0
- package/dist/modules/warranty_claims/lib/emailIntake.js.map +7 -0
- package/dist/modules/warranty_claims/lib/escalation.js +58 -0
- package/dist/modules/warranty_claims/lib/escalation.js.map +7 -0
- package/dist/modules/warranty_claims/lib/externalIntake.js +233 -0
- package/dist/modules/warranty_claims/lib/externalIntake.js.map +7 -0
- package/dist/modules/warranty_claims/lib/grading.js +21 -0
- package/dist/modules/warranty_claims/lib/grading.js.map +7 -0
- package/dist/modules/warranty_claims/lib/listSegments.js +18 -0
- package/dist/modules/warranty_claims/lib/listSegments.js.map +7 -0
- package/dist/modules/warranty_claims/lib/orderOwnership.js +25 -0
- package/dist/modules/warranty_claims/lib/orderOwnership.js.map +7 -0
- package/dist/modules/warranty_claims/lib/portalAttachmentUpload.js +11 -0
- package/dist/modules/warranty_claims/lib/portalAttachmentUpload.js.map +7 -0
- package/dist/modules/warranty_claims/lib/portalAttachmentValidation.js +108 -0
- package/dist/modules/warranty_claims/lib/portalAttachmentValidation.js.map +7 -0
- package/dist/modules/warranty_claims/lib/portalClaimAccess.js +26 -0
- package/dist/modules/warranty_claims/lib/portalClaimAccess.js.map +7 -0
- package/dist/modules/warranty_claims/lib/quantity.js +19 -0
- package/dist/modules/warranty_claims/lib/quantity.js.map +7 -0
- package/dist/modules/warranty_claims/lib/risk.js +204 -0
- package/dist/modules/warranty_claims/lib/risk.js.map +7 -0
- package/dist/modules/warranty_claims/lib/settings.js +55 -0
- package/dist/modules/warranty_claims/lib/settings.js.map +7 -0
- package/dist/modules/warranty_claims/lib/stateMachine.js +88 -0
- package/dist/modules/warranty_claims/lib/stateMachine.js.map +7 -0
- package/dist/modules/warranty_claims/lib/timelineFilters.js +16 -0
- package/dist/modules/warranty_claims/lib/timelineFilters.js.map +7 -0
- package/dist/modules/warranty_claims/lib/triage.js +241 -0
- package/dist/modules/warranty_claims/lib/triage.js.map +7 -0
- package/dist/modules/warranty_claims/lib/troubleshooting.js +111 -0
- package/dist/modules/warranty_claims/lib/troubleshooting.js.map +7 -0
- package/dist/modules/warranty_claims/lib/tryResolve.js +11 -0
- package/dist/modules/warranty_claims/lib/tryResolve.js.map +7 -0
- package/dist/modules/warranty_claims/lib/vendorPolicyRecovery.js +101 -0
- package/dist/modules/warranty_claims/lib/vendorPolicyRecovery.js.map +7 -0
- package/dist/modules/warranty_claims/lib/warrantyPreview.js +18 -0
- package/dist/modules/warranty_claims/lib/warrantyPreview.js.map +7 -0
- package/dist/modules/warranty_claims/migrations/Migration20260703191537_warranty_claims.js +32 -0
- package/dist/modules/warranty_claims/migrations/Migration20260703191537_warranty_claims.js.map +7 -0
- package/dist/modules/warranty_claims/migrations/Migration20260704115605_warranty_claims.js +16 -0
- package/dist/modules/warranty_claims/migrations/Migration20260704115605_warranty_claims.js.map +7 -0
- package/dist/modules/warranty_claims/migrations/Migration20260704230000_warranty_claims.js +17 -0
- package/dist/modules/warranty_claims/migrations/Migration20260704230000_warranty_claims.js.map +7 -0
- package/dist/modules/warranty_claims/migrations/Migration20260705121601_warranty_claims.js +29 -0
- package/dist/modules/warranty_claims/migrations/Migration20260705121601_warranty_claims.js.map +7 -0
- package/dist/modules/warranty_claims/migrations/Migration20260709120000_warranty_claims.js +25 -0
- package/dist/modules/warranty_claims/migrations/Migration20260709120000_warranty_claims.js.map +7 -0
- package/dist/modules/warranty_claims/migrations/Migration20260710023607_warranty_claims.js +13 -0
- package/dist/modules/warranty_claims/migrations/Migration20260710023607_warranty_claims.js.map +7 -0
- package/dist/modules/warranty_claims/migrations/Migration20260716203936_warranty_claims.js +15 -0
- package/dist/modules/warranty_claims/migrations/Migration20260716203936_warranty_claims.js.map +7 -0
- package/dist/modules/warranty_claims/migrations/Migration20260717150000_warranty_claims.js +13 -0
- package/dist/modules/warranty_claims/migrations/Migration20260717150000_warranty_claims.js.map +7 -0
- package/dist/modules/warranty_claims/migrations/Migration20260719120000_warranty_claims.js +13 -0
- package/dist/modules/warranty_claims/migrations/Migration20260719120000_warranty_claims.js.map +7 -0
- package/dist/modules/warranty_claims/migrations/Migration20260813103053_warranty_claims.js +12 -0
- package/dist/modules/warranty_claims/migrations/Migration20260813103053_warranty_claims.js.map +7 -0
- package/dist/modules/warranty_claims/notifications.client.js +67 -0
- package/dist/modules/warranty_claims/notifications.client.js.map +7 -0
- package/dist/modules/warranty_claims/notifications.js +103 -0
- package/dist/modules/warranty_claims/notifications.js.map +7 -0
- package/dist/modules/warranty_claims/search.js +174 -0
- package/dist/modules/warranty_claims/search.js.map +7 -0
- package/dist/modules/warranty_claims/services/adjudicationEvaluator.js +202 -0
- package/dist/modules/warranty_claims/services/adjudicationEvaluator.js.map +7 -0
- package/dist/modules/warranty_claims/services/claimNumberGenerator.js +58 -0
- package/dist/modules/warranty_claims/services/claimNumberGenerator.js.map +7 -0
- package/dist/modules/warranty_claims/services/entitlementResolver.js +69 -0
- package/dist/modules/warranty_claims/services/entitlementResolver.js.map +7 -0
- package/dist/modules/warranty_claims/services/returnLabelProvider.js +14 -0
- package/dist/modules/warranty_claims/services/returnLabelProvider.js.map +7 -0
- package/dist/modules/warranty_claims/setup.js +121 -0
- package/dist/modules/warranty_claims/setup.js.map +7 -0
- package/dist/modules/warranty_claims/subscribers/auto-vendor-recovery.js +119 -0
- package/dist/modules/warranty_claims/subscribers/auto-vendor-recovery.js.map +7 -0
- package/dist/modules/warranty_claims/subscribers/claim-assigned-notification.js +47 -0
- package/dist/modules/warranty_claims/subscribers/claim-assigned-notification.js.map +7 -0
- package/dist/modules/warranty_claims/subscribers/claim-customer-reply-notification.js +60 -0
- package/dist/modules/warranty_claims/subscribers/claim-customer-reply-notification.js.map +7 -0
- package/dist/modules/warranty_claims/subscribers/claim-status-notification.js +83 -0
- package/dist/modules/warranty_claims/subscribers/claim-status-notification.js.map +7 -0
- package/dist/modules/warranty_claims/subscribers/claim-submitted-notification.js +46 -0
- package/dist/modules/warranty_claims/subscribers/claim-submitted-notification.js.map +7 -0
- package/dist/modules/warranty_claims/subscribers/email-to-claim.js +135 -0
- package/dist/modules/warranty_claims/subscribers/email-to-claim.js.map +7 -0
- package/dist/modules/warranty_claims/subscribers/return-shipment-tracking.js +164 -0
- package/dist/modules/warranty_claims/subscribers/return-shipment-tracking.js.map +7 -0
- package/dist/modules/warranty_claims/subscribers/vendor-recovery-reconciliation-undo.js +24 -0
- package/dist/modules/warranty_claims/subscribers/vendor-recovery-reconciliation-undo.js.map +7 -0
- package/dist/modules/warranty_claims/subscribers/vendor-recovery-reconciliation.js +26 -0
- package/dist/modules/warranty_claims/subscribers/vendor-recovery-reconciliation.js.map +7 -0
- package/dist/modules/warranty_claims/widgets/dashboard/claims-queue/config.js +15 -0
- package/dist/modules/warranty_claims/widgets/dashboard/claims-queue/config.js.map +7 -0
- package/dist/modules/warranty_claims/widgets/dashboard/claims-queue/widget.client.js +197 -0
- package/dist/modules/warranty_claims/widgets/dashboard/claims-queue/widget.client.js.map +7 -0
- package/dist/modules/warranty_claims/widgets/dashboard/claims-queue/widget.js +28 -0
- package/dist/modules/warranty_claims/widgets/dashboard/claims-queue/widget.js.map +7 -0
- package/dist/modules/warranty_claims/widgets/injection/claims-ai-trigger/widget.client.js +418 -0
- package/dist/modules/warranty_claims/widgets/injection/claims-ai-trigger/widget.client.js.map +7 -0
- package/dist/modules/warranty_claims/widgets/injection/claims-ai-trigger/widget.js +18 -0
- package/dist/modules/warranty_claims/widgets/injection/claims-ai-trigger/widget.js.map +7 -0
- package/dist/modules/warranty_claims/widgets/injection/customer-claims-tab/widget.js +17 -0
- package/dist/modules/warranty_claims/widgets/injection/customer-claims-tab/widget.js.map +7 -0
- package/dist/modules/warranty_claims/widgets/injection/customer-claims-tab.js +146 -0
- package/dist/modules/warranty_claims/widgets/injection/customer-claims-tab.js.map +7 -0
- package/dist/modules/warranty_claims/widgets/injection/order-claims-tab/widget.js +17 -0
- package/dist/modules/warranty_claims/widgets/injection/order-claims-tab/widget.js.map +7 -0
- package/dist/modules/warranty_claims/widgets/injection/order-claims-tab.js +147 -0
- package/dist/modules/warranty_claims/widgets/injection/order-claims-tab.js.map +7 -0
- package/dist/modules/warranty_claims/widgets/injection-table.js +38 -0
- package/dist/modules/warranty_claims/widgets/injection-table.js.map +7 -0
- package/dist/modules/warranty_claims/widgets/notifications/WarrantyClaimNotificationRenderer.js +223 -0
- package/dist/modules/warranty_claims/widgets/notifications/WarrantyClaimNotificationRenderer.js.map +7 -0
- package/dist/modules/warranty_claims/widgets/notifications/index.js +5 -0
- package/dist/modules/warranty_claims/widgets/notifications/index.js.map +7 -0
- package/dist/modules/warranty_claims/workers/sla-escalation-sweep.js +334 -0
- package/dist/modules/warranty_claims/workers/sla-escalation-sweep.js.map +7 -0
- package/generated/entities/sync_run/index.ts +1 -0
- package/generated/entities/warranty_claim/index.ts +51 -0
- package/generated/entities/warranty_claim_event/index.ts +11 -0
- package/generated/entities/warranty_claim_line/index.ts +37 -0
- package/generated/entities/warranty_claim_registration/index.ts +20 -0
- package/generated/entities/warranty_claim_sequence/index.ts +7 -0
- package/generated/entities/warranty_claim_settings/index.ts +20 -0
- package/generated/entities/warranty_claim_sla_signal/index.ts +11 -0
- package/generated/entities/warranty_troubleshooting_guide/index.ts +11 -0
- package/generated/entities/warranty_vendor_policy/index.ts +14 -0
- package/generated/entities.ids.generated.ts +12 -0
- package/generated/entity-fields-registry.ts +201 -0
- package/package.json +7 -7
- package/src/helpers/integration/api.ts +10 -3
- package/src/helpers/integration/salesFixtures.ts +17 -7
- package/src/modules/attachments/di.ts +30 -1
- package/src/modules/attachments/fields/attachment.tsx +215 -23
- package/src/modules/attachments/i18n/de.json +5 -0
- package/src/modules/attachments/i18n/en.json +5 -0
- package/src/modules/attachments/i18n/es.json +5 -0
- package/src/modules/attachments/i18n/ko.json +5 -0
- package/src/modules/attachments/i18n/pl.json +5 -0
- package/src/modules/attachments/lib/scoped-upload-service.ts +257 -0
- package/src/modules/attachments/lib/target-access-service.ts +57 -0
- package/src/modules/auth/api/sidebar/preferences/route.ts +2 -2
- package/src/modules/auth/lib/backendChrome.tsx +2 -2
- package/src/modules/auth/services/sidebarPreferencesService.ts +22 -3
- package/src/modules/customers/api/companies/route.ts +1 -0
- package/src/modules/customers/backend/customers/companies-v2/[id]/page.tsx +4 -2
- package/src/modules/customers/backend/customers/people-v2/[id]/page.tsx +4 -2
- package/src/modules/customers/components/detail/assignableStaff.ts +14 -177
- package/src/modules/customers/lib/assignableStaff.ts +177 -0
- package/src/modules/data_sync/AGENTS.md +86 -8
- package/src/modules/data_sync/api/options.ts +1 -0
- package/src/modules/data_sync/api/run.ts +17 -0
- package/src/modules/data_sync/api/runs/[id]/retry.ts +32 -1
- package/src/modules/data_sync/api/runs/[id]/route.ts +1 -0
- package/src/modules/data_sync/backend/data-sync/page.tsx +73 -17
- package/src/modules/data_sync/backend/data-sync/runs/[id]/page.tsx +62 -2
- package/src/modules/data_sync/components/IntegrationScheduleTab.tsx +28 -15
- package/src/modules/data_sync/components/RunParameterFields.tsx +229 -0
- package/src/modules/data_sync/data/entities.ts +4 -1
- package/src/modules/data_sync/data/validators.ts +3 -0
- package/src/modules/data_sync/i18n/de.json +10 -0
- package/src/modules/data_sync/i18n/en.json +10 -0
- package/src/modules/data_sync/i18n/es.json +10 -0
- package/src/modules/data_sync/i18n/ko.json +10 -0
- package/src/modules/data_sync/i18n/pl.json +10 -0
- package/src/modules/data_sync/lib/adapter.ts +88 -0
- package/src/modules/data_sync/lib/batch-stream.ts +117 -0
- package/src/modules/data_sync/lib/run-parameters.ts +196 -0
- package/src/modules/data_sync/lib/start-run.ts +2 -0
- package/src/modules/data_sync/lib/sync-engine.ts +193 -114
- package/src/modules/data_sync/lib/sync-run-service.ts +2 -0
- package/src/modules/data_sync/migrations/.snapshot-open-mercato.json +17 -1
- package/src/modules/data_sync/migrations/Migration20260810120000.ts +13 -0
- package/src/modules/data_sync/workers/sync-scheduled.ts +32 -1
- package/src/modules/inbox_ops/api/emails/[id]/reprocess/route.ts +4 -0
- package/src/modules/inbox_ops/api/extract/route.ts +4 -0
- package/src/modules/inbox_ops/api/webhook/inbound.ts +4 -0
- package/src/modules/query_index/di.ts +153 -56
- package/src/modules/sales/commands/documents.ts +56 -12
- package/src/modules/sales/i18n/de.json +1 -0
- package/src/modules/sales/i18n/en.json +1 -0
- package/src/modules/sales/i18n/es.json +1 -0
- package/src/modules/sales/i18n/ko.json +1 -0
- package/src/modules/sales/i18n/pl.json +1 -0
- package/src/modules/warranty_claims/AGENTS.md +49 -0
- package/src/modules/warranty_claims/acl.ts +71 -0
- package/src/modules/warranty_claims/ai-agents.ts +189 -0
- package/src/modules/warranty_claims/ai-tools.ts +711 -0
- package/src/modules/warranty_claims/api/ai/assess/route.ts +371 -0
- package/src/modules/warranty_claims/api/ai/draft-reply/route.ts +149 -0
- package/src/modules/warranty_claims/api/ai/suggest/route.ts +190 -0
- package/src/modules/warranty_claims/api/assign/route.ts +142 -0
- package/src/modules/warranty_claims/api/assignees/route.ts +102 -0
- package/src/modules/warranty_claims/api/credit-memo/route.ts +191 -0
- package/src/modules/warranty_claims/api/entitlement/route.ts +224 -0
- package/src/modules/warranty_claims/api/events/route.ts +226 -0
- package/src/modules/warranty_claims/api/external/claims/route.ts +528 -0
- package/src/modules/warranty_claims/api/lines/route.ts +275 -0
- package/src/modules/warranty_claims/api/openapi.ts +28 -0
- package/src/modules/warranty_claims/api/portal/attachments/route.ts +547 -0
- package/src/modules/warranty_claims/api/portal/claims/[id]/route.ts +195 -0
- package/src/modules/warranty_claims/api/portal/claims/[id]/shared.ts +125 -0
- package/src/modules/warranty_claims/api/portal/claims/[id]/submit/route.ts +82 -0
- package/src/modules/warranty_claims/api/portal/claims/[id]/withdraw/route.ts +87 -0
- package/src/modules/warranty_claims/api/portal/claims/route.ts +579 -0
- package/src/modules/warranty_claims/api/portal/events/route.ts +260 -0
- package/src/modules/warranty_claims/api/portal/options/route.ts +113 -0
- package/src/modules/warranty_claims/api/portal/orders/lines/route.ts +258 -0
- package/src/modules/warranty_claims/api/portal/orders/route.ts +206 -0
- package/src/modules/warranty_claims/api/portal/troubleshooting/route.ts +151 -0
- package/src/modules/warranty_claims/api/receiving/route.ts +215 -0
- package/src/modules/warranty_claims/api/registrations/route.ts +417 -0
- package/src/modules/warranty_claims/api/replacement-order/route.ts +188 -0
- package/src/modules/warranty_claims/api/return-label/route.ts +291 -0
- package/src/modules/warranty_claims/api/risk/route.ts +112 -0
- package/src/modules/warranty_claims/api/route.ts +543 -0
- package/src/modules/warranty_claims/api/sales-return/route.ts +183 -0
- package/src/modules/warranty_claims/api/settings-general/route.ts +230 -0
- package/src/modules/warranty_claims/api/stats/route.ts +306 -0
- package/src/modules/warranty_claims/api/submit/route.ts +146 -0
- package/src/modules/warranty_claims/api/transition/route.ts +144 -0
- package/src/modules/warranty_claims/api/troubleshooting-guides/route.ts +295 -0
- package/src/modules/warranty_claims/api/vendor-policies/route.ts +351 -0
- package/src/modules/warranty_claims/api/vendor-recovery/route.ts +148 -0
- package/src/modules/warranty_claims/api/vendor-recovery-suggestions/route.ts +167 -0
- package/src/modules/warranty_claims/backend/components/AiAssessButtons.tsx +389 -0
- package/src/modules/warranty_claims/backend/components/ClaimStageProgress.tsx +65 -0
- package/src/modules/warranty_claims/backend/components/ClaimStatusBadge.tsx +137 -0
- package/src/modules/warranty_claims/backend/components/ClaimsKpiStrip.tsx +169 -0
- package/src/modules/warranty_claims/backend/components/EntitlementLookupBadge.tsx +203 -0
- package/src/modules/warranty_claims/backend/components/ReceivingPanel.tsx +300 -0
- package/src/modules/warranty_claims/backend/components/ReturnLabelPanel.tsx +292 -0
- package/src/modules/warranty_claims/backend/components/TroubleshootingWalker.tsx +125 -0
- package/src/modules/warranty_claims/backend/components/VendorRecoverySuggestionsPanel.tsx +217 -0
- package/src/modules/warranty_claims/backend/components/WarrantyWorkspace.tsx +66 -0
- package/src/modules/warranty_claims/backend/components/claimReasonOptions.ts +57 -0
- package/src/modules/warranty_claims/backend/components/claimSla.tsx +127 -0
- package/src/modules/warranty_claims/backend/components/orderLookup.ts +109 -0
- package/src/modules/warranty_claims/backend/components/productLookup.tsx +433 -0
- package/src/modules/warranty_claims/backend/components/useUserDisplayNames.ts +66 -0
- package/src/modules/warranty_claims/backend/page.meta.ts +12 -0
- package/src/modules/warranty_claims/backend/page.tsx +1302 -0
- package/src/modules/warranty_claims/backend/warranty_claims/[id]/edit/page.meta.ts +12 -0
- package/src/modules/warranty_claims/backend/warranty_claims/[id]/edit/page.tsx +531 -0
- package/src/modules/warranty_claims/backend/warranty_claims/[id]/page.meta.ts +12 -0
- package/src/modules/warranty_claims/backend/warranty_claims/[id]/page.tsx +2599 -0
- package/src/modules/warranty_claims/backend/warranty_claims/create/page.meta.ts +12 -0
- package/src/modules/warranty_claims/backend/warranty_claims/create/page.tsx +1533 -0
- package/src/modules/warranty_claims/backend/warranty_claims/registrations/[id]/edit/page.meta.ts +13 -0
- package/src/modules/warranty_claims/backend/warranty_claims/registrations/[id]/edit/page.tsx +136 -0
- package/src/modules/warranty_claims/backend/warranty_claims/registrations/create/page.meta.ts +13 -0
- package/src/modules/warranty_claims/backend/warranty_claims/registrations/create/page.tsx +52 -0
- package/src/modules/warranty_claims/backend/warranty_claims/registrations/page.meta.ts +15 -0
- package/src/modules/warranty_claims/backend/warranty_claims/registrations/page.tsx +555 -0
- package/src/modules/warranty_claims/backend/warranty_claims/registrations/registrationForm.tsx +295 -0
- package/src/modules/warranty_claims/backend/warranty_claims/settings/page.meta.ts +15 -0
- package/src/modules/warranty_claims/backend/warranty_claims/settings/page.tsx +1903 -0
- package/src/modules/warranty_claims/backend/warranty_claims/troubleshooting-guides/TroubleshootingTreeBuilder.tsx +550 -0
- package/src/modules/warranty_claims/backend/warranty_claims/troubleshooting-guides/[id]/edit/page.meta.ts +15 -0
- package/src/modules/warranty_claims/backend/warranty_claims/troubleshooting-guides/[id]/edit/page.tsx +141 -0
- package/src/modules/warranty_claims/backend/warranty_claims/troubleshooting-guides/create/page.meta.ts +15 -0
- package/src/modules/warranty_claims/backend/warranty_claims/troubleshooting-guides/create/page.tsx +57 -0
- package/src/modules/warranty_claims/backend/warranty_claims/troubleshooting-guides/page.meta.ts +17 -0
- package/src/modules/warranty_claims/backend/warranty_claims/troubleshooting-guides/page.tsx +477 -0
- package/src/modules/warranty_claims/backend/warranty_claims/troubleshooting-guides/troubleshootingGuideForm.tsx +214 -0
- package/src/modules/warranty_claims/backend/warranty_claims/vendor-policies/[id]/edit/page.meta.ts +15 -0
- package/src/modules/warranty_claims/backend/warranty_claims/vendor-policies/[id]/edit/page.tsx +137 -0
- package/src/modules/warranty_claims/backend/warranty_claims/vendor-policies/create/page.meta.ts +15 -0
- package/src/modules/warranty_claims/backend/warranty_claims/vendor-policies/create/page.tsx +51 -0
- package/src/modules/warranty_claims/backend/warranty_claims/vendor-policies/page.meta.ts +17 -0
- package/src/modules/warranty_claims/backend/warranty_claims/vendor-policies/page.tsx +506 -0
- package/src/modules/warranty_claims/backend/warranty_claims/vendor-policies/vendorPolicyForm.tsx +220 -0
- package/src/modules/warranty_claims/ce.ts +44 -0
- package/src/modules/warranty_claims/commands/claim-lines.ts +1082 -0
- package/src/modules/warranty_claims/commands/claims.ts +3364 -0
- package/src/modules/warranty_claims/commands/index.ts +3 -0
- package/src/modules/warranty_claims/commands/settings.ts +198 -0
- package/src/modules/warranty_claims/commands/shared.ts +212 -0
- package/src/modules/warranty_claims/data/constants.ts +37 -0
- package/src/modules/warranty_claims/data/enrichers.ts +165 -0
- package/src/modules/warranty_claims/data/entities.ts +663 -0
- package/src/modules/warranty_claims/data/validators.ts +634 -0
- package/src/modules/warranty_claims/di.ts +34 -0
- package/src/modules/warranty_claims/encryption.ts +26 -0
- package/src/modules/warranty_claims/events.ts +81 -0
- package/src/modules/warranty_claims/extension-points.ts +16 -0
- package/src/modules/warranty_claims/frontend/[orgSlug]/portal/claims/[id]/page.meta.ts +9 -0
- package/src/modules/warranty_claims/frontend/[orgSlug]/portal/claims/[id]/page.tsx +1037 -0
- package/src/modules/warranty_claims/frontend/[orgSlug]/portal/claims/new/page.meta.ts +9 -0
- package/src/modules/warranty_claims/frontend/[orgSlug]/portal/claims/new/page.tsx +1409 -0
- package/src/modules/warranty_claims/frontend/[orgSlug]/portal/claims/page.meta.ts +16 -0
- package/src/modules/warranty_claims/frontend/[orgSlug]/portal/claims/page.tsx +304 -0
- package/src/modules/warranty_claims/i18n/de.json +1270 -0
- package/src/modules/warranty_claims/i18n/en.json +1270 -0
- package/src/modules/warranty_claims/i18n/es.json +1270 -0
- package/src/modules/warranty_claims/i18n/ko.json +1270 -0
- package/src/modules/warranty_claims/i18n/pl.json +1270 -0
- package/src/modules/warranty_claims/index.ts +13 -0
- package/src/modules/warranty_claims/lib/aiAssist.ts +677 -0
- package/src/modules/warranty_claims/lib/apiIdsFilter.ts +12 -0
- package/src/modules/warranty_claims/lib/assigneeNames.ts +184 -0
- package/src/modules/warranty_claims/lib/attachmentVisibility.ts +5 -0
- package/src/modules/warranty_claims/lib/bulkFeedback.ts +6 -0
- package/src/modules/warranty_claims/lib/businessHours.ts +333 -0
- package/src/modules/warranty_claims/lib/businessHoursForm.ts +206 -0
- package/src/modules/warranty_claims/lib/claimTypeConfig.ts +49 -0
- package/src/modules/warranty_claims/lib/decryptionSafety.ts +19 -0
- package/src/modules/warranty_claims/lib/deskFilters.ts +131 -0
- package/src/modules/warranty_claims/lib/dictionaries.ts +212 -0
- package/src/modules/warranty_claims/lib/dictionaryLabels.ts +16 -0
- package/src/modules/warranty_claims/lib/emailIntake.ts +123 -0
- package/src/modules/warranty_claims/lib/escalation.ts +83 -0
- package/src/modules/warranty_claims/lib/externalIntake.ts +362 -0
- package/src/modules/warranty_claims/lib/grading.ts +23 -0
- package/src/modules/warranty_claims/lib/listSegments.ts +19 -0
- package/src/modules/warranty_claims/lib/orderOwnership.ts +58 -0
- package/src/modules/warranty_claims/lib/portalAttachmentUpload.ts +11 -0
- package/src/modules/warranty_claims/lib/portalAttachmentValidation.ts +115 -0
- package/src/modules/warranty_claims/lib/portalClaimAccess.ts +37 -0
- package/src/modules/warranty_claims/lib/quantity.ts +15 -0
- package/src/modules/warranty_claims/lib/risk.ts +371 -0
- package/src/modules/warranty_claims/lib/settings.ts +76 -0
- package/src/modules/warranty_claims/lib/stateMachine.ts +130 -0
- package/src/modules/warranty_claims/lib/timelineFilters.ts +22 -0
- package/src/modules/warranty_claims/lib/triage.ts +366 -0
- package/src/modules/warranty_claims/lib/troubleshooting.ts +157 -0
- package/src/modules/warranty_claims/lib/tryResolve.ts +7 -0
- package/src/modules/warranty_claims/lib/vendorPolicyRecovery.ts +182 -0
- package/src/modules/warranty_claims/lib/warrantyPreview.ts +20 -0
- package/src/modules/warranty_claims/migrations/.snapshot-open-mercato.json +3525 -0
- package/src/modules/warranty_claims/migrations/Migration20260703191537_warranty_claims.ts +38 -0
- package/src/modules/warranty_claims/migrations/Migration20260704115605_warranty_claims.ts +17 -0
- package/src/modules/warranty_claims/migrations/Migration20260704230000_warranty_claims.ts +17 -0
- package/src/modules/warranty_claims/migrations/Migration20260705121601_warranty_claims.ts +37 -0
- package/src/modules/warranty_claims/migrations/Migration20260709120000_warranty_claims.ts +25 -0
- package/src/modules/warranty_claims/migrations/Migration20260710023607_warranty_claims.ts +13 -0
- package/src/modules/warranty_claims/migrations/Migration20260716203936_warranty_claims.ts +15 -0
- package/src/modules/warranty_claims/migrations/Migration20260717150000_warranty_claims.ts +13 -0
- package/src/modules/warranty_claims/migrations/Migration20260719120000_warranty_claims.ts +13 -0
- package/src/modules/warranty_claims/migrations/Migration20260813103053_warranty_claims.ts +11 -0
- package/src/modules/warranty_claims/notifications.client.ts +78 -0
- package/src/modules/warranty_claims/notifications.ts +101 -0
- package/src/modules/warranty_claims/search.ts +199 -0
- package/src/modules/warranty_claims/services/adjudicationEvaluator.ts +344 -0
- package/src/modules/warranty_claims/services/claimNumberGenerator.ts +69 -0
- package/src/modules/warranty_claims/services/entitlementResolver.ts +102 -0
- package/src/modules/warranty_claims/services/returnLabelProvider.ts +30 -0
- package/src/modules/warranty_claims/setup.ts +154 -0
- package/src/modules/warranty_claims/subscribers/auto-vendor-recovery.ts +140 -0
- package/src/modules/warranty_claims/subscribers/claim-assigned-notification.ts +54 -0
- package/src/modules/warranty_claims/subscribers/claim-customer-reply-notification.ts +68 -0
- package/src/modules/warranty_claims/subscribers/claim-status-notification.ts +100 -0
- package/src/modules/warranty_claims/subscribers/claim-submitted-notification.ts +53 -0
- package/src/modules/warranty_claims/subscribers/email-to-claim.ts +175 -0
- package/src/modules/warranty_claims/subscribers/return-shipment-tracking.ts +226 -0
- package/src/modules/warranty_claims/subscribers/vendor-recovery-reconciliation-undo.ts +28 -0
- package/src/modules/warranty_claims/subscribers/vendor-recovery-reconciliation.ts +31 -0
- package/src/modules/warranty_claims/widgets/dashboard/claims-queue/config.ts +15 -0
- package/src/modules/warranty_claims/widgets/dashboard/claims-queue/widget.client.tsx +237 -0
- package/src/modules/warranty_claims/widgets/dashboard/claims-queue/widget.ts +27 -0
- package/src/modules/warranty_claims/widgets/injection/claims-ai-trigger/widget.client.tsx +527 -0
- package/src/modules/warranty_claims/widgets/injection/claims-ai-trigger/widget.ts +37 -0
- package/src/modules/warranty_claims/widgets/injection/customer-claims-tab/widget.ts +21 -0
- package/src/modules/warranty_claims/widgets/injection/customer-claims-tab.tsx +210 -0
- package/src/modules/warranty_claims/widgets/injection/order-claims-tab/widget.ts +21 -0
- package/src/modules/warranty_claims/widgets/injection/order-claims-tab.tsx +210 -0
- package/src/modules/warranty_claims/widgets/injection-table.ts +36 -0
- package/src/modules/warranty_claims/widgets/notifications/WarrantyClaimNotificationRenderer.tsx +253 -0
- package/src/modules/warranty_claims/widgets/notifications/index.ts +1 -0
- package/src/modules/warranty_claims/workers/sla-escalation-sweep.ts +450 -0
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
import { readApiResultOrThrow } from '@open-mercato/ui/backend/utils/apiCall'
|
|
2
|
+
import type { FilterOption } from '@open-mercato/shared/lib/query/advanced-filter'
|
|
3
|
+
|
|
4
|
+
export type AssignableStaffMember = {
|
|
5
|
+
teamMemberId: string
|
|
6
|
+
userId: string
|
|
7
|
+
displayName: string
|
|
8
|
+
email: string | null
|
|
9
|
+
teamName: string | null
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
type AssignableStaffResponse = {
|
|
13
|
+
items?: Array<Record<string, unknown>>
|
|
14
|
+
total?: number
|
|
15
|
+
page?: number
|
|
16
|
+
pageSize?: number
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
export type AssignableStaffMembersPage = {
|
|
20
|
+
items: AssignableStaffMember[]
|
|
21
|
+
/**
|
|
22
|
+
* How many rows the server served for this page, before the dedupe below.
|
|
23
|
+
* "Load more" guards must measure this rather than `items.length`: a deduped
|
|
24
|
+
* length shorter than the served page reads as a short page and terminates
|
|
25
|
+
* the sequence early, stranding the rest of the roster.
|
|
26
|
+
*/
|
|
27
|
+
servedCount: number
|
|
28
|
+
total: number
|
|
29
|
+
page: number
|
|
30
|
+
pageSize: number
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
// The assignable-staff roster is owned by the optional, ejectable `staff` module.
|
|
34
|
+
// When that module is disabled, its `/api/staff/team-members/assignable` endpoint is
|
|
35
|
+
// absent and the request resolves to 404. Customers UI (deals / people / companies
|
|
36
|
+
// owner filters, role-assignment dialogs) is core and always enabled, so it must not
|
|
37
|
+
// break in that case — a missing staff module simply means there is no roster to
|
|
38
|
+
// offer. Treat the 404 as an empty page and let any other failure propagate.
|
|
39
|
+
function isAssignableEndpointMissing(error: unknown): boolean {
|
|
40
|
+
return (
|
|
41
|
+
typeof error === 'object' &&
|
|
42
|
+
error !== null &&
|
|
43
|
+
(error as { status?: unknown }).status === 404
|
|
44
|
+
)
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
export async function fetchAssignableStaffMembersPage(
|
|
48
|
+
query: string,
|
|
49
|
+
options?: { page?: number; pageSize?: number; signal?: AbortSignal },
|
|
50
|
+
): Promise<AssignableStaffMembersPage> {
|
|
51
|
+
const page = options?.page ?? 1
|
|
52
|
+
const pageSize = options?.pageSize ?? 24
|
|
53
|
+
const params = new URLSearchParams()
|
|
54
|
+
params.set('page', String(page))
|
|
55
|
+
params.set('pageSize', String(pageSize))
|
|
56
|
+
const normalizedQuery = query.trim()
|
|
57
|
+
if (normalizedQuery.length > 0) {
|
|
58
|
+
params.set('search', normalizedQuery)
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
let data: AssignableStaffResponse
|
|
62
|
+
try {
|
|
63
|
+
data = await readApiResultOrThrow<AssignableStaffResponse>(
|
|
64
|
+
`/api/staff/team-members/assignable?${params.toString()}`,
|
|
65
|
+
options?.signal ? { signal: options.signal } : undefined,
|
|
66
|
+
)
|
|
67
|
+
} catch (error) {
|
|
68
|
+
if (isAssignableEndpointMissing(error)) {
|
|
69
|
+
return { items: [], servedCount: 0, total: 0, page, pageSize }
|
|
70
|
+
}
|
|
71
|
+
throw error
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
const rawItems = Array.isArray(data?.items) ? data.items : []
|
|
75
|
+
const deduped = new Map<string, AssignableStaffMember>()
|
|
76
|
+
|
|
77
|
+
for (const item of rawItems) {
|
|
78
|
+
const userId =
|
|
79
|
+
typeof item?.userId === 'string'
|
|
80
|
+
? item.userId
|
|
81
|
+
: typeof item?.user_id === 'string'
|
|
82
|
+
? item.user_id
|
|
83
|
+
: null
|
|
84
|
+
if (!userId || deduped.has(userId)) continue
|
|
85
|
+
|
|
86
|
+
const user =
|
|
87
|
+
item?.user && typeof item.user === 'object'
|
|
88
|
+
? (item.user as Record<string, unknown>)
|
|
89
|
+
: null
|
|
90
|
+
const team =
|
|
91
|
+
item?.team && typeof item.team === 'object'
|
|
92
|
+
? (item.team as Record<string, unknown>)
|
|
93
|
+
: null
|
|
94
|
+
|
|
95
|
+
const displayName =
|
|
96
|
+
typeof item?.displayName === 'string' && item.displayName.trim().length > 0
|
|
97
|
+
? item.displayName.trim()
|
|
98
|
+
: typeof item?.display_name === 'string' && item.display_name.trim().length > 0
|
|
99
|
+
? item.display_name.trim()
|
|
100
|
+
: null
|
|
101
|
+
const email =
|
|
102
|
+
user && typeof user.email === 'string' && user.email.trim().length > 0
|
|
103
|
+
? user.email.trim()
|
|
104
|
+
: typeof item?.email === 'string' && item.email.trim().length > 0
|
|
105
|
+
? item.email.trim()
|
|
106
|
+
: null
|
|
107
|
+
const teamName =
|
|
108
|
+
typeof item?.teamName === 'string' && item.teamName.trim().length > 0
|
|
109
|
+
? item.teamName.trim()
|
|
110
|
+
: typeof item?.team_name === 'string' && item.team_name.trim().length > 0
|
|
111
|
+
? item.team_name.trim()
|
|
112
|
+
: team && typeof team.name === 'string' && team.name.trim().length > 0
|
|
113
|
+
? team.name.trim()
|
|
114
|
+
: null
|
|
115
|
+
const teamMemberId =
|
|
116
|
+
typeof item?.teamMemberId === 'string'
|
|
117
|
+
? item.teamMemberId
|
|
118
|
+
: typeof item?.team_member_id === 'string'
|
|
119
|
+
? item.team_member_id
|
|
120
|
+
: typeof item?.id === 'string'
|
|
121
|
+
? item.id
|
|
122
|
+
: userId
|
|
123
|
+
|
|
124
|
+
deduped.set(userId, {
|
|
125
|
+
teamMemberId,
|
|
126
|
+
userId,
|
|
127
|
+
displayName: displayName ?? email ?? userId,
|
|
128
|
+
email,
|
|
129
|
+
teamName,
|
|
130
|
+
})
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
return {
|
|
134
|
+
items: Array.from(deduped.values()),
|
|
135
|
+
servedCount: rawItems.length,
|
|
136
|
+
total:
|
|
137
|
+
typeof data?.total === 'number' && Number.isFinite(data.total)
|
|
138
|
+
? data.total
|
|
139
|
+
: deduped.size,
|
|
140
|
+
page:
|
|
141
|
+
typeof data?.page === 'number' && Number.isFinite(data.page)
|
|
142
|
+
? data.page
|
|
143
|
+
: page,
|
|
144
|
+
pageSize:
|
|
145
|
+
typeof data?.pageSize === 'number' && Number.isFinite(data.pageSize)
|
|
146
|
+
? data.pageSize
|
|
147
|
+
: pageSize,
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
export async function fetchAssignableStaffMembers(
|
|
152
|
+
query: string,
|
|
153
|
+
options?: { pageSize?: number; signal?: AbortSignal },
|
|
154
|
+
): Promise<AssignableStaffMember[]> {
|
|
155
|
+
const result = await fetchAssignableStaffMembersPage(query, options)
|
|
156
|
+
return result.items
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
export function mapAssignableStaffToFilterOptions(items: AssignableStaffMember[]): FilterOption[] {
|
|
160
|
+
return items.map((item) => ({
|
|
161
|
+
value: item.userId,
|
|
162
|
+
label: item.email && item.email !== item.displayName
|
|
163
|
+
? `${item.displayName} (${item.email})`
|
|
164
|
+
: item.displayName,
|
|
165
|
+
tone: 'neutral',
|
|
166
|
+
}))
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
export function ensureCurrentUserFilterOption(
|
|
170
|
+
options: FilterOption[],
|
|
171
|
+
currentUserId: string,
|
|
172
|
+
fallbackLabel: string,
|
|
173
|
+
): FilterOption[] {
|
|
174
|
+
const trimmed = currentUserId.trim()
|
|
175
|
+
if (!trimmed || options.some((option) => option.value === trimmed)) return options
|
|
176
|
+
return [{ value: trimmed, label: fallbackLabel, tone: 'neutral' }, ...options]
|
|
177
|
+
}
|
|
@@ -54,6 +54,8 @@ packages/core/src/modules/data_sync/
|
|
|
54
54
|
│ ├── adapter-registry.ts # Register/get adapters by providerKey
|
|
55
55
|
│ ├── id-mapping.ts # External ID ↔ local ID lookup and storage
|
|
56
56
|
│ ├── queue.ts # Queue helper for enqueuing sync jobs
|
|
57
|
+
│ ├── batch-stream.ts # Drives adapter streams; one root span per batch
|
|
58
|
+
│ ├── run-parameters.ts # Validate/coerce operator run parameters vs. adapter declaration
|
|
57
59
|
│ ├── sync-engine.ts # Orchestrates streaming import/export with progress
|
|
58
60
|
│ └── sync-run-service.ts # CRUD for SyncRun + cursor management
|
|
59
61
|
├── api/
|
|
@@ -97,23 +99,97 @@ Provider modules implement `DataSyncAdapter`:
|
|
|
97
99
|
|
|
98
100
|
```typescript
|
|
99
101
|
interface DataSyncAdapter {
|
|
100
|
-
providerKey: string
|
|
101
|
-
direction: 'import' | 'export' | 'bidirectional'
|
|
102
|
-
supportedEntities: string[]
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
102
|
+
readonly providerKey: string
|
|
103
|
+
readonly direction: 'import' | 'export' | 'bidirectional'
|
|
104
|
+
readonly supportedEntities: string[]
|
|
105
|
+
readonly runMode?: 'generic' | 'provider'
|
|
106
|
+
readonly operationalTelemetry?: boolean
|
|
107
|
+
readonly runParameters?: RunParameter[]
|
|
108
|
+
|
|
109
|
+
streamImport?(input: StreamImportInput): AsyncIterable<ImportBatch>
|
|
110
|
+
streamExport?(input: StreamExportInput): AsyncIterable<ExportBatch>
|
|
111
|
+
getInitialCursor?(input: { entityType: string; scope: TenantScope }): Promise<string | null>
|
|
112
|
+
getMapping(input: { entityType: string; scope: TenantScope }): Promise<DataMapping>
|
|
107
113
|
persistsSharedCursor?(entityType: string): boolean
|
|
108
|
-
validateConnection?(
|
|
114
|
+
validateConnection?(input: {
|
|
115
|
+
entityType: string
|
|
116
|
+
credentials: Record<string, unknown>
|
|
117
|
+
mapping: DataMapping
|
|
118
|
+
scope: TenantScope
|
|
119
|
+
}): Promise<ValidationResult>
|
|
109
120
|
}
|
|
110
121
|
```
|
|
111
122
|
|
|
123
|
+
All hooks take a single input object — see `lib/adapter.ts` for the authoritative
|
|
124
|
+
shapes.
|
|
125
|
+
|
|
112
126
|
Register adapters in your provider module's `di.ts`:
|
|
113
127
|
```typescript
|
|
114
128
|
registerDataSyncAdapter(myAdapter)
|
|
115
129
|
```
|
|
116
130
|
|
|
131
|
+
### Run parameters
|
|
132
|
+
|
|
133
|
+
Adapters may declare optional, operator-facing `runParameters`. The dashboard
|
|
134
|
+
renders a generic input per declared parameter, the run API validates and
|
|
135
|
+
coerces the submitted values against the declaration (`lib/run-parameters.ts`),
|
|
136
|
+
and the normalized values are persisted on the run and passed back on
|
|
137
|
+
`StreamImportInput.parameters` / `StreamExportInput.parameters`. Keep
|
|
138
|
+
declarations provider-agnostic — never special-case a provider in `data_sync`.
|
|
139
|
+
|
|
140
|
+
```typescript
|
|
141
|
+
runParameters: [
|
|
142
|
+
{ key: 'dryRun', label: 'Dry run', type: 'boolean', defaultValue: false,
|
|
143
|
+
description: 'Report what would change without writing.' },
|
|
144
|
+
{ key: 'startId', label: 'Start id', type: 'number', min: 0 },
|
|
145
|
+
{ key: 'mode', label: 'Mode', type: 'select',
|
|
146
|
+
options: [{ value: 'fast' }, { value: 'thorough' }] },
|
|
147
|
+
// Only offered when the orders entity is selected:
|
|
148
|
+
{ key: 'bulk', label: 'Bulk reindex', type: 'boolean', entityType: 'sales_orders' },
|
|
149
|
+
]
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
Supported types: `boolean`, `string`, `number`, `select`. A parameter may set
|
|
153
|
+
`direction` to apply to only `import` or `export` runs, and `entityType`
|
|
154
|
+
(a `supportedEntities` value or an array of them) to apply only when that
|
|
155
|
+
entity is selected — use it when a knob only makes sense for one entity's run.
|
|
156
|
+
Params without `direction` / `entityType` apply to every run. Blank values fall
|
|
157
|
+
back to `defaultValue`; values are retained across retries.
|
|
158
|
+
|
|
159
|
+
Run parameters are **operator-visible and stored in clear text** on
|
|
160
|
+
`sync_runs.parameters`, and rendered read-only on the run detail page. Never
|
|
161
|
+
declare a parameter that carries a secret — credentials belong in
|
|
162
|
+
`integrationCredentialsService`.
|
|
163
|
+
|
|
164
|
+
**Translation.** `label`, `description` and `placeholder` are literals, so an
|
|
165
|
+
adapter shipping to more than one locale MUST also set `labelKey` /
|
|
166
|
+
`descriptionKey` / `placeholderKey`; the dashboard prefers the key and falls
|
|
167
|
+
back to the literal. Validation failures come back from the API as
|
|
168
|
+
`{ key, code, params, message }` — the UI renders `code` through
|
|
169
|
+
`data_sync.runParameters.errors.<code>` and only uses the English `message` as
|
|
170
|
+
a fallback, so never rely on the sentence text.
|
|
171
|
+
|
|
172
|
+
**Retry re-validates.** `POST /api/data_sync/runs/[id]/retry` re-runs the stored
|
|
173
|
+
values through `normalizeRunParameters` against the *current* declaration:
|
|
174
|
+
parameters you have since removed or re-scoped fall away, and a value that no
|
|
175
|
+
longer satisfies its declaration fails the retry with a 422 instead of reaching
|
|
176
|
+
the adapter. An adapter therefore never receives a set the run API would reject
|
|
177
|
+
today — tighten a bound freely.
|
|
178
|
+
|
|
179
|
+
The integration detail page's schedule table also starts runs, but has no room
|
|
180
|
+
for a parameter form: it submits the declared defaults and refuses the run when
|
|
181
|
+
an applicable parameter is `required` with no `defaultValue`, pointing the
|
|
182
|
+
operator at the Data Sync dashboard. Declare a `defaultValue` for anything that
|
|
183
|
+
should stay launchable from that table.
|
|
184
|
+
|
|
185
|
+
**Recurring runs get your defaults, not operator values.** A `SyncSchedule`
|
|
186
|
+
cannot yet pin a chosen value, but the scheduled worker normalizes an empty
|
|
187
|
+
input against your declaration, so a scheduled run hands you the same set an
|
|
188
|
+
untouched dashboard form would — never an empty object. Write your adapter
|
|
189
|
+
against the defaults, not against `undefined`. A default that violates its own
|
|
190
|
+
declaration skips the scheduled run with a logged error instead of starting it
|
|
191
|
+
with a half-applied set.
|
|
192
|
+
|
|
117
193
|
If the sync provider needs bootstrap credentials, mappings, locales, channels, or other default sync settings after a fresh install, implement a provider-owned env preset flow:
|
|
118
194
|
|
|
119
195
|
- read env vars in the provider package
|
|
@@ -131,6 +207,8 @@ If the sync provider needs bootstrap credentials, mappings, locales, channels, o
|
|
|
131
207
|
- **Resume**: Retry reads the last successful cursor, resumes from there
|
|
132
208
|
- **Progress**: Linked to `ProgressJob` via `progressJobId` for `ProgressTopBar` display
|
|
133
209
|
- **Cancellation**: Via `progressService.isCancellationRequested()`
|
|
210
|
+
- **Tracing**: The engine emits one **root** span per batch (`data_sync.import.batch` / `data_sync.export.batch`) linked back to the run, covering the adapter's read *and* the engine's bookkeeping. Adapters MUST NOT hand-roll their own batch span — they cannot root it, so a multi-day run would ride on the single sampling decision taken for the request that triggered it. Inner spans an adapter creates nest under the batch span normally. The final read — the one that finds the stream drained — is traced as `data_sync.import.drain` / `data_sync.export.drain`, so N batches emit exactly N `*.batch` spans plus one `*.drain`.
|
|
211
|
+
- **Stream shape**: The engine drives the adapter's async iterator explicitly (`batch-stream.ts`) so the span wraps `next()`, where a generator does its real work before yielding. Closing follows the language's own `IteratorClose` rules, so `finally` blocks in an adapter generator behave exactly as under `for await`: no `return()` when the stream exhausts or `next()` throws (already closed), `return()` with its failure surfaced on an early stop, and `return()` with its failure swallowed when the engine's own handler threw (that error wins). Keep cleanup in `finally`.
|
|
134
212
|
|
|
135
213
|
## Queue Names
|
|
136
214
|
|
|
@@ -55,6 +55,7 @@ export async function GET(req: Request) {
|
|
|
55
55
|
runMode: adapter.runMode ?? 'generic',
|
|
56
56
|
canStartRun: adapter.runMode !== 'provider',
|
|
57
57
|
supportedEntities: adapter.supportedEntities,
|
|
58
|
+
runParameters: adapter.runParameters ?? [],
|
|
58
59
|
hasCredentials: Boolean(credentials),
|
|
59
60
|
isEnabled,
|
|
60
61
|
settingsPath: `/backend/integrations/${encodeURIComponent(integration.id)}`,
|
|
@@ -10,6 +10,7 @@ import type { SyncRunService } from '../lib/sync-run-service'
|
|
|
10
10
|
import { runSyncSchema } from '../data/validators'
|
|
11
11
|
import { startDataSyncRun } from '../lib/start-run'
|
|
12
12
|
import { getDataSyncAdapter } from '../lib/adapter-registry'
|
|
13
|
+
import { normalizeRunParameters } from '../lib/run-parameters'
|
|
13
14
|
import { resolveStartCursor } from '../lib/start-cursor'
|
|
14
15
|
import {
|
|
15
16
|
runCrudMutationGuardAfterSuccess,
|
|
@@ -78,6 +79,19 @@ export async function POST(req: Request) {
|
|
|
78
79
|
return NextResponse.json({ error: 'Unsupported entity type for this integration' }, { status: 422 })
|
|
79
80
|
}
|
|
80
81
|
|
|
82
|
+
const normalizedParameters = normalizeRunParameters(
|
|
83
|
+
adapter.runParameters,
|
|
84
|
+
parsed.data.direction,
|
|
85
|
+
parsed.data.parameters,
|
|
86
|
+
parsed.data.entityType,
|
|
87
|
+
)
|
|
88
|
+
if (!normalizedParameters.ok) {
|
|
89
|
+
return NextResponse.json(
|
|
90
|
+
{ error: 'Invalid run parameters', details: { parameters: normalizedParameters.errors } },
|
|
91
|
+
{ status: 422 },
|
|
92
|
+
)
|
|
93
|
+
}
|
|
94
|
+
|
|
81
95
|
const integrationEnabled = await integrationStateService.isEnabled(parsed.data.integrationId, scope)
|
|
82
96
|
if (!integrationEnabled) {
|
|
83
97
|
return NextResponse.json({ error: 'Integration is disabled' }, { status: 409 })
|
|
@@ -133,6 +147,9 @@ export async function POST(req: Request) {
|
|
|
133
147
|
cursor,
|
|
134
148
|
triggeredBy: parsed.data.triggeredBy ?? auth.sub,
|
|
135
149
|
batchSize: parsed.data.batchSize,
|
|
150
|
+
parameters: Object.keys(normalizedParameters.values).length > 0
|
|
151
|
+
? normalizedParameters.values
|
|
152
|
+
: null,
|
|
136
153
|
},
|
|
137
154
|
})
|
|
138
155
|
|
|
@@ -8,6 +8,7 @@ import type { ProgressService } from '../../../../progress/lib/progressService'
|
|
|
8
8
|
import type { SyncRunService } from '../../../lib/sync-run-service'
|
|
9
9
|
import { retrySyncSchema } from '../../../data/validators'
|
|
10
10
|
import { startDataSyncRun } from '../../../lib/start-run'
|
|
11
|
+
import { normalizeRunParameters } from '../../../lib/run-parameters'
|
|
11
12
|
import { resolveAdapterForIntegration, resolveStartCursor } from '../../../lib/start-cursor'
|
|
12
13
|
import {
|
|
13
14
|
runCrudMutationGuardAfterSuccess,
|
|
@@ -88,11 +89,40 @@ export async function POST(req: Request, ctx: { params?: Promise<{ id?: string }
|
|
|
88
89
|
return NextResponse.json(guardResult.body, { status: guardResult.status })
|
|
89
90
|
}
|
|
90
91
|
|
|
92
|
+
// A retry replays the stored parameters, but the adapter's declaration may
|
|
93
|
+
// have moved on since the original run — a parameter dropped, a bound
|
|
94
|
+
// tightened, a select option removed, a scope narrowed. Re-normalize against
|
|
95
|
+
// the current declaration so an adapter never receives a set the run API
|
|
96
|
+
// would reject today. Undeclared keys fall away silently; values that are now
|
|
97
|
+
// invalid stop the retry, because the operator has no form here to fix them.
|
|
98
|
+
const retryAdapter = resolveAdapterForIntegration(previous.integrationId)
|
|
99
|
+
const normalizedParameters = normalizeRunParameters(
|
|
100
|
+
retryAdapter?.runParameters,
|
|
101
|
+
previous.direction,
|
|
102
|
+
previous.parameters ?? null,
|
|
103
|
+
previous.entityType,
|
|
104
|
+
)
|
|
105
|
+
if (!normalizedParameters.ok) {
|
|
106
|
+
return NextResponse.json(
|
|
107
|
+
{
|
|
108
|
+
error: 'Stored run parameters are no longer valid for this integration. Start a new run from the Data Sync dashboard.',
|
|
109
|
+
// Machine-readable so the dashboard can render the way out in the
|
|
110
|
+
// operator's language; the English sentence stays for non-UI callers.
|
|
111
|
+
code: 'parametersStale',
|
|
112
|
+
details: { parameters: normalizedParameters.errors },
|
|
113
|
+
},
|
|
114
|
+
{ status: 422 },
|
|
115
|
+
)
|
|
116
|
+
}
|
|
117
|
+
const retryParameters = Object.keys(normalizedParameters.values).length > 0
|
|
118
|
+
? normalizedParameters.values
|
|
119
|
+
: null
|
|
120
|
+
|
|
91
121
|
const cursor = parsedBody.data.fromBeginning
|
|
92
122
|
? null
|
|
93
123
|
: previous.cursor ?? await resolveStartCursor({
|
|
94
124
|
syncRunService,
|
|
95
|
-
adapter:
|
|
125
|
+
adapter: retryAdapter,
|
|
96
126
|
integrationId: previous.integrationId,
|
|
97
127
|
entityType: previous.entityType,
|
|
98
128
|
direction: previous.direction,
|
|
@@ -113,6 +143,7 @@ export async function POST(req: Request, ctx: { params?: Promise<{ id?: string }
|
|
|
113
143
|
cursor,
|
|
114
144
|
triggeredBy: auth.sub,
|
|
115
145
|
batchSize: 100,
|
|
146
|
+
parameters: retryParameters,
|
|
116
147
|
progressJob: {
|
|
117
148
|
name: `Retry data sync ${previous.integrationId} — ${previous.entityType}`,
|
|
118
149
|
},
|
|
@@ -69,6 +69,7 @@ export async function GET(req: Request, ctx: { params?: Promise<{ id?: string }>
|
|
|
69
69
|
batchesCompleted: run.batchesCompleted,
|
|
70
70
|
lastError: run.lastError ?? null,
|
|
71
71
|
progressJobId: run.progressJobId ?? null,
|
|
72
|
+
parameters: run.parameters ?? null,
|
|
72
73
|
progressJob: progressJob
|
|
73
74
|
? {
|
|
74
75
|
id: progressJob.id,
|
|
@@ -44,6 +44,18 @@ import {
|
|
|
44
44
|
ShieldCheck,
|
|
45
45
|
} from 'lucide-react'
|
|
46
46
|
import { getSyncRunStatusVariant, getSyncSummaryVariant } from '../../lib/syncRunStatus'
|
|
47
|
+
import type { RunParameter } from '../../lib/adapter'
|
|
48
|
+
import { getApplicableRunParameters } from '../../lib/run-parameters'
|
|
49
|
+
import {
|
|
50
|
+
RunParameterFields,
|
|
51
|
+
buildDefaultRunParameterValues,
|
|
52
|
+
buildRetryFailureMessage,
|
|
53
|
+
buildRunFailureMessage,
|
|
54
|
+
buildRunParametersPayload,
|
|
55
|
+
type RetryFailureBody,
|
|
56
|
+
type RunFailureBody,
|
|
57
|
+
type RunParameterFormValue,
|
|
58
|
+
} from '../../components/RunParameterFields'
|
|
47
59
|
|
|
48
60
|
type SyncRunRow = {
|
|
49
61
|
id: string
|
|
@@ -73,6 +85,7 @@ type SyncOption = {
|
|
|
73
85
|
runMode?: 'generic' | 'provider'
|
|
74
86
|
canStartRun?: boolean
|
|
75
87
|
supportedEntities: string[]
|
|
88
|
+
runParameters?: RunParameter[]
|
|
76
89
|
hasCredentials: boolean
|
|
77
90
|
isEnabled: boolean
|
|
78
91
|
settingsPath: string
|
|
@@ -149,6 +162,7 @@ export default function SyncRunsDashboardPage() {
|
|
|
149
162
|
const [selectedDirection, setSelectedDirection] = React.useState<'import' | 'export'>('import')
|
|
150
163
|
const [batchSize, setBatchSize] = React.useState('100')
|
|
151
164
|
const [fullSync, setFullSync] = React.useState(false)
|
|
165
|
+
const [paramValues, setParamValues] = React.useState<Record<string, RunParameterFormValue>>({})
|
|
152
166
|
const [scheduleEditor, setScheduleEditor] = React.useState<SyncScheduleEditorState>(() => buildDefaultScheduleState(''))
|
|
153
167
|
const [isLoadingSchedule, setIsLoadingSchedule] = React.useState(false)
|
|
154
168
|
const [isSavingSchedule, setIsSavingSchedule] = React.useState(false)
|
|
@@ -231,6 +245,27 @@ export default function SyncRunsDashboardPage() {
|
|
|
231
245
|
[selectedIntegration],
|
|
232
246
|
)
|
|
233
247
|
|
|
248
|
+
const runParameters = React.useMemo(
|
|
249
|
+
() => getApplicableRunParameters(
|
|
250
|
+
selectedIntegration?.runParameters,
|
|
251
|
+
selectedDirection,
|
|
252
|
+
// Pass the state through as-is. Before an entity is chosen it is '',
|
|
253
|
+
// which matches no `entityType` and so hides scoped parameters — the
|
|
254
|
+
// wanted outcome. Mapping '' to `undefined` would mean "skip entity
|
|
255
|
+
// scoping" and show every scoped parameter instead.
|
|
256
|
+
selectedEntityType,
|
|
257
|
+
),
|
|
258
|
+
[selectedIntegration, selectedDirection, selectedEntityType],
|
|
259
|
+
)
|
|
260
|
+
|
|
261
|
+
React.useEffect(() => {
|
|
262
|
+
setParamValues(buildDefaultRunParameterValues(runParameters))
|
|
263
|
+
}, [runParameters])
|
|
264
|
+
|
|
265
|
+
const updateParamValue = React.useCallback((key: string, value: RunParameterFormValue) => {
|
|
266
|
+
setParamValues((current) => ({ ...current, [key]: value }))
|
|
267
|
+
}, [])
|
|
268
|
+
|
|
234
269
|
React.useEffect(() => {
|
|
235
270
|
if (!selectedIntegration) {
|
|
236
271
|
setSelectedEntityType('')
|
|
@@ -325,7 +360,7 @@ export default function SyncRunsDashboardPage() {
|
|
|
325
360
|
flash(t('data_sync.runs.detail.retrySuccess'), 'success')
|
|
326
361
|
setReloadToken((token) => token + 1)
|
|
327
362
|
} else {
|
|
328
|
-
flash(
|
|
363
|
+
flash(buildRetryFailureMessage(call.result as RetryFailureBody | null, t), 'error')
|
|
329
364
|
}
|
|
330
365
|
}, [t])
|
|
331
366
|
|
|
@@ -352,27 +387,25 @@ export default function SyncRunsDashboardPage() {
|
|
|
352
387
|
return
|
|
353
388
|
}
|
|
354
389
|
|
|
390
|
+
const parameters = buildRunParametersPayload(runParameters, paramValues)
|
|
391
|
+
const requestBody: Record<string, unknown> = {
|
|
392
|
+
integrationId: selectedIntegration.integrationId,
|
|
393
|
+
entityType: selectedEntityType,
|
|
394
|
+
direction: selectedDirection,
|
|
395
|
+
batchSize: parsedBatchSize,
|
|
396
|
+
fullSync,
|
|
397
|
+
}
|
|
398
|
+
if (runParameters.length > 0) requestBody.parameters = parameters
|
|
399
|
+
|
|
355
400
|
try {
|
|
356
401
|
const call = await runMutation({
|
|
357
402
|
// optimistic-lock-exempt: starts a new sync run (create), not a concurrent record edit
|
|
358
403
|
operation: () => apiCall<{ id: string }>('/api/data_sync/run', {
|
|
359
404
|
method: 'POST',
|
|
360
405
|
headers: { 'Content-Type': 'application/json' },
|
|
361
|
-
body: JSON.stringify(
|
|
362
|
-
integrationId: selectedIntegration.integrationId,
|
|
363
|
-
entityType: selectedEntityType,
|
|
364
|
-
direction: selectedDirection,
|
|
365
|
-
batchSize: parsedBatchSize,
|
|
366
|
-
fullSync,
|
|
367
|
-
}),
|
|
406
|
+
body: JSON.stringify(requestBody),
|
|
368
407
|
}, { fallback: null }),
|
|
369
|
-
mutationPayload:
|
|
370
|
-
integrationId: selectedIntegration.integrationId,
|
|
371
|
-
entityType: selectedEntityType,
|
|
372
|
-
direction: selectedDirection,
|
|
373
|
-
batchSize: parsedBatchSize,
|
|
374
|
-
fullSync,
|
|
375
|
-
},
|
|
408
|
+
mutationPayload: requestBody,
|
|
376
409
|
context: {
|
|
377
410
|
operation: 'create',
|
|
378
411
|
actionId: 'start-sync-run',
|
|
@@ -381,7 +414,11 @@ export default function SyncRunsDashboardPage() {
|
|
|
381
414
|
})
|
|
382
415
|
|
|
383
416
|
if (!call.ok || !call.result?.id) {
|
|
384
|
-
flash((
|
|
417
|
+
flash(buildRunFailureMessage(
|
|
418
|
+
call.result as RunFailureBody | null,
|
|
419
|
+
t('data_sync.dashboard.start.error', 'Failed to start sync run'),
|
|
420
|
+
t,
|
|
421
|
+
), 'error')
|
|
385
422
|
return
|
|
386
423
|
}
|
|
387
424
|
|
|
@@ -392,7 +429,7 @@ export default function SyncRunsDashboardPage() {
|
|
|
392
429
|
const message = error instanceof Error ? error.message : t('data_sync.dashboard.start.error', 'Failed to start sync run')
|
|
393
430
|
flash(message, 'error')
|
|
394
431
|
}
|
|
395
|
-
}, [batchSize, fullSync, router, runMutation, selectedDirection, selectedEntityType, selectedIntegration, t])
|
|
432
|
+
}, [batchSize, fullSync, paramValues, router, runMutation, runParameters, selectedDirection, selectedEntityType, selectedIntegration, t])
|
|
396
433
|
|
|
397
434
|
const handleSaveSchedule = React.useCallback(async () => {
|
|
398
435
|
if (!selectedIntegration || !selectedEntityType) return
|
|
@@ -784,6 +821,25 @@ export default function SyncRunsDashboardPage() {
|
|
|
784
821
|
</div>
|
|
785
822
|
</div>
|
|
786
823
|
|
|
824
|
+
{runParameters.length > 0 ? (
|
|
825
|
+
<div className="mt-4 space-y-3">
|
|
826
|
+
<div className="flex items-center gap-2">
|
|
827
|
+
<Settings2 className="size-4 text-muted-foreground" />
|
|
828
|
+
<h4 className="text-sm font-semibold">
|
|
829
|
+
{t('data_sync.dashboard.start.parameters', 'Run parameters')}
|
|
830
|
+
</h4>
|
|
831
|
+
</div>
|
|
832
|
+
<p className="text-xs text-muted-foreground">
|
|
833
|
+
{t('data_sync.dashboard.start.parametersHelp', 'Optional values this integration accepts for the manual run.')}
|
|
834
|
+
</p>
|
|
835
|
+
<RunParameterFields
|
|
836
|
+
params={runParameters}
|
|
837
|
+
values={paramValues}
|
|
838
|
+
onChange={updateParamValue}
|
|
839
|
+
/>
|
|
840
|
+
</div>
|
|
841
|
+
) : null}
|
|
842
|
+
|
|
787
843
|
<div className="mt-4 flex flex-wrap items-center justify-between gap-3">
|
|
788
844
|
<p className="text-xs text-muted-foreground">
|
|
789
845
|
{t('data_sync.dashboard.start.runNowFootnote', 'Manual runs show progress immediately and land on the run detail page after launch.')}
|